int Oneway_Handler::run (void) { // Read data from client (terminate on error). char *request = 0; for (;;) { ACE_INT32 len = 0; if (parse_header_and_allocate_buffer (request, &len) == -1) return -1; // Subtract off the sizeof the length prefix. ssize_t r_bytes = this->ssl_stream_ -> recv_n (request, len - sizeof (ACE_UINT32)); if (r_bytes == -1) { ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("recv"))); break; } else if (r_bytes == 0) { ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("(%P|%t) reached end of input, connection ") ACE_TEXT ("closed by client\n"))); break; } else if (OPTIONS::instance ()->verbose () && ACE::write_n (ACE_STDOUT, request, r_bytes) != r_bytes) ACE_ERROR ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("ACE::write_n"))); this->total_bytes_ += size_t (r_bytes); this->message_count_++; delete [] request; request = 0; } delete [] request; return 0; }
int Twoway_Handler::run (void) { // Read data from client (terminate on error). char *request = 0; for (;;) { ACE_INT32 len = 0; if (parse_header_and_allocate_buffer (request, &len) == -1) return -1; // Subtract off the sizeof the length prefix. ssize_t r_bytes = this->ssl_stream_ -> recv_n (request, len - sizeof (ACE_UINT32)); if (r_bytes == -1) { ACE_ERROR ((LM_ERROR, "%p\n", "recv")); break; } else if (r_bytes == 0) { ACE_DEBUG ((LM_DEBUG, "(%P|%t) reached end of input, connection closed " "by client\n")); break; } else if (OPTIONS::instance ()->verbose () && ACE::write_n (ACE_STDOUT, request, r_bytes) != r_bytes) ACE_ERROR ((LM_ERROR, "%p\n", "ACE::write_n")); else { ssize_t s_bytes = (ssize_t) OPTIONS::instance ()->reply_message_len (); // Don't try to send more than is in the request buffer! if (s_bytes > r_bytes) s_bytes = r_bytes; if (this->ssl_stream_ -> send_n (request, s_bytes) != s_bytes) ACE_ERROR ((LM_ERROR, "%p\n", "send_n")); } this->total_bytes_ += size_t (r_bytes); this->message_count_++; delete [] request; request = 0; } delete [] request; return 0; }