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 dht::Value::Id
id {0};
133 std::string datatype;
134 std::map<std::string, std::string> metadatas;
136 ImStatus status {ImStatus::NONE};
138 MSGPACK_DEFINE_MAP(
id, msg, date, status, datatype, metadatas)
150 TrustRequest(std::string s, std::string ci = {}) : service(s), conversationId(ci) {}
151 TrustRequest(std::string s, std::string ci,
const Blob& d) : service(s), conversationId(ci), payload(d) {}
154 return EncryptedValue::getFilter();
158 std::string conversationId;
160 bool confirm {
false};
161 MSGPACK_DEFINE_MAP(service, conversationId, payload, confirm)
173 IceCandidates(Value::Id msg_id,
Blob ice) : id(msg_id), ice_data(ice) {}
176 return EncryptedValue::getFilter();
179 template <
typename Packer>
180 void msgpack_pack(Packer& pk)
const
185 pk.pack_bin(ice_data.size());
186 pk.pack_bin_body((
const char*)ice_data.data(), ice_data.size());
190 pk.pack_array(ice_data.size());
191 for (uint8_t b : ice_data)
196 virtual void msgpack_unpack(
const msgpack::object& o)
198 if (o.type != msgpack::type::ARRAY)
throw msgpack::type_error();
199 if (o.via.array.size < 2)
throw msgpack::type_error();
200 id = o.via.array.ptr[0].as<Value::Id>();
218 IpServiceAnnouncement(sa_family_t family = AF_UNSPEC, in_port_t p = 0) {
219 addr.setFamily(family);
223 IpServiceAnnouncement(
const SockAddr& sa) : addr(sa) {}
225 IpServiceAnnouncement(
const Blob& b) {
226 msgpack_unpack(unpackMsg(b).get());
229 template <
typename Packer>
230 void msgpack_pack(Packer& pk)
const
232 pk.pack_bin(addr.getLength());
233 pk.pack_bin_body((
const char*)addr.get(), addr.getLength());
236 virtual void msgpack_unpack(
const msgpack::object& o)
238 if (o.type == msgpack::type::BIN)
239 addr = {(sockaddr*)o.via.bin.ptr, (socklen_t)o.via.bin.size};
241 throw msgpack::type_error();
244 in_port_t getPort()
const {
245 return addr.getPort();
247 void setPort(in_port_t p) {
251 const SockAddr& getPeerAddr()
const {
255 virtual const ValueType& getType()
const {
259 static bool storePolicy(InfoHash, std::shared_ptr<Value>&,
const InfoHash&,
const SockAddr&);
262 friend std::ostream& operator<< (std::ostream&,
const IpServiceAnnouncement&);