25enum class ImStatus : uint8_t {
32MSGPACK_ADD_ENUM(dht::ImStatus)
41 DhtMessage(
const std::string& s = {},
const Blob& msg = {}) : service(s), data(msg) {}
43 std::string getService()
const {
54 friend std::ostream& operator<< (std::ostream&,
const DhtMessage&);
58 MSGPACK_DEFINE(service, data)
68 virtual void unpackValue(
const Value& v)
override {
71 from = v.
owner->getId();
73 BaseClass::unpackValue(v);
77 return [](
const Value& v){
return v.isSigned(); };
80 Sp<crypto::PublicKey> owner;
91 virtual void unpackValue(
const Value& v)
override {
93 BaseClass::unpackValue(v);
97 return Value::Filter::chain(
98 BaseClass::getFilter(),
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)
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>();
219 addr.setFamily(family);
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 {
269OPENDHT_PUBLIC
extern const std::array<std::reference_wrapper<const ValueType>, 5> DEFAULT_TYPES;
271OPENDHT_PUBLIC
extern const std::array<std::reference_wrapper<const ValueType>, 1> DEFAULT_INSECURE_TYPES;
OPENDHT_PUBLIC Blob unpackBlob(const msgpack::object &o)
std::vector< uint8_t > Blob
std::shared_ptr< crypto::PublicKey > owner