summaryrefslogtreecommitdiff
path: root/include/servers.h
blob: e7d7f254760769a48dc953e271880ebda0504fdd (plain)
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