uint16_t seq;
uint32_t ssrc;
uint8_t sending_dtmf;
+ uint8_t need_mark;
switch_payload_t payload;
switch_payload_t rpayload;
switch_rtp_invalid_handler_t invalid_handler;
if (loops != 1) {
rtp_session->last_write_ts = rtp_session->dtmf_data.timestamp_dtmf + rtp_session->dtmf_data.out_digit_sub_sofar;
- rtp_session->sending_dtmf = 0;
+ rtp_session->sending_dtmf = 2;
+ rtp_session->need_mark = 1;
+
if (switch_test_flag(rtp_session, SWITCH_RTP_FLAG_USE_TIMER)) {
rtp_session->last_write_samplecount = rtp_session->timer.samplecount;
rtp_session->next_write_samplecount = rtp_session->timer.samplecount + samples * 5;
do_2833(rtp_session, session);
- if (rtp_session->dtmf_data.out_digit_dur > 0 || rtp_session->dtmf_data.in_digit_sanity || rtp_session->sending_dtmf ||
+ if (rtp_session->dtmf_data.out_digit_dur > 0 || rtp_session->dtmf_data.in_digit_sanity || rtp_session->sending_dtmf == 1 ||
switch_queue_size(rtp_session->dtmf_data.dtmf_queue) || switch_queue_size(rtp_session->dtmf_data.dtmf_inqueue)) {
pt = 20000;
}
m++;
}
+ if (rtp_session->need_mark && !rtp_session->sending_dtmf) {
+ m++;
+ rtp_session->need_mark = 0;
+ }
+
send_msg->header.m = (m && !(rtp_session->rtp_bugs & RTP_BUG_NEVER_SEND_MARKER)) ? 1 : 0;
memcpy(send_msg->body, data, datalen);
send = 0;
}
+ if (rtp_session->sending_dtmf == 2) {
+ rtp_session->sending_dtmf = 0;
+
+ }
+
if (send) {
send_msg->header.seq = htons(++rtp_session->seq);