1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
/* +------------------------------------+
* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
* Inspire is copyright (C) 2002-2004 ChatSpike-Dev.
* E-mail:
* <brain@chatspike.net>
* <Craig@chatspike.net>
*
* Written by Craig Edwards, Craig McLure, and others.
* This program is free but copyrighted software; see
* the file COPYING for details.
*
* ---------------------------------------------------
*/
#include "inspircd_config.h"
#include "connection.h"
#include <string>
#include <map>
#ifndef __SERVERS_H__
#define __SERVERS_H__
#define LINK_ACTIVE 1
#define LINK_INACTIVE 0
/** A class that defines the local server or a remote server
*/
class serverrec : public connection
{
private:
public:
/** server name
*/
char name[MAXBUF];
/** last ping response (ms)
*/
long pingtime;
/** invisible users on server
*/
long usercount_i;
/** non-invisible users on server
*/
long usercount;
/** opers on server
*/
long opercount;
/** number of hops away (for quick access)
*/
int hops_away;
/** ircd version
*/
long version;
/** is a JUPE server (faked to enforce a server ban)
*/
bool jupiter;
/** Description of the server
*/
char description[MAXBUF];
/** Holds nickserv's name on U:lined (services) servers (this is a kludge for ircservices which ASSUMES things :/)
*/
char nickserv[NICKMAX];
bool sync_soon;
/** Constructor
*/
serverrec();
/** Constructor which initialises some of the main variables
*/
serverrec(char* n, long ver, bool jupe);
/** Destructor
*/
~serverrec();
/** With a serverrec, this is a list of all established server connections.
*/
std::vector<ircd_connector> connectors;
/** Create a listening socket on 'host' using port number 'p'
*/
bool CreateListener(char* host, int p);
/** Begin an outbound link to another ircd at targethost.
*/
bool BeginLink(char* targethost, int port, char* password, char* servername, int myport);
/** Begin an outbound mesh link to another ircd on a network you are already an authenticated member of
*/
bool MeshCookie(char* targethost, int port, unsigned long cookie, char* servername);
/** Terminate a link to 'targethost' by calling the ircd_connector::CloseConnection method.
*/
void TerminateLink(char* targethost);
/** Send a message to a server by name, if the server is unavailable directly route the packet via another server
* If the server still cannot be reached after attempting to route the message remotely, returns false.
*/
bool SendPacket(char *message, const char* host);
/** Returns the next available packet and returns true if data is available. Writes the servername the data came from to 'host'.
* If no data is available this function returns false.
* This function will automatically close broken links and reroute pathways, generating split messages on the network.
*/
bool RecvPacket(std::deque<std::string> &messages, char* host, std::deque<std::string> &sums);
/** Find the ircd_connector oject related to a certain servername given in 'host'
*/
ircd_connector* FindHost(std::string host);
/** Add an incoming connection to the connection pool.
* (reserved for core use)
*/
bool AddIncoming(int fd,char* targethost, int sourceport);
};
#endif
|