The InspIRCd Project
Home | Developers | Wiki | Forums | Bug Tracker | SVN | Download | Blog | Stats
Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members

rconnect.cpp

Go to the documentation of this file.
00001 /*       +------------------------------------+
00002  *       | Inspire Internet Relay Chat Daemon |
00003  *       +------------------------------------+
00004  *
00005  *  InspIRCd: (C) 2002-2008 InspIRCd Development Team
00006  * See: http://www.inspircd.org/wiki/index.php/Credits
00007  *
00008  * This program is free but copyrighted software; see
00009  *            the file COPYING for details.
00010  *
00011  * ---------------------------------------------------
00012  */
00013 
00014 #include "inspircd.h"
00015 #include "configreader.h"
00016 #include "users.h"
00017 #include "channels.h"
00018 #include "modules.h"
00019 #include "commands/cmd_whois.h"
00020 #include "commands/cmd_stats.h"
00021 #include "socket.h"
00022 #include "wildcard.h"
00023 #include "xline.h"
00024 #include "transport.h"
00025 
00026 #include "m_spanningtree/timesynctimer.h"
00027 #include "m_spanningtree/resolvers.h"
00028 #include "m_spanningtree/main.h"
00029 #include "m_spanningtree/utils.h"
00030 #include "m_spanningtree/treeserver.h"
00031 #include "m_spanningtree/link.h"
00032 #include "m_spanningtree/treesocket.h"
00033 #include "m_spanningtree/rconnect.h"
00034 
00035 /* $ModDep: m_spanningtree/timesynctimer.h m_spanningtree/resolvers.h m_spanningtree/main.h m_spanningtree/utils.h m_spanningtree/treeserver.h m_spanningtree/link.h m_spanningtree/treesocket.h m_spanningtree/rconnect.h */
00036 
00037 cmd_rconnect::cmd_rconnect (InspIRCd* Instance, Module* Callback, SpanningTreeUtilities* Util) : command_t(Instance, "RCONNECT", 'o', 2), Creator(Callback), Utils(Util)
00038 {
00039         this->source = "m_spanningtree.so";
00040         syntax = "<remote-server-mask> <target-server-mask>";
00041 }
00042 
00043 CmdResult cmd_rconnect::Handle (const char** parameters, int pcnt, userrec *user)
00044 {
00045         if (IS_LOCAL(user))
00046         {
00047                 if (!Utils->FindServerMask(parameters[0]))
00048                 {
00049                         user->WriteServ("NOTICE %s :*** RCONNECT: Server \002%s\002 isn't connected to the network!", user->nick, parameters[0]);
00050                         return CMD_FAILURE;
00051                 }
00052                 user->WriteServ("NOTICE %s :*** RCONNECT: Sending remote connect to \002%s\002 to connect server \002%s\002.",user->nick,parameters[0],parameters[1]);
00053         }
00054 
00055         /* Is this aimed at our server? */
00056         if (ServerInstance->MatchText(ServerInstance->Config->ServerName,parameters[0]))
00057         {
00058                 /* Yes, initiate the given connect */
00059                 ServerInstance->SNO->WriteToSnoMask('l',"Remote CONNECT from %s matching \002%s\002, connecting server \002%s\002",user->nick,parameters[0],parameters[1]);
00060                 const char* para[1];
00061                 para[0] = parameters[1];
00062                 std::string original_command = std::string("CONNECT ") + parameters[1];
00063                 Creator->OnPreCommand("CONNECT", para, 1, user, true, original_command);
00064         }
00065         return CMD_SUCCESS;
00066 }
00067