LinphoneFriend * linphone_friend_new_from_config_file(LinphoneCore *lc, int index){ const char *tmp; char item[50]; int a; LinphoneFriend *lf; LpConfig *config=lc->config; sprintf(item,"friend_%i",index); if (!lp_config_has_section(config,item)){ return NULL; } tmp=lp_config_get_string(config,item,"url",NULL); if (tmp==NULL) { return NULL; } lf=linphone_core_create_friend_with_address(lc, tmp); if (lf==NULL) { return NULL; } tmp=lp_config_get_string(config,item,"pol",NULL); if (tmp==NULL) linphone_friend_set_inc_subscribe_policy(lf,LinphoneSPWait); else{ linphone_friend_set_inc_subscribe_policy(lf,__policy_str_to_enum(tmp)); } a=lp_config_get_int(config,item,"subscribe",0); linphone_friend_send_subscribe(lf,a); a = lp_config_get_int(config, item, "presence_received", 0); lf->presence_received = (bool_t)a; linphone_friend_set_ref_key(lf,lp_config_get_string(config,item,"refkey",NULL)); return lf; }
/* DB layout: * | 0 | storage_id * | 1 | friend_list_id * | 2 | sip_uri * | 3 | subscribe_policy * | 4 | send_subscribe * | 5 | ref_key * | 6 | vCard * | 7 | vCard eTag * | 8 | vCard URL * | 9 | presence_received */ static int create_friend(void *data, int argc, char **argv, char **colName) { LinphoneVcardContext *context = (LinphoneVcardContext *)data; bctbx_list_t **list = (bctbx_list_t **)linphone_vcard_context_get_user_data(context); LinphoneFriend *lf = NULL; LinphoneVcard *vcard = NULL; unsigned int storage_id = (unsigned int)atoi(argv[0]); vcard = linphone_vcard_context_get_vcard_from_buffer(context, argv[6]); if (vcard) { linphone_vcard_set_etag(vcard, argv[7]); linphone_vcard_set_url(vcard, argv[8]); lf = linphone_friend_new_from_vcard(vcard); } if (!lf) { LinphoneAddress *addr = linphone_address_new(argv[2]); lf = linphone_friend_new(); linphone_friend_set_address(lf, addr); linphone_address_unref(addr); } linphone_friend_set_inc_subscribe_policy(lf, atoi(argv[3])); linphone_friend_send_subscribe(lf, atoi(argv[4])); linphone_friend_set_ref_key(lf, ms_strdup(argv[5])); lf->presence_received = atoi(argv[9]); lf->storage_id = storage_id; *list = bctbx_list_append(*list, linphone_friend_ref(lf)); linphone_friend_unref(lf); return 0; }
void linphone_gtk_add_buddy_from_database(GtkWidget *button){ GtkWidget *w=gtk_widget_get_toplevel(button); GtkTreeSelection *select; GtkTreeIter iter; GtkTreeModel *model; select = gtk_tree_view_get_selection(GTK_TREE_VIEW(linphone_gtk_get_widget(w,"search_results"))); if (gtk_tree_selection_get_selected (select, &model, &iter)) { char *uri; char *name; char *addr; LinphoneFriend *lf; int presence=linphone_gtk_get_ui_config_int("use_subscribe_notify",1); gtk_tree_model_get (model, &iter,LOOKUP_RESULT_SIP_URI , &uri,LOOKUP_RESULT_NAME, &name, -1); addr=g_strdup_printf("%s <%s>",name,uri); lf=linphone_friend_new_with_address(addr); linphone_friend_set_inc_subscribe_policy(lf,presence ? LinphoneSPAccept : LinphoneSPDeny); linphone_friend_send_subscribe(lf,presence); linphone_core_add_friend(linphone_gtk_get_core(),lf); linphone_gtk_show_friends(); g_free(addr); g_free(uri); g_free(name); } }
static void linphone_gtk_chat_add_contact(const LinphoneAddress *addr){ LinphoneFriend *lf=NULL; gboolean show_presence=FALSE; char *uri=linphone_address_as_string(addr); lf=linphone_friend_new_with_address(uri); ms_free(uri); linphone_friend_set_inc_subscribe_policy(lf,LinphoneSPWait); linphone_friend_send_subscribe(lf,show_presence); linphone_friend_set_address(lf,addr); linphone_core_add_friend(linphone_gtk_get_core(),lf); linphone_gtk_show_friends(); }
void linphone_gtk_chat_add_contact(const LinphoneAddress *addr) { LinphoneFriend *lf=NULL; char *uri=linphone_address_as_string(addr); lf=linphone_friend_new_with_addr(uri); ms_free(uri); char *fixed_uri=NULL; gboolean show_presence=FALSE; linphone_friend_set_inc_subscribe_policy(lf,LinphoneSPDeny); linphone_friend_send_subscribe(lf,show_presence); linphone_core_interpret_friend_uri(linphone_gtk_get_core(),uri,&fixed_uri); if (fixed_uri==NULL) { linphone_gtk_display_something(GTK_MESSAGE_WARNING,_("Invalid sip contact !")); return ; } linphone_friend_set_addr(lf,addr); linphone_core_add_friend(linphone_gtk_get_core(),lf); ms_free(fixed_uri); linphone_gtk_show_friends(); }
gint contact_ok(GtkWidget *dialog){ gchar *name,*sipaddr; gchar *url; gboolean add=FALSE; GtkWidget *ab; LinphoneFriend *lf; int err; lf=(LinphoneFriend*)g_object_get_data(G_OBJECT(dialog),"friend_ref"); add=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(dialog),"add")); name=gtk_editable_get_chars(GTK_EDITABLE(lookup_widget(dialog,"name")),0,-1); sipaddr=gtk_editable_get_chars(GTK_EDITABLE(lookup_widget(dialog,"sipaddr")),0,-1); url=g_strdup_printf("%s <%s>",name,sipaddr); /* workaround a bug in osip ? */ /* something doesn't like addresses like "machin <<sip:truc@bidule>>" */ if (strchr(sipaddr,'<')==NULL){ err=linphone_friend_set_sip_addr(lf,url); }else err=-1; if (err<0){ linphone_gnome_ui_display_something(get_uiobj(),GTK_MESSAGE_WARNING,_("Bad sip address: a sip address looks like sip:user@domain")); linphone_friend_destroy(lf); g_free(name); g_free(sipaddr); g_free(url); return -1; } g_free(name); g_free(sipaddr); g_free(url); linphone_friend_set_proxy(lf,proxy_combo_box_get_selected(lookup_widget(dialog,"proxy"))); linphone_friend_set_inc_subscribe_policy(lf,gtk_combo_box_get_active(GTK_COMBO_BOX(lookup_widget(dialog,"pol")))); linphone_friend_send_subscribe(lf,gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(lookup_widget(dialog,"send_subscribe")))); if (add){ linphone_core_add_friend(get_core(),lf); } else linphone_friend_done(lf); /* ask the address book to redraw itself */ ab=g_object_get_data(G_OBJECT(dialog),"address_book"); if (ab!=NULL) fill_address_book(lookup_widget(ab,"address_list")); return 0; }