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;
49 std::string description;
51 /** Server names of servers that this server is linked to
52 * So for A->B->C, if this was the record for B it would contain A and C
53 * whilever both servers are connected to B.
55 std::vector<std::string> routes;
57 /** State. STATE_NOAUTH_INBOUND, STATE_NOAUTH_OUTBOUND
58 * STATE_SYNC, STATE_DISCONNECTED, STATE_CONNECTED
62 bool SetHostAddress(char* host, int port);
66 bool MakeOutboundConnection(char* host, int port);
67 std::string GetServerName();
68 void SetServerName(std::string serv);
70 void SetDescriptor(int fd);
72 void SetState(int state);
76 class packet : public classbase
89 class connection : public classbase
93 int fd; // file descriptor
94 char host[256]; // hostname
95 long ip; // ipv4 address
96 char inbuf[MAXBUF]; // recvQ
109 char internal_addr[1024];
111 std::vector<ircd_connector> connectors;
114 bool CreateListener(char* host, int p);
115 bool BeginLink(char* targethost, int port, char* password, char* servername);
116 void TerminateLink(char* targethost);
117 bool SendPacket(char *message, const char* host);
118 bool RecvPacket(std::deque<std::string> &messages, char* host);
119 ircd_connector* FindHost(std::string host);
120 bool AddIncoming(int fd,char* targethost);