]> code.citadel.org Git - citadel.git/blobdiff - citadel/modules/xmpp/serv_xmpp.c
* XMPP login hooks which output protocol data should only activate if this is actuall...
[citadel.git] / citadel / modules / xmpp / serv_xmpp.c
index bab30ab7f9ada500861c0bf5fcde5452b9250abb..067faa0a1997ba915c5b5c6440d3f40c127cfb39 100644 (file)
@@ -409,7 +409,7 @@ void xmpp_xml_end(void *data, const char *supplied_el) {
 
 void xmpp_xml_chardata(void *data, const XML_Char *s, int len)
 {
-       struct citxmpp *X = XMPP;
+       citxmpp *X = XMPP;
 
        if (X->chardata_alloc == 0) {
                X->chardata_alloc = SIZ;
@@ -453,8 +453,8 @@ void xmpp_cleanup_function(void) {
  */
 void xmpp_greeting(void) {
        strcpy(CC->cs_clientname, "XMPP session");
-       CC->session_specific_data = malloc(sizeof(struct citxmpp));
-       memset(XMPP, 0, sizeof(struct citxmpp));
+       CC->session_specific_data = malloc(sizeof(citxmpp));
+       memset(XMPP, 0, sizeof(citxmpp));
        XMPP->last_event_processed = queue_event_seq;
 
        /* XMPP does not use a greeting, but we still have to initialize some things. */
@@ -510,7 +510,11 @@ void xmpp_async_loop(void) {
  */
 void xmpp_login_hook(void) {
        xmpp_queue_event(XMPP_EVT_LOGIN, CC->cs_inet_email);
-       xmpp_delete_old_buddies_who_no_longer_exist_from_the_client_roster();
+
+       /* only do the protocol stuff if this is an XMPP session */
+       if (CC->h_command_function == xmpp_command_loop) {
+               xmpp_delete_old_buddies_who_no_longer_exist_from_the_client_roster();
+       }
 }