ast_sip_session_response_cb on_response;
/*! Whether to generate new SDP */
int generate_new_sdp;
- /*! Request to send */
- pjsip_tx_data *tdata;
AST_LIST_ENTRY(ast_sip_session_delayed_request) next;
};
ast_sip_session_request_creation_cb on_request_creation,
ast_sip_session_sdp_creation_cb on_sdp_creation,
ast_sip_session_response_cb on_response,
- int generate_new_sdp,
- pjsip_tx_data *tdata)
+ int generate_new_sdp)
{
struct ast_sip_session_delayed_request *delay = ast_calloc(1, sizeof(*delay));
if (!delay) {
delay->on_sdp_creation = on_sdp_creation;
delay->on_response = on_response;
delay->generate_new_sdp = generate_new_sdp;
- delay->tdata = tdata;
return delay;
}
{
ast_debug(3, "Sending delayed %s request to %s\n", delay->method, ast_sorcery_object_get_id(session->endpoint));
- if (delay->tdata) {
- ast_sip_session_send_request_with_cb(session, delay->tdata, delay->on_response);
- return 0;
- }
-
if (!strcmp(delay->method, "INVITE")) {
ast_sip_session_refresh(session, delay->on_request_creation,
delay->on_sdp_creation, delay->on_response, AST_SIP_SESSION_REFRESH_METHOD_INVITE, delay->generate_new_sdp);
static int delay_request(struct ast_sip_session *session, ast_sip_session_request_creation_cb on_request,
ast_sip_session_sdp_creation_cb on_sdp_creation, ast_sip_session_response_cb on_response,
- int generate_new_sdp, const char *method, pjsip_tx_data *tdata)
+ int generate_new_sdp, const char *method)
{
struct ast_sip_session_delayed_request *delay = delayed_request_alloc(method,
- on_request, on_sdp_creation, on_response, generate_new_sdp, tdata);
+ on_request, on_sdp_creation, on_response, generate_new_sdp);
if (!delay) {
return -1;
ast_debug(3, "Delaying sending request to %s because dialog has not been established...\n",
ast_sorcery_object_get_id(session->endpoint));
return delay_request(session, on_request_creation, on_sdp_creation, on_response, generate_new_sdp,
- method == AST_SIP_SESSION_REFRESH_METHOD_INVITE ? "INVITE" : "UPDATE", NULL);
+ method == AST_SIP_SESSION_REFRESH_METHOD_INVITE ? "INVITE" : "UPDATE");
}
if (method == AST_SIP_SESSION_REFRESH_METHOD_INVITE) {
ast_debug(3, "Delaying sending reinvite to %s because of outstanding transaction...\n",
ast_sorcery_object_get_id(session->endpoint));
return delay_request(session, on_request_creation, on_sdp_creation, on_response,
- generate_new_sdp, "INVITE", NULL);
+ generate_new_sdp, "INVITE");
} else if (inv_session->state != PJSIP_INV_STATE_CONFIRMED) {
/* Initial INVITE transaction failed to progress us to a confirmed state
* which means re-invites are not possible
ast_debug(3, "Delaying session refresh with new SDP to %s because SDP negotiation is not yet done...\n",
ast_sorcery_object_get_id(session->endpoint));
return delay_request(session, on_request_creation, on_sdp_creation, on_response, generate_new_sdp,
- method == AST_SIP_SESSION_REFRESH_METHOD_INVITE ? "INVITE" : "UPDATE", NULL);
+ method == AST_SIP_SESSION_REFRESH_METHOD_INVITE ? "INVITE" : "UPDATE");
}
new_sdp = generate_session_refresh_sdp(session);
ast_sip_push_task(rrd->session->serializer, really_resend_reinvite, entry->user_data);
}
-static void reschedule_reinvite(struct ast_sip_session *session, ast_sip_session_response_cb on_response, pjsip_tx_data *tdata)
+static void reschedule_reinvite(struct ast_sip_session *session, ast_sip_session_response_cb on_response)
{
struct ast_sip_session_delayed_request *delay = delayed_request_alloc("INVITE",
- NULL, NULL, on_response, 1, tdata);
+ NULL, NULL, on_response, 1);
pjsip_inv_session *inv = session->inv_session;
struct reschedule_reinvite_data *rrd = reschedule_reinvite_data_alloc(session, delay);
pj_time_val tv;
tsx->mod_data[session_module.id] = e->body.tsx_state.src.tdata->mod_data[session_module.id];
break;
case PJSIP_EVENT_RX_MSG:
+ cb = ast_sip_mod_data_get(tsx->mod_data, session_module.id, MOD_DATA_ON_RESPONSE);
handle_incoming(session, e->body.tsx_state.src.rdata, e->type,
AST_SIP_SESSION_AFTER_MEDIA);
if (tsx->method.id == PJSIP_INVITE_METHOD) {
if (tsx->state == PJSIP_TSX_STATE_COMPLETED) {
/* This means we got a non 2XX final response to our outgoing INVITE */
if (tsx->status_code == PJSIP_SC_REQUEST_PENDING) {
- reschedule_reinvite(session, tsx->mod_data[session_module.id], tsx->last_tx);
+ reschedule_reinvite(session, cb);
return;
} else if (inv->state == PJSIP_INV_STATE_CONFIRMED &&
tsx->status_code != 488) {
}
}
}
- if ((cb = ast_sip_mod_data_get(tsx->mod_data, session_module.id,
- MOD_DATA_ON_RESPONSE))) {
+ if (cb) {
cb(session, e->body.tsx_state.src.rdata);
}
case PJSIP_EVENT_TRANSPORT_ERROR: