diff --git a/include/opendht/value.h b/include/opendht/value.h index f4f5daa8f8ecb605a6dd0eda183786bb45c56106..dac624f55dc5fea3e0bded97a717ebc29bb72506 100644 --- a/include/opendht/value.h +++ b/include/opendht/value.h @@ -804,11 +804,11 @@ struct OPENDHT_PUBLIC Where * * @return the resulting Where instance. */ - Where& id(Value::Id id) { + Where&& id(Value::Id id) { FieldValue fv {Value::Field::Id, id}; if (std::find(filters_.begin(), filters_.end(), fv) == filters_.end()) filters_.emplace_back(std::move(fv)); - return *this; + return std::move(*this); } /** @@ -818,11 +818,11 @@ struct OPENDHT_PUBLIC Where * * @return the resulting Where instance. */ - Where& valueType(ValueType::Id type) { + Where&& valueType(ValueType::Id type) { FieldValue fv {Value::Field::ValueType, type}; if (std::find(filters_.begin(), filters_.end(), fv) == filters_.end()) filters_.emplace_back(std::move(fv)); - return *this; + return std::move(*this); } /** @@ -832,11 +832,11 @@ struct OPENDHT_PUBLIC Where * * @return the resulting Where instance. */ - Where& owner(InfoHash owner_pk_hash) { + Where&& owner(InfoHash owner_pk_hash) { FieldValue fv {Value::Field::OwnerPk, owner_pk_hash}; if (std::find(filters_.begin(), filters_.end(), fv) == filters_.end()) filters_.emplace_back(std::move(fv)); - return *this; + return std::move(*this); } /** @@ -846,11 +846,11 @@ struct OPENDHT_PUBLIC Where * * @return the resulting Where instance. */ - Where& seq(uint16_t seq_no) { + Where&& seq(uint16_t seq_no) { FieldValue fv {Value::Field::SeqNum, seq_no}; if (std::find(filters_.begin(), filters_.end(), fv) == filters_.end()) filters_.emplace_back(std::move(fv)); - return *this; + return std::move(*this); } /** @@ -860,11 +860,11 @@ struct OPENDHT_PUBLIC Where * * @return the resulting Where instance. */ - Where& userType(std::string_view user_type) { + Where&& userType(std::string_view user_type) { FieldValue fv {Value::Field::UserType, Blob {user_type.begin(), user_type.end()}}; if (std::find(filters_.begin(), filters_.end(), fv) == filters_.end()) filters_.emplace_back(std::move(fv)); - return *this; + return std::move(*this); } /** @@ -873,7 +873,10 @@ struct OPENDHT_PUBLIC Where * @return the resulting Value::Filter. */ Value::Filter getFilter() const { - if (filters_.empty()) return {}; + if (filters_.empty()) + return {}; + if (filters_.size() == 1) + return filters_[0].getLocalFilter(); std::vector<Value::Filter> fset; fset.reserve(filters_.size()); for (const auto& f : filters_) { diff --git a/src/securedht.cpp b/src/securedht.cpp index 03f9490d8b3f360a9663ca3f913a81438e58efde..e6ebe0c301874704cd4952aed7ab21b5b45bb7e1 100644 --- a/src/securedht.cpp +++ b/src/securedht.cpp @@ -326,7 +326,7 @@ SecureDht::listen(const InfoHash& id, GetCallback cb, Value::Filter f, Where w) void SecureDht::putSigned(const InfoHash& hash, Sp<Value> val, DoneCallback callback, bool permanent) { - if (not key_) { + if (not key_ or not hash or not val) { if (callback) callback(false, {}); return; @@ -365,7 +365,7 @@ SecureDht::putSigned(const InfoHash& hash, Sp<Value> val, DoneCallback callback, dht_->put(hash, val, callback, time_point::max(), permanent); }, Value::IdFilter(val->id), - std::move(Where().id(val->id)) + Where().id(val->id) ); }