diff --git a/res/res_pjsip.c b/res/res_pjsip.c
index c06b67ecf7b5c211cbd65023f2d04b7930412411..bebe941b51172ed3139ee33e37ff27d46f1b3966 100644
--- a/res/res_pjsip.c
+++ b/res/res_pjsip.c
@@ -3513,46 +3513,48 @@ static void send_request_cb(void *token, pjsip_event *e)
 	pjsip_rx_data *challenge;
 	struct ast_sip_supplement *supplement;
 
-	switch(e->body.tsx_state.type) {
-	case PJSIP_EVENT_TRANSPORT_ERROR:
-	case PJSIP_EVENT_TIMER:
-		/*
-		 * Check the request status on transport error or timeout. A transport
-		 * error can occur when a TCP socket closes and that can be the result
-		 * of a 503. Also we may need to failover on a timeout (408).
-		 */
-		if (check_request_status(req_data, e)) {
-			return;
-		}
-		break;
-	case PJSIP_EVENT_RX_MSG:
-		challenge = e->body.tsx_state.src.rdata;
-
-		/*
-		 * Call any supplements that want to know about a response
-		 * with any received data.
-		 */
-		AST_RWLIST_RDLOCK(&supplements);
-		AST_LIST_TRAVERSE(&supplements, supplement, next) {
-			if (supplement->incoming_response
-				&& does_method_match(&challenge->msg_info.cseq->method.name,
-					supplement->method)) {
-				supplement->incoming_response(req_data->endpoint, challenge);
+	if (e->type == PJSIP_EVENT_TSX_STATE) {
+		switch(e->body.tsx_state.type) {
+		case PJSIP_EVENT_TRANSPORT_ERROR:
+		case PJSIP_EVENT_TIMER:
+			/*
+			 * Check the request status on transport error or timeout. A transport
+			 * error can occur when a TCP socket closes and that can be the result
+			 * of a 503. Also we may need to failover on a timeout (408).
+			 */
+			if (check_request_status(req_data, e)) {
+				return;
 			}
-		}
-		AST_RWLIST_UNLOCK(&supplements);
+			break;
+		case PJSIP_EVENT_RX_MSG:
+			challenge = e->body.tsx_state.src.rdata;
 
-		if (check_request_status(req_data, e)) {
 			/*
-			 * Request with challenge response or failover sent.
-			 * Passed our req_data ref to the new request.
+			 * Call any supplements that want to know about a response
+			 * with any received data.
 			 */
-			return;
+			AST_RWLIST_RDLOCK(&supplements);
+			AST_LIST_TRAVERSE(&supplements, supplement, next) {
+				if (supplement->incoming_response
+					&& does_method_match(&challenge->msg_info.cseq->method.name,
+						supplement->method)) {
+					supplement->incoming_response(req_data->endpoint, challenge);
+				}
+			}
+			AST_RWLIST_UNLOCK(&supplements);
+
+			if (check_request_status(req_data, e)) {
+				/*
+				 * Request with challenge response or failover sent.
+				 * Passed our req_data ref to the new request.
+				 */
+				return;
+			}
+			break;
+		default:
+			ast_log(LOG_ERROR, "Unexpected PJSIP event %u\n", e->body.tsx_state.type);
+			break;
 		}
-		break;
-	default:
-		ast_log(LOG_ERROR, "Unexpected PJSIP event %u\n", e->body.tsx_state.type);
-		break;
 	}
 
 	if (req_data->callback) {