Skip to content

Commit

Permalink
Fixed MRCPv2 resource discovery routine of the client stack to popula…
Browse files Browse the repository at this point in the history
…te multiple resources specified per single SDP media.

This is a slightly reworked version of the patch submitted as #213. Thanks Tobias.
  • Loading branch information
achaloyan committed May 25, 2018
1 parent 3f28cf1 commit 46b5537
Show file tree
Hide file tree
Showing 3 changed files with 77 additions and 1 deletion.
3 changes: 3 additions & 0 deletions modules/mrcp-sofiasip/include/mrcp_sdp.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,9 @@ MRCP_DECLARE(apr_size_t) sdp_string_generate_by_mrcp_descriptor(char *buffer, ap
/** Generate MRCP descriptor by SDP session */
MRCP_DECLARE(apt_bool_t) mrcp_descriptor_generate_by_sdp_session(mrcp_session_descriptor_t* descriptor, const sdp_session_t *sdp, const char *force_destination_ip, apr_pool_t *pool);

/** Generate MRCP resource discovery descriptor by SDP session */
MRCP_DECLARE(apt_bool_t) mrcp_resource_discovery_generate_by_sdp_session(mrcp_session_descriptor_t* descriptor, const sdp_session_t *sdp, apr_pool_t *pool);

/** Generate SDP resource discovery string */
MRCP_DECLARE(apr_size_t) sdp_resource_discovery_string_generate(const char *ip, const char *origin, char *buffer, apr_size_t size);

Expand Down
73 changes: 73 additions & 0 deletions modules/mrcp-sofiasip/src/mrcp_sdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ static apr_size_t sdp_control_media_generate(char *buffer, apr_size_t size, cons

static apt_bool_t mpf_rtp_media_generate(mpf_rtp_media_descriptor_t *rtp_media, const sdp_media_t *sdp_media, const apt_str_t *ip, apr_pool_t *pool);
static apt_bool_t mrcp_control_media_generate(mrcp_control_descriptor_t *mrcp_media, const sdp_media_t *sdp_media, const apt_str_t *ip, apr_pool_t *pool);
static apt_bool_t mrcp_control_medias_generate(mrcp_session_descriptor_t* descriptor, const sdp_media_t *sdp_media, const apt_str_t *ip, apr_pool_t *pool);

This comment has been minimized.

Copy link
@schlagert

schlagert Jun 4, 2018

Contributor

Coding-style inconsistent


/** Generate SDP string by MRCP descriptor */
MRCP_DECLARE(apr_size_t) sdp_string_generate_by_mrcp_descriptor(char *buffer, apr_size_t size, const mrcp_session_descriptor_t *descriptor, apt_bool_t offer)
Expand Down Expand Up @@ -130,6 +131,48 @@ MRCP_DECLARE(apt_bool_t) mrcp_descriptor_generate_by_sdp_session(mrcp_session_de
return TRUE;
}

MRCP_DECLARE(apt_bool_t) mrcp_resource_discovery_generate_by_sdp_session(mrcp_session_descriptor_t* descriptor, const sdp_session_t *sdp, apr_pool_t *pool)

This comment has been minimized.

Copy link
@schlagert

schlagert Jun 4, 2018

Contributor

Coding-style inconsistent

{
sdp_media_t *sdp_media;

if(!sdp) {
apt_log(SIP_LOG_MARK,APT_PRIO_WARNING,"Invalid SDP Message");
return FALSE;
}

if(sdp->sdp_connection) {
apt_string_assign(&descriptor->ip,sdp->sdp_connection->c_address,pool);
}

for(sdp_media=sdp->sdp_media; sdp_media; sdp_media=sdp_media->m_next) {
switch(sdp_media->m_type) {
case sdp_media_audio:
{
mpf_rtp_media_descriptor_t *media = mpf_rtp_media_descriptor_alloc(pool);
media->id = mrcp_session_audio_media_add(descriptor,media);
mpf_rtp_media_generate(media,sdp_media,&descriptor->ip,pool);
break;
}
case sdp_media_video:
{
mpf_rtp_media_descriptor_t *media = mpf_rtp_media_descriptor_alloc(pool);
media->id = mrcp_session_video_media_add(descriptor,media);
mpf_rtp_media_generate(media,sdp_media,&descriptor->ip,pool);
break;
}
case sdp_media_application:
{
mrcp_control_medias_generate(descriptor, sdp_media, &descriptor->ip, pool);

This comment has been minimized.

Copy link
@schlagert

schlagert Jun 4, 2018

Contributor

Coding-style inconsistent

break;
}
default:
apt_log(SIP_LOG_MARK,APT_PRIO_INFO,"Not Supported SDP Media [%s]", sdp_media->m_type_name);
break;
}
}
return TRUE;
}

/** Generate SDP media by RTP media descriptor */
static apr_size_t sdp_rtp_media_generate(char *buffer, apr_size_t size, const mrcp_session_descriptor_t *descriptor, const mpf_rtp_media_descriptor_t *audio_media)
{
Expand Down Expand Up @@ -381,6 +424,36 @@ static apt_bool_t mrcp_control_media_generate(mrcp_control_descriptor_t *control
return TRUE;
}

/** Generate and add MRCP control medias by SDP media */
static apt_bool_t mrcp_control_medias_generate(mrcp_session_descriptor_t* descriptor, const sdp_media_t *sdp_media, const apt_str_t *ip, apr_pool_t *pool)
{
apr_size_t descriptor_count = 0;
apt_str_t name;
sdp_attribute_t *attrib = NULL;
mrcp_proto_type_e proto;

apt_string_set(&name,sdp_media->m_proto_name);
proto = mrcp_proto_find(&name);
if(proto != MRCP_PROTO_TCP) {
apt_log(SIP_LOG_MARK,APT_PRIO_INFO,"Not supported SDP Proto [%s], expected [%s]",
sdp_media->m_proto_name,mrcp_proto_get(MRCP_PROTO_TCP)->buf);
return FALSE;
}

// generate a descriptor for each resource
for (attrib = sdp_media->m_attributes; attrib; attrib = attrib->a_next) {
apt_string_set(&name, attrib->a_name);
if (mrcp_attrib_id_find(&name) == MRCP_ATTRIB_RESOURCE) {
mrcp_control_descriptor_t *control_media = mrcp_control_descriptor_create(pool);
apt_string_assign(&control_media->resource_name, attrib->a_value, pool);
control_media->id = mrcp_session_control_media_add(descriptor, control_media);
descriptor_count++;
}
}

return TRUE;
}

/** Generate SDP resource discovery string */
MRCP_DECLARE(apr_size_t) sdp_resource_discovery_string_generate(const char *ip, const char *origin, char *buffer, apr_size_t size)
{
Expand Down
2 changes: 1 addition & 1 deletion modules/mrcp-sofiasip/src/mrcp_sofiasip_client_agent.c
Original file line number Diff line number Diff line change
Expand Up @@ -533,7 +533,7 @@ static void mrcp_sofia_on_resource_discover(

parser = sdp_parse(sofia_session->home,remote_sdp_str,(int)strlen(remote_sdp_str),0);
sdp = sdp_session(parser);
mrcp_descriptor_generate_by_sdp_session(descriptor,sdp,NULL,session->pool);
mrcp_resource_discovery_generate_by_sdp_session(descriptor,sdp,session->pool);
sdp_parser_free(parser);
}

Expand Down

0 comments on commit 46b5537

Please sign in to comment.