29 #ifndef _LEVIN_PROTOCOL_HANDLER_H_ 30 #define _LEVIN_PROTOCOL_HANDLER_H_ 32 #include <boost/uuid/uuid_generators.hpp> 36 #undef MONERO_DEFAULT_LOG_CATEGORY 37 #define MONERO_DEFAULT_LOG_CATEGORY "net" 43 template<
class t_connection_context = net_utils::connection_context_base>
51 template<
class t_connection_context = net_utils::connection_context_base>
61 virtual bool handle_recv(
const void* ptr,
size_t cb);
80 template<
class t_connection_context>
83 m_conn_context(conn_context),
84 m_psnd_hndlr(psnd_hndlr),
85 m_state(conn_state_reading_head),
89 template<
class t_connection_context>
92 if(!m_config.m_pcommands_handler)
94 LOG_ERROR_CC(m_conn_context,
"Command handler not set!");
97 m_cach_in_buffer.append((
const char*)ptr, cb);
99 bool is_continue =
true;
104 case conn_state_reading_head:
109 LOG_ERROR_CC(m_conn_context,
"Signature mismatch on accepted connection");
116 #if BYTE_ORDER == LITTLE_ENDIAN 129 LOG_ERROR_CC(m_conn_context,
"Signature mismatch on accepted connection");
132 m_current_head = phead;
135 m_state = conn_state_reading_body;
137 case conn_state_reading_body:
138 if(m_cach_in_buffer.size() < m_current_head.m_cb)
145 if(m_cach_in_buffer.size() == m_current_head.m_cb)
146 buff_to_invoke.swap(m_cach_in_buffer);
149 buff_to_invoke.assign(m_cach_in_buffer, 0, (std::string::size_type)m_current_head.m_cb);
150 m_cach_in_buffer.erase(0, (std::string::size_type)m_current_head.m_cb);
154 if(m_current_head.m_have_to_return_data)
157 m_current_head.m_return_code = m_config.m_pcommands_handler->invoke(m_current_head.m_command, buff_to_invoke, return_buff, m_conn_context);
158 m_current_head.m_cb = return_buff.size();
159 m_current_head.m_have_to_return_data = 0;
161 return_buff.insert(0, (
const char*)&m_current_head,
sizeof(m_current_head));
162 if(!m_psnd_hndlr->do_send(
byte_slice{std::move(return_buff)}))
167 m_config.m_pcommands_handler->notify(m_current_head.m_command, buff_to_invoke, m_conn_context);
169 m_state = conn_state_reading_head;
172 LOG_ERROR_CC(m_conn_context,
"Undefined state in levin_server_impl::connection_handler, m_state=" << m_state);
192 #endif //_LEVIN_PROTOCOL_HANDLER_H_ config_type & m_config
Definition: levin_protocol_handler.h:72
net_utils::i_service_endpoint * m_psnd_hndlr
Definition: levin_protocol_handler.h:74
t_connection_context & m_conn_context
Definition: levin_protocol_handler.h:73
#define LEVIN_SIGNATURE
Definition: levin_base.h:38
int32_t m_return_code
Definition: levin_base.h:53
protocl_handler_config< t_connection_context > config_type
Definition: levin_protocol_handler.h:56
void(* m_pcommands_handler_destroy)(levin_commands_handler< t_connection_context > *)
Definition: levin_protocol_handler.h:47
uint64_t m_cb
Definition: levin_base.h:50
uint32_t m_command
Definition: levin_base.h:52
::std::string string
Definition: gtest-port.h:1097
Definition: levin_protocol_handler.h:44
~protocl_handler_config()
Definition: levin_protocol_handler.h:48
protocol_handler(net_utils::i_service_endpoint *psnd_hndlr, config_type &config, t_connection_context &conn_context)
Definition: levin_protocol_handler.h:81
Definition: cryptonote_config.h:220
Definition: levin_protocol_handler.h:52
connection_data_state
Definition: levin_protocol_handler.h:65
Definition: levin_base.h:47
uint32_t m_reservedA
Definition: levin_base.h:54
Definition: levin_base.h:90
unsigned __int64 uint64_t
Definition: stdint.h:136
Definition: byte_slice.h:68
bucket_head m_current_head
Definition: levin_protocol_handler.h:77
levin_commands_handler< t_connection_context > * m_pcommands_handler
Definition: levin_protocol_handler.h:46
#define LOG_ERROR_CC(ct, message)
Definition: net_utils_base.h:469
bool after_init_connection()
Definition: levin_protocol_handler.h:63
TODO: (mj-xmr) This will be reduced in an another PR.
Definition: byte_slice.h:39
Definition: net_utils_base.h:441
#define SWAP64LE
Definition: int-util.h:313
uint64_t m_signature
Definition: levin_base.h:49
Definition: levin_protocol_handler.h:68
virtual ~protocol_handler()
Definition: levin_protocol_handler.h:59
connection_data_state m_state
Definition: levin_protocol_handler.h:76
uint32_t m_reservedB
Definition: levin_base.h:55
Definition: levin_protocol_handler.h:67
t_connection_context connection_context
Definition: levin_protocol_handler.h:55
virtual bool handle_recv(const void *ptr, size_t cb)
Definition: levin_protocol_handler.h:90
#define SWAP32LE
Definition: int-util.h:305
std::string m_cach_in_buffer
Definition: levin_protocol_handler.h:75