Merge "pjsip_message_filter: Fix regression causing bad contact address" into 13

This commit is contained in:
Jenkins2
2017-09-28 13:13:06 -05:00
committed by Gerrit Code Review

View File

@@ -36,13 +36,19 @@ struct filter_message_restrictions {
unsigned int disallow_from_domain_modification; unsigned int disallow_from_domain_modification;
}; };
static pjsip_module filter_module = { static pjsip_module filter_module_transport = {
.name = { "Message Filtering", 17 }, .name = { "Message Filtering Transport", 27 },
.id = -1, .id = -1,
.priority = PJSIP_MOD_PRIORITY_TRANSPORT_LAYER, .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_request = filter_on_tx_message,
.on_tx_response = 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 */ /*! \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; 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) { if (restrictions) {
return restrictions; return restrictions;
} }
restrictions = PJ_POOL_ALLOC_T(tdata->pool, struct filter_message_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; 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) 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_tpmgr_fla2_param prm;
pjsip_cseq_hdr *cseq; pjsip_cseq_hdr *cseq;
pjsip_via_hdr *via; 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 */ /* 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); pj_strassign(&uri->host, &prm.ret_addr);
uri->port = prm.ret_port; 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); (int)pj_strlen(&uri->host), pj_strbuf(&uri->host), uri->port);
if (tdata->tp_info.transport->key.type == PJSIP_TRANSPORT_UDP || 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) 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_unregister_supplement(&filter_supplement);
ast_sip_session_unregister_supplement(&filter_session_supplement); ast_sip_session_unregister_supplement(&filter_session_supplement);
} }
@@ -516,7 +524,13 @@ int ast_res_pjsip_init_message_filter(void)
return -1; 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_log(LOG_ERROR, "Could not register message filter module for incoming and outgoing requests\n");
ast_res_pjsip_cleanup_message_filter(); ast_res_pjsip_cleanup_message_filter();
return -1; return -1;