summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins2 <jenkins2@gerrit.asterisk.org>2017-09-28 13:25:51 -0500
committerGerrit Code Review <gerrit2@gerrit.digium.api>2017-09-28 13:25:51 -0500
commit88ba803110d8e25d0f5286279ab4745d4a2512e3 (patch)
treea885648f749bdd045e7d964981d34d571a250f21
parent821927b077e5b71c10c56c25b58138dc3e5e6854 (diff)
parent3c5c31f14cdf7dc6af79b6fafeff290c1a419b7d (diff)
Merge "pjsip_message_filter: Fix regression causing bad contact address" into 14
-rw-r--r--res/res_pjsip/pjsip_message_filter.c32
1 files changed, 23 insertions, 9 deletions
diff --git a/res/res_pjsip/pjsip_message_filter.c b/res/res_pjsip/pjsip_message_filter.c
index 63b8bd5af..d2f9b9562 100644
--- a/res/res_pjsip/pjsip_message_filter.c
+++ b/res/res_pjsip/pjsip_message_filter.c
@@ -36,13 +36,19 @@ struct filter_message_restrictions {
unsigned int disallow_from_domain_modification;
};
-static pjsip_module filter_module = {
- .name = { "Message Filtering", 17 },
+static pjsip_module filter_module_transport = {
+ .name = { "Message Filtering Transport", 27 },
.id = -1,
.priority = PJSIP_MOD_PRIORITY_TRANSPORT_LAYER,
+ .on_rx_request = filter_on_rx_message,
+};
+
+static pjsip_module filter_module_tsx = {
+ .name = { "Message Filtering TSX", 21 },
+ .id = -1,
+ .priority = PJSIP_MOD_PRIORITY_TSX_LAYER - 1,
.on_tx_request = filter_on_tx_message,
.on_tx_response = filter_on_tx_message,
- .on_rx_request = filter_on_rx_message,
};
/*! \brief Helper function to get (or allocate if not already present) restrictions on a message */
@@ -50,13 +56,13 @@ static struct filter_message_restrictions *get_restrictions(pjsip_tx_data *tdata
{
struct filter_message_restrictions *restrictions;
- restrictions = ast_sip_mod_data_get(tdata->mod_data, filter_module.id, MOD_DATA_RESTRICTIONS);
+ restrictions = ast_sip_mod_data_get(tdata->mod_data, filter_module_tsx.id, MOD_DATA_RESTRICTIONS);
if (restrictions) {
return restrictions;
}
restrictions = PJ_POOL_ALLOC_T(tdata->pool, struct filter_message_restrictions);
- ast_sip_mod_data_set(tdata->pool, tdata->mod_data, filter_module.id, MOD_DATA_RESTRICTIONS, restrictions);
+ ast_sip_mod_data_set(tdata->pool, tdata->mod_data, filter_module_tsx.id, MOD_DATA_RESTRICTIONS, restrictions);
return restrictions;
}
@@ -217,7 +223,8 @@ static void FUNC_ATTRS sanitize_tdata(pjsip_tx_data *tdata)
static pj_status_t filter_on_tx_message(pjsip_tx_data *tdata)
{
- struct filter_message_restrictions *restrictions = ast_sip_mod_data_get(tdata->mod_data, filter_module.id, MOD_DATA_RESTRICTIONS);
+ struct filter_message_restrictions *restrictions =
+ ast_sip_mod_data_get(tdata->mod_data, filter_module_transport.id, MOD_DATA_RESTRICTIONS);
pjsip_tpmgr_fla2_param prm;
pjsip_cseq_hdr *cseq;
pjsip_via_hdr *via;
@@ -277,7 +284,7 @@ static pj_status_t filter_on_tx_message(pjsip_tx_data *tdata)
/* prm.ret_addr is allocated from the tdata pool OR the transport so it is perfectly fine to just do an assignment like this */
pj_strassign(&uri->host, &prm.ret_addr);
uri->port = prm.ret_port;
- ast_debug(4, "Re-wrote Contact URI host/port to %.*s:%d\n",
+ ast_debug(5, "Re-wrote Contact URI host/port to %.*s:%d (this may be re-written again later)\n",
(int)pj_strlen(&uri->host), pj_strbuf(&uri->host), uri->port);
if (tdata->tp_info.transport->key.type == PJSIP_TRANSPORT_UDP ||
@@ -498,7 +505,8 @@ static pj_bool_t filter_on_rx_message(pjsip_rx_data *rdata)
void ast_res_pjsip_cleanup_message_filter(void)
{
- ast_sip_unregister_service(&filter_module);
+ ast_sip_unregister_service(&filter_module_tsx);
+ ast_sip_unregister_service(&filter_module_transport);
ast_sip_unregister_supplement(&filter_supplement);
ast_sip_session_unregister_supplement(&filter_session_supplement);
}
@@ -516,7 +524,13 @@ int ast_res_pjsip_init_message_filter(void)
return -1;
}
- if (ast_sip_register_service(&filter_module)) {
+ if (ast_sip_register_service(&filter_module_transport)) {
+ ast_log(LOG_ERROR, "Could not register message filter module for incoming and outgoing requests\n");
+ ast_res_pjsip_cleanup_message_filter();
+ return -1;
+ }
+
+ if (ast_sip_register_service(&filter_module_tsx)) {
ast_log(LOG_ERROR, "Could not register message filter module for incoming and outgoing requests\n");
ast_res_pjsip_cleanup_message_filter();
return -1;