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..08c73f8ad6a 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,18 +26,11 @@ 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& -Mgr::StringParam::value() const -{ - return str; -} - diff --git a/src/mgr/StringParam.h b/src/mgr/StringParam.h index ab8a8bbb04c..2770ab908f7 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 auto& value() const { return str; } private: - String str; + SBuf str; }; } // namespace Mgr diff --git a/src/tests/stub_libmgr.cc b/src/tests/stub_libmgr.cc index 692fbab50e5..675b81c7558 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,6 @@ 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)