示例#1
0
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;
}
示例#2
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;
}