From 250edcbb630b88e9584201281a059e1867c9d85f Mon Sep 17 00:00:00 2001 From: Francesco Chemolli Date: Fri, 10 Apr 2026 21:41:31 +0000 Subject: [PATCH 1/3] Refactor Mgr::StringParam.str to be a SBuf --- src/ipc/TypedMsgHdr.cc | 24 ++++++++++++++++++++++++ src/ipc/TypedMsgHdr.h | 3 +++ src/mgr/QueryParams.cc | 2 +- src/mgr/StringParam.cc | 8 ++++---- src/mgr/StringParam.h | 8 ++++---- src/tests/stub_libmgr.cc | 8 ++------ 6 files changed, 38 insertions(+), 15 deletions(-) diff --git a/src/ipc/TypedMsgHdr.cc b/src/ipc/TypedMsgHdr.cc index b40ff0bfb0b..8a26b7bea42 100644 --- a/src/ipc/TypedMsgHdr.cc +++ b/src/ipc/TypedMsgHdr.cc @@ -11,6 +11,7 @@ #include "squid.h" #include "base/TextException.h" #include "ipc/TypedMsgHdr.h" +#include "sbuf/SBuf.h" #include "SquidString.h" #include "tools.h" @@ -147,6 +148,29 @@ Ipc::TypedMsgHdr::putString(const String &s) putRaw(s.rawBuf(), s.psize()); } +void +Ipc::TypedMsgHdr::getSBuf(SBuf &s) const +{ + const int length = getInt(); + Must(length >= 0); + // SBuf doesn't need special handling for empty + if (!length) { + s.clear(); + return; + } + Must(length <= maxSize); + s.assign(data.raw + offset, length); + offset += length; +} + +void +Ipc::TypedMsgHdr::putSBuf(const SBuf &s) +{ + Must(s.length() <= maxSize); + putInt(s.length()); + putRaw(s.rawContent(), s.length()); +} + void Ipc::TypedMsgHdr::getFixed(void *rawBuf, size_t rawSize) const { diff --git a/src/ipc/TypedMsgHdr.h b/src/ipc/TypedMsgHdr.h index 3f850cd738d..d60d4e153ff 100644 --- a/src/ipc/TypedMsgHdr.h +++ b/src/ipc/TypedMsgHdr.h @@ -25,6 +25,7 @@ #include +class SBuf; class String; namespace Ipc @@ -57,6 +58,8 @@ class TypedMsgHdr: public msghdr /* access to message parts for selected commonly-used part types */ void getString(String &s) const; ///< load variable-length string void putString(const String &s); ///< store variable-length string + void getSBuf(SBuf &s) const; ///< load variable-length SBuf + void putSBuf(const SBuf &s); ///< store variable-length SBuf int getInt() const; ///< load an integer void putInt(int n); ///< store an integer void getFixed(void *raw, size_t size) const; ///< always load size bytes diff --git a/src/mgr/QueryParams.cc b/src/mgr/QueryParams.cc index 312ab828dfc..a304de388e0 100644 --- a/src/mgr/QueryParams.cc +++ b/src/mgr/QueryParams.cc @@ -98,7 +98,7 @@ ParseParamValue(const SBuf &rawValue) if (tok.atEnd()) return new Mgr::IntParam(array); else - return new Mgr::StringParam(SBufToString(rawValue)); + return new Mgr::StringParam(rawValue); } /** diff --git a/src/mgr/StringParam.cc b/src/mgr/StringParam.cc index 4eca6f483b7..afc4da0b844 100644 --- a/src/mgr/StringParam.cc +++ b/src/mgr/StringParam.cc @@ -17,7 +17,7 @@ Mgr::StringParam::StringParam(): { } -Mgr::StringParam::StringParam(const String& aString): +Mgr::StringParam::StringParam(const SBuf& aString): QueryParam(QueryParam::ptString), str(aString) { } @@ -26,16 +26,16 @@ void Mgr::StringParam::pack(Ipc::TypedMsgHdr& msg) const { msg.putPod(type); - msg.putString(str); + msg.putSBuf(str); } void Mgr::StringParam::unpackValue(const Ipc::TypedMsgHdr& msg) { - msg.getString(str); + msg.getSBuf(str); } -const String& +const SBuf& Mgr::StringParam::value() const { return str; diff --git a/src/mgr/StringParam.h b/src/mgr/StringParam.h index ab8a8bbb04c..97e982ffadd 100644 --- a/src/mgr/StringParam.h +++ b/src/mgr/StringParam.h @@ -14,7 +14,7 @@ #include "ipc/forward.h" #include "mgr/forward.h" #include "mgr/QueryParam.h" -#include "SquidString.h" +#include "sbuf/SBuf.h" namespace Mgr { @@ -23,13 +23,13 @@ class StringParam: public QueryParam { public: StringParam(); - StringParam(const String& aString); + StringParam(const SBuf& aString); void pack(Ipc::TypedMsgHdr& msg) const override; void unpackValue(const Ipc::TypedMsgHdr& msg) override; - const String& value() const; + const SBuf& value() const; private: - String str; + SBuf str; }; } // namespace Mgr diff --git a/src/tests/stub_libmgr.cc b/src/tests/stub_libmgr.cc index 692fbab50e5..e53da50b247 100644 --- a/src/tests/stub_libmgr.cc +++ b/src/tests/stub_libmgr.cc @@ -55,8 +55,6 @@ void Mgr::MenuAction::dump(StoreEntry *) STUB Mgr::Action::Pointer Mgr::ShutdownAction::Create(const Mgr::CommandPointer &) STUB_RETVAL(dummyAction) void Mgr::ShutdownAction::dump(StoreEntry *) STUB -// protected: -//Mgr::ShutdownAction::ShutdownAction(const CommandPointer &) STUB Mgr::Action::Pointer Mgr::ReconfigureAction::Create(const Mgr::CommandPointer &) STUB_RETVAL(dummyAction) void Mgr::ReconfigureAction::dump(StoreEntry *) STUB @@ -241,10 +239,8 @@ void Mgr::StoreToCommWriter::noteCommClosed(const CommCloseCbParams&) STUB void Mgr::StoreToCommWriter::close() STUB #include "mgr/StringParam.h" -//Mgr::StringParam::StringParam() STUB -//Mgr::StringParam::StringParam(const String&) STUB void Mgr::StringParam::pack(Ipc::TypedMsgHdr&) const STUB void Mgr::StringParam::unpackValue(const Ipc::TypedMsgHdr&) STUB -static String t; -const String& Mgr::StringParam::value() const STUB_RETVAL(t) +static SBuf t; +const SBuf& Mgr::StringParam::value() const STUB_RETVAL(t) From fb7a376ac905e3ddc44141c8b64349a262ca65fa Mon Sep 17 00:00:00 2001 From: Francesco Chemolli Date: Tue, 14 Apr 2026 19:54:02 +0000 Subject: [PATCH 2/3] Mgr::StringParam::value() can return a SBuf instead of a ref --- src/mgr/StringParam.cc | 2 +- src/mgr/StringParam.h | 2 +- src/tests/stub_libmgr.cc | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/mgr/StringParam.cc b/src/mgr/StringParam.cc index afc4da0b844..e395a2d6347 100644 --- a/src/mgr/StringParam.cc +++ b/src/mgr/StringParam.cc @@ -35,7 +35,7 @@ Mgr::StringParam::unpackValue(const Ipc::TypedMsgHdr& msg) msg.getSBuf(str); } -const SBuf& +SBuf Mgr::StringParam::value() const { return str; diff --git a/src/mgr/StringParam.h b/src/mgr/StringParam.h index 97e982ffadd..d65e1d174dd 100644 --- a/src/mgr/StringParam.h +++ b/src/mgr/StringParam.h @@ -26,7 +26,7 @@ class StringParam: public QueryParam StringParam(const SBuf& aString); void pack(Ipc::TypedMsgHdr& msg) const override; void unpackValue(const Ipc::TypedMsgHdr& msg) override; - const SBuf& value() const; + SBuf value() const; private: SBuf str; diff --git a/src/tests/stub_libmgr.cc b/src/tests/stub_libmgr.cc index e53da50b247..126da831707 100644 --- a/src/tests/stub_libmgr.cc +++ b/src/tests/stub_libmgr.cc @@ -241,6 +241,5 @@ void Mgr::StoreToCommWriter::close() STUB #include "mgr/StringParam.h" void Mgr::StringParam::pack(Ipc::TypedMsgHdr&) const STUB void Mgr::StringParam::unpackValue(const Ipc::TypedMsgHdr&) STUB -static SBuf t; -const SBuf& Mgr::StringParam::value() const STUB_RETVAL(t) +SBuf Mgr::StringParam::value() const STUB From 481ef262dc04e08b125fa4f2a6fad0ebc2b00a2d Mon Sep 17 00:00:00 2001 From: Francesco Chemolli Date: Tue, 14 Apr 2026 20:33:02 +0000 Subject: [PATCH 3/3] inline SBuf Mgr::StringParam::value() --- src/mgr/StringParam.cc | 7 ------- src/mgr/StringParam.h | 2 +- src/tests/stub_libmgr.cc | 1 - 3 files changed, 1 insertion(+), 9 deletions(-) diff --git a/src/mgr/StringParam.cc b/src/mgr/StringParam.cc index e395a2d6347..08c73f8ad6a 100644 --- a/src/mgr/StringParam.cc +++ b/src/mgr/StringParam.cc @@ -34,10 +34,3 @@ Mgr::StringParam::unpackValue(const Ipc::TypedMsgHdr& msg) { msg.getSBuf(str); } - -SBuf -Mgr::StringParam::value() const -{ - return str; -} - diff --git a/src/mgr/StringParam.h b/src/mgr/StringParam.h index d65e1d174dd..2770ab908f7 100644 --- a/src/mgr/StringParam.h +++ b/src/mgr/StringParam.h @@ -26,7 +26,7 @@ class StringParam: public QueryParam StringParam(const SBuf& aString); void pack(Ipc::TypedMsgHdr& msg) const override; void unpackValue(const Ipc::TypedMsgHdr& msg) override; - SBuf value() const; + const auto& value() const { return str; } private: SBuf str; diff --git a/src/tests/stub_libmgr.cc b/src/tests/stub_libmgr.cc index 126da831707..675b81c7558 100644 --- a/src/tests/stub_libmgr.cc +++ b/src/tests/stub_libmgr.cc @@ -241,5 +241,4 @@ void Mgr::StoreToCommWriter::close() STUB #include "mgr/StringParam.h" void Mgr::StringParam::pack(Ipc::TypedMsgHdr&) const STUB void Mgr::StringParam::unpackValue(const Ipc::TypedMsgHdr&) STUB -SBuf Mgr::StringParam::value() const STUB