(file) Return to HTTPAcceptor.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / Common

Diff for /pegasus/src/Pegasus/Common/HTTPAcceptor.cpp between version 1.69 and 1.76

version 1.69, 2005/05/16 16:13:47 version 1.76, 2005/10/31 16:53:08
Line 39 
Line 39 
 //          Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com) //          Roger Kumpf, Hewlett-Packard Company (roger_kumpf@hp.com)
 //          Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com) //          Sean Keenan, Hewlett-Packard Company (sean.keenan@hp.com)
 //          Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for Bug#2065 //          Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for Bug#2065
 //          David Dillard, VERITAS Software Corp.  //          David Dillard, Symantec Corp. (david_dillard@symantec.com)
 //              (david.dillard@veritas.com)  
 //          John Alex, IBM (johnalex@us.ibm.com) for Bug#3312 //          John Alex, IBM (johnalex@us.ibm.com) for Bug#3312
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
Line 149 
Line 148 
 #endif #endif
       Mutex _connection_mut;       Mutex _connection_mut;
  
       Sint32 socket;        PEGASUS_SOCKET socket;
       Array<HTTPConnection*> connections;       Array<HTTPConnection*> connections;
 }; };
  
Line 217 
Line 216 
  
 HTTPAcceptor::~HTTPAcceptor() HTTPAcceptor::~HTTPAcceptor()
 { {
      destroyConnections();
    unbind();    unbind();
    // ATTN: Is this correct in a multi-HTTPAcceptor server?    // ATTN: Is this correct in a multi-HTTPAcceptor server?
    Socket::uninitializeInterface();    Socket::uninitializeInterface();
Line 261 
Line 261 
      for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)      for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)
      {      {
         HTTPConnection* connection = _rep->connections[i];         HTTPConnection* connection = _rep->connections[i];
         Sint32 socket = connection->getSocket();          PEGASUS_SOCKET socket = connection->getSocket();
  
         if (socket == closeConnectionMessage->socket)         if (socket == closeConnectionMessage->socket)
         {         {
Line 545 
Line 545 
       if (_localConnection)       if (_localConnection)
       {       {
 #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET #ifndef PEGASUS_DISABLE_LOCAL_DOMAIN_SOCKET
           PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,            PEG_TRACE_STRING(TRC_HTTP, Tracer::LEVEL2,
                         "HTTPAcceptor::closeConnectionSocket Unlinking local connection." );                         "HTTPAcceptor::closeConnectionSocket Unlinking local connection." );
          ::unlink(          ::unlink(
              reinterpret_cast<struct sockaddr_un*>(_rep->address)->sun_path);              reinterpret_cast<struct sockaddr_un*>(_rep->address)->sun_path);
Line 634 
Line 634 
  
 void HTTPAcceptor::destroyConnections() void HTTPAcceptor::destroyConnections()
 { {
   
    if (_rep)    if (_rep)
    {    {
      // For each connection created by this object:      // For each connection created by this object:
Line 643 
Line 642 
      for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)      for (Uint32 i = 0, n = _rep->connections.size(); i < n; i++)
      {      {
         HTTPConnection* connection = _rep->connections[i];         HTTPConnection* connection = _rep->connections[i];
         Sint32 socket = connection->getSocket();          PEGASUS_SOCKET socket = connection->getSocket();
  
         // Unsolicit SocketMessages:         // Unsolicit SocketMessages:
  
Line 651 
Line 650 
  
         // Destroy the connection (causing it to close):         // Destroy the connection (causing it to close):
  
         while (connection->refcount.value()) { }          while (connection->refcount.get()) { }
         delete connection;         delete connection;
      }      }
  
Line 694 
Line 693 
        address_size = sizeof(struct sockaddr_in);        address_size = sizeof(struct sockaddr_in);
    }    }
  
    Sint32 socket = accept(_rep->socket, accept_address, &address_size);     PEGASUS_SOCKET socket = accept(_rep->socket, accept_address, &address_size);
  
    delete accept_address;    delete accept_address;
  
Line 730 
Line 729 
 #endif #endif
  
  
    Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,     PEG_LOGGER_TRACE((Logger::STANDARD_LOG, System::CIMSERVER, 0,
            "HTTPAcceptor - accept() success.  Socket: $1"         "HTTPAcceptor - accept() success.  Socket: $1" ,socket));
            ,socket);  
  
    // Create a new conection and add it to the connection list:     AutoPtr<MP_Socket> mp_socket(new MP_Socket(
          socket, _sslcontext, _sslContextObjectLock, _exportConnection));
  
    AutoPtr<MP_Socket> mp_socket(new MP_Socket(socket, _sslcontext, _exportConnection));     // Perform the SSL handshake, if applicable.  Make the socket non-blocking
      // for this operation so we can send it back to the Monitor's select() loop
      // if it takes a while.
  
    Sint32 retVal;     mp_socket->disableBlocking();
      Sint32 socketAcceptStatus = mp_socket->accept();
      mp_socket->enableBlocking();
  
    if (_sslcontext)     if (socketAcceptStatus < 0)
    {  
        //  
        // For SSL connections, obtain read lock to SSLContext object before  
        // calling the accept() method of MP_Socket.  
        //  
        ReadLock rlock(*_sslContextObjectLock);  
        retVal = mp_socket->accept();  
    }  
    else  
    {  
        retVal = mp_socket->accept();  
    }  
   
    if (retVal < 0)  
    {    {
        PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,        PEG_TRACE_STRING(TRC_DISCARDED_DATA, Tracer::LEVEL2,
                         "HTTPAcceptor: SSL_accept() failed");                         "HTTPAcceptor: SSL_accept() failed");
Line 762 
Line 751 
        return;        return;
    }    }
  
      // Create a new connection and add it to the connection list:
   
    HTTPConnection* connection = new HTTPConnection(_monitor, mp_socket,    HTTPConnection* connection = new HTTPConnection(_monitor, mp_socket,
        this, static_cast<MessageQueue *>(_outputMessageQueue), _exportConnection);        this, static_cast<MessageQueue *>(_outputMessageQueue), _exportConnection);
  
      if (socketAcceptStatus == 0)
      {
          PEG_TRACE_STRING(TRC_HTTP, Tracer::LEVEL2,
              "HTTPAcceptor: SSL_accept() pending");
          connection->_acceptPending = true;
      }
   
    // Solicit events on this new connection's socket:    // Solicit events on this new connection's socket:
    int index;    int index;
  


Legend:
Removed from v.1.69  
changed lines
  Added in v.1.76

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2