> - Call Hold > - Call Transfer > - Call Forwarding Well all these 3 used to work fine. I just tried them today and they seemed to work on and off :S. I will look in to this, it might be a problem in OPAL. > - DTMFs Yep it works. > - Audio and Video Audio works. I have not tested video. I have attached a new patch that fixes a silly bug.
Index: src/endpoints/urlhandler.cpp
===================================================================
--- src/endpoints/urlhandler.cpp (revisión: 4774)
+++ src/endpoints/urlhandler.cpp (copia de trabajo)
@@ -62,11 +62,13 @@
GMURL::GMURL ()
{
is_supported = false;
+ is_parsed = false;
}
GMURL::GMURL (PString base)
{
+ is_parsed = false;
base.Replace ("//", "");
url = base.Trim ();
@@ -97,9 +99,15 @@
type = PString ("sip");
is_supported = true;
}
+ else if (url.Find ("iax2:") == 0) {
+ url.Replace ("iax2:", "");
+ type = PString ("iax2");
+ is_supported = true;
+ }
else if (url.Find ("h323:") == P_MAX_INDEX
&& url.Find ("sip:") == P_MAX_INDEX
- && url.Find ("callto:") == P_MAX_INDEX) {
+ && url.Find ("callto:") == P_MAX_INDEX
+ && url.Find ("iax2:") == P_MAX_INDEX) {
if (url.Find ("/") != P_MAX_INDEX) {
@@ -120,8 +128,10 @@
GMURL::GMURL (const GMURL & u)
{
is_supported = u.is_supported;
+ is_parsed = u.is_parsed;
type = u.type;
url = u.url;
+
}
@@ -145,6 +155,11 @@
void GMURL::Parse ()
{
+ if (is_parsed)
+ return;
+ else
+ is_parsed = true;
+
PINDEX j = 0;
PString default_h323_gateway;
@@ -162,7 +177,6 @@
phone_account = gnomemeeting_get_account ("eugw.ast.diamondcard.us");
if (!url.IsEmpty ()) {
-
if (type == "sip") {
if (account
@@ -192,6 +206,33 @@
&& url.Find (default_h323_gateway) == P_MAX_INDEX)
url = url + "@" + default_h323_gateway;
}
+ else if (type == "iax2") {
+ PINDEX idx = url.Find ("@");
+
+ if (idx == P_MAX_INDEX) {
+ GmAccount *iax2_account = gnomemeeting_get_default_account ("iax2");
+ //URL is a short format so we need the default iax2 account.
+ if (iax2_account && iax2_account->username && iax2_account->host) {
+ url = PString::Empty() + iax2_account->username + "@" + iax2_account->host + "/" + url;
+ }
+ }
+ else {
+ PINDEX slash_idx = url.Find("/");
+ if (slash_idx == P_MAX_INDEX) {
+ PString number = url.Left(idx);
+ PString host = url.Mid(idx + 1);
+ GmAccount *iax2_account = gnomemeeting_get_account (host);
+
+
+ if (iax2_account && iax2_account->username) {
+ url = PString::Empty() + iax2_account->username + "@" + host + "/" + number;
+ }
+ }
+ else {
+ //URL is correct.
+ }
+ }
+ }
}
j = url.Find (":");
@@ -241,7 +282,6 @@
full_url = type + ":" + url + ":" + port;
}
else if (is_supported) {
-
full_url = type + ":" + url;
}
@@ -418,10 +458,9 @@
/* Answer the current call in a separate thread if we are called
* and return
*/
- if (endpoint->GetCallingState () == GMManager::Called) {
+ if (endpoint->GetCallingState () == GMManager::Called) {
if (!transfer_call) {
-
endpoint->AcceptCurrentIncomingCall ();
return;
}
Index: src/endpoints/iax2.cpp
===================================================================
--- src/endpoints/iax2.cpp (revisión: 0)
+++ src/endpoints/iax2.cpp (revisión: 0)
@@ -0,0 +1,140 @@
+#include "../../config.h"
+
+#include "iax2.h"
+#include "pcss.h"
+#include "ekiga.h"
+
+#include "main.h"
+#include "chat.h"
+#include "preferences.h"
+#include "history.h"
+#include "statusicon.h"
+#include "misc.h"
+#ifdef HAS_DBUS
+#include "dbus.h"
+#endif
+
+#include "gmconf.h"
+#include "gmdialog.h"
+
+#include <ptlib/ethsock.h>
+
+#define new PNEW
+
+GMIAX2Endpoint::GMIAX2Endpoint (GMManager & ep)
+: IAX2EndPoint (ep), endpoint (ep)
+{
+}
+
+
+GMIAX2Endpoint::~GMIAX2Endpoint ()
+{
+}
+
+void
+GMIAX2Endpoint::Init ()
+{
+ SetLocalUserName (endpoint.GetDefaultDisplayName ());
+ //There is no number setting so we'll just hope
+ //that the display name can be used.
+ SetLocalNumber (endpoint.GetDefaultDisplayName ());
+}
+
+BOOL
+GMIAX2Endpoint::OnIncomingConnection (OpalConnection &connection,
+ unsigned options)
+{
+ IncomingCallMode icm;
+ int reason;
+
+ //Get current status of the user and accept or reject the call
+ //based on this information.
+ gnomemeeting_threads_enter ();
+ icm = (IncomingCallMode) gm_conf_get_int (CALL_OPTIONS_KEY "incoming_call_mode");
+ gnomemeeting_threads_leave ();
+
+
+ if (endpoint.GetCallingState () != GMManager::Standby || icm == DO_NOT_DISTURB)
+ reason = GMManager::Reject;
+ else if (icm == AUTO_ANSWER)
+ reason = GMManager::Answer;
+ else
+ reason = GMManager::Prompt;
+
+ return endpoint.OnIncomingConnection (connection, reason, PString::Empty());
+}
+
+void
+GMIAX2Endpoint::OnRegistered(
+ const PString & host,
+ const PString & username,
+ BOOL isFailure,
+ RegisteredError reason)
+{
+ GtkWidget *accounts_window = NULL;
+ GtkWidget *main_window = NULL;
+ GtkWidget *history_window = NULL;
+ gchar *msg = NULL;
+
+ main_window = GnomeMeeting::Process ()->GetMainWindow ();
+ history_window = GnomeMeeting::Process ()->GetHistoryWindow ();
+ accounts_window = GnomeMeeting::Process ()->GetAccountsWindow ();
+
+ if (isFailure)
+ msg = g_strdup_printf (_("Registration failed"));
+ else
+ msg = g_strdup_printf (_("Registered to %s"), (const gchar *)host);
+ gnomemeeting_threads_enter ();
+ gm_main_window_push_message (main_window, msg);
+ gm_history_window_insert (history_window, msg);
+ gm_accounts_window_update_account_state (accounts_window,
+ FALSE,
+ (const gchar *)host,
+ (const gchar *)username,
+ _("Registered"),
+ NULL);
+ gm_main_window_set_account_info (main_window,
+ endpoint.GetRegisteredAccounts ());
+ gnomemeeting_threads_leave ();
+
+ g_free(msg);
+}
+
+void
+GMIAX2Endpoint::OnUnregistered(
+ const PString & host,
+ const PString & username,
+ BOOL isFailure,
+ UnregisteredError reason)
+{
+ GtkWidget *accounts_window = NULL;
+ GtkWidget *main_window = NULL;
+ GtkWidget *history_window = NULL;
+ gchar *msg = NULL;
+
+ main_window = GnomeMeeting::Process ()->GetMainWindow ();
+ history_window = GnomeMeeting::Process ()->GetHistoryWindow ();
+ accounts_window = GnomeMeeting::Process ()->GetAccountsWindow ();
+
+ msg = g_strdup_printf (_("Unregistered from %s"), (const gchar *)host);
+ gnomemeeting_threads_enter ();
+ gm_main_window_push_message (main_window, msg);
+ gm_history_window_insert (history_window, msg);
+ gm_accounts_window_update_account_state (accounts_window,
+ FALSE,
+ (const gchar *)host,
+ (const gchar *)username,
+ _("Unregistered"),
+ NULL);
+ gm_main_window_set_account_info (main_window,
+ endpoint.GetRegisteredAccounts ());
+ gnomemeeting_threads_leave ();
+
+ g_free(msg);
+}
+
+int
+GMIAX2Endpoint::GetRegisteredAccounts ()
+{
+ return IAX2EndPoint::GetRegistrationsCount ();
+}
Index: src/endpoints/urlhandler.h
===================================================================
--- src/endpoints/urlhandler.h (revisión: 4774)
+++ src/endpoints/urlhandler.h (copia de trabajo)
@@ -70,6 +70,7 @@
PString port;
PString type;
BOOL is_supported;
+ BOOL is_parsed;
};
Index: src/endpoints/iax2.h
===================================================================
--- src/endpoints/iax2.h (revisión: 0)
+++ src/endpoints/iax2.h (revisión: 0)
@@ -0,0 +1,69 @@
+#ifndef IAX2_H_
+#define IAX2_H_
+
+#include "../../config.h"
+
+#include "common.h"
+
+#include "manager.h"
+
+class GMIAX2Endpoint : public IAX2EndPoint
+{
+ PCLASSINFO(GMIAX2Endpoint, IAX2EndPoint);
+
+ public:
+
+ /* DESCRIPTION : The constructor
+ * BEHAVIOR : Creates a GMIAX2Endpoint and
+ * initialises variables
+ * PRE : /
+ */
+ GMIAX2Endpoint (GMManager &ep);
+ ~GMIAX2Endpoint ();
+
+ /* DESCRIPTION : /
+ * BEHAVIOR : Intiate internal values from
+ * ekiga's configuration.
+ * PRE : /
+ */
+ void Init ();
+
+ /* DESCRIPTION : Event when an incoming connection occurs
+ * BEHAVIOR : Returns TRUE to accept the connection or
+ * FALSE to reject it.
+ * PRE : /
+ */
+ virtual BOOL OnIncomingConnection (OpalConnection &connection, unsigned options);
+
+ /* DESCRIPTION : Event when an on registered event occurs
+ * BEHAVIOR : Action is taken to notify the user if the
+ * registration succeeded or faileds.
+ * PRE : /
+ */
+ virtual void OnRegistered(
+ const PString & host,
+ const PString & userName,
+ BOOL isFailure,
+ RegisteredError reason = RegisteredFailureUnknown);
+
+ /* DESCRIPTION : Event when an on unregistered event occurs
+ * BEHAVIOR : Action is taken to notify the user
+ * PRE : /
+ */
+ virtual void OnUnregistered(
+ const PString & host,
+ const PString & userName,
+ BOOL isFailure,
+ UnregisteredError reason = UnregisteredFailureUnknown);
+
+ /* DESCRIPTION : Get the number of registered accounts
+ * BEHAVIOR : /
+ * PRE : /
+ */
+ int GetRegisteredAccounts ();
+
+ private:
+ GMManager & endpoint;
+};
+
+#endif
Index: src/endpoints/manager.cpp
===================================================================
--- src/endpoints/manager.cpp (revisión: 4774)
+++ src/endpoints/manager.cpp (copia de trabajo)
@@ -42,6 +42,7 @@
#include "pcss.h"
#include "h323.h"
#include "sip.h"
+#include "iax2.h"
#include "accounts.h"
#include "urlhandler.h"
@@ -126,6 +127,7 @@
h323EP = NULL;
sipEP = NULL;
pcssEP = NULL;
+ iax2EP = NULL;
PVideoDevice::OpenArgs video = GetVideoOutputDevice();
video.deviceName = "GDKOUT";
@@ -447,6 +449,11 @@
return sipEP;
}
+GMIAX2Endpoint *
+GMManager::GetGMIAX2Endpoint ()
+{
+ return iax2EP;
+}
GMPCSSEndpoint *
GMManager::GetPCSSEndpoint ()
@@ -1582,6 +1589,12 @@
sipEP->Init ();
AddRouteEntry("pc:.* = sip:<da>");
+ /* IAX2 Endpoint */
+ iax2EP = new GMIAX2Endpoint (*this);
+ iax2EP->Init ();
+ AddRouteEntry("pc:.* = iax2:<da>");
+ AddRouteEntry("iax2:.* = pc:<da>");
+
/* PC Sound System Endpoint */
pcssEP = new GMPCSSEndpoint (*this);
AddRouteEntry("h323:.* = pc:<da>");
@@ -2744,6 +2757,7 @@
number = sipEP->GetRegisteredAccounts ();
if (h323EP->H323EndPoint::IsRegisteredWithGatekeeper ())
number++;
+ number += iax2EP->GetRegisteredAccounts();
return number;
}
Index: src/endpoints/accountshandler.cpp
===================================================================
--- src/endpoints/accountshandler.cpp (revisión: 4774)
+++ src/endpoints/accountshandler.cpp (copia de trabajo)
@@ -49,6 +49,7 @@
#include "manager.h"
#include "sip.h"
#include "h323.h"
+#include "iax2.h"
#include "ekiga.h"
#include "misc.h"
@@ -110,8 +111,10 @@
if (!strcmp (account->protocol_name, "SIP"))
SIPRegister (account);
- else
+ else if (!strcmp (account->protocol_name, "H323"))
H323Register (account);
+ else if (!strcmp (account->protocol_name, "IAX2"))
+ IAX2Register (account);
}
else {
@@ -129,8 +132,10 @@
if (!strcmp (list_account->protocol_name, "SIP"))
SIPRegister (list_account);
- else
- H323Register (list_account);
+ else if (!strcmp (list_account->protocol_name, "H323"))
+ H323Register (list_account);
+ else if (!strcmp (list_account->protocol_name, "IAX2"))
+ IAX2Register (list_account);
}
}
@@ -358,3 +363,47 @@
}
}
+void GMAccountsEndpoint::IAX2Register (GmAccount *a)
+{
+ GMIAX2Endpoint *iax2EP = ep.GetGMIAX2Endpoint();
+
+ GtkWidget *accounts_window = NULL;
+ GtkWidget *main_window = NULL;
+ GtkWidget *history_window = NULL;
+
+ main_window = GnomeMeeting::Process ()->GetMainWindow ();
+ history_window = GnomeMeeting::Process ()->GetHistoryWindow ();
+ accounts_window = GnomeMeeting::Process ()->GetAccountsWindow ();
+
+ if (a->enabled && !iax2EP->IsRegistered (a->host, a->username)) {
+ gnomemeeting_threads_enter ();
+ gm_accounts_window_update_account_state (accounts_window,
+ TRUE,
+ a->host,
+ a->username,
+ _("Registering"),
+ NULL);
+ gnomemeeting_threads_leave ();
+
+ iax2EP->Register(a->host, a->username, a->password, 60);
+ //the notification about the registration failing or
+ //succeeding is handled by the GMIAX2Endpoint class
+ }
+ else if (!a->enabled && iax2EP->IsRegistered (a->host, a->username)) {
+
+ gnomemeeting_threads_enter ();
+
+ gm_accounts_window_update_account_state (accounts_window,
+ TRUE,
+ a->host,
+ a->username,
+ _("Unregistering"),
+ NULL);
+
+ gnomemeeting_threads_leave ();
+
+ //this is synchronous so it could wait until timeout before returning
+ iax2EP->Unregister(a->host, a->username);
+ }
+}
+
Index: src/endpoints/manager.h
===================================================================
--- src/endpoints/manager.h (revisión: 4774)
+++ src/endpoints/manager.h (copia de trabajo)
@@ -67,6 +67,7 @@
class GMPCSSEndpoint;
class GMH323Endpoint;
class GMSIPEndpoint;
+class GMIAX2Endpoint;
PDICTIONARY (mwiDict, PString, PString);
@@ -84,11 +85,13 @@
friend class GMPCSSEndpoint;
friend class GMH323Endpoint;
friend class GMSIPEndpoint;
+ friend class GMIAX2Endpoint;
public:
enum CallingState {Standby, Calling, Connected, Called};
+ enum CallReason {Prompt = 0, Reject = 1, Forward = 2, Answer = 4};
/* DESCRIPTION : The constructor.
@@ -410,6 +413,12 @@
* PRE : /
*/
GMSIPEndpoint *GetSIPEndpoint ();
+
+ /* DESCRIPTION : /
+ * BEHAVIOR : Returns the IAX2 endpoint.
+ * PRE : /
+ */
+ GMIAX2Endpoint *GetGMIAX2Endpoint ();
/* DESCRIPTION : /
@@ -880,6 +889,7 @@
/* The various related endpoints */
GMH323Endpoint *h323EP;
GMSIPEndpoint *sipEP;
+ GMIAX2Endpoint *iax2EP;
GMPCSSEndpoint *pcssEP;
Index: src/endpoints/accountshandler.h
===================================================================
--- src/endpoints/accountshandler.h (revisión: 4774)
+++ src/endpoints/accountshandler.h (copia de trabajo)
@@ -97,6 +97,14 @@
*/
void H323Register (GmAccount *a);
+
+ /* DESCRIPTION : /
+ * BEHAVIOR : Updates the registration for a IAX2 GmAccount.
+ * PRE : A valid pointer to a valid IAX2 GmAccount.
+ */
+ void IAX2Register (GmAccount *a);
+
+
protected:
Index: src/gui/accounts.cpp
===================================================================
--- src/gui/accounts.cpp (revisión: 4774)
+++ src/gui/accounts.cpp (copia de trabajo)
@@ -48,6 +48,7 @@
#include "manager.h"
#include "sip.h"
#include "h323.h"
+#include "iax2.h"
#include "ekiga.h"
#include "gmconf.h"
@@ -409,7 +410,7 @@
GTK_WINDOW (NULL),
GTK_DIALOG_MODAL,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,
+ is_editing? GTK_STOCK_SAVE : GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT,
NULL);
gtk_dialog_set_default_response (GTK_DIALOG (dialog),
GTK_RESPONSE_ACCEPT);
@@ -450,6 +451,7 @@
aew->protocol_option_menu = gtk_combo_box_new_text ();
gtk_combo_box_append_text (GTK_COMBO_BOX (aew->protocol_option_menu), "SIP");
gtk_combo_box_append_text (GTK_COMBO_BOX (aew->protocol_option_menu), "H323");
+ gtk_combo_box_append_text (GTK_COMBO_BOX (aew->protocol_option_menu), "IAX2");
gtk_combo_box_set_active (GTK_COMBO_BOX (aew->protocol_option_menu), 0);
gtk_table_attach_defaults (GTK_TABLE (table), label, 0, 1, 1, 2);
@@ -466,7 +468,7 @@
}
/* Host */
- if (!account || !strcmp (account->protocol_name, "SIP"))
+ if (!account || !strcmp (account->protocol_name, "SIP") || !strcmp (account->protocol_name, "IAX2"))
aew->host_label = gtk_label_new (_("Registrar:"));
else
aew->host_label = gtk_label_new (_("Gatekeeper:"));
@@ -548,9 +550,10 @@
}
/* Realm/Domain */
- if (!account || !strcmp (account->protocol_name, "SIP"))
+ if (!account || !strcmp (account->protocol_name, "SIP") ||
+ !strcmp (account->protocol_name, "IAX2"))
aew->domain_label = gtk_label_new (NULL);
- else
+ else if (!strcmp (account->protocol_name, "H323"))
aew->domain_label = gtk_label_new (_("Gatekeeper ID:"));
gtk_misc_set_alignment (GTK_MISC (aew->domain_label), 0.0, 0.5);
@@ -563,13 +566,14 @@
if (account && account->domain)
gtk_entry_set_text (GTK_ENTRY (aew->domain_entry), account->domain);
- if (!account || !strcmp (account->protocol_name, "SIP")) {
+ if (!account || !strcmp (account->protocol_name, "SIP") ||
+ !strcmp (account->protocol_name, "IAX2")) {
gtk_widget_hide (aew->domain_label);
gtk_widget_hide (aew->domain_entry);
}
else {
-
+
gtk_widget_show (aew->domain_label);
gtk_widget_show (aew->domain_entry);
}
@@ -596,7 +600,6 @@
gtk_widget_show (dialog);
while (!valid) {
-
switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
case GTK_RESPONSE_ACCEPT:
@@ -607,23 +610,40 @@
account_name = gtk_entry_get_text (GTK_ENTRY (aew->account_entry));
host = gtk_entry_get_text (GTK_ENTRY (aew->host_entry));
password = gtk_entry_get_text (GTK_ENTRY (aew->password_entry));
+ if (aew->domain_entry)
domain = gtk_entry_get_text (GTK_ENTRY (aew->domain_entry));
timeout = gtk_entry_get_text (GTK_ENTRY (aew->timeout_entry));
- if (!is_editing)
- protocol = // take it from the menu
- gtk_combo_box_get_active (GTK_COMBO_BOX (aew->protocol_option_menu));
- else // take it from the existing account field
- protocol = (account->protocol_name
- && !strcmp (account->protocol_name, "SIP") ? 0 : 1);
+ if (!is_editing) {
+ // take it from the menu
+ protocol = gtk_combo_box_get_active (GTK_COMBO_BOX (aew->protocol_option_menu));
+ } else {
+ // take it from the existing account field
+ if (account->protocol_name) {
+ if (!strcmp (account->protocol_name, "SIP"))
+ protocol = GM_SIP;
+ else if (!strcmp (account->protocol_name, "H323"))
+ protocol = GM_H323;
+ else if (!strcmp (account->protocol_name, "IAX2"))
+ protocol = GM_IAX2;
+ }
+ else
+ protocol = GM_H323;
+ }
/* Check at least an account name, registrar,
* and username are provided */
- if (protocol == 0) // SIP
- valid = (username.FindRegEx (regex_username) != P_MAX_INDEX
- && account_name.FindRegEx (regex) != P_MAX_INDEX);
- else // H323
+
+ switch (protocol) {
+ case GM_SIP:
+ case GM_IAX2:
+ valid = (username.FindRegEx (regex_username) != P_MAX_INDEX &&
+ account_name.FindRegEx (regex) != P_MAX_INDEX);
+ break;
+ case GM_H323:
valid = (account_name.FindRegEx (regex) != P_MAX_INDEX);
+ break;
+ }
if (valid) {
@@ -636,6 +656,7 @@
g_free (account->host);
g_free (account->password);
g_free (account->domain);
+
if (!is_editing)
g_free (account->protocol_name);
@@ -643,18 +664,24 @@
account->host = g_strdup (host);
account->username = g_strdup (username);
- if (!strcmp (domain, ""))
- if (protocol == 0) { // SIP
+ //if user doesn't have a domain then it might be in their username
+ if (!strcmp (domain, "")) {
+ switch (protocol) {
+ case GM_SIP:
+ case GM_IAX2:
if (PString(username).Find("@") != P_MAX_INDEX)
account->domain = g_strdup (SIPURL(username).GetHostName());
else
account->domain = g_strdup (host);
- }
- else
+ break;
+ default:
account->domain = g_strdup ("");
+ }
+ }
else
account->domain = g_strdup (domain);
+ //if user doesn't have an authentication login then it might be in their username
if (!strcmp (auth_username, "")) {
if (PString(username).Find("@") != P_MAX_INDEX)
account->auth_username = g_strdup (SIPURL(username).GetUserName());
@@ -670,20 +697,38 @@
else
account->timeout = PMAX (atoi (timeout), 25);
- if (!is_editing)
- account->protocol_name = g_strdup ((protocol == 0) ? "SIP" : "H323");
+ if (!is_editing) {
+ switch (protocol) {
+ case GM_SIP:
+ account->protocol_name = g_strdup("SIP");
+ break;
+ case GM_H323:
+ account->protocol_name = g_strdup("H323");
+ break;
+ case GM_IAX2:
+ account->protocol_name = g_strdup("IAX2");
+ break;
+ default:
+ g_assert_not_reached();
+ }
+ }
/* The GUI will be updated through the GmConf notifiers */
if (is_editing)
gnomemeeting_account_modify (account);
else
gnomemeeting_account_add (account);
- }
- else {
- if (protocol == 0) // SIP
+
+ } else {
+ switch (protocol) {
+ case GM_SIP:
+ case GM_IAX2:
gnomemeeting_error_dialog (GTK_WINDOW (dialog), _("Missing information"), _("Please make sure to provide a valid account name, host name, and user name."));
- else // H323
+ break;
+ case GM_H323:
gnomemeeting_error_dialog (GTK_WINDOW (dialog), _("Missing information"), _("Please make sure to provide a valid account name, host name and registration timeout."));
+ break;
+ }
}
break;
@@ -717,12 +762,16 @@
account->account_name);
dialog =
gtk_message_dialog_new (GTK_WINDOW (accounts_window),
- GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,
- GTK_BUTTONS_YES_NO, confirm_msg);
+ GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_NONE, confirm_msg);
g_free (confirm_msg);
- gtk_dialog_set_default_response (GTK_DIALOG (dialog),
- GTK_RESPONSE_YES);
+ gtk_dialog_add_buttons(GTK_DIALOG (dialog),
+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
+ GTK_STOCK_DELETE, GTK_RESPONSE_APPLY,
+ NULL);
+
+ gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_DELETE_EVENT);
gtk_widget_show_all (dialog);
@@ -730,7 +779,7 @@
/* Now run the dialg */
switch (gtk_dialog_run (GTK_DIALOG (dialog))) {
- case GTK_RESPONSE_YES:
+ case GTK_RESPONSE_APPLY:
/* The GUI will be updated throught the GmConf notifiers */
gnomemeeting_account_delete (account);
@@ -969,7 +1018,7 @@
switch (gtk_combo_box_get_active (GTK_COMBO_BOX (aew->protocol_option_menu)))
{
- case 0:
+ case GM_SIP:
gtk_label_set_text (GTK_LABEL (aew->host_label), _("Registrar:"));
gtk_label_set_text (GTK_LABEL (aew->domain_label), _("Realm/Domain:"));
gtk_widget_show (aew->auth_username_label);
@@ -978,7 +1027,7 @@
gtk_widget_hide (aew->domain_label);
break;
- case 1:
+ case GM_H323:
gtk_label_set_text (GTK_LABEL (aew->host_label), _("Gatekeeper:"));
gtk_label_set_text (GTK_LABEL (aew->domain_label), _("Gatekeeper ID:"));
gtk_widget_hide (aew->auth_username_label);
@@ -986,6 +1035,14 @@
gtk_widget_show (aew->domain_entry);
gtk_widget_show (aew->domain_label);
break;
+
+ case GM_IAX2:
+ gtk_label_set_text (GTK_LABEL (aew->host_label), _("Registrar:"));
+ gtk_widget_hide (aew->auth_username_label);
+ gtk_widget_hide (aew->auth_username_entry);
+ gtk_widget_hide (aew->domain_label);
+ gtk_widget_hide (aew->domain_entry);
+ break;
};
}
@@ -1640,7 +1697,7 @@
g_signal_connect (G_OBJECT (button), "clicked",
GTK_SIGNAL_FUNC (add_account_cb), NULL);
- aw->delete_button = gtk_button_new_from_stock (GTK_STOCK_REMOVE);
+ aw->delete_button = gtk_button_new_from_stock (GTK_STOCK_DELETE);
gtk_widget_set_sensitive (aw->delete_button, FALSE);
gtk_box_pack_start (GTK_BOX (buttons_vbox), aw->delete_button, TRUE, TRUE, 0);
g_signal_connect (G_OBJECT (aw->delete_button), "clicked",
Index: src/gui/accounts.h
===================================================================
--- src/gui/accounts.h (revisión: 4774)
+++ src/gui/accounts.h (copia de trabajo)
@@ -63,7 +63,14 @@
typedef GmAccount_ GmAccount;
+enum GmAccountType_ {
+ GM_SIP = 0,
+ GM_H323 = 1,
+ GM_IAX2 = 2
+};
+typedef GmAccountType_ GmAccountType;
+
#define GM_ACCOUNT(x) (GmAccount *) (x)
Index: src/Makefile.am
===================================================================
--- src/Makefile.am (revisión: 4774)
+++ src/Makefile.am (copia de trabajo)
@@ -85,7 +85,9 @@
endpoints/sip.h \
endpoints/sip.cpp \
endpoints/urlhandler.h \
- endpoints/urlhandler.cpp
+ endpoints/urlhandler.cpp \
+ endpoints/iax2.h \
+ endpoints/iax2.cpp
# Clients
ekiga_SOURCES += \
Index: src/common.h
===================================================================
--- src/common.h (revisión: 4774)
+++ src/common.h (copia de trabajo)
@@ -49,8 +49,8 @@
#include <h323/h323.h>
#include <sip/sip.h>
+#include <iax2/iax2.h>
-
#ifndef DISABLE_GNOME
#include <gnome.h>
#else
@@ -74,6 +74,7 @@
#define PROTOCOLS_KEY "/apps/" PACKAGE_NAME "/protocols/"
#define H323_KEY "/apps/" PACKAGE_NAME "/protocols/h323/"
#define SIP_KEY "/apps/" PACKAGE_NAME "/protocols/sip/"
+#define IAX2_KEY "/apps/" PACKAGE_NAME "/protocols/iax2/"
#define PORTS_KEY "/apps/" PACKAGE_NAME "/protocols/ports/"
#define CALL_FORWARDING_KEY "/apps/" PACKAGE_NAME "/protocols/call_forwarding/"
#define LDAP_KEY "/apps/" PACKAGE_NAME "/protocols/ldap/"
Attachment:
signature.asc
Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente