41 DhtMessage(
const std::string& s = {},
const Blob& msg = {}) : service(s), data(msg) {}
43 std::string getService()
const {
49 static bool storePolicy(InfoHash key, std::shared_ptr<Value>& value,
const InfoHash& from,
const SockAddr&);
54 friend std::ostream& operator<< (std::ostream&,
const DhtMessage&);
58 MSGPACK_DEFINE(service, data)
118 ImMessage(dht::Value::Id
id, std::string&& m,
long d = 0)
119 : id(
id), msg(std::move(m)), date(d) {}
120 ImMessage(dht::Value::Id
id, std::string &&dt, std::string &&m,
long d = 0)
121 : id(
id), msg(std::move(m)), datatype(std::move(dt)), date(d) {}
122 ImMessage(dht::Value::Id
id, std::string &&dt, std::string &&m, std::map<std::string, std::string> &&md,
long d = 0)
123 : id(
id), msg(std::move(m)), datatype(std::move(dt)), metadatas(std::move(md)), date(d) {}
125 virtual void unpackValue(
const Value& v)
override {
127 SignedValue::unpackValue(v);
131 return SignedValue::getFilter();
135 dht::Value::Id
id {0};
137 std::string datatype;
138 std::map<std::string, std::string> metadatas;
140 ImStatus status {ImStatus::NONE};
142 MSGPACK_DEFINE_MAP(
id, msg, date, status, datatype, metadatas)
154 TrustRequest(std::string s, std::string ci = {}) : service(s), conversationId(ci) {}
155 TrustRequest(std::string s, std::string ci,
const Blob& d) : service(s), conversationId(ci), payload(d) {}
158 return EncryptedValue::getFilter();
162 std::string conversationId;
164 bool confirm {
false};
165 MSGPACK_DEFINE_MAP(service, conversationId, payload, confirm)
177 IceCandidates(Value::Id msg_id,
Blob ice) : id(msg_id), ice_data(ice) {}
180 return EncryptedValue::getFilter();
183 template <
typename Packer>
184 void msgpack_pack(Packer& pk)
const
189 pk.pack_bin(ice_data.size());
190 pk.pack_bin_body((
const char*)ice_data.data(), ice_data.size());
194 pk.pack_array(ice_data.size());
195 for (uint8_t b : ice_data)
200 virtual void msgpack_unpack(
const msgpack::object& o)
202 if (o.type != msgpack::type::ARRAY)
throw msgpack::type_error();
203 if (o.via.array.size < 2)
throw msgpack::type_error();
204 id = o.via.array.ptr[0].as<Value::Id>();
222 IpServiceAnnouncement(sa_family_t family = AF_UNSPEC, in_port_t p = 0) {
223 addr.setFamily(family);
227 IpServiceAnnouncement(
const SockAddr& sa) : addr(sa) {}
229 IpServiceAnnouncement(
const Blob& b) {
230 msgpack_unpack(unpackMsg(b).get());
233 template <
typename Packer>
234 void msgpack_pack(Packer& pk)
const
236 pk.pack_bin(addr.getLength());
237 pk.pack_bin_body((
const char*)addr.get(), addr.getLength());
240 virtual void msgpack_unpack(
const msgpack::object& o)
242 if (o.type == msgpack::type::BIN)
243 addr = {(sockaddr*)o.via.bin.ptr, (socklen_t)o.via.bin.size};
245 throw msgpack::type_error();
248 in_port_t getPort()
const {
249 return addr.getPort();
251 void setPort(in_port_t p) {
255 const SockAddr& getPeerAddr()
const {
259 virtual const ValueType& getType()
const {
263 static bool storePolicy(InfoHash, std::shared_ptr<Value>&,
const InfoHash&,
const SockAddr&);
266 friend std::ostream& operator<< (std::ostream&,
const IpServiceAnnouncement&);