Страница 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
Возможно. Проблема в том, что нужно как-то сэмулировать ситуацию, а в голову пока не приходит ничего.