diff --git a/channels/chan_sip.c b/channels/chan_sip.c index 83af7501ee8bbbf3e7072b3c0be6c3c24ea81202..8308225ef9fc923fe79b6e00fc21d7f2e7e26646 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -19985,6 +19985,13 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest if (!req->ignore && p->invitestate != INV_CANCELLED && sip_cancel_destroy(p)) { ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n"); } + /* Store Route-set from provisional SIP responses so + * early-dialog request can be routed properly + * */ + parse_ok_contact(p, req); + if (!reinvite) { + build_route(p, req, 1); + } if (!req->ignore && p->owner) { if (get_rpid(p, req)) { /* Queue a connected line update */ @@ -20049,6 +20056,13 @@ static void handle_response_invite(struct sip_pvt *p, int resp, const char *rest if (!req->ignore && (p->invitestate != INV_CANCELLED) && sip_cancel_destroy(p)) { ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n"); } + /* Store Route-set from provisional SIP responses so + * early-dialog request can be routed properly + * */ + parse_ok_contact(p, req); + if (!reinvite) { + build_route(p, req, 1); + } if (!req->ignore && p->owner) { if (get_rpid(p, req)) { /* Queue a connected line update */