* | Inspire Internet Relay Chat Daemon |
* +------------------------------------+
*
- * InspIRCd: (C) 2002-2009 InspIRCd Development Team
+ * InspIRCd: (C) 2002-2010 InspIRCd Development Team
* See: http://wiki.inspircd.org/Credits
*
* This program is free but copyrighted software; see
* WAIT_AUTH_2: indicates that the socket is inbound
* but has not yet sent and received
* SERVER strings.
- * CONNECTED: represents a fully authorized, fully
+ * CONNECTED: represents a fully authorized, fully
* connected server.
+ * DYING: represents a server that has had an error.
*/
-enum ServerState { CONNECTING, WAIT_AUTH_1, WAIT_AUTH_2, CONNECTED };
+enum ServerState { CONNECTING, WAIT_AUTH_1, WAIT_AUTH_2, CONNECTED, DYING };
+
+struct CapabData
+{
+ std::string ModuleList; /* Required module list of other server from CAPAB */
+ std::string OptModuleList; /* Optional module list of other server from CAPAB */
+ std::string ChanModes;
+ std::string UserModes;
+ std::map<std::string,std::string> CapKeys; /* CAPAB keys from other server */
+ std::string ourchallenge; /* Challenge sent for challenge/response */
+ std::string theirchallenge; /* Challenge recv for challenge/response */
+ std::string OutboundPass; /* Outbound password */
+ int capab_phase; /* Have sent CAPAB already */
+ bool auth_fingerprint; /* Did we auth using SSL fingerprint */
+ bool auth_challenge; /* Did we auth using challenge/response */
+};
/** Every SERVER connection inbound or outbound is represented by
* an object of type TreeSocket.
std::string InboundServerName; /* Server name sent to us by other side */
std::string InboundDescription; /* Server description (GECOS) sent to us by the other side */
std::string InboundSID; /* Server ID sent to us by the other side */
+ std::string IP;
+ CapabData* capab;
int num_lost_users; /* Users lost in split */
int num_lost_servers; /* Servers lost in split */
time_t NextPing; /* Time when we are due to ping this server */
bool LastPingWasGood; /* Responded to last ping we sent? */
- std::string IP;
- std::string ModuleList; /* Required module list of other server from CAPAB */
- std::string OptModuleList; /* Optional module list of other server from CAPAB */
- std::map<std::string,std::string> CapKeys; /* CAPAB keys from other server */
- std::string ourchallenge; /* Challenge sent for challenge/response */
- std::string theirchallenge; /* Challenge recv for challenge/response */
- std::string OutboundPass; /* Outbound password */
- int capab_phase; /* Have sent CAPAB already */
- bool auth_fingerprint; /* Did we auth using SSL fingerprint */
- bool auth_challenge; /* Did we auth using challenge/response */
int proto_version; /* Remote protocol version */
public:
reference<Autoconnect> myautoconnect; /* Autoconnect used to cause this connection, if any */
/** Add modules to VF_COMMON list for backwards compatability */
void CompatAddModules(std::vector<std::string>& modlist);
- /* Check a comma seperated list for an item */
- bool HasItem(const std::string &list, const std::string &item);
-
- /* Isolate and return the elements that are different between two comma seperated lists */
- std::string ListDifference(const std::string &one, const std::string &two);
+ /* Isolate and return the elements that are different between two lists */
+ void ListDifference(const std::string &one, const std::string &two, char sep,
+ std::string& mleft, std::string& mright);
bool Capab(const parameterlist ¶ms);
*/
void Squit(TreeServer* Current, const std::string &reason);
- /** FMODE command - server mode with timestamp checks */
- void ForceMode(User* who, parameterlist ¶ms);
-
- /** FTOPIC command */
- bool ForceTopic(const std::string &source, parameterlist ¶ms);
-
- /** FJOIN, similar to TS6 SJOIN, but not quite. */
- void ForceJoin(User* who, parameterlist ¶ms);
-
/* Used on nick collision ... XXX ugly function HACK */
int DoCollision(User *u, time_t remotets, const std::string &remoteident, const std::string &remoteip, const std::string &remoteuid);
- /** UID command */
- bool ParseUID(const std::string &source, parameterlist ¶ms);
-
/** Send one or more FJOINs for a channel of users.
* If the length of a single line is more than 480-NICKMAX
* in length, it is split over multiple lines.
/** Handle ERROR command */
void Error(parameterlist ¶ms);
- /** remote MOTD. */
- bool Motd(const std::string &prefix, parameterlist ¶ms);
-
- /** remote ADMIN. */
- bool Admin(const std::string &prefix, parameterlist ¶ms);
-
- bool Stats(const std::string &prefix, parameterlist ¶ms);
-
- /** Because the core won't let users or even SERVERS set +o,
- * we use the OPERTYPE command to do this.
- */
- bool OperType(const std::string &prefix, parameterlist ¶ms);
-
/** Remote AWAY */
bool Away(const std::string &prefix, parameterlist ¶ms);
*/
bool LocalPong(const std::string &prefix, parameterlist ¶ms);
- /** METADATA
- */
- bool MetaData(const std::string &prefix, parameterlist ¶ms);
-
/** VERSION
*/
bool ServerVersion(const std::string &prefix, parameterlist ¶ms);
- /** CHGHOST
- */
- bool ChangeHost(const std::string &prefix, parameterlist ¶ms);
-
/** ADDLINE
*/
bool AddLine(const std::string &prefix, parameterlist ¶ms);
*/
bool DelLine(const std::string &prefix, parameterlist ¶ms);
- /** CHGNAME
- */
- bool ChangeName(const std::string &prefix, parameterlist ¶ms);
-
- /** FIDENT */
- bool ChangeIdent(const std::string &prefix, parameterlist ¶ms);
-
/** WHOIS
*/
bool Whois(const std::string &prefix, parameterlist ¶ms);
*/
bool Push(const std::string &prefix, parameterlist ¶ms);
- /** TIME
- */
- bool Time(const std::string &prefix, parameterlist ¶ms);
-
/** PING
*/
bool LocalPing(const std::string &prefix, parameterlist ¶ms);
- /** Remove all modes from a channel, including statusmodes (+qaovh etc), simplemodes, parameter modes.
- * This does not update the timestamp of the target channel, this must be done seperately.
- */
- void RemoveStatus(User* source, parameterlist ¶ms);
-
/** <- (remote) <- SERVER
*/
bool RemoteServer(const std::string &prefix, parameterlist ¶ms);