From: Joshua C. Colp Date: Fri, 26 Jun 2020 10:18:55 +0000 (-0300) Subject: res_pjsip: Apply AOR outbound proxy to static contacts. X-Git-Tag: 17.6.0-rc1~9 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f129bbe38715797bce52f7b64d880e913f3a8012;p=thirdparty%2Fasterisk.git res_pjsip: Apply AOR outbound proxy to static contacts. The outbound proxy for an AOR was not being applied to any statically configured Contacts. This resulted in the OPTIONS requests being sent to the wrong target. This change sets the outbound proxy on statically configured contacts once the AOR configuration is done being applied. ASTERISK-28965 Change-Id: Ia60f3e93ea63f819c5a46bc8b54be2e588dfa9e0 --- diff --git a/res/res_pjsip/location.c b/res/res_pjsip/location.c index a41128e040..cef5ad78ff 100644 --- a/res/res_pjsip/location.c +++ b/res/res_pjsip/location.c @@ -1339,6 +1339,29 @@ static int contact_apply_handler(const struct ast_sorcery *sorcery, void *object return status ? 0 : -1; } +static int aor_apply_outbound_proxy(void *obj, void *arg, int flags) +{ + struct ast_sip_contact *contact = obj; + struct ast_sip_aor *aor = arg; + + ast_string_field_set(contact, outbound_proxy, aor->outbound_proxy); + + return 0; +} + +static int aor_apply_handler(const struct ast_sorcery *sorcery, void *object) +{ + struct ast_sip_aor *aor = object; + + if (!aor->permanent_contacts || ast_strlen_zero(aor->outbound_proxy)) { + return 0; + } + + ao2_callback(aor->permanent_contacts, OBJ_NODATA | OBJ_MULTIPLE, aor_apply_outbound_proxy, aor); + + return 0; +} + /*! \brief Initialize sorcery with location support */ int ast_sip_initialize_sorcery_location(void) { @@ -1355,7 +1378,7 @@ int ast_sip_initialize_sorcery_location(void) ast_sorcery_apply_default(sorcery, "aor", "config", "pjsip.conf,criteria=type=aor"); if (ast_sorcery_object_register(sorcery, "contact", contact_alloc, NULL, contact_apply_handler) || - ast_sorcery_object_register(sorcery, "aor", aor_alloc, NULL, NULL)) { + ast_sorcery_object_register(sorcery, "aor", aor_alloc, NULL, aor_apply_handler)) { return -1; }