summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordefanor <defanor@uberspace.net>2020-11-25 22:26:11 +0300
committerdefanor <defanor@uberspace.net>2020-11-25 22:26:11 +0300
commit2bf30b026aa22038e079043ed2dcdfc5aab4c725 (patch)
treec1514a53dedb8e8dc4ba1ec8996bc5f016a9f35b
parent8bdb022b36c608deacd2a655207709e6ee3bf156 (diff)
Show presences in roster listing
-rw-r--r--src/rexmpp_console.c22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/rexmpp_console.c b/src/rexmpp_console.c
index 2c9b19a..7dbaf61 100644
--- a/src/rexmpp_console.c
+++ b/src/rexmpp_console.c
@@ -319,8 +319,26 @@ void rexmpp_console_feed (rexmpp_t *s, char *str, ssize_t str_len) {
char *item_jid = xmlGetProp(item, "jid");
char *item_ask = xmlGetProp(item, "ask");
char *item_subscription = xmlGetProp(item, "subscription");
- rexmpp_console_printf(s, "%s: subscription = %s, ask = %s\n",
- item_jid, item_subscription, item_ask);
+ char *item_presence = "unavailable";
+ if (s->track_roster_presence) {
+ for (presence = s->roster_presence;
+ presence != NULL;
+ presence = xmlNextElementSibling(presence)) {
+ char *presence_from = xmlGetProp(presence, "from");
+ if (presence_from != NULL) {
+ rexmpp_jid_parse(presence_from, &jid);
+ if (! strcmp(jid.bare, item_jid)) {
+ item_presence = "available";
+ }
+ free(presence_from);
+ }
+ }
+ }
+ rexmpp_console_printf(s,
+ "%s: subscription = %s, ask = %s, "
+ "presence = %s\n",
+ item_jid, item_subscription, item_ask,
+ item_presence);
if (item_jid != NULL) {
free(item_jid);
}