myserver-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myserver-commit] [2814] Added getHandle to the Stream class.


From: Giuseppe Scrivano
Subject: [myserver-commit] [2814] Added getHandle to the Stream class.
Date: Sun, 14 Sep 2008 21:09:19 +0000

Revision: 2814
          http://svn.sv.gnu.org/viewvc/?view=rev&root=myserver&revision=2814
Author:   gscrivano
Date:     2008-09-14 21:09:18 +0000 (Sun, 14 Sep 2008)

Log Message:
-----------
Added getHandle to the Stream class.  Now the same getHandle method signature 
is shared between Socket and File.

Modified Paths:
--------------
    trunk/myserver/include/base/file/file.h
    trunk/myserver/include/base/socket/socket.h
    trunk/myserver/include/connections_scheduler/connections_scheduler.h
    trunk/myserver/include/filter/stream.h
    trunk/myserver/src/base/process/process_server_manager.cpp
    trunk/myserver/src/base/socket/socket.cpp
    trunk/myserver/src/connections_scheduler/connections_scheduler.cpp
    trunk/myserver/src/connections_scheduler/listen_threads.cpp
    trunk/myserver/src/filter/stream.cpp
    trunk/myserver/src/protocol/ftp/ftp.cpp

Modified: trunk/myserver/include/base/file/file.h
===================================================================
--- trunk/myserver/include/base/file/file.h     2008-09-14 18:19:19 UTC (rev 
2813)
+++ trunk/myserver/include/base/file/file.h     2008-09-14 21:09:18 UTC (rev 
2814)
@@ -22,13 +22,6 @@
 #include <include/filter/stream.h>
 #include <string>
 
-#ifdef WIN32
-typedef void* FileHandle;
-#endif
-#ifdef NOT_WIN
-typedef long  FileHandle;
-#endif
-
 using namespace std;
 
 class File : public Stream

Modified: trunk/myserver/include/base/socket/socket.h
===================================================================
--- trunk/myserver/include/base/socket/socket.h 2008-09-14 18:19:19 UTC (rev 
2813)
+++ trunk/myserver/include/base/socket/socket.h 2008-09-14 21:09:18 UTC (rev 
2814)
@@ -39,7 +39,6 @@
 #ifndef SOCKETLIBINCLUDED
 extern "C"
 {
-  //#include <ws2tcpip.h>
 #include <winsock2.h>
 }
 #define SOCKETLIBINCLUDED
@@ -68,11 +67,8 @@
 #define MAX_IP_STRING_LEN      32
 #endif
 
-typedef unsigned int SocketHandle;
 typedef struct sockaddr_storage MYSERVER_SOCKADDR_STORAGE;
 typedef struct sockaddr_storage MYSERVER_SOCKADDRIN;
-//typedef struct sockaddr_in MYSERVER_SOCKADDRIN;
-//typedef struct sockaddr MYSERVER_SOCKADDR;
 typedef struct sockaddr_storage MYSERVER_SOCKADDR;
 typedef struct hostent MYSERVER_HOSTENT;
 int startupSocketLib(u_short);
@@ -84,8 +80,8 @@
        Socket* getServerSocket();
 
        static void stopBlockingOperations(bool);
-       SocketHandle getHandle();
-       int setHandle(SocketHandle);
+       virtual FileHandle getHandle();
+       int setHandle(FileHandle);
        static MYSERVER_HOSTENT *gethostbyaddr(char* addr, int len, int type);
        static MYSERVER_HOSTENT *gethostbyname(const char*);
        static int gethostname(char*, int);
@@ -94,7 +90,7 @@
        int listen(int);
        Socket();
        Socket(Socket*);
-       Socket(SocketHandle);
+       Socket(FileHandle);
        Socket accept(MYSERVER_SOCKADDR*, int*);
        int setsockopt(int,int, const char*,int);
 
@@ -112,11 +108,8 @@
        int operator=(Socket);
        int getsockname(MYSERVER_SOCKADDR*,int*);
   int setNonBlocking(int);
-#ifdef __HURD__
-       virtual int dataOnRead(int sec = 1, int usec = 500);
-#else
        virtual int dataOnRead(int sec = 0, int usec = 500);
-#endif
+
   u_long getThrottling();
   void setThrottling(u_long);
   static int getLocalIPsList(string&);
@@ -125,7 +118,7 @@
   virtual int write(const char* buffer, u_long len, u_long *nbw);
 
 protected:
-       SocketHandle socketHandle;
+       FileHandle socketHandle;
 
        /*! Pointer to the socket that has accepted this connection.  */
        Socket *serverSocket;

Modified: trunk/myserver/include/connections_scheduler/connections_scheduler.h
===================================================================
--- trunk/myserver/include/connections_scheduler/connections_scheduler.h        
2008-09-14 18:19:19 UTC (rev 2813)
+++ trunk/myserver/include/connections_scheduler/connections_scheduler.h        
2008-09-14 21:09:18 UTC (rev 2814)
@@ -100,7 +100,7 @@
 
   u_long getNumTotalConnections();
 
-  void newData(short event, SocketHandle handle);
+  void newData(short event, FileHandle handle);
 
 private:
   Server* server;
@@ -114,7 +114,7 @@
   Mutex eventsMutex;
   Mutex eventsSocketMutex;
   queue<ConnectionPtr> *ready;
-  HashMap<SocketHandle, ConnectionPtr> connections;
+  HashMap<FileHandle, ConnectionPtr> connections;
   list<ListenerArg*> listeners;
   u_long currentPriority;
   u_long currentPriorityDone;

Modified: trunk/myserver/include/filter/stream.h
===================================================================
--- trunk/myserver/include/filter/stream.h      2008-09-14 18:19:19 UTC (rev 
2813)
+++ trunk/myserver/include/filter/stream.h      2008-09-14 21:09:18 UTC (rev 
2814)
@@ -1,6 +1,6 @@
 /*
 MyServer
-Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
+Copyright (C) 2002, 2003, 2004, 2008 Free Software Foundation, Inc.
 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 3 of the License, or
@@ -20,6 +20,13 @@
 
 #include "stdafx.h"
 
+#ifdef WIN32
+typedef void* FileHandle;
+#endif
+#ifdef NOT_WIN
+typedef long  FileHandle;
+#endif
+
 /*!
  *Abstract class to handle virtual data streams.
  */
@@ -29,6 +36,7 @@
   virtual int read(char* buffer, u_long len, u_long*);
   virtual int write(const char* buffer, u_long len, u_long*);
        virtual int flush(u_long*);
+  virtual FileHandle getHandle();
   Stream();
   /*! Avoid direct instances of this class. */
   virtual ~Stream() = 0;

Modified: trunk/myserver/src/base/process/process_server_manager.cpp
===================================================================
--- trunk/myserver/src/base/process/process_server_manager.cpp  2008-09-14 
18:19:19 UTC (rev 2813)
+++ trunk/myserver/src/base/process/process_server_manager.cpp  2008-09-14 
21:09:18 UTC (rev 2814)
@@ -405,7 +405,7 @@
     server->port = (initialPort + nServers++);
 
   server->socket.socket(AF_INET,SOCK_STREAM,0);
-  if(server->socket.getHandle() != (SocketHandle)INVALID_SOCKET)
+  if(server->socket.getHandle() != (FileHandle)INVALID_SOCKET)
   {
     ((sockaddr_in *)(&serverSockAddrIn))->sin_family = AF_INET;
 
@@ -480,7 +480,7 @@
   {
 #if HAVE_IPV6 && 0
     server->socket.socket(AF_INET6, SOCK_STREAM, 0);
-    if(server->socket.getHandle() != (SocketHandle)INVALID_SOCKET)
+    if(server->socket.getHandle() != (FileHandle)INVALID_SOCKET)
     {
       ((sockaddr_in6 *)(&serverSockAddrIn))->sin6_family = AF_INET6;
 

Modified: trunk/myserver/src/base/socket/socket.cpp
===================================================================
--- trunk/myserver/src/base/socket/socket.cpp   2008-09-14 18:19:19 UTC (rev 
2813)
+++ trunk/myserver/src/base/socket/socket.cpp   2008-09-14 21:09:18 UTC (rev 
2814)
@@ -56,9 +56,9 @@
 }
 
 /*!
- *Returns the base/socket/socket.handle
+ *Returns the socket handle
  */
-SocketHandle Socket::getHandle()
+FileHandle Socket::getHandle()
 {
   return socketHandle;
 }
@@ -66,7 +66,7 @@
 /*!
  *Set the handle for the socket
  */
-int Socket::setHandle(SocketHandle h)
+int Socket::setHandle(FileHandle h)
 {
   socketHandle = h;
   return 1;
@@ -94,14 +94,14 @@
  */
 int Socket::socket(int af, int type, int protocol)
 {
-  socketHandle = (SocketHandle)::socket(af, type, protocol);
+  socketHandle = (FileHandle)::socket(af, type, protocol);
   return  (int)socketHandle;
 }
 
 /*!
  *Set the base/socket/socket.handle.
  */
-Socket::Socket(SocketHandle handle)
+Socket::Socket(FileHandle handle)
 {
   throttlingRate = 0;
   setHandle(handle);
@@ -196,7 +196,7 @@
   Socket s;
 
 #ifdef WIN32
-  SocketHandle h = (SocketHandle)::accept(socketHandle,(struct sockaddr*)sa,
+  FileHandle h = (FileHandle)::accept(socketHandle,(struct sockaddr*)sa,
                                           sockaddrlen);
   s.setHandle(h);
 #endif

Modified: trunk/myserver/src/connections_scheduler/connections_scheduler.cpp
===================================================================
--- trunk/myserver/src/connections_scheduler/connections_scheduler.cpp  
2008-09-14 18:19:19 UTC (rev 2813)
+++ trunk/myserver/src/connections_scheduler/connections_scheduler.cpp  
2008-09-14 21:09:18 UTC (rev 2814)
@@ -68,18 +68,17 @@
 
     do
     {
-        if (listen(listener, 1) == SOCKET_ERROR)
-            break;
-        if ((socks[0] = socket(AF_INET, type, 0)) == INVALID_SOCKET)
-            break;
-        if (connect(socks[0], (const struct sockaddr*) &addr, sizeof(addr)) == 
SOCKET_ERROR)
-            break;
-        if ((socks[1] = accept(listener, NULL, NULL)) == INVALID_SOCKET)
-            break;
-
-        closesocket(listener);
-        return 0;
-
+      if (listen(listener, 1) == SOCKET_ERROR)
+        break;
+      if ((socks[0] = socket(AF_INET, type, 0)) == INVALID_SOCKET)
+        break;
+      if (connect(socks[0], (const struct sockaddr*) &addr, sizeof(addr)) == 
SOCKET_ERROR)
+        break;
+      if ((socks[1] = accept(listener, NULL, NULL)) == INVALID_SOCKET)
+        break;
+      
+      closesocket(listener);
+      return 0;
     } while (0);
 
     closesocket(listener);
@@ -123,8 +122,9 @@
     da->mutex->unlock();
     return 0;
   }
+
   da->terminated = false;
-  da->terminate = false;
+
   da->mutex->unlock();
 
   while(!da->terminate)
@@ -149,16 +149,16 @@
   return NULL;
 }
 
-static void newDataHandler(int fd, short event, void *arg)
+static void newDataHandler(int fd, short event, void *param)
 {
-  ConnectionsScheduler* scheduler = (ConnectionsScheduler*) arg;
+  ConnectionsScheduler::DispatcherArg* arg = 
(ConnectionsScheduler::DispatcherArg*) param;
 
-  if(scheduler)
-    scheduler->newData(event, (SocketHandle)fd);
+  if(!arg->terminate && arg->scheduler)
+    arg->scheduler->newData(event, (FileHandle)fd);
 }
 
 
-void ConnectionsScheduler::newData(short event, SocketHandle handle)
+void ConnectionsScheduler::newData(short event, FileHandle handle)
 {
   ConnectionPtr connection = connections.get(handle);
 
@@ -192,20 +192,22 @@
         /*
          *Schedule a new connection.
          *The 'c' command is followed by:
-         *SocketHandle  -> Socket to monitor for new data.
+         *FileHandle  -> Socket to monitor for new data.
          *ConnectionPtr -> Related Connection.
          *timeval       -> Timeout.
          */
-        SocketHandle handle;
+        FileHandle handle;
         ConnectionPtr c;
         timeval tv = {10, 0};
 
-        sock.recv((char*)&handle, sizeof(SocketHandle), 0);
+        sock.recv((char*)&handle, sizeof(FileHandle), 0);
         sock.recv((char*)&c, sizeof(ConnectionPtr), 0);
         sock.recv((char*)&tv, sizeof(timeval), 0);
 
-        event_once(handle, EV_READ | EV_TIMEOUT, newDataHandler, 
da->scheduler, &tv);
+        event_once(handle, EV_READ | EV_TIMEOUT, newDataHandler, da, &tv);
       }
+      if(cmd == 'r')
+        break;
       /* Handle other cmd without do anything else.  */
     }
 
@@ -232,8 +234,7 @@
     asock = s->serverSocket->accept(&asockIn, &asockInLen);
 
     if(s->server &&
-       asock.getHandle() != 0 &&
-       asock.getHandle() != (SocketHandle)INVALID_SOCKET)
+       asock.getHandle() != (FileHandle)INVALID_SOCKET)
     {
       s->server->addConnection(asock, &asockIn);
     }
@@ -348,9 +349,10 @@
 {
   static timeval tv = {1, 0};
 
-   event_init();
+  event_init();
 
   dispatcherArg.terminated = true;
+  dispatcherArg.terminate = false;
   dispatcherArg.mutex = &eventsMutex;
   dispatcherArg.server = server;
   dispatcherArg.scheduler = this;
@@ -361,7 +363,8 @@
 #define LOCAL_SOCKETPAIR_AF AF_UNIX
 #endif
   int err = create_socketpair(LOCAL_SOCKETPAIR_AF, SOCK_STREAM, 0,
-      dispatcherArg.fd);
+                              dispatcherArg.fd);
+
   if (err == -1)
   {
     if(server)
@@ -477,12 +480,12 @@
 void ConnectionsScheduler::addWaitingConnectionImpl(ConnectionPtr c, int lock)
 {
   static timeval tv = {10, 0};
-  SocketHandle handle = c->socket ? c->socket->getHandle() : NULL;
+  FileHandle handle = c->socket ? c->socket->getHandle() : NULL;
 
   if(server)
     tv.tv_sec = server->getTimeout() / 1000;
   else
-    tv.tv_sec = 30000;
+    tv.tv_sec = 30;
 
   c->setScheduled(0);
 
@@ -503,14 +506,14 @@
 
     eventsSocketMutex.lock();
     sock.write("c", 1, &nbw);
-    sock.write((char*)&handle, sizeof(SocketHandle), &nbw);
+    sock.write((char*)&handle, sizeof(FileHandle), &nbw);
     sock.write((char*)&c, sizeof(ConnectionPtr), &nbw);
     sock.write((char*)&tv, sizeof(timeval), &nbw);
     eventsSocketMutex.unlock();
   }
   else
   {
-    event_once(handle, EV_READ | EV_TIMEOUT, newDataHandler, this, &tv);
+    event_once(handle, EV_READ | EV_TIMEOUT, newDataHandler, &dispatcherArg, 
&tv);
   }
 }
 
@@ -542,7 +545,7 @@
 
     if(ready[currentPriority].size())
     {
-      SocketHandle handle;
+      FileHandle handle;
 
       ret = ready[currentPriority].front();
       ret->setScheduled(0);
@@ -562,7 +565,8 @@
  */
 void ConnectionsScheduler::release()
 {
-  u_long max = 100;
+  u_long nbw;
+  u_long max = 0;
   releasing = true;
   dispatcherArg.terminate = true;
 
@@ -574,17 +578,12 @@
     readySemaphore->unlock();
   }
 
-  event_loopexit(NULL);
-#if EVENT_LOOPBREAK | WIN32
-   event_loopbreak();
-#endif
-   u_long nbw;
-   Socket sock(dispatcherArg.fd[1]);
+  Socket sock(dispatcherArg.fd[1]);
 
-   eventsSocketMutex.lock();
-   sock.write("r", 1, &nbw);
-   eventsSocketMutex.unlock();
-
+  eventsSocketMutex.lock();
+  sock.write("r", 1, &nbw);
+  eventsSocketMutex.unlock();
+  
   if(dispatchedThreadId)
     Thread::join(dispatchedThreadId);
 
@@ -622,7 +621,7 @@
 
   connectionsMutex.lock();
 
-  HashMap<SocketHandle, ConnectionPtr>::Iterator it = connections.begin();
+  HashMap<FileHandle, ConnectionPtr>::Iterator it = connections.begin();
   for(; it != connections.end(); it++)
     out.push_back(*it);
 
@@ -654,15 +653,17 @@
 void ConnectionsScheduler::terminateConnections()
 {
   int i;
+
   try
   {
     connectionsMutex.lock();
 
-    HashMap<SocketHandle, ConnectionPtr>::Iterator it = connections.begin();
+    HashMap<FileHandle, ConnectionPtr>::Iterator it = connections.begin();
     for(; it != connections.end(); it++)
     {
-      if ( (*it)->allowDelete(true) )
-        (*it)->socket->closesocket();
+      ConnectionPtr c = *it;
+      if ( c->allowDelete(true) && c->socket)
+        c->socket->closesocket();
     }
   }
   catch(...)
@@ -695,7 +696,7 @@
   try
   {
 
-    for(HashMap<SocketHandle, ConnectionPtr>::Iterator it = 
connections.begin(); 
+    for(HashMap<FileHandle, ConnectionPtr>::Iterator it = connections.begin(); 
         it != connections.end()  && !ret; 
         it++)
     {

Modified: trunk/myserver/src/connections_scheduler/listen_threads.cpp
===================================================================
--- trunk/myserver/src/connections_scheduler/listen_threads.cpp 2008-09-14 
18:19:19 UTC (rev 2813)
+++ trunk/myserver/src/connections_scheduler/listen_threads.cpp 2008-09-14 
21:09:18 UTC (rev 2814)
@@ -94,7 +94,7 @@
     {
       server->logWriteln(languageParser->getValue("MSG_SSOCKCREATE"));
       serverSocketIPv4->socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-      if (serverSocketIPv4->getHandle() == (SocketHandle)INVALID_SOCKET)
+      if (serverSocketIPv4->getHandle() == (FileHandle)INVALID_SOCKET)
       {
         server->logPreparePrintError();
         server->logWriteln(languageParser->getValue("ERR_OPENP"));
@@ -159,7 +159,7 @@
     {
       server->logWriteln(languageParser->getValue("MSG_SSOCKCREATE"));
       serverSocketIPv6->socket(AF_INET6, SOCK_STREAM, IPPROTO_TCP);
-      if ( serverSocketIPv6->getHandle() == (SocketHandle)INVALID_SOCKET )
+      if ( serverSocketIPv6->getHandle() == (FileHandle)INVALID_SOCKET )
       {
         server->logPreparePrintError();
         server->logWriteln(languageParser->getValue("ERR_OPENP"));

Modified: trunk/myserver/src/filter/stream.cpp
===================================================================
--- trunk/myserver/src/filter/stream.cpp        2008-09-14 18:19:19 UTC (rev 
2813)
+++ trunk/myserver/src/filter/stream.cpp        2008-09-14 21:09:18 UTC (rev 
2814)
@@ -57,3 +57,11 @@
 {
 
 }
+
+/*! 
+ *Get the file handle.
+ */
+FileHandle Stream::getHandle()
+{
+  return 0;
+}

Modified: trunk/myserver/src/protocol/ftp/ftp.cpp
===================================================================
--- trunk/myserver/src/protocol/ftp/ftp.cpp     2008-09-14 18:19:19 UTC (rev 
2813)
+++ trunk/myserver/src/protocol/ftp/ftp.cpp     2008-09-14 21:09:18 UTC (rev 
2814)
@@ -581,7 +581,7 @@
   {
     asockInLen = sizeof(sockaddr_in);
     asock = pFtpUserData->m_pDataConnection->socket->accept(&asockIn, 
&asockInLen);
-    if ( asock.getHandle() == (SocketHandle)INVALID_SOCKET )
+    if ( asock.getHandle() == (FileHandle)INVALID_SOCKET )
       return;
 
     pFtpUserData->m_pDataConnection->socket->shutdown(SD_BOTH);
@@ -1575,7 +1575,7 @@
 
   Socket *pSocket = new Socket();
   pSocket->socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-  if ( pSocket->getHandle() == (SocketHandle)INVALID_SOCKET )
+  if ( pSocket->getHandle() == (FileHandle)INVALID_SOCKET )
     return 0;
   int nReuseAddr = 1;
   MYSERVER_SOCKADDR_STORAGE storage = { 0 };






reply via email to

[Prev in Thread] Current Thread [Next in Thread]