static LinphoneFriendListStatus _linphone_friend_list_add_friend(LinphoneFriendList *list, LinphoneFriend *lf, bool_t synchronize) { LinphoneFriendListStatus status = LinphoneFriendListInvalidFriend; if (!list || !lf->uri || lf->friend_list) { if (!list) ms_error("linphone_friend_list_add_friend(): invalid list, null"); if (!lf->uri) ms_error("linphone_friend_list_add_friend(): invalid friend, no sip uri"); if (lf->friend_list) ms_error("linphone_friend_list_add_friend(): invalid friend, already in list"); return status; } if (bctbx_list_find(list->friends, lf) != NULL) { char *tmp = NULL; const LinphoneAddress *addr = linphone_friend_get_address(lf); if (addr) tmp = linphone_address_as_string(addr); ms_warning("Friend %s already in list [%s], ignored.", tmp ? tmp : "unknown", list->display_name); if (tmp) ms_free(tmp); } else { status = linphone_friend_list_import_friend(list, lf, synchronize); linphone_friend_save(lf, lf->lc); } if (list->rls_uri == NULL) { /* Mimic the behaviour of linphone_core_add_friend() when a resource list server is not in use */ linphone_friend_apply(lf, lf->lc); } return status; }
void linphone_core_send_initial_subscribes(LinphoneCore *lc){ const MSList *elem; if (lc->initial_subscribes_sent) return; lc->initial_subscribes_sent=TRUE; /*set to true and see if looping on friends will change this status*/ for(elem=lc->friends;elem!=NULL;elem=elem->next){ LinphoneFriend *f=(LinphoneFriend*)elem->data; LinphoneProxyConfig* cfg; if (f->subscribe && !f->initial_subscribes_sent) { lc->initial_subscribes_sent=FALSE; /*at least 1 was not sent */ if ((cfg=linphone_core_lookup_known_proxy(f->lc,linphone_friend_get_address(f)))) { /*check if already registered*/ if (linphone_proxy_config_get_state(cfg) != LinphoneRegistrationOk) continue; /*skip this friend because not registered yet*/ else { char* lf_string = linphone_address_as_string(linphone_friend_get_address(f)); ms_message("Identity [%s] registered, we can now subscribe to [%s]",linphone_proxy_config_get_identity(cfg),lf_string); ms_free(lf_string); } } linphone_friend_apply(f,lc); f->initial_subscribes_sent=TRUE; } } }
void linphone_core_add_friend(LinphoneCore *lc, LinphoneFriend *lf) { if (linphone_friend_list_add_friend(linphone_core_get_default_friend_list(lc), lf) != LinphoneFriendListOK) return; if (ms_list_find(lc->subscribers, lf)) { /*if this friend was in the pending subscriber list, now remove it from this list*/ lc->subscribers = ms_list_remove(lc->subscribers, lf); linphone_friend_unref(lf); } if (linphone_core_ready(lc)) linphone_friend_apply(lf, lc); else lf->commit = TRUE; }
void linphone_friend_done(LinphoneFriend *fr) { ms_return_if_fail(fr); if (!fr->lc || !fr->friend_list) return; linphone_friend_apply(fr, fr->lc); linphone_friend_save(fr, fr->lc); if (fr && fr->vcard) { if (linphone_vcard_compare_md5_hash(fr->vcard) != 0) { ms_debug("vCard's md5 has changed, mark friend as dirty"); fr->friend_list->dirty_friends_to_update = bctbx_list_append(fr->friend_list->dirty_friends_to_update, linphone_friend_ref(fr)); } } }
void linphone_core_add_friend(LinphoneCore *lc, LinphoneFriend *lf) { ms_return_if_fail(lf->lc==NULL); ms_return_if_fail(lf->uri!=NULL); if (ms_list_find(lc->friends,lf)!=NULL){ char *tmp=NULL; const LinphoneAddress *addr=linphone_friend_get_address(lf); if (addr) tmp=linphone_address_as_string(addr); ms_warning("Friend %s already in list, ignored.", tmp ? tmp : "unknown"); if (tmp) ms_free(tmp); return ; } lc->friends=ms_list_append(lc->friends,lf); lf->lc=lc; if ( linphone_core_ready(lc)) linphone_friend_apply(lf,lc); else lf->commit=TRUE; return ; }
void linphone_friend_done(LinphoneFriend *fr){ ms_return_if_fail(fr!=NULL); if (fr->lc==NULL) return; linphone_friend_apply(fr,fr->lc); }