diff --git a/sflphone-gtk/src/config/hooks-config.c b/sflphone-gtk/src/config/hooks-config.c index b627d13f4dd36ae513ba148a8a1a95b338eba92a..67b89cef41b3714c4d9e5996d966cffa8bb6eeb2 100644 --- a/sflphone-gtk/src/config/hooks-config.c +++ b/sflphone-gtk/src/config/hooks-config.c @@ -38,11 +38,13 @@ void hooks_load_parameters (URLHook_Config** settings){ _settings->sip_field = DEFAULT_SIP_URL_FIELD; _settings->command = DEFAULT_URL_COMMAND; _settings->sip_enabled = "0"; + _settings->iax2_enabled = "0"; } else { _settings->sip_field = (gchar*)(g_hash_table_lookup (_params, URLHOOK_SIP_FIELD)); _settings->command = (gchar*)(g_hash_table_lookup (_params, URLHOOK_COMMAND)); _settings->sip_enabled = (gchar*)(g_hash_table_lookup (_params, URLHOOK_SIP_ENABLED)); + _settings->iax2_enabled = (gchar*)(g_hash_table_lookup (_params, URLHOOK_IAX2_ENABLED)); } *settings = _settings; @@ -60,6 +62,8 @@ void hooks_save_parameters (void){ g_strdup((gchar *)gtk_entry_get_text(GTK_ENTRY(command)))); g_hash_table_replace (params, (gpointer)URLHOOK_SIP_ENABLED, (gpointer)g_strdup(_urlhook_config->sip_enabled)); + g_hash_table_replace (params, (gpointer)URLHOOK_IAX2_ENABLED, + (gpointer)g_strdup(_urlhook_config->iax2_enabled)); dbus_set_hook_settings (params); @@ -79,6 +83,17 @@ static void sip_enabled_cb (GtkWidget *widget) { _urlhook_config->sip_enabled="0"; } +static void iax2_enabled_cb (GtkWidget *widget) { + + guint check; + + check = (guint) gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(widget)); + if (check) + _urlhook_config->iax2_enabled="1"; + else + _urlhook_config->iax2_enabled="0"; +} + GtkWidget* create_hooks_settings (){ GtkWidget *ret, *url_frame, *table, *label, *widg; @@ -112,10 +127,9 @@ GtkWidget* create_hooks_settings (){ gtk_table_attach ( GTK_TABLE( table ), field, 2, 3, 1, 2, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); widg = gtk_check_button_new_with_mnemonic( _("_IAX2 protocol")); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widg), FALSE); // Not implemented yet - //g_signal_connect (G_OBJECT(field) , "clicked" , NULL, NULL); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(widg), (g_strcasecmp (_urlhook_config->iax2_enabled, "1")==0)?TRUE:FALSE); + g_signal_connect (G_OBJECT(widg) , "clicked" , G_CALLBACK (iax2_enabled_cb), NULL); gtk_table_attach ( GTK_TABLE( table ), widg, 0, 3, 2, 3, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); - gtk_widget_set_sensitive (GTK_WIDGET (widg), FALSE); label = gtk_label_new_with_mnemonic (_("_Command: ")); gtk_table_attach ( GTK_TABLE( table ), label, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, GTK_EXPAND | GTK_FILL, 0, 0); diff --git a/sflphone-gtk/src/config/hooks-config.h b/sflphone-gtk/src/config/hooks-config.h index 41ee59b718cc88938129305efe9b760aef24352a..25e4c77643c47d670ca99d273b5c836e12fcca9a 100644 --- a/sflphone-gtk/src/config/hooks-config.h +++ b/sflphone-gtk/src/config/hooks-config.h @@ -32,10 +32,12 @@ G_BEGIN_DECLS #define URLHOOK_COMMAND "URLHOOK_COMMAND" #define URLHOOK_SIP_FIELD "URLHOOK_SIP_FIELD" #define URLHOOK_SIP_ENABLED "URLHOOK_SIP_ENABLED" +#define URLHOOK_IAX2_ENABLED "URLHOOK_IAX2_ENABLED" typedef struct _URLHook_Config { gchar *sip_enabled; + gchar *iax2_enabled; gchar *sip_field; gchar *command; }URLHook_Config; diff --git a/sflphone-gtk/src/menus.c b/sflphone-gtk/src/menus.c index 683667cc643eb1822320a4673ea5f4447fd6fc0a..b1fc049c812f270214b9eea8182fd8a8fbf3d28a 100644 --- a/sflphone-gtk/src/menus.c +++ b/sflphone-gtk/src/menus.c @@ -1046,7 +1046,7 @@ void show_edit_number (call_t *call) { 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_entry_set_text(GTK_ENTRY(num), "00000000000"); gtk_box_pack_start(GTK_BOX (hbox), num, TRUE, TRUE, 0); ok = gtk_button_new_from_stock (GTK_STOCK_OK); diff --git a/src/iaxvoiplink.cpp b/src/iaxvoiplink.cpp index af965c32a460679ae66af53c6e763fbe12b494f3..bb083633b9b036146b1fd74bb32c8f841636e2fc 100644 --- a/src/iaxvoiplink.cpp +++ b/src/iaxvoiplink.cpp @@ -63,6 +63,8 @@ spkrDataConverted = new SFLDataFormat[nbSamplesMax]; spkrDataDecoded = new SFLDataFormat[nbSamplesMax]; + + urlhook = new UrlHook (); } @@ -763,11 +765,14 @@ IAXVoIPLink::iaxHandleCallEvent(iax_event* event, IAXCall* call) break; case IAX_EVENT_URL: + if (Manager::instance().getConfigString (HOOKS, URLHOOK_IAX2_ENABLED) == "1") { + if (strcmp((char*)event->data, "") != 0) { + _debug ("> IAX_EVENT_URL received: %s\n", event->data); + urlhook->addAction ((char*)event->data, Manager::instance().getConfigString (HOOKS, URLHOOK_COMMAND)); + } + } break; - // case IAX_EVENT_CNG: ?? - // break; - case IAX_EVENT_TIMEOUT: break; @@ -1017,3 +1022,4 @@ void IAXVoIPLink::updateAudiolayer( void ) audiolayer = Manager::instance().getAudioDriver(); _mutexIAX.leaveMutex(); } + diff --git a/src/iaxvoiplink.h b/src/iaxvoiplink.h index 4a381da108436b9535016797a7ddec4840c2036d..38aecaed9f0a9204b17477052cc2437d8209d4fa 100644 --- a/src/iaxvoiplink.h +++ b/src/iaxvoiplink.h @@ -27,6 +27,7 @@ #include "audio/codecDescriptor.h" #include "samplerateconverter.h" +#include "hooks/urlhook.h" class EventThread; class IAXCall; @@ -306,6 +307,9 @@ class IAXVoIPLink : public VoIPLink /** number of sample before conversion (recording) */ int nbSampleForRec_; + + /* URL hook */ + UrlHook *urlhook; }; #endif diff --git a/src/managerimpl.cpp b/src/managerimpl.cpp index 3ac56372458e003a91352599ce61d72b001b9194..23720ef7684e1ff53996d267d555f8dca2983086 100644 --- a/src/managerimpl.cpp +++ b/src/managerimpl.cpp @@ -278,8 +278,7 @@ ManagerImpl::answerCall(const CallID& id) onHoldCall(getCurrentCallId()); } - - if (!getAccountLink(AccountNULL)->answer(id)) { + if (!getAccountLink(accountid)->answer(id)) { // error when receiving... removeCallAccount(id); return false; @@ -1210,6 +1209,7 @@ ManagerImpl::initConfigFile ( bool load_user_value ) fill_config_str (URLHOOK_SIP_FIELD, HOOK_DEFAULT_SIP_FIELD); fill_config_str (URLHOOK_COMMAND, HOOK_DEFAULT_URL_COMMAND); fill_config_str (URLHOOK_SIP_ENABLED, NO_STR); + fill_config_str (URLHOOK_IAX2_ENABLED, NO_STR); // Loads config from ~/.sflphone/sflphonedrc or so.. if (createSettingsPath() == 1 && load_user_value) { @@ -2596,6 +2596,7 @@ std::map<std::string, std::string> ManagerImpl::getHookSettings () { settings.insert (std::pair<std::string, std::string> ("URLHOOK_SIP_FIELD", getConfigString (HOOKS, URLHOOK_SIP_FIELD)) ); settings.insert (std::pair<std::string, std::string> ("URLHOOK_COMMAND", getConfigString (HOOKS, URLHOOK_COMMAND)) ); settings.insert (std::pair<std::string, std::string> ("URLHOOK_SIP_ENABLED", getConfigString (HOOKS, URLHOOK_SIP_ENABLED)) ); + settings.insert (std::pair<std::string, std::string> ("URLHOOK_IAX2_ENABLED", getConfigString (HOOKS, URLHOOK_IAX2_ENABLED)) ); return settings; } @@ -2605,6 +2606,7 @@ void ManagerImpl::setHookSettings (const std::map<std::string, std::string>& set setConfig(HOOKS, URLHOOK_SIP_FIELD, (*settings.find("URLHOOK_SIP_FIELD")).second); setConfig(HOOKS, URLHOOK_COMMAND, (*settings.find("URLHOOK_COMMAND")).second); setConfig(HOOKS, URLHOOK_SIP_ENABLED, (*settings.find("URLHOOK_SIP_ENABLED")).second); + setConfig(HOOKS, URLHOOK_IAX2_ENABLED, (*settings.find("URLHOOK_IAX2_ENABLED")).second); // Write it to the configuration file saveConfig (); diff --git a/src/user_cfg.h b/src/user_cfg.h index 058761e8131834cd3087126368a751828120308e..09ffcf60f8565810d58f400830cf93b670eca611 100644 --- a/src/user_cfg.h +++ b/src/user_cfg.h @@ -83,6 +83,7 @@ #define URLHOOK_SIP_FIELD "Hooks.url_sip_field" #define URLHOOK_COMMAND "Hooks.url_command" #define URLHOOK_SIP_ENABLED "Hooks.sip_enabled" +#define URLHOOK_IAX2_ENABLED "Hooks.iax2_enabled" #define EMPTY_FIELD "" /** Default value for empty field */ #define DFT_STUN_SERVER "stun.ekiga.net" /** Default STUN server address */