diff --git a/include/protocol/protocol.hpp b/include/protocol/protocol.hpp index 359ab40..c92f957 100644 --- a/include/protocol/protocol.hpp +++ b/include/protocol/protocol.hpp @@ -35,6 +35,10 @@ namespace protocol { void absorb(const std::string& input); void send(const token::list_t& tokens); + void send_result(const session_key_t& session_key, token::list_t tokens); + void proceed(const session_key_t& session_key); + void fail(const session_key_t& session_key); + void submit_message(const session_key_t& session_key, const std::vector& header, const std::vector& body); protected: diff --git a/src/protocol/protocol.cpp b/src/protocol/protocol.cpp index 00e593a..bd74168 100644 --- a/src/protocol/protocol.cpp +++ b/src/protocol/protocol.cpp @@ -37,16 +37,34 @@ namespace protocol { void protocol_t::absorb(const std::string& input) { auto tokens = token::decompose(input, max_pattern_length); auto pattern = token::pattern_t(tokens, false); - debug && cout << "Received pattern " << pattern << endl; + debug && cerr << "Received pattern " << pattern << endl; auto element = handlers.find(pattern); - if(element != handlers.end()) { + if(element == handlers.end()) { + debug && cerr << "Unknown pattern " << pattern << endl; + } else { element->second(*this, {input, element->first}); } } + void protocol_t::send_result(const session_key_t& session_key, token::list_t tokens) { + token::list_t result{"filter-result", session_key.session, session_key.token}; + for(auto& token : tokens) { + result.push_back(token); + } + send(result); + } + + void protocol_t::proceed(const session_key_t& session_key) { + send_result(session_key, {"proceed"}); + } + + void protocol_t::fail(const session_key_t& session_key) { + send_result(session_key, {"disconnect", "451 Aborted"}); + } + void protocol_t::send_data_line(const session_key_t& session_key, const string& data_line) { - send({"filter-dataline", session_key.session, session_key.token, session_key.token, data_line}); + send({"filter-dataline", session_key.session, session_key.token, data_line}); } void protocol_t::submit_message(const session_key_t& session_key, const vector& header, const vector& body) {