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("");