From: Fred Morcos Date: Tue, 30 Jul 2024 12:09:15 +0000 (+0200) Subject: Rename serTo/FromString to (de)serializeTo/FromBuffer X-Git-Tag: rec-5.2.0-alpha1~61^2~6 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=137c5f060f137c8b11a69b8d8bf86372c5cddeb6;p=thirdparty%2Fpdns.git Rename serTo/FromString to (de)serializeTo/FromBuffer --- diff --git a/ext/lmdb-safe/lmdb-typed.hh b/ext/lmdb-safe/lmdb-typed.hh index 18cafa2c1f..14e775e1bc 100644 --- a/ext/lmdb-safe/lmdb-typed.hh +++ b/ext/lmdb-safe/lmdb-typed.hh @@ -45,56 +45,48 @@ unsigned int MDBGetMaxID(MDBRWTransaction& txn, MDBDbi& dbi); */ unsigned int MDBGetRandomID(MDBRWTransaction& txn, MDBDbi& dbi); -/** This is our serialization interface. - You can define your own serToString for your type if you know better -*/ -template -std::string serToString(const T& t) +/** + * This is our serialization interface. It can be specialized for other types. + */ +template +std::string serializeToBuffer(const T& value) { - std::string serial_str; - boost::iostreams::back_insert_device inserter(serial_str); - boost::iostreams::stream > s(inserter); - boost::archive::binary_oarchive oa(s, boost::archive::no_header | boost::archive::no_codecvt); - - oa << t; - return serial_str; + std::string buffer; + boost::iostreams::back_insert_device inserter(buffer); + boost::iostreams::stream> inserterStream(inserter); + boost::archive::binary_oarchive outputArchive(inserterStream, boost::archive::no_header | boost::archive::no_codecvt); + outputArchive << value; + return buffer; } -template -void serFromString(const string_view& str, T& ret) +template +void deserializeFromBuffer(const string_view& buffer, T& value) { - ret = T(); - - boost::iostreams::array_source source(&str[0], str.size()); + value = T(); + boost::iostreams::array_source source(&buffer[0], buffer.size()); boost::iostreams::stream stream(source); - boost::archive::binary_iarchive in_archive(stream, boost::archive::no_header|boost::archive::no_codecvt); - in_archive >> ret; - - /* - std::istringstream istr{str}; - boost::archive::binary_iarchive oi(istr,boost::archive::no_header|boost::archive::no_codecvt ); - oi >> ret; - */ + boost::archive::binary_iarchive inputArchive(stream, boost::archive::no_header | boost::archive::no_codecvt); + inputArchive >> value; } - template -inline std::string keyConv(const T& t); +inline std::string keyConv(const T& value); -template ::value,T>::type* = nullptr> -inline std::string keyConv(const T& t) +template ::value, T>::type* = nullptr> +inline std::string keyConv(const T& value) { - return std::string((char*)&t, sizeof(t)); + return std::string((char*)&value, sizeof(value)); } -// this is how to override specific types.. it is ugly -template::value,T>::type* = nullptr> -inline std::string keyConv(const T& t) +/** + * keyConv specialization for std::string. + */ +template ::value, T>::type* = nullptr> +inline std::string keyConv(const T& value) { - return t; + return value; } - namespace { inline MDBOutVal getKeyFromCombinedKey(MDBInVal combined) { if (combined.d_mdbval.mv_size < sizeof(uint32_t)) { @@ -291,7 +283,7 @@ public: if((*d_parent.d_txn)->get(d_parent.d_parent->d_main, id, data)) return false; - serFromString(data.get(), t); + deserializeFromBuffer(data.get(), t); return true; } @@ -379,10 +371,10 @@ public: if(d_on_index) { if((*d_parent->d_txn)->get(d_parent->d_parent->d_main, d_id, d_data)) throw std::runtime_error("Missing id in constructor"); - serFromString(d_data.get(), d_t); + deserializeFromBuffer(d_data.get(), d_t); } else - serFromString(d_id.get(), d_t); + deserializeFromBuffer(d_id.get(), d_t); } explicit iter_t(Parent* parent, typename Parent::cursor_t&& cursor, const std::string& prefix) : @@ -406,10 +398,10 @@ public: if(d_on_index) { if((*d_parent->d_txn)->get(d_parent->d_parent->d_main, d_id, d_data)) throw std::runtime_error("Missing id in constructor"); - serFromString(d_data.get(), d_t); + deserializeFromBuffer(d_data.get(), d_t); } else - serFromString(d_id.get(), d_t); + deserializeFromBuffer(d_id.get(), d_t); } @@ -474,13 +466,13 @@ public: // if(filter && !filter(data)) // goto next; - serFromString(data.get(), d_t); + deserializeFromBuffer(data.get(), d_t); } else { // if(filter && !filter(data)) // goto next; - serFromString(d_id.get(), d_t); + deserializeFromBuffer(d_id.get(), d_t); } } return *this; @@ -764,7 +756,7 @@ public: // flags = MDB_APPEND; } } - (*d_txn)->put(d_parent->d_main, id, serToString(t), flags); + (*d_txn)->put(d_parent->d_main, id, serializeToBuffer(t), flags); #define insertMacro(N) std::get(d_parent->d_tuple).put(*d_txn, t, id); insertMacro(0); @@ -808,7 +800,7 @@ public: while(!cursor.get(key, data, first ? MDB_FIRST : MDB_NEXT)) { first = false; T t; - serFromString(data.get(), t); + deserializeFromBuffer(data.get(), t); clearIndex(key.get(), t); cursor.del(); } diff --git a/modules/lmdbbackend/lmdbbackend.cc b/modules/lmdbbackend/lmdbbackend.cc index 8f9171eacc..73900ebd08 100644 --- a/modules/lmdbbackend/lmdbbackend.cc +++ b/modules/lmdbbackend/lmdbbackend.cc @@ -905,7 +905,7 @@ BOOST_SERIALIZATION_SPLIT_FREE(DomainInfo); BOOST_IS_BITWISE_SERIALIZABLE(ComboAddress); template <> -std::string serToString(const LMDBBackend::LMDBResourceRecord& lrr) +std::string serializeToBuffer(const LMDBBackend::LMDBResourceRecord& lrr) { std::string ret; uint16_t len = lrr.content.length(); @@ -921,16 +921,16 @@ std::string serToString(const LMDBBackend::LMDBResourceRecord& lrr) } template <> -std::string serToString(const vector& lrrs) +std::string serializeToBuffer(const vector& lrrs) { std::string ret; for (const auto& lrr : lrrs) { - ret += serToString(lrr); + ret += serializeToBuffer(lrr); } return ret; } -static inline size_t serOneRRFromString(const string_view& str, LMDBBackend::LMDBResourceRecord& lrr) +static inline size_t deserializeRRFromBuffer(const string_view& str, LMDBBackend::LMDBResourceRecord& lrr) { uint16_t len; memcpy(&len, &str[0], 2); @@ -945,18 +945,18 @@ static inline size_t serOneRRFromString(const string_view& str, LMDBBackend::LMD } template <> -void serFromString(const string_view& str, LMDBBackend::LMDBResourceRecord& lrr) +void deserializeFromBuffer(const string_view& str, LMDBBackend::LMDBResourceRecord& lrr) { - serOneRRFromString(str, lrr); + deserializeRRFromBuffer(str, lrr); } template <> -void serFromString(const string_view& str, vector& lrrs) +void deserializeFromBuffer(const string_view& str, vector& lrrs) { auto str_copy = str; while (str_copy.size() >= 9) { // minimum length for a record is 10 LMDBBackend::LMDBResourceRecord lrr; - auto rrLength = serOneRRFromString(str_copy, lrr); + auto rrLength = deserializeRRFromBuffer(str_copy, lrr); lrrs.emplace_back(lrr); str_copy.remove_prefix(rrLength); } @@ -1088,7 +1088,7 @@ bool LMDBBackend::feedRecord(const DNSResourceRecord& r, const DNSName& ordernam rrs = _rrs.get(); } - rrs += serToString(lrr); + rrs += serializeToBuffer(lrr); d_rwtxn->txn->put(d_rwtxn->db->dbi, matchName, rrs); @@ -1098,12 +1098,12 @@ bool LMDBBackend::feedRecord(const DNSResourceRecord& r, const DNSName& ordernam lrr.ttl = 0; lrr.content = lrr.qname.toDNSStringLC(); lrr.auth = 0; - string ser = serToString(lrr); + string ser = serializeToBuffer(lrr); d_rwtxn->txn->put(d_rwtxn->db->dbi, co(lrr.domain_id, ordername, QType::NSEC3), ser); lrr.ttl = 1; lrr.content = ordername.toDNSString(); - ser = serToString(lrr); + ser = serializeToBuffer(lrr); d_rwtxn->txn->put(d_rwtxn->db->dbi, co(lrr.domain_id, lrr.qname, QType::NSEC3), ser); } } @@ -1120,7 +1120,7 @@ bool LMDBBackend::feedEnts(int domain_id, map& nonterm) lrr.auth = nt.second; lrr.ordername = true; - std::string ser = serToString(lrr); + std::string ser = serializeToBuffer(lrr); d_rwtxn->txn->put(d_rwtxn->db->dbi, co(domain_id, lrr.qname, QType::ENT), ser); } return true; @@ -1137,21 +1137,21 @@ bool LMDBBackend::feedEnts3(int domain_id, const DNSName& domain, maptxn->put(d_rwtxn->db->dbi, co(domain_id, lrr.qname, QType::ENT), ser); if (!narrow && lrr.auth) { lrr.content = lrr.qname.toDNSString(); lrr.auth = false; lrr.ordername = false; - ser = serToString(lrr); + ser = serializeToBuffer(lrr); ordername = DNSName(toBase32Hex(hashQNameWithSalt(ns3prc, nt.first))); d_rwtxn->txn->put(d_rwtxn->db->dbi, co(domain_id, ordername, QType::NSEC3), ser); lrr.ttl = 1; lrr.content = ordername.toDNSString(); - ser = serToString(lrr); + ser = serializeToBuffer(lrr); d_rwtxn->txn->put(d_rwtxn->db->dbi, co(domain_id, lrr.qname, QType::NSEC3), ser); } } @@ -1196,7 +1196,7 @@ bool LMDBBackend::replaceRRSet(uint32_t domain_id, const DNSName& qname, const Q adjustedRRSet.emplace_back(lrr); } - txn->txn->put(txn->db->dbi, match, serToString(adjustedRRSet)); + txn->txn->put(txn->db->dbi, match, serializeToBuffer(adjustedRRSet)); } if (needCommit) @@ -1522,7 +1522,7 @@ bool LMDBBackend::get(DNSZoneRecord& zr) continue; } - serFromString(d_currentVal.get(), d_currentrrset); + deserializeFromBuffer(d_currentVal.get(), d_currentrrset); d_currentrrsetpos = 0; } else { @@ -1588,7 +1588,7 @@ bool LMDBBackend::getSerial(DomainInfo& di) MDBOutVal val; if (!txn->txn->get(txn->db->dbi, co(di.id, g_rootdnsname, QType::SOA), val)) { LMDBResourceRecord lrr; - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); if (lrr.content.size() >= 5 * sizeof(uint32_t)) { uint32_t serial; // a SOA has five 32 bit fields, the first of which is the serial @@ -1786,7 +1786,7 @@ void LMDBBackend::getUnfreshSecondaryInfos(vector* domains) compoundOrdername co; MDBOutVal val; if (!txn2->txn->get(txn2->db->dbi, co(di.id, g_rootdnsname, QType::SOA), val)) { - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); memcpy(&st, &lrr.content[lrr.content.size() - sizeof(soatimes)], sizeof(soatimes)); if ((time_t)(di.last_check + ntohl(st.refresh)) > now) { // still fresh return false; @@ -2093,7 +2093,7 @@ bool LMDBBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qna } if (co.getQType(key.getNoStripHeader()) == QType::NSEC3) { - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); if (!lrr.ttl) // the kind of NSEC3 we need break; } @@ -2112,7 +2112,7 @@ bool LMDBBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qna } for (;;) { if (co.getQType(key.getNoStripHeader()) == QType::NSEC3) { - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); if (!lrr.ttl) break; } @@ -2143,7 +2143,7 @@ bool LMDBBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qna } for (;;) { if (co.getQType(key.getNoStripHeader()) == QType::NSEC3) { - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); if (!lrr.ttl) break; } @@ -2166,7 +2166,7 @@ bool LMDBBackend::getBeforeAndAfterNamesAbsolute(uint32_t id, const DNSName& qna // cout<<"Potentially stopping traverse at "<< co.getQName(key.get()) <<", " << (co.getQName(key.get()).canonCompare(qname))<()) <()) == QType::NSEC3) { - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); if (!lrr.ttl) { break; } @@ -2316,7 +2316,7 @@ bool LMDBBackend::getBeforeAndAfterNames(uint32_t id, const DNSName& zonenameU, if (co.getDomainID(key.getNoStripHeader()) == id && key.getNoStripHeader().rfind(matchkey, 0) == 0) continue; LMDBResourceRecord lrr; - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); if (co.getQType(key.getNoStripHeader()).getCode() && (lrr.auth || co.getQType(key.getNoStripHeader()).getCode() == QType::NS)) break; } @@ -2347,7 +2347,7 @@ bool LMDBBackend::getBeforeAndAfterNames(uint32_t id, const DNSName& zonenameU, return false; } LMDBResourceRecord lrr; - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); if (co.getQType(key.getNoStripHeader()).getCode() && (lrr.auth || co.getQType(key.getNoStripHeader()).getCode() == QType::NS)) break; } @@ -2362,7 +2362,7 @@ bool LMDBBackend::getBeforeAndAfterNames(uint32_t id, const DNSName& zonenameU, int skips = 0; for (;;) { LMDBResourceRecord lrr; - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); if (co.getQType(key.getNoStripHeader()).getCode() && (lrr.auth || co.getQType(key.getNoStripHeader()).getCode() == QType::NS)) { after = co.getQName(key.getNoStripHeader()) + zonename; // cout <<"Found auth ("<()).toString()<<", ttl = "<()) + zonename; LMDBResourceRecord lrr; - serFromString(val.get(), lrr); + deserializeFromBuffer(val.get(), lrr); // cout<<"And before to "<