.session_begin = chan_pjsip_session_begin,
.session_end = chan_pjsip_session_end,
.incoming_request = chan_pjsip_incoming_request,
- .incoming_response = chan_pjsip_incoming_response,
/* It is important that this supplement runs after media has been negotiated */
.response_priority = AST_SIP_SESSION_AFTER_MEDIA,
};
+/*! \brief SIP session supplement structure just for responses */
+static struct ast_sip_session_supplement chan_pjsip_supplement_response = {
+ .method = "INVITE",
+ .priority = AST_SIP_SUPPLEMENT_PRIORITY_CHANNEL,
+ .incoming_response = chan_pjsip_incoming_response,
+ .response_priority = AST_SIP_SESSION_BEFORE_MEDIA | AST_SIP_SESSION_AFTER_MEDIA,
+};
+
static int chan_pjsip_incoming_ack(struct ast_sip_session *session, struct pjsip_rx_data *rdata);
static struct ast_sip_session_supplement chan_pjsip_ack_supplement = {
goto end;
}
+ if (ast_sip_session_register_supplement(&chan_pjsip_supplement_response)) {
+ ast_log(LOG_ERROR, "Unable to register PJSIP supplement\n");
+ goto end;
+ }
+
if (!(pjsip_uids_onhold = ao2_container_alloc_hash(AO2_ALLOC_OPT_LOCK_RWLOCK,
AO2_CONTAINER_ALLOC_OPT_DUPS_REJECT, 37, uid_hold_hash_fn,
uid_hold_sort_fn, NULL))) {
if (ast_sip_session_register_supplement(&call_pickup_supplement)) {
ast_log(LOG_ERROR, "Unable to register PJSIP call pickup supplement\n");
- ast_sip_session_unregister_supplement(&chan_pjsip_supplement);
goto end;
}
if (ast_sip_session_register_supplement(&pbx_start_supplement)) {
ast_log(LOG_ERROR, "Unable to register PJSIP pbx start supplement\n");
- ast_sip_session_unregister_supplement(&chan_pjsip_supplement);
- ast_sip_session_unregister_supplement(&call_pickup_supplement);
goto end;
}
if (ast_sip_session_register_supplement(&chan_pjsip_ack_supplement)) {
ast_log(LOG_ERROR, "Unable to register PJSIP ACK supplement\n");
- ast_sip_session_unregister_supplement(&pbx_start_supplement);
- ast_sip_session_unregister_supplement(&chan_pjsip_supplement);
- ast_sip_session_unregister_supplement(&call_pickup_supplement);
goto end;
}
if (pjsip_channel_cli_register()) {
ast_log(LOG_ERROR, "Unable to register PJSIP Channel CLI\n");
- ast_sip_session_unregister_supplement(&chan_pjsip_ack_supplement);
- ast_sip_session_unregister_supplement(&pbx_start_supplement);
- ast_sip_session_unregister_supplement(&chan_pjsip_supplement);
- ast_sip_session_unregister_supplement(&call_pickup_supplement);
goto end;
}
end:
ao2_cleanup(pjsip_uids_onhold);
pjsip_uids_onhold = NULL;
+ ast_sip_session_unregister_supplement(&chan_pjsip_ack_supplement);
+ ast_sip_session_unregister_supplement(&pbx_start_supplement);
+ ast_sip_session_unregister_supplement(&chan_pjsip_supplement_response);
+ ast_sip_session_unregister_supplement(&chan_pjsip_supplement);
+ ast_sip_session_unregister_supplement(&call_pickup_supplement);
ast_custom_function_unregister(&dtmf_mode_function);
ast_custom_function_unregister(&media_offer_function);
ast_custom_function_unregister(&chan_pjsip_dial_contacts_function);
pjsip_channel_cli_unregister();
+ ast_sip_session_unregister_supplement(&chan_pjsip_supplement_response);
ast_sip_session_unregister_supplement(&chan_pjsip_supplement);
ast_sip_session_unregister_supplement(&pbx_start_supplement);
ast_sip_session_unregister_supplement(&chan_pjsip_ack_supplement);