From 04f704aa93d3cc449890d790c496c45ed10d3ea1 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 11 May 2016 11:37:59 +0200 Subject: [PATCH] Fixed two potential issues with presence --- coreapi/friend.c | 11 +++++++++++ coreapi/presence.c | 7 ++----- coreapi/private.h | 1 + 3 files changed, 14 insertions(+), 5 deletions(-) diff --git a/coreapi/friend.c b/coreapi/friend.c index 7278f2c8a..cf5f4027b 100644 --- a/coreapi/friend.c +++ b/coreapi/friend.c @@ -825,6 +825,17 @@ LinphoneFriend *linphone_core_find_friend_by_out_subscribe(const LinphoneCore *l return lf; } +LinphoneFriend *linphone_core_find_friend_by_inc_subscribe(const LinphoneCore *lc, SalOp *op) { + MSList *lists = lc->friends_lists; + LinphoneFriend *lf = NULL; + while (lists && !lf) { + LinphoneFriendList *list = (LinphoneFriendList *)lists->data; + lf = linphone_friend_list_find_friend_by_inc_subscribe(list, op); + lists = ms_list_next(lists); + } + return lf; +} + #define key_compare(s1,s2) strcmp(s1,s2) LinphoneSubscribePolicy __policy_str_to_enum(const char* pol){ diff --git a/coreapi/presence.c b/coreapi/presence.c index e8d0b13f1..251324d02 100644 --- a/coreapi/presence.c +++ b/coreapi/presence.c @@ -1509,9 +1509,7 @@ void linphone_subscription_new(LinphoneCore *lc, SalOp *op, const char *from){ ms_message("Receiving new subscription from %s.",from); /* check if we answer to this subscription */ - if (linphone_core_get_default_friend_list(lc) != NULL) { - lf = linphone_friend_list_find_friend_by_address(linphone_core_get_default_friend_list(lc), uri); - } + lf = linphone_core_find_friend(lc, uri); if (lf!=NULL){ linphone_friend_add_incoming_subscription(lf, op); lf->inc_subscribe_pending=TRUE; @@ -1938,8 +1936,7 @@ void linphone_notify_recv(LinphoneCore *lc, SalOp *op, SalSubscribeStatus ss, Sa void linphone_subscription_closed(LinphoneCore *lc, SalOp *op){ LinphoneFriend *lf = NULL; - if (linphone_core_get_default_friend_list(lc) != NULL) - lf = linphone_friend_list_find_friend_by_inc_subscribe(linphone_core_get_default_friend_list(lc), op); + lf = linphone_core_find_friend_by_inc_subscribe(lc, op); if (lf!=NULL){ /*this will release the op*/ diff --git a/coreapi/private.h b/coreapi/private.h index cc8614c64..c1fae28c1 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -422,6 +422,7 @@ void linphone_friend_remove_incoming_subscription(LinphoneFriend *lf, SalOp *op) LinphoneFriend *linphone_friend_list_find_friend_by_inc_subscribe(const LinphoneFriendList *list, SalOp *op); LinphoneFriend *linphone_friend_list_find_friend_by_out_subscribe(const LinphoneFriendList *list, SalOp *op); LinphoneFriend *linphone_core_find_friend_by_out_subscribe(const LinphoneCore *lc, SalOp *op); +LinphoneFriend *linphone_core_find_friend_by_inc_subscribe(const LinphoneCore *lc, SalOp *op); MSList *linphone_find_friend_by_address(MSList *fl, const LinphoneAddress *addr, LinphoneFriend **lf); bool_t linphone_core_should_subscribe_friends_only_when_registered(const LinphoneCore *lc); void linphone_core_update_friends_subscriptions(LinphoneCore *lc, LinphoneProxyConfig *cfg, bool_t only_when_registered);