X-Git-Url: https://code.citadel.org/?p=citadel.git;a=blobdiff_plain;f=citadel%2Fmodules%2Fxmpp%2Fxmpp_presence.c;fp=citadel%2Fmodules%2Fxmpp%2Fxmpp_presence.c;h=9191f8f65561b413cc28c4b7e2938e360be6f105;hp=521d257c4cb386d1e1c8a027f5b4a5331794cf16;hb=bb47b9c23a29dee2a8d801655a237ec50078b348;hpb=57231d9bfac327b0754787f097be79bc83cf24c6 diff --git a/citadel/modules/xmpp/xmpp_presence.c b/citadel/modules/xmpp/xmpp_presence.c index 521d257c4..9191f8f65 100644 --- a/citadel/modules/xmpp/xmpp_presence.c +++ b/citadel/modules/xmpp/xmpp_presence.c @@ -65,11 +65,10 @@ */ void xmpp_indicate_presence(char *presence_jid) { - XPUT("client_jid, strlen(XMPP->client_jid)); - XPUT("\">"); + XPrint(HKEY("presence"), + XPROPERTY("from", presence_jid, strlen(presence_jid)), + XPROPERTY("to", XMPP->client_jid, strlen(XMPP->client_jid)), + TYPE_ARGEND); } @@ -125,17 +124,19 @@ void xmpp_wholist_presence_dump(void *data, const char *supplied_el, const char void xmpp_destroy_buddy(char *presence_jid, int aggressively) { static int unsolicited_id = 1; struct CitContext *CCC = CC; + char Buf[64]; + long blen; if (!presence_jid) return; if (!XMPP) return; if (!XMPP->client_jid) return; /* Transmit non-presence information */ - XPUT("client_jid, strlen(XMPP->client_jid)); - XPUT("\">"); + XPrint(HKEY("presence"), XCLOSED, + XCPROPERTY("type", "unavailable"), + XPROPERTY("from", presence_jid, strlen(presence_jid)), + XPROPERTY("to", XMPP->client_jid, strlen(XMPP->client_jid)), + TYPE_ARGEND); /* * Setting the "aggressively" flag also sends an "unsubscribed" presence update. @@ -144,32 +145,38 @@ void xmpp_destroy_buddy(char *presence_jid, int aggressively) { * it as a rejection of a subscription request. */ if (aggressively) { - XPUT("client_jid, strlen(XMPP->client_jid)); - XPUT("\">"); + XPrint(HKEY("presence"), XCLOSED, + XCPROPERTY("type", "unsubscribed"), + XPROPERTY("from", presence_jid, strlen(presence_jid)), + XPROPERTY("to", XMPP->client_jid, strlen(XMPP->client_jid)), + TYPE_ARGEND); } // FIXME ... we should implement xmpp_indicate_nonpresence so we can use it elsewhere + blen = snprintf(Buf, sizeof(Buf), "unbuddy_%x", ++unsolicited_id); + /* Do an unsolicited roster update that deletes the contact. */ - XPUT("cs_inet_email, strlen(CCC->cs_inet_email)); - XPUT("\" to=\""); - XPutProp(XMPP->client_jid, strlen(XMPP->client_jid)); - XPUT("\" id=\"unbuddy_"); - XPrintf("%x", ++unsolicited_id); - XPUT("\">"); - - XPUT("" - "" - ""); - XPutBody(CFG_KEY(c_humannode)); - XPUT("" - "" + XPrint(HKEY("iq"), 0, + XCPROPERTY("type", "result"), + XPROPERTY("from", CCC->cs_inet_email, strlen(CCC->cs_inet_email)), + XPROPERTY("to", XMPP->client_jid, strlen(XMPP->client_jid)), + XPROPERTY("id", Buf, blen), + TYPE_ARGEND); + + XPrint(HKEY("query"), 0, + XCPROPERTY("xmlns", "jabber:iq:roster"), + TYPE_ARGEND); + + XPrint(HKEY("item"), 0, + XCPROPERTY("subscription", "remove"), + XPROPERTY("jid", presence_jid, strlen(presence_jid)), + TYPE_ARGEND); + + XPrint(HKEY("group"), XCLOSED, + XCFGBODY(c_humannode), + TYPE_ARGEND); + XPUT("" "" "" ); @@ -209,16 +216,26 @@ void xmpp_presence_notify(char *presence_jid, int event_type) { visible_sessions, presence_jid, CC->cs_pid); if ( (event_type == XMPP_EVT_LOGIN) && (visible_sessions == 1) ) { + long blen; + char Buf[64]; XMPP_syslog(LOG_DEBUG, "Telling session %d that <%s> logged in\n", CC->cs_pid, presence_jid); /* Do an unsolicited roster update that adds a new contact. */ assert(which_cptr_is_relevant >= 0); - XPUT("" - ""); + + blen = snprintf(Buf, sizeof(Buf), "unsolicited_%x", ++unsolicited_id); + + XPrint(HKEY("iq"), 0, + XCPROPERTY("type", "result"), + XPROPERTY("id", Buf, blen), + TYPE_ARGEND); + + XPrint(HKEY("query"), 0, + XCPROPERTY("xmlns", "jabber:iq:roster"), + TYPE_ARGEND); + xmpp_roster_item(&cptr[which_cptr_is_relevant]); XPUT("");