changeset 610:0e8247cf2bd1

Consider buddies as offline when they have cancelled our subscription
author Mikael Berthe <mikael@lilotux.net>
date Thu, 15 Dec 2005 19:56:19 +0100
parents 85648a0f963e
children ad737139a144
files mcabber/src/jabglue.c mcabber/src/roster.c mcabber/src/roster.h
diffstat 3 files changed, 18 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/mcabber/src/jabglue.c	Thu Dec 15 18:51:06 2005 +0100
+++ b/mcabber/src/jabglue.c	Thu Dec 15 19:56:19 2005 +0100
@@ -1256,6 +1256,7 @@
   } else if (!strcmp(type, "unsubscribed")) {
     scr_LogPrint(LPRINT_LOGNORM, "<%s> has unsubscribed from your presence "
                  "updates", from);
+    roster_unsubscribed(from);
   } else {
     scr_LogPrint(LPRINT_LOGNORM, "Received (un)subscription packet from <%s>"
                  " (type=%s)", from, (type ? type : ""));
--- a/mcabber/src/roster.c	Thu Dec 15 18:51:06 2005 +0100
+++ b/mcabber/src/roster.c	Thu Dec 15 19:56:19 2005 +0100
@@ -595,6 +595,22 @@
   return roster_usr->type;
 }
 
+//  roster_unsubscribed()
+// We have lost buddy's presence updates; this function clears the status
+// message, sets the buddy offline and frees the resources
+void roster_unsubscribed(const char *jid)
+{
+  GSList *sl_user;
+  roster *roster_usr;
+
+  sl_user = roster_find(jid, jidsearch, ROSTER_TYPE_USER|ROSTER_TYPE_AGENT);
+  if (sl_user == NULL)
+    return;
+
+  roster_usr = (roster*)sl_user->data;
+  free_all_resources(&roster_usr->resource);
+}
+
 
 /* ### BuddyList functions ### */
 
--- a/mcabber/src/roster.h	Thu Dec 15 18:51:06 2005 +0100
+++ b/mcabber/src/roster.h	Thu Dec 15 19:56:19 2005 +0100
@@ -96,6 +96,7 @@
 enum imstatus roster_getstatus(const char *jid, const char *resname);
 const char   *roster_getstatusmsg(const char *jid, const char *resname);
 guint   roster_gettype(const char *jid);
+void    roster_unsubscribed(const char *jid);
 
 void    buddylist_build(void);
 void    buddy_hide_group(gpointer rosterdata, int hide);