Save last SIP error message when registration fail
This commit is contained in:
parent
996ee2d27a
commit
2f8a5d8e46
|
@ -86,7 +86,7 @@ int thttp_auth_digest_HA1(const char* username, const char* realm, const char* p
|
|||
/* RFC 2617 - 3.2.2.2 A1
|
||||
A1 = unq(username-value) ":" unq(realm-value) ":" passwd
|
||||
*/
|
||||
char *a1 = 0;
|
||||
char *a1 = tsk_null;
|
||||
tsk_sprintf(&a1, "%s:%s:%s", username, realm, password);
|
||||
ret = tsk_md5compute(a1, tsk_strlen(a1), ha1);
|
||||
TSK_FREE(a1);
|
||||
|
@ -118,7 +118,7 @@ int thttp_auth_digest_HA1sess(const char* username, const char* realm, const cha
|
|||
":" unq(nonce-value) ":" unq(cnonce-value)
|
||||
*/
|
||||
|
||||
char *a1sess = 0;
|
||||
char *a1sess = tsk_null;
|
||||
tsk_sprintf(&a1sess, "%s:%s:%s:%s:%s", username, realm, password, nonce, cnonce);
|
||||
ret = tsk_md5compute(a1sess, tsk_strlen(a1sess), ha1sess);
|
||||
TSK_FREE(a1sess);
|
||||
|
@ -151,7 +151,7 @@ int thttp_auth_digest_HA2(const char* method, const char* url, const tsk_buffer_
|
|||
A2 = Method ":" digest-url-value ":" H(entity-body)
|
||||
*/
|
||||
|
||||
char *a2 = 0;
|
||||
char *a2 = tsk_null;
|
||||
|
||||
if(!qop || tsk_strempty(qop) || tsk_striequals(qop, "auth")){
|
||||
tsk_sprintf(&a2, "%s:%s", method, url);
|
||||
|
@ -216,7 +216,7 @@ int thttp_auth_digest_response(const tsk_md5string_t *ha1, const char* nonce, co
|
|||
<">
|
||||
*/
|
||||
|
||||
char *res = 0;
|
||||
char *res = tsk_null;
|
||||
|
||||
if(tsk_striequals(qop, "auth") || tsk_striequals(qop, "auth-int")){
|
||||
/* CASE 1 */
|
||||
|
|
|
@ -329,7 +329,7 @@ tsip_header_t *tsip_challenge_create_header_authorization(tsip_challenge_t *self
|
|||
hdr->qop = tsk_strdup(self->qop); \
|
||||
hdr->opaque = tsk_strdup(self->opaque); \
|
||||
hdr->algorithm = self->algorithm ? tsk_strdup(self->algorithm) : tsk_strdup("MD5"); \
|
||||
hdr->cnonce = self->nc? tsk_strdup(self->cnonce) : 0; \
|
||||
hdr->cnonce = self->nc? tsk_strdup(self->cnonce) : tsk_null; \
|
||||
hdr->uri = tsk_strdup(uristring); \
|
||||
hdr->nc = self->nc? tsk_strdup(nc) : 0; \
|
||||
hdr->response = tsk_strdup(response); \
|
||||
|
|
|
@ -198,7 +198,7 @@ tsip_request_t *tsip_dialog_request_new(const tsip_dialog_t *self, const char* m
|
|||
|
||||
default:
|
||||
{
|
||||
char* contact = tsk_false;
|
||||
char* contact = tsk_null;
|
||||
tsip_header_Contacts_L_t *hdr_contacts;
|
||||
|
||||
if(request->line.request.request_type == tsip_OPTIONS ||
|
||||
|
|
|
@ -80,58 +80,57 @@ int tsip_dialog_register_event_callback(const tsip_dialog_register_t *self, tsip
|
|||
int ret = -1;
|
||||
|
||||
switch(type){
|
||||
|
||||
case tsip_dialog_i_msg:
|
||||
{
|
||||
if(msg){
|
||||
if(TSIP_MESSAGE_IS_RESPONSE(msg)){
|
||||
//
|
||||
// RESPONSE
|
||||
//
|
||||
if(TSIP_RESPONSE_IS_1XX(msg)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_1xx, msg, tsk_null);
|
||||
}
|
||||
else if(TSIP_RESPONSE_IS_2XX(msg)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_2xx, msg, tsk_null);
|
||||
}
|
||||
else if(TSIP_RESPONSE_IS(msg,401) || TSIP_RESPONSE_IS(msg,407) || TSIP_RESPONSE_IS(msg,421) || TSIP_RESPONSE_IS(msg,494)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_401_407_421_494, msg, tsk_null);
|
||||
}
|
||||
else if(TSIP_RESPONSE_IS(msg,423)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_423, msg, tsk_null);
|
||||
case tsip_dialog_i_msg:
|
||||
{
|
||||
if(msg){
|
||||
if(TSIP_MESSAGE_IS_RESPONSE(msg)){
|
||||
//
|
||||
// RESPONSE
|
||||
//
|
||||
if(TSIP_RESPONSE_IS_1XX(msg)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_1xx, msg, tsk_null);
|
||||
}
|
||||
else if(TSIP_RESPONSE_IS_2XX(msg)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_2xx, msg, tsk_null);
|
||||
}
|
||||
else if(TSIP_RESPONSE_IS(msg,401) || TSIP_RESPONSE_IS(msg,407) || TSIP_RESPONSE_IS(msg,421) || TSIP_RESPONSE_IS(msg,494)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_401_407_421_494, msg, tsk_null);
|
||||
}
|
||||
else if(TSIP_RESPONSE_IS(msg,423)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_423, msg, tsk_null);
|
||||
}
|
||||
else{
|
||||
// Alert User
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_error, msg, tsk_null);
|
||||
/* TSK_DEBUG_WARN("Not supported status code: %d", TSIP_RESPONSE_CODE(msg)); */
|
||||
}
|
||||
}
|
||||
else{
|
||||
// Alert User
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_error, msg, tsk_null);
|
||||
/* TSK_DEBUG_WARN("Not supported status code: %d", TSIP_RESPONSE_CODE(msg)); */
|
||||
}
|
||||
}
|
||||
else{
|
||||
//
|
||||
// REQUEST
|
||||
//
|
||||
if(TSIP_REQUEST_IS_REGISTER(msg)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_iREGISTER, msg, tsk_null);
|
||||
//
|
||||
// REQUEST
|
||||
//
|
||||
if(TSIP_REQUEST_IS_REGISTER(msg)){
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_iREGISTER, msg, tsk_null);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case tsip_dialog_canceled:
|
||||
{
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_cancel, msg, tsk_null);
|
||||
break;
|
||||
}
|
||||
case tsip_dialog_canceled:
|
||||
{
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_cancel, msg, tsk_null);
|
||||
break;
|
||||
}
|
||||
|
||||
case tsip_dialog_terminated:
|
||||
case tsip_dialog_timedout:
|
||||
case tsip_dialog_error:
|
||||
case tsip_dialog_transport_error:
|
||||
{
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_transporterror, msg, tsk_null);
|
||||
break;
|
||||
}
|
||||
case tsip_dialog_terminated:
|
||||
case tsip_dialog_timedout:
|
||||
case tsip_dialog_error:
|
||||
case tsip_dialog_transport_error:
|
||||
{
|
||||
ret = tsip_dialog_fsm_act(TSIP_DIALOG(self), _fsm_action_transporterror, msg, tsk_null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -272,8 +271,8 @@ int tsip_dialog_register_Any_2_Terminated_X_Error(va_list *app)
|
|||
tsip_dialog_register_t *self = va_arg(*app, tsip_dialog_register_t *);
|
||||
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
|
||||
|
||||
/* set last error (or info) */
|
||||
tsip_dialog_set_lasterror(TSIP_DIALOG(self), TSIP_RESPONSE_PHRASE(response), TSIP_RESPONSE_CODE(response));
|
||||
/* save last error */
|
||||
tsip_dialog_set_lasterror_2(TSIP_DIALOG(self), TSIP_RESPONSE_PHRASE(response), TSIP_RESPONSE_CODE(response), response);
|
||||
|
||||
/* Alert the user. */
|
||||
if(response){
|
||||
|
@ -437,8 +436,9 @@ int tsip_dialog_register_OnTerminated(tsip_dialog_register_t *self)
|
|||
}
|
||||
|
||||
/* Alert the user */
|
||||
TSIP_DIALOG_SIGNAL(self, tsip_event_code_dialog_terminated,
|
||||
TSIP_DIALOG(self)->last_error.phrase ? TSIP_DIALOG(self)->last_error.phrase : "Dialog terminated");
|
||||
TSIP_DIALOG_SIGNAL_2(self, tsip_event_code_dialog_terminated,
|
||||
TSIP_DIALOG(self)->last_error.phrase ? TSIP_DIALOG(self)->last_error.phrase : "Dialog terminated",
|
||||
TSIP_DIALOG(self)->last_error.message);
|
||||
|
||||
/* Remove from the dialog layer. */
|
||||
return tsip_dialog_remove(TSIP_DIALOG(self));
|
||||
|
|
|
@ -282,11 +282,14 @@ int tsip_dialog_register_InProgress_2_Connected_X_2xx(va_list *app)
|
|||
int tsip_dialog_register_InProgress_2_Terminated_X_2xx(va_list *app)
|
||||
{
|
||||
tsip_dialog_register_t *self = va_arg(*app, tsip_dialog_register_t *);
|
||||
const tsip_message_t *message = va_arg(*app, const tsip_message_t *);
|
||||
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
|
||||
|
||||
/* save last error */
|
||||
tsip_dialog_set_lasterror_2(TSIP_DIALOG(self), TSIP_RESPONSE_PHRASE(response), TSIP_RESPONSE_CODE(response), response);
|
||||
|
||||
/* Alert the user */
|
||||
TSIP_DIALOG_REGISTER_SIGNAL(self, tsip_ao_unregister,
|
||||
TSIP_RESPONSE_CODE(message), TSIP_RESPONSE_PHRASE(message), message);
|
||||
TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -363,9 +366,9 @@ int tsip_dialog_register_InProgress_2_Terminated_X_300_to_699(va_list *app)
|
|||
tsip_dialog_register_t *self = va_arg(*app, tsip_dialog_register_t *);
|
||||
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
|
||||
|
||||
/* set last error (or info) */
|
||||
tsip_dialog_set_lasterror(TSIP_DIALOG(self), TSIP_RESPONSE_PHRASE(response), TSIP_RESPONSE_CODE(response));
|
||||
|
||||
/* save last error */
|
||||
tsip_dialog_set_lasterror_2(TSIP_DIALOG(self), TSIP_RESPONSE_PHRASE(response), TSIP_RESPONSE_CODE(response), response);
|
||||
|
||||
/* Alert the user. */
|
||||
TSIP_DIALOG_REGISTER_SIGNAL(self, self->unregistering ? tsip_ao_unregister : tsip_ao_register,
|
||||
TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response);
|
||||
|
|
|
@ -615,6 +615,9 @@ int tsip_dialog_subscribe_Any_2_Terminated_X_Error(va_list *app)
|
|||
tsip_dialog_subscribe_t *self = va_arg(*app, tsip_dialog_subscribe_t *);
|
||||
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
|
||||
|
||||
// save last error
|
||||
tsip_dialog_set_lasterror_2(TSIP_DIALOG(self), TSIP_RESPONSE_PHRASE(response), TSIP_RESPONSE_CODE(response), response);
|
||||
|
||||
/* Alert user */
|
||||
if(response){
|
||||
TSIP_DIALOG_SUBSCRIBE_SIGNAL(self, self->unsubscribing ? tsip_ao_unsubscribe : tsip_ao_subscribe,
|
||||
|
|
|
@ -227,7 +227,7 @@ int tsip_transac_nict_init(tsip_transac_nict_t *self)
|
|||
*/
|
||||
// Trying -> (timerE) -> Trying
|
||||
TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_timerE, _fsm_state_Trying, tsip_transac_nict_Trying_2_Trying_X_timerE, "tsip_transac_nict_Trying_2_Trying_X_timerE"),
|
||||
// Trying -> (timerF) -> Trying
|
||||
// Trying -> (timerF) -> Terminated
|
||||
TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_timerF, _fsm_state_Terminated, tsip_transac_nict_Trying_2_Terminated_X_timerF, "tsip_transac_nict_Trying_2_Terminated_X_timerF"),
|
||||
// Trying -> (transport error) -> Terminated
|
||||
TSK_FSM_ADD_ALWAYS(_fsm_state_Trying, _fsm_action_transporterror, _fsm_state_Terminated, tsip_transac_nict_Trying_2_Terminated_X_transportError, "tsip_transac_nict_Trying_2_Terminated_X_transportError"),
|
||||
|
@ -261,7 +261,7 @@ int tsip_transac_nict_init(tsip_transac_nict_t *self)
|
|||
*/
|
||||
// Any -> (transport error) -> Terminated
|
||||
TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_transporterror, _fsm_state_Terminated, tsip_transac_nict_Any_2_Terminated_X_transportError, "tsip_transac_nict_Any_2_Terminated_X_transportError"),
|
||||
// Any -> (transport error) -> Terminated
|
||||
// Any -> (error) -> Terminated
|
||||
TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_error, _fsm_state_Terminated, tsip_transac_nict_Any_2_Terminated_X_Error, "tsip_transac_nict_Any_2_Terminated_X_Error"),
|
||||
// Any -> (cancel) -> Terminated
|
||||
TSK_FSM_ADD_ALWAYS(tsk_fsm_state_any, _fsm_action_cancel, _fsm_state_Terminated, tsip_transac_nict_Any_2_Terminated_X_cancel, "tsip_transac_nict_Any_2_Terminated_X_cancel"),
|
||||
|
|
|
@ -279,7 +279,7 @@ static int tsip_transport_layer_dgram_cb(const tnet_transport_event_t* e)
|
|||
|
||||
const tsip_transport_t* tsip_transport_layer_find(const tsip_transport_layer_t* self, const tsip_message_t *msg, const char** destIP, int32_t *destPort)
|
||||
{
|
||||
tsip_transport_t* transport = 0;
|
||||
tsip_transport_t* transport = tsk_null;
|
||||
|
||||
if(!self || !destIP){
|
||||
TSK_DEBUG_ERROR("Invalid parameter");
|
||||
|
|
|
@ -904,7 +904,7 @@ tsip_uri_t* tsip_stack_get_contacturi(const tsip_stack_t *stack, const char* pro
|
|||
if(transport){
|
||||
if(tsk_striequals(transport->protocol, protocol)){
|
||||
tsip_uri_t* uri = tsk_null;
|
||||
if((uri = tsip_transport_get_uri(transport, 0))){
|
||||
if((uri = tsip_transport_get_uri(transport, tsk_false))){
|
||||
tsk_strupdate(&uri->user_name, stack->identity.impu->user_name);
|
||||
return uri;
|
||||
}
|
||||
|
@ -923,8 +923,8 @@ tsip_uri_t* tsip_stack_get_pcscf_uri(const tsip_stack_t *stack, tsk_bool_t lr)
|
|||
tsip_transport_t *transport = stack->layer_transport->transports->head->data;
|
||||
if(transport){
|
||||
tsip_uri_t* uri = tsk_null;
|
||||
int ipv6 = TNET_SOCKET_TYPE_IS_IPV6(transport->type);
|
||||
int quote_ip = (ipv6 && tsk_strcontains(stack->network.proxy_cscf, tsk_strlen(stack->network.proxy_cscf), ":")) /* IPv6 IP string?*/;
|
||||
tsk_bool_t ipv6 = TNET_SOCKET_TYPE_IS_IPV6(transport->type);
|
||||
tsk_bool_t quote_ip = (ipv6 && tsk_strcontains(stack->network.proxy_cscf, tsk_strlen(stack->network.proxy_cscf), ":")) /* IPv6 IP string?*/;
|
||||
|
||||
char* uristring = tsk_null;
|
||||
tsk_sprintf(&uristring, "%s:%s%s%s:%d;%s;transport=%s",
|
||||
|
|
Loading…
Reference in New Issue