Accept options for the server and IDs used.
[cascardo/pubsub-bot.git] / status.c
index cd77307..83c57d4 100644 (file)
--- a/status.c
+++ b/status.c
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
+
+static char * server = "vespa.holoscopio.com";
+static char * username = "pubsub";
+static char * password = "pubsub";
+static char * pbservice = "pubsub.vespa.holoscopio.com";
+static char * authed_jid = "vespa";
 
 iks *
 createiq (char *type, char *to, char *qnam, char *xmlns, iks **query)
@@ -43,7 +50,7 @@ catnode (iksparser *parser, char *node)
 {
   iks *iq;
   iks *query;
-  iq = createiq ("get", "pubsub.jabber-br.org", "query",
+  iq = createiq ("get", pbservice, "query",
                  "http://jabber.org/protocol/disco#info", &query);
   if (node != NULL)
     iks_insert_attrib (query, "node", node);
@@ -56,7 +63,7 @@ listnode (iksparser *parser, char *node)
 {
   iks *iq;
   iks *query;
-  iq = createiq ("get", "pubsub.jabber-br.org", "query",
+  iq = createiq ("get", pbservice, "query",
                  "http://jabber.org/protocol/disco#items", &query);
   if (node != NULL)
     iks_insert_attrib (query, "node", node);
@@ -69,7 +76,7 @@ createnode (iksparser *parser, char *node)
 {
   iks *iq;
   iks *query;
-  iq = createiq ("set", "pubsub.jabber-br.org", "pubsub",
+  iq = createiq ("set", pbservice, "pubsub",
                  "http://jabber.org/protocol/pubsub", &query);
   iks_insert_attrib (iks_insert (query, "create"), "node", node);
   iks_send (parser, iq);
@@ -81,7 +88,7 @@ getnode (iksparser *parser, char *node)
 {
   iks *iq;
   iks *query;
-  iq = createiq ("get", "pubsub.jabber-br.org", "pubsub",
+  iq = createiq ("get", pbservice, "pubsub",
                  "http://jabber.org/protocol/pubsub", &query);
   iks_insert_attrib (iks_insert (query, "items"), "node", node);
   iks_send (parser, iq);
@@ -93,7 +100,7 @@ vcard (iksparser *parser)
 {
   iks *iq;
   iks *query;
-  iq = createiq ("get", "pubsub.jabber-br.org", "vCard", "vcard-temp", &query);
+  iq = createiq ("get", pbservice, "vCard", "vcard-temp", &query);
   iks_send (parser, iq);
   iks_delete (iq);
 }
@@ -116,7 +123,7 @@ pushmood (iksparser *parser, char *node, char *line)
   iks *publish;
   iks *item;
   iks *mood;
-  iq = createiq ("set", "pubsub.jabber-br.org", "pubsub",
+  iq = createiq ("set", pbservice, "pubsub",
                  "http://jabber.org/protocol/pubsub", &query);
   publish = iks_insert (query, "publish");
   iks_insert_attrib (publish, "node", node);
@@ -240,7 +247,7 @@ xmpp_tls_hook (iksparser *parser, iks *node)
 int
 xmpp_sasl_hook (iksparser *parser, iks* node)
 {
-  iks_start_sasl (parser, IKS_SASL_DIGEST_MD5, "pubsub", "pubsub");
+  iks_start_sasl (parser, IKS_SASL_DIGEST_MD5, username, password);
   return 0;
 }
 
@@ -291,13 +298,15 @@ xmpp_other_hook (iksparser *parser, iks *node, char *ns)
   if (!iks_strcmp (ns, "urn:ietf:params:xml:ns:xmpp-sasl"))
     {
       if (!iks_strcmp (iks_name (node), "success"))
-        iks_send_header (parser, "jabber-br.org");
+        iks_send_header (parser, server);
+      else if (!iks_strcmp (iks_name (node), "failure"))
+        printf ("failture to authenticate: %s\n",
+                iks_string (iks_stack (node), node));
       return 0;
     }
   return 1;
 }
 
-const char * jid = "cascardo@jabber-br.org";
 
 static int
 hook (void *data, int type, iks *node)
@@ -316,7 +325,7 @@ hook (void *data, int type, iks *node)
     {
       char *from;
       from = iks_find_attrib (node, "from");
-      if (!iks_strncmp (from, jid, iks_strlen (jid)))
+      if (!iks_strncmp (from, authed_jid, iks_strlen (authed_jid)))
         {
           char *body = iks_find_cdata (node, "body");
           if (body != NULL)
@@ -347,6 +356,10 @@ hook (void *data, int type, iks *node)
       if (xmpp_features_hook (parser, node) == 0)
         return IKS_OK;
     }
+  else if (!iks_strcmp (name, "stream:error"))
+    {
+      printf ("streamerror: %s\n", iks_string (iks_stack (node), node));
+    }
   else
     {
       if (xmpp_other_hook (parser, node, ns) == 0)
@@ -360,8 +373,30 @@ int
 main (int argc, char **argv)
 {
   iksparser *parser;
+  int c;
+  while ((c = getopt (argc, argv, "s:u:p:i:a:")) != -1)
+    {
+      switch (c)
+        {
+        case 's':
+          server = optarg;
+          break;
+        case 'u':
+          username = optarg;
+          break;
+        case 'p':
+          password = optarg;
+          break;
+        case 'i':
+          pbservice = optarg;
+          break;
+        case 'a':
+          authed_jid = optarg;
+          break;
+        }
+    }
   parser = iks_stream_new ("jabber:client", &parser, hook);
-  iks_connect_tcp (parser, "jabber-br.org", 5222);
+  iks_connect_tcp (parser, server, 5222);
   while (1)
     iks_recv (parser, -1);
   return 0;