diff options
Diffstat (limited to 'res')
-rw-r--r-- | res/res_pjsip.c | 3 | ||||
-rw-r--r-- | res/res_pjsip_diversion.c | 3 | ||||
-rw-r--r-- | res/res_pjsip_refer.c | 5 | ||||
-rw-r--r-- | res/res_pjsip_session.c | 6 | ||||
-rw-r--r-- | res/res_rtp_asterisk.c | 28 |
5 files changed, 27 insertions, 18 deletions
diff --git a/res/res_pjsip.c b/res/res_pjsip.c index b1adf0e39..12c3baa0d 100644 --- a/res/res_pjsip.c +++ b/res/res_pjsip.c @@ -3244,8 +3244,9 @@ static int create_out_of_dialog_request(const pjsip_method *method, struct ast_s pjsip_contact_hdr *contact_hdr; pjsip_sip_uri *contact_uri; static const pj_str_t HCONTACT = { "Contact", 7 }; + static const pj_str_t HCONTACTSHORT = { "m", 1 }; - contact_hdr = pjsip_msg_find_hdr_by_name((*tdata)->msg, &HCONTACT, NULL); + contact_hdr = pjsip_msg_find_hdr_by_names((*tdata)->msg, &HCONTACT, &HCONTACTSHORT, NULL); if (contact_hdr) { contact_uri = pjsip_uri_get_uri(contact_hdr->uri); pj_strdup2(pool, &contact_uri->user, endpoint->contact_user); diff --git a/res/res_pjsip_diversion.c b/res/res_pjsip_diversion.c index b9225de9c..a9ffdf493 100644 --- a/res/res_pjsip_diversion.c +++ b/res/res_pjsip_diversion.c @@ -277,6 +277,7 @@ static int diversion_incoming_request(struct ast_sip_session *session, pjsip_rx_ static void diversion_incoming_response(struct ast_sip_session *session, pjsip_rx_data *rdata) { static const pj_str_t contact_name = { "Contact", 7 }; + static const pj_str_t contact_name_s = { "m", 1 }; pjsip_status_line status = rdata->msg_info.msg->line.status; pjsip_fromto_hdr *div_hdr; @@ -292,7 +293,7 @@ static void diversion_incoming_response(struct ast_sip_session *session, pjsip_r div_hdr = PJSIP_MSG_TO_HDR(rdata->msg_info.msg); } - contact_hdr = pjsip_msg_find_hdr_by_name(rdata->msg_info.msg, &contact_name, NULL); + contact_hdr = pjsip_msg_find_hdr_by_names(rdata->msg_info.msg, &contact_name, &contact_name_s, NULL); set_redirecting(session, div_hdr, contact_hdr ? (pjsip_name_addr*)contact_hdr->uri : (pjsip_name_addr*)PJSIP_MSG_FROM_HDR(rdata->msg_info.msg)->uri); diff --git a/res/res_pjsip_refer.c b/res/res_pjsip_refer.c index 3101c361c..d52a922fd 100644 --- a/res/res_pjsip_refer.c +++ b/res/res_pjsip_refer.c @@ -573,6 +573,7 @@ static void refer_blind_callback(struct ast_channel *chan, struct transfer_chann pjsip_generic_string_hdr *referred_by; static const pj_str_t str_referred_by = { "Referred-By", 11 }; + static const pj_str_t str_referred_by_s = { "b", 1 }; pbx_builtin_setvar_helper(chan, "SIPTRANSFER", "yes"); @@ -651,8 +652,8 @@ static void refer_blind_callback(struct ast_channel *chan, struct transfer_chann pbx_builtin_setvar_helper(chan, "SIPREFERRINGCONTEXT", S_OR(refer->context, NULL)); - referred_by = pjsip_msg_find_hdr_by_name(refer->rdata->msg_info.msg, - &str_referred_by, NULL); + referred_by = pjsip_msg_find_hdr_by_names(refer->rdata->msg_info.msg, + &str_referred_by, &str_referred_by_s, NULL); if (referred_by) { size_t uri_size = pj_strlen(&referred_by->hvalue) + 1; char *uri = ast_alloca(uri_size); diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c index 60850f04d..3c4f102f8 100644 --- a/res/res_pjsip_session.c +++ b/res/res_pjsip_session.c @@ -1998,6 +1998,12 @@ static enum sip_get_destination_result get_destination(struct ast_sip_session *s if (!strcmp(session->exten, pickupexten) || ast_exists_extension(NULL, session->endpoint->context, session->exten, 1, NULL)) { + size_t size = pj_strlen(&sip_ruri->host) + 1; + char *domain = ast_alloca(size); + + ast_copy_pj_str(domain, &sip_ruri->host, size); + pbx_builtin_setvar_helper(session->channel, "SIPDOMAIN", domain); + return SIP_GET_DEST_EXTEN_FOUND; } /* XXX In reality, we'll likely have further options so that partial matches diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c index 1ae18fed3..2409e3aee 100644 --- a/res/res_rtp_asterisk.c +++ b/res/res_rtp_asterisk.c @@ -4915,9 +4915,11 @@ static void ast_rtp_prop_set(struct ast_rtp_instance *instance, enum ast_rtp_pro ast_sockaddr_set_port(&rtp->rtcp->us, ast_sockaddr_port(&rtp->rtcp->us) + 1); + ast_sockaddr_copy(&local_addr, &rtp->rtcp->us); if (!ast_find_ourip(&local_addr, &rtp->rtcp->us, 0)) { ast_sockaddr_set_port(&local_addr, ast_sockaddr_port(&rtp->rtcp->us)); } else { + /* Failed to get local address reset to use default. */ ast_sockaddr_copy(&local_addr, &rtp->rtcp->us); } @@ -5006,31 +5008,31 @@ static int ast_rtp_fd(struct ast_rtp_instance *instance, int rtcp) static void ast_rtp_remote_address_set(struct ast_rtp_instance *instance, struct ast_sockaddr *addr) { struct ast_rtp *rtp = ast_rtp_instance_get_data(instance); - struct ast_sockaddr local, us; + struct ast_sockaddr local; + ast_rtp_instance_get_local_address(instance, &local); if (!ast_sockaddr_isnull(addr)) { /* Update the local RTP address with what is being used */ - ast_ouraddrfor(addr, &us); - ast_rtp_instance_get_local_address(instance, &local); - ast_sockaddr_set_port(&us, ast_sockaddr_port(&local)); - ast_rtp_instance_set_local_address(instance, &us); + if (ast_ouraddrfor(addr, &local)) { + /* Failed to update our address so reuse old local address */ + ast_rtp_instance_get_local_address(instance, &local); + } else { + ast_rtp_instance_set_local_address(instance, &local); + } } if (rtp->rtcp) { ast_debug(1, "Setting RTCP address on RTP instance '%p'\n", instance); ast_sockaddr_copy(&rtp->rtcp->them, addr); if (!ast_sockaddr_isnull(addr)) { - ast_sockaddr_set_port(&rtp->rtcp->them, - ast_sockaddr_port(addr) + 1); - } + ast_sockaddr_set_port(&rtp->rtcp->them, ast_sockaddr_port(addr) + 1); - if (!ast_sockaddr_isnull(addr)) { /* Update the local RTCP address with what is being used */ - ast_sockaddr_set_port(&us, ast_sockaddr_port(&local) + 1); - ast_sockaddr_copy(&rtp->rtcp->us, &us); + ast_sockaddr_set_port(&local, ast_sockaddr_port(&local) + 1); + ast_sockaddr_copy(&rtp->rtcp->us, &local); ast_free(rtp->rtcp->local_addr_str); - rtp->rtcp->local_addr_str = ast_strdup(ast_sockaddr_stringify(&us)); + rtp->rtcp->local_addr_str = ast_strdup(ast_sockaddr_stringify(&local)); } } @@ -5040,8 +5042,6 @@ static void ast_rtp_remote_address_set(struct ast_rtp_instance *instance, struct rtp->strict_rtp_state = STRICT_RTP_LEARN; rtp_learning_seq_init(&rtp->rtp_source_learn, rtp->seqno); } - - return; } /*! \brief Write t140 redundacy frame |