Update ICT.

This commit is contained in:
bossiel 2010-03-17 17:50:58 +00:00
parent 6d2adf016d
commit 292f4e5428
11 changed files with 523 additions and 82 deletions

View File

@ -31,8 +31,18 @@
#include "tinysdp_config.h"
#include "tinySDP/tsdp_message.h"
TSDP_BEGIN_DECLS
#define TSDP_LINE_S_VALUE_DEFAULT "-" /* as per RFC 3264 subclause 5 */
#define TSDP_LINE_O_USERNAME_DEFAULT "doubango"
#define TSDP_LINE_O_SESSION_VER_DEFAULT 2301
#define TSDP_LINE_O_SESSION_ID_DEFAULT 1983
TINYSDP_API tsdp_message_t* tsdp_create_empty(const char* addr, int isIPv6);
TSDP_END_DECLS

View File

@ -26,4 +26,52 @@
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#include "tsdp.h"
#include "tsdp.h"
#include "tinySDP/headers/tsdp_header_O.h"
#include "tinySDP/headers/tsdp_header_S.h"
#include "tinySDP/headers/tsdp_header_T.h"
#include "tinySDP/headers/tsdp_header_V.h"
tsdp_message_t* tsdp_create_empty(const char* addr, int isIPv6)
{
tsdp_message_t* ret = 0;
if(!(ret = TSDP_MESSAGE_CREATE())){
return TSDP_NULL;
}
/* RFC 3264 - 5 Generating the Initial Offer
The numeric value of the session id and version in the o line MUST be
representable with a 64 bit signed integer. The initial value of the version MUST be less than
(2**62)-1, to avoid rollovers.
*/
TSDP_MESSAGE_ADD_HEADER(ret, TSDP_HEADER_V_VA_ARGS(0));
TSDP_MESSAGE_ADD_HEADER(ret, TSDP_HEADER_O_VA_ARGS(
TSDP_LINE_O_USERNAME_DEFAULT,
TSDP_LINE_O_SESSION_ID_DEFAULT,
TSDP_LINE_O_SESSION_VER_DEFAULT,
"IN",
isIPv6 ? "IP6" : "IP4",
addr));
/* RFC 3264 - 5 Generating the Initial Offer
The SDP "s=" line conveys the subject of the session, which is
reasonably defined for multicast, but ill defined for unicast. For
unicast sessions, it is RECOMMENDED that it consist of a single space
character (0x20) or a dash (-).
Unfortunately, SDP does not allow the "s=" line to be empty.
*/
TSDP_MESSAGE_ADD_HEADER(ret, TSDP_HEADER_S_VA_ARGS(TSDP_LINE_S_VALUE_DEFAULT));
/* RFC 3264 - 5 Generating the Initial Offer
The SDP "t=" line conveys the time of the session. Generally,
streams for unicast sessions are created and destroyed through
external signaling means, such as SIP. In that case, the "t=" line
SHOULD have a value of "0 0".
*/
TSDP_MESSAGE_ADD_HEADER(ret, TSDP_HEADER_T_VA_ARGS(0, 0));
return ret;
}

View File

@ -24,6 +24,7 @@
#include "tsk.h"
#include "tsdp.h"
#include "tinySDP/parsers/tsdp_parser_message.h"
#include "test_parser.h"

View File

@ -65,7 +65,9 @@ void test_parser()
{
tsdp_message_t *message = 0;
/* deserialize the message */
//
// deserialize/serialize the message
//
if((message = tsdp_message_parse(SDP_MSG_TO_TEST, strlen(SDP_MSG_TO_TEST)))){
tsk_buffer_t *buffer = TSK_BUFFER_CREATE_NULL();
@ -74,12 +76,25 @@ void test_parser()
TSK_DEBUG_INFO("SDP Message=\n%s", TSK_BUFFER_TO_STRING(buffer));
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(message);
}
else{
TSK_DEBUG_ERROR("Failed to parse SDP message.");
}
}
TSK_OBJECT_SAFE_FREE(message);
//
// create empty message
//
if((message = tsdp_create_empty("127.0.0.1", 0))){
tsk_buffer_t *buffer = TSK_BUFFER_CREATE_NULL();
/* serialize the message */
tsdp_message_tostring(message, buffer);
TSK_DEBUG_INFO("\n\nEmpty SDP Message=\n%s", TSK_BUFFER_TO_STRING(buffer));
TSK_OBJECT_SAFE_FREE(buffer);
TSK_OBJECT_SAFE_FREE(message);
}
}
#endif /* _TEST_SDPPARSER_H */

View File

@ -0,0 +1,56 @@
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* 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 published 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.
*
*/
/**@file tsip_dialog_invlite.h
* @brief SIP dialog INVITE.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#ifndef TINYSIP_DIALOG_INVITE_H
#define TINYSIP_DIALOG_INVITE_H
#include "tinySIP_config.h"
#include "tinySIP/dialogs/tsip_dialog.h"
#include "tsk_fsm.h"
TSIP_BEGIN_DECLS
typedef struct tsip_dialog_invite
{
TSIP_DECLARE_DIALOG;
tsk_fsm_t *fsm;
unsigned sender:1;
}
tsip_dialog_message_t;
int tsip_dialog_invite_start(tsip_dialog_invite_t *self, int isSender);
TINYSIP_GEXTERN const void *tsip_dialog_invite_def_t;
TSIP_END_DECLS
#endif /* TINYSIP_DIALOG_INVITE_H */

View File

@ -0,0 +1,31 @@
/*
* Copyright (C) 2009 Mamadou Diop.
*
* Contact: Mamadou Diop <diopmamadou@yahoo.fr>
*
* 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.
*
*/
/**@file tsip_dialog_invite.c
* @brief SIP dialog INVITE as per RFC 3261.
* The SOA machine is designed as per RFC 3264 and draft-ietf-sipping-sip-offeranswer-12.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>
*
* @date Created: Sat Nov 8 16:54:58 2009 mdiop
*/
#include "tinySIP/dialogs/tsip_dialog_invite.h"

View File

@ -20,7 +20,7 @@
*
*/
/**@file tsip_dialog_publish.c
/**@file tsip_dialog_publish.client.c
* @brief SIP dialog PUBLISH as per RFC 3903.
*
* @author Mamadou Diop <diopmamadou(at)yahoo.fr>

View File

@ -66,7 +66,7 @@
to take +------------+
draft-sparks-sip-invfix-02.txt - Figure 3: INVITE client transaction
draft-sparks-sip-invfix-03.txt - Figure 3: INVITE client transaction
=============================================================================*/
@ -102,7 +102,7 @@ int tsip_transac_ict_Proceeding_2_Completed_X_300_to_699(va_list *app);
int tsip_transac_ict_Proceeding_2_Accepted_X_2xx(va_list *app);
int tsip_transac_ict_Completed_2_Completed_X_300_to_699(va_list *app);
int tsip_transac_ict_Completed_2_Terminated_X_timerD(va_list *app);
int tsip_transac_ict_Accepted_2_Accepted_X_1xx(va_list *app);
int tsip_transac_ict_Accepted_2_Accepted_X_2xx(va_list *app);
int tsip_transac_ict_Accepted_2_Terminated_X_timerM(va_list *app);
int tsip_transac_ict_Any_2_Terminated_X_transportError(va_list *app);
int tsip_transac_ict_Any_2_Terminated_X_Error(va_list *app);
@ -152,6 +152,9 @@ int tsip_transac_ict_event_callback(const tsip_transac_ict_t *self, tsip_transac
{
int ret = 0;
/* draft-sparks-sip-invfix-03 - 7.2. UAC Impacts
Any response received which does not match an existing client transaction state machine is simply dropped.
*/
switch(type)
{
case tsip_transac_incoming_msg:
@ -274,8 +277,8 @@ int tsip_transac_ict_init(tsip_transac_ict_t *self)
/*=======================
* === Accepted ===
*/
// Accepted -> (1xx) -> Accepted
TSK_FSM_ADD_ALWAYS(_fsm_state_Accepted, _fsm_action_1xx, _fsm_state_Accepted, tsip_transac_ict_Accepted_2_Accepted_X_1xx, "tsip_transac_ict_Accepted_2_Accepted_X_1xx"),
// Accepted -> (2xx) -> Accepted
TSK_FSM_ADD_ALWAYS(_fsm_state_Accepted, _fsm_action_2xx, _fsm_state_Accepted, tsip_transac_ict_Accepted_2_Accepted_X_2xx, "tsip_transac_ict_Accepted_2_Accepted_X_2xx"),
// Accepted -> (timerM) -> Terminated
TSK_FSM_ADD_ALWAYS(_fsm_state_Accepted, _fsm_action_timerM, _fsm_state_Terminated, tsip_transac_ict_Accepted_2_Terminated_X_timerM, "tsip_transac_ict_Accepted_2_Terminated_X_timerM"),
@ -433,16 +436,17 @@ int tsip_transac_ict_Calling_2_Completed_X_300_to_699(va_list *app)
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
int ret;
/* RFC 3261 - 17.1.1.2 Formal Description
When in either the "Calling" or "Proceeding" states, reception of a
response with status code from 300-699 MUST cause the client
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
When in either the "Calling" or "Proceeding" states, reception of
a response with status code from 300-699 MUST cause the client
transaction to transition to "Completed". The client transaction
MUST pass the received response up to the TU, and the client
transaction MUST generate an ACK request, even if the transport is
reliable (guidelines for constructing the ACK from the response are
given in Section 17.1.1.3) and then pass the ACK to the transport
layer for transmission. The ACK MUST be sent to the same address,
port, and transport to which the original request was sent.
reliable (guidelines for constructing the ACK from the response
are given in Section 17.1.1.3) and then pass the ACK to the
transport layer for transmission. The ACK MUST be sent to the
same address, port, and transport to which the original request
was sent.
*/
/* Do not retransmit */
if(!TSIP_TRANSAC(self)->reliable){
@ -450,27 +454,23 @@ int tsip_transac_ict_Calling_2_Completed_X_300_to_699(va_list *app)
}
TRANSAC_TIMER_CANCEL(B); /* Now it's up to the UAS to update the FSM. */
/* RFC 3261 - 17.1.1.2 Formal Description
The client transaction SHOULD start timer D when it enters the
"Completed" state, with a value of at least 32 seconds for unreliable
transports, and a value of zero seconds for reliable transports.
Timer D reflects the amount of time that the server transaction can
remain in the "Completed" state when unreliable transports are used.
This is equal to Timer H in the INVITE server transaction, whose
default is 64*T1. However, the client transaction does not know the
value of T1 in use by the server transaction, so an absolute minimum
of 32s is used instead of basing Timer D on T1.
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
The client transaction MUST start timer D when it enters the
"Completed" state for any reason, with a value of at least 32
seconds for unreliable transports, and a value of zero seconds for
reliable transports. Timer D reflects the amount of time that the
server transaction can remain in the "Completed" state when
unreliable transports are used.
*/
TRANSAC_ICT_TIMER_SCHEDULE(D); /* timerD already have the right value (0 if reliable and non-zero otherwise) */
/* Send ACK */
ret = tsip_transac_ict_send_ack(response);
if((ret = tsip_transac_ict_send_ack(response))){
return ret;
}
/* Pass the response to the dialog. */
TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_i_msg, response);
return ret;
return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_i_msg, response);
}
/* Calling -> (1xx) -> Proceeding
@ -505,7 +505,23 @@ int tsip_transac_ict_Calling_2_Proceeding_X_1xx(va_list *app)
*/
int tsip_transac_ict_Calling_2_Accepted_X_2xx(va_list *app)
{
return 0;
tsip_transac_ict_t *self = va_arg(*app, tsip_transac_ict_t *);
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
When a 2xx response is received while in either the "Calling" or
"Proceeding" states, the client transaction MUST transition to the
"Accepted" state, and Timer M MUST be started with a value of
64*T1. The 2xx response MUST be passed up to the TU. The client
transaction MUST NOT generate an ACK to the 2xx response - its
handling is delegated to the TU.
*/
/* Schedule timer M */
TRANSAC_ICT_TIMER_SCHEDULE(M);
/* pass the response to the TU (dialog) */
return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_i_msg, response);
}
/* Proceeding -> (1xx) -> Proceeding
@ -523,16 +539,17 @@ int tsip_transac_ict_Proceeding_2_Completed_X_300_to_699(va_list *app)
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
int ret;
/* RFC 3261 - 17.1.1.2 Formal Description
When in either the "Calling" or "Proceeding" states, reception of a
response with status code from 300-699 MUST cause the client
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
When in either the "Calling" or "Proceeding" states, reception of
a response with status code from 300-699 MUST cause the client
transaction to transition to "Completed". The client transaction
MUST pass the received response up to the TU, and the client
transaction MUST generate an ACK request, even if the transport is
reliable (guidelines for constructing the ACK from the response are
given in Section 17.1.1.3) and then pass the ACK to the transport
layer for transmission. The ACK MUST be sent to the same address,
port, and transport to which the original request was sent.
reliable (guidelines for constructing the ACK from the response
are given in Section 17.1.1.3) and then pass the ACK to the
transport layer for transmission. The ACK MUST be sent to the
same address, port, and transport to which the original request
was sent.
*/
/* Do not retransmit */
if(!TSIP_TRANSAC(self)->reliable){
@ -540,25 +557,23 @@ int tsip_transac_ict_Proceeding_2_Completed_X_300_to_699(va_list *app)
}
TRANSAC_TIMER_CANCEL(B); /* Now it's up to the UAS to update the FSM. */
/* RFC 3261 - 17.1.1.2 Formal Description
The client transaction SHOULD start timer D when it enters the
"Completed" state, with a value of at least 32 seconds for unreliable
transports, and a value of zero seconds for reliable transports.
Timer D reflects the amount of time that the server transaction can
remain in the "Completed" state when unreliable transports are used.
This is equal to Timer H in the INVITE server transaction, whose
default is 64*T1. However, the client transaction does not know the
value of T1 in use by the server transaction, so an absolute minimum
of 32s is used instead of basing Timer D on T1.
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
The client transaction MUST start timer D when it enters the
"Completed" state for any reason, with a value of at least 32
seconds for unreliable transports, and a value of zero seconds for
reliable transports. Timer D reflects the amount of time that the
server transaction can remain in the "Completed" state when
unreliable transports are used.
*/
TRANSAC_ICT_TIMER_SCHEDULE(D); /* timerD already have the right value (0 if reliable and non-zero otherwise) */
/* Send ACK */
ret = tsip_transac_ict_send_ack(response);
if((ret = tsip_transac_ict_send_ack(response))){
return ret;
}
/* Pass the response to the dialog. */
TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_i_msg, response);
return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_i_msg, response);
return ret;
}
@ -567,10 +582,23 @@ int tsip_transac_ict_Proceeding_2_Completed_X_300_to_699(va_list *app)
*/
int tsip_transac_ict_Proceeding_2_Accepted_X_2xx(va_list *app)
{
/* draft-sparks-sip-invfix-02 - 8.5. Pages 134 to 135
........ TO BE CONTINUED
tsip_transac_ict_t *self = va_arg(*app, tsip_transac_ict_t *);
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
When a 2xx response is received while in either the "Calling" or
"Proceeding" states, the client transaction MUST transition to the
"Accepted" state, and Timer M MUST be started with a value of
64*T1. The 2xx response MUST be passed up to the TU. The client
transaction MUST NOT generate an ACK to the 2xx response - its
handling is delegated to the TU.
*/
return 0;
/* Schedule timer M */
TRANSAC_ICT_TIMER_SCHEDULE(M);
/* pass the response to the TU (dialog) */
return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_i_msg, response);
}
/* Completed -> (300-699) -> Completed
@ -580,13 +608,11 @@ int tsip_transac_ict_Completed_2_Completed_X_300_to_699(va_list *app)
//tsip_transac_ict_t *self = va_arg(*app, tsip_transac_ict_t *);
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
/* RFC 3261 - 17.1.1.2 Formal Description
Any retransmissions of the final response that are received while in
the "Completed" state MUST cause the ACK to be re-passed to the
transport layer for retransmission, but the newly received response
MUST NOT be passed up to the TU. A retransmission of the response is
defined as any response which would match the same client transaction
based on the rules of Section 17.1.3.
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
Any retransmissions of a response with status code 300-699 that
are received while in the "Completed" state MUST cause the ACK to
be re-passed to the transport layer for retransmission, but the
newly received response MUST NOT be passed up to the TU.
*/
return tsip_transac_ict_send_ack(response);
@ -596,19 +622,33 @@ int tsip_transac_ict_Completed_2_Completed_X_300_to_699(va_list *app)
*/
int tsip_transac_ict_Completed_2_Terminated_X_timerD(va_list *app)
{
/* RFC 3261 - 17.1.1.2 Formal Description
If timer D fires while the client transaction is in the "Completed"
state, the client transaction MUST move to the terminated state.
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
If timer D fires while the client transaction is in the
"Completed" state, the client transaction MUST move to the
"Terminated" state.
*/
/* Timers will be canceled by "tsip_transac_ict_OnTerminated" */
return 0;
}
/* Accepted -> (1xx) -> Accepted
/* Accepted -> (2xx) -> Accepted
*/
int tsip_transac_ict_Accepted_2_Accepted_X_1xx(va_list *app)
int tsip_transac_ict_Accepted_2_Accepted_X_2xx(va_list *app)
{
tsip_transac_ict_t *self = va_arg(*app, tsip_transac_ict_t *);
const tsip_response_t *response = va_arg(*app, const tsip_response_t *);
/* draft-sparks-sip-invfix-03 - 7.2. UAC Impacts
A 2xx response received while in the "Accepted" state MUST be passed to the TU and
the machine remains in the "Accepted" state. The client transaction
MUST NOT generate an ACK to any 2xx response on its own. The TU
responsible for the transaction will generate the ACK.
*/
/* Pass the response to the TU. */
TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_i_msg, response);
return 0;
}
@ -616,6 +656,10 @@ int tsip_transac_ict_Accepted_2_Accepted_X_1xx(va_list *app)
*/
int tsip_transac_ict_Accepted_2_Terminated_X_timerM(va_list *app)
{
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
If timer M fires while the client transaction is in the "Accepted"
state, the client transaction MUST move to the "Terminated" state.
*/
return 0;
}
@ -623,14 +667,24 @@ int tsip_transac_ict_Accepted_2_Terminated_X_timerM(va_list *app)
*/
int tsip_transac_ict_Any_2_Terminated_X_transportError(va_list *app)
{
return 0;
tsip_transac_ict_t *self = va_arg(*app, tsip_transac_ict_t *);
//const tsip_message_t *message = va_arg(*app, const tsip_message_t *);
/* Timers will be canceled by "tsip_transac_nict_OnTerminated" */
return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transport_error, TSIP_NULL);
}
/* Any -> (Error) -> Terminated
*/
int tsip_transac_ict_Any_2_Terminated_X_Error(va_list *app)
{
return 0;
tsip_transac_ict_t *self = va_arg(*app, tsip_transac_ict_t *);
//const tsip_message_t *message = va_arg(*app, const tsip_message_t *);
/* Timers will be canceled by "tsip_transac_nict_OnTerminated" */
return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_error, TSIP_NULL);
}
@ -649,12 +703,10 @@ int tsip_transac_ict_send_ack(const tsip_response_t* response)
*/
int tsip_transac_ict_OnTerminated(tsip_transac_ict_t *self)
{
/* RFC 3261 - 17.1.1.2 Formal Description
The client transaction MUST be destroyed the instant it enters the
"Terminated" state. This is actually necessary to guarantee correct
operation.
/* draft-sparks-sip-invfix-03 - 8.4. Pages 126 through 128
The client transaction MUST be destroyed the instant it enters the "Terminated" state.
*/
/* Cancel timers */
if(!TSIP_TRANSAC(self)->reliable){
TRANSAC_TIMER_CANCEL(A);
@ -662,9 +714,9 @@ int tsip_transac_ict_OnTerminated(tsip_transac_ict_t *self)
TRANSAC_TIMER_CANCEL(B);
TRANSAC_TIMER_CANCEL(D);
TRANSAC_TIMER_CANCEL(M);
TSIP_TRANSAC(self)->running = 0;
TSK_DEBUG_INFO("=== ICT terminated ===");
/* Remove (and destroy) the transaction from the layer. */

View File

@ -596,13 +596,11 @@ int tsip_transac_nict_Completed_2_Terminated_X_timerK(va_list *app)
int tsip_transac_nict_Any_2_Terminated_X_transportError(va_list *app)
{
tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *);
const tsip_message_t *message = va_arg(*app, const tsip_message_t *);
//const tsip_message_t *message = va_arg(*app, const tsip_message_t *);
/* Timers will be canceled by "tsip_transac_nict_OnTerminated" */
TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transport_error, 0);
return 0;
return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_transport_error, TSIP_NULL);
}
/* Any -> (Error) -> Terminated
@ -610,9 +608,11 @@ int tsip_transac_nict_Any_2_Terminated_X_transportError(va_list *app)
int tsip_transac_nict_Any_2_Terminated_X_Error(va_list *app)
{
tsip_transac_nict_t *self = va_arg(*app, tsip_transac_nict_t *);
const tsip_message_t *message = va_arg(*app, const tsip_message_t *);
//const tsip_message_t *message = va_arg(*app, const tsip_message_t *);
return 0;
/* Timers will be canceled by "tsip_transac_nict_OnTerminated" */
return TSIP_TRANSAC(self)->dialog->callback(TSIP_TRANSAC(self)->dialog, tsip_dialog_error, TSIP_NULL);
}

View File

@ -0,0 +1,224 @@
<?xml version="1.0" encoding="Windows-1252"?>
<VisualStudioProject
ProjectType="Visual C++"
Version="8.00"
Name="test"
ProjectGUID="{C7732B19-4EF5-40EB-939B-4F1F5F2D3B18}"
RootNamespace="test"
Keyword="Win32Proj"
>
<Platforms>
<Platform
Name="Win32"
/>
</Platforms>
<ToolFiles>
</ToolFiles>
<Configurations>
<Configuration
Name="Debug|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="0"
AdditionalIncludeDirectories="&quot;$(DOUBANGO_HOME)\thirdparties\win32\include&quot;;&quot;$(DOUBANGO_HOME)\tinyMSRP\include&quot;;&quot;$(DOUBANGO_HOME)\tinySAK\src&quot;"
PreprocessorDefinitions="DEBUG_LEVEL=DEBUG_LEVEL_INFO;WIN32;_DEBUG;_CONSOLE"
MinimalRebuild="true"
BasicRuntimeChecks="3"
RuntimeLibrary="3"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="4"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
AdditionalDependencies="$(OutDir)\tinySAK.lib $(OutDir)\tinyMSRP.lib"
LinkIncremental="2"
GenerateDebugInformation="true"
SubSystem="1"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
<Configuration
Name="Release|Win32"
OutputDirectory="$(SolutionDir)$(ConfigurationName)"
IntermediateDirectory="$(ConfigurationName)"
ConfigurationType="1"
CharacterSet="1"
WholeProgramOptimization="1"
>
<Tool
Name="VCPreBuildEventTool"
/>
<Tool
Name="VCCustomBuildTool"
/>
<Tool
Name="VCXMLDataGeneratorTool"
/>
<Tool
Name="VCWebServiceProxyGeneratorTool"
/>
<Tool
Name="VCMIDLTool"
/>
<Tool
Name="VCCLCompilerTool"
Optimization="2"
EnableIntrinsicFunctions="true"
PreprocessorDefinitions="WIN32;NDEBUG;_CONSOLE"
RuntimeLibrary="2"
EnableFunctionLevelLinking="true"
UsePrecompiledHeader="0"
WarningLevel="3"
WarnAsError="true"
DebugInformationFormat="3"
CompileAs="1"
/>
<Tool
Name="VCManagedResourceCompilerTool"
/>
<Tool
Name="VCResourceCompilerTool"
/>
<Tool
Name="VCPreLinkEventTool"
/>
<Tool
Name="VCLinkerTool"
LinkIncremental="1"
GenerateDebugInformation="true"
SubSystem="1"
OptimizeReferences="2"
EnableCOMDATFolding="2"
TargetMachine="1"
/>
<Tool
Name="VCALinkTool"
/>
<Tool
Name="VCManifestTool"
/>
<Tool
Name="VCXDCMakeTool"
/>
<Tool
Name="VCBscMakeTool"
/>
<Tool
Name="VCFxCopTool"
/>
<Tool
Name="VCAppVerifierTool"
/>
<Tool
Name="VCWebDeploymentTool"
/>
<Tool
Name="VCPostBuildEventTool"
/>
</Configuration>
</Configurations>
<References>
</References>
<Files>
<Filter
Name="source"
Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
>
<File
RelativePath="..\..\tinyMSRP\test\test\stdafx.c"
>
</File>
<File
RelativePath="..\..\tinyMSRP\test\test\test.c"
>
</File>
</Filter>
<Filter
Name="include"
Filter="h;hpp;hxx;hm;inl;inc;xsd"
UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
>
<File
RelativePath="..\..\tinyMSRP\test\test\stdafx.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\test\test\targetver.h"
>
</File>
</Filter>
<Filter
Name="tests"
Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
>
<File
RelativePath="..\..\tinyMSRP\test\test\test_parser.h"
>
</File>
<File
RelativePath="..\..\tinyMSRP\test\test\test_uri.h"
>
</File>
</Filter>
</Files>
<Globals>
</Globals>
</VisualStudioProject>

View File

@ -823,6 +823,10 @@
RelativePath="..\..\tinySIP\src\dialogs\tsip_dialog.c"
>
</File>
<File
RelativePath="..\..\tinySIP\src\dialogs\tsip_dialog_invite.c"
>
</File>
<File
RelativePath="..\..\tinySIP\src\dialogs\tsip_dialog_invite.client.c"
>