2015-09-14 5 views
1

Мы отправляем глоток звонка одному из наших партнеров. Они отправляют нам заголовки «Record-Route» и «Contact» в течение 200 сообщений OK. Наша сторона отправляет ACK на IP-адрес, указанный в Record-Route, но заменяет заголовок «Контакт» заголовком «Маршрут», а другая сторона не выполняет нашу ACK и посылает нам повторную 200 OK, что приводит к отключению вызова.Срок действия ответа SIP ACK на сообщение SIP 200 OK

Я не уверен, что мы нарушаем любой SIP RFC, изменив заголовок «Контакт» на «Маршрут», сохраняя содержимое заголовка. Может ли кто-нибудь пролить свет на него?

Вот 200 OK со стороны партнера:

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Allow: ACK, INVITE, BYE, CANCEL 
Content-Type: application/sdp 
Server: YATE/3.0.0 
Content-Length: 195 

v=0 
o=yate 1441225325 1441225325 IN IP4 201.201.201.30 
s=SIP Call 
c=IN IP4 201.201.201.30 
t=0 0 
m=audio 19305 RTP/AVP 0 101 
a=rtpmap:0 PCMU/8000 
a=rtpmap:101 telephone-event/8000 
a=sendrecv 

Вот наш ACK 200 OK сообщение:

ACK sip:200.200.200.2:5060 SIP/2.0 
Via: SIP/2.0/UDP 100.100.100.100 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 ACK 
Max-Forwards: 70 
Route: <sip:[email protected]:7654> 
Content-Length: 0 

Вот диалог Целые SIP:

INVITE sip:[email protected]:5060 SIP/2.0 
Via: SIP/2.0/UDP 100.100.100.100 
To: +200<sip:[email protected]:5060> 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
Contact: +100<sip:[email protected]:5060> 
User-Agent: Excel_CSP/84.11.34 
Supported: timer 
Session-Expires: 3660 
Min-SE: 300 
CSeq: 1 INVITE 
Max-Forwards: 70 
Content-Type: application/sdp 
Content-Length: 144 

v=0 
o=sip 0 0 IN IP4 100.100.100.100 
s=SIP_Call 
c=IN IP4 100.100.100.230 
t=0 0 
m=audio 46750 RTP/AVP 0 101 
a=rtpmap:101 telephone-event/8000 

SIP/2.0 100 Trying 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
To: +200<sip:[email protected]:5060> 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Server: YATE/3.0.0 
Content-Length: 0 

SIP/2.0 180 Ringing 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Allow: ACK, INVITE, BYE, CANCEL 
Server: YATE/3.0.0 
Content-Length: 0 

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Allow: ACK, INVITE, BYE, CANCEL 
Content-Type: application/sdp 
Server: YATE/3.0.0 
Content-Length: 195 

v=0 
o=yate 1441225325 1441225325 IN IP4 201.201.201.30 
s=SIP Call 
c=IN IP4 201.201.201.30 
t=0 0 
m=audio 19305 RTP/AVP 0 101 
a=rtpmap:0 PCMU/8000 
a=rtpmap:101 telephone-event/8000 
a=sendrecv 

ACK sip:200.200.200.2:5060 SIP/2.0 
Via: SIP/2.0/UDP 100.100.100.100 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 ACK 
Max-Forwards: 70 
Route: <sip:[email protected]:7654> 
Content-Length: 0 

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Allow: ACK, INVITE, BYE, CANCEL 
Content-Type: application/sdp 
Server: YATE/3.0.0 
Content-Length: 195 

v=0 
o=yate 1441225325 1441225325 IN IP4 201.201.201.30 
s=SIP Call 
c=IN IP4 201.201.201.30 
t=0 0 
m=audio 19305 RTP/AVP 0 101 
a=rtpmap:0 PCMU/8000 
a=rtpmap:101 telephone-event/8000 
a=sendrecv 
ACK sip:200.200.200.2:5060 SIP/2.0 
Via: SIP/2.0/UDP 100.100.100.100 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 ACK 
Max-Forwards: 70 
Route: <sip:[email protected]:7654> 
Content-Length: 0 

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Allow: ACK, INVITE, BYE, CANCEL 
Content-Type: application/sdp 
Server: YATE/3.0.0 
Content-Length: 195 

v=0 
o=yate 1441225325 1441225325 IN IP4 201.201.201.30 
s=SIP Call 
c=IN IP4 201.201.201.30 
t=0 0 
m=audio 19305 RTP/AVP 0 101 
a=rtpmap:0 PCMU/8000 
a=rtpmap:101 telephone-event/8000 
a=sendrecv 
ACK sip:200.200.200.2:5060 SIP/2.0 
Via: SIP/2.0/UDP 100.100.100.100 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 ACK 
Max-Forwards: 70 
Route: <sip:[email protected]:7654> 
Content-Length: 0 

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Allow: ACK, INVITE, BYE, CANCEL 
Content-Type: application/sdp 
Server: YATE/3.0.0 
Content-Length: 195 

v=0 
o=yate 1441225325 1441225325 IN IP4 201.201.201.30 
s=SIP Call 
c=IN IP4 201.201.201.30 
t=0 0 
m=audio 19305 RTP/AVP 0 101 
a=rtpmap:0 PCMU/8000 
a=rtpmap:101 telephone-event/8000 
a=sendrecv 
ACK sip:200.200.200.2:5060 SIP/2.0 
Via: SIP/2.0/UDP 100.100.100.100 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 ACK 
Max-Forwards: 70 
Route: <sip:[email protected]:7654> 
Content-Length: 0 

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Allow: ACK, INVITE, BYE, CANCEL 
Content-Type: application/sdp 
Server: YATE/3.0.0 
Content-Length: 195 

v=0 
o=yate 1441225325 1441225325 IN IP4 201.201.201.30 
s=SIP Call 
c=IN IP4 201.201.201.30 
t=0 0 
m=audio 19305 RTP/AVP 0 101 
a=rtpmap:0 PCMU/8000 
a=rtpmap:101 telephone-event/8000 
a=sendrecv 
ACK sip:200.200.200.2:5060 SIP/2.0 
Via: SIP/2.0/UDP 100.100.100.100 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 ACK 
Max-Forwards: 70 
Route: <sip:[email protected]:7654> 
Content-Length: 0 

SIP/2.0 200 OK 
Via: SIP/2.0/UDP 100.100.100.100;received=100.100.100.100;rport=5060 
Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 INVITE 
Allow: ACK, INVITE, BYE, CANCEL 
Content-Type: application/sdp 
Server: YATE/3.0.0 
Content-Length: 195 

v=0 
o=yate 1441225325 1441225325 IN IP4 201.201.201.30 
s=SIP Call 
c=IN IP4 201.201.201.30 
t=0 0 
m=audio 19305 RTP/AVP 0 101 
a=rtpmap:0 PCMU/8000 
a=rtpmap:101 telephone-event/8000 
a=sendrecv 


ACK sip:200.200.200.2:5060 SIP/2.0 
Via: SIP/2.0/UDP 100.100.100.100 
To: +200<sip:[email protected]:5060>;tag=784054843 
From: +100<sip:[email protected]:5060>;tag=4244235125227 
Call-ID: [email protected] 
CSeq: 1 ACK 
Max-Forwards: 70 
Route: <sip:[email protected]:7654> 
Content-Length: 0 

BYE sip:[email protected]:5060 SIP/2.0 
Via: SIP/2.0/UDP 200.200.200.2:5060;branch=z9hG4bK-524287-1---baf0e608a3be462e3d9534147efb1150;rport 
Via: SIP/2.0/UDP 10.10.10.135:7654;rport=7654;branch=z9hG4bK962836463;received=10.10.10.135 
Max-Forwards: 69 
Record-Route: <sip:200.200.200.2:5060;lr> 
To: <sip:[email protected]:5060>;tag=4244235125227 
From: <sip:[email protected]:5060>;tag=784054843 
Call-ID: [email protected] 
CSeq: 95618 BYE 
Allow: ACK, INVITE, BYE, CANCEL 
User-Agent: YATE/3.0.0 
Reason: SIP;cause=408;text="Request Timeout" 
Content-Length: 0 

SIP/2.0 200 OK 
To: <sip:[email protected]:5060>;tag=4244235125227 
From: <sip:[email protected]:5060>;tag=784054843 
Call-ID: [email protected] 
CSeq: 95618 BYE 
Record-Route: <sip:200.200.200.2:5060;lr> 
Via: SIP/2.0/UDP 200.200.200.2:5060;branch=z9hG4bK-524287-1---baf0e608a3be462e3d9534147efb1150;rport 
Via: SIP/2.0/UDP 10.10.10.135:7654;rport=7654;branch=z9hG4bK962836463;received=10.10.10.135 
User-Agent: Excel_CSP/84.11.34 
Content-Length: 0 

IP-адреса и информация SIP TO/FROM были обновлены вручную, чтобы скрыть исходный идентификатор.

Я прошел через RFC 3261 Я нашел следующее на странице # 161. Я не уверен, как читать следующую таблицу. Означает ли это, что заголовок Contact не применим в ACK для сообщений 2xx?

Header field   where proxy ACK BYE CAN INV OPT REG 
     ___________________________________________________________ 
     Contact   2xx   - - - m o o 

ответ

2

200 Ok содержит:

Record-Route: <sip:200.200.200.2:5060;lr> 
Contact: <sip:[email protected]:7654> 

Ваше приложение не смотрит, чтобы понять значение параметра "Lr": параметр "свободный маршрутизации" введен в rfc3261. Он даже не совместим с исходным rfc2543.

Если ваше приложение было совместимым только с rfc2543, ACK будет содержать точное сообщение, которое у вас есть, но с дополнительным параметром «lr». Это указывает на сервер, что порядок является RFC2543, и в теории, сервер будет понять и изменить порядок: (RFC3261, раздел 16.6, Шаг 6. постобработки информация о маршрутизации)

ACK sip:200.200.200.2:5060;lr SIP/2.0 
Route: <sip:[email protected]:7654> 

Однако правильное сообщение должны быть уступчивым с последними rfc3261, и, таким образом, ваше приложение должно генерировать следующий SIP сообщение:

ACK sip:[email protected]:7654 SIP/2.0 
Route: <sip:200.200.200.2:5060;lr> 

вся речь идет о неправильно обращение с параметром «Lr» в вашем приложении! Решение состоит в том, чтобы исправить отсутствующий «lr» и убедиться, что порядок верен в соответствии с rfc3261.

0

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

Помимо проблемы хеша AymericM, выделенного с учетом заголовков контактов и маршрутов, у вас также может возникнуть другая проблема в отношении параметра ветвления заголовка Via в запросе ACK. В частности, вы должны ознакомиться с главами 13.2.2.4 2xx Responses и 17.1.1.3 Construction of the ACK Request для получения подробной информации о том, как следует создавать запросы ACK.

Ключ в том, что запрос ACK должен начинать новую транзакцию при подтверждении отказа от отказа 2xx. При подтверждении ответа 2xx запрос ACK должен быть запросом in-transaction и использовать те же поля заголовка, включая параметр ветвления заголовка Via, в качестве исходного запроса INVITE.

Строительство запросов ACK является одной из самых больших ошибок в SIP.

Смежные вопросы