AF
Asterisk Forum
обсуждения телефонии, VoIP и IP-PBX
12разделов
5 423тем
34 385сообщений
← К списку тем

Нужна помощь: notify через asterisk

Asterisk IP PBX 13 сообщений -
#1

Пишется патч для NOTIFY устройств через asterisk с возможностью авторизации этого запроса. Основную работу уже сделал, отправляется запрос, отправляется авторизованный ответ, но что-то не работает.
Вопрос: все ли нормально в приведенном SIP диалоге:

Если не подскажете, то придется долго рыть RFC... Sad Голова под конец дня уже не варит.

Код:

NOTIFY sip:101@192.168.32.125:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.32.1:5060;branch=z9hG4bK1adb8aac;rport
Max-Forwards: 70
From: "asterisk" ;tag=as10e66bd1
To:
Contact:
Call-ID: 1f60baa42cf26f916a4f6be30c0957d0@192.168.32.1
CSeq: 102 NOTIFY
User-Agent: Asterisk PBX SVN-trunk-r67164M
Event: resync
Content-Length: 0


---
linux*CLI>

SIP/2.0 401 Unauthorized
To: ;tag=5fd23959e1582407i0
From: "asterisk" ;tag=as10e66bd1
Call-ID: 1f60baa42cf26f916a4f6be30c0957d0@192.168.32.1
CSeq: 102 NOTIFY
Via: SIP/2.0/UDP 192.168.32.1:5060;branch=z9hG4bK1adb8aac
Server: linksys-spa941
WWW-Authenticate: Digest realm="192.168.32.1", nonce="fd618a6e", qop="auth", algorithm=md5
Content-Length: 0



--- (9 headers 0 lines) ---
= Found Their Call ID: 1f60baa42cf26f916a4f6be30c0957d0@192.168.32.1 Their Tag Our tag: as10e66bd1

Reliably Transmitting (no NAT) to 192.168.32.125:5060:
NOTIFY sip:101@192.168.32.125:5060 SIP/2.0
Via: SIP/2.0/UDP 192.168.32.1:5060;branch=z9hG4bK4b74fcb8;rport
Max-Forwards: 70
From: "asterisk" ;tag=as10e66bd1
To: ;tag=5fd23959e1582407i0
Contact:
Call-ID: 1f60baa42cf26f916a4f6be30c0957d0@192.168.32.1
CSeq: 103 NOTIFY
User-Agent: Asterisk PBX SVN-trunk-r67164M
Authorization: Digest username="101", realm="192.168.32.1", algorithm=MD5, uri="sip:101@192.168.32.125:5060", nonce="fd618a6e", response="d2104c7090b825a08b38d43b1557e5e0", opaque="", qop=auth, cnonce="26dcecc5", nc=00000001
Date: Tue, 05 Jun 2007 07:02:58 GMT
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY
Supported: replaces
Content-Length: 0


---
linux*CLI>

SIP/2.0 481 Call Leg/Transaction Does Not Exist
To: ;tag=5fd23959e1582407i0
From: "asterisk" ;tag=as10e66bd1
Call-ID: 1f60baa42cf26f916a4f6be30c0957d0@192.168.32.1
CSeq: 103 NOTIFY
Via: SIP/2.0/UDP 192.168.32.1:5060;branch=z9hG4bK4b74fcb8
Server: linksys-spa941
Content-Length: 0


_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
#2

По Гольдштейну (и RFC 3265) NOTIFY должен содержать заголовок "Subscription-State" со значением или "active", или "pending", или "terminated".
А еще во втором NOTIFY нет заголовка Event (или в пределах одного диалога его снова не надо?)

(http://www.ietf.org/rfc/rfc3265.txt стр 14)

_________________
Everything over IP & IP over Everything
#3

О! Огромное спасибо, действительно заголовка Event нет, это очень и очень критично. Насчет "Subscription-State" я посмотрю Гольдштейна, но подозреваю что здесь его не надо.

Added after 21 minutes:

Кстати покопавшись 2 дня в chan_sip.c могу точно сказать, что долго в таком виде разработка СИПа в астериске продолжатся не сможет - это просто ппц, как там написан код. Не скажу что хуже чем китайские и индийские программисты, но на уровне. Много где названия функций уже не соответствуют тому что они делают... Так что ждем результатов ProjectPineApple.

PS. Это просто крик души Smile

_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
#4

Разобрался в чем было дело Smile
Патч подготовлен и отправлен в трекер, надеюсь его не постигнет судьба патча 2х летней давности...
URL: http://bugs.digium.com/view.php?id=9896

_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
#5

Respect
_________________
«Choose a job you love, and you will never have to work a day in your life» — Confucius
#6

IgorG писал(а):
Кстати покопавшись 2 дня в chan_sip.c могу точно сказать, что долго в таком виде разработка СИПа в астериске продолжатся не сможет - это просто ппц, как там написан код. Не скажу что хуже чем китайские и индийские программисты, но на уровне. Много где названия функций уже не соответствуют тому что они делают... Так что ждем результатов ProjectPineApple.

PS. Это просто крик души Smile
силён. я несколько раз пытался заставить себя разобраться в нём - не могу. мегабайт каши - это сильно
#7

Да я и не утверждаю что разобрался, просто понял все то что мне нужно было. Разобрался в базовых понятиях, структурах, путях обработки входящих/исходящих пакетов. Я тоже как-то из праздного интереса хотел разобраться - не получилось. Нужно иметь какую-то конкретную цель
_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
#8

и какова судьба патча? не приняли? а нужен...
#9

Давно принят
_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
#10

странно... пробую на 1.6.2.9-2+squeeze4 не пытается авторизоваться. с какой версии включили? мож какие настройки спецовые нужны? можно ссылку на доки, а то не находится ничего Sad
#11

астер не может сопоставить запрос notify с ответом 401 пишет Match Not Found

Added after 57 minutes:

вот собственно дебаг:

Код:


NOTIFY sip:01@C.C.C.C:5060 SIP/2.0
Via: SIP/2.0/UDP S.S.S.S:5060;branch=z9hG4bK5f1041dd;rport
Max-Forwards: 70
From: "Unknown" ;tag=as3e54359b
To:
Contact:
Call-ID: 568ce6bc4e6f9861507300fd3fee8c36@S.S.S.S
CSeq: 102 NOTIFY
User-Agent: S
Subscription-State: terminated
Event: resync
Content-Length: 0

SIP/2.0 401 Unauthorized
To: ;tag=747534ead74a7503i0
From: "Unknown" ;tag=as3e54359b
Call-ID: 568ce6bc4e6f9861507300fd3fee8c36@S.S.S.S
CSeq: 102 NOTIFY
Via: SIP/2.0/UDP S.S.S.S:5060;branch=z9hG4bK5f1041dd
Server: Linksys/SPA2102-5.2.12
WWW-Authenticate: Digest realm="FQDN", nonce="d0a72f43", qop="auth", algorithm=md5
Content-Length: 0



[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 0 [ 24]: SIP/2.0 401 Unauthorized
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 1 [ 62]: To: ;tag=747534ead74a7503i0
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 2 [ 56]: From: "Unknown" ;tag=as3e54359b
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 3 [ 53]: Call-ID: 568ce6bc4e6f9861507300fd3fee8c36@S.S.S.S
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 4 [ 16]: CSeq: 102 NOTIFY
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 5 [ 56]: Via: SIP/2.0/UDP S.S.S.S:5060;branch=z9hG4bK5f1041dd
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 6 [ 30]: Server: Linksys/SPA2102-5.2.12
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 7 [ 97]: WWW-Authenticate: Digest realm="FQDN", nonce="d0a72f43", qop="auth", algorithm=md5
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 8 [ 17]: Content-Length: 0
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Header 9 [ 0]:
[Feb 9 12:37:58] VERBOSE[32220] chan_sip.c: --- (9 headers 0 lines) ---
[Feb 9 12:37:58] DEBUG[32220] chan_sip.c: Stopping retransmission on '568ce6bc4e6f9861507300fd3fee8c36@S.S.S.S' of Request 102: Match Not Found


#12

Сложно сказать, нужно лезть в исходник и смотреть на каком этапе авторизация не срабатывает. Вполне возможно что-то поломали
_________________
OpenSUSE 11.2 / Asterisk-trunk / Celeron 1100 (512mb) / chan_lcr / Linksys / Aastra 9112i
http://igorg.ru
#13

проверил - в 1.8 и 10 работает, в 1.6.2 похоже сломано.