(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.23.2.1 and 1.23.2.2

version 1.23.2.1, 2002/10/25 20:49:43 version 1.23.2.2, 2002/10/28 15:43:21
Line 74 
Line 74 
 #else #else
       struct sockaddr_in address;       struct sockaddr_in address;
 #endif #endif
       Mutex _connection_mut;  
   
       Sint32 socket;       Sint32 socket;
       Array<HTTPConnection*> connections;       Array<HTTPConnection*> connections;
 }; };
Line 92 
Line 90 
      _rep(0), _sslcontext(NULL), _entry_index(-1)      _rep(0), _sslcontext(NULL), _entry_index(-1)
 { {
  
    _inet_address[0] = 0x00;  
    Socket::initializeInterface();    Socket::initializeInterface();
 } }
  
Line 104 
Line 101 
            _sslcontext(sslcontext),            _sslcontext(sslcontext),
            _entry_index(-1)            _entry_index(-1)
 { {
    _inet_address[0] = 0x00;  
    Socket::initializeInterface();  
 }  
   
 HTTPAcceptor::HTTPAcceptor(Monitor* monitor, MessageQueue* outputMessageQueue,  
                            SSLContext * sslcontext,  
                            char *inet_address)  
    :       Base(PEGASUS_QUEUENAME_HTTPACCEPTOR),  
            _monitor(monitor), _outputMessageQueue(outputMessageQueue),  
            _rep(0),  
            _sslcontext(sslcontext),  
            _entry_index(-1)  
 {  
    strncpy(_inet_address, inet_address, 16);  
    _inet_address[16] = 0x00;  
    Socket::initializeInterface();    Socket::initializeInterface();
 } }
  
Line 159 
Line 141 
          CloseConnectionMessage* closeConnectionMessage          CloseConnectionMessage* closeConnectionMessage
             = (CloseConnectionMessage*)message;             = (CloseConnectionMessage*)message;
  
          _rep->_connection_mut.lock(pegasus_thread_self());  
   
          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];
Line 171 
Line 151 
                _monitor->unsolicitSocketMessages(socket);                _monitor->unsolicitSocketMessages(socket);
                _rep->connections.remove(i);                _rep->connections.remove(i);
                delete connection;                delete connection;
                PEGASUS_STD(cout) << "Closing HTTP Connection; Current Connection Table Size: " <<  
                _rep->connections.size() << PEGASUS_STD(endl);  
                break;                break;
             }             }
          }          }
          _rep->_connection_mut.unlock();  
   
       }       }
  
       default:       default:
Line 203 
Line 179 
 void HTTPAcceptor::bind(Uint32 portNumber) void HTTPAcceptor::bind(Uint32 portNumber)
 { {
    if (_rep)    if (_rep)
       throw BindFailedException("HTTPAcceptor already bound");        throw BindFailed("HTTPAcceptor already bound");
  
    _rep = new HTTPAcceptorRep;    _rep = new HTTPAcceptorRep;
  
Line 232 
Line 208 
    strcpy(_rep->address.sun_path, "/var/opt/wbem/cimxml.socket");    strcpy(_rep->address.sun_path, "/var/opt/wbem/cimxml.socket");
    ::unlink(_rep->address.sun_path);    ::unlink(_rep->address.sun_path);
 #else #else
    if(_inet_address[0] != 0x00)  
    {  
       _rep->address.sin_addr.s_addr = inet_addr(_inet_address);  
       cout << "binding to " << _inet_address << endl;  
   
    }  
    else  
    {  
       _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);
 #endif #endif
Line 259 
Line 225 
    {    {
       delete _rep;       delete _rep;
       _rep = 0;       _rep = 0;
       throw BindFailedException("Failed to create socket");        throw BindFailed("Failed to create socket");
    }    }
  
    //    //
Line 274 
Line 240 
    {    {
       delete _rep;       delete _rep;
       _rep = 0;       _rep = 0;
       throw BindFailedException("Failed to set socket option");        throw BindFailed("Failed to set socket option");
    }    }
  
    // Bind socket to port:    // Bind socket to port:
Line 286 
Line 252 
       Socket::close(_rep->socket);       Socket::close(_rep->socket);
       delete _rep;       delete _rep;
       _rep = 0;       _rep = 0;
       throw BindFailedException("Failed to bind socket");        throw BindFailed("Failed to bind socket");
    }    }
  
    // Set up listening on the given socket:    // Set up listening on the given socket:
Line 298 
Line 264 
       Socket::close(_rep->socket);       Socket::close(_rep->socket);
       delete _rep;       delete _rep;
       _rep = 0;       _rep = 0;
       throw BindFailedException("Failed to bind socket");        throw BindFailed("Failed to bind socket");
    }    }
  
    // Register to receive SocketMessages on this socket:    // Register to receive SocketMessages on this socket:
Line 312 
Line 278 
       Socket::close(_rep->socket);       Socket::close(_rep->socket);
       delete _rep;       delete _rep;
       _rep = 0;       _rep = 0;
       throw BindFailedException("Failed to solicit socket messaeges");        throw BindFailed("Failed to solicit socket messaeges");
    }    }
 } }
  
Line 348 
Line 314 
 */ */
 Uint32 HTTPAcceptor::getOutstandingRequestCount() Uint32 HTTPAcceptor::getOutstandingRequestCount()
 { {
    Uint32 count = 0;  
   
    _rep->_connection_mut.lock(pegasus_thread_self());  
    if (_rep->connections.size() > 0)    if (_rep->connections.size() > 0)
    {    {
       HTTPConnection* connection = _rep->connections[0];       HTTPConnection* connection = _rep->connections[0];
       count = connection->getRequestCount();        return(connection->getRequestCount());
      }
      else
      {
         return(0);
    }    }
    _rep->_connection_mut.unlock();  
    return count;  
   
 } }
  
 void HTTPAcceptor::unbind() void HTTPAcceptor::unbind()
Line 375 
Line 339 
 { {
    // For each connection created by this object:    // For each connection created by this object:
  
    _rep->_connection_mut.lock(pegasus_thread_self());  
    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];
Line 392 
Line 355 
    }    }
  
    _rep->connections.clear();    _rep->connections.clear();
    _rep->_connection_mut.unlock();  
 } }
  
 void HTTPAcceptor::_acceptConnection() void HTTPAcceptor::_acceptConnection()
Line 414 
Line 376 
    int n = sizeof(address);    int n = sizeof(address);
 #endif #endif
  
   
 #if defined(PEGASUS_PLATFORM_LINUX_IX86_GNU) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU) #if defined(PEGASUS_PLATFORM_LINUX_IX86_GNU) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU)
    Sint32 socket = accept(    Sint32 socket = accept(
       _rep->socket, (struct sockaddr*)&address, (socklen_t *)&n);       _rep->socket, (struct sockaddr*)&address, (socklen_t *)&n);
Line 422 
Line 383 
    Sint32 socket = accept(_rep->socket, reinterpret_cast<struct sockaddr*>(&address), &n);    Sint32 socket = accept(_rep->socket, reinterpret_cast<struct sockaddr*>(&address), &n);
 #endif #endif
  
   
   
    if (socket < 0)    if (socket < 0)
    {    {
        PEG_TRACE_STRING(TRC_HTTP, Tracer::LEVEL2,        PEG_TRACE_STRING(TRC_HTTP, Tracer::LEVEL2,
                         "HTTPAcceptor: accept() failed");                         "HTTPAcceptor: accept() failed");
       return;       return;
    }    }
 #if defined(PEGASUS_PLATFORM_LINUX_IX86_GNU) || defined(PEGASUS_PLATFORM_LINUX_GENERIC_GNU)  
    if( _inet_address[0] != 0x00)  
    {  
       if( 1023 < htons(address.sin_port) )  
       {  
          shutdown(socket, 2);  
          Socket::close(socket);  
          return;  
       }  
    }  
  
 #endif  
    // 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);    MP_Socket * mp_socket = new MP_Socket(socket, _sslcontext);
Line 458 
Line 406 
    // Solicit events on this new connection's socket:    // Solicit events on this new connection's socket:
    int index;    int index;
  
    if (! (index = _monitor->solicitSocketMessages(     if (-1 ==  (index = _monitor->solicitSocketMessages(
           socket,           socket,
           SocketMessage::READ | SocketMessage::EXCEPTION,           SocketMessage::READ | SocketMessage::EXCEPTION,
           connection->getQueueId(), Monitor::CONNECTION)) )           connection->getQueueId(), Monitor::CONNECTION)) )
Line 469 
Line 417 
  
    // Save the socket for cleanup later:    // Save the socket for cleanup later:
    connection->_entry_index = index;    connection->_entry_index = index;
       _rep->_connection_mut.lock(pegasus_thread_self());  
    _rep->connections.append(connection);  
    _rep->_connection_mut.unlock();  
    PEGASUS_STD(cout) << "Creating new HTTP Connection; Current Connection Table Size: " <<  
    _rep->connections.size() << " entries" << endl;  
  
      _rep->connections.append(connection);
 } }
  
 PEGASUS_NAMESPACE_END PEGASUS_NAMESPACE_END


Legend:
Removed from v.1.23.2.1  
changed lines
  Added in v.1.23.2.2

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2