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 /** 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);
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);
78 bool SetHostAndPort(char* host, int port);
82 class packet : public classbase
95 class connection : public classbase
99 int fd; // file descriptor
100 char host[256]; // hostname
101 long ip; // ipv4 address
102 char inbuf[MAXBUF]; // recvQ
115 char internal_addr[1024];
117 std::vector<ircd_connector> connectors;
120 bool CreateListener(char* host, int p);
121 bool BeginLink(char* targethost, int port, char* password, char* servername);
122 bool MeshCookie(char* targethost, int port, long cookie, char* servername);
123 void TerminateLink(char* targethost);
124 bool SendPacket(char *message, const char* host);
125 bool RecvPacket(std::deque<std::string> &messages, char* host);
126 ircd_connector* FindHost(std::string host);
127 bool AddIncoming(int fd,char* targethost, int sourceport);