summaryrefslogtreecommitdiff
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
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
-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;