mirror of
https://github.com/asterisk/asterisk.git
synced 2025-10-11 07:13:20 +00:00
Merge "pjsip_message_filter: Fix regression causing bad contact address" into 13
This commit is contained in:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user