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 outbound connection
45 std::string servername;
47 /** Server names of servers that this server is linked to
48 * So for A->B->C, if this was the record for B it would contain A and C
49 * whilever both servers are connected to B.
51 std::vector<std::string> routes;
53 /** State. STATE_NOAUTH_INBOUND, STATE_NOAUTH_OUTBOUND
54 * STATE_SYNC, STATE_DISCONNECTED, STATE_CONNECTED
58 bool SetHostAddress(char* host, int port);
62 bool MakeOutboundConnection(char* host, int port);
63 std::string GetServerName();
64 void SetServerName(std::string serv);
66 void SetDescriptor(int fd);
68 void SetState(int state);
72 class packet : public classbase
85 class connection : public classbase
89 int fd; // file descriptor
90 char host[256]; // hostname
91 long ip; // ipv4 address
92 char inbuf[MAXBUF]; // recvQ
105 char internal_addr[1024];
107 std::vector<ircd_connector> connectors;
110 bool CreateListener(char* host, int p);
111 bool BeginLink(char* targethost, int port, char* password, char* servername);
112 void TerminateLink(char* targethost);
113 bool SendPacket(char *message, char* host);
114 bool RecvPacket(std::deque<std::string> &messages, char* host);
115 ircd_connector* FindHost(std::string host);
116 bool AddIncoming(int fd,char* targethost);