mirror of
https://github.com/savoirfairelinux/opendht.git
synced 2026-11-08 04:21:51 +00:00
values: apply a maximum value size
This commit is contained in:
1 parent
4aebef5e51
commit
f94de5ac2b
3 files changed
+11
-12
No files matched your search
@@ -54,6 +54,8 @@ struct Value;
|
||||
typedef std::function<bool(InfoHash, std::shared_ptr<Value>&, InfoHash, const sockaddr*, socklen_t)> StorePolicy;
|
||||
typedef std::function<bool(InfoHash, const std::shared_ptr<Value>&, std::shared_ptr<Value>&, InfoHash, const sockaddr*, socklen_t)> EditPolicy;
|
||||
|
||||
static constexpr size_t MAX_VALUE_SIZE {1024 * 128};
|
||||
|
||||
struct ValueType {
|
||||
typedef uint16_t Id;
|
||||
ValueType () {}
|
||||
@@ -73,9 +75,7 @@ struct ValueType {
|
||||
// Generic value type
|
||||
static const ValueType USER_DATA;
|
||||
|
||||
static bool DEFAULT_STORE_POLICY(InfoHash, std::shared_ptr<Value>&, InfoHash, const sockaddr*, socklen_t) {
|
||||
return true;
|
||||
}
|
||||
static bool DEFAULT_STORE_POLICY(InfoHash, std::shared_ptr<Value>& v, InfoHash, const sockaddr*, socklen_t);
|
||||
static bool DEFAULT_EDIT_POLICY(InfoHash, const std::shared_ptr<Value>&, std::shared_ptr<Value>&, InfoHash, const sockaddr*, socklen_t) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -28,14 +28,14 @@ std::ostream& operator<< (std::ostream& s, const DhtMessage& v)
|
||||
}
|
||||
|
||||
bool
|
||||
DhtMessage::storePolicy(InfoHash, std::shared_ptr<Value>& v, InfoHash, const sockaddr*, socklen_t)
|
||||
DhtMessage::storePolicy(InfoHash h, std::shared_ptr<Value>& v, InfoHash f, const sockaddr* fa, socklen_t fas)
|
||||
{
|
||||
try {
|
||||
auto msg = unpackMsg<DhtMessage>(v->data);
|
||||
if (msg.service.empty())
|
||||
return false;
|
||||
} catch (const std::exception& e) {}
|
||||
return true;
|
||||
return ValueType::DEFAULT_STORE_POLICY(h, v, f, fa, fas);
|
||||
}
|
||||
|
||||
Value::Filter
|
||||
@@ -68,7 +68,7 @@ std::ostream& operator<< (std::ostream& s, const IpServiceAnnouncement& v)
|
||||
}
|
||||
|
||||
bool
|
||||
IpServiceAnnouncement::storePolicy(InfoHash, std::shared_ptr<Value>& v, InfoHash, const sockaddr* from, socklen_t fromlen)
|
||||
IpServiceAnnouncement::storePolicy(InfoHash h, std::shared_ptr<Value>& v, InfoHash f, const sockaddr* from, socklen_t fromlen)
|
||||
{
|
||||
try {
|
||||
auto msg = unpackMsg<IpServiceAnnouncement>(v->data);
|
||||
@@ -78,7 +78,7 @@ IpServiceAnnouncement::storePolicy(InfoHash, std::shared_ptr<Value>& v, InfoHash
|
||||
sa_addr.setPort(msg.getPort());
|
||||
// argument v is modified (not the value).
|
||||
v = std::make_shared<Value>(IpServiceAnnouncement::TYPE, sa_addr, v->id);
|
||||
return true;
|
||||
return ValueType::DEFAULT_STORE_POLICY(h, v, f, from, fromlen);
|
||||
} catch (const std::exception& e) {}
|
||||
return false;
|
||||
}
|
||||
@@ -89,7 +89,6 @@ const ValueType ImMessage::TYPE = {3, "IM message", std::chrono::minutes(5)};
|
||||
const ValueType TrustRequest::TYPE = {4, "Certificate trust request", std::chrono::hours(24*7)};
|
||||
const ValueType IceCandidates::TYPE = {5, "ICE candidates", std::chrono::minutes(5)};
|
||||
|
||||
|
||||
const std::array<std::reference_wrapper<const ValueType>, 5>
|
||||
DEFAULT_TYPES
|
||||
{{
|
||||
|
||||
+4
-4
@@ -59,10 +59,10 @@ std::ostream& operator<< (std::ostream& s, const Value& v)
|
||||
|
||||
const ValueType ValueType::USER_DATA = {0, "User Data"};
|
||||
|
||||
|
||||
msgpack::unpacked
|
||||
unpackMsg(Blob b) {
|
||||
return msgpack::unpack((const char*)b.data(), b.size());
|
||||
bool
|
||||
ValueType::DEFAULT_STORE_POLICY(InfoHash, std::shared_ptr<Value>& v, InfoHash, const sockaddr*, socklen_t)
|
||||
{
|
||||
return v->data.size() <= MAX_VALUE_SIZE;
|
||||
}
|
||||
|
||||
msgpack::object*
|
||||
|
||||
Reference in new issue
Block a user