]> sjero.net Git - linphone/commitdiff
Merge branch 'master' of git.sv.gnu.org:/srv/git/linphone
authorSimon Morlat <simon.morlat@linphone.org>
Sat, 25 Sep 2010 14:38:51 +0000 (16:38 +0200)
committerSimon Morlat <simon.morlat@linphone.org>
Sat, 25 Sep 2010 14:38:51 +0000 (16:38 +0200)
Conflicts:
coreapi/linphonecore.h

coreapi/callbacks.c
coreapi/private.h
coreapi/proxy.c

index 100373f6893be04ce553fd16bb946de7744ea56e..7c8533759df5004f985780a070a7df5f3cd56843 100644 (file)
@@ -24,6 +24,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "private.h"
 #include "mediastreamer2/mediastream.h"
 
+static void register_failure(SalOp *op, SalError error, SalReason reason, const char *details);
 
 static void linphone_connect_incoming(LinphoneCore *lc, LinphoneCall *call){
        if (lc->ringstream!=NULL){
@@ -428,6 +429,9 @@ static void auth_requested(SalOp *h, const char *realm, const char *username){
                sal_op_authenticate(h,&sai);
                ai->usecount++;
        }else{
+               if (ai && ai->works==FALSE) {
+                       register_failure(h, SalErrorFailure, SalReasonForbidden, _("Authentication failure"));
+               } 
                if (lc->vtable.auth_info_requested)
                        lc->vtable.auth_info_requested(lc,realm,username);
        }
@@ -448,6 +452,7 @@ static void register_success(SalOp *op, bool_t registered){
        char *msg;
        
        cfg->registered=registered;
+       linphone_proxy_config_set_error(cfg,LinphoneErrorNone);
        linphone_proxy_config_set_state(cfg, registered ? LinphoneRegistrationOk : LinphoneRegistrationCleared ,
                                        registered ? "Registration sucessful" : "Unregistration done");
        if (lc->vtable.display_status){
@@ -475,6 +480,11 @@ static void register_failure(SalOp *op, SalError error, SalReason reason, const
                lc->vtable.display_status(lc,msg);
                ms_free(msg);
        }
+       if (error== SalErrorFailure && reason == SalReasonForbidden) {
+               linphone_proxy_config_set_error(cfg, LinphoneErrorBadCredentials);
+       } else if (error == SalErrorNoResponse) {
+               linphone_proxy_config_set_error(cfg, LinphoneErrorNoResponse);
+       }
        linphone_proxy_config_set_state(cfg,LinphoneRegistrationFailed,details);
 }
 
index a53e3d4bfd7dc81b9f2a478837ac404739047230..eb5a26c884fbce9dc54327fc27735a1c861f5ce8 100644 (file)
@@ -196,7 +196,7 @@ void linphone_core_stop_waiting(LinphoneCore *lc);
 int linphone_core_start_invite(LinphoneCore *lc, LinphoneCall *call, LinphoneProxyConfig *dest_proxy);
 void linphone_core_start_pending_refered_calls(LinphoneCore *lc);
 extern SalCallbacks linphone_sal_callbacks;
-
+void linphone_proxy_config_set_error(LinphoneProxyConfig *cfg,LinphoneError error);
 
 struct _LinphoneProxyConfig
 {
@@ -220,6 +220,7 @@ struct _LinphoneProxyConfig
        bool_t dial_escape_plus;
        void* user_data;
        time_t deletion_date;
+       LinphoneError error;
 };
 
 struct _LinphoneAuthInfo 
index 251bdbb13c1c390e25dfbf23c3b79cd41bd11791..07a8e6c81527b32bcc58ecb8efd95c1ff11f2b22 100644 (file)
@@ -829,5 +829,11 @@ LinphoneRegistrationState linphone_proxy_config_get_state(const LinphoneProxyCon
         }
         return NULL;
  }
+LinphoneError linphone_proxy_config_get_error(const LinphoneProxyConfig *cfg) {
+       return cfg->error;
+}
+void linphone_proxy_config_set_error(LinphoneProxyConfig *cfg,LinphoneError error) {
+       cfg->error = error;
+}