FreeSWITCH:Sofia/SIP - Команды FS_CLI, Debug, Profile
Sofia - это название SIP стека используемого FreeSWITCH. Если вы видите Sofia, знайте, что это касается SIP.
Рассмотрим обслуживание и конфигурацию Sofia/SIP во FreeSWITCH.
Обновление зарегистрированных окончаний (ENDPOINTS)
Flushing and rebooting registered endpoints
Вы можете обновить регистрации заданные в конкретном профиле командой flush_inbound_reg из консоли.
freeswitch> sofia profile <profile_name> flush_inbound_reg [<call_id>|<user@host>] [reboot]
Если вы не укажете <call_id> и / или <user@host> перегрузятся все окончания в указанном профиле.
также можно использовать команду check_sync
freeswitch>sofia profile <profile_name> check_sync <call_id> | <user@domain>
Запуск нового профиля
Если вы создали новый профиль, требуется запустить его командой start из консоли:
freeswitch> sofia profile <new_profile_name> start
Перегрузка профилей и шлюзов (gateways)
Вы можете перегрузить определенные профили командой restart/rescan.
freeswitch> sofia profile <profile_name> [<rescan>|<restart>] reloadxml
Удаление шлюзов
Удалите зарегистрированные шлюзы командой killgw
freeswitch> sofia profile <profile_name> killgw <gateway_name>
Перезагрузка шлюза
Для принудительной перегрузки шлюза используйте комбинацию команд killgw и rescan. При этом сохранятся текущие вызовы.
freeswitch> sofia profile <profile_name> killgw <gateway_name> freeswitch> sofia profile <profile_name> rescan
Добавление / изменение существующих шлюзов
Будем считать что все шлюзы находятся в директории по умолчанию: /usr/local/freeswitch/conf/sip_profiles/external
и вы только что создали новую запись. Команды rescan, reloadxml добавят новый шлюз, но не повлияют на текущие вызовы.
freeswitch> sofia profile external rescan reloadxml
если редактируется уже существующий шлюз, то вначале потребуется убить существующую регистрацию командой killgw, а затем командами rescan и reloadxml перечитать конфиг и поднять шлюз.
freeswitch> sofia profile external killgw <gateway_name> freeswitch> sofia profile external rescan reloadxml
Просмотр SIP регистраций
Для отображения всех устройств (devices) зарегистрированных в системе используется команда reg:
freeswitch> sofia status profile <profile name> reg
<spoiler|sofia status profile internal reg>
freeswitch@internal> sofia status profile internal reg Registrations: ================================================================================================= Call-ID: OWNkM2M5YTViOThhMzY2YjAxNjdjYWMyYTY0Yzg4ZDA. User: 1000@192.168.0.194 Contact: "" <sip:1000@192.168.0.194:5090;rinstance=3d30b128e273f219;transport=UDP> Agent: Zoiper for Windows 2.39 r16838 Status: Registered(UDP)(unknown) EXP(2014-06-24 14:59:23) EXPSECS(3586) Host: Z7 IP: 192.168.0.194 Port: 5090 Auth-User: 1000 Auth-Realm: 192.168.0.194 MWI-Account: 1000@192.168.0.194 Total items returned: 1 =================================================================================================
</spoiler>
Для получения статуса xml используется команда xmlstatus.
freeswitch> sofia xmlstatus profile <profile name> reg
<spoiler|sofia xmlstatus profile internal reg>
freeswitch@internal> sofia xmlstatus profile internal reg <?xml version="1.0" encoding="ISO-8859-1"?> <profile> <registrations> <registration> <call-id>OWNkM2M5YTViOThhMzY2YjAxNjdjYWMyYTY0Yzg4ZDA.</call-id> <user>1000@192.168.0.194</user> <contact>"" <sip:1000@192.168.0.194:5090;rinstance=3d30b128e273f219;transport=UDP></contact> <agent>Zoiper for Windows 2.39 r16838</agent> <status>Registered(UDP)(unknown) exp(2014-06-24 14:59:23) expsecs(2745)</status> <host>Z7</host> <network-ip>192.168.0.194</network-ip> <network-port>5090</network-port> <sip-auth-user>1000</sip-auth-user> <sip-auth-realm>192.168.0.194</sip-auth-realm> <mwi-account>1000@192.168.0.194</mwi-account> </registration> </registrations> </profile>
</spoiler>
Отобразить статус шлюзов
Для поднятых шлюзов:
freeswitch> sofia profile <profile> gwlist up
Для неактивных шлюзов:
freeswitch> sofia profile <profile> gwlist down
Sip debug
включить SIP дебаг для конкретного профиля:
freeswitch> sofia profile <profilename> siptrace on|off
Общий дебаг
sofia global siptrace [on|off]
Чтобы получать SIP дебаг в файл /usr/local/freeswitch/log/freeswitch.log, используйте:
freeswitch> sofia tracelevel info (or any other loglevel name or number)
для включения в лог SIP дебага по умолчанию, добавьте в sofia.conf.xml следующую опцию:
<global_settings> ... <param name="tracelevel" value="DEBUG"/> ... </global_settings>
а также в sip профиль xml файл:
<profiles> ... <profile name="..."> ... <param name="sip-trace" value="yes"/> ... </profile> ... </profiles>
Конфигурация профиля
Отслеживание состояние вызова с сохранением в БД (Track Calls).
<param name="track-calls" value="true"/>
Эта опция записывает состояние вызова в базу данных ODBC, что позволяет получать данные о состоянии абонента нескольким FreeSWITCH.
Sofia SIP Stack Watchdog
На случай если модуль Sofia зависнет и перестанет отвечать на запросы можно включить опцию контроля watchdog, которая перезагрузит FreeSWITCH, если модуль SIP перестанет откликаться в течении заданного времени.
<param name="watchdog-enabled" value="no"/> <param name="watchdog-step-timeout" value="30000"/> <param name="watchdog-event-timeout" value="30000"/>
Watchdog может быть включен или выключен глобально, или для конкретного профиля из fs_cli:
sofia profile internal watchdog off sofia profile internal watchdog on sofia global watchdog off sofia global watchdog on
ACL
Позволяет задать доступ по IP адресу для REGISTER или для INVITE, или и для того и другого, в опциях SIP профиля.
<param name="apply-inbound-acl" value="<acl_list|cidr>"/>
Разрешает пользователю делать входящие вызовы с определенного IP адреса без аутентификации.
<param name="apply-register-acl" value="<acl_list|cidr>"/>
Разрешает регистрацию с определенного IP адреса без аутентификации.
Использовать один домен для всех регистраций
Using A Single Domain For All Registrations
Можно заставить все регистрации в определенном профиле использовать один домен . Т.е., игнорировать домен в сообщении SIP.
challenge realm
<param name="challenge-realm" value="auto_from"/>
По умолчанию «auto_to» не установлено; Конфигурации по умолчанию, указывает «auto_from»
Возможные значения:
auto_from - использует поле from в качестве значения SIP realm.
auto_to - использует поле to в качестве значения SIP realm.
<anyvalue> - вы можете ввести любое значение в качестве SIP realm.
force-register-domain
<param name="force-register-domain" value="$${domain}"/>
Это заставит профиль игнорировать домен указанный в заголовках to или from запроса Register, а указывать значение заданное здесь.
В БД же сохранится оригинальное значение - user@<from domain in SIP packet>
force-subscription-domain
<param name="force-subscription-domain" value="$${domain}"/>
Это заставит профиль игнорировать домен указанный в заголовках to или from запроса Subscribe, а указывать значение заданное здесь.
В БД же сохранится оригинальное значение - user@<from domain in SIP packet>
force-register-db-domain
<param name="force-register-db-domain" value="$${domain}"/>
Это тоже самое, что и force-register-domain, только в БД будет сохранено модифицированное значение.
Принудительное использование IP адреса SIP профилем
Forcing SIP profile to use a static IP address
По умолчанию FreeSWITCH назначаются IP адрес вашего локального интерфейса. Если требуется назначить адрес вручную (например, в случае если имеется несколько сетевых интерфейсов на одной машине), задайте адреса в Sofia профиле, как показано в примере:
../sip_profile/internal.xml
<param name="rtp-ip" value="192.168.0.123"/> <param name="sip-ip" value="192.168.0.123"/>
../sip_profile/external.xml
<param name="rtp-ip" value="123.123.123.123"/> <param name="sip-ip" value="123.123.123.123"/>
где 192.168.0.123 IP к которому надо привязаться.
а также в sofia.conf.xml файле:
<param name="auto-restart" value="false"/>
Это предотвращает автоматическую перегрузку, если обнаруживается изменение сетевого адреса.
Синтаксис
Вызов екстеншена на удаленном SIP сервере
Основная форма:
sofia/<profile>/<extension>@<remoteserver>
Пример 1:
sofia/$${profile}/$1@example.org
Пример 2:
sofia/foo/0@sipphone.com
Где <profile> - имя профиля назначенного в sofia.conf.xml
Вызов внутреннего абонента
Основная форма:
sofia/<profile>/<extension>%<localserver>
Пример 1:
sofia/$${profile}/$1%$${domain}
Пример 2:
sofia/foo/111%192.168.1.111
где 'foo' это SIP профиль(profile), 111 это имя пользователя (userid) зарегистрированной точки (endpoint), а 192.168.1.111 это IP адрес FreeSWITCH. Если SIP профиль name сопоставлен с доменом, или атрибут домена установлен в профиле (e.g., <profile name=«internal» domain=«$${domain}»>), можно выполнить вызов следующим образом:
sofia/<profile>/<extension>
не указывая домен, когда вызывается местный номер.
Вызов через gateway (транк).
Основная форма:
sofia/gateway/<gateway_name>/<number_to_dial>
пример 1:
sofia/gateway/asterisk2/88123216111
Доступные gateways можно вывести командой sofia status:
freeswitch@internal> sofia status Name Type Data State ================================================================================================= 192.168.1.123 alias internal ALIASED external profile sip:mod_sofia@192.168.1.123:5080 RUNNING (0) internal profile sip:mod_sofia@192.168.1.123:5060 RUNNING (0) internal::avaya gateway sip:spb@192.168.1.252 NOREG external::asterisk2 gateway sip:asterisk2@123.123.123.123 NOREG =================================================================================================
в примере это avaya и asterisk2.
Изменение заголовка To:
Вы можете модифицировать поле To: sip заголовка (To: header) добавив ^<toheader>:
sofia/foo/user%192.168.1.123^111@$${domain}
Указание SIP Proxy c помощью fs_path
Вы можете направить вызов через определенное SIP прокси, используя директиву «fs_path». Пример:
sofia/foo/user@that.domain;fs_path=sip:proxy.this.domain
Channel Variables
Переменные каналов
Добавление заголовков к Sip запросам
Вы можете добавлять произвольные заголовки исходящих SIP звонков, предваряя строку 'sip_h_' любой переменной канала, например:
<action application="set" data="sip_h_X-Answer=42"/> <action application="bridge" data="sofia/mydomain.com/1000@example.com"/>
Несмотря на то, что это не является обязательным, пользовательские заголовки начинаются с «X-», во избежание конфликтов с другими стеками Sip протокола.
Добавление ответных заголовков
Adding Response Headers
Три типа ответных заголовков могут быть назначены:
ответный заголовок Response header
sip_rh_
Предварительный ответный заголовок Provisional response header
sip_ph_
Давай, До свидания Bye response header
sip_bye_h_
Каждый префикс будет добавлять данные, только для своих типов запросов, общего нет.
Пример:
<action application="set" data="sip_rh_X-Reason=Destination Number Not in Footprint"/> <action application="set" data="sip_bye_h_X-Accounting=Some Accounting Data"/>
Добавление пользовательских заголовков
Adding Custom Header
Например, если добавить P-Charge-Info заголовок в INVITE:
<action application="set"><![CDATA[sip_h_P-Charge-Info=<sip:${caller_id_number}@${domain_name}>;npi=0;noa=3]]></action>
В Sip сообщении мы увидим:
INVITE sip:88123216111@123.123.123.123 SIP/2.0 Via: SIP/2.0/UDP 192.168.1.123:5080;rport;branch=z9hG4bKyg61X9v3gUD4g Max-Forwards: 69 From: "Olg" <sip:777@192.168.1.123>;tag=XQKQ322vQF5gK To: <sip:88123216111@123.123.123.123> Call-ID: b6c776f6-47ed-1230-0085-000f1f659e58 CSeq: 30776798 INVITE Contact: <sip:mod_sofia@5.6.7.8:5080> User-Agent: FreeSWITCH-mod_sofia/1.4.0-rc2+git~20120713T162602Z~0afd7318bd+unclean~20120713T184029Z Allow: INVITE, ACK, BYE, CANCEL, OPTIONS, MESSAGE, UPDATE, INFO, REGISTER, REFER, NOTIFY Supported: timer, precondition, path, replaces Allow-Events: talk, hold, conference, refer Content-Type: application/sdp Content-Disposition: session Content-Length: 229 P-Charge-Info: <88123216111@123.123.123.123>;npi=0;noa=3 X-FS-Support: update_display,send_info. Remote-Party-ID: "Olg" <sip:777@192.168.1.123>;party=calling;screen=yes;privacy=off
Дополнительные переменные каналов