Стоит задача перевести SIP-вызовы без login'а/пароля, приходящие с заданного IP(X-Lite), на другой IP(Asotel), добавив SIP-авторизацию (т.е. login/пароль test/test) к вызову.
Пробую задачу решить с помощью FreeSWITCH.
Создал следующие файлы:
1) conf/sip-profiles/external/Asotel.xml:
<include>
<gateway name="Asotel">
<param name="username" value="test"/>
<param name="password" value="test"/>
<param name="realm" value="192.168.123.123"/>
<param name="register" value="true"/>
</gateway>
</include>2) conf/sip-profiles/internal/X-Lite.xml:
<include>
<gateway name="X-Lite">
<param name="realm" value="192.168.123.181"/>
<param name="username" value="test"/>
<param name="password" value="test"/>
<param name="register" value="true"/>
</gateway>
</include>3) conf/dialplan/extensions/test.xml:
<include>
<extension name="test-Asotel">
<condition field="destination_number" expression="^7777$">
<action application="bridge" data="sofia/gateway/Asotel/7777"/>
<action application="hangup"/>
</condition>
</extension>
</include>Попытка зарегистрироваться софтфоном X-Lite на сервере FreeSWITCH приводит к ошибке:
2011-05-26 17:20:00 [WARNING] sofia_reg.c:1061 sofia_reg_parse_auth() can't find user [test@192.168.123.1]
2011-05-26 17:20:12 [NOTICE] sofia_reg.c:121 sofia_reg_check_gateway() registering X-Lite
2011-05-26 17:20:12 [WARNING] sofia_reg.c:863 sofia_reg_handle_sip_r_register() Registration Failed with status 503Просьба помочь разобраться с ошибкой.
Заранее спасибо!
Это конфигурация шлюза же, а не клиента.
> 2) conf/sip-profiles/internal/X-Lite.xml:
> <include>
> <gateway name="X-Lite">
> <param name="realm" value="192.168.123.181"/>
> <param name="username" value="test"/>
> <param name="password" value="test"/>
> <param name="register" value="true"/>
> </gateway>
> </include>Зарегайтесь юзером 1000 с паролем 1234. Если что, все юзеры в conf/directory/*
> Это конфигурация шлюза же, а не клиента.Начал разбираться - все равно ничего не клеится!
FreeSWITCH server (IP 88.198.XXX.XXX) должен принимать SIP-вызовы от одного IP -адреса (софтфон X-Lite с динамическим IP из подсети 92.112.0.0/16) и пересылать вызовы на аппаратный SIP-телефон (Asotel, IP 195.225.XXX.XXX). На аппаратном телефоне настроен SIP режим peer-to-peer.
Напрямую X-Lite на Asotel проходят - я всегда слышу входящий вызов когда набираю на X-Lite номер 7777. А через FreeSWITCH вызовы не "ходят". Хотя X-Lite успешно регистрируется на FS.
Мною создано четыре xml-файла - все остальные конфиги я не трогал:
1) conf/sip-profiles/internal/X-Lite.xml:
<include>
<gateway name="X-Lite">
<param name="username" value="inboundtest"/>
<param name="password" value="test"/>
<param name="register" value="true"/>
</gateway>
</include>2) conf/sip-profiles/external/Asotel.xml:
<include>
<gateway name="Asotel">
<param name="realm" value="195.225.XXX.XXX"/>
<param name="username" value="outboundtest"/>
<param name="password" value="test"/>
<param name="register" value="true"/>
</gateway>
</include>3) conf/dialplan/public/test.xml:
<include>
<extension name="test">
<condition field="destination_number" expression="^7777$">
<action application="bridge" data="sofia/gateway/Asotel/$1"/>
</condition>
</extension>
</include>4) conf/directory/default/inboundtest.xml:
<include>
<user id="inboundtest" cidr="92.112.0.0/16">
<params>
<param name="from-domain" value="88.198.XXX.XXX"/>
<param name="password" value="test"/>
</params>
</user>
</include>
Вот отладка с аппаратного ip-телефона Asotel:
---begin---
Incoming CallLeg at callleg created 0x57d334 Incoming CallLeg at MsgReceived 0x57d334 *** $1 was being Invited ***
>>> All call occupied. <<<No slot availabe for this call...
FindIPCall...All Slot is Busy
RvSipCallLegReject(486), hCallLeg: 57d334
--> Message Sent (Message type: 1) (call-leg 57d334)
SIP/2.0 486 Busy Here
From: "inboundtest"<sip:outboundtest@195.225.XXX.XXX;transport=udp>;tag=vgpp5vSBgcX6p
To: <sip:$1@195.225.XXX.XXX>;tag=c3e19fb6-13c4-4ddecb5a-1f577-5f2a
Call-ID: 232b19fe-0285-122f-b5b5-1b5bdf4f9807
CSeq: 12887277 INVITE
Via: SIP/2.0/UDP 88.198.XXX.XXX:5080;rport=5080;branch=z9hG4bKv0XUcNtvK3c2K
Supported: replaces
User-Agent: FXS_GW (1asipfxs.109)
Content-Length: 0
---end---Вот что вижу в логах FreeSWITCH:
---begin---
[NOTICE] switch_channel.c:816 New Channel sofia/internal inboundtest@88.198.XXX.XXX [bf8e8081-eaf1-453e-a643-ee03df36ba0f]
[INFO] mod_dialplan_xml.c:336 Processing inboundtest <inboundtest>->7777 in context public
[NOTICE] switch_channel.c:816 New Channel sofia/external/$1 [4beaba1f-c9c6-4ed7-94c5-efec453e895a]
[NOTICE] sofia.c:5416 Hangup sofia/external/$1 [CS_CONSUME_MEDIA] [USER_BUSY]
[INFO] mod_dptools.c:2685 Originate Failed. Cause: USER_BUSY
[NOTICE] mod_dptools.c:2799 Hangup sofia/internal/inboundtest@88.198.XXX.XXX [CS_EXECUTE] [USER_BUSY]
[NOTICE] switch_core_session.c:1304 Session 1 (sofia/internal/inboundtest@88.198.XXX.XXX) Ended
[NOTICE] switch_core_session.c:1306 Close Channel sofia/internal/inboundtest@88.198.XXX.XXX [CS_DESTROY]
[NOTICE] switch_core_session.c:1304 Session 2 (sofia/external/$1) Ended
[NOTICE] switch_core_session.c:1306 Close Channel sofia/external/$1 [CS_DESTROY]
---end---
Попробовал переконфигурировать FreeSWITCH: удалил conf/sip-profiles/internal/X-Lite.xml и добавил inboundtest.xml в /opt/freeswitch/conf/directory/default со следующим содердимым:
<include>
<user id="inboundtest" cidr="92.112.0.0/16">
<params>
<param name="from-domain" value="88.198.XXX.XXX"/>
<param name="password" value="test"/>
</params>
</user>
</include>Все равно звонок "отбивается" с USER_BUSY:
---begin---
[NOTICE] switch_channel.c:816 New Channel sofia/internal/inboundtest@88.198.XXX.XXX [c3db7d90-a239-4b80-b5dd-4fc3a6ca2907]
[INFO] mod_dialplan_xml.c:336 Processing inboundtest <inboundtest>->7777 in context public
[NOTICE] switch_channel.c:816 New Channel sofia/external/$1 [41595b8d-62b9-4457-ab73-acc3dc7b1ac4]
[NOTICE] sofia.c:5416 Hangup sofia/external/$1 [CS_CONSUME_MEDIA] [USER_BUSY]
[INFO] mod_dptools.c:2685 Originate Failed. Cause: USER_BUSY
[NOTICE] mod_dptools.c:2799 Hangup sofia/internal/inboundtest@88.198.XXX.XXX [CS_EXECUTE] [USER_BUSY]
[NOTICE] switch_core_session.c:1304 Session 1 (sofia/internal/inboundtest@88.198.XXX.XXX) Ended
[NOTICE] switch_core_session.c:1306 Close Channel sofia/internal/inboundtest@88.198.XXX.XXX [CS_DESTROY]
[NOTICE] switch_core_session.c:1304 Session 2 (sofia/external/$1) Ended
[NOTICE] switch_core_session.c:1306 Close Channel sofia/external/$1 [CS_DESTROY]
---end---Подскажите, пожалуйста - что же я делаю не так?