Влад, я попробовал ВСЕ 6 комбинаций. Ни одна не отработала.
Про что я и написал. А дамп снимаю медленно из-за того, что это не у меня в офисе железяка стоит а у клиента. И я туда раз в сутки и езжу. Удаленно можно конечно снимать, но я не могу заставить всех удаленно перестать звонить, дабы не флудить в канал. А народу тут полно.
Тут один знакомый подбросил патч. С ним, по его словам, оно здесь работало.
@ -18094,10 +18094,19 @
if (!req->ignore && p->invitestate != INV_CANCELLED && sip_cancel_destroy(p))
ast_log(LOG_WARNING, "Unable to cancel SIP destruction. Expect bad things.\n");
if (!req->ignore && p->owner) {
- ast_queue_control(p->owner, AST_CONTROL_RINGING);
- if (p->owner->_state != AST_STATE_UP) {
- ast_setstate(p->owner, AST_STATE_RINGING);
+ /* If we have INVITE dialog with early media and receive "Ringing"/"Queued" without SDP,
+ * we continue transmission of RTP to UAC.
+ *
+ * TODO: check if RTP is still being transmitting.
+ */
+ if (p->invitestate != INV_EARLY_MEDIA) {
+ ast_queue_control(p->owner, AST_CONTROL_RINGING);
+ if (p->owner->_state != AST_STATE_UP) {
+ ast_setstate(p->owner, AST_STATE_RINGING);
+ }
}
+ else
+ ast_queue_control(p->owner, AST_CONTROL_PROGRESS);
}
if (find_sdp(req)) {
if (p->invitestate != INV_CANCELLED)
@ -18128,7 +18137,15 @ * the same as we would treat a 180 Ringing
*/
if (!req->ignore && p->owner) {
- ast_queue_control(p->owner, AST_CONTROL_RINGING);
+ /* If we have INVITE dialog with early media and receive "Session progress" without SDP,
+ * we continue transmission of RTP to UAC.
+ *
+ * TODO: check if RTP is still being transmitting.
+ */
+ if (p->invitestate != INV_EARLY_MEDIA)
+ ast_queue_control(p->owner, AST_CONTROL_RINGING);
+ else
+ ast_queue_control(p->owner, AST_CONTROL_PROGRESS);
}
}
check_pendings(p);