Opened 7 years ago

Closed 7 years ago

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

Баг при переключении между линиями

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

Description

  1. в окончание FXO поступил вызов. Зазвенели телефоны.
  2. Абонент 102 ответил на вызов. Пошел разговор.
  3. Абонент 102 нажал Flash. Соединение с FXO ушло на холд.
  4. Абонент 102 набрал номер 124.
  5. Вызываемый ответил, состоялся разговор.
  6. Абонент нажал 102 и вернулся к первой линии.
  7. Разговор продолжился, в это время абонент 124 отбился.
  8. Абонент 102 нажал Flash, соединение с FXO ушло на холд.
  9. Абонент 102 набрал номер 203.
  10. В ответ на INVITE пришло "100 Trying", но больше никаких ответов не поступало.
  11. Абонент 102 недождался никакой реакции на вызов и снова нажал Flash. Но возврата к линии на холде не произошло!
  12. Абонент 102 еще несколько раз с интервалом несколько секунд нажимал Flash, но ничего не происходило.
  13. Абонент 102 положил трубку, в этот момент возникла ошибка при попытке сформировать сообщение REFER.

Вот фрагмент лога:

Nov 17 09:13:49 sip_ua[1298]: fxs.cpp:228: ts 2: dialing 203
Nov 17 09:13:49 sip_ua[1298]: user_agent.cpp:2426: --> ua_dial_out() "õÛÁËÏ× ÷. á." <sip:102@192.168.0.4> -> sip:203@192.168.0.4 ()...
Nov 17 09:13:49 sip_ua[1320]: user_agent.cpp:1650: ---> 100 for call 352
Nov 17 09:13:49 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: Tone detected, ts=2, flags=0000, data=255
Nov 17 09:14:02 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=15
Nov 17 09:14:02 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=7
Nov 17 09:14:02 sip_ua[1298]: fxs.cpp:296: ==> flash pressed
Nov 17 09:14:08 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=15
Nov 17 09:14:09 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=7
Nov 17 09:14:09 sip_ua[1298]: fxs.cpp:296: ==> flash pressed
Nov 17 09:14:12 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=15
Nov 17 09:14:12 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=7
Nov 17 09:14:12 sip_ua[1298]: fxs.cpp:296: ==> flash pressed
Nov 17 09:14:13 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=15
Nov 17 09:14:13 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=7
Nov 17 09:14:13 sip_ua[1298]: fxs.cpp:296: ==> flash pressed
Nov 17 09:14:15 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=15
Nov 17 09:14:15 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=7
Nov 17 09:14:15 sip_ua[1298]: fxs.cpp:296: ==> flash pressed
Nov 17 09:14:18 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Calling: CAS event, ts=2, flags=0000, data=15
Nov 17 09:14:18 sip_ua[1298]: user_agent.cpp:2720: eXosip_call_build_refer(did=0, referto=sip:fxo1@192.168.0.4?Replaces=901055821%3Bto-tag%3
Nov 17 09:14:21 sip_ua[1298]: fxs.cpp:402: ---> ts=2, state=Idle: Call disconnected, ts=2, flags=0000, data=352
Nov 17 09:14:45 sip_ua[1320]: user_agent.cpp:2133: ---> UPDATE in call received
Nov 17 09:14:45 sip_ua[1298]: fxo.cpp:342: ---> ts=33, state=Connected: Message answered 2xx, ts=33, flags=0000, data=336

После этого линия FXO так и осталась занятой с проигрыванием ей музыки.

Change History (3)

comment:1 by alx, 7 years ago

При повторных нажатиях Flash ничего не происходило из-за того что функция switchCalls() умеет работать только если текущее соединение уже в отвеченном состоянии (channelStateConnected) или текущего соединения нет (active_call.id < 0).

Код ошибки -2 означает OSIP_BADPARAMETER. Очевидно, неудача вызвана тем, что параметр did равен нулю (мы еще не знаем идентификатор диалога для нашего соединения).

Для решения проблемы предлагается:

  • проверять успешность завершения ua_refer() чтобы не оставлять "висящих" соединений;
  • при нажатии Flash в предответном состоянии текущего соединения отбивать его и переключиться на удерживаемое соединение.

comment:2 by alx, 7 years ago

По результатам устного обсуждения с Александром подтверждена правильность решения отбивать находящееся в предответном состоянии соединение при возврате к удерживаемому соединению.

comment:3 by alx, 7 years ago

Resolution: готово
Status: newclosed

Исправлено в r1107.

Note: See TracTickets for help on using tickets.