IAX и трансфер.
Добавлено: 11 апр 2012, 16:58
Имеется 3 сервера, между собой связаны по IAX:
У остальных похожий конфиг, отличаются только идентифицирующие данные.
Телефоны соединяются с серверами через SIP, canreinvite=no везде, nat — тоже.
В диалплане у всех вот так:
Соответственно, приведённый диалплан на остальных серверах изменён схожим образом так, что с каждого сервера на каждый можно совершить прямой звонок.
Интересует следующая проблема: почему-то, при совершении трансфера на другой сервер, «лишние» соединения не разрывается так, как написано, например, тут ( http://www.voip-info.org/wiki/view/Aste ... media+path ), несмотря на опцию transfer=yes на всех серверах.
С клиента на одном сервере вызываю клиента на другом, а затем, после установления соединения, с этого, второго клиента, перевожу первого на третьего, показан момент совершения перевода:
Ну и iax2 show channels показывает на serv2 два канала, вместо нуля. Как добиться от * того, что хочется? В интернетиках довольно мало на эту тему информации.
Разве что, есть такое:
Тогда вопрос: можно ли как-то определить, срабатывает ли mediaonly в моём случае? Ведь как написано, из сообщений понять не удастся. Мерить скорость?
Код: Выделить всё
[general]
delayreject=yes
language=ru
bandwidth=high
disallow=all ; same as bandwidth=high
allow=alaw
jitterbuffer=yes
forcejitterbuffer=yes
autokill=yes
transfer=yes ; Disable IAX native transfer
[ours](!)
type=peer
trunk=yes
qualify=yes ; Make sure this peer is alive
[serv1]
type=user
permit=0.0.0.0/0.0.0.0
secret=345
context=incoming1
[serv1](ours)
host=192.168.1.1
username=serv1
secret=123
[serv3](ours)
host=192.168.1.3
username=serv3
secret=456
Телефоны соединяются с серверами через SIP, canreinvite=no везде, nat — тоже.
В диалплане у всех вот так:
Код: Выделить всё
[officecall]
exten = s,1,Dial(${ARG1},15,tTm)
same= n,GotoIf($["${DIALSTATUS}" = "BUSY"]?busy:unavail)
; реакции-заглушки, реально, тут может быть что-то ещё.
same= n(busy),Background(busy-pls-hold)
same= n,Return()
same= n(unavail),Background(unavailable)
same= n,Return()
[incoming1]
exten = _2XX,1,Gosub(officecall,s,1(SIP/${EXTEN}))
same= n,Hangup()
[tester]
include=incoming1
exten = _1XX,1,Gosub(officecall,s,1(IAX2/serv1/${EXTEN}))
same= n,Hangup()
exten = _3XX,1,Gosub(officecall,s,1(IAX2/serv3/${EXTEN}))
same= n,Hangup()
Интересует следующая проблема: почему-то, при совершении трансфера на другой сервер, «лишние» соединения не разрывается так, как написано, например, тут ( http://www.voip-info.org/wiki/view/Aste ... media+path ), несмотря на опцию transfer=yes на всех серверах.
С клиента на одном сервере вызываю клиента на другом, а затем, после установления соединения, с этого, второго клиента, перевожу первого на третьего, показан момент совершения перевода:
Код: Выделить всё
-- Executing [101@tester:1] Gosub("IAX2/serv2-300", "officecall,s,1(IAX2/serv1/101)") in new stack
-- Executing [s@officecall:1] Dial("IAX2/serv2-300", "IAX2/serv1/101,15,tTm") in new stack
-- Called IAX2/serv1/101
-- Started music on hold, class 'default', on IAX2/workmega-300
-- Call accepted by 192.168.1.1 (format alaw)
-- Format for call is alaw
-- IAX2/serv1-18934 is making progress passing it to IAX2/serv2-300
-- IAX2/serv2-300 requested special control 20, passing it to IAX2/serv1-18934
-- IAX2/serv2-300 requested special control 20, passing it to IAX2/serv1-18934
-- IAX2/serv2-300 requested special control 20, passing it to IAX2/serv1-18934
-- IAX2/serv2-300 requested special control 20, passing it to IAX2/serv1-18934
-- IAX2/serv1-18934 answered IAX2/serv2-300
-- Stopped music on hold on IAX2/serv2-300
-- Channel 'IAX2/serv2-300' ready to transfer
-- Channel 'IAX2/serv1-18934' ready to transfer
-- Channel 'IAX2/serv2-300' unable to transfer
-- Channel 'IAX2/serv2-300' unable to transfer
-- Hungup 'IAX2/serv1-18934'
Разве что, есть такое:
© http://astbook.asteriskdocs.org/en/2nd_ ... ECT-1.htmlYou can set transfer to yes, no, or mediaonly. If set to yes, Asterisk will transfer the call away from itself if it can, in order to make the packet path shorter between the two endpoints. (This obviously won’t work if Asterisk needs to transcode or translate between protocols, or if network conditions don’t allow the two endpoints to talk directly to each other.) If it is set to no, Asterisk will not try to transfer the call away from itself.
If set to mediaonly, Asterisk will attempt to transfer the media stream so that it goes directly between the two endpoints, but the call signaling (call setup and teardown messages) will still go through Asterisk. This is useful because it ensures that call detail records are still accurate, even though the media is no longer flowing through the Asterisk box.
Тогда вопрос: можно ли как-то определить, срабатывает ли mediaonly в моём случае? Ведь как написано, из сообщений понять не удастся. Мерить скорость?