]> sjero.net Git - linphone/commitdiff
add registration error cause
authorJehan Monnier <jehan.monnier@linphone.org>
Fri, 24 Sep 2010 16:02:26 +0000 (18:02 +0200)
committerJehan Monnier <jehan.monnier@linphone.org>
Fri, 24 Sep 2010 16:02:26 +0000 (18:02 +0200)
coreapi/callbacks.c
coreapi/linphonecore.h
coreapi/private.h
coreapi/proxy.c

index 642e3d18808697d25904639b5fff727e5cf16793..3df4906a5812c05b5d7592b50666b456b558d703 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){
@@ -426,6 +427,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);
        }
@@ -446,6 +450,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){
@@ -473,6 +478,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 b21573b5c9f365ae882f760a19682a152e480950..00a9298c10927dbe3ae285cbcad4688fba7c4a5e 100644 (file)
@@ -218,7 +218,7 @@ LinphoneCallLog *linphone_call_get_call_log(const LinphoneCall *call);
 const char *linphone_call_get_refer_to(const LinphoneCall *call);
 bool_t linphone_call_has_transfer_pending(const LinphoneCall *call);
 int linphone_call_get_duration(const LinphoneCall *call);
-const LinphoneCallParams linphone_call_get_current_params(const LinphoneCall *call);
+LinphoneCallParams linphone_call_get_current_params(const LinphoneCall *call);
 void linphone_call_enable_camera(LinphoneCall *lc, bool_t enabled);
 bool_t linphone_call_camera_enabled(const LinphoneCall *lc);
 LinphoneError linphone_call_get_error(const LinphoneCall *call);
index 943bd29c930a213b70ae9d2b1609f2195e3c2107..7680db74cdaf6c96f9fdd85479845721d369975b 100644 (file)
@@ -192,7 +192,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
 {
@@ -216,6 +216,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;
+}