Author: Ghostwolf <foxxe@wtfs.net>
authorJoseph Bongaarts <foxxe@wtfs.net>
Tue, 19 Mar 2002 22:03:36 +0000 (22:03 +0000)
committerJoseph Bongaarts <foxxe@wtfs.net>
Tue, 19 Mar 2002 22:03:36 +0000 (22:03 +0000)
Log message:
Made links behave like map, so it is also more useful with HEAD_IN_SAND_LINKS
defined.

git-svn-id: file:///home/klmitch/undernet-ircu/undernet-ircu-svn/ircu2/trunk@681 c9e4aea6-c8fd-4c43-8297-357d70d61c8c

ChangeLog
include/handlers.h
include/ircd_defs.h
include/map.h
ircd/m_links.c
ircd/m_server.c
ircd/map.c
ircd/parse.c
ircd/s_misc.c

index ba18638bb398b373b8c3d11c028fcf3be6b9ee10..e50c78b48679ad527d0cc22d0d240f9cb725c76e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,20 @@
 2002-03-19 Joseph Bongaarts <foxxe@wtfs.net>
 
+       * ircd/m_links.c: Make /links behave like /map for head_in_sand.
+       cleaned up excess code.
+
+       * ircd/map.c: Added map_dump_links_head_in_sand() Made changes in
+       map_add() and map_update() for links changes.
+
+       * include/map.h: Added info and prot to struct Map
+
+       * include/ircd_defs.h: Added MAP_CACHE_TIME for length of time
+       servers are cached in MapList
+
+       * ircd/s_misc.c: changed #ifdef for map_update()
+
+       * ircd/m_server.c: changed #ifdef for map_update()
+
        * include/ircd_policy.h: added NO_HEAD_IN_SAND for easier removal of
        hiding features.
 
index 1058cfb663d9e2c43d36755f81fef085eec8c2ab..e65ab88ab456a4c00786cea57065472ccb6b994f 100644 (file)
@@ -187,7 +187,6 @@ extern int ms_join(struct Client*, struct Client*, int, char*[]);
 extern int ms_jupe(struct Client*, struct Client*, int, char*[]);
 extern int ms_kick(struct Client*, struct Client*, int, char*[]);
 extern int ms_kill(struct Client*, struct Client*, int, char*[]);
-extern int ms_links(struct Client*, struct Client*, int, char*[]);
 extern int ms_lusers(struct Client*, struct Client*, int, char*[]);
 extern int ms_mode(struct Client*, struct Client*, int, char*[]);
 extern int ms_motd(struct Client*, struct Client*, int, char*[]);
index 492c49e009fee31dd75a26b11b82b5f0421ad460..04b9074c06463c99cb661cecabcabeafb068cf6f 100644 (file)
 #define STARTTARGETS    10
 #define RESERVEDTARGETS 12
 
-#endif /* INCLUDED_ircd_defs_h */
+#define MAP_CACHE_TIME 604800
 
+#endif /* INCLUDED_ircd_defs_h */
index 08db3e34aa97ff8690550c680df9c809f49e6d94..91d1a556876f6682cd7eeed5406a80a439c33168 100644 (file)
 #define INCLUDED_sys_types_h
 #endif
 
-#ifdef HEAD_IN_SAND_MAP
+#if defined(HEAD_IN_SAND_MAP) || defined(HEAD_IN_SAND_LINKS)
 
 struct Map {
   time_t lasttime;
   unsigned int maxclients;
   char name[HOSTLEN+1];
+  char info[REALLEN+1];
+  unsigned short prot;
   struct Map *next;
   struct Map *prev;
 };
 
 extern void map_update(struct Client *server);
+#endif /* defined(HEAD_IN_SAND_MAP) || defined(HEAD_IN_SAND_LINKS) */
+#ifdef HEAD_IN_SAND_LINKS
+extern void map_dump_links_head_in_sand(struct Client *sptr, char *mask);
+#endif /* HEAD_IN_SAND_LINKS */
+#ifdef HEAD_IN_SAND_MAP
 extern void map_dump_head_in_sand(struct Client *cptr);
-
 #endif /* HEAD_IN_SAND_MAP */
 
 extern void map_dump(struct Client *cptr, struct Client *server, char *mask, int prompt_length);
index 5c23c1ab20fe4c97c8c3d9501586f87b95c00b2d..60cd7d388411ae515a3712a3ad65e38e25ed4ffb 100644 (file)
@@ -94,6 +94,7 @@
 #include "s_user.h"
 #include "send.h"
 #include "struct.h"
+#include "map.h"
 
 #include <assert.h>
 
 int m_links(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
   char *mask;
-  struct Client *acptr;
+  struct Client *acptr = 0;
 
   if (parc > 2)
   {
@@ -136,62 +137,28 @@ int m_links(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   }
 
   send_reply(sptr, RPL_ENDOFLINKS, BadPtr(mask) ? "*" : mask);
+
   return 0;
 }
 
 #ifdef HEAD_IN_SAND_LINKS
-int m_links_redirect(struct Client* cptr, struct Client* sptr, int parc,
-                    char* parv[])
+int m_links_redirect(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
 {
-
   if (parc > 2)
     return send_reply(cptr, ERR_NOPRIVILEGES);
 
-  send_reply(sptr, RPL_ENDOFLINKS, parc < 2 ? "*" : parv[1]);
-  sendcmdto_one(&me, CMD_NOTICE, sptr, "%C :%s", sptr,
-               "/LINKS has been disabled, from CFV-165.  Visit " URL_SERVERS );
+  map_dump_links_head_in_sand(sptr, parv[1]);
+
+  send_reply(sptr, RPL_ENDOFLINKS, BadPtr(parv[1]) ? "*" : parv[1]);
+
   return 0;
 }
-#endif
 
-/*
- * ms_links - server message handler
- *
- * parv[0] = sender prefix
- * parv[1] = servername mask
- *
- * or
- *
- * parv[0] = sender prefix
- * parv[1] = server to query
- * parv[2] = servername mask
- */
-int ms_links(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
-{
-  char *mask;
-  struct Client *acptr;
+#endif HEAD_IN_SAND_LINKS
+
+
+
+
 
-  if (parc > 2)
-  {
-    if (hunt_server_cmd(sptr, CMD_LINKS, cptr, 1, "%C :%s", 1, parc, parv) !=
-        HUNTED_ISME)
-      return 0;
-    mask = parv[2];
-  }
-  else
-    mask = parc < 2 ? 0 : parv[1];
 
-  for (acptr = GlobalClientList, collapse(mask); acptr; acptr = cli_next(acptr))
-  {
-    if (!IsServer(acptr) && !IsMe(acptr))
-      continue;
-    if (!BadPtr(mask) && match(mask, cli_name(acptr)))
-      continue;
-    send_reply(sptr, RPL_LINKS, cli_name(acptr), cli_name(cli_serv(acptr)->up),
-        cli_hopcount(acptr), cli_serv(acptr)->prot,
-        ((cli_info(acptr))[0] ? cli_info(acptr) : "(Unknown Location)"));
-  }
 
-  send_reply(sptr, RPL_ENDOFLINKS, BadPtr(mask) ? "*" : mask);
-  return 0;
-}
index 12ecf47eeb92e73c711d0d18c2581ac091cbdc9a..78c8a95f88da564f70be2fb72a66ac8be9169ec7 100644 (file)
@@ -639,7 +639,7 @@ int mr_server(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   else
     ret = 0;
 
-#ifdef HEAD_IN_SAND_MAP
+#if defined(HEAD_IN_SAND_MAP) || defined(HEAD_IN_SAND_LINKS)
   map_update(cptr);
 #endif
 
@@ -1077,7 +1077,7 @@ int ms_server(struct Client* cptr, struct Client* sptr, int parc, char* parv[])
   Count_newremoteserver(UserStats);
   add_client_to_list(acptr);
   hAddClient(acptr);
-#ifdef HEAD_IN_SAND_MAP
+#if defined(HEAD_IN_SAND_MAP) || defined(HEAD_IN_SAND_LINKS)
   map_update(acptr);
 #endif
 
index ea8d1475292210d59153a0db6cd7e59b2efdf6af..77119ff0ef7af64439b657180af586315caa9cf7 100644 (file)
@@ -49,7 +49,7 @@
 #include <stdio.h>
 #include <string.h>
 
-#ifdef HEAD_IN_SAND_MAP
+#if defined(HEAD_IN_SAND_MAP) || defined(HEAD_IN_SAND_LINKS)
 
 static struct Map *MapList = 0;
 
@@ -64,6 +64,8 @@ static void map_add(struct Client *server)
 
   map->lasttime = TStime();
   strcpy(map->name, cli_name(server));
+  strcpy(map->info, cli_info(server));
+  map->prot = Protocol(server);
   map->maxclients = cli_serv(server)->clients;
 
   map->prev = 0;
@@ -108,6 +110,8 @@ void map_update(struct Client *cptr)
     if(!ircd_strcmp(cli_name(cptr), map->name)) 
     { 
       map->lasttime = TStime();
+      map->prot = Protocol(cptr);
+      strcpy(map->info, cli_info(cptr));
       if(map->maxclients < cli_serv(cptr)->clients) 
        map->maxclients = cli_serv(cptr)->clients;  
       break;
@@ -129,6 +133,9 @@ void map_update(struct Client *cptr)
   if(!map)
     map_add(cptr);
 }
+#endif /* HEAD_IN_SAND_MAP || HEAD_IN_SAND_LINKS*/ 
+
+#ifdef HEAD_IN_SAND_MAP
 
 void map_dump_head_in_sand(struct Client *cptr)
 {
@@ -144,7 +151,7 @@ void map_dump_head_in_sand(struct Client *cptr)
     smap = map->next;
 
     /* Don't show servers we haven't seen in more than a week */
-    if(map->lasttime < TStime() - 604800)
+    if(map->lasttime < TStime() - MAP_CACHE_TIME)
     {
       acptr = FindServer(map->name);
       if(!acptr)
@@ -159,7 +166,42 @@ void map_dump_head_in_sand(struct Client *cptr)
   }
 }
 
-#endif /* HEAD_IN_SAND_MAP */ 
+#endif /* HEAD_IN_SAND_MAP */
+
+#ifdef HEAD_IN_SAND_LINKS
+void map_dump_links_head_in_sand(struct Client *sptr, char *mask)
+{
+  struct Map *link = 0;
+  struct Map *slink = 0;
+  struct Client *acptr = 0;
+
+  collapse(mask);
+  
+  for(link = MapList; link; link = slink)
+  {
+    slink = link->next;
+
+    if(link->lasttime < TStime() - MAP_CACHE_TIME)
+    {
+      acptr = FindServer(link->name);
+      if(!acptr)
+      {
+       map_remove(link);
+       continue;
+      }
+      else
+       map_update(acptr);
+    }
+    if (!BadPtr(mask) && match(mask, link->name))
+      continue;
+    send_reply(sptr, RPL_LINKS, link->name, cli_name(&me), 1, link->prot, 
+              link->info);
+  }
+  /* don't forget to send me */
+  send_reply(sptr, RPL_LINKS, cli_name(&me), cli_name(&me), 0, Protocol(&me),
+            cli_info(&me));
+}
+#endif /* HEAD_IN_SAND_LINKS */
   
 void map_dump(struct Client *cptr, struct Client *server, char *mask, int prompt_length)
 {
index 7cde630d81b85285517a9c346368b7817aeb0eb8..d5cd49d51f3eead0d80ea23820156a3acede1a5e 100644 (file)
@@ -404,9 +404,9 @@ struct Message msgtab[] = {
     0, MAXPARA, MFLG_SLOW, 0,
     /* UNREG, CLIENT, SERVER, OPER, SERVICE */
 #ifdef HEAD_IN_SAND_LINKS
-    { m_unregistered, m_links_redirect, ms_links, m_links, m_ignore }
+    { m_unregistered, m_links_redirect, m_links, m_links, m_ignore }
 #else
-    { m_unregistered, m_links, ms_links, m_links, m_ignore }
+    { m_unregistered, m_links, m_links, m_links, m_ignore }
 #endif
   },
   {
index 1344f867220281693ddc3eaadce43a3763244e76..89a960d0ad2bd5427011504b1c1394e1dea1128b 100644 (file)
@@ -477,7 +477,7 @@ int exit_client(struct Client *cptr,    /* Connection being handled by
     sendto_opmask_butone(0, SNO_NETWORK, "Net break: %C %C (%s)",
                         cli_serv(victim)->up, victim, comment);
 
-#ifdef HEAD_IN_SAND_MAP    
+#if defined(HEAD_IN_SAND_MAP) || defined(HEAD_IN_SAND_LINKS)    
     map_update(victim);
 #endif
   }