udptl и directrtpsetup
На Asterisk 1.6.2.15 аткнулся на такую проблему - если установлен directrtpsetup=yes, то Т.38 passthrough не проходит по интересной причине.
Есть 2 VoIP шлюза, которые умеют T.38 - Dlink DVG-7022S и LinkSYS SPA-2102
192.168.1.112/16 - ip asterisk
192.168.1.188/16 - ip linksys
192.168.204.253/16 - ip dlink
совершаем звонок с dlink на linksys факсом в автомате:
192.168.204.253 192.168.1.112 SIP/SDP Request: INVITE sip:360@192.168.1.112:5060;user=phone, with session description
v=0
o=343 1797696970 1797696970 IN IP4 192.168.204.253
s=Session SDP
c=IN IP4 192.168.204.253
t=0 0
m=audio 10000 RTP/AVP 18 0 8
a=rtpmap:18 G729/8000/1
a=fmtp:18 annexb=no
a=rtpmap:0 PCMU/8000/1
a=rtpmap:8 PCMA/8000/1
192.168.1.112 192.168.204.253 SIP Status: 100 Trying
192.168.1.112 192.168.1.188 SIP/SDP Request: INVITE sip:360@192.168.1.188:5060, with session description
v=0
o=root 1378692627 1378692627 IN IP4 192.168.204.253
s=Asterisk PBX 1.6.2.15
c=IN IP4 192.168.204.253
t=0 0
m=audio 10000 RTP/AVP 18 8 0 101
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=ptime:20
a=sendrecv
192.168.1.188 192.168.1.112 SIP/SDP Status: 200 OK, with session description
v=0
o=- 17475 17475 IN IP4 192.168.1.188
s=-
c=IN IP4 192.168.1.188
t=0 0
m=audio 11568 RTP/AVP 18 100 101
a=rtpmap:18 G729a/8000
a=fmtp:18 annexb=no
a=rtpmap:100 NSE/8000
a=fmtp:100 192-193
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=ptime:30
a=sendrecv
192.168.1.112 192.168.204.253 SIP/SDP Status: 200 OK, with session description
v=0
o=root 342983111 342983111 IN IP4 192.168.1.188
s=Asterisk PBX 1.6.2.15
c=IN IP4 192.168.1.188
t=0 0
m=audio 11568 RTP/AVP 18 8 0
a=rtpmap:18 G729/8000
a=fmtp:18 annexb=no
a=rtpmap:8 PCMA/8000
a=rtpmap:0 PCMU/8000
a=ptime:20
a=sendrecv
в этом месте голос прошел нормально(пакеты ACK я не копировал), в SDP всё указано правильно, RTP получился 192.168.204.253:10000 <-> 192.168.1.118:11568
дальше приходит ReINVITE на T.38 от LinkSYS:
192.168.1.188 192.168.1.112 SIP/SDP Request: INVITE sip:343@192.168.1.112, in-dialog, with session description
v=0
o=- 17812 17812 IN IP4 192.168.1.188
s=-
c=IN IP4 192.168.1.188
t=0 0
m=image 11568 udptl t38
a=T38FaxVersion:0
a=T38MaxBitRate:14400
a=T38FaxRateManagement:transferredTCF
a=T38FaxMaxBuffer:200
a=T38FaxMaxDatagram:200
a=T38FaxUdpEC:t38UDPRedundancy
asterisk отвечает 100 Trying и шлет ReINVITE Dlink:
192.168.1.112 192.168.204.253 SIP/SDP Request: INVITE sip:343@192.168.204.253:5060, in-dialog, with session description
v=0
o=root 342983111 342983112 IN IP4 192.168.1.188
s=Asterisk PBX 1.6.2.15
c=IN IP4 192.168.1.188
t=0 0
m=image 4488 udptl t38
a=T38FaxVersion:0
a=T38MaxBitRate:14400
a=T38FaxRateManagement:transferredTCF
a=T38FaxMaxDatagram:397
a=T38FaxUdpEC:t38UDPRedundancy
и вот тут начинается фигня - linksys сказал, что ждет UDPTL по адресу 192.168.1.188:11568, а вот asterisk передал в реинвайте - 192.168.1.118:4488
далее от Dlink приходит:
192.168.204.253 192.168.1.112 SIP/SDP Status: 200 OK, with session description
v=0
o=343 1797700720 1797700720 IN IP4 192.168.204.253
s=Session SDP
c=IN IP4 192.168.204.253
t=0 0
m=image 10000 udptl t38
a=T38FaxVersion:0
a=T38FaxMaxDatagram:397
а астер в свою очередь отдает в сторону LinkSYS:
192.168.1.112 192.168.1.188 SIP/SDP Status: 200 OK, with session description
v=0
o=root 1378692627 1378692628 IN IP4 192.168.204.253
s=Asterisk PBX 1.6.2.15
c=IN IP4 192.168.204.253
t=0 0
m=image 4451 udptl t38
a=T38FaxVersion:0
a=T38MaxBitRate:14400
a=T38FaxRateManagement:transferredTCF
a=T38FaxMaxDatagram:397
a=T38FaxUdpEC:t38UDPRedundancy
и получается, что для LinkSYS RTP 192.168.1.188:11568 <-> 192.168.204.253:4451, а для DLink - 192.168.1.118:4488 <-> 192.168.204.253:10000
Естественно факсы не ходят.
Подскажите, как полечить это дело? directrtpsetup отключить нельзя по другим соображениям.
|