values: apply a maximum value size

This commit is contained in:
Adrien Béraud committed 2015-11-08 16:06:30 -05:00
1 parent 4aebef5e51
commit f94de5ac2b
3 files changed
+11 -12

No files matched your search

+3 -3
View File
@@ -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;
}
+4 -5
View File
@@ -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
View File
@@ -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*