diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index 62cf00835..28b980312 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -524,7 +524,7 @@ static void auth_requested(SalOp *h, const char *realm, const char *username){ ai->usecount++; }else{ if (ai && ai->works==FALSE) { - register_failure(h, SalErrorFailure, SalReasonForbidden, _("Authentication failure")); + sal_op_cancel_authentication(h); } if (lc->vtable.auth_info_requested) lc->vtable.auth_info_requested(lc,realm,username); diff --git a/coreapi/sal.h b/coreapi/sal.h index 09ff05f81..5794427e4 100644 --- a/coreapi/sal.h +++ b/coreapi/sal.h @@ -276,6 +276,7 @@ void sal_op_set_from(SalOp *op, const char *from); void sal_op_set_to(SalOp *op, const char *to); void sal_op_release(SalOp *h); void sal_op_authenticate(SalOp *h, const SalAuthInfo *info); +void sal_op_cancel_authentication(SalOp *h); void sal_op_set_user_pointer(SalOp *h, void *up); int sal_op_get_auth_requested(SalOp *h, const char **realm, const char **username); const char *sal_op_get_from(const SalOp *op); diff --git a/coreapi/sal_eXosip2.c b/coreapi/sal_eXosip2.c index 5c65cf80a..61c7c494d 100644 --- a/coreapi/sal_eXosip2.c +++ b/coreapi/sal_eXosip2.c @@ -21,7 +21,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #endif #include "sal_eXosip2.h" - +#include "private.h" #include "offeranswer.h" static void text_received(Sal *sal, eXosip_event_t *ev); @@ -793,7 +793,16 @@ void sal_op_authenticate(SalOp *h, const SalAuthInfo *info){ h->auth_info=sal_auth_info_clone(info); /*store auth info for subsequent request*/ } } +void sal_op_cancel_authentication(SalOp *h) { + if (h->rid >0) { + sal_op_get_sal(h)->callbacks.register_failure(h,SalErrorFailure, SalReasonForbidden,_("Authentication failure")); + } else if (h->cid >0) { + sal_op_get_sal(h)->callbacks.call_failure(h,SalErrorFailure, SalReasonForbidden,_("Authentication failure"),0); + } else { + ms_warning("Auth failure not handled"); + } +} static void set_network_origin(SalOp *op, osip_message_t *req){ const char *received=NULL; int rport=5060;