25enum class ImStatus : uint8_t {
32MSGPACK_ADD_ENUM(dht::ImStatus)
41 DhtMessage(std::string s = {},
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 {
70 from = v.
owner->getId();
71 BaseClass::unpackValue(v);
75 return [](
const Value& v){
return v.isSigned(); };
88 virtual void unpackValue(
const Value& v)
override {
90 BaseClass::unpackValue(v);
94 return Value::Filter::chain(
95 BaseClass::getFilter(),
115 ImMessage(dht::Value::Id
id, std::string&& m,
long d = 0)
116 : id(
id), msg(std::move(m)), date(d) {}
117 ImMessage(dht::Value::Id
id, std::string&& dt, std::string&& m,
long d = 0)
118 : id(
id), msg(std::move(m)), datatype(std::move(dt)), date(d) {}
120 virtual void unpackValue(
const Value& v)
override {
122 SignedValue::unpackValue(v);
126 dht::Value::Id
id {0};
128 std::string datatype;
130 ImStatus status {ImStatus::NONE};
132 MSGPACK_DEFINE_MAP(
id, msg, date, status, datatype)
148 return EncryptedValue::getFilter();
153 bool confirm {
false};
154 MSGPACK_DEFINE_MAP(service, payload, confirm)
169 return EncryptedValue::getFilter();
172 template <
typename Packer>
173 void msgpack_pack(Packer& pk)
const
178 pk.pack_bin(ice_data.size());
179 pk.pack_bin_body((
const char*)ice_data.data(), ice_data.size());
183 pk.pack_array(ice_data.size());
184 for (uint8_t b : ice_data)
189 virtual void msgpack_unpack(msgpack::object o)
191 if (o.type != msgpack::type::ARRAY)
throw msgpack::type_error();
192 if (o.via.array.size < 2)
throw msgpack::type_error();
193 id = o.via.array.ptr[0].as<Value::Id>();
212 addr.setFamily(family);
219 msgpack_unpack(unpackMsg(b).get());
222 template <
typename Packer>
223 void msgpack_pack(Packer& pk)
const
225 pk.pack_bin(addr.getLength());
226 pk.pack_bin_body((
const char*)addr.get(), addr.getLength());
229 virtual void msgpack_unpack(msgpack::object o)
231 if (o.type == msgpack::type::BIN)
232 addr = {(sockaddr*)o.via.bin.ptr, (socklen_t)o.via.bin.size};
234 throw msgpack::type_error();
237 in_port_t getPort()
const {
238 return addr.getPort();
240 void setPort(in_port_t p) {
244 const SockAddr& getPeerAddr()
const {
248 virtual const ValueType& getType()
const {
262OPENDHT_PUBLIC
extern const std::array<std::reference_wrapper<const ValueType>, 5> DEFAULT_TYPES;
264OPENDHT_PUBLIC
extern const std::array<std::reference_wrapper<const ValueType>, 1> DEFAULT_INSECURE_TYPES;
OPENDHT_PUBLIC Blob unpackBlob(msgpack::object &o)
std::vector< uint8_t > Blob
std::shared_ptr< const crypto::PublicKey > owner