added basic ssl support to ircu
[ircu2.10.12-pk.git] / ircd / m_uping.c
index 132eef01a8e5836f80a0c39d9df48c5a04f408b8..8854a247295f38222a3f8c9177faa6ac99439e02 100644 (file)
  *            note:   it is guaranteed that parv[0]..parv[parc-1] are all
  *                    non-NULL pointers.
  */
-#if 0
-/*
- * No need to include handlers.h here the signatures must match
- * and we don't need to force a rebuild of all the handlers everytime
- * we add a new one to the list. --Bleep
- */
-#include "handlers.h"
-#endif /* 0 */
+#include "config.h"
+
 #include "client.h"
 #include "hash.h"
 #include "ircd.h"
+#include "ircd_log.h"
 #include "ircd_reply.h"
 #include "ircd_string.h"
 #include "match.h"
 #include "uping.h"
 
 
-#include <assert.h>
+/* #include <assert.h> -- Now using assert in ircd_log.h */
 #include <stdlib.h>
 #include <string.h>
 
@@ -127,16 +122,17 @@ int ms_uping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   assert(0 != sptr);
 
   if (!IsAnOper(sptr)) {
-    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
+    send_reply(sptr, ERR_NOPRIVILEGES);
     return 0;
   }
 
   if (parc < 5) {
-    sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "UPING");
+    send_reply(sptr, ERR_NEEDMOREPARAMS, "UPING");
     return 0;
   }
 
-  if (hunt_server(1, cptr, sptr, "%s%s " TOK_UPING " %s %s %s %s", 3, parc, parv) != HUNTED_ISME)
+  if (hunt_server_cmd(sptr, CMD_UPING, cptr, 1, "%s %s %C %s", 3, parc, parv)
+      != HUNTED_ISME)
     return 0;
   /*
    * Determine port: First user supplied, then default : 7007
@@ -146,12 +142,8 @@ int ms_uping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 
   if (EmptyString(parv[4]) || (count = atoi(parv[4])) <= 0)
   {
-    if (MyUser(sptr))
-      sendto_one(sptr, ":%s NOTICE %s :UPING: Illegal number of packets: %s",
-                me.name, parv[0], parv[4]);
-    else
-      sendto_one(sptr, "%s " TOK_NOTICE " %s%s :UPING: Illegal number of packets: %s",
-                NumServ(&me), NumNick(sptr), parv[4]);
+    sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :UPING : Illegal number of "
+                 "packets: %s", sptr, parv[4]);
     return 0;
   }
   /* 
@@ -159,14 +151,10 @@ int ms_uping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
    */
   if ((aconf = conf_find_server(parv[1])))
     uping_server(sptr, aconf, port, count);
-  else {
-    if (MyUser(sptr))
-      sendto_one(sptr, ":%s NOTICE %s :UPING: Host %s not listed in ircd.conf",
-                me.name, parv[0], parv[1]);
-    else
-      sendto_one(sptr, "%s " TOK_NOTICE " %s%s :UPING: Host %s not listed in ircd.conf",
-                NumServ(&me), NumNick(sptr), parv[1]);
-  }
+  else
+    sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :UPING: Host %s not listed in "
+                 "ircd.conf", sptr, parv[1]);
+
   return 0;
 }
 
@@ -194,18 +182,18 @@ int mo_uping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   assert(IsAnOper(sptr));
 
   if (parc < 2) {
-    sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "UPING");
+    send_reply(sptr, ERR_NEEDMOREPARAMS, "UPING");
     return 0;
   }
 
   if (parc == 2) {
     parv[parc++] = UDP_PORT;
-    parv[parc++] = me.name;
+    parv[parc++] = cli_name(&me);
     parv[parc++] = "5";
   }
   else if (parc == 3) {
     if (IsDigit(*parv[2]))
-      parv[parc++] = me.name;
+      parv[parc++] = cli_name(&me);
     else {
       parv[parc++] = parv[2];
       parv[2] = UDP_PORT;
@@ -216,7 +204,7 @@ int mo_uping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
     if (IsDigit(*parv[2])) {
       if (IsDigit(*parv[3])) {
         parv[parc++] = parv[3];
-        parv[3] = me.name;
+        parv[3] = cli_name(&me);
       }
       else
         parv[parc++] = "5";
@@ -227,7 +215,8 @@ int mo_uping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
       parv[2] = UDP_PORT;
     }
   }
-  if (hunt_server(1, cptr, sptr, "%s%s " TOK_UPING " %s %s %s %s", 3, parc, parv) != HUNTED_ISME)
+  if (hunt_server_cmd(sptr, CMD_UPING, sptr, 1, "%s %s %C %s", 3, parc, parv)
+      != HUNTED_ISME)
     return 0;
   /*
    * Determine port: First user supplied, then default : 7007
@@ -237,12 +226,8 @@ int mo_uping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 
   if (EmptyString(parv[4]) || (count = atoi(parv[4])) <= 0)
   {
-    if (MyUser(sptr))
-      sendto_one(sptr, ":%s NOTICE %s :UPING: Illegal number of packets: %s",
-                me.name, parv[0], parv[4]);
-    else
-      sendto_one(sptr, "%s " TOK_NOTICE " %s%s :UPING: Illegal number of packets: %s",
-                NumServ(&me), NumNick(sptr), parv[4]);
+    sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :UPING: Illegal number of "
+                 "packets: %s", sptr, parv[4]);
     return 0;
   }
   /* 
@@ -251,182 +236,8 @@ int mo_uping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   if ((aconf = conf_find_server(parv[1])))
     uping_server(sptr, aconf, port, count);
   else {
-    if (MyUser(sptr))
-      sendto_one(sptr, ":%s NOTICE %s :UPING: Host %s not listed in ircd.conf",
-                me.name, parv[0], parv[1]);
-    else
-      sendto_one(sptr, "%s " TOK_NOTICE " %s%s :UPING: Host %s not listed in ircd.conf",
-                NumServ(&me), NumNick(sptr), parv[1]);
-  }
-  return 0;
-}
-
-
-#if 0
-/*
- * m_uping  -- by Run
- *
- * parv[0] = sender prefix
- * parv[1] = pinged server
- * parv[2] = port
- * parv[3] = hunted server
- * parv[4] = number of requested pings
- */
-int m_uping(struct Client* cptr, struct Client *sptr, int parc, char *parv[])
-{
-  struct ConfItem *aconf;
-  int port;
-  int fd;
-  struct UPing* pptr = 0;
-
-  if (!IsPrivileged(sptr))
-  {
-    sendto_one(sptr, err_str(ERR_NOPRIVILEGES), me.name, parv[0]);
-    return -1;
-  }
-
-  if (parc < 2)
-  {
-    sendto_one(sptr, err_str(ERR_NEEDMOREPARAMS), me.name, parv[0], "UPING");
-    return 0;
-  }
-
-  if (MyUser(sptr))
-  {
-    if (parc == 2)
-    {
-      parv[parc++] = UDP_PORT;
-      parv[parc++] = me.name;
-      parv[parc++] = "5";
-    }
-    else if (parc == 3)
-    {
-      if (IsDigit(*parv[2]))
-       parv[parc++] = me.name;
-      else
-      {
-       parv[parc++] = parv[2];
-       parv[2] = UDP_PORT;
-      }
-      parv[parc++] = "5";
-    }
-    else if (parc == 4)
-    {
-      if (IsDigit(*parv[2]))
-      {
-       if (IsDigit(*parv[3]))
-       {
-         parv[parc++] = parv[3];
-         parv[3] = me.name;
-       }
-       else
-         parv[parc++] = "5";
-      }
-      else
-      {
-       parv[parc++] = parv[3];
-       parv[3] = parv[2];
-       parv[2] = UDP_PORT;
-      }
-    }
-  }
-  if (hunt_server(1, cptr, sptr, ":%s UPING %s %s %s %s", 3, parc, parv) != HUNTED_ISME)
-    return 0;
-
-  if (BadPtr(parv[4]) || atoi(parv[4]) <= 0)
-  {
-    if (MyUser(sptr) || Protocol(cptr) < 10)
-      sendto_one(sptr, ":%s NOTICE %s :UPING: Illegal number of packets: %s",
-         me.name, parv[0], parv[4]);
-    else
-      sendto_one(sptr, "%s NOTICE %s%s :UPING: Illegal number of packets: %s",
-         NumServ(&me), NumNick(sptr), parv[4]);
-    return 0;
+    sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :UPING: Host %s not listed in "
+                 "ircd.conf", sptr, parv[1]);
   }
-
-  /* Check if a CONNECT would be possible at all (adapted from m_connect) */
-  for (aconf = GlobalConfList; aconf; aconf = aconf->next)
-  {
-    if (aconf->status == CONF_SERVER &&
-       match(parv[1], aconf->name) == 0)
-      break;
-  }
-  if (!aconf)
-  {
-    for (aconf = GlobalConfList; aconf; aconf = aconf->next)
-    {
-      if (aconf->status == CONF_SERVER &&
-         (match(parv[1], aconf->host) == 0 ||
-          match(parv[1], strchr(aconf->host, '@') + 1) == 0))
-       break;
-    }
-  }
-  if (!aconf)
-  {
-    if (MyUser(sptr) || Protocol(cptr) < 10)
-      sendto_one(sptr, ":%s NOTICE %s :UPING: Host %s not listed in ircd.conf",
-         me.name, parv[0], parv[1]);
-    else
-      sendto_one(sptr,
-         "%s NOTICE %s%s :UPING: Host %s not listed in ircd.conf",
-         NumServ(&me), NumNick(sptr), parv[1]);
-    return 0;
-  }
-
-  if (IsUPing(sptr))
-    cancel_ping(sptr, sptr);  /* Cancel previous ping request */
-
-  /*
-   * Determine port: First user supplied, then default : 7007
-   */
-  if (BadPtr(parv[2]) || (port = atoi(parv[2])) <= 0)
-    port = atoi(UDP_PORT);
-
-  if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) == -1) {
-    int err = errno;
-    sendto_ops("m_uping: socket: %s", (err != EMFILE) 
-                ? ((strerror(err)) ? strerror(err) : "Unknown error") : "No more sockets");
-    if (MyUser(sptr) || Protocol(cptr) < 10)
-      sendto_one(sptr, 
-                 ":%s NOTICE %s :UPING: Unable to create udp ping socket",
-                 me.name, parv[0]);
-    else
-      sendto_one(sptr,
-                 "%s NOTICE %s%s :UPING: Unable to create udp ping socket",
-                 NumServ(&me), NumNick(sptr));
-    ircd_log(L_ERROR, "UPING: Unable to create UDP socket");
-    return 0;
-  }
-
-  if (!os_set_nonblocking(fd)) {
-    if (MyUser(sptr) || Protocol(cptr) < 10)
-      sendto_one(sptr, ":%s NOTICE %s :UPING: Can't set fd non-blocking",
-            me.name, parv[0]);
-    else
-      sendto_one(sptr, "%s NOTICE %s%s :UPING: Can't set fd non-blocking",
-            NumServ(&me), NumNick(sptr));
-    close(fd);
-    return 0;
-  }
-  pptr = (struct UPing*) MyMalloc(sizeof(struct UPing));
-  assert(0 != pptr);
-  memset(pptr, 0, sizeof(struct UPing));
-
-  pptr->fd = fd;
-  pptr->sin.sin_port = htons(port);
-  pptr->sin.sin_addr.s_addr = aconf->ipnum.s_addr;
-  pptr->sin.sin_family = AF_INET;
-  pptr->count = IRCD_MIN(20, atoi(parv[4]));
-  strcpy(pptr->name, aconf->host);
-  pptr->client = sptr;
-  pptr->index = -1;
-
-  pptr->next = pingList;
-  pingList = pptr;
-
-  SetUPing(sptr);
-  ping_server(pptr);
   return 0;
 }
-#endif /* 0 */
-