[Freeswitch-svn] [commit] r1762 - freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip
Freeswitch SVN
stkn at freeswitch.org
Wed Jul 5 18:34:25 EDT 2006
Author: stkn
Date: Wed Jul 5 18:34:24 2006
New Revision: 1762
Modified:
freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip/mod_pjsip.c
Log:
Small cleanups and state handling changed.
Modified: freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip/mod_pjsip.c
==============================================================================
--- freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip/mod_pjsip.c (original)
+++ freeswitch/branches/stkn/src/mod/endpoints/mod_pjsip/mod_pjsip.c Wed Jul 5 18:34:24 2006
@@ -1,3 +1,4 @@
+
/*
* Experimental PJSIP channel module for FreeSWITCH
*
@@ -92,10 +93,10 @@
switch_core_session_t **new_session, switch_memory_pool_t *pool);
static switch_status_t pjsip_read_frame(switch_core_session_t *session, switch_frame_t **frame, int timeout,
- switch_io_flag_t flags, int stream_id); // unimplemented
+ switch_io_flag_t flags, int stream_id);
static switch_status_t pjsip_write_frame(switch_core_session_t *session, switch_frame_t *frame, int timeout,
- switch_io_flag_t flags, int stream_id); // unimplemented
+ switch_io_flag_t flags, int stream_id);
static switch_status_t pjsip_answer_channel(switch_core_session_t *session);
static switch_status_t pjsip_kill_channel(switch_core_session_t *session, int sig);
@@ -170,11 +171,10 @@
{
pjsip_tx_data *txdata = NULL;
pjmedia_sdp_session *sdp = NULL;
-// pjsip_sip_uri *dst_uri;
char tmp[50];
pj_str_t dst;
- pj_ansi_sprintf( tmp, "<sip:%s:%d>", pvt->caller_profile->destination_number, 2054 );
+ pj_ansi_sprintf( tmp, "<sip:%s:%d>", pvt->caller_profile->destination_number, 5060 );
pj_cstr( &dst, tmp );
pvt->sip_ua = pjsip_ua_instance();
@@ -260,8 +260,6 @@
/* add call to hash */
switch_core_hash_insert( globals.call_hash, pvt->call_id, pvt );
- switch_channel_set_state( channel, CS_RING );
-
return SWITCH_STATUS_SUCCESS;
}
@@ -270,9 +268,14 @@
struct pjsip_tech_pvt *pvt;
switch_channel_t *channel;
+ assert( session != NULL );
+
channel = switch_core_session_get_channel( session );
+ assert( channel != NULL );
pvt = switch_core_session_get_private( session );
+ assert( pvt != NULL );
+
#if 0 /* fix this, pjsip_inv_* is wrong here */
if( !switch_channel_test_flag( channel, CF_OUTBOUND ) ) {
pj_status_t status;
@@ -361,6 +364,8 @@
struct pjsip_tech_pvt *pvt;
switch_channel_t *channel;
+ assert( session != NULL );
+
channel = switch_core_session_get_channel( session );
assert( channel != NULL );
@@ -378,6 +383,8 @@
struct pjsip_tech_pvt *pvt;
switch_channel_t *channel;
+ assert( session != NULL );
+
channel = switch_core_session_get_channel( session );
assert( channel != NULL );
@@ -409,6 +416,7 @@
}
switch_set_flag( pvt, TFLAG_ANSWERED );
}
+
return SWITCH_STATUS_SUCCESS;
}
@@ -418,6 +426,8 @@
struct pjsip_tech_pvt *pvt;
switch_channel_t *channel;
+ assert( session != NULL );
+
channel = switch_core_session_get_channel( session );
assert( channel != NULL );
@@ -425,12 +435,8 @@
assert( pvt != NULL );
switch_clear_flag( pvt, TFLAG_IO );
+ switch_set_flag( pvt, TFLAG_BYE );
- if( !switch_test_flag( pvt, TFLAG_BYE ) ) {
- switch_set_flag( pvt, TFLAG_BYE );
- switch_channel_hangup( channel, SWITCH_CAUSE_NORMAL_CLEARING );
- }
-
if( pvt->rtp_session ) {
switch_rtp_kill_socket( pvt->rtp_session );
}
@@ -484,9 +490,6 @@
if( outbound_profile ) {
switch_caller_profile_t *caller_profile = NULL;
-// pjsip_dialog *dialog = NULL;
-// pj_status_t status;
-// pj_str_t dst_uri;
char name[128];
/* create channel name, copy profile and parse destination number (?) */
@@ -582,7 +585,6 @@
switch_set_flag( pvt, TFLAG_WRITING );
if( switch_test_flag( pvt, TFLAG_IO ) ) {
-// switch_status_t status;
int samples, frames, bytes;
assert( pvt->rtp_session != NULL );
@@ -738,7 +740,6 @@
"\n** Our initial SDP **\n%s\n*********************\n", tmp_sdp );
}
}
-
switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "Starting session thread for call %s\n", pvt->call_id );
/* set initial state */
@@ -828,8 +829,16 @@
{
case PJSIP_INV_STATE_DISCONNECTED:
switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "* Call %s has been disconnected\n", pvt->call_id );
- switch_channel_hangup( channel, SWITCH_CAUSE_NORMAL_CLEARING );
- /* -> hangup */
+ if( !switch_test_flag( pvt, TFLAG_BYE ) ) {
+ switch_call_cause_t cause;
+
+ switch( evt->body.rx_msg.rdata->msg_info.msg->line.status.code )
+ {
+ default:
+ cause = SWITCH_CAUSE_NORMAL_CLEARING;
+ }
+ switch_channel_hangup( channel, cause );
+ }
break;
case PJSIP_INV_STATE_CONFIRMED:
/* -> connected */
@@ -837,6 +846,9 @@
switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "* Call %s has been connected\n", pvt->call_id );
break;
case PJSIP_INV_STATE_EARLY:
+ switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "* Call %s, state %s\n", pvt->call_id, pjsip_inv_state_name( inv->state ) );
+ break;
+
case PJSIP_INV_STATE_CONNECTING:
switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "* Call %s, state %s\n", pvt->call_id, pjsip_inv_state_name( inv->state ) );
break;
@@ -851,10 +863,6 @@
{
struct pjsip_tech_pvt *pvt;
const pjmedia_sdp_session *remote_sdp, *local_sdp;
-#if 0
- pjmedia_stream_info streaminfo;
- pj_in_addr rem_addr;
-#endif
pj_pool_t *pool;
const switch_codec_interface_t *codec;
const switch_codec_implementation_t *imp;
@@ -865,8 +873,9 @@
pj_sockaddr addr;
pvt = inv->mod_data[globals.mod_app.id];
- pool = inv->dlg->pool;
assert( pvt != NULL );
+
+ pool = inv->dlg->pool;
assert( pool != NULL );
session = pvt->session;
@@ -878,6 +887,10 @@
switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "-- SDP negotiation status change %s (state %s, status %d)\n", pvt->call_id,
pjmedia_sdp_neg_state_str(pjmedia_sdp_neg_get_state( inv->neg )), status );
+ if( pjmedia_sdp_neg_get_state( inv->neg ) != PJMEDIA_SDP_NEG_STATE_DONE ) {
+ switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "---- SDP negotiation still ongoing for call %s\n", pvt->call_id );
+ }
+
if( status != PJ_SUCCESS ) {
char tmp[1024];
pj_strerror( status, tmp, sizeof(tmp) );
@@ -981,13 +994,11 @@
}
switch_log_printf( SWITCH_CHANNEL_LOG, SWITCH_LOG_DEBUG, "Codec %s, %s:%d\n", codec->implementations->iananame, pvt->remote_sdp_audio_addr, pvt->remote_sdp_audio_port );
- assert( channel != NULL );
-
+ /* start rtp */
start_rtp( pvt );
-#if 0
- if( !switch_channel_test_flag( channel, CF_OUTBOUND ) )
- switch_channel_set_state( channel, CS_RING );
-#endif
+
+ /* put channel into RING state */
+ switch_channel_set_state( channel, CS_RING );
}
static switch_status_t pjsip_receive_message(switch_core_session_t *session, switch_core_session_message_t *msg)
More information about the Freeswitch-svn
mailing list