mgcp: Avoid crashing when rtpmap is not complete

The NAT sends an incomplete SDP file for the purpose of informing
the BSC about the remote IP/PORT early. The case of an incomplete
SDP file was not considered. Check if there is a codec and if not
skip it.

TODO: We need to have a better end-point life cycle test.
This commit is contained in:
Holger Hans Peter Freyther 2015-08-17 15:19:57 +02:00
parent a334e90ddf
commit d17bc7b3a8
2 changed files with 6 additions and 3 deletions

View File

@ -159,6 +159,9 @@ int is_codec_compatible(struct mgcp_endpoint *endp, struct sdp_rtp_map *codec)
char *bts_codec;
char audio_codec[64];
if (!codec->codec_name)
return 0;
/*
* GSM, GSM/8000 and GSM/8000/1 should all be compatible.. let's go
* by name first.

View File

@ -350,7 +350,7 @@ static void test_strline(void)
"v=0\r\n" \
"o=- 1439038275 1439038275 IN IP4 192.168.181.247\r\n" \
"s=-\r\nc=IN IP4 192.168.181.247\r\n" \
"t=0 0\r\nm=audio 29084 RTP/AVP 0 8 3 18 4 96 97 101\r\n" \
"t=0 0\r\nm=audio 29084 RTP/AVP 255 0 8 3 18 4 96 97 101\r\n" \
"a=rtpmap:0 PCMU/8000\r\n" \
"a=rtpmap:8 PCMA/8000\r\n" \
"a=rtpmap:3 gsm/8000\r\n" \
@ -1068,8 +1068,8 @@ static void test_multilple_codec(void)
OSMO_ASSERT(last_endpoint == 5);
endp = &cfg->trunk.endpoints[last_endpoint];
OSMO_ASSERT(endp->net_end.codec.payload_type == 0);
OSMO_ASSERT(endp->net_end.alt_codec.payload_type == 8);
OSMO_ASSERT(endp->net_end.codec.payload_type == 255);
OSMO_ASSERT(endp->net_end.alt_codec.payload_type == 0);
talloc_free(cfg);
}