[Freeswitch-svn] [commit] r4395 - in freeswitch/branches/trixter/src: . include mod/endpoints/mod_sofia
Freeswitch SVN
trixter at freeswitch.org
Sun Feb 25 23:15:04 EST 2007
Author: trixter
Date: Sun Feb 25 23:15:04 2007
New Revision: 4395
Modified:
freeswitch/branches/trixter/src/include/switch_types.h
freeswitch/branches/trixter/src/mod/endpoints/mod_sofia/mod_sofia.c
freeswitch/branches/trixter/src/switch_rtp.c
Log:
I think this pretty much wraps up the clean RTP transmission, adds a flag rewrite_rtp which can be specified in the profile or dialplan as a chan var that will set it up so all RTP is rewritten by FreeSWITCH so it can filter devices that otherwise wouldnt talk to each other
Modified: freeswitch/branches/trixter/src/include/switch_types.h
==============================================================================
--- freeswitch/branches/trixter/src/include/switch_types.h (original)
+++ freeswitch/branches/trixter/src/include/switch_types.h Sun Feb 25 23:15:04 2007
@@ -244,7 +244,7 @@
SWITCH_RTP_FLAG_MINI - Use mini RTP when possible
SWITCH_RTP_FLAG_DATAWAIT - Do not return from reads unless there is data even when non blocking
SWITCH_RTP_FLAG_BUGGY_2833 - Emulate the bug in cisco equipment to allow interop
- SWITCH_RTP_FLAG_PASS_RFC2833 - Pass 2833 (ignore it)
+ SWITCH_RTP_FLAG_PASS_RFC2833 - Pass 2833 (ignore it)
</pre>
*/
typedef enum {
@@ -261,7 +261,7 @@
SWITCH_RTP_FLAG_MINI = ( 1 << 10),
SWITCH_RTP_FLAG_DATAWAIT = (1 << 11),
SWITCH_RTP_FLAG_BUGGY_2833 = (1 << 12),
- SWITCH_RTP_FLAG_PASS_RFC2833 = (1 << 13)
+ SWITCH_RTP_FLAG_PASS_RFC2833 = (1 << 13),
} switch_rtp_flag_t;
/*!
Modified: freeswitch/branches/trixter/src/mod/endpoints/mod_sofia/mod_sofia.c
==============================================================================
--- freeswitch/branches/trixter/src/mod/endpoints/mod_sofia/mod_sofia.c (original)
+++ freeswitch/branches/trixter/src/mod/endpoints/mod_sofia/mod_sofia.c Sun Feb 25 23:15:04 2007
@@ -147,7 +147,8 @@
PFLAG_FULL_ID = (1 << 3),
PFLAG_PRESENCE = (1 << 4),
PFLAG_PASS_RFC2833 = (1 << 5),
- PFLAG_DISABLE_TRANSCODING = (1 << 6)
+ PFLAG_DISABLE_TRANSCODING = (1 << 6),
+ PFLAG_REWRITE_RTP = (1 << 7)
} PFLAGS;
typedef enum {
@@ -1533,6 +1534,12 @@
flags |= SWITCH_RTP_FLAG_PASS_RFC2833;
}
+ if ((tech_pvt->profile->pflags & PFLAG_REWRITE_RTP) || (val = switch_channel_get_variable(channel, "rewrite_rtp")) && switch_true(val)) {
+ printf("\n\n\n\n\nSetting PFLAG_REWRITE_RTP\n\n\n\n\n");
+ // disable raw writes and disable 2833 passthrough
+ flags &= ~(SWITCH_RTP_FLAG_PASS_RFC2833 | SWITCH_RTP_FLAG_RAW_WRITE);
+ }
+
switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_INFO, "RTP [%s] %s:%d->%s:%d codec: %u ms: %d\n",
switch_channel_get_name(channel),
tech_pvt->local_sdp_audio_ip,
@@ -1582,6 +1589,7 @@
uint8_t inb = switch_test_flag(tech_pvt, TFLAG_OUTBOUND) ? 0 : 1;
tech_pvt->ssrc = switch_rtp_get_ssrc(tech_pvt->rtp_session);
+ switch_rtp_set_telephony_event(tech_pvt->rtp_session, tech_pvt->te);
switch_set_flag_locked(tech_pvt, TFLAG_RTP);
switch_set_flag_locked(tech_pvt, TFLAG_IO);
@@ -2327,6 +2335,7 @@
//switch_channel_t *channel = switch_core_session_get_channel(session);
switch_ivr_transfer_variable(session, nsession, SOFIA_REPLACES_HEADER);
switch_ivr_transfer_variable(session, nsession, SOFIA_SIP_HEADER_PREFIX_T);
+
if (switch_core_session_compare(session, nsession)) {
/* It's another sofia channel! so lets cache what they use as a pt for telephone event so
we can keep it the same
@@ -2335,6 +2344,8 @@
ctech_pvt = switch_core_session_get_private(session);
assert(ctech_pvt != NULL);
tech_pvt->bte = ctech_pvt->te;
+
+ printf("\n\n\n\n\nFlags: old 0x%08X\tnew 0x%08X\n\n\n\n\n\n", ctech_pvt->profile->pflags, tech_pvt->profile->pflags);
}
}
@@ -5169,6 +5180,10 @@
if (switch_true(val)) {
profile->pflags |= PFLAG_PASS_RFC2833;
}
+ } else if (!strcasecmp(var, "rewrite_rtp")) {
+ if (switch_true(val)) {
+ profile->pflags |= PFLAG_REWRITE_RTP;
+ }
} else if (!strcasecmp(var, "disable-transcoding")) {
if (switch_true(val)) {
profile->pflags |= PFLAG_DISABLE_TRANSCODING;
Modified: freeswitch/branches/trixter/src/switch_rtp.c
==============================================================================
--- freeswitch/branches/trixter/src/switch_rtp.c (original)
+++ freeswitch/branches/trixter/src/switch_rtp.c Sun Feb 25 23:15:04 2007
@@ -131,6 +131,7 @@
uint16_t seq;
uint16_t rseq;
+ uint32_t ssrc;
switch_payload_t payload;
switch_payload_t rpayload;
@@ -454,6 +455,7 @@
rtp_session->recv_msg.header.x = 0;
rtp_session->recv_msg.header.cc = 0;
+ rtp_session->ssrc = rtp_session->send_msg.header.ssrc;
rtp_session->seq = (uint16_t)rtp_session->send_msg.header.seq;
rtp_session->payload = payload;
rtp_session->ms_per_packet = ms_per_packet;
@@ -1354,16 +1356,19 @@
void *data;
uint32_t len;
+
// disable sending audio while sending 2833
if(rtp_session->dtmf_data.sending_dtmf) {
- return 0; // is this value correct? rtp_write_common returns the bytes written ...
+ switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_ERROR, "asked to send audio when 2833 is in progress, dumping audio frame\n");
+ return 0; // is this value correct? rtp_write_common returns the bytes written mod_sofia doesnt seem to check though
}
if (!switch_test_flag(rtp_session, SWITCH_RTP_FLAG_IO) || !rtp_session->remote_addr) {
return -1;
}
-
+
+
if (fwd && !packetize) {
data = frame->packet;
len = frame->packetlen;
@@ -1371,10 +1376,10 @@
data = frame->data;
len = frame->datalen;
rtp_session->ts += ts;
- rtp_session->seq = ntohs(rtp_session->seq) + 1;
- rtp_session->seq = htons(rtp_session->seq);
+ rtp_session->seq = htons(ntohs(rtp_session->seq) + 1);
rtp_session->send_msg.header.seq = rtp_session->seq;
rtp_session->send_msg.header.ts = htonl(rtp_session->ts);
+ rtp_session->send_msg.header.ssrc = htonl(rtp_session->ssrc);
}
return rtp_common_write(rtp_session, data, len, 0, rtp_session->payload, &frame->flags);
More information about the Freeswitch-svn
mailing list