Opened 8 years ago
Closed 7 years ago
#205 closed баг (fixed)
Гонки при вызове окончанием FXS в момент опускания трубки
Reported by: | alx | Owned by: | alx |
---|---|---|---|
Priority: | средний | Milestone: | 1 очередь |
Component: | any | Keywords: | |
Cc: |
Description
- Абонент 108 снял трубку.
- Абонент набрал 9.
- Перед самым истечением таймаута набора абонент положил трубку.
- Таймаут набора истек и произошел вызов, при этом занялось принявшее вызов окончание FXO.
- Истек таймер отбоя (500 мс), но при попытке снятия вызова произошла ошибка.
Как резальтат - окончание FXO осталось "висеть" вечно. Session timer успешно рефрешился.
Nov 15 08:12:28 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Idle: CAS A activity detected, ts=7, flags=0000, data=0 Nov 15 08:12:28 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Idle: CAS event, ts=7, flags=0000, data=7 Nov 15 08:12:28 sip_ua[623]: fxs.cpp:677: ==> ts 7: manual CAS event processing (abcd=15) Nov 15 08:12:28 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Dialtone: CAS event, ts=7, flags=0000, data=7 Nov 15 08:12:30 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Dialtone: DTMF detected, ts=7, flags=0000, data=9 Nov 15 08:12:30 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Dialing: Tone completed, ts=7, flags=0000, data=3 Nov 15 08:12:30 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Dialing: Tone detected, ts=7, flags=0000, data=255 Nov 15 08:12:34 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Dialing: CAS event, ts=7, flags=0000, data=15 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:233: ts 7: dialing 9 Nov 15 08:12:35 sip_ua[623]: user_agent.cpp:2478: --> ua_dial_out() "ëÕÌØÍÅÔØÅ× á. á." <sip:108@192.168.0.4> -> sip:9@192.168.0.4 ()... Nov 15 08:12:35 sip_ua[623]: user_agent.cpp:2913: eXosip_call_terminate(624, 0) error -3 Nov 15 08:12:35 sip_ua[623]: comcerto.cpp:3808: ts 7: ua_hangup() error -3 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Idle: Call disconnected, ts=7, flags=0000, data=624 Nov 15 08:12:35 sip_ua[645]: user_agent.cpp:1488: INVITE received: sip:9@127.0.0.1:6060;transport=udp (Call-ID: 1819733365@(null)) Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=1, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=2, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=3, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=4, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=5, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=6, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=8, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=9, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=10, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=11, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=14, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=15, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=17, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=29, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxo.cpp:338: ---> ts=33, state=Idle: Incoming call, ts=-1, flags=0001, data=625 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=10, state=Idle: Incoming call, ts=-1, flags=0002, data=625 Nov 15 08:12:35 sip_ua[623]: user_agent.cpp:2829: Call 625 routed to TS 33 Nov 15 08:12:35 sip_ua[623]: comcerto.cpp:3779: channel 33: answer Nov 15 08:12:35 sip_ua[623]: fxo.cpp:338: ---> ts=33, state=Connected: RTP parameters, ts=33, flags=0000, data=625 Nov 15 08:12:35 sip_ua[623]: comcerto.cpp:4564: --> ts 33: 192.168.0.4[10066] --> 192.168.0.4[10014] Nov 15 08:12:35 sip_ua[623]: comcerto.cpp:4565: --> ts 33: codec PCMA, VAD is off Nov 15 08:12:35 sip_ua[623]: comcerto.cpp:4566: --> audio pt: 8/8, event pt: 101/101, VBD pt: 98/98 Nov 15 08:12:35 sip_ua[623]: comcerto.cpp:4666: ts 33: starting RTP stream to 02:ad:c3:00:00:b4 Nov 15 08:12:35 sip_ua[623]: fxs.cpp:407: ---> ts=7, state=Idle: RTP parameters, ts=7, flags=0000, data=624
Change History (3)
comment:1 by , 8 years ago
comment:2 by , 7 years ago
Сделан синтетический тест: сразу после ua_dial_out() окончание FXS вызывает ua_hangup().
Проблема воспроизводится: у вызывающего - короткие гудки, а у вызываемого звенит звонок.
Применение флага как предложено выше проблему устранило.
Note:
See TracTickets
for help on using tickets.
Ошибка -3 означает OSIP_WRONG_STATE. Суть ее, похоже, в том, что пока на отправленное сообщение не получен какой-либо ответ (хотя бы 100), отменить вызов невозможно (см. #16).
В качестве решения предлагается следующее:
eXosip_call_terminate()
устанавливать какой-то флаг (needTerminate) в дескрипторе соединения, при получении любого ответа проверять этот флаг, и если флаг установлен, повторно вызыватьeXosip_call_terminate()
.