summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Michelson <mmichelson@digium.com>2016-11-08 10:48:32 -0600
committerMark Michelson <mmichelson@digium.com>2016-11-08 10:48:32 -0600
commite043d1a55cf356066b3b39ebac8b4bbb612ce807 (patch)
tree221f639ffb6257df19d6664a5d0b0e5e1d876b1a
parent814d8a99d13f599436afe84808f426adca3aa79c (diff)
res_pjsip_session: Do not call session supplements when it's too late.
res_pjsip_sesssion was hooking into transaction and invite state changes. One of the reasons for doing so was due to the PJSIP_EVENT_TX_MSG event. The idea was that we were hooking into the message sending process, and so we should call session supplements to alter the outgoing message. In reality, this event was meant to indicate that the message either a) had already been sent, or b) required a DNS lookup and would be sent when the DNS query completed. In case (a), this meant we were altering an already-sent request/response for no reason. In case (b), this potentially meant we could be trying to alter a request/response at the same time that the DNS resolution completed. In this case, it meant we might be stomping on memory being used by the thread actually sending the message. This caused potential crashes and memory corruption. This patch removes the calls to session supplements from the case where the PJSIP_EVENT_TX_MSG event occurs. In all of these cases, trying to alter the message at this point is too late, and it can cause nothing but harm to try to do it. Because there were no longer any calls to the handle_outgoing() function, it has been removed. Change-Id: Ibcc223fb1c3a237927f38754e0429e80ee301e92
-rw-r--r--res/res_pjsip_session.c15
1 files changed, 0 insertions, 15 deletions
diff --git a/res/res_pjsip_session.c b/res/res_pjsip_session.c
index 8b8e9d114..9e363a18f 100644
--- a/res/res_pjsip_session.c
+++ b/res/res_pjsip_session.c
@@ -61,7 +61,6 @@ static int handle_incoming(struct ast_sip_session *session, pjsip_rx_data *rdata
enum ast_sip_session_response_priority response_priority);
static void handle_outgoing_request(struct ast_sip_session *session, pjsip_tx_data *tdata);
static void handle_outgoing_response(struct ast_sip_session *session, pjsip_tx_data *tdata);
-static void handle_outgoing(struct ast_sip_session *session, pjsip_tx_data *tdata);
/*! \brief NAT hook for modifying outgoing messages with SDP */
static struct ast_sip_nat_hook *nat_hook;
@@ -2501,17 +2500,6 @@ static void handle_outgoing_response(struct ast_sip_session *session, pjsip_tx_d
}
}
-static void handle_outgoing(struct ast_sip_session *session, pjsip_tx_data *tdata)
-{
- ast_debug(3, "Sending %s\n", tdata->msg->type == PJSIP_REQUEST_MSG ?
- "request" : "response");
- if (tdata->msg->type == PJSIP_REQUEST_MSG) {
- handle_outgoing_request(session, tdata);
- } else {
- handle_outgoing_response(session, tdata);
- }
-}
-
static int session_end(void *vsession)
{
struct ast_sip_session *session = vsession;
@@ -2599,7 +2587,6 @@ static void session_inv_on_state_changed(pjsip_inv_session *inv, pjsip_event *e)
switch(type) {
case PJSIP_EVENT_TX_MSG:
- handle_outgoing(session, e->body.tx_msg.tdata);
break;
case PJSIP_EVENT_RX_MSG:
handle_incoming_before_media(inv, session, e->body.rx_msg.rdata);
@@ -2609,7 +2596,6 @@ static void session_inv_on_state_changed(pjsip_inv_session *inv, pjsip_event *e)
/* Transaction state changes are prompted by some other underlying event. */
switch(e->body.tsx_state.type) {
case PJSIP_EVENT_TX_MSG:
- handle_outgoing(session, e->body.tsx_state.src.tdata);
break;
case PJSIP_EVENT_RX_MSG:
handle_incoming_before_media(inv, session, e->body.tsx_state.src.rdata);
@@ -2670,7 +2656,6 @@ static void session_inv_on_tsx_state_changed(pjsip_inv_session *inv, pjsip_trans
}
switch (e->body.tsx_state.type) {
case PJSIP_EVENT_TX_MSG:
- handle_outgoing(session, e->body.tsx_state.src.tdata);
/* When we create an outgoing request, we do not have access to the transaction that
* is created. Instead, We have to place transaction-specific data in the tdata. Here,
* we transfer the data into the transaction. This way, when we receive a response, we