fix presence tests

This commit is contained in:
Simon Morlat 2015-12-22 14:55:56 +01:00
parent c7b943b40d
commit 7b5da68fd8
3 changed files with 11 additions and 5 deletions

View file

@ -139,7 +139,7 @@ void* linphone_friend_get_user_data(const LinphoneFriend *lf){
} }
bool_t linphone_friend_in_list(const LinphoneFriend *lf){ bool_t linphone_friend_in_list(const LinphoneFriend *lf){
return lf->lc!=NULL; return lf->in_list;
} }
void linphone_core_interpret_friend_uri(LinphoneCore *lc, const char *uri, char **result){ void linphone_core_interpret_friend_uri(LinphoneCore *lc, const char *uri, char **result){
@ -475,7 +475,7 @@ void linphone_friend_edit(LinphoneFriend *fr){
void linphone_friend_done(LinphoneFriend *fr){ void linphone_friend_done(LinphoneFriend *fr){
ms_return_if_fail(fr!=NULL); ms_return_if_fail(fr!=NULL);
if (fr->lc==NULL) return; if (fr->lc == NULL || !fr->in_list) return;
linphone_friend_apply(fr,fr->lc); linphone_friend_apply(fr,fr->lc);
} }
@ -494,7 +494,7 @@ void linphone_core_add_friend(LinphoneCore *lc, LinphoneFriend *lf) {
lc->subscribers = ms_list_remove(lc->subscribers, lf); lc->subscribers = ms_list_remove(lc->subscribers, lf);
linphone_friend_unref(lf); linphone_friend_unref(lf);
} }
lf->lc = lc; lf->lc = lc; /*I would prefer this to be done in linphone_friend_list_add_friend()*/
if (linphone_core_ready(lc)) linphone_friend_apply(lf, lc); if (linphone_core_ready(lc)) linphone_friend_apply(lf, lc);
else lf->commit = TRUE; else lf->commit = TRUE;
} }

View file

@ -291,7 +291,10 @@ void linphone_friend_list_set_rls_uri(LinphoneFriendList *list, const char *rls_
} }
LinphoneFriendListStatus linphone_friend_list_add_friend(LinphoneFriendList *list, LinphoneFriend *friend) { LinphoneFriendListStatus linphone_friend_list_add_friend(LinphoneFriendList *list, LinphoneFriend *friend) {
if ((friend->lc != NULL) || (friend->uri == NULL)) return LinphoneFriendListInvalidFriend; if (friend->uri == NULL || friend->in_list) {
ms_error("linphone_friend_list_add_friend(): invalid friend");
return LinphoneFriendListInvalidFriend;
}
if (ms_list_find(list->friends, friend) != NULL) { if (ms_list_find(list->friends, friend) != NULL) {
char *tmp = NULL; char *tmp = NULL;
const LinphoneAddress *addr = linphone_friend_get_address(friend); const LinphoneAddress *addr = linphone_friend_get_address(friend);
@ -299,6 +302,7 @@ LinphoneFriendListStatus linphone_friend_list_add_friend(LinphoneFriendList *lis
ms_warning("Friend %s already in list [%s], ignored.", tmp ? tmp : "unknown", list->display_name); ms_warning("Friend %s already in list [%s], ignored.", tmp ? tmp : "unknown", list->display_name);
if (tmp) ms_free(tmp); if (tmp) ms_free(tmp);
} else { } else {
friend->in_list = TRUE;
list->friends = ms_list_append(list->friends, linphone_friend_ref(friend)); list->friends = ms_list_append(list->friends, linphone_friend_ref(friend));
} }
return LinphoneFriendListOK; return LinphoneFriendListOK;
@ -307,7 +311,8 @@ LinphoneFriendListStatus linphone_friend_list_add_friend(LinphoneFriendList *lis
LinphoneFriendListStatus linphone_friend_list_remove_friend(LinphoneFriendList *list, LinphoneFriend *friend) { LinphoneFriendListStatus linphone_friend_list_remove_friend(LinphoneFriendList *list, LinphoneFriend *friend) {
MSList *elem = ms_list_find(list->friends, friend); MSList *elem = ms_list_find(list->friends, friend);
if (elem == NULL) return LinphoneFriendListNonExistentFriend; if (elem == NULL) return LinphoneFriendListNonExistentFriend;
linphone_friend_unref((LinphoneFriend *)elem->data); friend->in_list = FALSE;
linphone_friend_unref(friend);
list->friends = ms_list_remove_link(list->friends, elem); list->friends = ms_list_remove_link(list->friends, elem);
return LinphoneFriendListOK; return LinphoneFriendListOK;
} }

View file

@ -651,6 +651,7 @@ struct _LinphoneFriend{
struct _LinphoneCore *lc; struct _LinphoneCore *lc;
BuddyInfo *info; BuddyInfo *info;
char *refkey; char *refkey;
bool_t in_list;
bool_t subscribe; bool_t subscribe;
bool_t subscribe_active; bool_t subscribe_active;
bool_t inc_subscribe_pending; bool_t inc_subscribe_pending;