Opened 3 years ago

Closed 3 years ago

#379 closed баг (готово)

Проверять успешность ответа в сторону сети IP

Reported by: alx Owned by: alx
Priority: средний Milestone: 1 очередь
Component: any Keywords:
Cc:

Description

Обнаружена возможность ситуации, когда канальное окончание пытается передать ответ "200 OK" в ответ на входящий INVITE, но из-за того что перед этим был принят CANCEL, отправка ответа заканчивается неудачей. Однако успешность отправки не проверяется, в результате чего происходит рассинхранизация состояний местного и удаленного канальных окончаний: местное думает, что соединение установлено и находится в состоянии Connected, а удаленное выполнило отмену вызова и вернулось в исходное. Примером такого окончания является FXO, выполняющее ответ вызовом localAnswer().

Предлагается пройтись по коду канальных окончаний и добавить необходимые проверки успешности. В случае неуспешной отправки ответа отбивать соединение и переходить в исходное.

Change History (17)

comment:1 by alx, 3 years ago

In 1960/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание FXO выполняет hangup(). See #379.

comment:2 by alx, 3 years ago

In 1961/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание 1IND выполняет send_disconnect(). See #379.

comment:3 by alx, 3 years ago

In 1963/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание PRI выполняет pri_hangup(). See #379.

comment:4 by alx, 3 years ago

In 1964/sip_ua:

При получении ответа из канала TDM и неудачной отправке "200 OK" в сети IP
канальное окончание R2 передает в канал отбой и переходит в блокировку. See #379.

comment:5 by alx, 3 years ago

In 1965/sip_ua:

При получении ответа из канала TDM и неудачной отправке "200 OK" в сети IP
канальное окончание R2DTMF передает в канал отбой и переходит в блокировку. See #379.

comment:6 by alx, 3 years ago

In 1966/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание PPD выполняет hangup() и переходит
в исходное состояние, опционально выдав сигнал "Выключить ретрансляторы". See #379.

comment:7 by alx, 3 years ago

In 1967/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание АДАСЭ передает в канал
отбойный сигнал и переходит в исходное состояние. See #379.

comment:8 by alx, 3 years ago

In 1968/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание МБ передает в канал
отбой и переходит в исходное состояние. See #379.

comment:9 by alx, 3 years ago

In 1969/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание EM освобождает канал и переходит в исходное состояние. See #379.

comment:10 by alx, 3 years ago

In 1970/sip_ua:

Вдогонку к предыдущему коммиту сделана обработка возможного неудачного завершения
вызова localAnswer() еще в одном месте, забытом ранее. See #379.

comment:11 by alx, 3 years ago

In 1971/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание SL выполняет отбой и переходит в исходное. See #379.

comment:12 by alx, 3 years ago

In 1972/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание DS передает в канал сигнал "Отбой" и переходит в исходное. See #379.

comment:13 by alx, 3 years ago

In 1973/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание SS7 передает вызываемому сообщение REL,
деактивирует канал и переходит в исходное состояние. See #379.

comment:14 by alx, 3 years ago

In 1974/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание FXS переходит в состояние Busy. See #379.

comment:15 by alx, 3 years ago

In 1975/sip_ua:

При неудачном выполнении ответа в сторону сети IP окончание R1.5 переходит в исходное состояние. See #379.

comment:16 by alx, 3 years ago

Виртуальные абоненты в правке не нуждаются, так как даже без проверки успешности localAnswer() они перейдут в исходное то таймауту или после завершения воспроизведения голосового анонса.

comment:17 by alx, 3 years ago

Resolution: готово
Status: newclosed

r1976: eсли при ответе канального окончания в localAnswer() не смогли послать "200 OK" в сеть IP,
то дескриптор соединения не отмечаем отвеченным и не запускаем таймер соединения.
Думаю, это все, что следовало исправить по данной проблеме.

Note: See TracTickets for help on using tickets.