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 UserAppIdUserAppId35 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 IsEmptyUserAppId42 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} {} scope()62 AuthScope scope() const { return scope_; } id()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 ConnectionState(Status status)80 explicit ConnectionState(Status status) : status_(status) {} ConnectionState(ErrorPtr error)81 explicit ConnectionState(ErrorPtr error) 82 : status_(kOffline), error_(std::move(error)) {} 83 status()84 Status status() const { 85 CHECK(!error_); 86 return status_; 87 } 88 IsStatusEqual(Status status)89 bool IsStatusEqual(Status status) const { 90 if (error_) 91 return false; 92 return status_ == status; 93 } 94 error()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 SetupState(Status status)110 explicit SetupState(Status status) : status_(status) {} SetupState(ErrorPtr error)111 explicit SetupState(ErrorPtr error) 112 : status_(kNone), error_(std::move(error)) {} 113 status()114 Status status() const { 115 CHECK(!error_); 116 return status_; 117 } 118 IsStatusEqual(Status status)119 bool IsStatusEqual(Status status) const { 120 if (error_) 121 return false; 122 return status_ == status; 123 } 124 error()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