00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "inspircd_config.h"
00018 #include "base.h"
00019 #include <string>
00020 #include <map>
00021 #include <sys/types.h>
00022 #include <sys/socket.h>
00023 #include <netdb.h>
00024 #include <netinet/in.h>
00025 #include <unistd.h>
00026 #include <errno.h>
00027 #include <time.h>
00028 #include <vector>
00029 #include <deque>
00030
00031 #ifndef __CONNECTION_H__
00032 #define __CONNECTION_H__
00033
00034 #define STATE_DISCONNECTED 0
00035 #define STATE_CONNECTED 1
00036 #define STATE_SYNC 2
00037 #define STATE_NOAUTH_INBOUND 3
00038 #define STATE_NOAUTH_OUTBOUND 4
00039 #define STATE_SERVICES 5
00040
00053 class ircd_connector : public Extensible
00054 {
00055 private:
00058 sockaddr_in addr;
00059
00062 int fd;
00063
00066 std::string servername;
00067
00070 std::string description;
00071
00075 int state;
00076
00079 bool SetHostAddress(char* host, int port);
00080
00081 public:
00082
00087 char host[MAXBUF];
00088
00093 int port;
00094
00099 std::vector<std::string> routes;
00100
00101
00104 bool MakeOutboundConnection(char* host, int port);
00105
00108 std::string GetServerName();
00109
00112 void SetServerName(std::string serv);
00113
00116 int GetDescriptor();
00117
00120 void SetDescriptor(int fd);
00121
00124 int GetState();
00125
00128 void SetState(int state);
00129
00132 char* GetServerIP();
00133
00136 std::string GetDescription();
00137
00140 void SetDescription(std::string desc);
00141
00147 int GetServerPort();
00148
00151 void SetServerPort(int p);
00152
00155 bool SetHostAndPort(char* host, int port);
00156
00160 void CloseConnection();
00161 };
00162
00163
00167 class packet : public classbase
00168 {
00169 };
00170
00173 class connection : public Extensible
00174 {
00175 public:
00178 int fd;
00179
00182 char host[256];
00183
00186 char ip[32];
00187
00190 char inbuf[MAXBUF];
00191
00194 long bytes_in;
00195
00198 long bytes_out;
00199
00202 long cmds_in;
00203
00206 long cmds_out;
00207
00210 bool haspassed;
00211
00216 int port;
00217
00220 int registered;
00221
00224 short int state;
00225
00228 time_t lastping;
00229
00232 time_t signon;
00233
00236 time_t idle_lastmsg;
00237
00240 time_t nping;
00241
00244 char internal_addr[MAXBUF];
00245
00248 int internal_port;
00249
00253 std::vector<ircd_connector> connectors;
00254
00257 connection();
00258
00261 bool CreateListener(char* host, int p);
00262
00265 bool BeginLink(char* targethost, int port, char* password, char* servername, int myport);
00266
00269 bool MeshCookie(char* targethost, int port, long cookie, char* servername);
00270
00273 void TerminateLink(char* targethost);
00274
00278 bool SendPacket(char *message, const char* host);
00279
00284 bool RecvPacket(std::deque<std::string> &messages, char* host);
00285
00288 ircd_connector* FindHost(std::string host);
00289
00293 bool AddIncoming(int fd,char* targethost, int sourceport);
00294
00297 long GenKey();
00298 };
00299
00300
00301 #endif
00302