]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/xmpp/xmpp_query_namespace.c
sys/time.h no longer needed on modern systems
[citadel.git] / citadel / modules / xmpp / xmpp_query_namespace.c
index e791f3e6bcac09305038cb502165288ee9976b4a..82e60647e9bd03d1cfbf16d735cda970ce3902b3 100644 (file)
@@ -1,21 +1,14 @@
 /*
  * Handle <iq> <get> <query> type situations (namespace queries)
  *
- * Copyright (c) 2007-2009 by Art Cancro
+ * Copyright (c) 2007-2014 by Art Cancro
  *
- *  This program is open source software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License version 3.
- *  
- *  
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  
- *  
- *  
+ * This program is open source software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 3.
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
  */
 
 #include "sysdep.h"
  */
 void xmpp_roster_item(struct CitContext *cptr)
 {
-
-       XPUT("<item subscription=\"both\" jid=\"");
-       XPutProp(cptr->cs_inet_email, strlen(cptr->cs_inet_email));
-       XPUT("\" name=\"");
-       XPutProp(cptr->user.fullname, strlen(cptr->user.fullname));
-       XPUT("\">"
-            "<group>");
-       XPutBody(CFG_KEY(c_humannode));
-       XPUT("</group>"
-            "</item>");
+       XPrint(HKEY("item"), 0,
+               XCPROPERTY("subscription", "both"),
+               XPROPERTY("jid",  cptr->cs_inet_email, strlen(cptr->cs_inet_email)),
+               XPROPERTY("name", cptr->user.fullname, strlen(cptr->user.fullname)),
+               TYPE_ARGEND
+       );
+
+       XPrint(HKEY("group"), XCLOSED,
+              XCFGBODY(c_humannode),
+              TYPE_ARGEND);
+
+       XPUT("</item>");
 }
 
 /* 
@@ -109,11 +104,17 @@ xmpp_query_namespace(purple5b5c1e5a, , vcard-temp:query)
  *
  */
 
-void xmpp_query_namespace(char *iq_id, char *iq_from, char *iq_to, char *query_xmlns)
+void xmpp_query_namespace(TheToken_iq *IQ/*char *iq_id, char *iq_from, char *iq_to*/, char *query_xmlns)
 {
        int supported_namespace = 0;
        int roster_query = 0;
-
+       const char *TypeStr;
+       long TLen;
+       ConstStr Type[] = {
+               {HKEY("result")},
+               {HKEY("error")}
+       };
+       
        /* We need to know before we begin the response whether this is a supported namespace, so
         * unfortunately all supported namespaces need to be defined here *and* down below where
         * they are handled.
@@ -125,25 +126,25 @@ void xmpp_query_namespace(char *iq_id, char *iq_from, char *iq_to, char *query_x
                supported_namespace = 1;
        }
 
-       XMPP_syslog(LOG_DEBUG, "xmpp_query_namespace(%s, %s, %s, %s)\n", iq_id, iq_from, iq_to, query_xmlns);
+       XMPP_syslog(LOG_DEBUG, "xmpp_query_namespace(%s, %s, %s, %s)\n", ChrPtr(IQ->id), ChrPtr(IQ->from), ChrPtr(IQ->to), query_xmlns);
 
        /*
         * Beginning of query result.
         */
        if (supported_namespace) {
-               XPUT("<iq type=\"result\" ");
+               TypeStr = Type[0].Key;
+               TLen    = Type[0].len;
        }
        else {
-                XPUT("<iq type=\"error\" ");
-       }
-       if (!IsEmptyStr(iq_from)) {
-               XPUT("to=\"");
-               XPutProp(iq_from, strlen(iq_from));
-               XPUT("\" ");
+               TypeStr = Type[1].Key;
+               TLen    = Type[1].len;
        }
-       XPUT("id=\"");
-       XPutProp(iq_id, strlen(iq_id));
-       XPUT("\">");
+
+       XPrint(HKEY("iq"), 0,
+              XPROPERTY("type", TypeStr, TLen),
+              XSPROPERTY("to",  IQ->from),
+              XSPROPERTY("id",   IQ->id),
+              TYPE_ARGEND);
 
        /*
         * Is this a query we know how to handle?