res/res_pjsip_session: allow SDP answer to be regenerated

If an SDP answer hasn't been sent yet, it's legal to change it.
This is required for PJSIP_DTMF_MODE to work correctly, and can
also have use in the future for updating codecs too.

ASTERISK-27209 #close

Change-Id: Idbbfb7cb3f72fbd96c94d10d93540f69bd51e7a1
This commit is contained in:
Torrey Searle
2017-08-21 11:28:52 +02:00
parent 7937d5b8b3
commit 33a648d4c6
3 changed files with 61 additions and 1 deletions

View File

@@ -1241,10 +1241,13 @@ static int dtmf_mode_refresh_cb(void *obj)
struct refresh_data *data = obj;
if (data->session->inv_session->state == PJSIP_INV_STATE_CONFIRMED) {
ast_debug(3, "Changing DTMF mode on channel %s after OFFER/ANSER completion. Sending session refresh\n", ast_channel_name(data->session->channel));
ast_debug(3, "Changing DTMF mode on channel %s after OFFER/ANSWER completion. Sending session refresh\n", ast_channel_name(data->session->channel));
ast_sip_session_refresh(data->session, NULL, NULL,
sip_session_response_cb, data->method, 1, NULL);
} else if (data->session->inv_session->state == PJSIP_INV_STATE_INCOMING) {
ast_debug(3, "Changing DTMF mode on channel %s during OFFER/ANSWER exchange. Updating SDP answer\n", ast_channel_name(data->session->channel));
ast_sip_session_regenerate_answer(data->session, NULL);
}
return 0;