2 linphone, gtk-glade interface.
3 Copyright (C) 2009 Simon MORLAT (simon.morlat@linphone.org)
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
22 void linphone_gtk_login_frame_connect_clicked(GtkWidget *button);
23 void linphone_gtk_exit_login_frame(void);
27 NetworkKindOpticalFiber
30 static gboolean check_login_ok(LinphoneProxyConfig *cfg){
31 if (linphone_proxy_config_is_registered(cfg)){
32 linphone_gtk_exit_login_frame();
38 static void do_login(SipSetupContext *ssctx, const char *identity, const char * passwd){
39 GtkWidget *mw=linphone_gtk_get_main_window();
40 if (sip_setup_context_login_account(ssctx,identity,passwd)==0){
41 guint t=GPOINTER_TO_INT(g_object_get_data(G_OBJECT(mw),"login_tout"));
42 if (t!=0) g_source_remove(t);
43 t=g_timeout_add(50,(GSourceFunc)check_login_ok,sip_setup_context_get_proxy_config(ssctx));
44 g_object_set_data(G_OBJECT(mw),"login_tout",GINT_TO_POINTER(t));
48 static gboolean do_login_noprompt(LinphoneProxyConfig *cfg){
49 SipSetupContext *ssctx=linphone_proxy_config_get_sip_setup_context(cfg);
50 if (ssctx==NULL) return TRUE;/*not ready ?*/
51 do_login(ssctx,linphone_proxy_config_get_identity(cfg),NULL);
55 void linphone_gtk_show_login_frame(LinphoneProxyConfig *cfg){
56 GtkWidget *mw=linphone_gtk_get_main_window();
57 GtkWidget *label=linphone_gtk_get_widget(mw,"login_label");
58 const LinphoneAuthInfo *ai;
60 LinphoneAddress *from;
61 LinphoneCore *lc=linphone_gtk_get_core();
63 const char *passwd=NULL;
66 if (linphone_core_get_download_bandwidth(lc)==512 &&
67 linphone_core_get_upload_bandwidth(lc)==512)
68 nettype=NetworkKindOpticalFiber;
69 else nettype=NetworkKindAdsl;
70 gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(mw,"login_internet_kind")),nettype);
71 gtk_combo_box_set_active(GTK_COMBO_BOX(linphone_gtk_get_widget(mw,"internet_kind")),nettype);
73 if (linphone_gtk_get_ui_config_int("automatic_login",0) ){
74 g_timeout_add(250,(GSourceFunc)do_login_noprompt,cfg);
79 const char *login_image=linphone_gtk_get_ui_config("login_image",NULL);
81 GdkPixbuf *pbuf=create_pixbuf (login_image);
82 gtk_image_set_from_pixbuf (GTK_IMAGE(linphone_gtk_get_widget(mw,"login_image")),
84 g_object_unref(G_OBJECT(pbuf));
88 gtk_widget_hide(linphone_gtk_get_widget(mw,"disconnect_item"));
89 gtk_widget_hide(linphone_gtk_get_widget(mw,"main_frame"));
90 gtk_widget_hide(linphone_gtk_get_widget(mw,"keypad_frame"));
91 gtk_widget_show(linphone_gtk_get_widget(mw,"login_frame"));
92 gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"main_menu"),FALSE);
93 gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),FALSE);
94 str=g_strdup_printf(_("Please enter login information for %s"),linphone_proxy_config_get_domain(cfg));
95 gtk_label_set_text(GTK_LABEL(label),str);
96 g_object_set_data(G_OBJECT(mw),"login_proxy_config",cfg);
99 from=linphone_address_new(linphone_proxy_config_get_identity(cfg));
101 ai=linphone_core_find_auth_info(lc,linphone_proxy_config_get_domain(cfg),linphone_address_get_username(from));
102 /*display the last entered username, if not '?????'*/
103 if (linphone_address_get_username(from)[0]!='?')
104 gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_username")),
105 linphone_address_get_username(from));
106 if (ai) passwd=linphone_auth_info_get_passwd(ai);
107 gtk_entry_set_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_password")),
108 passwd!=NULL ? passwd : "");
110 linphone_address_destroy(from);
113 void linphone_gtk_exit_login_frame(void){
114 GtkWidget *mw=linphone_gtk_get_main_window();
115 gtk_widget_show(linphone_gtk_get_widget(mw,"main_frame"));
116 gtk_widget_hide(linphone_gtk_get_widget(mw,"login_frame"));
117 gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"main_menu"),TRUE);
118 gtk_widget_set_sensitive(linphone_gtk_get_widget(mw,"options_menu"),TRUE);
119 gtk_widget_show(linphone_gtk_get_widget(mw,"disconnect_item"));
122 void linphone_gtk_logout_clicked(){
123 LinphoneCore *lc=linphone_gtk_get_core();
124 LinphoneProxyConfig *cfg=NULL;
125 linphone_core_get_default_proxy(lc,&cfg);
127 SipSetupContext *ss=linphone_proxy_config_get_sip_setup_context(cfg);
129 sip_setup_context_logout(ss);
130 linphone_gtk_set_ui_config_int("automatic_login",FALSE);
131 linphone_gtk_show_login_frame(cfg);
138 void linphone_gtk_login_frame_connect_clicked(GtkWidget *button){
139 GtkWidget *mw=gtk_widget_get_toplevel(button);
140 const char *username;
141 const char *password;
144 LinphoneProxyConfig *cfg=(LinphoneProxyConfig*)g_object_get_data(G_OBJECT(mw),"login_proxy_config");
145 LinphoneAddress *from;
146 SipSetupContext *ssctx=linphone_proxy_config_get_sip_setup_context(cfg);
148 username=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_username")));
149 password=gtk_entry_get_text(GTK_ENTRY(linphone_gtk_get_widget(mw,"login_password")));
151 if (username==NULL || username[0]=='\0')
154 autologin=gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(linphone_gtk_get_widget(mw,"automatic_login")));
155 linphone_gtk_set_ui_config_int("automatic_login",autologin);
157 from=linphone_address_new(linphone_proxy_config_get_identity(cfg));
158 linphone_address_set_username(from,username);
159 identity=linphone_address_as_string(from);
160 do_login(ssctx,identity,password);
161 /*we need to refresh the identities since the proxy config may have changed.*/
162 linphone_gtk_load_identities();
165 void linphone_gtk_internet_kind_changed(GtkWidget *combo){
166 int netkind_id=gtk_combo_box_get_active(GTK_COMBO_BOX(combo));
167 LinphoneCore *lc=linphone_gtk_get_core();
168 if (netkind_id==NetworkKindAdsl){
169 linphone_core_set_upload_bandwidth(lc,256);
170 linphone_core_set_download_bandwidth(lc,512);
171 }else if (netkind_id==NetworkKindOpticalFiber){
172 linphone_core_set_upload_bandwidth(lc,512);
173 linphone_core_set_download_bandwidth(lc,512);