5 #include "inspircd_config.h"
9 #include <sys/socket.h>
10 #include <sys/types.h>
12 #include <netinet/in.h>
19 #ifndef __CONNECTION_H__
20 #define __CONNECTION_H__
22 #define STATE_DISCONNECTED 0
23 #define STATE_CONNECTED 1
25 #define STATE_NOAUTH_INBOUND 3
26 #define STATE_NOAUTH_OUTBOUND 4
28 /** Each connection has one or more of these
29 * each represents ONE outbound connection to another ircd
30 * so each inbound has multiple outbounds.
32 class ircd_connector : public classbase
35 /** Sockaddr of the outbound ip and port
39 /** File descriptor of the connection
45 std::string servername;
49 std::string description;
51 /** State. STATE_NOAUTH_INBOUND, STATE_NOAUTH_OUTBOUND
52 * STATE_SYNC, STATE_DISCONNECTED, STATE_CONNECTED
56 bool SetHostAddress(char* host, int port);
62 /** Server names of servers that this server is linked to
63 * So for A->B->C, if this was the record for B it would contain A and C
64 * whilever both servers are connected to B.
66 std::vector<std::string> routes;
69 bool MakeOutboundConnection(char* host, int port);
70 std::string GetServerName();
71 void SetServerName(std::string serv);
73 void SetDescriptor(int fd);
75 void SetState(int state);
77 std::string GetDescription();
78 void SetDescription(std::string desc);
80 void SetServerPort(int p);
81 bool SetHostAndPort(char* host, int port);
82 void CloseConnection();
86 class packet : public classbase
99 class connection : public classbase
103 int fd; // file descriptor
104 char host[256]; // hostname
105 long ip; // ipv4 address
106 char inbuf[MAXBUF]; // recvQ
119 char internal_addr[1024];
121 std::vector<ircd_connector> connectors;
124 bool CreateListener(char* host, int p);
125 bool BeginLink(char* targethost, int port, char* password, char* servername, int myport);
126 bool MeshCookie(char* targethost, int port, long cookie, char* servername);
127 void TerminateLink(char* targethost);
128 bool SendPacket(char *message, const char* host);
129 bool RecvPacket(std::deque<std::string> &messages, char* host);
130 ircd_connector* FindHost(std::string host);
131 bool AddIncoming(int fd,char* targethost, int sourceport);