Home | History | Annotate | Download | only in privet
      1 // Copyright 2015 The Weave Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef LIBWEAVE_SRC_PRIVET_PRIVET_TYPES_H_
      6 #define LIBWEAVE_SRC_PRIVET_PRIVET_TYPES_H_
      7 
      8 #include <string>
      9 
     10 #include <base/logging.h>
     11 #include <weave/error.h>
     12 #include <weave/settings.h>
     13 
     14 namespace weave {
     15 namespace privet {
     16 
     17 enum class CryptoType {
     18   kSpake_p224,
     19 };
     20 
     21 enum class AuthType {
     22   kAnonymous,
     23   kPairing,
     24   kLocal,
     25 };
     26 
     27 enum class WifiType {
     28   kWifi24,
     29   kWifi50,
     30 };
     31 
     32 struct UserAppId {
     33   UserAppId() = default;
     34 
     35   UserAppId(AuthType auth_type,
     36             const std::vector<uint8_t>& user_id,
     37             const std::vector<uint8_t>& app_id)
     38       : type{auth_type},
     39         user{user_id},
     40         app{user_id.empty() ? user_id : app_id} {}
     41 
     42   bool IsEmpty() const { return user.empty(); }
     43 
     44   AuthType type{};
     45   std::vector<uint8_t> user;
     46   std::vector<uint8_t> app;
     47 };
     48 
     49 inline bool operator==(const UserAppId& l, const UserAppId& r) {
     50   return l.user == r.user && l.app == r.app;
     51 }
     52 
     53 inline bool operator!=(const UserAppId& l, const UserAppId& r) {
     54   return l.user != r.user || l.app != r.app;
     55 }
     56 
     57 class UserInfo {
     58  public:
     59   explicit UserInfo(AuthScope scope = AuthScope::kNone,
     60                     const UserAppId& id = {})
     61       : scope_{scope}, id_{scope == AuthScope::kNone ? UserAppId{} : id} {}
     62   AuthScope scope() const { return scope_; }
     63   const UserAppId& id() const { return id_; }
     64 
     65  private:
     66   AuthScope scope_;
     67   UserAppId id_;
     68 };
     69 
     70 class ConnectionState final {
     71  public:
     72   enum Status {
     73     kDisabled,
     74     kUnconfigured,
     75     kConnecting,
     76     kOnline,
     77     kOffline,
     78   };
     79 
     80   explicit ConnectionState(Status status) : status_(status) {}
     81   explicit ConnectionState(ErrorPtr error)
     82       : status_(kOffline), error_(std::move(error)) {}
     83 
     84   Status status() const {
     85     CHECK(!error_);
     86     return status_;
     87   }
     88 
     89   bool IsStatusEqual(Status status) const {
     90     if (error_)
     91       return false;
     92     return status_ == status;
     93   }
     94 
     95   const Error* error() const { return error_.get(); }
     96 
     97  private:
     98   Status status_;
     99   ErrorPtr error_;
    100 };
    101 
    102 class SetupState final {
    103  public:
    104   enum Status {
    105     kNone,
    106     kInProgress,
    107     kSuccess,
    108   };
    109 
    110   explicit SetupState(Status status) : status_(status) {}
    111   explicit SetupState(ErrorPtr error)
    112       : status_(kNone), error_(std::move(error)) {}
    113 
    114   Status status() const {
    115     CHECK(!error_);
    116     return status_;
    117   }
    118 
    119   bool IsStatusEqual(Status status) const {
    120     if (error_)
    121       return false;
    122     return status_ == status;
    123   }
    124 
    125   const Error* error() const { return error_.get(); }
    126 
    127  private:
    128   Status status_;
    129   ErrorPtr error_;
    130 };
    131 
    132 }  // namespace privet
    133 }  // namespace weave
    134 
    135 #endif  // LIBWEAVE_SRC_PRIVET_PRIVET_TYPES_H_
    136