У меня есть настольное приложение для Windows, сделанное моим провайдером мобильной сети, которое выполняет всевозможные действия с помощью SIP: вызов, отправка сообщения и т.д. Скриншот того, как это приложение успешно отправляет MESSAGE
(последние 4 строки):
MESSAGE
запрос из настольного приложения отправляется как (4-я строка сзади):
MESSAGE sip:[email protected] SIP/2.0
Via: SIP/2.0/UDP LOCALIP:2112;branch=z9hG4bK-d8754z-905183245f478c76-1---d8754z-;rport
Max-Forwards: 70
To: "TO"<sip:[email protected]>
From: "FROM"<sip:[email protected]>;tag=63088d09
Call-ID: NGVhMDJhYzQwNmExOTQyNThmNjc5OGNmOTViNDUyYWM.
CSeq: 2 MESSAGE
Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, NOTIFY, MESSAGE, SUBSCRIBE, INFO
Content-Type: text/plain
Content-Length: 4
test
и успешный ответ для этого:
SIP/2.0 407 Proxy Authentication Required
Via: SIP/2.0/UDP LOCALIP:2112;received=EXTERNALIP;branch=z9hG4bK-d8754z-905183245f478c76-1---d8754z-;rport=2112
To: "TO"<sip:[email protected]>;tag=c005f0e30133ec730add76fc91f4bea
From: "FROM"<sip:[email protected]>;tag=63088d09
Call-ID: NGVhMDJhYzQwNmExOTQyNThmNjc5OGNmOTViNDUyYWM.
CSeq: 2 MESSAGE
Content-Length: 0
Proxy-Authenticate: Digest nonce="3F178051B97E1F52000123000A3C53D4B",realm="DOMAIN",algorithm=MD5,qop="auth"
Затем я пытаюсь отправить идентичный (и n-варианты) запрос из PHP, но я всегда получаю SIP/2.0 403 Forbidden
вместо SIP/2.0 407 Proxy Authentication Required
:
SIP/2.0 403 Forbidden
Via: SIP/2.0/UDP LOCALIP;received=EXTERNALIP
To: "TO"<sip:[email protected]>;tag=aprqngfrt-f7ccjj0000020
From: "FROM"<sip:[email protected]>;tag=8f7be81d
Call-ID: [email protected]
CSeq: 1 MESSAGE
Reason: Q.850;cause=55;text="Call Terminated"
Content-Length: 0
Самое смешное, что если я отправлю запрос REGISTER
, он работает, и я успешно получаю заголовок SIP/2.0 401 Unauthorized
с WWW-Authenticate
. Я пересчитываю авторизацию и повторно отправляю ее. Затем я получаю SIP/2.0 200 OK
. Как это работает с MESSAGE
.
Что может быть неправильным? Что я упустил? Запрос MESSAGE
требует какого-либо другого запроса до этого (я уже пробовал REGISTER
раньше)?
Я прочитал RFC 3428 вверх и вниз, попробовал все возможные примеры, но безуспешно.