(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.1.2.8 and 1.1.2.12

version 1.1.2.8, 2001/09/13 17:30:08 version 1.1.2.12, 2001/12/12 20:17:46
Line 24 
Line 24 
 // Author: Mike Brasher (mbrasher@bmc.com) // Author: Mike Brasher (mbrasher@bmc.com)
 // //
 // Modified By: // Modified By:
   //         Jenny Yu, Hewlett-Packard Company (jenny_yu@hp.com)
 // //
 //%///////////////////////////////////////////////////////////////////////////// //%/////////////////////////////////////////////////////////////////////////////
  
 #include <iostream>  
 #include "Config.h" #include "Config.h"
   #include <iostream>
 #include "Socket.h" #include "Socket.h"
  
 #ifdef PEGASUS_OS_TYPE_WINDOWS  #ifdef PEGASUS_PLATFORM_WIN32_IX86_MSVC
 # include <winsock.h> # include <winsock.h>
 #else #else
 # include <cctype> # include <cctype>
Line 46 
Line 47 
 #endif #endif
  
 #include "Socket.h" #include "Socket.h"
   #include "TLS.h"
 #include "HTTPAcceptor.h" #include "HTTPAcceptor.h"
 #include "HTTPConnection.h" #include "HTTPConnection.h"
  
Line 73 
Line 75 
 //////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
  
 HTTPAcceptor::HTTPAcceptor(Monitor* monitor, MessageQueue* outputMessageQueue) HTTPAcceptor::HTTPAcceptor(Monitor* monitor, MessageQueue* outputMessageQueue)
     : _monitor(monitor), _outputMessageQueue(outputMessageQueue), _rep(0)      : _monitor(monitor), _outputMessageQueue(outputMessageQueue), _rep(0),
         _sslcontext(NULL)
   {
       Socket::initializeInterface();
   }
   
   HTTPAcceptor::HTTPAcceptor(Monitor* monitor, MessageQueue* outputMessageQueue,
                              SSLContext * sslcontext)
       : _monitor(monitor), _outputMessageQueue(outputMessageQueue), _rep(0),
         _sslcontext(sslcontext)
 { {
     Socket::initializeInterface();     Socket::initializeInterface();
 } }
Line 86 
Line 97 
  
 void HTTPAcceptor::handleEnqueue() void HTTPAcceptor::handleEnqueue()
 { {
     // cout << "HTTPAcceptor::handleEnqueue()" << endl;  
   
     Message* message = dequeue();     Message* message = dequeue();
  
     if (!message)     if (!message)
Line 154 
Line 163 
  
     _rep = new HTTPAcceptorRep;     _rep = new HTTPAcceptorRep;
  
       _portNumber = portNumber;
   
       // bind address
       _bind();
   
       return;
   }
   
   /**
    _bind - creates a new server socket and bind socket to the port address.
   */
   void HTTPAcceptor::_bind()
   {
   
     // Create address:     // Create address:
  
     memset(&_rep->address, 0, sizeof(_rep->address));     memset(&_rep->address, 0, sizeof(_rep->address));
     _rep->address.sin_addr.s_addr = INADDR_ANY;     _rep->address.sin_addr.s_addr = INADDR_ANY;
     _rep->address.sin_family = AF_INET;     _rep->address.sin_family = AF_INET;
     _rep->address.sin_port = htons(portNumber);      _rep->address.sin_port = htons(_portNumber);
  
     // Create socket:     // Create socket:
  
Line 172 
Line 195 
         throw BindFailed("Failed to create socket");         throw BindFailed("Failed to create socket");
     }     }
  
       //
       // Set the socket option SO_REUSEADDR to reuse the socket address so
       // that we can rebind to a new socket using the same address when we
       // need to resume the cimom as a result of a timeout during a Shutdown
       // operation.
       //
       int opt=1;
       if (setsockopt(_rep->socket, SOL_SOCKET, SO_REUSEADDR,
                    (char *)&opt, sizeof(opt)) < 0)
       {
           delete _rep;
           _rep = 0;
           throw BindFailed("Failed to set socket option");
       }
   
     // Bind socket to port:     // Bind socket to port:
  
     if (::bind(_rep->socket,     if (::bind(_rep->socket,
Line 210 
Line 248 
     }     }
 } }
  
   /**
    closeConnectionSocket - close the server listening socket to disallow
    new client connections.
   */
   void HTTPAcceptor::closeConnectionSocket()
   {
       if (_rep)
       {
           // unregister the socket
           _monitor->unsolicitSocketMessages(_rep->socket);
   
           // close the socket
           Socket::close(_rep->socket);
       }
   }
   
   /**
    reopenConnectionSocket - creates a new server socket.
   */
   void HTTPAcceptor::reopenConnectionSocket()
   {
       if (_rep)
       {
           _bind();
       }
   }
   
   /**
    getOutstandingRequestCount - returns the number of outstanding requests.
   */
   Uint32 HTTPAcceptor::getOutstandingRequestCount()
   {
       if (_rep->connections.size() > 0)
       {
           HTTPConnection* connection = _rep->connections[0];
           return(connection->getRequestCount());
       }
       else
       {
           return(0);
       }
   }
   
 void HTTPAcceptor::unbind() void HTTPAcceptor::unbind()
 { {
     if (_rep)     if (_rep)
Line 277 
Line 358 
  
     // Create a new conection and add it to the connection list:     // Create a new conection and add it to the connection list:
  
       MP_Socket * mp_socket = new MP_Socket(socket, _sslcontext);
       if (mp_socket->accept() < 0) {
           if (getenv("PEGASUS_TRACE"))
               cerr <<"HTTPAcceptor: SSL_accept() failed" << endl;
   
           return;
       }
   
     HTTPConnection* connection = new HTTPConnection(     HTTPConnection* connection = new HTTPConnection(
         _monitor, socket, this, _outputMessageQueue);          _monitor, mp_socket, this, _outputMessageQueue);
  
     // Solicit events on this new connection's socket:     // Solicit events on this new connection's socket:
  


Legend:
Removed from v.1.1.2.8  
changed lines
  Added in v.1.1.2.12

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2