RXLIST command to dump lists
authorChristian Thaeter <ct@pipapo.org>
Sun, 4 Nov 2007 03:02:34 +0000 (04:02 +0100)
committerChristian Thaeter <ct@pipapo.org>
Sun, 4 Nov 2007 03:02:34 +0000 (04:02 +0100)
contrib/irc/xchat/rx.c

index c5e9183..bee668d 100644 (file)
@@ -155,16 +155,57 @@ rxdel_cb (char *word[], char *word_eol[], void *userdata)
 static int
 rxlist_cb (char *word[], char *word_eol[], void *userdata)
 {
-  //struct rx_plugin_data* rx = (struct rx_plugin_data*)userdata;
-  return XCHAT_EAT_ALL;   /* eat this command so xchat and other plugins can't process it */
+  struct rx_plugin_data* rx = (struct rx_plugin_data*)userdata;
+
+  if (!rx->addrs)
+    {
+      xchat_printf (ph, "RX: not connected");
+      return XCHAT_EAT_ALL;
+    }
+
+  int fd;
+
+  fd = socket (rx->addrs->ai_family, rx->addrs->ai_socktype, rx->addrs->ai_protocol);
+  if (fd == -1 || connect (fd, rx->addrs->ai_addr, rx->addrs->ai_addrlen))
+    {
+      xchat_printf (ph, "RX: error connecting %s:%s, %s\n", rx->server, rx->port, strerror (errno));
+      return XCHAT_EAT_ALL;
+    }
+
+  FILE* conn;
+  conn = fdopen (fd, "rb+");
+  if (!conn)
+    {
+      xchat_printf (ph, "error connecting %s:%s, %s\n", rx->server, rx->port, strerror (errno));
+      return XCHAT_EAT_ALL;
+    }
+
+  const char* list = *word[2]?word[2]:rx->list;
+
+  xchat_printf (ph, "\nRX: Listing '%s'\n", list);
+
+  fprintf (conn, "DUMP:%s\n", list);
+  /*error handling here*/
+
+  char buffer[4096];
+  while (fgets (buffer, 4095, conn))
+    {
+      xchat_printf (ph, "%s", buffer);
+    }
+  xchat_printf (ph, "\n");
+
+  fclose (conn);
+  return XCHAT_EAT_ALL;
 }
 
+#if 0
 static int
 rxraw_cb (char *word[], char *word_eol[], void *userdata)
 {
   //struct rx_plugin_data* rx = (struct rx_plugin_data*)userdata;
   return XCHAT_EAT_ALL;   /* eat this command so xchat and other plugins can't process it */
 }
+#endif
 
 static int
 rxdebug_cb (char *word[], char *word_eol[], void *userdata)