mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-03 17:30:37 +00:00
remainder of previous patch to pass through dynamic payload numbers used
This commit is contained in:
parent
9500e120a9
commit
0d1b647197
@ -292,7 +292,7 @@ SWITCH_DECLARE(stfu_instance_t *) switch_core_media_get_jb(switch_core_session_t
|
|||||||
SWITCH_DECLARE(switch_rtp_stats_t *) switch_core_media_get_stats(switch_core_session_t *session, switch_media_type_t type, switch_memory_pool_t *pool);
|
SWITCH_DECLARE(switch_rtp_stats_t *) switch_core_media_get_stats(switch_core_session_t *session, switch_media_type_t type, switch_memory_pool_t *pool);
|
||||||
|
|
||||||
|
|
||||||
SWITCH_DECLARE(void) switch_core_media_set_sdp_codec_string(switch_core_session_t *session, const char *r_sdp);
|
SWITCH_DECLARE(void) switch_core_media_set_sdp_codec_string(switch_core_session_t *session, const char *r_sdp, switch_sdp_type_t sdp_type);
|
||||||
SWITCH_DECLARE(void) switch_core_media_reset_autofix(switch_core_session_t *session, switch_media_type_t type);
|
SWITCH_DECLARE(void) switch_core_media_reset_autofix(switch_core_session_t *session, switch_media_type_t type);
|
||||||
SWITCH_DECLARE(void) switch_core_media_check_outgoing_proxy(switch_core_session_t *session, switch_core_session_t *o_session);
|
SWITCH_DECLARE(void) switch_core_media_check_outgoing_proxy(switch_core_session_t *session, switch_core_session_t *o_session);
|
||||||
SWITCH_DECLARE(switch_status_t) switch_core_media_codec_chosen(switch_core_session_t *session, switch_media_type_t media);
|
SWITCH_DECLARE(switch_status_t) switch_core_media_codec_chosen(switch_core_session_t *session, switch_media_type_t media);
|
||||||
|
@ -5118,8 +5118,12 @@ static void sofia_handle_sip_r_invite(switch_core_session_t *session, int status
|
|||||||
}
|
}
|
||||||
|
|
||||||
tech_pvt->mparams.last_sdp_str = NULL;
|
tech_pvt->mparams.last_sdp_str = NULL;
|
||||||
if (!sofia_use_soa(tech_pvt) && sip->sip_payload && sip->sip_payload->pl_data) {
|
if (sip->sip_payload && sip->sip_payload->pl_data) {
|
||||||
tech_pvt->mparams.last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data);
|
switch_core_media_set_sdp_codec_string(session, sip->sip_payload->pl_data, SDP_TYPE_RESPONSE);
|
||||||
|
|
||||||
|
if (!sofia_use_soa(tech_pvt)) {
|
||||||
|
tech_pvt->mparams.last_sdp_str = switch_core_session_strdup(session, sip->sip_payload->pl_data);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5867,9 +5871,9 @@ static void sofia_handle_sip_i_state(switch_core_session_t *session, int status,
|
|||||||
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Remote SDP:\n%s\n", r_sdp);
|
switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG, "Remote SDP:\n%s\n", r_sdp);
|
||||||
tech_pvt->mparams.remote_sdp_str = switch_core_session_strdup(session, r_sdp);
|
tech_pvt->mparams.remote_sdp_str = switch_core_session_strdup(session, r_sdp);
|
||||||
|
|
||||||
if ((sofia_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION) || switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND)) {
|
//if ((sofia_test_flag(tech_pvt, TFLAG_LATE_NEGOTIATION) || switch_channel_direction(channel) == SWITCH_CALL_DIRECTION_OUTBOUND)) {
|
||||||
switch_core_media_set_sdp_codec_string(session, r_sdp);
|
// switch_core_media_set_sdp_codec_string(session, r_sdp, status < 200 ? SDP_TYPE_REQUEST : SDP_TYPE_RESPONSE);
|
||||||
}
|
//}
|
||||||
|
|
||||||
sofia_glue_pass_sdp(tech_pvt, (char *) r_sdp);
|
sofia_glue_pass_sdp(tech_pvt, (char *) r_sdp);
|
||||||
sofia_set_flag(tech_pvt, TFLAG_NEW_SDP);
|
sofia_set_flag(tech_pvt, TFLAG_NEW_SDP);
|
||||||
@ -7882,8 +7886,13 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
|
|||||||
const char *from_tag = "";
|
const char *from_tag = "";
|
||||||
char *sql = NULL;
|
char *sql = NULL;
|
||||||
char *acl_context = NULL;
|
char *acl_context = NULL;
|
||||||
|
const char *r_sdp = NULL;
|
||||||
|
|
||||||
profile->ib_calls++;
|
profile->ib_calls++;
|
||||||
|
|
||||||
|
if (sip->sip_payload && sip->sip_payload->pl_data) {
|
||||||
|
r_sdp = sip->sip_payload->pl_data;
|
||||||
|
}
|
||||||
|
|
||||||
if (!session || (sess_count >= sess_max || !sofia_test_pflag(profile, PFLAG_RUNNING))) {
|
if (!session || (sess_count >= sess_max || !sofia_test_pflag(profile, PFLAG_RUNNING))) {
|
||||||
nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), TAG_END());
|
nua_respond(nh, 503, "Maximum Calls In Progress", SIPTAG_RETRY_AFTER_STR("300"), TAG_END());
|
||||||
@ -7910,6 +7919,12 @@ void sofia_handle_sip_i_invite(switch_core_session_t *session, nua_t *nua, sofia
|
|||||||
is_nat = "websockets";
|
is_nat = "websockets";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (r_sdp) {
|
||||||
|
switch_core_media_set_sdp_codec_string(session, r_sdp, SDP_TYPE_REQUEST);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION)) {
|
if (sofia_test_pflag(profile, PFLAG_AGGRESSIVE_NAT_DETECTION)) {
|
||||||
if (sip && sip->sip_via) {
|
if (sip && sip->sip_via) {
|
||||||
const char *port = sip->sip_via->v_port;
|
const char *port = sip->sip_via->v_port;
|
||||||
|
@ -40,9 +40,9 @@
|
|||||||
#include <sofia-sip/sdp.h>
|
#include <sofia-sip/sdp.h>
|
||||||
#include <sofia-sip/su.h>
|
#include <sofia-sip/su.h>
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_t38_options_t *) switch_core_media_process_udptl(switch_core_session_t *session, sdp_session_t *sdp, sdp_media_t *m);
|
static switch_t38_options_t * switch_core_media_process_udptl(switch_core_session_t *session, sdp_session_t *sdp, sdp_media_t *m);
|
||||||
SWITCH_DECLARE(void) switch_core_media_find_zrtp_hash(switch_core_session_t *session, sdp_session_t *sdp);
|
static void switch_core_media_find_zrtp_hash(switch_core_session_t *session, sdp_session_t *sdp);
|
||||||
SWITCH_DECLARE(void) switch_core_media_set_r_sdp_codec_string(switch_core_session_t *session, const char *codec_string, sdp_session_t *sdp);
|
static void switch_core_media_set_r_sdp_codec_string(switch_core_session_t *session, const char *codec_string, sdp_session_t *sdp, switch_sdp_type_t sdp_type);
|
||||||
|
|
||||||
//#define GOOGLE_ICE
|
//#define GOOGLE_ICE
|
||||||
#define RTCP_MUX
|
#define RTCP_MUX
|
||||||
@ -263,7 +263,7 @@ SWITCH_DECLARE(const char *) switch_core_media_get_zrtp_hash(switch_core_session
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SWITCH_DECLARE(void) switch_core_media_find_zrtp_hash(switch_core_session_t *session, sdp_session_t *sdp)
|
static void switch_core_media_find_zrtp_hash(switch_core_session_t *session, sdp_session_t *sdp)
|
||||||
{
|
{
|
||||||
switch_channel_t *channel = switch_core_session_get_channel(session);
|
switch_channel_t *channel = switch_core_session_get_channel(session);
|
||||||
switch_rtp_engine_t *audio_engine;
|
switch_rtp_engine_t *audio_engine;
|
||||||
@ -307,7 +307,7 @@ SWITCH_DECLARE(void) switch_core_media_find_zrtp_hash(switch_core_session_t *ses
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWITCH_DECLARE(switch_t38_options_t *) switch_core_media_process_udptl(switch_core_session_t *session, sdp_session_t *sdp, sdp_media_t *m)
|
static switch_t38_options_t * switch_core_media_process_udptl(switch_core_session_t *session, sdp_session_t *sdp, sdp_media_t *m)
|
||||||
{
|
{
|
||||||
switch_t38_options_t *t38_options = switch_channel_get_private(session->channel, "t38_options");
|
switch_t38_options_t *t38_options = switch_channel_get_private(session->channel, "t38_options");
|
||||||
sdp_attribute_t *attr;
|
sdp_attribute_t *attr;
|
||||||
@ -481,7 +481,10 @@ SWITCH_DECLARE(switch_status_t) switch_core_session_get_payload_code(switch_core
|
|||||||
engine = &smh->engines[type];
|
engine = &smh->engines[type];
|
||||||
|
|
||||||
switch_mutex_lock(smh->sdp_mutex);
|
switch_mutex_lock(smh->sdp_mutex);
|
||||||
for (pmap = engine->payload_map; pmap && pmap->allocated; pmap = pmap->next) {
|
for (pmap = engine->payload_map; pmap ; pmap = pmap->next) {
|
||||||
|
|
||||||
|
if (!pmap->allocated) continue;
|
||||||
|
|
||||||
if (!strcasecmp(pmap->iananame, iananame)) {
|
if (!strcasecmp(pmap->iananame, iananame)) {
|
||||||
pt = pmap->pt;
|
pt = pmap->pt;
|
||||||
recv_pt = pmap->recv_pt;
|
recv_pt = pmap->recv_pt;
|
||||||
@ -548,15 +551,22 @@ SWITCH_DECLARE(payload_map_t *) switch_core_media_add_payload_map(switch_core_se
|
|||||||
pmap = switch_core_alloc(session->pool, sizeof(*pmap));
|
pmap = switch_core_alloc(session->pool, sizeof(*pmap));
|
||||||
}
|
}
|
||||||
|
|
||||||
pmap->sdp_type = sdp_type;
|
|
||||||
pmap->type = type;
|
pmap->type = type;
|
||||||
pmap->iananame = switch_core_strdup(session->pool, name);
|
pmap->iananame = switch_core_strdup(session->pool, name);
|
||||||
pmap->rm_encoding = pmap->iananame;
|
pmap->rm_encoding = pmap->iananame;
|
||||||
pmap->ptime = ptime;
|
|
||||||
pmap->rate = rate;
|
|
||||||
pmap->hash = switch_ci_hashfunc_default(pmap->iananame, &hlen);
|
pmap->hash = switch_ci_hashfunc_default(pmap->iananame, &hlen);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pmap->sdp_type = sdp_type;
|
||||||
|
|
||||||
|
if (ptime) {
|
||||||
|
pmap->ptime = ptime;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rate) {
|
||||||
|
pmap->rate = rate;
|
||||||
|
}
|
||||||
|
|
||||||
pmap->allocated = 1;
|
pmap->allocated = 1;
|
||||||
pmap->recv_pt = (switch_payload_t)pt;
|
pmap->recv_pt = (switch_payload_t)pt;
|
||||||
|
|
||||||
@ -7701,7 +7711,7 @@ SWITCH_DECLARE(stfu_instance_t *) switch_core_media_get_jb(switch_core_session_t
|
|||||||
|
|
||||||
|
|
||||||
//?
|
//?
|
||||||
SWITCH_DECLARE(void) switch_core_media_set_sdp_codec_string(switch_core_session_t *session, const char *r_sdp)
|
SWITCH_DECLARE(void) switch_core_media_set_sdp_codec_string(switch_core_session_t *session, const char *r_sdp, switch_sdp_type_t sdp_type)
|
||||||
{
|
{
|
||||||
sdp_parser_t *parser;
|
sdp_parser_t *parser;
|
||||||
sdp_session_t *sdp;
|
sdp_session_t *sdp;
|
||||||
@ -7717,7 +7727,7 @@ SWITCH_DECLARE(void) switch_core_media_set_sdp_codec_string(switch_core_session_
|
|||||||
if ((parser = sdp_parse(NULL, r_sdp, (int) strlen(r_sdp), 0))) {
|
if ((parser = sdp_parse(NULL, r_sdp, (int) strlen(r_sdp), 0))) {
|
||||||
|
|
||||||
if ((sdp = sdp_session(parser))) {
|
if ((sdp = sdp_session(parser))) {
|
||||||
switch_core_media_set_r_sdp_codec_string(session, switch_core_media_get_codec_string(session), sdp);
|
switch_core_media_set_r_sdp_codec_string(session, switch_core_media_get_codec_string(session), sdp, sdp_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
sdp_parser_free(parser);
|
sdp_parser_free(parser);
|
||||||
@ -7781,7 +7791,7 @@ static void add_audio_codec(sdp_rtpmap_t *map, int ptime, char *buf, switch_size
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SWITCH_DECLARE(void) switch_core_media_set_r_sdp_codec_string(switch_core_session_t *session, const char *codec_string, sdp_session_t *sdp)
|
static void switch_core_media_set_r_sdp_codec_string(switch_core_session_t *session, const char *codec_string, sdp_session_t *sdp, switch_sdp_type_t sdp_type)
|
||||||
{
|
{
|
||||||
char buf[1024] = { 0 };
|
char buf[1024] = { 0 };
|
||||||
sdp_media_t *m;
|
sdp_media_t *m;
|
||||||
@ -7839,8 +7849,25 @@ SWITCH_DECLARE(void) switch_core_media_set_r_sdp_codec_string(switch_core_sessio
|
|||||||
switch_core_media_find_zrtp_hash(session, sdp);
|
switch_core_media_find_zrtp_hash(session, sdp);
|
||||||
switch_core_media_pass_zrtp_hash(session);
|
switch_core_media_pass_zrtp_hash(session);
|
||||||
|
|
||||||
|
for (m = sdp->sdp_media; m; m = m->m_next) {
|
||||||
|
if ((m->m_type == sdp_media_audio || m->m_type == sdp_media_video) && m->m_port) {
|
||||||
|
for (map = m->m_rtpmaps; map; map = map->rm_next) {
|
||||||
|
|
||||||
|
switch_core_media_add_payload_map(session,
|
||||||
|
m->m_type == sdp_media_audio ? SWITCH_MEDIA_TYPE_AUDIO : SWITCH_MEDIA_TYPE_VIDEO,
|
||||||
|
map->rm_encoding,
|
||||||
|
sdp_type,
|
||||||
|
map->rm_pt,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
SWITCH_FALSE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
for (m = sdp->sdp_media; m; m = m->m_next) {
|
for (m = sdp->sdp_media; m; m = m->m_next) {
|
||||||
ptime = dptime;
|
ptime = dptime;
|
||||||
|
|
||||||
if (m->m_type == sdp_media_image && m->m_port) {
|
if (m->m_type == sdp_media_image && m->m_port) {
|
||||||
switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), ",t38");
|
switch_snprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), ",t38");
|
||||||
} else if (m->m_type == sdp_media_audio && m->m_port) {
|
} else if (m->m_type == sdp_media_audio && m->m_port) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user