9enum class ImStatus : uint8_t { NONE = 0, TYPING, RECEIVED, READ };
104 ImMessage(dht::Value::Id
id, std::string&& m,
long d = 0)
109 ImMessage(dht::Value::Id
id, std::string&& dt, std::string&& m,
long d = 0)
112 , datatype(std::move(dt))
115 ImMessage(dht::Value::Id
id, std::string&& dt, std::string&& m, std::map<std::string, std::string>&& md,
long d = 0)
118 , datatype(std::move(dt))
119 , metadatas(std::move(md))
123 virtual void unpackValue(
const Value& v)
override
126 SignedValue::unpackValue(v);
129 static Value::Filter getFilter() {
return SignedValue::getFilter(); }
132 dht::Value::Id
id {0};
134 std::string datatype;
135 std::map<std::string, std::string> metadatas;
137 ImStatus status {ImStatus::NONE};
139 MSGPACK_DEFINE_MAP(
id, msg, date, status, datatype, metadatas)
151 TrustRequest(std::string s, std::string ci = {})
155 TrustRequest(std::string s, std::string ci,
const Blob& d)
161 static Value::Filter getFilter() {
return EncryptedValue::getFilter(); }
164 std::string conversationId;
166 bool confirm {
false};
167 MSGPACK_DEFINE_MAP(service, conversationId, payload, confirm)
179 IceCandidates(Value::Id msg_id,
Blob ice)
184 static Value::Filter getFilter() {
return EncryptedValue::getFilter(); }
186 template<
typename Packer>
187 void msgpack_pack(Packer& pk)
const
192 pk.pack_bin(ice_data.size());
193 pk.pack_bin_body((
const char*) ice_data.data(), ice_data.size());
197 pk.pack_array(ice_data.size());
198 for (uint8_t b : ice_data)
203 virtual void msgpack_unpack(
const msgpack::object& o)
205 if (o.type != msgpack::type::ARRAY)
206 throw msgpack::type_error();
207 if (o.via.array.size < 2)
208 throw msgpack::type_error();
209 id = o.via.array.ptr[0].as<Value::Id>();
227 IpServiceAnnouncement(sa_family_t family = AF_UNSPEC, in_port_t p = 0)
229 addr.setFamily(family);
233 IpServiceAnnouncement(
const SockAddr& sa)
237 IpServiceAnnouncement(
const Blob& b) { msgpack_unpack(unpackMsg(b).get()); }
239 template<
typename Packer>
240 void msgpack_pack(Packer& pk)
const
242 pk.pack_bin(addr.getLength());
243 pk.pack_bin_body((
const char*) addr.get(), addr.getLength());
246 virtual void msgpack_unpack(
const msgpack::object& o)
248 if (o.type == msgpack::type::BIN)
249 addr = {(sockaddr*) o.via.bin.ptr, (socklen_t) o.via.bin.size};
251 throw msgpack::type_error();
254 in_port_t getPort()
const {
return addr.getPort(); }
255 void setPort(in_port_t p) { addr.setPort(p); }
257 const SockAddr& getPeerAddr()
const {
return addr; }
259 virtual const ValueType& getType()
const {
return TYPE; }
261 static bool storePolicy(InfoHash, std::shared_ptr<Value>&,
const InfoHash&,
const SockAddr&);
264 friend std::ostream&
operator<<(std::ostream&,
const IpServiceAnnouncement&);