added gnutls backend and moved backend code into new files
[ircu2.10.12-pk.git] / ircd / m_ping.c
index 6453ac77e568e969cafdd9f48f914769d9a87e6c..95d747953e3a37d8ede7a9abfac110e0127099f6 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_log.h"
 #include "ircd_reply.h"
 #include "ircd_string.h"
 #include "ircd.h"
 #include "msg.h"
 #include "numeric.h"
 #include "numnicks.h"
+#include "opercmds.h"
 #include "s_debug.h"
 #include "send.h"
 
-#include <assert.h>
+/* #include <assert.h> -- Now using assert in ircd_log.h */
+#include <stdlib.h>
 #include <string.h>
 
 /*
  * parv[2] = destination
  */
 int m_ping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
+{
+  assert(0 != cptr);
+  assert(cptr == sptr);
+
+  if (parc < 2 || EmptyString(parv[1]))
+    return send_reply(sptr, ERR_NOORIGIN);
+
+  sendcmdto_one(&me, CMD_PONG, sptr, "%C :%s", &me, parv[1]);
+  return 0;
+}
+
+/*
+ * mo_ping - oper message handler
+ *
+ * parv[0] = sender prefix
+ * parv[1] = origin
+ * parv[2] = destination
+ */
+int mo_ping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
   struct Client* acptr;
-  char*          destination;
+  char *destination;
   assert(0 != cptr);
   assert(cptr == sptr);
 
@@ -171,7 +187,7 @@ int m_ping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 
   destination = parv[2];        /* Will get NULL or pointer (parc >= 2!!) */
 
-  if (!EmptyString(destination) && 0 != ircd_strcmp(destination, me.name)) {
+  if (!EmptyString(destination) && 0 != ircd_strcmp(destination, cli_name(&me))) {
     if ((acptr = FindServer(destination)))
       sendcmdto_one(sptr, CMD_PING, acptr, "%C :%s", sptr, destination);
     else
@@ -187,7 +203,7 @@ int m_ping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
     /* Is this supposed to be here? */
     acptr = FindClient(origin);
     if (acptr && acptr != sptr)
-      origin = cptr->name;
+      origin = cli_name(cptr);
     
     if (strlen(origin) > 64)
       origin[64] = '\0';
@@ -206,7 +222,7 @@ int m_ping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
  */
 
 /*
- * ms_ping - server message handler template
+ * ms_ping - server message handler
  */
 int ms_ping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
@@ -222,15 +238,20 @@ int ms_ping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
     /*
      * don't bother sending the error back
      */
-#if 0
-    sendto_one(sptr, err_str(ERR_NOORIGIN), me.name, parv[0]); /* XXX DEAD */
-#endif
     return 0;
   }
   origin      = parv[1];
   destination = parv[2];        /* Will get NULL or pointer (parc >= 2!!) */
 
-  if (!EmptyString(destination) && 0 != ircd_strcmp(destination, me.name)) {
+  if (parc > 3)
+  {
+    /* AsLL ping, send reply back */
+    int diff = atoi(militime_float(parv[3]));
+    sendcmdto_one(&me, CMD_PONG, sptr, "%C %s %s %i %s", &me, origin,
+                  parv[3], diff, militime_float(NULL));
+    return 0;
+  }
+  if (!EmptyString(destination) && 0 != ircd_strcmp(destination, cli_name(&me))) {
     if ((acptr = FindServer(destination))) {
       /*
        * Servers can just forward the origin
@@ -254,47 +275,3 @@ int ms_ping(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   }
   return 0;
 }
-
-
-#if 0
-/*
- * m_ping
- *
- * parv[0] = sender prefix
- * parv[1] = origin
- * parv[2] = destination
- */
-int m_ping(struct Client *cptr, struct Client *sptr, int parc, char *parv[])
-{
-  struct Client *acptr;
-  char *origin, *destination;
-
-  if (parc < 2 || *parv[1] == '\0')
-  {
-    sendto_one(sptr, err_str(ERR_NOORIGIN), me.name, parv[0]); /* XXX DEAD */
-    return 0;
-  }
-  origin = parv[1];
-  destination = parv[2];        /* Will get NULL or pointer (parc >= 2!!) */
-
-  acptr = FindClient(origin);
-  if (acptr && acptr != sptr)
-    origin = cptr->name;
-
-  if (!EmptyString(destination) && 0 != ircd_strcmp(destination, me.name) != 0)
-  {
-    if ((acptr = FindServer(destination)))
-      sendto_one(acptr, ":%s PING %s :%s", parv[0], origin, destination); /* XXX DEAD */
-    else
-    {
-      sendto_one(sptr, err_str(ERR_NOSUCHSERVER), /* XXX DEAD */
-          me.name, parv[0], destination);
-      return 0;
-    }
-  }
-  else
-    sendto_one(sptr, ":%s PONG %s :%s", me.name, me.name, origin); /* XXX DEAD */
-  return 0;
-}
-#endif
-