mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-20 12:38:09 +00:00
work in progress for setup wizard.
git-svn-id: svn+ssh://svn.savannah.nongnu.org/linphone/trunk@456 3f6dc0c8-ddfe-455d-9043-3cd528dc4637
This commit is contained in:
parent
700fe6bef4
commit
c9db3492bc
9 changed files with 177 additions and 27 deletions
|
|
@ -1,6 +1,8 @@
|
|||
linphone-3.1.2 --
|
||||
* make it work with lastest ffmpeg swscale
|
||||
* improve theora packer
|
||||
* update theora default settings to match performance of 1.0 release.
|
||||
* fix a random crash during video resizing on linux with SDL.
|
||||
|
||||
linphone-3.1.1 -- April 14, 2009
|
||||
* fix crash when opening property box, in some rare case
|
||||
|
|
|
|||
|
|
@ -2309,15 +2309,19 @@ void linphone_core_set_mtu(LinphoneCore *lc, int mtu){
|
|||
}else ms_set_mtu(0);//use mediastreamer2 default value
|
||||
}
|
||||
|
||||
void linphone_core_set_waiting_callback(LinphoneCore *lc, LinphoneWaitingCallback cb){
|
||||
lc->wait_cb=cb;
|
||||
}
|
||||
|
||||
void linphone_core_start_waiting(LinphoneCore *lc, const char *purpose){
|
||||
if (lc->vtable.waiting){
|
||||
lc->wait_ctx=lc->vtable.waiting(lc,NULL,LinphoneWaitingStart,purpose,0);
|
||||
if (lc->wait_cb){
|
||||
lc->wait_ctx=lc->wait_cb(lc,NULL,LinphoneWaitingStart,purpose,0);
|
||||
}
|
||||
}
|
||||
|
||||
void linphone_core_update_progress(LinphoneCore *lc, const char *purpose, float progress){
|
||||
if (lc->vtable.waiting){
|
||||
lc->wait_ctx=lc->vtable.waiting(lc,lc->wait_ctx,LinphoneWaitingProgress,purpose,progress);
|
||||
if (lc->wait_cb){
|
||||
lc->wait_ctx=lc->wait_cb(lc,lc->wait_ctx,LinphoneWaitingProgress,purpose,progress);
|
||||
}else{
|
||||
#ifdef WIN32
|
||||
Sleep(50000);
|
||||
|
|
@ -2328,8 +2332,8 @@ void linphone_core_update_progress(LinphoneCore *lc, const char *purpose, float
|
|||
}
|
||||
|
||||
void linphone_core_stop_waiting(LinphoneCore *lc){
|
||||
if (lc->vtable.waiting){
|
||||
lc->wait_ctx=lc->vtable.waiting(lc,lc->wait_ctx,LinphoneWaitingFinished,NULL,0);
|
||||
if (lc->wait_cb){
|
||||
lc->wait_ctx=lc->wait_cb(lc,lc->wait_ctx,LinphoneWaitingFinished,NULL,0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -327,6 +327,22 @@ void linphone_proxy_config_write_to_config_file(struct _LpConfig* config,Linphon
|
|||
void linphone_proxy_config_set_sip_setup(LinphoneProxyConfig *cfg, const char *type);
|
||||
SipSetupContext *linphone_proxy_config_get_sip_setup_context(LinphoneProxyConfig *cfg);
|
||||
|
||||
typedef struct _LinphoneAccountCreator{
|
||||
struct _LinphoneCore *lc;
|
||||
struct _SipSetupContext *ssctx;
|
||||
char *username;
|
||||
char *password;
|
||||
char *domain;
|
||||
bool_t succeeded;
|
||||
}LinphoneAccountCreator;
|
||||
|
||||
void linphone_account_creator_set_username(LinphoneAccountCreator *obj, const char *username);
|
||||
void linphone_account_creator_set_password(LinphoneAccountCreator *obj, const char *password);
|
||||
void linphone_account_creator_set_domain(LinphoneAccountCreator *obj, const char *domain);
|
||||
int linphone_account_creator_test(LinphoneAccountCreator *obj);
|
||||
LinphoneProxyConfig * linphone_account_creator_validate(LinphoneAccountCreator *obj);
|
||||
void linphone_account_creator_destroy(LinphoneAccountCreator *obj);
|
||||
|
||||
|
||||
typedef struct _LinphoneAuthInfo
|
||||
{
|
||||
|
|
@ -418,12 +434,6 @@ typedef void (*CallLogUpdated)(struct _LinphoneCore *lc, struct _LinphoneCallLog
|
|||
typedef void (*TextMessageReceived)(struct _LinphoneCore *lc, LinphoneChatRoom *room, const char *from, const char *message);
|
||||
typedef void (*GeneralStateChange)(struct _LinphoneCore *lc, LinphoneGeneralState *gstate);
|
||||
typedef void (*DtmfReceived)(struct _LinphoneCore* lc, int dtmf);
|
||||
typedef enum _LinphoneWaitingState{
|
||||
LinphoneWaitingStart,
|
||||
LinphoneWaitingProgress,
|
||||
LinphoneWaitingFinished
|
||||
} LinphoneWaitingState;
|
||||
typedef void * (*Waiting)(struct _LinphoneCore *lc, void *context, LinphoneWaitingState ws, const char *purpose, float progress);
|
||||
|
||||
typedef struct _LinphoneVTable
|
||||
{
|
||||
|
|
@ -446,7 +456,6 @@ typedef struct _LinphoneVTable
|
|||
TextMessageReceived text_received;
|
||||
GeneralStateChange general_state;
|
||||
DtmfReceived dtmf_received;
|
||||
Waiting waiting;
|
||||
} LinphoneCoreVTable;
|
||||
|
||||
typedef struct _LCCallbackObj
|
||||
|
|
@ -463,6 +472,14 @@ typedef enum _LinphoneFirewallPolicy{
|
|||
LINPHONE_POLICY_USE_STUN
|
||||
} LinphoneFirewallPolicy;
|
||||
|
||||
typedef enum _LinphoneWaitingState{
|
||||
LinphoneWaitingStart,
|
||||
LinphoneWaitingProgress,
|
||||
LinphoneWaitingFinished
|
||||
} LinphoneWaitingState;
|
||||
typedef void * (*LinphoneWaitingCallback)(struct _LinphoneCore *lc, void *context, LinphoneWaitingState ws, const char *purpose, float progress);
|
||||
|
||||
|
||||
typedef struct _LinphoneCore
|
||||
{
|
||||
LinphoneCoreVTable vtable;
|
||||
|
|
@ -511,6 +528,7 @@ typedef struct _LinphoneCore
|
|||
gstate_t gstate_power;
|
||||
gstate_t gstate_reg;
|
||||
gstate_t gstate_call;
|
||||
LinphoneWaitingCallback wait_cb;
|
||||
void *wait_ctx;
|
||||
bool_t use_files;
|
||||
bool_t apply_nat_settings;
|
||||
|
|
@ -762,6 +780,10 @@ The "show" callback is called for the other linphone, causing gui to show up.
|
|||
The method returns 0 if an already running linphone was found*/
|
||||
int linphone_core_wake_up_possible_already_running_instance(const char *config_file);
|
||||
|
||||
/*set a callback for some blocking operations, it takes you informed of the progress of the operation*/
|
||||
void linphone_core_set_waiting_callback(LinphoneCore *lc, LinphoneWaitingCallback cb);
|
||||
|
||||
|
||||
/*returns the list of registered SipSetup (linphonecore plugins) */
|
||||
const MSList * linphone_core_get_sip_setups(LinphoneCore *lc);
|
||||
|
||||
|
|
|
|||
|
|
@ -102,6 +102,15 @@ static inline bool_t bandwidth_is_greater(int bw1, int bw2){
|
|||
else return bw1>=bw2;
|
||||
}
|
||||
|
||||
static inline void set_string(char **dest, const char *src){
|
||||
if (*dest){
|
||||
ms_free(*dest);
|
||||
*dest=NULL;
|
||||
}
|
||||
if (src)
|
||||
*dest=ms_strdup(src);
|
||||
}
|
||||
|
||||
#define PAYLOAD_TYPE_ENABLED PAYLOAD_TYPE_USER_FLAG_0
|
||||
void linphone_proxy_config_register_again_with_updated_contact(LinphoneProxyConfig *obj, osip_message_t *orig_request, osip_message_t *last_answer);
|
||||
void linphone_process_authentication(LinphoneCore* lc, eXosip_event_t *ev);
|
||||
|
|
|
|||
|
|
@ -634,4 +634,49 @@ SipSetupContext *linphone_proxy_config_get_sip_setup_context(LinphoneProxyConfig
|
|||
return cfg->ssctx;
|
||||
}
|
||||
|
||||
void linphone_account_creator_set_username(LinphoneAccountCreator *obj, const char *username){
|
||||
set_string(&obj->username,username);
|
||||
}
|
||||
|
||||
void linphone_account_creator_set_password(LinphoneAccountCreator *obj, const char *password){
|
||||
set_string(&obj->password,password);
|
||||
}
|
||||
|
||||
void linphone_account_creator_set_domain(LinphoneAccountCreator *obj, const char *domain){
|
||||
set_string(&obj->domain,domain);
|
||||
}
|
||||
|
||||
int linphone_account_creator_test(LinphoneAccountCreator *obj){
|
||||
SipSetupContext *ssctx=obj->ssctx;
|
||||
char *uri=ms_strdup_printf("%s@%s",obj->username,obj->domain);
|
||||
int err=sip_setup_context_account_exists(ssctx,uri);
|
||||
ms_free(uri);
|
||||
return err;
|
||||
}
|
||||
|
||||
LinphoneProxyConfig * linphone_account_creator_validate(LinphoneAccountCreator *obj){
|
||||
SipSetupContext *ssctx=obj->ssctx;
|
||||
char *uri=ms_strdup_printf("%s@%s",obj->username,obj->domain);
|
||||
int err=sip_setup_context_create_account(ssctx,uri,obj->password);
|
||||
ms_free(uri);
|
||||
if (err==0) {
|
||||
obj->succeeded=TRUE;
|
||||
return sip_setup_context_get_proxy_config(ssctx);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void linphone_account_creator_destroy(LinphoneAccountCreator *obj){
|
||||
if (obj->username)
|
||||
ms_free(obj->username);
|
||||
if (obj->password)
|
||||
ms_free(obj->password);
|
||||
if (obj->domain)
|
||||
ms_free(obj->domain);
|
||||
if (!obj->succeeded){
|
||||
linphone_proxy_config_destroy(sip_setup_context_get_proxy_config(obj->ssctx));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -112,6 +112,12 @@ int sip_setup_context_create_account(SipSetupContext * ctx, const char *uri, con
|
|||
else return -1;
|
||||
}
|
||||
|
||||
int sip_setup_context_account_exists(SipSetupContext *ctx, const char *uri){
|
||||
if (ctx->funcs->account_exists)
|
||||
return ctx->funcs->account_exists(ctx,uri);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int sip_setup_context_login_account(SipSetupContext * ctx, const char *uri, const char *passwd){
|
||||
osip_from_t *from;
|
||||
osip_from_init(&from);
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ struct _SipSetup{
|
|||
unsigned int capabilities;
|
||||
bool_t (*init)(void);
|
||||
void (*init_instance)(SipSetupContext *ctx);
|
||||
int (*account_exists)(SipSetupContext *ctx, const char *uri);
|
||||
int (*create_account)(SipSetupContext *ctx, const char *uri, const char *passwd);
|
||||
int (*login_account)(SipSetupContext *ctx, const char *uri, const char *passwd);
|
||||
int (*get_proxy)(SipSetupContext *ctx, const char *domain, char *proxy, size_t sz);
|
||||
|
|
@ -103,6 +104,7 @@ void sip_setup_unregister_all(void);
|
|||
unsigned int sip_setup_get_capabilities(SipSetup *s);
|
||||
|
||||
SipSetupContext * sip_setup_context_new(SipSetup *s, struct _LinphoneProxyConfig *cfg);
|
||||
int sip_setup_context_account_exists(SipSetupContext *ctx, const char *uri);
|
||||
int sip_setup_context_create_account(SipSetupContext *ctx, const char *uri, const char *passwd);
|
||||
int sip_setup_context_get_capabilities(SipSetupContext *ctx);
|
||||
int sip_setup_context_login_account(SipSetupContext * ctx, const char *uri, const char *passwd);
|
||||
|
|
|
|||
|
|
@ -74,8 +74,7 @@ static LinphoneCoreVTable vtable={
|
|||
.display_question=linphone_gtk_display_question,
|
||||
.call_log_updated=linphone_gtk_call_log_updated,
|
||||
.text_received=linphone_gtk_text_received,
|
||||
.general_state=linphone_gtk_general_state,
|
||||
.waiting=linphone_gtk_wait
|
||||
.general_state=linphone_gtk_general_state
|
||||
};
|
||||
|
||||
static gboolean verbose=0;
|
||||
|
|
@ -120,6 +119,7 @@ const char *linphone_gtk_get_config_file(){
|
|||
static void linphone_gtk_init_liblinphone(const char *file){
|
||||
linphone_core_set_user_agent("Linphone", LINPHONE_VERSION);
|
||||
the_core=linphone_core_new(&vtable,file,NULL);
|
||||
linphone_core_set_waiting_callback(the_core,linphone_gtk_wait);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
#include "linphone.h"
|
||||
|
||||
GtkWidget *create_intro(){
|
||||
static GtkWidget *create_intro(){
|
||||
GtkWidget *vbox=gtk_vbox_new(FALSE,2);
|
||||
GtkWidget *label=gtk_label_new(_("Welcome !\nThis assistant will help you to use a SIP account for your calls."));
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2);
|
||||
|
|
@ -27,7 +27,7 @@ GtkWidget *create_intro(){
|
|||
return vbox;
|
||||
}
|
||||
|
||||
GtkWidget *create_setup_signin_choice(){
|
||||
static GtkWidget *create_setup_signin_choice(){
|
||||
GtkWidget *vbox=gtk_vbox_new(FALSE,2);
|
||||
GtkWidget *t1=gtk_radio_button_new_with_label(NULL,_("Create an account by choosing a username"));
|
||||
GtkWidget *t2=gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(t1),_("I have already an account and just want to use it"));
|
||||
|
|
@ -39,7 +39,13 @@ GtkWidget *create_setup_signin_choice(){
|
|||
return vbox;
|
||||
}
|
||||
|
||||
GtkWidget *create_username_chooser(){
|
||||
static void create_username_changed(GtkEntry *entry, GtkWidget *w){
|
||||
GtkWidget *assistant=gtk_widget_get_toplevel(w);
|
||||
gtk_assistant_set_page_complete(GTK_ASSISTANT(assistant),w,
|
||||
gtk_entry_get_text_length(entry)>=3);
|
||||
}
|
||||
|
||||
static GtkWidget *create_username_chooser(){
|
||||
GtkWidget *vbox=gtk_vbox_new(FALSE,2);
|
||||
GtkWidget *hbox=gtk_hbox_new(FALSE,2);
|
||||
GtkWidget *label=gtk_label_new(_("Please choose a username:"));
|
||||
|
|
@ -54,10 +60,33 @@ GtkWidget *create_username_chooser(){
|
|||
gtk_widget_show_all(vbox);
|
||||
g_object_set_data(G_OBJECT(vbox),"username",entry);
|
||||
g_object_set_data(G_OBJECT(vbox),"errorstring",label3);
|
||||
g_signal_connect(G_OBJECT(entry),"changed",(GCallback)create_username_changed,vbox);
|
||||
return vbox;
|
||||
}
|
||||
|
||||
GtkWidget *create_finish_page(){
|
||||
static GtkWidget *create_username_checking_page(){
|
||||
GtkWidget *vbox=gtk_vbox_new(FALSE,2);
|
||||
GtkWidget *label=gtk_label_new(NULL);
|
||||
GtkWidget *progress=gtk_progress_bar_new();
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), progress, TRUE, TRUE, 2);
|
||||
g_object_set_data(G_OBJECT(vbox),"label",label);
|
||||
g_object_set_data(G_OBJECT(vbox),"progress",progress);
|
||||
gtk_widget_show_all(vbox);
|
||||
return vbox;
|
||||
}
|
||||
|
||||
static void check_username(GtkWidget *page){
|
||||
GtkWidget *progress=g_object_get_data(G_OBJECT(page),"progress");
|
||||
GtkWidget *label=g_object_get_data(G_OBJECT(page),"label");
|
||||
const char *username=g_object_get_data(G_OBJECT(page),"username");
|
||||
gchar *text=g_strdup_printf(_("Checking if '%s' is available..."),username);
|
||||
gtk_label_set_text(GTK_LABEL(label),text);
|
||||
g_free(text);
|
||||
gtk_progress_bar_set_text(GTK_PROGRESS_BAR(progress),_("Please wait..."));
|
||||
}
|
||||
|
||||
static GtkWidget *create_finish_page(){
|
||||
GtkWidget *vbox=gtk_vbox_new(FALSE,2);
|
||||
GtkWidget *label=gtk_label_new(_("Thank you. Your account is now configured and ready for use."));
|
||||
gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2);
|
||||
|
|
@ -65,12 +94,35 @@ GtkWidget *create_finish_page(){
|
|||
return vbox;
|
||||
}
|
||||
|
||||
static int next_page_handler(int curpage, gpointer data){
|
||||
static void linphone_gtk_assistant_closed(GtkWidget *w){
|
||||
gtk_widget_destroy(w);
|
||||
}
|
||||
|
||||
static int linphone_gtk_assistant_forward(int curpage, gpointer data){
|
||||
GtkWidget *w=(GtkWidget*)data;
|
||||
GtkWidget *box=gtk_assistant_get_nth_page(GTK_ASSISTANT(w),curpage);
|
||||
if (curpage==1){
|
||||
GtkWidget *create_button=(GtkWidget*)g_object_get_data(G_OBJECT(box),"create_account");
|
||||
if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(create_button))){
|
||||
g_error("Not implemented yet...");
|
||||
}
|
||||
}else if (curpage==2){
|
||||
GtkWidget *next=gtk_assistant_get_nth_page(GTK_ASSISTANT(w),curpage+1);
|
||||
g_object_set_data(G_OBJECT(next),"username",
|
||||
g_strdup(gtk_entry_get_text(GTK_ENTRY(g_object_get_data(G_OBJECT(box),"username")))));
|
||||
}
|
||||
return curpage+1;
|
||||
}
|
||||
|
||||
static void linphone_gtk_assistant_closed(GtkWidget *w){
|
||||
gtk_widget_destroy(w);
|
||||
static void linphone_gtk_assistant_apply(GtkWidget *w){
|
||||
g_message("in apply()");
|
||||
}
|
||||
|
||||
static void linphone_gtk_assistant_prepare(GtkWidget *assistant, GtkWidget *page){
|
||||
int pagenum=gtk_assistant_get_current_page(GTK_ASSISTANT(assistant));
|
||||
if (pagenum==3){
|
||||
check_username(page);
|
||||
}
|
||||
}
|
||||
|
||||
GtkWidget * linphone_gtk_create_assistant(void){
|
||||
|
|
@ -78,7 +130,8 @@ GtkWidget * linphone_gtk_create_assistant(void){
|
|||
GtkWidget *p1=create_intro();
|
||||
GtkWidget *p2=create_setup_signin_choice();
|
||||
GtkWidget *p3=create_username_chooser();
|
||||
GtkWidget *p4=create_finish_page();
|
||||
GtkWidget *checking=create_username_checking_page();
|
||||
GtkWidget *end=create_finish_page();
|
||||
gtk_assistant_append_page(GTK_ASSISTANT(w),p1);
|
||||
gtk_assistant_set_page_type(GTK_ASSISTANT(w),p1,GTK_ASSISTANT_PAGE_INTRO);
|
||||
gtk_assistant_set_page_title(GTK_ASSISTANT(w),p1,_("Welcome to the account setup assistant"));
|
||||
|
|
@ -90,13 +143,20 @@ GtkWidget * linphone_gtk_create_assistant(void){
|
|||
gtk_assistant_append_page(GTK_ASSISTANT(w),p3);
|
||||
gtk_assistant_set_page_type(GTK_ASSISTANT(w),p3,GTK_ASSISTANT_PAGE_CONTENT);
|
||||
gtk_assistant_set_page_title(GTK_ASSISTANT(w),p3,_("Account setup assistant - enter your information"));
|
||||
gtk_assistant_append_page(GTK_ASSISTANT(w),p4);
|
||||
gtk_assistant_set_page_type(GTK_ASSISTANT(w),p4,GTK_ASSISTANT_PAGE_SUMMARY);
|
||||
gtk_assistant_set_page_title(GTK_ASSISTANT(w),p4,_("Now ready !"));
|
||||
|
||||
gtk_assistant_set_forward_page_func(GTK_ASSISTANT(w),next_page_handler,w,NULL);
|
||||
gtk_assistant_append_page(GTK_ASSISTANT(w),checking);
|
||||
gtk_assistant_set_page_type(GTK_ASSISTANT(w),checking,GTK_ASSISTANT_PAGE_PROGRESS);
|
||||
gtk_assistant_set_page_title(GTK_ASSISTANT(w),checking,_("Account setup assistant - verifying"));
|
||||
|
||||
gtk_assistant_append_page(GTK_ASSISTANT(w),end);
|
||||
gtk_assistant_set_page_type(GTK_ASSISTANT(w),end,GTK_ASSISTANT_PAGE_SUMMARY);
|
||||
gtk_assistant_set_page_title(GTK_ASSISTANT(w),end,_("Now ready !"));
|
||||
|
||||
gtk_assistant_set_forward_page_func(GTK_ASSISTANT(w),linphone_gtk_assistant_forward,w,NULL);
|
||||
g_signal_connect(G_OBJECT(w),"close",(GCallback)linphone_gtk_assistant_closed,NULL);
|
||||
g_signal_connect(G_OBJECT(w),"cancel",(GCallback)linphone_gtk_assistant_closed,NULL);
|
||||
g_signal_connect(G_OBJECT(w),"apply",(GCallback)linphone_gtk_assistant_apply,NULL);
|
||||
g_signal_connect(G_OBJECT(w),"prepare",(GCallback)linphone_gtk_assistant_prepare,NULL);
|
||||
gtk_widget_show(w);
|
||||
|
||||
return w;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue