From 78a9501cfda39c8413c6698a063a08405521160c Mon Sep 17 00:00:00 2001 From: Jacob Erlbeck Date: Fri, 29 Nov 2013 13:43:49 +0100 Subject: mgcp: Handle SDP in CRCX received by the MGW So far the SDP part of the CRCX message has been ignored by the MGW. This patch adds SDP parsing for this case, eventually updating the net end's payload type and connection parameters. Sponsored-by: On-Waves ehf --- openbsc/src/libmgcp/mgcp_protocol.c | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'openbsc/src/libmgcp') diff --git a/openbsc/src/libmgcp/mgcp_protocol.c b/openbsc/src/libmgcp/mgcp_protocol.c index 645b8a75e..a0b905de0 100644 --- a/openbsc/src/libmgcp/mgcp_protocol.c +++ b/openbsc/src/libmgcp/mgcp_protocol.c @@ -624,6 +624,7 @@ static struct msgb *handle_create_con(struct mgcp_parse_data *p) const char *callid = NULL; const char *mode = NULL; char *line; + int have_sdp = 0; if (p->found != 0) return create_err_response(NULL, 510, "CRCX", p->trans); @@ -640,6 +641,9 @@ static struct msgb *handle_create_con(struct mgcp_parse_data *p) case 'M': mode = (const char *) line + 3; break; + case '\0': + have_sdp = 1; + goto mgcp_header_done; default: LOGP(DMGCP, LOGL_NOTICE, "Unhandled option: '%c'/%d on 0x%x\n", *line, *line, ENDPOINT_NUMBER(endp)); @@ -647,6 +651,7 @@ static struct msgb *handle_create_con(struct mgcp_parse_data *p) } } +mgcp_header_done: tcfg = p->endp->tcfg; /* Check required data */ @@ -697,9 +702,13 @@ static struct msgb *handle_create_con(struct mgcp_parse_data *p) goto error2; endp->allocated = 1; + + /* set up RTP media parameters */ endp->bts_end.payload_type = tcfg->audio_payload; endp->bts_end.fmtp_extra = talloc_strdup(tcfg->endpoints, tcfg->audio_fmtp_extra); + if (have_sdp) + parse_sdp_data(&endp->net_end, p); /* policy CB */ if (p->cfg->policy_cb) { -- cgit v1.2.3