mirror of
https://github.com/signalwire/freeswitch.git
synced 2026-07-24 21:22:09 +00:00
FSRTP-14
This commit is contained in:
committed by
Brian West
parent
9a74958b22
commit
70d73cafb7
@@ -802,6 +802,7 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
|
||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||
int payload = 0;
|
||||
uint32_t sanity = 1000;
|
||||
switch_rtcp_frame_t rtcp_frame;
|
||||
|
||||
switch_assert(tech_pvt != NULL);
|
||||
|
||||
@@ -859,6 +860,50 @@ static switch_status_t sofia_read_frame(switch_core_session_t *session, switch_f
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
/* Try to read an RTCP frame, if successful raise an event */
|
||||
if (switch_rtcp_zerocopy_read_frame(tech_pvt->rtp_session, &rtcp_frame) == SWITCH_STATUS_SUCCESS) {
|
||||
switch_event_t *event;
|
||||
|
||||
if (switch_event_create(&event, SWITCH_EVENT_RECV_RTCP_MESSAGE) == SWITCH_STATUS_SUCCESS) {
|
||||
char buf[30];
|
||||
|
||||
char* uuid = switch_core_session_get_uuid(session);
|
||||
if (uuid) {
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Unique-ID", switch_core_session_get_uuid(session));
|
||||
}
|
||||
|
||||
snprintf(buf, sizeof(buf), "%.8x", rtcp_frame.ssrc);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "SSRC", buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%u", rtcp_frame.ntp_msw);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "NTP-Most-Significant-Word", buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%u", rtcp_frame.ntp_lsw);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "NTP-Least-Significant-Word", buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%u", rtcp_frame.timestamp);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTP-Timestamp", buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%u", rtcp_frame.packet_count);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Sender-Packet-Count", buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%u", rtcp_frame.octect_count);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Octect-Packet-Count", buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%lu", tech_pvt->read_frame.timestamp);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Last-RTP-Timestamp", buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%u", tech_pvt->read_frame.rate);
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "RTP-Rate", buf);
|
||||
|
||||
snprintf(buf, sizeof(buf), "%lu", switch_time_now());
|
||||
switch_event_add_header_string(event, SWITCH_STACK_BOTTOM, "Capture-Time", buf);
|
||||
|
||||
switch_event_fire(&event);
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG10, "Dispatched RTCP event\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* Fast PASS! */
|
||||
if (switch_test_flag((&tech_pvt->read_frame), SFF_PROXY_PACKET)) {
|
||||
|
||||
@@ -466,6 +466,7 @@ struct sofia_profile {
|
||||
char *record_path;
|
||||
char *presence_hosts;
|
||||
char *challenge_realm;
|
||||
char *rtcp_interval_msec;
|
||||
sofia_cid_type_t cid_type;
|
||||
sofia_dtmf_t dtmf_type;
|
||||
int auto_restart;
|
||||
|
||||
@@ -2459,6 +2459,8 @@ switch_status_t reconfig_sofia(sofia_profile_t *profile)
|
||||
profile->hold_music = switch_core_strdup(profile->pool, val);
|
||||
} else if (!strcasecmp(var, "outbound-proxy")) {
|
||||
profile->outbound_proxy = switch_core_strdup(profile->pool, val);
|
||||
} else if (!strcasecmp(var, "rtcp-interval-msec")) {
|
||||
profile->rtcp_interval_msec = switch_core_strdup(profile->pool, val);
|
||||
} else if (!strcasecmp(var, "session-timeout")) {
|
||||
int v_session_timeout = atoi(val);
|
||||
if (v_session_timeout >= 0) {
|
||||
@@ -2996,6 +2998,8 @@ switch_status_t config_sofia(int reload, char *profile_name)
|
||||
profile->hold_music = switch_core_strdup(profile->pool, val);
|
||||
} else if (!strcasecmp(var, "outbound-proxy")) {
|
||||
profile->outbound_proxy = switch_core_strdup(profile->pool, val);
|
||||
} else if (!strcasecmp(var, "rtcp-interval-msec")) {
|
||||
profile->rtcp_interval_msec = switch_core_strdup(profile->pool, val);
|
||||
} else if (!strcasecmp(var, "session-timeout")) {
|
||||
int v_session_timeout = atoi(val);
|
||||
if (v_session_timeout >= 0) {
|
||||
|
||||
@@ -2725,6 +2725,15 @@ switch_status_t sofia_glue_activate_rtp(private_object_t *tech_pvt, switch_rtp_f
|
||||
switch_rtp_activate_stun_ping(tech_pvt->rtp_session, tech_pvt->stun_ip, tech_pvt->stun_port, stun_ping,
|
||||
(tech_pvt->stun_flags & STUN_FLAG_FUNNY) ? 1 : 0);
|
||||
}
|
||||
|
||||
if ((val = switch_channel_get_variable(tech_pvt->channel, "rtcp_interval_msec")) || (val = tech_pvt->profile->rtcp_interval_msec)) {
|
||||
int interval = atoi(val);
|
||||
if (interval < 100 || interval > 5000) {
|
||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(tech_pvt->session), SWITCH_LOG_ERROR, "Invalid rtcp interval spec [%d] must be between 100 and 5000\n", interval);
|
||||
} else {
|
||||
switch_rtp_activate_rtcp(tech_pvt->rtp_session, interval);
|
||||
}
|
||||
}
|
||||
|
||||
if ((val = switch_channel_get_variable(tech_pvt->channel, "jitterbuffer_msec"))) {
|
||||
int len = atoi(val);
|
||||
|
||||
Reference in New Issue
Block a user