diff --git a/sflphone-gtk/src/menus.c b/sflphone-gtk/src/menus.c index e6a6e7ea07964fea75f162bf7be6de2113a62aa4..683667cc643eb1822320a4673ea5f4447fd6fc0a 100644 --- a/sflphone-gtk/src/menus.c +++ b/sflphone-gtk/src/menus.c @@ -920,20 +920,26 @@ show_popup_menu_history(GtkWidget *my_widget, GdkEventButton *event) button, event_time); } +static void edit_number_cb (gpointer user_data) { + + show_edit_number ((call_t*)user_data); +} + + void show_popup_menu_contacts(GtkWidget *my_widget, GdkEventButton *event) { gboolean pickup = FALSE; - gboolean remove = FALSE; gboolean accounts = FALSE; + gboolean edit = FALSE; call_t * selectedCall = calltab_get_selected_call( contacts ); if (selectedCall) { - remove = TRUE; pickup = TRUE; accounts = TRUE; + edit = TRUE; } GtkWidget *menu; @@ -956,6 +962,14 @@ show_popup_menu_contacts(GtkWidget *my_widget, GdkEventButton *event) gtk_widget_show (menu_items); } + if (edit) + { + menu_items = gtk_image_menu_item_new_from_stock( GTK_STOCK_EDIT, get_accel_group()); + gtk_menu_shell_append (GTK_MENU_SHELL (menu), menu_items); + g_signal_connect (G_OBJECT (menu_items), "activate",G_CALLBACK (edit_number_cb), selectedCall); + gtk_widget_show (menu_items); + } + if(accounts) { add_registered_accounts_to_menu (menu); @@ -1010,3 +1024,40 @@ void add_registered_accounts_to_menu (GtkWidget *menu) { } } + + +static void change_number_cb (gpointer userdata) { + + gtk_widget_destroy (GTK_WIDGET (userdata)); +} + +void show_edit_number (call_t *call) { + + GtkDialog * dialog; + GtkWidget * num, *ok, *hbox; + + dialog = GTK_DIALOG (gtk_dialog_new()); + + // Set window properties + gtk_window_set_default_size(GTK_WINDOW(dialog), 200, 20); + gtk_window_set_title(GTK_WINDOW(dialog), _("Edit number")); + + hbox = gtk_hbox_new (FALSE, 0); + gtk_box_pack_start(GTK_BOX (dialog->vbox), hbox, TRUE, TRUE, 0); + + num = gtk_entry_new (); + gtk_entry_set_text(GTK_ENTRY(num), "514-384-8557"); + gtk_box_pack_start(GTK_BOX (hbox), num, TRUE, TRUE, 0); + + ok = gtk_button_new_from_stock (GTK_STOCK_OK); + gtk_box_pack_start(GTK_BOX (hbox), ok, TRUE, TRUE, 0); + g_signal_connect(G_OBJECT (ok), "clicked", G_CALLBACK (change_number_cb), dialog); + + gtk_widget_show_all (dialog->vbox); + + gtk_dialog_run(dialog); + gtk_widget_destroy(GTK_WIDGET(dialog)); + +} + + diff --git a/src/sipvoiplink.cpp b/src/sipvoiplink.cpp index 07daedf94abdba51246f205247651c8c2942b8e5..7f6a88ff6d1d44fd4e17237ee721d055b4eb9d8b 100644 --- a/src/sipvoiplink.cpp +++ b/src/sipvoiplink.cpp @@ -1261,6 +1261,43 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam // Private functions /////////////////////////////////////////////////////////////////////////////// + pj_status_t SIPVoIPLink::enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_resolver **p_resv) { + + pj_status_t status; + pj_dns_resolver *resv; + pj_str_t servers[1]; + pj_uint16_t port = 5353; + pjsip_resolver_t *res; + + // Create the DNS resolver instance + status = pjsip_endpt_create_resolver (endpt, &resv); + if (status != PJ_SUCCESS) { + _debug ("Error creating the DNS resolver instance\n"); + return status; + } + + // Update the name servers for the DNS resolver + servers[0] = pj_str((char*)"savoirfairelinux.com"); + status = pj_dns_resolver_set_ns (resv, 1, servers, NULL); + if (status != PJ_SUCCESS){ + _debug ("Error updating the name servers for the DNS resolver\n"); + return status; + } + + // Set the DNS resolver instance of the SIP resolver engine + status = pjsip_endpt_set_resolver (endpt, resv); + if (status != PJ_SUCCESS){ + _debug ("Error setting the DNS resolver instance of the SIP resolver engine\n"); + return status; + } + + *p_resv = resv; + + return PJ_SUCCESS; + + } + + bool SIPVoIPLink::pjsip_init() { pj_status_t status; @@ -1271,6 +1308,7 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam std::string name_mod; bool useStun; validStunServer = true; + pj_dns_resolver *p_resv; name_mod = "sflphone"; @@ -1358,6 +1396,9 @@ std::string SIPVoIPLink::getSipTo(const std::string& to_url, std::string hostnam _debug("UserAgent: SIP Init -- listening on port %d\n", _localExternPort); + status = enable_dns_srv_resolver (_endpt, &p_resv); + PJ_ASSERT_RETURN( status == PJ_SUCCESS, 1 ); + // Initialize transaction layer status = pjsip_tsx_layer_init_module(_endpt); PJ_ASSERT_RETURN( status == PJ_SUCCESS, 1 ); diff --git a/src/sipvoiplink.h b/src/sipvoiplink.h index 51bd9a01378b6a6f3dcf1ce90a664736927aba6d..5536f9936f4773ba14d6a0218436d80f9d955c2f 100644 --- a/src/sipvoiplink.h +++ b/src/sipvoiplink.h @@ -42,7 +42,7 @@ class AudioRtp; #define RANDOM_SIP_PORT rand() % 64000 + 1024 // To set the verbosity. From 0 (min) to 6 (max) -#define PJ_LOG_LEVEL 1 +#define PJ_LOG_LEVEL 6 /** * @file sipvoiplink.h @@ -325,6 +325,15 @@ class SIPVoIPLink : public VoIPLink /* The singleton instance */ static SIPVoIPLink* _instance; + /** + * Enable the SIP SRV resolver + * @param endpt The SIP endpoint + * @param p_resv Pointer to receive The DNS resolver instance + * + * @return pj_status_t PJ_SUCCESS on success + */ + pj_status_t enable_dns_srv_resolver (pjsip_endpoint *endpt, pj_dns_resolver ** p_resv); + void busy_sleep(unsigned msec); /**