Opened 8 years ago

Closed 8 years ago

Last modified 6 years ago

#307 closed улучшение (fixed)

Возобновление регистрации

Reported by: san Owned by: dimag
Priority: critical Milestone: 2 очередь
Component: ПО MC04-Dispatcher. Пульт диспетчера/техника Keywords: network disconnection
Cc: alx

Description (last modified by alx)

При пропадании связи с сервером мой пользователь потерял регистрацию, при возобновлении связи регистрацию он получил только после срабатывания таймаута перерегистрации.

Нужно чтобы пользователь получал регистрацию сразу, как только возможно.

Добавлено alx:
Период перерегистрации (то есть период, с которым UAC обновляет регистрацию, посылая сообщения REGISTER) должен быть меньше периода регистрации (величины, указанной в заголовке Expires). Разница между ними должна быть достаточной для того чтобы произвести обновление регистрации даже в плохих условиях связи. Разумной величиной мне видится что-то типа 30 секунд.

Change History (25)

comment:1 by san, 8 years ago

Description: modified (diff)

comment:2 by dimag, 8 years ago

Keywords: network disconnection added
Resolution: fixed
Status: newclosed

comment:3 by alx, 8 years ago

Дима, объясните, пожалуйста, суть данного бага (в комментарии к коммиту написано "ошибка 307", что, лично для меня, никак суть сделанного не поясняет).

Саша, я не понял описание проблемы.

Если, как ты пишешь, при потерянной связи пользователь потерял регистрацию, значит период регистрации истек, и, следовательно, таймер перерегистрации истек тем более, так как он заведомо меньше периода регистрации. Следовательно, на момент восстановления связи таймер перерегистрации уже истек.

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

comment:4 by alx, 8 years ago

Cc: alx added

comment:5 by san, 8 years ago

Попробую уточнить:

  1. Я выдернул сеть у пользователя на время превышающее период регистрации
  2. регистрация протухла
  3. вернул сеть - програма детектировала возобновления связи с сервером, но регистрацию не получила.
  4. Я показал проблему Диме и Дима сказал что регистрация будет примерно через период регистрации, и действительно, через некоторое время регистрация появилась.(отсюда и формулировка тикета)

in reply to:  5 comment:6 by alx, 8 years ago

Replying to san:

  1. Я показал проблему Диме и Дима сказал что регистрация будет примерно через период регистрации,

Дима, как так получилось, что период перерегистрации истек позднее самой регистрации? Таким макаром ведь регистрация будет протухать даже без нарушения связи...

comment:7 by alx, 8 years ago

Resolution: fixed
Status: closedreopened

Так как ответа не последовало, считаю описанное явление багом и переоткрываю тикет.

comment:8 by san, 8 years ago

Дима, опиши пожалуйста как исправил ситуацию и по какому алгоритму запускается таймер перерегистрации и на какое время

comment:9 by dimag, 8 years ago

В r342 и поздних при восстановление соединения происходит принудительная перергистрация SIP-клиента.

in reply to:  5 comment:10 by dimag, 8 years ago

Replying to san:

Попробую уточнить:

  1. Я выдернул сеть у пользователя на время превышающее период регистрации
  2. регистрация протухла
  3. вернул сеть - програма детектировала возобновления связи с сервером, но регистрацию не получила.
  4. Я показал проблему Диме и Дима сказал что регистрация будет примерно через период регистрации, и действительно, через некоторое время регистрация появилась.(отсюда и формулировка тикета)

Вы очевидно использовали более старую версию чем r342.

in reply to:  9 comment:11 by alx, 8 years ago

Replying to dimag:

В r342 и поздних при восстановление соединения происходит принудительная перергистрация SIP-клиента.

Что такое "принудительная перергистрация"? Чем она отличается от непринудительной?

comment:12 by dimag, 8 years ago

SIP клиенту можно послать запрос на немедленную отправку серверу сообщения об обновления регистрации - это принудительная перерегистрация.
По истечению определенного промежутка времени, SIP-клиент автоматически посылает сообщение об обновление регистрации - это непринудительная регистрация.

in reply to:  9 comment:13 by alx, 8 years ago

Replying to dimag:

В r342 и поздних при восстановление соединения происходит принудительная перергистрация SIP-клиента.

Для чего это делается?

Смотрите comment:3. Если таймер перерегистрации еще не истек, то и на сервере регистрация еще не должна протухнуть, поэтому и возобновлять ее "принудительно" не вижу смысла. Если же таймер перерегистрации может истечь позже чем таймер регистрации, то у нас и без потери соединения с сетью будет теряться регистрация. Поэтому я и настаиваю на том чтобы разобраться в этом вопросе.

Last edited 8 years ago by alx (previous) (diff)

comment:14 by alx, 8 years ago

Дима, пожалуйста, если хотите ответить на мой (или чей-либо еще) комментарий, добавляйте свой комментарий, а не исправляйте чужой. Во-первых, этим Вы вводите людей в заблуждение относительно моего мнения (я слов "При внезапном разрыве и соединения и его восстановлении, если пройдёт достаточно времени..." не писал), во-вторых, после вашего исправления получилось, что я сам себе отвечаю на свой вопрос, что выглядит странно, в-третьих, я не вижу, что Вы мне что-то ответили (так как новых комментариев не появилось).

При внезапном разрыве и соединения и его восстановлении, если пройдёт достаточно времени, FreeSwitch переводит пользователя программы в состояние нет соединения,

А без внезапного разрыва и соединения этого разве не происходит?

comment:15 by dimag, 8 years ago

Данный тикет появился по следующей причине. Если программу отключить от сети минут 5, на время превышающее период перерегистрации, то при подключение программы к сети, программа будет незарегистрированной на сервере, пока не будет сгенерированно сообщение о перерегистрации и программа не получит сообщение sophia::register. Для того, чтобы этого не происходило, я принудительно перерегистрирую программу после восстановления соединения.
Вот в чём суть вопроса.

in reply to:  15 comment:16 by alx, 8 years ago

Replying to dimag:

пока не будет сгенерированно сообщение о перерегистрации и программа не получит сообщение sophia::register.

Правильно ли я понял, что написанное с ваших слов в п. 4 этого комментария, а также в описании тикета, неверно - к моменту, когда пользователь потерял регистрацию, таймер перерегистрации уже истек? Каков период таймера перерегистрации по отношению к периоду регистрации - он больше, он меньше, они равны...?

comment:17 by dimag, 8 years ago

Таймер регистрации и период регистрации это одно и тоже - период регистрации.
С периодичностью заданной этим периодом посылаются следующие сообщения и конце послыается сообщение sophia::resister, как на логе внизу.

12:24:49.277 pjsua_core.c .TX 474 bytes Request msg REGISTER/cseq=38759 (tdta00248BF0) to UDP 192.168.0.63:5060:
REGISTER sip:192.168.0.63 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.81:50241;rport;branch=z9hG4bKPje1a3016c8f6c4ed283aae7584c218c8e
Max-Forwards: 70
From: <sip:2@192.168.0.63>;tag=6a76611d4a4e4840aa4efcfb409e27b4
To: <sip:2@192.168.0.63>
Call-ID: 035ee579a24144ffbb6544c093386dde
CSeq: 38759 REGISTER
Contact: <sip:2@192.168.0.81:50241;ob>
Expires: 20
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Content-Length: 0

--end msg--
12:24:49.277 pjsua_core.c .RX 662 bytes Response msg 401/REGISTER/cseq=38759 (rdata04C830AC) from UDP 192.168.0.63:5060:
SIP/2.0 401 Unauthorized
Via: SIP/2.0/UDP 192.168.0.81:50241;rport=50241;branch=z9hG4bKPje1a3016c8f6c4ed283aae7584c218c8e
From: <sip:2@192.168.0.63>;tag=6a76611d4a4e4840aa4efcfb409e27b4
To: <sip:2@192.168.0.63>;tag=j0862jZcgZ2Zr
Call-ID: 035ee579a24144ffbb6544c093386dde
CSeq: 38759 REGISTER
User-Agent: FreeSWITCH-mod_sofia/1.6.10+git~20160824T215404Z~726448d962~64bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
WWW-Authenticate: Digest realm="192.168.0.63", nonce="5d079fb1-d2dd-41f7-a658-5d3314e8cfd7", algorithm=MD5, qop="auth"
Content-Length: 0

--end msg--
12:24:49.277 pjsua_core.c ....TX 728 bytes Request msg REGISTER/cseq=38760 (tdta00248BF0) to UDP 192.168.0.63:5060:
REGISTER sip:192.168.0.63 SIP/2.0
Via: SIP/2.0/UDP 192.168.0.81:50241;rport;branch=z9hG4bKPj151851c1d0634d4e9c3e6a3490bf777e
Max-Forwards: 70
From: <sip:2@192.168.0.63>;tag=6a76611d4a4e4840aa4efcfb409e27b4
To: <sip:2@192.168.0.63>
Call-ID: 035ee579a24144ffbb6544c093386dde
CSeq: 38760 REGISTER
Contact: <sip:2@192.168.0.81:50241;ob>
Expires: 20
Allow: PRACK, INVITE, ACK, BYE, CANCEL, UPDATE, INFO, SUBSCRIBE, NOTIFY, REFER, MESSAGE, OPTIONS
Authorization: Digest username="2", realm="192.168.0.63", nonce="5d079fb1-d2dd-41f7-a658-5d3314e8cfd7", uri="sip:192.168.0.63", resp
onse="b191a2746d7c1ee6366f3174fda846d0", algorithm=MD5, cnonce="9b14ebb1c26e4a16a726e7d4637026da", qop=auth, nc=00000001
Content-Length: 0

--end msg--
12:24:49.277 pjsua_core.c .RX 620 bytes Response msg 200/REGISTER/cseq=38760 (rdata04C830AC) from UDP 192.168.0.63:5060:
SIP/2.0 200 OK
Via: SIP/2.0/UDP 192.168.0.81:50241;rport=50241;branch=z9hG4bKPj151851c1d0634d4e9c3e6a3490bf777e
From: <sip:2@192.168.0.63>;tag=6a76611d4a4e4840aa4efcfb409e27b4
To: <sip:2@192.168.0.63>;tag=K91Z4DggD8rjm
Call-ID: 035ee579a24144ffbb6544c093386dde
CSeq: 38760 REGISTER
Contact: <sip:2@192.168.0.81:50241;ob>;expires=20
Date: Fri, 16 Sep 2016 07:24:46 GMT
User-Agent: FreeSWITCH-mod_sofia/1.6.10+git~20160824T215404Z~726448d962~64bit
Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, INFO, UPDATE, REGISTER, REFER, NOTIFY, PUBLISH, SUBSCRIBE
Supported: timer, path, replaces
Content-Length: 0

--end msg--
12:24:49.277 pjsua_acc.c ....SIP outbound status for acc 0 is not active
12:24:49.287 pjsua_acc.c ....sip:2@192.168.0.63: registration success, status=200 (OK), will re-register in 20 seconds
12:24:49.287 pjsua_acc.c ....Keep-alive timer started for acc 0, destination:192.168.0.63:5060, interval:15s
CUSTOM - sofia::register - 2

in reply to:  17 comment:18 by alx, 8 years ago

Description: modified (diff)

Replying to dimag:

Таймер регистрации и период регистрации это одно и тоже - период регистрации.
С периодичностью заданной этим периодом посылаются следующие сообщения

Это неправильное поведение. Сообщение REGISTER должно посылаться не с периодом регистрации, а с меньшим, чем период регистрации, периодом (в комментариях выше я называл его периодом перерегистрации), иначе могут возникать пропуски входящих вызовов из-за того, что UAC не успел обновить регистрацию до истечения ее периода. Добавил это требование в описание тикета.

comment:19 by dimag, 8 years ago

То есть вы предлагаете принудительно перерегистрировать SIP клиента из программы с интервалом на 30 секунд меньшим чем заданный период регистрации в настройках?

comment:20 by dimag, 8 years ago

Resolution: fixed
Status: reopenedclosed

r450
Принудительно перерегистрирую SIP-клиента с периодом заданным в описание тикета.

comment:21 by san, 8 years ago

Наверняка в самом сип-клиенте, должна быть отдельная настройка таймаутов регистрации и перерегистрации.
нет?

in reply to:  19 comment:22 by alx, 8 years ago

Replying to dimag:

То есть вы предлагаете принудительно перерегистрировать SIP клиента из программы с интервалом на 30 секунд меньшим чем заданный период регистрации в настройках?

Нет, я этого не предлагаю. Я лишь говорю, как программа должна себя вести. И Вы поняли меня правильно - период посылки сообщения REGISTER для перерегистрации должен быть меньше периода регистрации, который указан в поле Expires. А каким образом это будет реализовано внутри программы - это ваше дело. Я предложить конкретной реализации не могу, так как не знаком с выбранной Вами библиотекой PJSIP.

in reply to:  21 comment:23 by alx, 8 years ago

Replying to san:

Наверняка в самом сип-клиенте, должна быть отдельная настройка таймаутов регистрации и перерегистрации. нет?

В данном случае SIP-клиент - это наша программа MC04-Dispatcher. У нее настраивается период регистрации. Настраивать отдельно период перерегистрации я не вижу практического смысла. По-моему вполне достаточно того, что программа выберет этот период автоматически с таким расчетом, чтобы успеть перерегистрироваться до истечения таймера на сервере.

comment:24 by san, 8 years ago

Под сип-клиентом тут я имел ввиду его реализацию в библиотеке PJSIP

comment:25 by san, 6 years ago

Milestone: Текущее2 очередь

Milestone renamed

Note: See TracTickets for help on using tickets.