Save last SIP error message when registration fail

This commit is contained in:
bossiel 2011-07-18 17:49:21 +00:00
parent 996ee2d27a
commit 2f8a5d8e46
9 changed files with 72 additions and 66 deletions

View File

@ -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 */

View File

@ -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); \

View File

@ -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 ||

View File

@ -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));

View File

@ -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);

View File

@ -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,

View File

@ -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"),

View File

@ -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");

View File

@ -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",