diff options
author | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-09-30 18:21:03 +0000 |
---|---|---|
committer | twilson <twilson@f38db490-d61c-443f-a65b-d21fe96a405b> | 2009-09-30 18:21:03 +0000 |
commit | b8e1d3fe36ae844f200ff0d4f6bc6f21084c7364 (patch) | |
tree | 770086aa7fb8556d1ca31c00845610954c7477af | |
parent | bc354c76f41a25a047c3875db003f8fbe3b38225 (diff) |
Use rtp properties instead of adding a callback
Thanks, Josh.
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@221278 f38db490-d61c-443f-a65b-d21fe96a405b
-rw-r--r-- | channels/chan_sip.c | 20 | ||||
-rw-r--r-- | include/asterisk/rtp_engine.h | 19 | ||||
-rw-r--r-- | main/rtp_engine.c | 7 | ||||
-rw-r--r-- | res/res_rtp_asterisk.c | 13 |
4 files changed, 11 insertions, 48 deletions
diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 9c0076554..908bc80cc 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -5191,11 +5191,9 @@ static int create_addr_from_peer(struct sip_pvt *dialog, struct sip_peer *peer) if (dialog->rtp) { /* Audio */ ast_rtp_instance_set_prop(dialog->rtp, AST_RTP_PROPERTY_DTMF, ast_test_flag(&dialog->flags[0], SIP_DTMF) == SIP_DTMF_RFC2833); ast_rtp_instance_set_prop(dialog->rtp, AST_RTP_PROPERTY_DTMF_COMPENSATE, ast_test_flag(&dialog->flags[1], SIP_PAGE2_RFC2833_COMPENSATE)); + ast_rtp_instance_set_prop(dialog->rtp, AST_RTP_PROPERTY_CONSTANT_SSRC, ast_test_flag(&dialog->flags[1], SIP_PAGE2_CONSTANT_SSRC)); ast_rtp_instance_set_timeout(dialog->rtp, peer->rtptimeout); ast_rtp_instance_set_hold_timeout(dialog->rtp, peer->rtpholdtimeout); - if (ast_test_flag(&dialog->flags[1], SIP_PAGE2_CONSTANT_SSRC)) { - ast_rtp_instance_set_constantssrc(dialog->rtp); - } /* Set Frame packetization */ ast_rtp_codecs_packetization_set(ast_rtp_instance_get_codecs(dialog->rtp), dialog->rtp, &dialog->prefs); dialog->autoframing = peer->autoframing; @@ -5203,9 +5201,7 @@ static int create_addr_from_peer(struct sip_pvt *dialog, struct sip_peer *peer) if (dialog->vrtp) { /* Video */ ast_rtp_instance_set_timeout(dialog->vrtp, peer->rtptimeout); ast_rtp_instance_set_hold_timeout(dialog->vrtp, peer->rtpholdtimeout); - if (ast_test_flag(&dialog->flags[1], SIP_PAGE2_CONSTANT_SSRC)) { - ast_rtp_instance_set_constantssrc(dialog->vrtp); - } + ast_rtp_instance_set_prop(dialog->vrtp, AST_RTP_PROPERTY_CONSTANT_SSRC, ast_test_flag(&dialog->flags[1], SIP_PAGE2_CONSTANT_SSRC)); } if (dialog->trtp) { /* Realtime text */ ast_rtp_instance_set_timeout(dialog->trtp, peer->rtptimeout); @@ -20495,13 +20491,11 @@ static int handle_request_invite(struct sip_pvt *p, struct sip_request *req, int ast_debug(1, "No compatible codecs for this SIP call.\n"); return -1; } - if (ast_test_flag(&p->flags[1], SIP_PAGE2_CONSTANT_SSRC)) { - if (p->rtp) { - ast_rtp_instance_set_constantssrc(p->rtp); - } - if (p->vrtp) { - ast_rtp_instance_set_constantssrc(p->vrtp); - } + if (p->rtp) { + ast_rtp_instance_set_prop(p->rtp, AST_RTP_PROPERTY_CONSTANT_SSRC, ast_test_flag(&p->flags[1], SIP_PAGE2_CONSTANT_SSRC)); + } + if (p->vrtp) { + ast_rtp_instance_set_prop(p->vrtp, AST_RTP_PROPERTY_CONSTANT_SSRC, ast_test_flag(&p->flags[1], SIP_PAGE2_CONSTANT_SSRC)); } } else { /* No SDP in invite, call control session */ p->jointcapability = p->capability; diff --git a/include/asterisk/rtp_engine.h b/include/asterisk/rtp_engine.h index 29070d0c7..8f4292a98 100644 --- a/include/asterisk/rtp_engine.h +++ b/include/asterisk/rtp_engine.h @@ -94,6 +94,8 @@ enum ast_rtp_property { AST_RTP_PROPERTY_RTCP, /*! Maximum number of RTP properties supported */ AST_RTP_PROPERTY_MAX, + /*! Don't force a new SSRC on new source */ + AST_RTP_PROPERTY_CONSTANT_SSRC, }; /*! Additional RTP options */ @@ -1185,23 +1187,6 @@ int ast_rtp_instance_dtmf_mode_set(struct ast_rtp_instance *instance, enum ast_r enum ast_rtp_dtmf_mode ast_rtp_instance_dtmf_mode_get(struct ast_rtp_instance *instance); /*! - * \brief Mark an RTP instance not to update SSRC on a new source - * - * \param instance Instance to update - * - * Example usage: - * - * \code - * ast_rtp_instance_set_constantssrc(instance); - * \endcode - * - * This sets the indicated instance to not update the RTP SSRC when new_source - * is called. - * - * \since 1.6.3 - */ -void ast_rtp_instance_set_constantssrc(struct ast_rtp_instance *instance); -/*! * \brief Indicate a new source of audio has dropped in * * \param instance Instance that the new media source is feeding into diff --git a/main/rtp_engine.c b/main/rtp_engine.c index 53ed892b2..cf6d2c6f2 100644 --- a/main/rtp_engine.c +++ b/main/rtp_engine.c @@ -726,13 +726,6 @@ enum ast_rtp_dtmf_mode ast_rtp_instance_dtmf_mode_get(struct ast_rtp_instance *i return instance->dtmf_mode; } -void ast_rtp_instance_set_constantssrc(struct ast_rtp_instance *instance) -{ - if (instance->engine->constant_ssrc_set) { - instance->engine->constant_ssrc_set(instance); - } -} - void ast_rtp_instance_new_source(struct ast_rtp_instance *instance) { if (instance->engine->new_source) { diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 42cce3786..f4f3cb841 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -103,7 +103,6 @@ enum strict_rtp_state { #define FLAG_NAT_INACTIVE_NOWARN (1 << 1) #define FLAG_NEED_MARKER_BIT (1 << 3) #define FLAG_DTMF_COMPENSATE (1 << 4) -#define FLAG_CONSTANT_SSRC (1 << 5) /*! \brief RTP session description */ struct ast_rtp { @@ -254,7 +253,6 @@ static int ast_rtp_destroy(struct ast_rtp_instance *instance); static int ast_rtp_dtmf_begin(struct ast_rtp_instance *instance, char digit); static int ast_rtp_dtmf_end(struct ast_rtp_instance *instance, char digit); static void ast_rtp_new_source(struct ast_rtp_instance *instance); -static void ast_rtp_set_constantssrc(struct ast_rtp_instance *instance); static int ast_rtp_write(struct ast_rtp_instance *instance, struct ast_frame *frame); static struct ast_frame *ast_rtp_read(struct ast_rtp_instance *instance, int rtcp); static void ast_rtp_prop_set(struct ast_rtp_instance *instance, enum ast_rtp_property property, int value); @@ -277,7 +275,6 @@ static struct ast_rtp_engine asterisk_rtp_engine = { .dtmf_begin = ast_rtp_dtmf_begin, .dtmf_end = ast_rtp_dtmf_end, .new_source = ast_rtp_new_source, - .constant_ssrc_set = ast_rtp_set_constantssrc, .write = ast_rtp_write, .read = ast_rtp_read, .prop_set = ast_rtp_prop_set, @@ -656,13 +653,6 @@ static int ast_rtp_dtmf_end(struct ast_rtp_instance *instance, char digit) return 0; } -void ast_rtp_set_constantssrc(struct ast_rtp_instance *instance) -{ - struct ast_rtp *rtp = ast_rtp_instance_get_data(instance); - - ast_set_flag(rtp, FLAG_CONSTANT_SSRC); -} - static void ast_rtp_new_source(struct ast_rtp_instance *instance) { struct ast_rtp *rtp = ast_rtp_instance_get_data(instance); @@ -670,7 +660,8 @@ static void ast_rtp_new_source(struct ast_rtp_instance *instance) /* We simply set this bit so that the next packet sent will have the marker bit turned on */ ast_set_flag(rtp, FLAG_NEED_MARKER_BIT); - if (!ast_test_flag(rtp, FLAG_CONSTANT_SSRC)) { + if (!ast_rtp_instance_get_prop(instance, AST_RTP_PROPERTY_CONSTANT_SSRC)) { + ast_log(LOG_ERROR, "Changing ssrc\n"); rtp->ssrc = ast_random(); } |