summaryrefslogtreecommitdiffstats
path: root/tinySIP/src/dialogs/tsip_dialog_invite.ect.c
diff options
context:
space:
mode:
Diffstat (limited to 'tinySIP/src/dialogs/tsip_dialog_invite.ect.c')
-rwxr-xr-xtinySIP/src/dialogs/tsip_dialog_invite.ect.c594
1 files changed, 297 insertions, 297 deletions
diff --git a/tinySIP/src/dialogs/tsip_dialog_invite.ect.c b/tinySIP/src/dialogs/tsip_dialog_invite.ect.c
index 8c21dd2..ec61f81 100755
--- a/tinySIP/src/dialogs/tsip_dialog_invite.ect.c
+++ b/tinySIP/src/dialogs/tsip_dialog_invite.ect.c
@@ -2,19 +2,19 @@
* Copyright (C) 2010-2011 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou(at)doubango[dot]org>
-*
+*
* This file is part of Open Source Doubango Framework.
*
* DOUBANGO is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as publishd by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
-*
+*
* DOUBANGO is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
-*
+*
* You should have received a copy of the GNU General Public License
* along with DOUBANGO.
*
@@ -73,71 +73,71 @@ static int x0400_iECTing_2_Connected_X_23456fNOTIFY(va_list *app);
/* ======================== conds ======================== */
static tsk_bool_t _fsm_cond_is_resp2REFER(tsip_dialog_invite_t* self, tsip_message_t* message)
{
- return TSIP_RESPONSE_IS_TO_REFER(message);
+ return TSIP_RESPONSE_IS_TO_REFER(message);
}
static tsk_bool_t _fsm_cond_is_1xxNOTIFY(tsip_dialog_invite_t* self, tsip_request_t* notify)
{
- short code = get_SipFragResponseCode(notify);
- return (code >= 100 && code <= 199);
+ short code = get_SipFragResponseCode(notify);
+ return (code >= 100 && code <= 199);
}
static tsk_bool_t _fsm_cond_is_23456NOTIFY(tsip_dialog_invite_t* self, tsip_request_t* notify)
{
- short code = get_SipFragResponseCode(notify);
- return (code >= 200 && code <= 699);
+ short code = get_SipFragResponseCode(notify);
+ return (code >= 200 && code <= 699);
}
static tsk_bool_t _fsm_cond_is_fREFER(tsip_dialog_invite_t* self, tsip_request_t* refer)
{
- const tsip_header_Refer_To_t* Refer_To = (const tsip_header_Refer_To_t*)tsip_message_get_header(refer, tsip_htype_Refer_To);
- return (!Refer_To || !Refer_To->uri);
+ const tsip_header_Refer_To_t* Refer_To = (const tsip_header_Refer_To_t*)tsip_message_get_header(refer, tsip_htype_Refer_To);
+ return (!Refer_To || !Refer_To->uri);
}
static tsk_bool_t _fsm_cond_is_1xxfNOTIFY(tsip_dialog_invite_t* self, tsip_response_t* response)
{
- short code = TSIP_RESPONSE_CODE(response);
- return (code >= 100 && code <= 199);
+ short code = TSIP_RESPONSE_CODE(response);
+ return (code >= 100 && code <= 199);
}
static tsk_bool_t _fsm_cond_is_23456fNOTIFY(tsip_dialog_invite_t* self, tsip_response_t* response)
{
- short code = TSIP_RESPONSE_CODE(response);
- return (code >= 200 && code <= 699);
+ short code = TSIP_RESPONSE_CODE(response);
+ return (code >= 200 && code <= 699);
}
int tsip_dialog_invite_ect_init(tsip_dialog_invite_t *self)
{
- tsk_fsm_set(TSIP_DIALOG_GET_FSM(self),
-
- /*=======================
- * === Outgoing Transfer ===
- */
- // Connected -> (oREFER) -> oECTing
- TSK_FSM_ADD_ALWAYS(_fsm_state_Connected, _fsm_action_oECT, _fsm_state_oECTing, x0400_Connected_2_oECTing_X_oECT, "x0400_Connected_2_oECTing_X_oECT"),
- // oECTing -> (i2xx REFER) -> oECTing
- TSK_FSM_ADD(_fsm_state_oECTing, _fsm_action_i2xx, _fsm_cond_is_resp2REFER, _fsm_state_oECTing, x0400_oECTing_2_oECTing_X_i2xx, "x0400_oECTing_2_oECTing_X_i2xx"),
- // oECTing -> (i300-699 REFER) -> Connected
- TSK_FSM_ADD(_fsm_state_oECTing, _fsm_action_i300_to_i699, _fsm_cond_is_resp2REFER, _fsm_state_Connected, x0400_oECTing_2_Connected_X_i3456, "x0400_ECTing_2_Connected_X_i36"),
- // oECTing -> (iNotify 1xx sipfrag) -> oECTing
- TSK_FSM_ADD(_fsm_state_oECTing, _fsm_action_iNOTIFY, _fsm_cond_is_1xxNOTIFY, _fsm_state_oECTing, x0400_oECTing_2_oECTing_X_iNOTIFY, "x0400_oECTing_2_oECTing_X_iNOTIFY"),
- // oECTing -> (iNotify 23456 sipfrag) -> Connected
- TSK_FSM_ADD(_fsm_state_oECTing, _fsm_action_iNOTIFY, _fsm_cond_is_23456NOTIFY, _fsm_state_Connected, x0400_oECTing_2_Connected_X_iNOTIFY, "x0400_oECTing_2_Connected_X_iNOTIFY"),
-
- /*=======================
- * === Incoming Transfer ===
- */
- // Connected -> (iREFER invalid) -> Connected
- TSK_FSM_ADD(_fsm_state_Connected, _fsm_action_iREFER, _fsm_cond_is_fREFER, _fsm_state_Connected, x0400_Connected_2_Connected_X_fREFER, "x0400_Connected_2_Connected_X_fREFER"),
- // Connected -> (iREFER) -> iECTreq
- TSK_FSM_ADD_ALWAYS(_fsm_state_Connected, _fsm_action_iREFER, _fsm_state_iECTreq, x0400_Connected_2_iECTreq_X_iREFER, "x0400_Connected_2_iECTreq_X_iREFER"),
- // iECTreq -> (reject) -> Connected
- TSK_FSM_ADD_ALWAYS(_fsm_state_iECTreq, _fsm_action_iECT_REJECT, _fsm_state_Connected, x0400_iECTreq_2_Connected_X_reject, "x0400_iECTreq_2_Connected_X_reject"),
- // iECTreq -> (accept) -> iECTing
- TSK_FSM_ADD_ALWAYS(_fsm_state_iECTreq, _fsm_action_iECT_ACCEPT, _fsm_state_iECTing, x0400_iECTreq_2_iECTing_X_accept, "x0400_iECTreq_2_iECTing_X_accept"),
- // iECTing -> (1xx lnotify) -> iECTing
- TSK_FSM_ADD(_fsm_state_iECTing, _fsm_action_iECT_lNOTIFY, _fsm_cond_is_1xxfNOTIFY, _fsm_state_iECTing, x0400_iECTing_2_iECTing_X_1xxfNOTIFY, "x0400_iECTing_2_iECTing_X_1xxfNOTIFY"),
- // iECTing -> (23456 lnotify) -> Connected
- TSK_FSM_ADD(_fsm_state_iECTing, _fsm_action_iECT_lNOTIFY, _fsm_cond_is_23456fNOTIFY, _fsm_state_Connected, x0400_iECTing_2_Connected_X_23456fNOTIFY, "x0400_iECTing_2_Connected_X_23456fNOTIFY"),
-
- TSK_FSM_ADD_NULL());
-
- return 0;
+ tsk_fsm_set(TSIP_DIALOG_GET_FSM(self),
+
+ /*=======================
+ * === Outgoing Transfer ===
+ */
+ // Connected -> (oREFER) -> oECTing
+ TSK_FSM_ADD_ALWAYS(_fsm_state_Connected, _fsm_action_oECT, _fsm_state_oECTing, x0400_Connected_2_oECTing_X_oECT, "x0400_Connected_2_oECTing_X_oECT"),
+ // oECTing -> (i2xx REFER) -> oECTing
+ TSK_FSM_ADD(_fsm_state_oECTing, _fsm_action_i2xx, _fsm_cond_is_resp2REFER, _fsm_state_oECTing, x0400_oECTing_2_oECTing_X_i2xx, "x0400_oECTing_2_oECTing_X_i2xx"),
+ // oECTing -> (i300-699 REFER) -> Connected
+ TSK_FSM_ADD(_fsm_state_oECTing, _fsm_action_i300_to_i699, _fsm_cond_is_resp2REFER, _fsm_state_Connected, x0400_oECTing_2_Connected_X_i3456, "x0400_ECTing_2_Connected_X_i36"),
+ // oECTing -> (iNotify 1xx sipfrag) -> oECTing
+ TSK_FSM_ADD(_fsm_state_oECTing, _fsm_action_iNOTIFY, _fsm_cond_is_1xxNOTIFY, _fsm_state_oECTing, x0400_oECTing_2_oECTing_X_iNOTIFY, "x0400_oECTing_2_oECTing_X_iNOTIFY"),
+ // oECTing -> (iNotify 23456 sipfrag) -> Connected
+ TSK_FSM_ADD(_fsm_state_oECTing, _fsm_action_iNOTIFY, _fsm_cond_is_23456NOTIFY, _fsm_state_Connected, x0400_oECTing_2_Connected_X_iNOTIFY, "x0400_oECTing_2_Connected_X_iNOTIFY"),
+
+ /*=======================
+ * === Incoming Transfer ===
+ */
+ // Connected -> (iREFER invalid) -> Connected
+ TSK_FSM_ADD(_fsm_state_Connected, _fsm_action_iREFER, _fsm_cond_is_fREFER, _fsm_state_Connected, x0400_Connected_2_Connected_X_fREFER, "x0400_Connected_2_Connected_X_fREFER"),
+ // Connected -> (iREFER) -> iECTreq
+ TSK_FSM_ADD_ALWAYS(_fsm_state_Connected, _fsm_action_iREFER, _fsm_state_iECTreq, x0400_Connected_2_iECTreq_X_iREFER, "x0400_Connected_2_iECTreq_X_iREFER"),
+ // iECTreq -> (reject) -> Connected
+ TSK_FSM_ADD_ALWAYS(_fsm_state_iECTreq, _fsm_action_iECT_REJECT, _fsm_state_Connected, x0400_iECTreq_2_Connected_X_reject, "x0400_iECTreq_2_Connected_X_reject"),
+ // iECTreq -> (accept) -> iECTing
+ TSK_FSM_ADD_ALWAYS(_fsm_state_iECTreq, _fsm_action_iECT_ACCEPT, _fsm_state_iECTing, x0400_iECTreq_2_iECTing_X_accept, "x0400_iECTreq_2_iECTing_X_accept"),
+ // iECTing -> (1xx lnotify) -> iECTing
+ TSK_FSM_ADD(_fsm_state_iECTing, _fsm_action_iECT_lNOTIFY, _fsm_cond_is_1xxfNOTIFY, _fsm_state_iECTing, x0400_iECTing_2_iECTing_X_1xxfNOTIFY, "x0400_iECTing_2_iECTing_X_1xxfNOTIFY"),
+ // iECTing -> (23456 lnotify) -> Connected
+ TSK_FSM_ADD(_fsm_state_iECTing, _fsm_action_iECT_lNOTIFY, _fsm_cond_is_23456fNOTIFY, _fsm_state_Connected, x0400_iECTing_2_Connected_X_23456fNOTIFY, "x0400_iECTing_2_Connected_X_23456fNOTIFY"),
+
+ TSK_FSM_ADD_NULL());
+
+ return 0;
}
@@ -148,235 +148,235 @@ int tsip_dialog_invite_ect_init(tsip_dialog_invite_t *self)
// Connected -> (oREFER) -> oECTing
static int x0400_Connected_2_oECTing_X_oECT(va_list *app)
{
- int ret;
- tsip_dialog_invite_t *self;
- const tsip_action_t* action;
+ int ret;
+ tsip_dialog_invite_t *self;
+ const tsip_action_t* action;
- self = va_arg(*app, tsip_dialog_invite_t *);
- va_arg(*app, const tsip_message_t *);
- action = va_arg(*app, const tsip_action_t *);
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ va_arg(*app, const tsip_message_t *);
+ action = va_arg(*app, const tsip_action_t *);
- ret = send_REFER(self, action->ect.to);
+ ret = send_REFER(self, action->ect.to);
- if(ret == 0){
- TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_trying,
- tsip_event_code_dialog_request_sent, "Call Transfer Initiated", tsk_null);
- }
- else; //Must never happen
+ if(ret == 0) {
+ TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_trying,
+ tsip_event_code_dialog_request_sent, "Call Transfer Initiated", tsk_null);
+ }
+ else; //Must never happen
- return ret;
+ return ret;
}
// ECTing -> (i2xx REFER) -> oECTing
static int x0400_oECTing_2_oECTing_X_i2xx(va_list *app)
{
- tsip_dialog_invite_t *self;
- const tsip_response_t* response;
- const tsip_header_Refer_Sub_t* Refer_Sub;
-
- self = va_arg(*app, tsip_dialog_invite_t *);
- response = va_arg(*app, const tsip_message_t *);
- Refer_Sub = (const tsip_header_Refer_Sub_t*)tsip_message_get_header(response, tsip_htype_Refer_Sub);
- if(Refer_Sub){
- self->refersub = Refer_Sub->sub;
- }
- if(tsip_message_required(response, "norefersub")){
- self->required.norefersub = tsk_true;
- }
-
- return TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_accepted,
- TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response);
+ tsip_dialog_invite_t *self;
+ const tsip_response_t* response;
+ const tsip_header_Refer_Sub_t* Refer_Sub;
+
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ response = va_arg(*app, const tsip_message_t *);
+ Refer_Sub = (const tsip_header_Refer_Sub_t*)tsip_message_get_header(response, tsip_htype_Refer_Sub);
+ if(Refer_Sub) {
+ self->refersub = Refer_Sub->sub;
+ }
+ if(tsip_message_required(response, "norefersub")) {
+ self->required.norefersub = tsk_true;
+ }
+
+ return TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_accepted,
+ TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response);
}
// oECTing -> (i300-699 REFER) -> Connected
static int x0400_oECTing_2_Connected_X_i3456(va_list *app)
{
- tsip_dialog_invite_t *self;
- const tsip_response_t* response;
+ tsip_dialog_invite_t *self;
+ const tsip_response_t* response;
- self = va_arg(*app, tsip_dialog_invite_t *);
- response = va_arg(*app, const tsip_message_t *);
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ response = va_arg(*app, const tsip_message_t *);
- return TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_failed,
- TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response);
+ return TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_failed,
+ TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), response);
}
// oECTing -> (iNotify 1xx sipfrag) -> oECTing
static int x0400_oECTing_2_oECTing_X_iNOTIFY(va_list *app)
{
- int ret = 0;
- tsip_dialog_invite_t *self;
- const tsip_request_t* notify;
- tsip_response_t *sipfrag = tsk_null;
+ int ret = 0;
+ tsip_dialog_invite_t *self;
+ const tsip_request_t* notify;
+ tsip_response_t *sipfrag = tsk_null;
- self = va_arg(*app, tsip_dialog_invite_t *);
- notify = va_arg(*app, const tsip_message_t *);
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ notify = va_arg(*app, const tsip_message_t *);
- sipfrag = get_SipFragMessage(notify);
- if(sipfrag){
- send_RESPONSE(self, notify, 200, "Ok", tsk_false);
- TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_notify,
- TSIP_RESPONSE_CODE(sipfrag), TSIP_RESPONSE_PHRASE(sipfrag), notify);
- }
+ sipfrag = get_SipFragMessage(notify);
+ if(sipfrag) {
+ send_RESPONSE(self, notify, 200, "Ok", tsk_false);
+ TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_notify,
+ TSIP_RESPONSE_CODE(sipfrag), TSIP_RESPONSE_PHRASE(sipfrag), notify);
+ }
- TSK_OBJECT_SAFE_FREE(sipfrag);
+ TSK_OBJECT_SAFE_FREE(sipfrag);
- return ret;
+ return ret;
}
// oECTing -> (iNotify 23456 sipfrag) -> Connected
static int x0400_oECTing_2_Connected_X_iNOTIFY(va_list *app)
{
- int ret = 0;
- tsip_dialog_invite_t *self;
- const tsip_request_t* notify;
- tsip_response_t *sipfrag = tsk_null;
+ int ret = 0;
+ tsip_dialog_invite_t *self;
+ const tsip_request_t* notify;
+ tsip_response_t *sipfrag = tsk_null;
- self = va_arg(*app, tsip_dialog_invite_t *);
- notify = va_arg(*app, const tsip_message_t *);
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ notify = va_arg(*app, const tsip_message_t *);
- sipfrag = get_SipFragMessage(notify);
- if(sipfrag){
- send_RESPONSE(self, notify, 200, "Ok", tsk_false);
- TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_notify,
- TSIP_RESPONSE_CODE(sipfrag), TSIP_RESPONSE_PHRASE(sipfrag), notify);
- }
+ sipfrag = get_SipFragMessage(notify);
+ if(sipfrag) {
+ send_RESPONSE(self, notify, 200, "Ok", tsk_false);
+ TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_notify,
+ TSIP_RESPONSE_CODE(sipfrag), TSIP_RESPONSE_PHRASE(sipfrag), notify);
+ }
- TSK_OBJECT_SAFE_FREE(sipfrag);
+ TSK_OBJECT_SAFE_FREE(sipfrag);
- return ret;
+ return ret;
}
// Connected -> (iREFER) -> iECTreq
static int x0400_Connected_2_iECTreq_X_iREFER(va_list *app)
{
- int ret;
- tsip_dialog_invite_t *self;
- const tsip_request_t* refer;
-
- self = va_arg(*app, tsip_dialog_invite_t *);
- refer = va_arg(*app, const tsip_message_t *);
-
- TSK_OBJECT_SAFE_FREE(self->last_iRefer);
- self->last_iRefer = tsk_object_ref((tsk_object_t*)refer);
-
- ret = send_RESPONSE(self, self->last_iRefer, 100, "Asking for Transfer", tsk_false);
- TSIP_DIALOG_INVITE_SIGNAL(self, tsip_i_ect_requested,
- tsip_event_code_dialog_request_incoming, "Incoming Request", self->last_iRefer);
-
- return ret;
+ int ret;
+ tsip_dialog_invite_t *self;
+ const tsip_request_t* refer;
+
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ refer = va_arg(*app, const tsip_message_t *);
+
+ TSK_OBJECT_SAFE_FREE(self->last_iRefer);
+ self->last_iRefer = tsk_object_ref((tsk_object_t*)refer);
+
+ ret = send_RESPONSE(self, self->last_iRefer, 100, "Asking for Transfer", tsk_false);
+ TSIP_DIALOG_INVITE_SIGNAL(self, tsip_i_ect_requested,
+ tsip_event_code_dialog_request_incoming, "Incoming Request", self->last_iRefer);
+
+ return ret;
}
// iECTreq -> (reject) -> Connected
static int x0400_iECTreq_2_Connected_X_reject(va_list *app)
{
- int ret;
- tsip_dialog_invite_t *self;
- const tsip_action_t* action;
- short code;
- const char* phrase;
- char* reason = tsk_null;
-
- self = va_arg(*app, tsip_dialog_invite_t *);
- va_arg(*app, const tsip_message_t *);
- action = va_arg(*app, const tsip_action_t *);
-
- // Send Reject
- code = action->line_resp.code>=300 ? action->line_resp.code : 603;
- phrase = action->line_resp.phrase ? action->line_resp.phrase : "Decline Transfer";
- tsk_sprintf(&reason, "SIP; cause=%hi; text=\"%s\"", code, phrase);
- ret = send_ERROR(self, self->last_iRefer, code, phrase, reason);
- TSK_FREE(reason);
-
- return ret;
+ int ret;
+ tsip_dialog_invite_t *self;
+ const tsip_action_t* action;
+ short code;
+ const char* phrase;
+ char* reason = tsk_null;
+
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ va_arg(*app, const tsip_message_t *);
+ action = va_arg(*app, const tsip_action_t *);
+
+ // Send Reject
+ code = action->line_resp.code>=300 ? action->line_resp.code : 603;
+ phrase = action->line_resp.phrase ? action->line_resp.phrase : "Decline Transfer";
+ tsk_sprintf(&reason, "SIP; cause=%hi; text=\"%s\"", code, phrase);
+ ret = send_ERROR(self, self->last_iRefer, code, phrase, reason);
+ TSK_FREE(reason);
+
+ return ret;
}
// iECTreq -> (accept) -> iECTing
static int x0400_iECTreq_2_iECTing_X_accept(va_list *app)
{
- int ret;
- tsip_dialog_invite_t *self;
- const tsip_header_Refer_To_t* Refer_To;
- const tsip_action_t* action;
-
- self = va_arg(*app, tsip_dialog_invite_t *);
- va_arg(*app, const tsip_message_t *);
- action = va_arg(*app, const tsip_action_t *);
-
- // Send 200 OK
- ret = send_RESPONSE(self, self->last_iRefer, 200, "Transfering", tsk_false);
- Refer_To = (const tsip_header_Refer_To_t*)tsip_message_get_header(self->last_iRefer, tsip_htype_Refer_To); // Not null: already checked
- // Make call to the referToUri
- TSK_OBJECT_SAFE_FREE(self->ss_transf);
- self->ss_transf = tsip_ssession_create(TSIP_DIALOG_GET_STACK(self),
- TSIP_SSESSION_SET_PARENT_ID(TSIP_DIALOG_GET_SS(self)->id),
- TSIP_SSESSION_SET_NULL());
+ int ret;
+ tsip_dialog_invite_t *self;
+ const tsip_header_Refer_To_t* Refer_To;
+ const tsip_action_t* action;
+
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ va_arg(*app, const tsip_message_t *);
+ action = va_arg(*app, const tsip_action_t *);
+
+ // Send 200 OK
+ ret = send_RESPONSE(self, self->last_iRefer, 200, "Transfering", tsk_false);
+ Refer_To = (const tsip_header_Refer_To_t*)tsip_message_get_header(self->last_iRefer, tsip_htype_Refer_To); // Not null: already checked
+ // Make call to the referToUri
+ TSK_OBJECT_SAFE_FREE(self->ss_transf);
+ self->ss_transf = tsip_ssession_create(TSIP_DIALOG_GET_STACK(self),
+ TSIP_SSESSION_SET_PARENT_ID(TSIP_DIALOG_GET_SS(self)->id),
+ TSIP_SSESSION_SET_NULL());
#if TSIP_UNDER_WINDOWS // because of DirectShow Attach()
- self->ss_transf->media.type = tmedia_audio;
+ self->ss_transf->media.type = tmedia_audio;
#else
- self->ss_transf->media.type = self->msession_mgr ? self->msession_mgr->type : tmedia_defaults_get_media_type();
+ self->ss_transf->media.type = self->msession_mgr ? self->msession_mgr->type : tmedia_defaults_get_media_type();
#endif
- self->ss_transf->owner = tsk_false;// not owned by the end-user -> will be destroyed as soon as the dialog dtor is called
-
- if(ret == 0){
- ret = tsip_invite_event_signal(tsip_i_ect_newcall, self->ss_transf,
- tsip_event_code_dialog_request_outgoing, "ECTing", self->last_iRefer);
- }
-
- ret = tsip_ssession_set(self->ss_transf,
- TSIP_SSESSION_SET_TO_OBJ(Refer_To->uri),
- TSIP_SSESSION_SET_NULL());
- ret = tsip_api_invite_send_invite(self->ss_transf, self->ss_transf->media.type,
- TSIP_ACTION_SET_NULL());
-
- return ret;
+ self->ss_transf->owner = tsk_false;// not owned by the end-user -> will be destroyed as soon as the dialog dtor is called
+
+ if(ret == 0) {
+ ret = tsip_invite_event_signal(tsip_i_ect_newcall, self->ss_transf,
+ tsip_event_code_dialog_request_outgoing, "ECTing", self->last_iRefer);
+ }
+
+ ret = tsip_ssession_set(self->ss_transf,
+ TSIP_SSESSION_SET_TO_OBJ(Refer_To->uri),
+ TSIP_SSESSION_SET_NULL());
+ ret = tsip_api_invite_send_invite(self->ss_transf, self->ss_transf->media.type,
+ TSIP_ACTION_SET_NULL());
+
+ return ret;
}
// iECTing -> (1xx lnotify) -> iECTing
static int x0400_iECTing_2_iECTing_X_1xxfNOTIFY(va_list *app)
{
- int ret;
- tsip_dialog_invite_t *self;
- const tsip_response_t* response;
+ int ret;
+ tsip_dialog_invite_t *self;
+ const tsip_response_t* response;
+
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ response = va_arg(*app, const tsip_message_t *);
- self = va_arg(*app, tsip_dialog_invite_t *);
- response = va_arg(*app, const tsip_message_t *);
-
- // send NOTIFY (event if norefersub enabled) and alert user
- ret = send_NOTIFY(self, TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response));
+ // send NOTIFY (event if norefersub enabled) and alert user
+ ret = send_NOTIFY(self, TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response));
- return ret;
+ return ret;
}
// iECTing -> (23456 lnotify) -> Connected
static int x0400_iECTing_2_Connected_X_23456fNOTIFY(va_list *app)
{
- int ret;
- tsip_dialog_invite_t *self;
- const tsip_response_t* response;
- short code;
-
- self = va_arg(*app, tsip_dialog_invite_t *);
- response = va_arg(*app, const tsip_message_t *);
- code = TSIP_RESPONSE_CODE(response);
-
- // send NOTIFY (event if norefersub enabled) and alert user
- ret = send_NOTIFY(self, code, TSIP_RESPONSE_PHRASE(response));
-
- if(code >= 200 && code <= 299){
- TSIP_DIALOG_INVITE_SIGNAL(self, tsip_i_ect_completed,
- TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), self->last_iRefer);
- // hang up the call
- ret = send_BYE(self);
- }
- else{
- TSIP_DIALOG_INVITE_SIGNAL(self, tsip_i_ect_failed,
- TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), self->last_iRefer);
- }
-
- return ret;
+ int ret;
+ tsip_dialog_invite_t *self;
+ const tsip_response_t* response;
+ short code;
+
+ self = va_arg(*app, tsip_dialog_invite_t *);
+ response = va_arg(*app, const tsip_message_t *);
+ code = TSIP_RESPONSE_CODE(response);
+
+ // send NOTIFY (event if norefersub enabled) and alert user
+ ret = send_NOTIFY(self, code, TSIP_RESPONSE_PHRASE(response));
+
+ if(code >= 200 && code <= 299) {
+ TSIP_DIALOG_INVITE_SIGNAL(self, tsip_i_ect_completed,
+ TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), self->last_iRefer);
+ // hang up the call
+ ret = send_BYE(self);
+ }
+ else {
+ TSIP_DIALOG_INVITE_SIGNAL(self, tsip_i_ect_failed,
+ TSIP_RESPONSE_CODE(response), TSIP_RESPONSE_PHRASE(response), self->last_iRefer);
+ }
+
+ return ret;
}
@@ -387,101 +387,101 @@ static int x0400_iECTing_2_Connected_X_23456fNOTIFY(va_list *app)
static int send_NOTIFY(tsip_dialog_invite_t *self, short code, const char* phrase)
{
- tsip_request_t *notify = tsk_null;
- int ret = -1;
-
- if((notify = tsip_dialog_request_new(TSIP_DIALOG(self), "NOTIFY"))){
- char* sipfrag = tsk_null;
- tsk_sprintf(&sipfrag, "%s %hi %s\r\n", TSIP_MESSAGE_VERSION_DEFAULT, code, phrase);
- ret = tsip_message_add_content(notify, "message/sipfrag", sipfrag, tsk_strlen(sipfrag));
- ret = tsip_dialog_request_send(TSIP_DIALOG(self), notify);
- if(ret == 0){
- TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_notify, code, phrase, notify);
- }
- TSK_FREE(sipfrag);
- TSK_OBJECT_SAFE_FREE(notify);
- }
- else{
- TSK_DEBUG_ERROR("Failed to create request");
- }
- return ret;
+ tsip_request_t *notify = tsk_null;
+ int ret = -1;
+
+ if((notify = tsip_dialog_request_new(TSIP_DIALOG(self), "NOTIFY"))) {
+ char* sipfrag = tsk_null;
+ tsk_sprintf(&sipfrag, "%s %hi %s\r\n", TSIP_MESSAGE_VERSION_DEFAULT, code, phrase);
+ ret = tsip_message_add_content(notify, "message/sipfrag", sipfrag, tsk_strlen(sipfrag));
+ ret = tsip_dialog_request_send(TSIP_DIALOG(self), notify);
+ if(ret == 0) {
+ TSIP_DIALOG_INVITE_SIGNAL(self, tsip_o_ect_notify, code, phrase, notify);
+ }
+ TSK_FREE(sipfrag);
+ TSK_OBJECT_SAFE_FREE(notify);
+ }
+ else {
+ TSK_DEBUG_ERROR("Failed to create request");
+ }
+ return ret;
}
static int send_REFER(tsip_dialog_invite_t *self, const char* to)
{
- int ret = 0;
- tsip_request_t *refer = tsk_null;
- tsip_uri_t* toUri = tsk_null;
-
- if(!self || !to){
- TSK_DEBUG_ERROR("Invalid parameter");
- return -1;
- }
-
- if(!(toUri = tsip_uri_parse(to, tsk_strlen(to)))){
- TSK_DEBUG_ERROR("Failed to parse %s", to);
- return -1;
- }
- else{
- // tsk_params_add_param(&toUri->params, "method", "INVITE");
- }
-
- if((refer = tsip_dialog_request_new(TSIP_DIALOG(self), "REFER"))){
- tsk_istr_t cid;
- tsk_strrandom(&cid);
- /* Add headers */
- tsip_message_add_headers(refer,
- TSIP_HEADER_REFER_TO_VA_ARGS(toUri),
- TSIP_HEADER_REFERRED_BY_VA_ARGS(TSIP_DIALOG_GET_STACK(self)->identity.impu, cid),
- TSIP_HEADER_REFER_SUB_VA_ARGS(self->refersub),
- tsk_null);
- if(self->supported.norefersub){
- tsip_message_add_headers(refer,
- TSIP_HEADER_SUPPORTED_VA_ARGS("norefersub"),
- tsk_null);
- }
-
- ret = tsip_dialog_request_send(TSIP_DIALOG(self), refer);
- TSK_OBJECT_SAFE_FREE(refer);
- }
-
- TSK_OBJECT_SAFE_FREE(toUri);
- return ret;
+ int ret = 0;
+ tsip_request_t *refer = tsk_null;
+ tsip_uri_t* toUri = tsk_null;
+
+ if(!self || !to) {
+ TSK_DEBUG_ERROR("Invalid parameter");
+ return -1;
+ }
+
+ if(!(toUri = tsip_uri_parse(to, tsk_strlen(to)))) {
+ TSK_DEBUG_ERROR("Failed to parse %s", to);
+ return -1;
+ }
+ else {
+ // tsk_params_add_param(&toUri->params, "method", "INVITE");
+ }
+
+ if((refer = tsip_dialog_request_new(TSIP_DIALOG(self), "REFER"))) {
+ tsk_istr_t cid;
+ tsk_strrandom(&cid);
+ /* Add headers */
+ tsip_message_add_headers(refer,
+ TSIP_HEADER_REFER_TO_VA_ARGS(toUri),
+ TSIP_HEADER_REFERRED_BY_VA_ARGS(TSIP_DIALOG_GET_STACK(self)->identity.impu, cid),
+ TSIP_HEADER_REFER_SUB_VA_ARGS(self->refersub),
+ tsk_null);
+ if(self->supported.norefersub) {
+ tsip_message_add_headers(refer,
+ TSIP_HEADER_SUPPORTED_VA_ARGS("norefersub"),
+ tsk_null);
+ }
+
+ ret = tsip_dialog_request_send(TSIP_DIALOG(self), refer);
+ TSK_OBJECT_SAFE_FREE(refer);
+ }
+
+ TSK_OBJECT_SAFE_FREE(toUri);
+ return ret;
}
static tsip_response_t * get_SipFragMessage(const tsip_request_t* notify)
{
- tsip_response_t *sipfrag = tsk_null;
- if(TSIP_MESSAGE_HAS_CONTENT(notify) && tsk_striequals(notify->Content_Type->type, "message/sipfrag")){
- tsk_ragel_state_t state;
- tsk_bool_t ret;
- char* content = tsk_null;
-
- // sipfrag is a "tsip_message_t" with an extra \r\n
- content = tsk_strndup(notify->Content->data, notify->Content->size);
- if(tsk_strLastIndexOf(content, tsk_strlen(content), "\r\n") != tsk_strlen(content) - 2){//Hack for XXX buggy client
- tsk_strcat(&content, "\r\n");
- }
- tsk_strcat(&content, "\r\n");
-
- tsk_ragel_state_init(&state, content, tsk_strlen(content));
- ret = tsip_message_parse(&state, &sipfrag, tsk_false);
- TSK_FREE(content);
- if(ret && TSIP_MESSAGE_IS_RESPONSE(sipfrag)){
- return sipfrag;
- }
- TSK_OBJECT_SAFE_FREE(sipfrag);
- }
- return sipfrag;
+ tsip_response_t *sipfrag = tsk_null;
+ if(TSIP_MESSAGE_HAS_CONTENT(notify) && tsk_striequals(notify->Content_Type->type, "message/sipfrag")) {
+ tsk_ragel_state_t state;
+ tsk_bool_t ret;
+ char* content = tsk_null;
+
+ // sipfrag is a "tsip_message_t" with an extra \r\n
+ content = tsk_strndup(notify->Content->data, notify->Content->size);
+ if(tsk_strLastIndexOf(content, tsk_strlen(content), "\r\n") != tsk_strlen(content) - 2) { //Hack for XXX buggy client
+ tsk_strcat(&content, "\r\n");
+ }
+ tsk_strcat(&content, "\r\n");
+
+ tsk_ragel_state_init(&state, content, tsk_strlen(content));
+ ret = tsip_message_parse(&state, &sipfrag, tsk_false);
+ TSK_FREE(content);
+ if(ret && TSIP_MESSAGE_IS_RESPONSE(sipfrag)) {
+ return sipfrag;
+ }
+ TSK_OBJECT_SAFE_FREE(sipfrag);
+ }
+ return sipfrag;
}
static short get_SipFragResponseCode(const tsip_request_t* notify)
{
- tsip_response_t *sipfrag = get_SipFragMessage(notify);
- short code = 0;
- if(sipfrag){
- code = TSIP_RESPONSE_CODE(sipfrag);
- TSK_OBJECT_SAFE_FREE(sipfrag);
- }
- return code;
+ tsip_response_t *sipfrag = get_SipFragMessage(notify);
+ short code = 0;
+ if(sipfrag) {
+ code = TSIP_RESPONSE_CODE(sipfrag);
+ TSK_OBJECT_SAFE_FREE(sipfrag);
+ }
+ return code;
} \ No newline at end of file
OpenPOWER on IntegriCloud