Fix issues

This commit is contained in:
bossiel 2011-07-11 11:03:44 +00:00
parent 9579c27304
commit 411ff1b9ed
14 changed files with 137 additions and 60 deletions

View File

@ -223,7 +223,6 @@ static int tdav_consumer_audiounit_start(tmedia_consumer_t* self)
}
if(consumer->paused){
consumer->paused = tsk_false;
return tsk_false;
}
if(consumer->started){
TSK_DEBUG_WARN("Already started");

View File

@ -194,17 +194,17 @@ int tdav_consumer_dsound_start(tmedia_consumer_t* self)
HRESULT hr;
LPDIRECTSOUNDNOTIFY lpDSBNotify;
DSBPOSITIONNOTIFY pPosNotify[TDAV_DSOUNS_CONSUMER_NOTIF_POS_COUNT] = {0};
if(!dsound){
TSK_DEBUG_ERROR("Invalid parameter");
return -1;
}
if(!dsound->device || !dsound->primaryBuffer || !dsound->secondaryBuffer){
TSK_DEBUG_ERROR("Consumer not prepared");
return -2;
}
if(dsound->started){
TSK_DEBUG_WARN("Consumer already started");
return 0;

View File

@ -36,10 +36,12 @@
/* ============ G.711u Plugin interface ================= */
#define tdav_codec_g711u_open tsk_null
#define tdav_codec_g711u_close tsk_null
#define tdav_codec_g711u_fmtp_get tsk_null
#define tdav_codec_g711u_fmtp_set tsk_null
tsk_size_t tdav_codec_g711u_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size)
static tsk_size_t tdav_codec_g711u_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size)
{
register tsk_size_t i;
register uint8_t* pout_data;
@ -68,7 +70,7 @@ tsk_size_t tdav_codec_g711u_encode(tmedia_codec_t* self, const void* in_data, ts
return (in_size/2);
}
tsk_size_t tdav_codec_g711u_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
static tsk_size_t tdav_codec_g711u_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
{
tsk_size_t i;
@ -94,7 +96,7 @@ tsk_size_t tdav_codec_g711u_decode(tmedia_codec_t* self, const void* in_data, ts
return (in_size*2);
}
tsk_bool_t tdav_codec_g711u_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
static tsk_bool_t tdav_codec_g711u_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
{ /* always match */
return tsk_true;
}
@ -138,7 +140,7 @@ static const tsk_object_def_t tdav_codec_g711u_def_s =
static const tmedia_codec_plugin_def_t tdav_codec_g711u_plugin_def_s =
{
&tdav_codec_g711u_def_s,
tmedia_audio,
"PCMU",
"G.711u codec (From tinyDAV)",
@ -150,12 +152,12 @@ static const tmedia_codec_plugin_def_t tdav_codec_g711u_plugin_def_s =
1, // channels
20 // ptime
},
/* video */
{0},
tsk_null, // open
tsk_null, // close
tdav_codec_g711u_open,
tdav_codec_g711u_close,
tdav_codec_g711u_encode,
tdav_codec_g711u_decode,
tdav_codec_g711u_fmtp_match,
@ -167,20 +169,22 @@ const tmedia_codec_plugin_def_t *tdav_codec_g711u_plugin_def_t = &tdav_codec_g71
/* ============ G.711a Plugin interface ================= */
#define tdav_codec_g711a_open tsk_null
#define tdav_codec_g711a_close tsk_null
#define tdav_codec_g711a_fmtp_get tsk_null
#define tdav_codec_g711a_fmtp_set tsk_null
tsk_size_t tdav_codec_g711a_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size)
static tsk_size_t tdav_codec_g711a_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size)
{
register tsk_size_t i;
register uint8_t* pout_data;
register short* pin_data;
if(!self || !in_data || !in_size || !out_data){
TSK_DEBUG_ERROR("Invalid parameter");
return 0;
}
if(*out_max_size <in_size/2){
if(!(*out_data = tsk_realloc(*out_data, in_size/2))){
TSK_DEBUG_ERROR("Failed to allocate new buffer");
@ -189,7 +193,7 @@ tsk_size_t tdav_codec_g711a_encode(tmedia_codec_t* self, const void* in_data, ts
}
*out_max_size = in_size/2;
}
pout_data = *out_data;
pin_data = (short*)in_data;
for(i = 0; i<(in_size/2); i++){
@ -203,10 +207,10 @@ tsk_size_t tdav_codec_g711a_encode(tmedia_codec_t* self, const void* in_data, ts
FILE* file = tsk_null;
int count = 0;
#endif
tsk_size_t tdav_codec_g711a_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
static tsk_size_t tdav_codec_g711a_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
{
tsk_size_t i;
if(!self || !in_data || !in_size || !out_data){
TSK_DEBUG_ERROR("Invalid parameter");
return 0;
@ -241,7 +245,7 @@ tsk_size_t tdav_codec_g711a_decode(tmedia_codec_t* self, const void* in_data, ts
return (in_size*2);
}
tsk_bool_t tdav_codec_g711a_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
static tsk_bool_t tdav_codec_g711a_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
{ /* always match */
return tsk_true;
}
@ -301,8 +305,8 @@ static const tmedia_codec_plugin_def_t tdav_codec_g711a_plugin_def_s =
/* video */
{0},
tsk_null, // open
tsk_null, // close
tdav_codec_g711a_open,
tdav_codec_g711a_close,
tdav_codec_g711a_encode,
tdav_codec_g711a_decode,
tdav_codec_g711a_fmtp_match,

View File

@ -62,7 +62,7 @@ static void pack_SID(const Word16 ituBits[], uint8_t bitstream[]);
#define tdav_codec_g729ab_fmtp_set tsk_null
int tdav_codec_g729ab_open(tmedia_codec_t* self)
static int tdav_codec_g729ab_open(tmedia_codec_t* self)
{
tdav_codec_g729ab_t* g729a = (tdav_codec_g729ab_t*)self;
@ -87,7 +87,7 @@ int tdav_codec_g729ab_open(tmedia_codec_t* self)
return 0;
}
int tdav_codec_g729ab_close(tmedia_codec_t* self)
static int tdav_codec_g729ab_close(tmedia_codec_t* self)
{
tdav_codec_g729ab_t* g729a = (tdav_codec_g729ab_t*)self;
@ -98,7 +98,7 @@ int tdav_codec_g729ab_close(tmedia_codec_t* self)
return 0;
}
tsk_size_t tdav_codec_g729ab_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size)
static tsk_size_t tdav_codec_g729ab_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size)
{
tsk_size_t ex_size, out_size = 0;
tdav_codec_g729ab_t* g729a = (tdav_codec_g729ab_t*)self;
@ -155,7 +155,7 @@ tsk_size_t tdav_codec_g729ab_encode(tmedia_codec_t* self, const void* in_data, t
return out_size;
}
tsk_size_t tdav_codec_g729ab_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
static tsk_size_t tdav_codec_g729ab_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
{
tsk_size_t out_size = 0;
int i, frame_count;
@ -234,7 +234,7 @@ tsk_size_t tdav_codec_g729ab_decode(tmedia_codec_t* self, const void* in_data, t
return out_size;
}
tsk_bool_t tdav_codec_g729ab_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
static tsk_bool_t tdav_codec_g729ab_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
{
tsk_params_L_t* params = tsk_null;
const char* val_str;
@ -252,7 +252,7 @@ tsk_bool_t tdav_codec_g729ab_fmtp_match(const tmedia_codec_t* codec, const char*
return tsk_true;
}
char* tdav_codec_g729ab_fmtp_get(const tmedia_codec_t* codec)
static char* tdav_codec_g729ab_fmtp_get(const tmedia_codec_t* codec)
{
tdav_codec_g729ab_t* g729a = (tdav_codec_g729ab_t*)codec;
@ -455,4 +455,4 @@ static const tmedia_codec_plugin_def_t tdav_codec_g729ab_plugin_def_s =
};
const tmedia_codec_plugin_def_t *tdav_codec_g729ab_plugin_def_t = &tdav_codec_g729ab_plugin_def_s;
#endif /* HAVE_G729 */
#endif /* HAVE_G729 */

View File

@ -40,7 +40,7 @@
#define tdav_codec_ilbc_fmtp_set tsk_null
int tdav_codec_ilbc_open(tmedia_codec_t* self)
static int tdav_codec_ilbc_open(tmedia_codec_t* self)
{
tdav_codec_ilbc_t* ilbc = (tdav_codec_ilbc_t*)self;
@ -50,7 +50,7 @@ int tdav_codec_ilbc_open(tmedia_codec_t* self)
return 0;
}
int tdav_codec_ilbc_close(tmedia_codec_t* self)
static int tdav_codec_ilbc_close(tmedia_codec_t* self)
{
tdav_codec_ilbc_t* ilbc = (tdav_codec_ilbc_t*)self;
@ -60,7 +60,7 @@ int tdav_codec_ilbc_close(tmedia_codec_t* self)
return 0;
}
tsk_size_t tdav_codec_ilbc_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size)
static tsk_size_t tdav_codec_ilbc_encode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size)
{
tdav_codec_ilbc_t* ilbc = (tdav_codec_ilbc_t*)self;
int k;
@ -91,7 +91,7 @@ tsk_size_t tdav_codec_ilbc_encode(tmedia_codec_t* self, const void* in_data, tsk
return ilbc->encoder.no_of_bytes;
}
tsk_size_t tdav_codec_ilbc_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
static tsk_size_t tdav_codec_ilbc_decode(tmedia_codec_t* self, const void* in_data, tsk_size_t in_size, void** out_data, tsk_size_t* out_max_size, const tsk_object_t* proto_hdr)
{
int blocks, i, k, block_size;
float dtmp;
@ -157,14 +157,14 @@ tsk_size_t tdav_codec_ilbc_decode(tmedia_codec_t* self, const void* in_data, tsk
return out_size;
}
char* tdav_codec_ilbc_fmtp_get(const tmedia_codec_t* codec)
static char* tdav_codec_ilbc_fmtp_get(const tmedia_codec_t* codec)
{
char* fmtp = tsk_null;
tsk_sprintf(&fmtp, "mode=%d", TDAV_ILBC_MODE);
return fmtp;
}
tsk_bool_t tdav_codec_ilbc_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
static tsk_bool_t tdav_codec_ilbc_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
{ /* RFC 3952 - 5. Mapping To SDP Parameters
The offer contains the preferred mode of the offerer. The answerer

View File

@ -42,7 +42,7 @@
#define tdav_codec_msrp_encode tsk_null
#define tdav_codec_msrp_decode tsk_null
tsk_bool_t tdav_codec_msrp_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
static tsk_bool_t tdav_codec_msrp_fmtp_match(const tmedia_codec_t* codec, const char* fmtp)
{ /* always match */
return tsk_true;
}

View File

@ -196,6 +196,7 @@ typedef struct tmedia_session_mgr_s
tsk_bool_t started;
tsk_bool_t ro_changed;
tsk_bool_t state_changed;
tsk_bool_t mediaType_changed;
//! session type
tmedia_type_t type;

View File

@ -702,10 +702,15 @@ const tsdp_message_t* tmedia_session_mgr_get_lo(tmedia_session_mgr_t* self)
}
/* creates local sdp if not already done or update it's value (because of set_ro())*/
if((self->ro_changed || self->state_changed) && self->sdp.lo){
if((self->ro_changed || self->state_changed || self->mediaType_changed) && self->sdp.lo){
TSK_OBJECT_SAFE_FREE(self->sdp.lo);
if(self->mediaType_changed){
// reload session with new medias and keep the old one
_tmedia_session_mgr_load_sessions(self);
}
self->ro_changed = tsk_false;
self->state_changed = tsk_false;
self->mediaType_changed = tsk_false;
}
if(self->sdp.lo){
@ -781,7 +786,7 @@ int tmedia_session_mgr_set_ro(tmedia_session_mgr_t* self, const tsdp_message_t*
an offer that contains SDP with a version that has not changed; this is effectively a no-op.
*/
if((O = (const tsdp_header_O_t*)tsdp_message_get_header(sdp, tsdp_htype_O))){
if(self->sdp.ro_ver == (int32_t)O->sess_version){
if(self->sdp.ro_ver == (int32_t)O->sess_version && 0){
TSK_DEBUG_INFO("Remote offer has not changed");
return 0;
}
@ -1228,11 +1233,13 @@ int _tmedia_session_mgr_load_sessions(tmedia_session_mgr_t* self)
tsk_size_t i = 0;
tmedia_session_t* session;
const tmedia_session_plugin_def_t* plugin;
if(TSK_LIST_IS_EMPTY(self->sessions)){
#define has_media(media_type) (tsk_list_find_object_by_pred(self->sessions, __pred_find_session_by_type, &(media_type)))
if(TSK_LIST_IS_EMPTY(self->sessions) || self->mediaType_changed){
/* for each registered plugin create a session instance */
while((i < TMED_SESSION_MAX_PLUGINS) && (plugin = __tmedia_session_plugins[i++])){
if((plugin->type & self->type) == plugin->type){
if((plugin->type & self->type) == plugin->type && !has_media(plugin->type)){
if((session = tmedia_session_create(plugin->type))){
tsk_list_push_back_data(self->sessions, (void**)(&session));
}
@ -1248,6 +1255,7 @@ int _tmedia_session_mgr_load_sessions(tmedia_session_mgr_t* self)
/* load params */
_tmedia_session_mgr_apply_params(self);
}
#undef has_media
return 0;
}

View File

@ -61,7 +61,9 @@ typedef enum tsip_invite_event_type_e
//
tsip_m_early_media,
tsip_m_updating, // Trying to update from Audio -> Video for example
tsip_m_updated, // succeed to update
/* 3GPP TS 24.610: Communication Hold */
tsip_m_local_hold_ok,
tsip_m_local_hold_nok,

View File

@ -62,8 +62,9 @@ tsip_event_type_t;
// 8xx ==> success
#define tsip_event_code_dialog_request_incoming 800
#define tsip_event_code_dialog_request_cancelled 801
#define tsip_event_code_dialog_request_sent 802
#define tsip_event_code_dialog_request_outgoing 802
#define tsip_event_code_dialog_request_cancelled 803
#define tsip_event_code_dialog_request_sent 804
// 9xx ==> Informational
#define tsip_event_code_dialog_connecting 900

View File

@ -74,14 +74,18 @@ int tsip_action_INVITE(const tsip_ssession_handle_t *ss, tmedia_type_t type, ...
va_start(ap, type);
if((action = _tsip_action_create(tsip_atype_invite, &ap))){
tsk_bool_t new_dialog = tsk_false;
/* Media type */
action->media.type = type;
if(!(dialog = tsip_dialog_layer_find_by_ss(_ss->stack->layer_dialog, ss))){
dialog = tsip_dialog_layer_new(_ss->stack->layer_dialog, tsip_dialog_INVITE, ss);
new_dialog = tsk_true;
}
if(!(ret = tsip_dialog_fsm_act(dialog, action->type, tsk_null, action))){
TSIP_SSESSION(_ss)->media.type = type; // Update Session Media Type
if(new_dialog){ // otherwise we are trying to refresh the media type and the type will be updated if 200 OK
TSIP_SSESSION(_ss)->media.type = type; // Update Session Media Type
}
}
tsk_object_unref(dialog);

View File

@ -99,20 +99,21 @@ static int x0000_Connected_2_Connected_X_oDTMF(va_list *app);
static int x0000_Connected_2_Connected_X_oLMessage(va_list *app);
static int x0000_Connected_2_Connected_X_iACK(va_list *app);
static int x0000_Connected_2_Connected_X_iINVITEorUPDATE(va_list *app);
static int x0000_Connected_2_Connected_X_oINVITE(va_list *app);
int x0000_Any_2_Any_X_i1xx(va_list *app);
int x0000_Any_2_Any_X_i401_407_INVITEorUPDATE(va_list *app);
int x0000_Any_2_Any_X_i2xxINVITEorUPDATE(va_list *app);
static int x0000_Any_2_Any_X_i1xx(va_list *app);
static int x0000_Any_2_Any_X_i401_407_INVITEorUPDATE(va_list *app);
static int x0000_Any_2_Any_X_i2xxINVITEorUPDATE(va_list *app);
int x0000_Any_2_Any_X_iPRACK(va_list *app);
int x0000_Any_2_Any_X_iOPTIONS(va_list *app);
int x0000_Any_2_Trying_X_oBYE(va_list *app); /* If not Connected => Cancel will be called instead. See tsip_dialog_hangup() */
int x0000_Any_2_Terminated_X_iBYE(va_list *app);
int x0000_Any_2_Trying_X_shutdown(va_list *app);
static int x0000_Any_2_Any_X_iPRACK(va_list *app);
static int x0000_Any_2_Any_X_iOPTIONS(va_list *app);
static int x0000_Any_2_Trying_X_oBYE(va_list *app); /* If not Connected => Cancel will be called instead. See tsip_dialog_hangup() */
static int x0000_Any_2_Terminated_X_iBYE(va_list *app);
static int x0000_Any_2_Trying_X_shutdown(va_list *app);
int x9998_Any_2_Any_X_transportError(va_list *app);
int x9999_Any_2_Any_X_Error(va_list *app);
static int x9998_Any_2_Any_X_transportError(va_list *app);
static int x9999_Any_2_Any_X_Error(va_list *app);
/* ======================== conds ======================== */
static tsk_bool_t _fsm_cond_is_resp2INVITE(tsip_dialog_invite_t* self, tsip_message_t* message)
@ -292,7 +293,9 @@ int tsip_dialog_invite_init(tsip_dialog_invite_t *self)
TSK_FSM_ADD_ALWAYS(_fsm_state_Connected, _fsm_action_iINVITE, _fsm_state_Connected, x0000_Connected_2_Connected_X_iINVITEorUPDATE, "x0000_Connected_2_Connected_X_iINVITE"),
// Connected -> (iUPDATE) -> Connected
TSK_FSM_ADD_ALWAYS(_fsm_state_Connected, _fsm_action_iUPDATE, _fsm_state_Connected, x0000_Connected_2_Connected_X_iINVITEorUPDATE, "x0000_Connected_2_Connected_X_iUPDATE"),
// Connected -> (send reINVITE) -> Connected
TSK_FSM_ADD_ALWAYS(_fsm_state_Connected, _fsm_action_oINVITE, _fsm_state_Connected, x0000_Connected_2_Connected_X_oINVITE, "x0000_Connected_2_Connected_X_oINVITE"),
/*=======================
* === BYE/SHUTDOWN ===
*/
@ -365,6 +368,9 @@ int tsip_dialog_invite_start(tsip_dialog_invite_t *self)
int tsip_dialog_invite_process_ro(tsip_dialog_invite_t *self, const tsip_message_t* message)
{
tsdp_message_t* sdp_ro = tsk_null;
tmedia_type_t old_media_type;
tmedia_type_t new_media_type;
tsk_bool_t media_session_was_null;
int ret = 0;
if(!self || !message){
@ -393,12 +399,14 @@ int tsip_dialog_invite_process_ro(tsip_dialog_invite_t *self, const tsip_message
return 0;
}
}
media_session_was_null = (self->msession_mgr == tsk_null);
old_media_type = TSIP_DIALOG_GET_SS(self)->media.type;
new_media_type = sdp_ro ? tmedia_type_from_sdp(sdp_ro) : old_media_type;
/* Create session Manager if not already done */
if(!self->msession_mgr){
if(sdp_ro){
TSIP_DIALOG_GET_SS(self)->media.type = tmedia_type_from_sdp(sdp_ro);
}
TSIP_DIALOG_GET_SS(self)->media.type = new_media_type;
self->msession_mgr = tmedia_session_mgr_create(TSIP_DIALOG_GET_SS(self)->media.type, TSIP_DIALOG_GET_STACK(self)->network.local_ip,
TNET_SOCKET_TYPE_IS_IPV6(TSIP_DIALOG_GET_STACK(self)->network.proxy_cscf_type), (sdp_ro == tsk_null));
if(TSIP_DIALOG_GET_STACK(self)->natt.ctx){
@ -413,6 +421,14 @@ int tsip_dialog_invite_process_ro(tsip_dialog_invite_t *self, const tsip_message
}
}
// is media update?
if(!media_session_was_null && (old_media_type != new_media_type) && (self->msession_mgr->sdp.lo && self->msession_mgr->sdp.ro)){
// at this point the media session manager has been succeffuly started and all is ok
TSIP_DIALOG_GET_SS(self)->media.type = new_media_type;
TSIP_DIALOG_INVITE_SIGNAL(self, tsip_m_updated,
TSIP_RESPONSE_CODE(message), TSIP_RESPONSE_PHRASE(message), message);
}
/* start session manager */
if(!self->msession_mgr->started && (self->msession_mgr->sdp.lo && self->msession_mgr->sdp.ro)){
/* Set MSRP Callback */
@ -552,6 +568,45 @@ int x0000_Connected_2_Connected_X_iINVITEorUPDATE(va_list *app)
return ret;
}
/* Connected -> (send reINVITE) -> Connected */
static int x0000_Connected_2_Connected_X_oINVITE(va_list *app)
{
int ret;
tsk_bool_t mediaType_changed;
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 *);
/* Update current action */
ret = tsip_dialog_set_curr_action(TSIP_DIALOG(self), action);
/* Get Media type from the action */
mediaType_changed = (TSIP_DIALOG_GET_SS(self)->media.type != action->media.type && action->media.type != tmedia_none);
if(self->msession_mgr && mediaType_changed){
self->msession_mgr->mediaType_changed = tsk_true;
self->msession_mgr->type = action->media.type;
}
/* Appy media params received from the user */
if(!TSK_LIST_IS_EMPTY(action->media.params)){
ret = tmedia_session_mgr_set_3(self->msession_mgr, action->media.params);
}
/* send the request */
ret = send_INVITE(self, mediaType_changed);
/* alert the user */
if(mediaType_changed){
TSIP_DIALOG_INVITE_SIGNAL(self, tsip_m_updating,
tsip_event_code_dialog_request_outgoing, "Updating media type", self->last_oInvite);
}
return ret;
}
/* Any -> (iPRACK) -> Any */
int x0000_Any_2_Any_X_iPRACK(va_list *app)
{

View File

@ -139,7 +139,7 @@ tsip_dialog_t* tsip_dialog_layer_find(const tsip_dialog_layer_t *self, const cha
return ret;
}
/** Hangup all dialogs staring by REGISTER */
/** Hangup all dialogs starting by non-REGISTER */
int tsip_dialog_layer_shutdownAll(tsip_dialog_layer_t *self)
{
if(self){
@ -235,7 +235,7 @@ phase3_loop:
tsip_dialog_shutdown(dialog, tsk_null);
// if "tsip_dialog_shutdown()" remove the dialog, then
// "self->dialogs" will be unsafe
// "self->dialogs" will became unsafe while looping
if(!(item = tsk_object_unref(item))){
goto phase3_loop;
}

View File

@ -37,6 +37,8 @@
#include "tinysip/dialogs/tsip_dialog_layer.h"
#include "tinysip/tsip_message.h"
#include "tinymedia/tmedia_defaults.h"
#include "tsk_debug.h"
/**@defgroup tsip_session_group SIP sessions
@ -541,6 +543,7 @@ static tsk_object_t* tsip_ssession_ctor(tsk_object_t * self, va_list * app)
// default expires value
ss->expires = TSIP_SSESSION_EXPIRES_DEFAULT;
// default media values
ss->media.enable_100rel = tmedia_defaults_get_100rel_enabled();
ss->media.type = tmedia_none;
ss->media.qos.type = tmedia_qos_stype_none;
ss->media.qos.strength = tmedia_qos_strength_none;