}
-void
-ZyppPlugin::write_message(ostream& os, const Message& msg)
-{
- os << msg.command << endl;
- for (auto it: msg.headers) {
- os << it.first << ':' << it.second << endl;
- }
- os << endl;
- os << msg.body << '\0';
- os.flush();
-}
-
-
ZyppPlugin::Message
-ZyppPlugin::read_message(istream& is)
+ZyppPlugin::read_message(istream& is) const
{
enum class State { Start, Headers, Body } state = State::Start;
}
+void
+ZyppPlugin::write_message(ostream& os, const Message& msg) const
+{
+ os << msg.command << endl;
+ for (auto it : msg.headers)
+ os << it.first << ':' << it.second << endl;
+ os << endl;
+ os << msg.body << '\0';
+ os.flush();
+}
+
+
ZyppPlugin::Message
ZyppPlugin::dispatch(const Message& msg)
{
if (msg.command == "_DISCONNECT")
- {
return ack();
- }
Message a;
a.command = "_ENOMETHOD";
protected:
+ Message read_message(std::istream& is) const;
+ void write_message(std::ostream& os, const Message& msg) const;
+
/// Handle a message and return a reply.
- // Derived classes should override it.
+ // Derived classes must override it.
// The base acks a _DISCONNECT and replies _ENOMETHOD to everything else.
- virtual Message dispatch(const Message& msg);
-
- Message read_message(std::istream& is);
- void write_message(std::ostream& os, const Message& msg);
+ virtual Message dispatch(const Message& msg) = 0;
- Message ack()
+ Message ack() const
{
Message a;
a.command = "ACK";