+
+ assert(Client != NULL);
+ assert(Req != NULL);
+
+ /* Not a local IRC operator? */
+ if ((!Client_HasMode(Client, 'o')) || (!Client_OperByMe(Client)))
+ return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG,
+ Client_ID(Client));
+
+ /* Bad number of parameters? */
+ if ((Req->argc != 1) && (Req->argc != 2) && (Req->argc != 5))
+ return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ Client_ID(Client), Req->command);
+
+ /* Invalid port number? */
+ if ((Req->argc > 1) && atoi(Req->argv[1]) < 1)
+ return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG,
+ Client_ID(Client), Req->command);
+
+ Log(LOG_NOTICE | LOG_snotice,
+ "Got CONNECT command from \"%s\" for \"%s\".", Client_Mask(Client),
+ Req->argv[0]);
+
+ switch (Req->argc) {
+ case 1:
+ if (!Conf_EnablePassiveServer(Req->argv[0]))
+ return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG,
+ Client_ID(Client),
+ Req->argv[0]);
+ break;
+ case 2:
+ /* Connect configured server */
+ if (!Conf_EnableServer
+ (Req->argv[0], (UINT16) atoi(Req->argv[1])))
+ return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG,
+ Client_ID(Client),
+ Req->argv[0]);
+ break;
+ default:
+ /* Add server */
+ if (!Conf_AddServer
+ (Req->argv[0], (UINT16) atoi(Req->argv[1]), Req->argv[2],
+ Req->argv[3], Req->argv[4]))
+ return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG,
+ Client_ID(Client),
+ Req->argv[0]);
+ }
+
+ return CONNECTED;
+} /* IRC_CONNECT */
+
+
+GLOBAL bool
+IRC_DISCONNECT(CLIENT *Client, REQUEST *Req )
+{
+ /* Disconnect and disable configured server */
+
+ CONN_ID my_conn;