summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorJoshua Colp <jcolp@digium.com>2012-08-08 20:47:29 +0000
committerJoshua Colp <jcolp@digium.com>2012-08-08 20:47:29 +0000
commit4a389854a4dd4f27acce2d7b7116aebb48d2cf35 (patch)
tree04dde0aff4609f7da035c13da0054f278865bd20 /main
parent062becab8019e7079ceb804e2c23bf55959cd430 (diff)
Create the payload type if it does not exist when setting information based on the 'm' line. An rtpmap attribute is not required for defined payload numbers.
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@370927 65c4cc65-6c06-0410-ace0-fbb531ad65f3
Diffstat (limited to 'main')
-rw-r--r--main/rtp_engine.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/main/rtp_engine.c b/main/rtp_engine.c
index c62494508..4861387e3 100644
--- a/main/rtp_engine.c
+++ b/main/rtp_engine.c
@@ -534,11 +534,21 @@ void ast_rtp_codecs_payloads_set_m_type(struct ast_rtp_codecs *codecs, struct as
struct ast_rtp_payload_type *type;
ast_rwlock_rdlock(&static_RTP_PT_lock);
- if (payload < 0 || payload >= AST_RTP_MAX_PT || !(type = ao2_find(codecs->payloads, &payload, OBJ_KEY | OBJ_NOLOCK))) {
+
+ if (payload < 0 || payload >= AST_RTP_MAX_PT) {
ast_rwlock_unlock(&static_RTP_PT_lock);
return;
}
+ if (!(type = ao2_find(codecs->payloads, &payload, OBJ_KEY | OBJ_NOLOCK))) {
+ if (!(type = ao2_alloc(sizeof(*type), NULL))) {
+ ast_rwlock_unlock(&static_RTP_PT_lock);
+ return;
+ }
+ type->payload = payload;
+ ao2_link_flags(codecs->payloads, type, OBJ_NOLOCK);
+ }
+
type->asterisk_format = static_RTP_PT[payload].asterisk_format;
type->rtp_code = static_RTP_PT[payload].rtp_code;
type->payload = payload;