inspsocket.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef __INSP_SOCKET_H__
00015 #define __INSP_SOCKET_H__
00016
00017 #include "timer.h"
00018
00022 enum BufferedSocketState
00023 {
00025 I_DISCONNECTED,
00027 I_CONNECTING,
00029 I_CONNECTED,
00031 I_ERROR
00032 };
00033
00037 enum BufferedSocketError
00038 {
00040 I_ERR_TIMEOUT,
00042 I_ERR_SOCKET,
00044 I_ERR_CONNECT,
00046 I_ERR_BIND,
00048 I_ERR_RESOLVE,
00050 I_ERR_WRITE,
00052 I_ERR_NOMOREFDS
00053 };
00054
00055
00056 class BufferedSocket;
00057 class InspIRCd;
00058
00061 class CoreExport SocketTimeout : public Timer
00062 {
00063 private:
00066 BufferedSocket* sock;
00067
00070 InspIRCd* ServerInstance;
00071
00074 int sfd;
00075
00076 public:
00084 SocketTimeout(int fd, InspIRCd* Instance, BufferedSocket* thesock, long secs_from_now, time_t now) : Timer(secs_from_now, now), sock(thesock), ServerInstance(Instance), sfd(fd) { };
00085
00088 virtual void Tick(time_t now);
00089 };
00090
00100 class CoreExport BufferedSocket : public EventHandler
00101 {
00102 public:
00103
00106 std::string cbindip;
00107
00110 InspIRCd* ServerInstance;
00111
00114 SocketTimeout* Timeout;
00115
00118 std::deque<std::string> outbuffer;
00119
00122 char host[MAXBUF];
00123
00126 int port;
00127
00133 BufferedSocketState state;
00134
00140 char IP[MAXBUF];
00141
00146 socklen_t length;
00147
00151 bool FlushWriteBuffer();
00152
00159 void SetQueues();
00160
00165 bool ClosePending;
00166
00172 bool BindAddr(const std::string &ip);
00173
00178 BufferedSocket(InspIRCd* SI);
00179
00188 BufferedSocket(InspIRCd* SI, int newfd, const char* ip);
00189
00201 BufferedSocket(InspIRCd* SI, const std::string &ipaddr, int port, unsigned long maxtime, const std::string &connectbindip = "");
00202
00208 virtual bool OnConnected();
00209
00216 virtual void OnError(BufferedSocketError e);
00217
00222 virtual int OnDisconnect();
00223
00236 virtual bool OnDataReady();
00237
00257 bool OnWriteReady();
00258
00270 virtual void OnTimeout();
00271
00278 virtual void OnClose();
00279
00285 virtual const char* Read();
00286
00292 std::string GetIP();
00293
00299 virtual void Write(const std::string &data);
00300
00306 void SetState(BufferedSocketState s);
00307
00311 BufferedSocketState GetState();
00312
00315 bool InternalMarkConnected();
00316
00322 virtual void Close();
00323
00329 virtual ~BufferedSocket();
00330
00336 virtual bool DoConnect(unsigned long maxtime);
00337
00340 void HandleEvent(EventType et, int errornum = 0);
00341
00344 bool Readable();
00345 };
00346
00347 #endif
00348