]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Remove include/inspircd_se_config.h and socketengine-specific headers
authordanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 30 Sep 2009 18:31:05 +0000 (18:31 +0000)
committerdanieldg <danieldg@e03df62e-2008-0410-955e-edbf42e46eb7>
Wed, 30 Sep 2009 18:31:05 +0000 (18:31 +0000)
git-svn-id: http://svn.inspircd.org/repository/trunk/inspircd@11784 e03df62e-2008-0410-955e-edbf42e46eb7

21 files changed:
.Makefile.inc
.gitignore
configure
include/socketengine.h
include/socketengines/socketengine_epoll.h [deleted file]
include/socketengines/socketengine_iocp.h [deleted file]
include/socketengines/socketengine_kqueue.h [deleted file]
include/socketengines/socketengine_poll.h [deleted file]
include/socketengines/socketengine_ports.h [deleted file]
include/socketengines/socketengine_select.h [deleted file]
make/calcdep.pl
src/dns.cpp
src/filelogger.cpp
src/inspircd.cpp
src/socketengine.cpp
src/socketengines/socketengine_epoll.cpp
src/socketengines/socketengine_iocp.cpp
src/socketengines/socketengine_kqueue.cpp
src/socketengines/socketengine_poll.cpp
src/socketengines/socketengine_ports.cpp
src/socketengines/socketengine_select.cpp

index ef1610ab5ace94d65eceb43d801a4cd5b63cc13d..c801dd0685fecc38250a87d56027420c19e198ce 100644 (file)
@@ -163,14 +163,14 @@ install: target@EXTRA_DIR@
 
 clean:
        @echo Cleaning...
-       @rm -f src/inspircd src/modes/modeclasses.a
-       @rm -f src/*.so src/modules/*.so src/commands/*.so
-       @rm -f src/*.o src/*/*.o src/modules/*/*.o
-       @rm -f src/.*.d src/*/.*.d src/modules/*/.*.d
-       @rm -f $(BUILDPATH)/bin/inspircd $(BUILDPATH)/include $(BUILDPATH)/real.mk
-       @rm -rf $(BUILDPATH)/obj $(BUILDPATH)/modules
-       @-rmdir $(BUILDPATH)/bin
-       @-rmdir $(BUILDPATH)
+       @-rm -f src/inspircd src/modes/modeclasses.a include/inspircd_se_config.h
+       @-rm -f src/*.so src/modules/*.so src/commands/*.so
+       @-rm -f src/*.o src/*/*.o src/modules/*/*.o
+       @-rm -f src/.*.d src/*/.*.d src/modules/*/.*.d
+       @-rm -f $(BUILDPATH)/bin/inspircd $(BUILDPATH)/include $(BUILDPATH)/real.mk
+       @-rm -rf $(BUILDPATH)/obj $(BUILDPATH)/modules
+       @-rmdir $(BUILDPATH)/bin 2>/dev/null
+       @-rmdir $(BUILDPATH) 2>/dev/null
        @echo Completed.
 
 deinstall:
@@ -193,7 +193,6 @@ configureclean:
        rm -f GNUmakefile
        rm -f include/inspircd_config.h
        rm -f include/inspircd_version.h
-       rm -f include/inspircd_se_config.h
 
 distclean: clean configureclean
 
index df667074d3a0f0b3de3c2d6b03caec1bc4770f3e..ede2efae1bf5d58ac2d4ab6a82fb336bfed56a46 100644 (file)
@@ -17,7 +17,6 @@
 
 /include/inspircd_config.h
 /include/inspircd_version.h
-/include/inspircd_se_config.h
 
 /src/modules/m_geoip.cpp
 /src/modules/m_ldapauth.cpp
index 72764eec0d3511958a95b7dd3a3229807af00933..cd21375b5dd06557f0d977a858a982a6bb51d28b 100755 (executable)
--- a/configure
+++ b/configure
@@ -997,18 +997,6 @@ print FILEHANDLE "#define MAXBUF " . ($config{MAXBUF}+2) . "\n";
                print FILEHANDLE "\n#include \"threadengines/threadengine_pthread.h\"\n\n#endif\n";
                close(FILEHANDLE);
 
-               open(FILEHANDLE, ">include/inspircd_se_config.h.tmp");
-               print FILEHANDLE <<EOF;
-/* Auto generated by configure, do not modify or commit to svn! */
-#ifndef __CONFIGURATION_SOCKETENGINE__
-#define __CONFIGURATION_SOCKETENGINE__
-
-#include "socketengines/$config{SOCKETENGINE}.h"
-
-#endif
-EOF
-               close(FILEHANDLE);
-
                open(FILEHANDLE, ">include/inspircd_version.h.tmp");
                print FILEHANDLE <<EOF;
 #define VERSION "$version"
@@ -1017,7 +1005,7 @@ EOF
 EOF
                close FILEHANDLE;
 
-               for my $file (qw(include/inspircd_config.h include/inspircd_se_config.h include/inspircd_version.h)) {
+               for my $file (qw(include/inspircd_config.h include/inspircd_version.h)) {
                        my $diff = 0;
                        open my $fh1, $file or $diff = 1;
                        open my $fh2, $file.'.tmp' or die "Can't read $file.tmp that we just wrote: $!";
index 1a0a61670f7e8439a03393c919d9bee3e1074735..662bd8e055e261735e7270f2ccffbf07e25f2bc1 100644 (file)
@@ -473,5 +473,7 @@ public:
        void GetStats(float &kbitpersec_in, float &kbitpersec_out, float &kbitpersec_total);
 };
 
+SocketEngine* CreateSocketEngine();
+
 #endif
 
diff --git a/include/socketengines/socketengine_epoll.h b/include/socketengines/socketengine_epoll.h
deleted file mode 100644 (file)
index 08a9b1b..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
- *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#ifndef __SOCKETENGINE_EPOLL__
-#define __SOCKETENGINE_EPOLL__
-
-#include <vector>
-#include <string>
-#include <map>
-#include "inspircd_config.h"
-#include "inspircd.h"
-#include "socketengine.h"
-#include <sys/epoll.h>
-#define EP_DELAY 5
-
-/** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll().
- */
-class EPollEngine : public SocketEngine
-{
-private:
-       /** These are used by epoll() to hold socket events
-        */
-       struct epoll_event* events;
-       int EngineHandle;
-public:
-       /** Create a new EPollEngine
-        */
-       EPollEngine();
-       /** Delete an EPollEngine
-        */
-       virtual ~EPollEngine();
-       virtual bool AddFd(EventHandler* eh, int event_mask);
-       virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
-       virtual bool DelFd(EventHandler* eh, bool force = false);
-       virtual int DispatchEvents();
-       virtual std::string GetName();
-};
-
-/** Creates a SocketEngine
- */
-class SocketEngineFactory
-{
-public:
-       /** Create a new instance of SocketEngine based on EpollEngine
-        */
-       SocketEngine* Create() { return new EPollEngine; }
-};
-
-#endif
diff --git a/include/socketengines/socketengine_iocp.h b/include/socketengines/socketengine_iocp.h
deleted file mode 100644 (file)
index 0f4f6bd..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
- *
- * This program is free but copyrighted software; see
- *         the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#ifndef __SOCKETENGINE_IOCP__
-#define __SOCKETENGINE_IOCP__
-
-#define READ_BUFFER_SIZE 600
-#define USING_IOCP 1
-
-#include "inspircd_config.h"
-#include "inspircd_win32wrapper.h"
-#include "inspircd.h"
-#include "socketengine.h"
-
-/** Socket overlapped event types
- */
-enum SocketIOEvent
-{
-       /** Read ready */
-       SOCKET_IO_EVENT_READ_READY                      = 0,
-       /** Write ready */
-       SOCKET_IO_EVENT_WRITE_READY                     = 1,
-       /** Accept ready */
-       SOCKET_IO_EVENT_ACCEPT                          = 2,
-       /** Error occured */
-       SOCKET_IO_EVENT_ERROR                           = 3,
-       /** Number of events */
-       NUM_SOCKET_IO_EVENTS                            = 4,
-};
-
-/** Represents a windows overlapped IO event
- */
-class Overlapped
-{
- public:
-       /** Overlap event */
-       OVERLAPPED m_overlap;
-       /** Type of event */
-       SocketIOEvent m_event;
-#ifdef WIN64
-       /** Parameters */
-       unsigned __int64 m_params;
-#else
-       /** Parameters */
-       unsigned long m_params;
-#endif
-       /** Create an overlapped event
-        */
-       Overlapped(SocketIOEvent ev, int params) : m_event(ev), m_params(params)
-       {
-               memset(&m_overlap, 0, sizeof(OVERLAPPED));
-       }
-};
-
-/** Specific to UDP sockets with overlapped IO
- */
-struct udp_overlap
-{
-       unsigned char udp_buffer[600];
-       unsigned long udp_len;
-       sockaddr udp_sockaddr[2];
-       unsigned long udp_sockaddr_len;
-};
-
-/** Specific to accepting sockets with overlapped IO
- */
-struct accept_overlap
-{
-       int socket;
-       char buf[1024];
-};
-
-/** Implementation of SocketEngine that implements windows IO Completion Ports
- */
-class IOCPEngine : public SocketEngine
-{
-       /** Creates a "fake" file descriptor for use with an IOCP socket.
-        * This is a little slow, but it isnt called too much. We'll fix it
-        * in a future release.
-        * @return -1 if there are no free slots, and an integer if it finds one.
-        */
-       __inline int GenerateFd(int RealFd)
-       {
-               int index_hash = RealFd % MAX_DESCRIPTORS;
-               if(ref[index_hash] == 0)
-                       return index_hash;
-               else
-               {
-                       register int i = 0;
-                       for(; i < MAX_DESCRIPTORS; ++i)
-                               if(ref[i] == 0)
-                                       return i;
-               }
-               return -1;
-       }
-
-       /** Global I/O completion port that sockets attach to.
-        */
-       HANDLE m_completionPort;
-
-       /** This is kinda shitty... :/ for getting an address from a real fd.
-        */
-       std::map<int, EventHandler*> m_binding;
-
-public:
-       /** Holds the preallocated buffer passed to WSARecvFrom
-        * function. Yes, I know, it's a dirty hack.
-        */
-       udp_overlap * udp_ov;
-
-       /** Creates an IOCP Socket Engine
-        * @param Instance The creator of this object
-        */
-       IOCPEngine();
-
-       /** Deletes an IOCP socket engine and all the attached sockets
-        */
-       ~IOCPEngine();
-
-       /** Adds an event handler to the completion port, and sets up initial events.
-        * @param eh EventHandler to add
-        * @return True if success, false if no room
-        */
-       bool AddFd(EventHandler* eh, int event_mask);
-
-       /** Gets the maximum number of file descriptors that this engine can handle.
-        * @return The number of file descriptors
-        */
-       __inline int GetMaxFds() { return MAX_DESCRIPTORS; }
-
-       /** Gets the number of free/remaining file descriptors under this engine.
-        * @return Remaining count
-        */
-       __inline int GetRemainingFds()
-       {
-               register int count = 0;
-               register int i = 0;
-               for(; i < MAX_DESCRIPTORS; ++i)
-                       if(ref[i] == 0)
-                               ++count;
-               return count;
-       }
-
-       /** Removes a file descriptor from the set, preventing it from receiving any more events
-        * @return True if remove was successful, false otherwise
-        */
-       bool DelFd(EventHandler* eh, bool force = false);
-
-       /** Called every loop to handle input/output events for all sockets under this engine
-        * @return The number of "changed" sockets.
-        */
-       int DispatchEvents();
-
-       /** Gets the name of this socket engine as a string.
-        * @return string of socket engine name
-        */
-       std::string GetName();
-
-       void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
-
-       /** Posts a completion event on the specified socket.
-        * @param eh EventHandler for message
-        * @param type Event Type
-        * @param param Event Parameter
-        * @return True if added, false if not
-        */
-       bool PostCompletionEvent(EventHandler* eh, SocketIOEvent type, int param);
-
-       /** Posts a read event on the specified socket
-        * @param eh EventHandler (socket)
-        */
-       void PostReadEvent(EventHandler* eh);
-
-       /** Posts an accept event on the specified socket
-        * @param eh EventHandler (socket)
-        */
-       void PostAcceptEvent(EventHandler* eh);
-
-       /** Returns the EventHandler attached to a specific fd.
-        * If the fd isnt in the socketengine, returns NULL.
-        * @param fd The event handler to look for
-        * @return A pointer to the event handler, or NULL
-        */
-       EventHandler* GetRef(int fd);
-
-       /** Returns true if a file descriptor exists in
-        * the socket engine's list.
-        * @param fd The event handler to look for
-        * @return True if this fd has an event handler
-        */
-       bool HasFd(int fd);
-
-       /** Returns the EventHandler attached to a specific fd.
-        * If the fd isnt in the socketengine, returns NULL.
-        * @param fd The event handler to look for
-        * @return A pointer to the event handler, or NULL
-        */
-       EventHandler* GetIntRef(int fd);
-
-       bool BoundsCheckFd(EventHandler* eh);
-
-       virtual int Accept(EventHandler* fd, sockaddr *addr, socklen_t *addrlen);
-
-       virtual int RecvFrom(EventHandler* fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
-
-       virtual int Blocking(int fd);
-
-       virtual int NonBlocking(int fd);
-
-       virtual int GetSockName(EventHandler* fd, sockaddr *name, socklen_t* namelen);
-
-       virtual int Close(int fd);
-
-       virtual int Close(EventHandler* fd);
-};
-
-/** Creates a SocketEngine
- */
-class SocketEngineFactory
-{
-public:
-       /** Create a new instance of SocketEngine based on IOCPEngine
-        */
-       SocketEngine* Create() { return new IOCPEngine; }
-};
-
-#endif
diff --git a/include/socketengines/socketengine_kqueue.h b/include/socketengines/socketengine_kqueue.h
deleted file mode 100644 (file)
index 01621c1..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
- *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#ifndef __SOCKETENGINE_KQUEUE__
-#define __SOCKETENGINE_KQUEUE__
-
-#include <vector>
-#include <string>
-#include <map>
-#include "inspircd_config.h"
-#include "inspircd.h"
-#include <sys/types.h>
-#include <sys/event.h>
-#include <sys/time.h>
-#include "socketengine.h"
-
-/** A specialisation of the SocketEngine class, designed to use FreeBSD kqueue().
- */
-class KQueueEngine : public SocketEngine
-{
-private:
-       int EngineHandle;
-       /** These are used by kqueue() to hold socket events
-        */
-       struct kevent* ke_list;
-       /** This is a specialised time value used by kqueue()
-        */
-       struct timespec ts;
-public:
-       /** Create a new KQueueEngine
-        */
-       KQueueEngine();
-       /** Delete a KQueueEngine
-        */
-       virtual ~KQueueEngine();
-       bool AddFd(EventHandler* eh, int event_mask);
-       void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
-       virtual bool DelFd(EventHandler* eh, bool force = false);
-       virtual int DispatchEvents();
-       virtual std::string GetName();
-       virtual void RecoverFromFork();
-};
-
-/** Creates a SocketEngine
- */
-class SocketEngineFactory
-{
- public:
-       /** Create a new instance of SocketEngine based on KQueueEngine
-        */
-       SocketEngine* Create() { return new KQueueEngine; }
-};
-
-#endif
diff --git a/include/socketengines/socketengine_poll.h b/include/socketengines/socketengine_poll.h
deleted file mode 100644 (file)
index a99ce91..0000000
+++ /dev/null
@@ -1,74 +0,0 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
- *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#ifndef __SOCKETENGINE_POLL__
-#define __SOCKETENGINE_POLL__
-
-#include <vector>
-#include <string>
-#include <map>
-#include "inspircd_config.h"
-#include "inspircd.h"
-#include "socketengine.h"
-
-#ifndef WINDOWS
-       #ifndef __USE_XOPEN
-           #define __USE_XOPEN /* fuck every fucking OS ever made. needed by poll.h to work.*/
-       #endif
-       #include <poll.h>
-       #include <sys/poll.h>
-#else
-       /* *grumble* */
-       #define struct pollfd WSAPOLLFD
-       #define poll WSAPoll
-#endif
-
-class InspIRCd;
-
-/** A specialisation of the SocketEngine class, designed to use poll().
- */
-class PollEngine : public SocketEngine
-{
-private:
-       /** These are used by poll() to hold socket events
-        */
-       struct pollfd *events;
-       /** This map maps fds to an index in the events array.
-        */
-       std::map<int, unsigned int> fd_mappings;
-public:
-       /** Create a new PollEngine
-        */
-       PollEngine();
-       /** Delete a PollEngine
-        */
-       virtual ~PollEngine();
-       virtual bool AddFd(EventHandler* eh, int event_mask);
-       virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
-       virtual EventHandler* GetRef(int fd);
-       virtual bool DelFd(EventHandler* eh, bool force = false);
-       virtual int DispatchEvents();
-       virtual std::string GetName();
-};
-
-/** Creates a SocketEngine
- */
-class SocketEngineFactory
-{
-public:
-       /** Create a new instance of SocketEngine based on PollEngine
-        */
-       SocketEngine* Create() { return new PollEngine; }
-};
-
-#endif
diff --git a/include/socketengines/socketengine_ports.h b/include/socketengines/socketengine_ports.h
deleted file mode 100644 (file)
index be8c4ba..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
- *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#ifndef __SOCKETENGINE_PORTS__
-#define __SOCKETENGINE_PORTS__
-
-#ifndef __sun
-# error You need Solaris 10 or later to make use of this code.
-#endif
-
-#include <vector>
-#include <string>
-#include <map>
-#include "inspircd_config.h"
-#include "inspircd.h"
-#include "socketengine.h"
-#include <port.h>
-
-/** A specialisation of the SocketEngine class, designed to use solaris 10 I/O completion ports
- */
-class PortsEngine : public SocketEngine
-{
-private:
-       /** These are used by epoll() to hold socket events
-        */
-       port_event_t* events;
-public:
-       /** Create a new PortsEngine
-        * @param Instance The creator of this object
-        */
-       PortsEngine();
-       /** Delete a PortsEngine
-        */
-       virtual ~PortsEngine();
-       virtual bool AddFd(EventHandler* eh, int event_mask);
-       void OnSetEvent(EventHandler* eh, int old_event, int new_event);
-       virtual bool DelFd(EventHandler* eh, bool force = false);
-       virtual int DispatchEvents();
-       virtual std::string GetName();
-       virtual void WantWrite(EventHandler* eh);
-};
-
-/** Creates a SocketEngine
- */
-class SocketEngineFactory
-{
-public:
-       /** Create a new instance of SocketEngine based on PortsEngine
-        */
-       SocketEngine* Create() { return new PortsEngine; }
-};
-
-#endif
-
diff --git a/include/socketengines/socketengine_select.h b/include/socketengines/socketengine_select.h
deleted file mode 100644 (file)
index 5a4aee8..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-/*       +------------------------------------+
- *       | Inspire Internet Relay Chat Daemon |
- *       +------------------------------------+
- *
- *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
- * See: http://wiki.inspircd.org/Credits
- *
- * This program is free but copyrighted software; see
- *            the file COPYING for details.
- *
- * ---------------------------------------------------
- */
-
-#ifndef __SOCKETENGINE_SELECT__
-#define __SOCKETENGINE_SELECT__
-
-#include <vector>
-#include <string>
-#include <map>
-#ifndef WINDOWS
-#include <sys/select.h>
-#endif // WINDOWS
-#include "inspircd_config.h"
-#include "inspircd.h"
-#include "socketengine.h"
-
-/** A specialisation of the SocketEngine class, designed to use traditional select().
- */
-class SelectEngine : public SocketEngine
-{
-public:
-       /** Create a new SelectEngine
-        */
-       SelectEngine();
-       /** Delete a SelectEngine
-        */
-       virtual ~SelectEngine();
-       virtual bool AddFd(EventHandler* eh, int event_mask);
-       virtual bool DelFd(EventHandler* eh, bool force = false);
-       void OnSetEvent(EventHandler* eh, int, int);
-       virtual int DispatchEvents();
-       virtual std::string GetName();
-};
-
-/** Creates a SocketEngine
- */
-class SocketEngineFactory
-{
-public:
-       /** Create a new instance of SocketEngine based on SelectEngine
-        */
-       SocketEngine* Create() { return new SelectEngine; }
-};
-
-#endif
index d9242b098a8de05b951f16a326e5568841b2d4ec..890d8d2658e250b6b8330f082781bf01779761bc 100755 (executable)
@@ -37,9 +37,10 @@ all: bin/inspircd modules
 
 END
        my @core_deps;
-       for my $file (<*.cpp>, <modes/*.cpp>, "socketengines/$ENV{SOCKETENGINE}.cpp", "threadengines/threadengine_pthread.cpp") {
+       for my $file (<*.cpp>, <modes/*.cpp>, <socketengines/*.cpp>, "threadengines/threadengine_pthread.cpp") {
                my $out = find_output $file;
                dep_cpp $file, $out;
+               next if $file =~ m#^socketengines/# && $file ne "socketengines/$ENV{SOCKETENGINE}.cpp";
                push @core_deps, $out;
        }
        
index a28881ad2f4d00667ad5d722d9bc88a0e8f78cd1..718a1698f0bb000d552d37043d5b4e1e0c5cb628 100644 (file)
@@ -31,7 +31,6 @@ looks like this, walks like this or tastes like this.
 #include <arpa/inet.h>
 #else
 #include "inspircd_win32wrapper.h"
-#include "inspircd_se_config.h"
 #endif
 
 #include "inspircd.h"
index 1a88823c46b6c4f01d6c4d815ac14c4462d27b81..f442b8b7a548a9e5e7630a1fe43a0ef2d4021db8 100644 (file)
@@ -16,7 +16,6 @@
 #include "inspircd.h"
 #include <fstream>
 #include "socketengine.h"
-#include "inspircd_se_config.h"
 #include "filelogger.h"
 
 FileLogStream::FileLogStream(int loglevel, FileWriter *fw)
index 300d01650a1f9daf21bbb861aa374002defdf536..b815ce4ac79e5a32af5c609381c4d59fa3b5a74a 100644 (file)
@@ -36,7 +36,6 @@
 #include "xline.h"
 #include "bancache.h"
 #include "socketengine.h"
-#include "inspircd_se_config.h"
 #include "socket.h"
 #include "command_parse.h"
 #include "exitcodes.h"
@@ -374,8 +373,7 @@ InspIRCd::InspIRCd(int argc, char** argv) :
        // This must be created first, so other parts of Insp can use it while starting up
        this->Logs = new LogManager;
 
-       SocketEngineFactory SEF;
-       SE = SEF.Create();
+       SE = CreateSocketEngine();
 
        this->Threads = new ThreadEngine;
 
index 49624481ffe76bb90d853eaf339d6a7dd6beca4a..3108ee7050a590294a9a13f26b07abc3b933f792 100644 (file)
  * ---------------------------------------------------
  */
 
-/* $Core */
-
-/*********        DEFAULTS       **********/
-
-/* $ExtraSources: socketengines/socketengine_select.cpp */
-/* $ExtraObjects: socketengine_select.o */
-
-/* $If: USE_POLL */
-/* $ExtraSources: socketengines/socketengine_poll.cpp */
-/* $ExtraObjects: socketengine_poll.o */
-/* $EndIf */
-
-/* $If: USE_KQUEUE */
-/* $ExtraSources: socketengines/socketengine_kqueue.cpp */
-/* $ExtraObjects: socketengine_kqueue.o */
-/* $EndIf */
-
-/* $If: USE_EPOLL */
-/* $ExtraSources: socketengines/socketengine_epoll.cpp */
-/* $ExtraObjects: socketengine_epoll.o */
-/* $EndIf */
-
-/* $If: USE_PORTS */
-/* $ExtraSources: socketengines/socketengine_ports.cpp */
-/* $ExtraObjects: socketengine_ports.o */
-/* $EndIf */
-
 #include "inspircd.h"
-#include "socketengine.h"
 
 EventHandler::EventHandler()
 {
index 059798d25ef77ae7743025097a9645c57ae68763..c1b22ffbad12ce87d56df31855509e05cb9a9ccd 100644 (file)
  * ---------------------------------------------------
  */
 
+#include <vector>
+#include <string>
+#include <map>
 #include "inspircd.h"
 #include "exitcodes.h"
-#include "socketengines/socketengine_epoll.h"
+#include "socketengine.h"
+#include <sys/epoll.h>
 #include <ulimit.h>
+#define EP_DELAY 5
+
+/** A specialisation of the SocketEngine class, designed to use linux 2.6 epoll().
+ */
+class EPollEngine : public SocketEngine
+{
+private:
+       /** These are used by epoll() to hold socket events
+        */
+       struct epoll_event* events;
+       int EngineHandle;
+public:
+       /** Create a new EPollEngine
+        */
+       EPollEngine();
+       /** Delete an EPollEngine
+        */
+       virtual ~EPollEngine();
+       virtual bool AddFd(EventHandler* eh, int event_mask);
+       virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
+       virtual bool DelFd(EventHandler* eh, bool force = false);
+       virtual int DispatchEvents();
+       virtual std::string GetName();
+};
 
 EPollEngine::EPollEngine()
 {
@@ -216,3 +244,7 @@ std::string EPollEngine::GetName()
        return "epoll";
 }
 
+SocketEngine* CreateSocketEngine()
+{
+       return new EPollEngine;
+}
index c253bf0a629b6f4b6a4f6380a255498e8bafe80b..ad45ce5ce694876c2edd5caca91fd0f9c5f57143 100644 (file)
  * ---------------------------------------------------
  */
 
-#include "socketengines/socketengine_iocp.h"
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
+ *
+ * This program is free but copyrighted software; see
+ *         the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
+#ifndef __SOCKETENGINE_IOCP__
+#define __SOCKETENGINE_IOCP__
+
+#define READ_BUFFER_SIZE 600
+#define USING_IOCP 1
+
+#include "inspircd_config.h"
+#include "inspircd_win32wrapper.h"
+#include "inspircd.h"
+#include "socketengine.h"
+
+/** Socket overlapped event types
+ */
+enum SocketIOEvent
+{
+       /** Read ready */
+       SOCKET_IO_EVENT_READ_READY                      = 0,
+       /** Write ready */
+       SOCKET_IO_EVENT_WRITE_READY                     = 1,
+       /** Accept ready */
+       SOCKET_IO_EVENT_ACCEPT                          = 2,
+       /** Error occured */
+       SOCKET_IO_EVENT_ERROR                           = 3,
+       /** Number of events */
+       NUM_SOCKET_IO_EVENTS                            = 4,
+};
+
+/** Represents a windows overlapped IO event
+ */
+class Overlapped
+{
+ public:
+       /** Overlap event */
+       OVERLAPPED m_overlap;
+       /** Type of event */
+       SocketIOEvent m_event;
+#ifdef WIN64
+       /** Parameters */
+       unsigned __int64 m_params;
+#else
+       /** Parameters */
+       unsigned long m_params;
+#endif
+       /** Create an overlapped event
+        */
+       Overlapped(SocketIOEvent ev, int params) : m_event(ev), m_params(params)
+       {
+               memset(&m_overlap, 0, sizeof(OVERLAPPED));
+       }
+};
+
+/** Specific to UDP sockets with overlapped IO
+ */
+struct udp_overlap
+{
+       unsigned char udp_buffer[600];
+       unsigned long udp_len;
+       sockaddr udp_sockaddr[2];
+       unsigned long udp_sockaddr_len;
+};
+
+/** Specific to accepting sockets with overlapped IO
+ */
+struct accept_overlap
+{
+       int socket;
+       char buf[1024];
+};
+
+/** Implementation of SocketEngine that implements windows IO Completion Ports
+ */
+class IOCPEngine : public SocketEngine
+{
+       /** Creates a "fake" file descriptor for use with an IOCP socket.
+        * This is a little slow, but it isnt called too much. We'll fix it
+        * in a future release.
+        * @return -1 if there are no free slots, and an integer if it finds one.
+        */
+       __inline int GenerateFd(int RealFd)
+       {
+               int index_hash = RealFd % MAX_DESCRIPTORS;
+               if(ref[index_hash] == 0)
+                       return index_hash;
+               else
+               {
+                       register int i = 0;
+                       for(; i < MAX_DESCRIPTORS; ++i)
+                               if(ref[i] == 0)
+                                       return i;
+               }
+               return -1;
+       }
+
+       /** Global I/O completion port that sockets attach to.
+        */
+       HANDLE m_completionPort;
+
+       /** This is kinda shitty... :/ for getting an address from a real fd.
+        */
+       std::map<int, EventHandler*> m_binding;
+
+public:
+       /** Holds the preallocated buffer passed to WSARecvFrom
+        * function. Yes, I know, it's a dirty hack.
+        */
+       udp_overlap * udp_ov;
+
+       /** Creates an IOCP Socket Engine
+        * @param Instance The creator of this object
+        */
+       IOCPEngine();
+
+       /** Deletes an IOCP socket engine and all the attached sockets
+        */
+       ~IOCPEngine();
+
+       /** Adds an event handler to the completion port, and sets up initial events.
+        * @param eh EventHandler to add
+        * @return True if success, false if no room
+        */
+       bool AddFd(EventHandler* eh, int event_mask);
+
+       /** Gets the maximum number of file descriptors that this engine can handle.
+        * @return The number of file descriptors
+        */
+       __inline int GetMaxFds() { return MAX_DESCRIPTORS; }
+
+       /** Gets the number of free/remaining file descriptors under this engine.
+        * @return Remaining count
+        */
+       __inline int GetRemainingFds()
+       {
+               register int count = 0;
+               register int i = 0;
+               for(; i < MAX_DESCRIPTORS; ++i)
+                       if(ref[i] == 0)
+                               ++count;
+               return count;
+       }
+
+       /** Removes a file descriptor from the set, preventing it from receiving any more events
+        * @return True if remove was successful, false otherwise
+        */
+       bool DelFd(EventHandler* eh, bool force = false);
+
+       /** Called every loop to handle input/output events for all sockets under this engine
+        * @return The number of "changed" sockets.
+        */
+       int DispatchEvents();
+
+       /** Gets the name of this socket engine as a string.
+        * @return string of socket engine name
+        */
+       std::string GetName();
+
+       void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
+
+       /** Posts a completion event on the specified socket.
+        * @param eh EventHandler for message
+        * @param type Event Type
+        * @param param Event Parameter
+        * @return True if added, false if not
+        */
+       bool PostCompletionEvent(EventHandler* eh, SocketIOEvent type, int param);
+
+       /** Posts a read event on the specified socket
+        * @param eh EventHandler (socket)
+        */
+       void PostReadEvent(EventHandler* eh);
+
+       /** Posts an accept event on the specified socket
+        * @param eh EventHandler (socket)
+        */
+       void PostAcceptEvent(EventHandler* eh);
+
+       /** Returns the EventHandler attached to a specific fd.
+        * If the fd isnt in the socketengine, returns NULL.
+        * @param fd The event handler to look for
+        * @return A pointer to the event handler, or NULL
+        */
+       EventHandler* GetRef(int fd);
+
+       /** Returns true if a file descriptor exists in
+        * the socket engine's list.
+        * @param fd The event handler to look for
+        * @return True if this fd has an event handler
+        */
+       bool HasFd(int fd);
+
+       /** Returns the EventHandler attached to a specific fd.
+        * If the fd isnt in the socketengine, returns NULL.
+        * @param fd The event handler to look for
+        * @return A pointer to the event handler, or NULL
+        */
+       EventHandler* GetIntRef(int fd);
+
+       bool BoundsCheckFd(EventHandler* eh);
+
+       virtual int Accept(EventHandler* fd, sockaddr *addr, socklen_t *addrlen);
+
+       virtual int RecvFrom(EventHandler* fd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen);
+
+       virtual int Blocking(int fd);
+
+       virtual int NonBlocking(int fd);
+
+       virtual int GetSockName(EventHandler* fd, sockaddr *name, socklen_t* namelen);
+
+       virtual int Close(int fd);
+
+       virtual int Close(EventHandler* fd);
+};
+
+#endif
+
 #include "exitcodes.h"
 #include <mswsock.h>
 
@@ -526,3 +753,8 @@ int IOCPEngine::Close(EventHandler* fd)
 {
        return this->Close(fd->GetFd());
 }
+
+SocketEngine* CreateSocketEngine()
+{
+       return new IOCPEngine;
+}
index d05ee438d5bd648b1c3286ea952189d16a0efabb..0550ae051f856aa861ffb5c3d53dbeaf7a1d758c 100644 (file)
 #include <sys/types.h>
 #include <sys/event.h>
 #include <sys/time.h>
-#include "socketengines/socketengine_kqueue.h"
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
+ *
+ * This program is free but copyrighted software; see
+ *            the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
+#ifndef __SOCKETENGINE_KQUEUE__
+#define __SOCKETENGINE_KQUEUE__
+
+#include <vector>
+#include <string>
+#include <map>
+#include "inspircd_config.h"
+#include "inspircd.h"
+#include <sys/types.h>
+#include <sys/event.h>
+#include <sys/time.h>
+#include "socketengine.h"
+
+/** A specialisation of the SocketEngine class, designed to use FreeBSD kqueue().
+ */
+class KQueueEngine : public SocketEngine
+{
+private:
+       int EngineHandle;
+       /** These are used by kqueue() to hold socket events
+        */
+       struct kevent* ke_list;
+       /** This is a specialised time value used by kqueue()
+        */
+       struct timespec ts;
+public:
+       /** Create a new KQueueEngine
+        */
+       KQueueEngine();
+       /** Delete a KQueueEngine
+        */
+       virtual ~KQueueEngine();
+       bool AddFd(EventHandler* eh, int event_mask);
+       void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
+       virtual bool DelFd(EventHandler* eh, bool force = false);
+       virtual int DispatchEvents();
+       virtual std::string GetName();
+       virtual void RecoverFromFork();
+};
+
+#endif
+
 #include <sys/sysctl.h>
 
 KQueueEngine::KQueueEngine()
@@ -203,3 +257,8 @@ std::string KQueueEngine::GetName()
 {
        return "kqueue";
 }
+
+SocketEngine* CreateSocketEngine()
+{
+       return new KQueueEngine;
+}
index a72d21d1ff9a15a26d00a1cb142f19d16bafe87d..16917ffbc658a6483c597658ac4412e8f726524e 100644 (file)
 
 #include "inspircd.h"
 #include "exitcodes.h"
-#include "socketengines/socketengine_poll.h"
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
+ *
+ * This program is free but copyrighted software; see
+ *            the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
+#ifndef __SOCKETENGINE_POLL__
+#define __SOCKETENGINE_POLL__
+
+#include <vector>
+#include <string>
+#include <map>
+#include "inspircd_config.h"
+#include "inspircd.h"
+#include "socketengine.h"
+
+#ifndef WINDOWS
+       #ifndef __USE_XOPEN
+           #define __USE_XOPEN /* fuck every fucking OS ever made. needed by poll.h to work.*/
+       #endif
+       #include <poll.h>
+       #include <sys/poll.h>
+#else
+       /* *grumble* */
+       #define struct pollfd WSAPOLLFD
+       #define poll WSAPoll
+#endif
+
+class InspIRCd;
+
+/** A specialisation of the SocketEngine class, designed to use poll().
+ */
+class PollEngine : public SocketEngine
+{
+private:
+       /** These are used by poll() to hold socket events
+        */
+       struct pollfd *events;
+       /** This map maps fds to an index in the events array.
+        */
+       std::map<int, unsigned int> fd_mappings;
+public:
+       /** Create a new PollEngine
+        */
+       PollEngine();
+       /** Delete a PollEngine
+        */
+       virtual ~PollEngine();
+       virtual bool AddFd(EventHandler* eh, int event_mask);
+       virtual void OnSetEvent(EventHandler* eh, int old_mask, int new_mask);
+       virtual EventHandler* GetRef(int fd);
+       virtual bool DelFd(EventHandler* eh, bool force = false);
+       virtual int DispatchEvents();
+       virtual std::string GetName();
+};
+
+#endif
+
 #include <ulimit.h>
 #ifdef __FreeBSD__
        #include <sys/sysctl.h>
@@ -225,3 +289,7 @@ std::string PollEngine::GetName()
        return "poll";
 }
 
+SocketEngine* CreateSocketEngine()
+{
+       return new PollEngine;
+}
index d23857f506d500293e7311dd61d17bfc3ee000da..28dfdf4e4813b74fedf5413cb46443009a7db8ac 100644 (file)
 #include "inspircd.h"
 #include "exitcodes.h"
 #include <port.h>
-#include "socketengines/socketengine_ports.h"
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
+ *
+ * This program is free but copyrighted software; see
+ *            the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
+#ifndef __SOCKETENGINE_PORTS__
+#define __SOCKETENGINE_PORTS__
+
+#ifndef __sun
+# error You need Solaris 10 or later to make use of this code.
+#endif
+
+#include <vector>
+#include <string>
+#include <map>
+#include "inspircd_config.h"
+#include "inspircd.h"
+#include "socketengine.h"
+#include <port.h>
+
+/** A specialisation of the SocketEngine class, designed to use solaris 10 I/O completion ports
+ */
+class PortsEngine : public SocketEngine
+{
+private:
+       /** These are used by epoll() to hold socket events
+        */
+       port_event_t* events;
+public:
+       /** Create a new PortsEngine
+        * @param Instance The creator of this object
+        */
+       PortsEngine();
+       /** Delete a PortsEngine
+        */
+       virtual ~PortsEngine();
+       virtual bool AddFd(EventHandler* eh, int event_mask);
+       void OnSetEvent(EventHandler* eh, int old_event, int new_event);
+       virtual bool DelFd(EventHandler* eh, bool force = false);
+       virtual int DispatchEvents();
+       virtual std::string GetName();
+       virtual void WantWrite(EventHandler* eh);
+};
+
+#endif
+
+
 #include <ulimit.h>
 
 PortsEngine::PortsEngine()
@@ -163,3 +217,7 @@ std::string PortsEngine::GetName()
        return "ports";
 }
 
+SocketEngine* CreateSocketEngine()
+{
+       return new PortsEngine;
+}
index b35558a70809e048e4fd53ec09a2aee8543775ce..f0668aafbd26beb4c7c36dc92517090f8b2ab65d 100644 (file)
 #ifndef WINDOWS
 #include <sys/select.h>
 #endif // WINDOWS
-#include "socketengines/socketengine_select.h"
+/*       +------------------------------------+
+ *       | Inspire Internet Relay Chat Daemon |
+ *       +------------------------------------+
+ *
+ *  InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * See: http://wiki.inspircd.org/Credits
+ *
+ * This program is free but copyrighted software; see
+ *            the file COPYING for details.
+ *
+ * ---------------------------------------------------
+ */
+
+#ifndef __SOCKETENGINE_SELECT__
+#define __SOCKETENGINE_SELECT__
+
+#include <vector>
+#include <string>
+#include <map>
+#ifndef WINDOWS
+#include <sys/select.h>
+#endif // WINDOWS
+#include "inspircd_config.h"
+#include "inspircd.h"
+#include "socketengine.h"
+
+/** A specialisation of the SocketEngine class, designed to use traditional select().
+ */
+class SelectEngine : public SocketEngine
+{
+public:
+       /** Create a new SelectEngine
+        */
+       SelectEngine();
+       /** Delete a SelectEngine
+        */
+       virtual ~SelectEngine();
+       virtual bool AddFd(EventHandler* eh, int event_mask);
+       virtual bool DelFd(EventHandler* eh, bool force = false);
+       void OnSetEvent(EventHandler* eh, int, int);
+       virtual int DispatchEvents();
+       virtual std::string GetName();
+};
+
+#endif
+
 
 
 SelectEngine::SelectEngine()
@@ -148,3 +193,8 @@ std::string SelectEngine::GetName()
 {
        return "select";
 }
+
+SocketEngine* CreateSocketEngine()
+{
+       return new SelectEngine;
+}