91 {
92 if(!m_config.m_pcommands_handler)
93 {
94 LOG_ERROR_CC(m_conn_context,
"Command handler not set!");
95 return false;
96 }
97 m_cach_in_buffer.append((
const char*)
ptr,
cb);
98
101 {
102 switch(m_state)
103 {
104 case conn_state_reading_head:
106 {
108 {
109 LOG_ERROR_CC(m_conn_context,
"Signature mismatch on accepted connection");
110 return false;
111 }
113 break;
114 }
115 {
116#if BYTE_ORDER == LITTLE_ENDIAN
118#else
126#endif
128 {
129 LOG_ERROR_CC(m_conn_context,
"Signature mismatch on accepted connection");
130 return false;
131 }
132 m_current_head =
phead;
133 }
135 m_state = conn_state_reading_body;
136 break;
137 case conn_state_reading_body:
138 if(m_cach_in_buffer.size() < m_current_head.m_cb)
139 {
141 break;
142 }
143 {
145 if(m_cach_in_buffer.size() == m_current_head.m_cb)
147 else
148 {
151 }
152
153
154 if(m_current_head.m_have_to_return_data)
155 {
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);
159 m_current_head.m_have_to_return_data = false;
162
164 return false;
165
166 }
167 else
168 m_config.m_pcommands_handler->notify(m_current_head.m_command,
buff_to_invoke, m_conn_context);
169 }
170 m_state = conn_state_reading_head;
171 break;
172 default:
173 LOG_ERROR_CC(m_conn_context,
"Undefined state in levin_server_impl::connection_handler, m_state=" << m_state);
174 return false;
175 }
176 }
177
178 return true;
179 }
#define LOG_ERROR_CC(ct, message)