Apply patches sugested by Taroe Hong plus some more bugfixes.
authorWilfried Goesgens <dothebart@citadel.org>
Mon, 29 Dec 2014 21:47:34 +0000 (22:47 +0100)
committerWilfried Goesgens <dothebart@citadel.org>
Mon, 29 Dec 2014 21:47:34 +0000 (22:47 +0100)
citadel/modules/xmpp/serv_xmpp.h
citadel/modules/xmpp/xmpp_messages.c
citadel/modules/xmpp/xmpp_presence.c
citadel/modules/xmpp/xmpp_query_namespace.c

index 97264ff30a5f6dfd435c76a5c99bc464e72a7212..b8133cdbbdd84275791049c4eca020c5f327740d 100644 (file)
@@ -41,7 +41,6 @@ typedef struct _citxmpp {                     /* Information about the current session */
 
        char sasl_auth_mech[32];        /* SASL auth mechanism requested by the client */
 
-       char message_to[256];
        char *message_body;             /* Message body in transit */
        int html_tag_level;             /* <html> tag nesting level */
 
@@ -88,7 +87,7 @@ void xmpp_queue_event(int, char *);
 void xmpp_process_events(void);
 void xmpp_presence_notify(char *, int);
 void xmpp_roster_item(struct CitContext *);
-void xmpp_send_message(char *, char *);
+void xmpp_send_message(StrBuf *, char *);
 void xmpp_non_sasl_authenticate(StrBuf *IQ_id, char *, char *, char *);
 void xmpp_massacre_roster(void);
 void xmpp_delete_old_buddies_who_no_longer_exist_from_the_client_roster(void);
index b2e2dadf4869736fa5bc15a409f77505842d7917..1f7123aebb9bc0e1382d7c743c7e12ebc6d0c6fa 100644 (file)
@@ -97,20 +97,20 @@ void xmpp_output_incoming_messages(void)
 /*
  * Client is sending a message.
  */
-void xmpp_send_message(char *message_to, char *message_body) {
+void xmpp_send_message(StrBuf *message_to, char *message_body) {
        struct CitContext *CCC = CC;
        char *recp = NULL;
        struct CitContext *cptr;
 
        if (message_body == NULL) return;
        if (message_to == NULL) return;
-       if (IsEmptyStr(message_to)) return;
+       if (StrLength(message_to) == 0) return;
        if (!CCC->logged_in) return;
 
        for (cptr = ContextList; cptr != NULL; cptr = cptr->next) {
                if (    (cptr->logged_in)
                        && (cptr->can_receive_im)
-                       && (!strcasecmp(cptr->cs_inet_email, message_to))
+                       && (!strcasecmp(cptr->cs_inet_email, ChrPtr(message_to)))
                ) {
                        recp = cptr->user.fullname;
                }
@@ -122,12 +122,11 @@ void xmpp_send_message(char *message_to, char *message_body) {
 
        free(XMPP->message_body);
        XMPP->message_body = NULL;
-       XMPP->message_to[0] = 0;
        time(&CCC->lastidle);
 }
 void xmpp_end_message(void *data, const char *supplied_el, const char **attr)
 {
-       xmpp_send_message(XMPP->message_to, XMPP->message_body);
+       xmpp_send_message(XMPP->Message.to, XMPP->message_body);
        XMPP->html_tag_level = 0;
 }
 
index 9191f8f65561b413cc28c4b7e2938e360be6f105..b4b09b1cffc57b8ecbbc82e4f407a47425bcbc20 100644 (file)
@@ -65,7 +65,7 @@
  */
 void xmpp_indicate_presence(char *presence_jid)
 {
-       XPrint(HKEY("presence"),
+       XPrint(HKEY("presence"), XCLOSED,
               XPROPERTY("from", presence_jid, strlen(presence_jid)),
               XPROPERTY("to",  XMPP->client_jid, strlen(XMPP->client_jid)),
               TYPE_ARGEND);
index e7fcc0c8a98bba7a336e646ec46fc17a8005bbb2..d943df16db6f7e1e7139fec860ca41b2cca0a41a 100644 (file)
@@ -65,7 +65,7 @@ void xmpp_roster_item(struct CitContext *cptr)
 
        XPrint(HKEY("item"), 0,
               XCPROPERTY("subscription", "both"),
-              XPROPERTY("jid",  CCC->cs_inet_email, strlen(CCC->cs_inet_email)),
+              XPROPERTY("jid",  cptr->cs_inet_email, strlen(cptr->cs_inet_email)),
               XPROPERTY("name", cptr->user.fullname, strlen(cptr->user.fullname)),
               TYPE_ARGEND);
 
@@ -116,9 +116,7 @@ void xmpp_query_namespace(TheToken_iq *IQ/*char *iq_id, char *iq_from, char *iq_
 {
        int supported_namespace = 0;
        int roster_query = 0;
-       const char *TypeStr;
-       long TLen;
-       ConstStr Type[] = {
+       static const ConstStr Type[] = {
                {HKEY("result")},
                {HKEY("error")}
        };
@@ -140,20 +138,19 @@ void xmpp_query_namespace(TheToken_iq *IQ/*char *iq_id, char *iq_from, char *iq_
         * Beginning of query result.
         */
        if (supported_namespace) {
-               TypeStr = Type[0].Key;
-               TLen    = Type[0].len;
+               XPrint(HKEY("iq"), 0,
+                      XPROPERTY("type", Type[0].Key, Type[0].len),
+                      XSPROPERTY("to",  IQ->from),
+                      XSPROPERTY("id",   IQ->id),
+                      TYPE_ARGEND);
        }
        else {
-               TypeStr = Type[1].Key;
-               TLen    = Type[1].len;
+               XPrint(HKEY("iq"), 0,
+                      XPROPERTY("type", Type[1].Key, Type[1].len),
+                      XSPROPERTY("id",   IQ->id),
+                      TYPE_ARGEND);
        }
 
-       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?
         */