Страница 4 из 4
Re: 183 Session Progress & 180 Ringing (PROGRESS & ALERTING)
Добавлено: 30 окт 2013, 14:07
tma
Только из 183 без SDP сделать 183 с SDP врядли получиться - для этого нужно сохранить SDP от 180 и направить аналогичный 183.
Либо 180 с SDP преобразовать в последовательность 180 без SDP + 183 с SDP. Это можно сделать так: При получении 180 с SDP послать вначале 180 без SDP, а затем полученный 180 с SDP преобразовать в 183 с SDP. Осталось проверить можно ли такое сделать на SER'е...
Re: 183 Session Progress & 180 Ringing (PROGRESS & ALERTING)
Добавлено: 30 окт 2013, 20:01
tma
Получилось преобразовать!
В секции onreply_route:
Код: Выделить всё
if (status == "180") {
if ( has_body("application/sdp") ) {
xlog("L_NOTICE", "==> CONVERT: 180 Ringing -> 180 + 183+SDP: ($Ri)$si:$Rp\n");
# Send 180 Ringing
t_reply("180","Ringing");
# Convert 180+SDP to 183+SDP
change_reply_status(183, "Progress");
}
}
# Convert 183 w/o SDP -> 180 w/o
if (status == "183") {
if ( ! has_body("application/sdp") ) {
xlog("L_NOTICE", "==> CONVERT: 183 Progress -> 180 Ringing: ($Ri)$si:$Rp\n");
change_reply_status(180, "Ringing");
}
}
Теперь 180+SDP меняется на 180 и 183+SDP. Early media проходит!
Главное, чтобы в логике не напутал...
Re: 183 Session Progress & 180 Ringing (PROGRESS & ALERTING)
Добавлено: 30 окт 2013, 20:11
Vlad1983
с первого взгляда вроде нормально
Re: 183 Session Progress & 180 Ringing (PROGRESS & ALERTING)
Добавлено: 30 окт 2013, 20:39
tma
Да, кроме одного.
180 с SDP преобразовывается в 180 + 183 с SDP.
Но если далее придет 183 без SDP, то он преобразуется в 180.
Т.е. может получиться так:
180 -> 183+SDP -> 180
Вот я и думаю, этот 180 не собъет early media нафиг?
Как сэмулировать - не знаю, разве что sipp заюзать...
Re: 183 Session Progress & 180 Ringing (PROGRESS & ALERTING)
Добавлено: 30 окт 2013, 21:10
Vlad1983
можно как-то так
Код: Выделить всё
if (status == "180") {
if ($avp(i:183)==1) {
drop();
}
if ( has_body("application/sdp") ) {
xlog("L_NOTICE", "==> CONVERT: 180 Ringing -> 180 + 183+SDP: ($Ri)$si:$Rp\n");
# Send 180 Ringing
t_reply("180","Ringing");
# Convert 180+SDP to 183+SDP
change_reply_status(183, "Progress");
}
}
# Convert 183 w/o SDP -> 180 w/o
if (status == "183") {
$avp(i:183)=1;
if ( ! has_body("application/sdp") ) {
xlog("L_NOTICE", "==> CONVERT: 183 Progress -> 180 Ringing: ($Ri)$si:$Rp\n");
change_reply_status(180, "Ringing");
}
}
Re: 183 Session Progress & 180 Ringing (PROGRESS & ALERTING)
Добавлено: 30 окт 2013, 23:30
tma
Возможно. Проблема в том, что нужно как-то сэмулировать ситуацию, а в голову пока не приходит ничего.