Что такое Sofia

FreeSWITCH,Sofia.conf.xml,gateway,realm,proxy,register,variables,sip-trace,rtp-ip,sip-ip,proxy-media,t38,passthru,codec,stun,nat,acl,tls,dtmf,rfc2833,100rel,subscribe,options,presence,callerid
Sofia это модуль FreeSWITCH (mod_sofia), который обеспечивает подключения SIP в качестве User Agent.
"User Agent" ("UA") представляет собой приложение используемое для обработки определенного сетевого протокола. Для Sofia User Agent сетевым протоколом является SIP.
Sofia это общее название для User Agents (UAs) использующих SIP протокол во FreeSWITCH.
Sofia принимает и отправляет вызовы между внутренними абонентами зарегистрированными в FreeSWITCH.
Sofia используется для добавления SIP-провайдеров (gateways) в FreeSWITCH. XML-файл конфигурации хранится в файлах *.xml ../conf/sip_profiles/...

Sofia позволяет создавать множество профилей User Agents

Когда FreeSWITCH стартует, он перечитывает конфиг ..conf/autoload_configs/sofia.conf.xml, который содержит директиву «X-PRE-PROCESS». Эта директива инструктирует FreeSWITCH объединять все SIP профили из ..conf/sip_profiles/*.xml. Каждый загруженный *.xml файл содержит полное описание одного или нескольких SIP профилей.

  <profiles>
    <X-PRE-PROCESS cmd="include" data="../sip_profiles/*.xml"/>
  </profiles>

Каждый загруженный SIP профиль является частью «User Agents» или «UA»; в терминологии FreeSWITCH - UA = User Agent = Sofia Profile = SIP Profile.

Так как отдельные SIP профили загружены и объединены вместе в FreeSWITCH, они не должны мешать друг другу: В частности, каждый UA должен иметь свой ​​собственный уникальный порт, на котором он будет принимать подключения (порт по умолчанию для внутреннего SIP профиля - 5060, для внешнего - 5080).

Множество SIP профилей и Диалплан

Для чего может понадобится несколько профилей?
Например: FreesWITCH установлен в локальной сети. Звонки через SIP транк провайдера, осуществляются за пределы локальной сети, через NAT. Звонки на внутренние телефоны производятся в локальной сети. Для этого в FreeSWITCH, по умолчанию, созданы два профиля internal и exrternal. Через профиль external осуществляются внешние вызовы, за пределы локальной сети. Через профиль internal, соответственно внутренние, в локальной сети.

Чтобы набрать номер через определенный профиль в диалплане используется следующий синтаксис:

sofia/profile_name/destination

С помощью шаблонов в Диалплане определяется какой номер набирается и какой профиль использовать для вызова.

Привязка Sip профилей к SIP Доменам

В обычном случае, FreeSWITCH должен запускаться и работать «из коробки». Глобальная переменная <domain name=«$${domain}»> заданная в ..conf/directory/default.xml, назначает профилю IP адрес локального интерфейса автоматически. Внешние вызовы совершаются в соответствии с правилами сети. Если используется несколько сетевых интерфейсов, возможно, потребуются дополнительные настройки.

192.168.0.123         alias                                   internal      ALIASED
     external       profile           sip:mod_sofia@192.168.0.123:5080      RUNNING (0)
     internal       profile           sip:mod_sofia@192.168.0.123:5060      RUNNING (0)

Aliases/Псевдонимы - Тэг <aliases> задает псевдонимы (другие имена), которые будут работать в качестве действительного имени для текущего профиля. Похоже на файл /etc/hosts в UNIX. Испольэуйте aliases/псевдонимы для определения какой SIP профиль вызывается. Например для вызова URI - user@host.com в профиле internal задайте <alias name =«host.com»/>.
Например в конфиге профиля internal ../conf/sip_profiles/internal.xml определено:

<aliases>
     <alias name ="default"/>
     <alias name ="host.com"/>
</aliases>

sip:user@internal - имя внутреннего профиля по умолчанию
sip:user@192.168.0.123 - IP адрес локального интерфейса сопоставленный с внутренним профилем
sip:user@default - alias внутреннего профиля
sip:user@host.com - alias внутреннего профиля

Тег <domain> - домен или IP, заданный для SIP профиля.

  • alias: [true/false] (автоматически создавать Aliases для данного профиля.)
  • parse: [true/false] (сканировать домен для записей шлюза и включить их в этот профиль,)
  • name: [<string>] (введите имя или IP определенного домена, или 'all' для разрешения любых доменов)
   <domain name="all" alias="true" parse="false"/>

Концепция отношений пользователей и доменов в FreeSWITCH описана в заголовке файла ../conf/directory/default.xml

FreeSWITCH отрабатывает концепцию пользователей и доменов, наподобие EMail.
Имеются пользователи, которые находятся в доменах, например 111@domain.net

Когда FreeSWITCH получает запрос на регистрацию, пользователь в директории вызывается,  на основании  домена
в поле From: или To: (в зависимости от конфигурации профиля). По умолчанию доменом будет IP адрес машины на которой запущен FreeSWITCH.
Этот IP можно посмотреть комадой FS_CLI - 'Sofia status'. Регистрация посылается на IP адрес, а не на Hostname.
Если требуется регистрироваться на Hostname, отредактируйте файл 'vars.xml' в ../conf/  установив в качестве значения домена нужное имя хоста.

Нажмите, чтобы отобразить

Нажмите, чтобы скрыть

The best thing to do is take a look at these things from a step back.

The domains inside the xml registry are completely different from the
domains on the internet and again completely different from domains in sip
packets.  The profiles are again entirely different from any of the above.
 Its up to you to align them if you so choose.


The default configuration distributed with FreeSWITCH sets up the scenario
most likely to load on any machine and work out of the box.  That is the
primary goal of that configuration, so, It sets the domain in both the
directory, the global default domain variable and the name of the internal
profile to be identical to the ip on the box that can reach the internet.
 Then it sets the sip to force everything to that value.  When you want to
detach from this behavior, you are probably on a venture to do some kind of
multi-home setup.


Aliases in the <aliases> tag are a list of keys you want to use to use that
lead to the current profile your are configuring.  Think of it as the
/etc/hosts file in unix only for profiles.   When you define aliases to
match all of the possible domains hosted on a particular profile, then when
you try to take a user at host.com notation and decide which profile it came
from, you can use the aliases to find it providing you have added <alias
name="host.com"/> to that profile.

The <domains> tag is an indicator telling the profile to open the xml
registry in FreeSWITCH and run through any domains defined therein.
The 2 key attributes are:

alias: [true/false]  (automatically create an alias for this domain as
mentioned above)
parse: [true/false] (scan the domain for gateway entries and include them
into this profile)
name: [<string>] (either the name of a specific domain or 'all' to denote
parsing every domain in the directory)

As you showed in your question the default config has

<domain name="all" alias="true" parse="false"/>

If you apply what you have learned above, it will scan for every domain
(there is only one by default) and add an alias for it and not parse it for
gateways.  The default directory uses global config vars to set the domain
to match the local ip on the box.  So now you will have a domain in your
config that is your ip, and the internal profile will attach to it and add
an alias so that value expands to match it.


This is explained in a comment at the top of directory/default.xml

    FreeSWITCH works off the concept of users and domains just like email.


    You have users that are in domains for example 1000 at domain.com.





    When freeswitch gets a register packet it looks for the user in the
directory

    based on the from or to domain in the packet depending on how your
sofia profile

    is configured.  Out of the box the default domain will be the IP
address of the

    machine running FreeSWITCH.  This IP can be found by typing "sofia
status" at the

    CLI.  You will register your phones to the IP and not the hostname by
default.

    If you wish to register using the domain please open vars.xml in the
root conf

    directory and set the default domain to the hostname you desire.  Then
you would

    use the domain name in the client instead of the IP address to register


    with FreeSWITCH.




So having more than one profile with the default of

<domain name="all" alias="true" parse="false"/>

is going to end up aliasing the same domains into all profiles who call it
and cause an overwrite in the lookup table and probably an error in your
logs somewhere.  If you had parse="true" on all of them, they would all try
and register to the gateways in all of your domains.


If you look at the stock config, external.xml is a good example of
a secondary profile, it has

<domain name="all" alias="false" parse="true"/>

so no aliases, and yes parse ... the exact opposite of the internal so that
all the gateways would register from external and internal would bind to
the local ip.

So, you probably want to use separate <domain name="my.com"/> per domain
per profile you want to bind it to in more complicated setups.
It took me like an hour to compose this explanation.....I hope it at least
gives you an idea.

"domain" is a core variable its used as a fallback in certain situations
when its defined and no other value is specified for domain.
It's also used in the default configuration as a pre-processor substitution
with the $${domain} notation which is substituted into the sofia profiles
and conference etc.


"domain_name" is a variable that only exists in the scope of the demo
dialplan.  Its set initially as a global in vars.xml to whatever domain is
set to as a base value.
>From there its only set on a per-call basis to override and used in per
call dialplan logic.

Its is not true that domain must be an IP.  It defaults to the same value
as local_ip_v4 to make sure the system works on any box without any
configuration.
If you have a working FQHN that points to your box, you should set that
value in your domain var instead of the ip if you want things to reference
the actual domain name.


I think once you learn that way the config files are setup in the default
distribution are purely arbitrary the more sense it may begin to make.


The thing that made your head hurt is trying to explain that in SIP there
is a separation from the host portion of a URI and the IP its sending the
packet to.
Because of PROXIES etc you can easily send a SIP packet to a specific
address that contains a request URI or To: header with a different host
name or ip.


think of domain as referring to the host portion of a user at host concept.
 The same notion of a REALM in radius.  In SIP and in FS that can be an IP
or a FQHN and it need not exist in the TLD dns on the internet or it can
match one that exists and function on its own because it's not directly
tied to dns.  (For the sake of sanity do not use a real domain name that is
not yours even if it works).

Basically the path of least resistance is to keep all these names aligned..
This is what the default config does for you because you set the domain
variable once and its pre-processed into all the key places in the config
that have domains so they are the same everywhere.

Say you set it to example.com

* The default directory will have a domain defined called example.com with
the default 1000-1019 extensions.
* The internal sip profile will associate the internal profile with
example.com and force any registrations etc to find that domain for auth.
* The conferences will use example.com for presence etc.

Then it uses domain_name in the extensions etc as a clone of that
example.com domain that you can change at runtime on a per call basis.
 Most likely in the default config with no changes this value will remain
example.com the whole time and there is no difference.

Why?

Because people love multi-home stuff and they want to configure all of
these things separately and once they start doing this, the config still is
usable.

So:

FS never resolves domains to the IP and vice versa for you like it might in
your unix environment or in a web browser.  IP and FQHN have the same
significance in sip packets as a unique realm string.  It's only because
you are binding the SIP UA to ${local_ip_v4} that your sip works on the IP.

The way SIP was designed to work, you would define a SRV record for the
host name used in your sip uri and then that IP would be used in place of a
default A record lookup.  We can just as easily override that in a client
by forcing the fields for the proxy address and domains.


Say you used example.com like I mentioned above and your valid IP was
200.8.8.8

You could change domain=example.com and restart FS and it would still come
up.

Then you could go take a sip soft phone and play with the advanced settings
and set the proxy addr to 200.8.8.8 and set the host or domain field to
example.com and configure it to always send calls to the proxy addr.

Now you can use example.com in your phones all day long even though its not
really your domain because its just saying that in the packets and you
explicitly showed it what server to use.

Next, instead of example.com you could use 1.2.3.4 (or some real ip) as the
domain even though it's obviously silly.

If you turn on the siptrace you'll see the packets hit your box and using
those values like 1.2.3.4 and example.com in the host portion and talk to
your client over the actual IP of the server.

Структура профиля

Каждый профиль может содержать несколько различных подсекций:

<!ELEMENT configuration (global_settings?, profiles)>
<!ELEMENT global_settings (param+)>
<!ELEMENT profiles (profile+)>
<!ELEMENT profile (aliases, gateways, domains, settings)>
<!ELEMENT aliases (alias*)>
<!ELEMENT gateways (gateway*)>
<!ELEMENT gateway (param+, variables?)>
<!ELEMENT variables (variable+)>
<!ELEMENT domains (domain*)>
<!ELEMENT settings (param+)>
<!ELEMENT alias EMPTY>
<!ELEMENT param EMPTY>
<!ELEMENT variable EMPTY>
<!ELEMENT domain EMPTY>
<!ATTLIST configuration name CDATA #REQUIRED description CDATA #REQUIRED>
<!ATTLIST profile name CDATA #REQUIRED domain CDATA #IMPLIED>
<!ATTLIST gateway name CDATA #REQUIRED>
<!ATTLIST alias name CDATA #REQUIRED>
<!ATTLIST param name CDATA #REQUIRED value CDATA #REQUIRED>
<!ATTLIST variable name CDATA #REQUIRED data CDATA #REQUIRED direction CDATA #IMPLIED>
<!ATTLIST domain name CDATA #REQUIRED alias (true | false) #IMPLIED parse (true | false) #IMPLIED>

Gateway

В профиле может назначен один или несколько шлюзов (Gateways).

<gateways>
 <gateway>
   ...elements...
 </gateway>
 <gateway>
   ...elements...
 </gateway>
</gateways>

Атрибут 'name' задает шлюзу имя по которому он идентифицируется системой. Шлюз может обеспечивать доступ к ТФОП или частной сети SIP. Шлюз определяется для получения информации о соединении с другой сетью, до совершения вызова UA. Вместе со шлюзом могут быть определены переменные. Входящие переменные назначаются вызываемому каналу, исходящие - вызывающему.

Пример конфигурации шлюза (gateway):

 <gateway name="gateway777">
   <param name="realm" value="sip.voip_provider.com" />
   <param name="username" value="test_name" />
   <param name="password" value="test_password" />
   <param name="register" value="true" />
   <param name="caller-id-in-from" value="true" />
   <param name="ping" value="5" />
   <param name="ping-max" value="3" />
   <param name="retry-seconds" value="5" />
   <param name="expire-seconds" value="60" />
   <variables>
     <variable name="verbose_sdp" value="true"/>
     <variable name="absolute_codec_string" value="PCMA,PCMU" direction="outbound"/>
     <variable name="customer_id" value="7777" direction="inbound"/>
   </variables>
 </gateway>

Для вызова через определенный шлюз используется следующий синтаксис:

sofia/gateway/<gateway_name>/<dialstring>

Параметры

Ниже приведен список параметров шлюза (gateway):

username account username - обязательный параметр

 <param name="username" value="foo"/>
 

Account username - это параметр шлюза, не перепутайте с username установкой SIP профиля.


realm auth realm: необязательный параметр - совпадает с именем шлюза, если не назначено другое.

 <!-- realm -->  
 <param name="realm" value="sip.example.com[:port]"/>

password пароль аккаунта обязательный параметр

 <param name="password" value="a password"/>
from-user

Имя пользователя для поля From: необязательно совпадает с именем пользователя, если не назначено другое.

 <param name="from-user" value="fooman"/> 
from-domain

Используется в поле From: необязательно совпадает 'realm', если ничего не назначено; также может быть установлено в «auto-aleg-full» или «auto-aleg-domain»

  <param name="from-domain" value="sip.provider.com"/>
caller-id-in-from

Подменить значение поля From: user в INVITE, на Caller-ID канала
Это неправильно в большинстве случаев, т.к. для исходящих вызовов в INVITE требуется Username, а не Caller-ID
Use the callerid of an inbound call in the from field on outbound calls via this gateway

 <param name="caller-id-in-from" value="false"/>

extension extension for inbound calls: необязательно Если не назначено, будет тоже что и username.
Для того,чтобы использовать значение переменной ${sip_to_user}, установите - «auto_to_user»

 <param name="extension" value=""/>

Примечание: Параметр 'extension' влияет на значение переменных канала 'Caller-Destination-Number' и 'destination_number'.
Если оставить пустым, Caller-Destination-Number будет установлено 'Username' шлюза.
Если задано значение, Caller-Destination-Number будет установлено это значение.
Если задано значение 'auto_to_user', Caller-Destination-Number будет заполнен значением переменной ${sip_to_user},
что означает вызываемый (набранный) номер, в случае входящего вызова.

proxy proxy host: необязательно совпадает с 'realm', если не задано другое.

 <param name="proxy" value="proxy.example.com"/>
expire-seconds

Время регистрации в секундах: необязательно 3600, или пусто.

 <param name="expire-seconds" value="3600"/>
suppress-cng

Подавлять CNG (comfort noise) в этом профиле.

 <param name="suppress-cng" value="true"/>
 

register

false: не посылать «Register'. true: register (default)

 <param name="register" value="false"/>
register-transport

Используемый транспортный протокол

 <param name="register-transport" value="udp"/>
contact-params

Дополнительные SIP параметры для отправки контакту.

 <param name="contact-params" value="tport=tcp"/>

ping Проверять статус шлюза : необязательно

 <param name="ping" value="15"/>
ping-max / ping-min
 <!-- *optional* -->
 <param name="ping-max" value="10"/>
 <!--  *optional* -->
 <param name="ping-min" value="1"/>

ping-min - сколько успешных пингов должно пройти для объявления шлюза активным.
Промежуток между ping-min и ping-max обозначает «безопасную зону».
Так например, если вы имеете значение минимум 3, максимум 6 и получаете ответ на пинги 3,4,5 и 6 шлюз считаеся активным.
Если из 6 пакетов 4 подряд утеряны, шлюз считается недоступным.
Обратите внимание, что когда Sofia стартует шлюз считается активным, если ping-min > 1, правильный отсчет начинается только, когда шлюз падает.

extension-in-contact

необязательно - по умолчанию - false

<param name="extension-in-contact" value="true"/>
cid-type

необязательно

<param name="cid-type" value="rpid"/>

Параметр 'register' используется, когда профиль действует в качестве клиента, подключаясь к удаленному UA.
Регистрируясь, FreeSWITCH информирует удаленный UA о своем местонахождении. Обычно это происходит когда FreeSWITCH ожидает входящие вызовы от удаленной стороны. Если же FreeSWITCH использует шлюз только для исходящих вызовов, регистрация не обязательна.

distinct-to

Параметр 'distinct-to' используется когда FS требуется зарегистрироваться при помощи отличающегося Address-of-Record (AOR) заголовка «To:».

Это требует надлежащей настройки некоторых параметров. Например вы хотите послать REGISTER to, со следующими значениями:

 From: <sip:someuser@somedomain.com>
 To: <sip:anotheruser@anotherdomain.com>

Тогда значения должны быть такими:

   <param name="distinct-to" value="true"/>
   <param name="auth-username" value="someuser"/>
   <param name="from-user" value="someuser"/>
   <param name="from-domain" value="somedomain.com"/>
   <param name="password" value="somepassword"/>
   <param name="username" value="anotheruser"/>
   <param name="realm" value="anotherdomain.com"/>

Параметр 'ping' используется для проверки доступности шлюза.

При включении это опции, FreeSWITCH, пошлет пакет SIP OPTIONS удаленному шлюзу.

В зависимости от ответа шлюза SIP 200 OK или 404 Not Found, статус шлюза будет активен или недоступен, соответственно.
Когда вызов будет направлен на неактивный шлюз, FS генерирует причину отказа - NETWORK_OUT_OF_ORDER.
Частота запросов 'ping' указывается в секундах, при минимальном значении 5 секунд.
Параметр 'extension-in-contact' нужен для принудительного использования контактной информации при регистрации.
Если имеются проблемы при регистрации с параметрами по умолчанию, такими как gw+gateway_name@ip, можно использовать extension@ip.
Если extension не задан, будет использовано - username@ip

Variables переменные

Дополнительные параметры могут быть заданы переменными и установлены для входящих или исходящих вызовов проходящих через шлюз. Можно указать конкретное направление или задать переменную для обоих направлений.

<gateway>
  ...params...
  <variables>
    <variable name="inbound_var_name"  value="this is inbound"  direction="inbound"/>
    <variable name="outbound_var_name" value="this is outbound" direction="outbound"/>
    <variable name="both_var_name"     value="this on any direction"/>
  </variables>
</gateway>

Эти переменные канала могут быть заданы для всех вызовов проходящих через шлюз в заданном направлении.

Однако, при помощи особого синтаксиса, могут быть установлены переменные для всего профиля:

  <variable name="p:caller_id_name" value="Gateway"/>

Settings

Настройки включают больше общей информации о профиле.
Каждый профиль определяется как SIP User Agent и каждый UA должен иметь свой уникальный SIP порт.
По умолчанию используется порт 5060, но это не мешает использовать другие порты и звонить, например на user@sip.example.com:5070. Таким образом, можно назначить любой порт для каждого отдельного профиля.

Basic settings - Основные установки

alias

<param name="alias" value="sip:10.10.11.111:7777"/>

Связывает IP алрес и порт с SIP профилем.

shutdown-on-fail
 <param name="shutdown-on-fail" value="true"/>

Если установлено «true» и SIP профиль по какой-то причине не был загружен FreeSWITCH будет остановлен.

user-agent-string

Это задает заголовок User-Agent для всех SIP сообщений.

 <param name="user-agent-string" value="FreeSWITCH Rooocks!"/>

debug

 <param name="debug" value="0"/>
sip-trace
 <param name="sip-trace" value="no"/>

context Контект диалплана который обрабатывает вызовы для этого SIP профиля и соотнесенных с ним IP адресов и портов.

 <param name="context" value="public"/>
sip-port

Порт для SIP трафика.

 <param name="sip-port" value="$${internal_sip_port}"/>
sip-ip

IP адрес для SIP трафика. НЕ ИСПОЛЬЗОВАТЬ HOSTNAMES, ТОЛЬКО IP АДРЕСА.

 <param name="sip-ip" value="$${local_ip_v4_or_v6}"/>
rtp-ip

IP адрес для RTP трафика. НЕ ИСПОЛЬЗОВАТЬ HOSTNAMES, ТОЛЬКО IP АДРЕСА.

 <param name="rtp-ip" value="$${local_ip_v4_or_v6}"/>
ext-rtp-ip

Внешний IP адрес для RTP трафика, чтобы видеть FS из интернета, если он находится за NAT.
Возможные значения:
Переменная из vars.xml, e.g. $${external_rtp_ip}:

 <param name="ext-rtp-ip" value="$${external_rtp_ip}"/>

Определенный IP адрес

 <param name="ext-rtp-ip" value="1.2.3.4"/>

При использовании для LAN и WAN, во избежание ошибок в SIP CONTACT используйте:

 <param name="ext-rtp-ip" value="autonat:1.2.3.4"/>

«auto»: определять внешний IP автоматически по таблице маршрутизации.

 <param name="ext-rtp-ip" value="auto"/>

«auto-nat»: FreeSWITCH будет использовать uPNP или NAT-PMP для определения публичного IP адреса.

 <param name="ext-rtp-ip" value="auto-nat"/>

«stun:DNS или IP адрес»: FreeSWITCH будет использовать STUN сервер по вашему выбору для определения публичного IP адреса.

 <param name="ext-rtp-ip" value="stun:stun.freeswitch.org"/>

«host:DNS name»: Использовать в качестве внешнего IP службу динамических DNS.

 <param name="ext-rtp-ip" value="host:mypublicIP.dyndns.org"/>

Требуется перезагрузка FreeSWITCH, для того, что бы изменения значения ext-rtp-ip вступили в силу.

ext-sip-ip

IP адрес по которому FreeSWITCH виден из интернета, если он находится за NAT, т.е. пубдичный адрес сети в еоторой находится FS.

Возможные значения те же, что и у ext-rtp-ip и как правило эти параметры имеют одинаковые значения.

 <param name="ext-sip-ip" value="$${external_sip_ip}"/>
tcp-keepalive

Задает интервал (в миллисекундах) посылки пакетов User агентам (UAs) зарегистрированным через TCP.

tcp-pingpong
tcp-ping2pong

dialplan Параметр Диалплан весьма мощный инструмент.

В простейшем случае он указывает на то, что используется дефолтный XML диалплан (mod_xml_curl), секция которого определена в файле freeswitch.xml:
<X-PRE-PROCESS cmd=«include» data=«dialplan/*.xml»/>

 <param name="dialplan" value="XML"/> 

Также можно использовать mod_enum приоритетно над XML диалпланом.

 <param name="dialplan" value="enum,XML"/> 

Или наоборот использовать enum, только если попытка использовать XML диалплан потерпела неудачу.

 <param name="dialplan" value="XML,enum"/> 

также возможно задать путь к определенному enum диалплану в сети.

 <param name="dialplan" value="enum:foo.com,XML"/> 

или использовать специфический XML файл диалплана.

 <param name="dialplan" value="XML:/tmp/foo.xml,XML,enum"/> 

Здесь в первую очередь проверяется специфический XML файл, а затем обычный XML диалплан определенный модулем mod_xml_curl.

Опции медиа

Опции аудио потока.

Термин no media (или bypass_media в параметрах) значит то же, что и canreinvite в Asterisk, т.е. медиа поток при установлении вызова идет напрямую между точками, минуя сервер.

proxy-media - наоборот, режим, когда FreeSWITCH сервер пропускает медиа трафик через себя.

                                        +------------+
                                        |            |
                                    ____| FreeSWITCH |___
                                   /    |            |   \
                              SIP /     +------------+    \ SIP
                                 /       10.10.1.150       \
                                /                           \
                         +----------+                    +----------+
                         |          |                    |          |
                         | endpoint |   <---- RTP ---->  | endpoint |
                         |    A     |        Audio       |    B     |
                         +----------+                    +----------+
                         10.10.1.100                      10.10.1.110

и включается опцией:

 <action application="set" data="bypass_media=true"/>
resume-media-on-hold

Забрать вызов с удержания.

 <param name="media-option" value="resume-media-on-hold"/>
bypass-media-after-att-xfer

Направить медиа поток напрямую, после сопровождаемого перевода вызова. \This will allow a call after an attended transfer go back to bypass media after an attended transfer.\

 <param name="media-option" value="bypass-media-after-att-xfer"/>
bypass-media-after-hold

Возвращает медиа поток напрямую с удержания. Эта опция может быть включена только если resume-media-on-hold установлено.

 <param name="media-option" value="bypass-media-after-hold"/>
inbound-bypass-media

Раскомментируйте, чтобы установить все входящие вызовы в 'no media' режим. Это значит, что FreeSWITCH сервер обрабатывает только SIP сообщения, а RTP трафик направляет напрямую, от точки к точке.

 <param name="inbound-bypass-media" value="true"/>
inbound-proxy-media

Раскомментируйте чтобы установить все входящие вызовы в режим 'proxy-media'. Это значит, что FreeSWITCH держит и SIP, и RTP трафик, но не взаимодействует с потоком RTP (не конвертирует кодеки?).

 <param name="inbound-proxy-media" value="true"/>
disable-rtp-auto-adjust
 <param name="disable-rtp-auto-adjust" value="true"/>
ignore-183nosdp
 <param name="ignore-183nosdp" value="true"/>
enable-soa
 <param name="enable-soa" value="true"/>

Установите значение «false» чтобы выключить SIP SOA from sofia to tell sofia not to touch the exchange of SDP\\???

t38-passthru
 <param name="t38-passthru" value="true"/>

Следующие опции доступны:

  • 'true' вкл. t38 в сквозном режиме.
  • 'false' выкл. t38 в сквозном режиме.
  • 'once' вкл. t38 passthru, но отправлять t.38 re-invite только раз.

Опции кодеков

<spoiler|поддерживаемые кодеки>

typenameikey
codecADPCM (IMA)mod_spandsp
codecAMRmod_amr
codecG.711 alawCORE_PCM_MODULE
codecG.711 ulawCORE_PCM_MODULE
codecG.722mod_spandsp
codecG.723.1 6.3kmod_g723_1
codecG.726 16kmod_spandsp
codecG.726 16k (AAL2)mod_spandsp
codecG.726 24kmod_spandsp
codecG.726 24k (AAL2)mod_spandsp
codecG.726 32kmod_spandsp
codecG.726 32k (AAL2)mod_spandsp
codecG.726 40kmod_spandsp
codecG.726 40k (AAL2)mod_spandsp
codecG.729mod_g729
codecGSM,mod_spandsp
codecH.261 Video (passthru)mod_h26x
codecH.263 Video (passthru)mod_h26x
codecH.263+ Video (passthru)mod_h26x
codecH.263++ Video (passthru)mod_h26x
codecH.264 Video (passthru)mod_h26x
codecLPC-10mod_spandsp
codecPROXY PASS-THROUGHCORE_PCM_MODULE
codecPROXY VIDEO PASS-THROUGHCORE_PCM_MODULE
codecPolycom(R) G722.1/G722.1Cmod_siren
codecRAW Signed Linear (16 bit)CORE_PCM_MODULE
codecSpeexmod_speex
codeciLBCmod_ilbc

</spoiler>

inbound-codec-prefs

Установить предпочтительные кодеки для входящих вызовов SIP профиля.

 <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/>
outbound-codec-prefs

Установить предпочтительные кодеки для исходящих вызовов SIP профиля.

 <param name="outbound-codec-prefs" value="$${outbound_codec_prefs}"/>
codec-prefs

Установить как входящие inbound-codec-prefs, так и исходящие outbound-codec-prefs одновременно.

 <param name="codec-prefs" value="$${global_codec_prefs}"/>
inbound-codec-negotiation

Переговоры использования предпочтительных кодеков при входящих вызовах.

Установите 'greedy' если кодеки указанные в системе, должны быть предпочтительней, кодекам требуемым снаружи.

 <param name="inbound-codec-negotiation" value="generous"/>

Если 'greedy' не срабатывает, попробуйте 'scrooge', который поможет исправить последствия некорректных запросов от провайдера.

Правила:

  • 'generous' Список кодеков удаленной стороны имеет приоритет над локальным.
  • 'greedy' Отдать приоритет локальным кодекам.
  • 'scrooge' не вступать в переговоры с удаленной стороной, применять локальные приоритеты кодеков.
  • sip_codec_negotiation - переменная канала, как вариант вышеуказанного параметра.
inbound-late-negotiation

Начинать сверяться с диалпланом ещё до того, как переговоры сторон по кодекам завершились успешно.

 <param name="inbound-late-negotiation" value="true"/>

bitpacking «Упаковка» This setting is for AAL2 bitpacking on G.726.

 <param name="bitpacking" value="aal2"/>
disable-transcoding

Отключить перекодировку кодеков.

<param name="disable-transcoding" value="true"/>
renegotiate-codec-on-reinvite
<param name="renegotiate-codec-on-reinvite" value="true"/>

STUN

Если вы нуждаетесь в использовании STUN сервера, ниже приведены несколько общих примеров: If you need to use a STUN server, here are common working examples:

ext-rtp-ip
 <param name="ext-rtp-ip" value="stun:stun.fwdnet.net"/>

stun.fwdnet.net публичный STUN сервер.

ext-sip-ip
 <param name="ext-sip-ip" value="world_reachable.real.numeric.ip"/>
 
stun-enabled

Простой обход UDP через NAT (Simple traversal of UDP over NATs (STUN)), используется для решения проблем SIP клиентов, находящихся за NAT, в частном пространстве IP адресов.

Stun используется, когда указан следующий параметр (по умолчанию true).

 <param name="stun-enabled" value="true"/>
stun-auto-disable

Установите 'true' для полного отключения 'stun', для данного профиля.

 <param name="stun-auto-disable" value="true"/>

NAT

apply-nat-acl

Когда FS получает запрос REGISTER или INVITE, включать режим NAT автоматически, если IP адрес в заголовке Contact совпадает со списком доступа RFC 1918.
acl в данном случае неправильное выражение, потому что в доступе не будет отказано. если контактный IP адрес не совпадает со списком доступа.

 <param name="apply-nat-acl" value="rfc1918"/>
aggressive-nat-detection
 <param name="aggressive-nat-detection" value="true"/>

Включает режим NAT, если IP/Port сети от которой был получен запрос, отличается от IP/Port SIP Via: заголовка.

VAD и CNG

Voice Activity Detection и Comfort Noise generation

VAD аббревиатура от Распознование Речевой Активности. FreeSWITCH может распознавать речь и останавливать передачу RTP трафика, если голоса нет. vad

 <param name="vad" value="in"/>
 <param name="vad" value="out"/>
 <param name="vad" value="both"/>
suppress-cng

Подавлять Comfort Noise Generator (CNG) для данного профиля или текущего вызова при помощи 'suppress_cng' переменной.

 <param name="suppress-cng" value="true"/>

NDLB (No device left behind)

NDLB-force-rport

Данная установка заставит FreeSWITCH отправить SIP ответ на тот же порт с которого был получен запрос. используйте на свой страх и риск! см. NAT Traversal.

 <param name="NDLB-force-rport" value="true|safe"/>

safe = использовать force-rport только для заведомо безопасных конечных точек (ENDPOINTS).

NDLB-broken-auth-hash
 <param name="NDLB-broken-auth-hash" value="true"/>
NDLB-received-in-nat-reg-contact

добавлять ;received=»<ip>:<port>« в Contact при ответе для NAT.

 <param name="NDLB-received-in-nat-reg-contact" value="true"/>
NDLB-sendrecv-in-session

По умолчанию, «a=sendrecv» is only included in the media portion of the SDP. While this is RFC-compliant, it may break functionality for some SIP devices. To also include «a=sendrecv» in the session portion of the SDP, set this parameter to true.

 <param name="NDLB-sendrecv-in-session" value="true"/>
NDLB-allow-bad-iananame

Разрешить неправильные имена кодеков.

 <param name="NDLB-allow-bad-iananame" value="true"/>

Refer to RFC 3551, RFC 3555 and the IANA list(s) for SDP

Call ID

inbound-use-callid-as-uuid

Для входящих вызовов задать UUID (Universally Unique Identifier) сессии равно SIP Call ID этого вызова.
On inbound calls make the uuid of the session equal to the SIP call id of that call.

 <param name="inbound-use-callid-as-uuid" value="true"/>
outbound-use-uuid-as-callid

Для исходящих вызовов установить CallID в соответствии с UUID сессии.
On outbound calls set the callid to match the uuid of the session

<param name="outbound-use-uuid-as-callid" value="true"/>

Это делается в »..sip_profiles/external.xml« file.

TLS

Прочтите: https://asterisk-pbx.ru/wiki/freeswitch/sip/sip-tls до включения нижеперечисленных опций.

tls

TLS: отключено по умолчанию, установите «true» tчтобы включить.

 <param name="tls" value="$${internal_ssl_enable}"/>
tls-only

Выключено по умолчанию, если включить предотвращает прослушивание на незашифрованном порту для этого соединения.

Если ВСЕ ваши клиенты регистрируются через TLS, это может сделать ваш FreeSWITCH сервер менее уязвимым.

 <param name="tls-only" value="false"/>
tls-bind-params

Дополнительный параметр для TLS

 <param name="tls-bind-params" value="transport=tls"/>
tls-sip-port

Порт прослушиваемый для TLS подключений. (5061 если не указано другое)

 <param name="tls-sip-port" value="$${internal_tls_port}"/>
tls-cert-dir

Расположение agent.pem и cafile.pem ssl сертификатов (требуется для TLS сервера)

 <param name="tls-cert-dir" value="$${internal_ssl_dir}"/>
tls-version

TLS версия(«sslv2», «sslv3», «sslv23», «tlsv1», «tlsv1.1», «tlsv1.2»). Примечание: телефоны могут не работать с TLSv1

 <param name="tls-version" value="$${sip_tls_version}"/>

When not set defaults to: «tlsv1,tlsv1.1,tlsv1.2»

tls-passphrase

Если ваш agent.pem защищен кодовой фразой, укажите её здесь, чтобы FreeSWITCH мог расшифровать ключ.

 <param name="tls-passphrase" value=""/>
tls-verify-date

Если клиент/сервер сертификат должен иметь срок действия для подтверждения его активности.

 <param name="tls-verify-date" value="true"/>
tls-verify-policy

Контролирует проверку сервер/клиент сертификатов.

  • 'in' для входящих подключений
  • 'out' для исходящий
  • 'all' для всех

а также 'in_subjects', 'out_subjects' и 'all_subjects'. Несколько политик могут быть заданы через '|' pipe - 'in_subjects|out'

  • 'none' по умолчанию.
 <param name="tls-verify-policy" value="none"/>
tls-verify-depth

Глубина проверки сертификата, если (tls-verify-policy) включено.

 <param name="tls-verify-depth" value="2"/>
tls-verify-in-subjects

Если проверка вкл. для входящих подключений (tls-verify-policy вкл. 'in_subjects' или 'all_subjects') задается список разрешенных субъектов (зазделяются '|' трубой). Это имеет эффект только для входящих подключений, для исходящих всегда проверяется по hostname/ip.

 <param name="tls-verify-in-subjects" value=""/>

DTMF

rfc2833-pt
 <param name="rfc2833-pt" value="101"/>
dtmf-duration
 <param name="dtmf-duration" value="100"/>
dtmf-type

Установите параметр в SIP профиле:

 <param name="dtmf-type" value="info"/>

или

 <param name="dtmf-type" value="rfc2833"/>

или

 <param name="dtmf-type" value="none"/>

или задайте переменную в SIP шлюзе или профиле пользователя

<variables>
  <variable direction="inbound|outbound|both" name="dtmf_type" value="info"> 
</variables>
pass-rfc2833

Default: false

Если true, DTMF проходит с одной стороны на другую нетронутыми. В противном случае сигналы декодируются и кодируются снова перед передачей.

 <param name="pass-rfc2833" value="true"/>
liberal-dtmf

Default: false Договорной режим DTMF, предлагаем 2833, принимаем 2833 и INFO.

 <param name="liberal-dtmf" value="true"/>

Опции SIP

enable-timer

Вкл. или выкл таймер по RFC 4028 SIP Session Timers.

 <param name="enable-timer" value="false"/>
session-timeout

Таймер сессии истекает после заданного в секундах периода. Когда время истекло система посылает повторное приглашение (re-invite) Если не задано другое, по умолчанию таймаут 30 минут (1800 секунд). Некоторые шлюзы могут отклонить приглашение приходящее чаще, чем раз в 30 минут. Это значение относится к Session-Expires в RFC 4028

<param name=«session-timeout» value=«1800»/>

enable-100rel

Включить поддержку 100rel (100% reliability(100% надежность - PRACK сообщение назначенное в RFC3262) Это исправляет проблему SIP, когда на предварительное сообщение, такое как «180 Ringing», вызываемая сторона не отправляет ACK и из-за низкой надежности соединения не происходит передача.

 <param name="enable-100rel" value="true"/>
minimum-session-expires

Устанавливает «Min-SE» значение (в секундах) из RFC 4028. Это значение не может быть менее 90 секунд.

 <param name="minimum-session-expires" value="120"/>
sip-options-respond-503-on-busy

Когда 'true', данный параметр настроит FreeSWITCH отвечать на входящие SIP OPTIONS сообщением 503 «Maximum Calls In Progress», когда FS приостановлен или максимальное кол-во сессий превышено. Когда уситановлено 'false' (по умолчанию), SIP OPTIONS в любом случае будет 200 «ОК».

 <param name="sip-options-respond-503-on-busy" value="false"/> 

Установите этот параметр 'true', если вы используете прокси, такие как OpenSIPS или Kamailio с dispatcher модулем, чтобы они могли сканировать FS пакетами SIP OPTIONS.

sip-force-expires

Данный параметр задает время до истечения SIP 200 OK, в ответ на входящие SIP Registers для этого профиля. Имеет приоритет над индивидуальными установками sip-force-expires в пользовательской директории (../conf/directory/*)

sip-expires-max-deviation

Задает произвольно отклонение в секундах от значения sip-force-expires

 <param name="sip-force-expires" value="1800"/>
 <param name="sip-expires-max-deviation" value="600"/>

в этом случае значение может быть между 1800-600=1200 и 1800+600=2400 . Имеет приоритет над индивидуальными установками sip-expires-max-deviation в пользовательской директории (../conf/directory/*)

outbound-proxy

Outbound-proxy для всех исходящих соединений.

 <param name="outbound-proxy" value="127.0.0.1"/>
send-display-update

Говорит FreeSWITCH не отправлять display UPDATEs на этапе вызова.

 <param name="send-display-update" value="false"/>

Опции RTP

auto-jitterbuffer-msec

Задает размер jitter буфера для всех вызовов проходящих через данный профиль.

 <param name="auto-jitterbuffer-msec" value="120"/>
rtp-timer-name
 <param name="rtp-timer-name" value="soft"/>
rtp-rewrite-timestamps

Если вы не желаете пропускать временную засечку из одного RTP потока к другому, rtp-rewrite-timestamps параметр включите для SIP профиля.
В результате этого FreeSWITCH создаст и пере-запишет временную засечку во всех RTP потоках по направлению к оконечным точкам (ENDPOINTS), использующих данный SIP профиль.
Это может пригодится для исправления проблем с аудио, например с некоторыми проблемными устройствами, работающими не по спецификациям RFC.

 <param name="rtp-rewrite-timestamps" value="true"/>
rtp-timeout-sec

Время в секундах отсутствия активности в RTP потоке (тишины), прежде чем FreeSWITCH разъединит вызов.

 <param name="rtp-timeout-sec" value="300"/>
rtp-hold-timeout-sec

Время в секундах отсутствия активности в RTP потоке (тишины), для вызовов поставленных на удержание, прежде чем FreeSWITCH разъединит вызов.

<param name=«rtp-hold-timeout-sec» value=«1800»/>

rtp-autoflush-during-bridge

Контролирует, что происходит, если FreeSWITCH обнаруживает задержку голосовых пакетов в установленном соединении. Когда «true» (по умолчанию), FreeSWITCH отмечает, когда в очереди скапливается более одного пакета и если это состояние сохраняется более 5-ти секунд, отбрасывает их. Это приведет к провалу в аудио потоке, но позволит уменьшить задержку. Если установлено «false», FreeSWITCH будет сохранять все пакеты, несмотря на увеличение задержки и лаги (lag).

 <param name="rtp-autoflush-during-bridge" value="true"/>
rtp-autoflush

Это имеет тот же эффект, что и «rtp-autoflush-during-bridge», но тоьлко для некоммутированных соединений (IVR, эхо тест итд)

 <param name="rtp-autoflush" value="true"/>
 

Auth

Настройки аутентификации: требования к оконечным точкам (SIP endpoints) в FreeSWITCH.

challenge-realm

Выберете значение realm вызова. По умолчанию aut_to если ничего не установлено.

Choose the realm challenge key. Default is auto_to if not set.

auto_from - использует поле from в качестве значения SIP realm.
<anyvalue> - вы можете ввести любое значение SIP realm.
Если требуется чтобы работал URL набор, используйте AUTO_FROM
Если используется любое значение вместо auto_to или aito_from, вы потеряете возможность использовать несколько доменов для данного профиля.

 <param name="challenge-realm" value="auto_from"/>
accept-blind-auth

Разрешить слепую аутентификацию, фактически без проверки.(???) accept any authentication without actually checking (not a good feature for most people)

 <param name="accept-blind-auth" value="true"/>
 
auth-calls

Пользователи в директории могут иметь «auth-acl» параметры, чтобы ограничить доступ по ACL или CIDR. Users in the directory can have «auth-acl» parameters applied to them so as to restrict users access to a predefined ACL or a CIDR.

    <param name="auth-calls" value="$${internal_auth_calls}"/>

Значение «false» отключает аутентификацию в данном профиле.

log-auth-failures

Сохранять ошибки аутентификации в лог.

 <param name="log-auth-failures" value="true"/>
auth-all-packets

Включить аутентификацию для всех пакетов, а не только для REGISTER и INVITE (OPTIONS, SUBSCRIBE, INFO и MESSAGE не авторизуются даже если значение «true».)

 <param name="auth-all-packets" value="false"/>

Registration

REGISTER message associates your Contact URI - where your user agent is - with your From URI - who you are.

disable-register

Отключить регистрацию.

 <param name="disable-register" value="true"/>
multiple-registrations

Возможные значения для этого параметра «contact», «true», «false».
Значение «true» наиболее используемое.
Если установить «contact» старые регистрации на основании полей sip_user, sip_host и contact будут удалены, кроме call-id (???) Setting this value to «contact» will remove the old registration based on sip_user, sip_host and contact field as opposed to the call_id.

 <param name="multiple-registrations" value="contact"/>
max-registrations-per-extension

Jira FS-2720

 <param name="user-agent-filter" value="^(snom (\w+))||(Polycomm (\w+))$" />
 <param name="max-registrations" value="3" />
 
accept-blind-reg

this lets anything register comment the next line and uncomment one or both of the other 2 lines for call authentication

 <param name="accept-blind-reg" value="true"/>
inbound-reg-force-matching-username

User и authuser должны совпадать.

 <param name="inbound-reg-force-matching-username" value="true"/>
force-publish-expires

Принудительное обновление пользовательских состояний (-1 бесконечно)

 <param name="force-publish-expires" value="true"/>
force-register-domain

Это заставит профиль игнорировать домен указанный в заголовках to или from запроса Register, а указывать значение заданное здесь. В БД же сохранится оригинальное значение - user@<from domain in SIP packet>. Закомментируйте для использования нескольких доменов.

 <param name="force-register-domain" value="$${domain}"/>
force-register-db-domain

Это тоже самое, что и force-register-domain, только в БД будет сохранено модифицированное значение. Закомментируйте для использования нескольких доменов.

 <param name="force-register-db-domain" value="$${domain}"/>
send-message-query-on-register

Может быть установлено 'true', 'false' или 'first-only'. Если задано «true» (по умолчанию), mod_sofia должно отправить сообщение-запрос на регистрацию. mod_voicemail использует это для подсчета сообщений.

 <param name="send-message-query-on-register" value="true"/>

Если установлено 'first-only', только на первый запрос REGISTER отправляется сообщение-запрос.

unregister-on-options-fail

Если установлено «true» совместно с «nat-options-ping» оконечная точка теряет регистрацию если не приходит ответ на пакет OPTIONS.

 <param name="unregister-on-options-fail" value="true"/>
nat-options-ping

С данной установкой FreeSWITCH периодически отправляет пакет OPTIONS все находящимся за NATом оконечным точкам, для поддержания соединения. Если установлено True в «unregister-on-options-fail» конечные точки потеряют регистрацию по не ответу на OPTIONS.

 <param name="nat-options-ping" value="true"/>
all-reg-options-ping

Периодически отправлять OPTIONS всем зарегистрированным точкам.

 <param name="all-reg-options-ping" value="true"/>
registration-thread-frequency

Как часто проверяется состояние регистраций Управляет отправкой пакетов OPTIONS совместно с опциями наподобие nat-options-ping.

 
 <param name="registration-thread-frequency" value="30"/>
inbound-reg-in-new-thread

Для каждой входящей регистрации, запускать новый поток обработки.

 
 <param name="inbound-reg-in-new-thread" value="true"/>
 

Subscription

SUBSCRIBE — подписка на получение уведомлений о событиях.

force-subscription-expires

Принудительное истечение срока подписки.

 <param name="force-subscription-expires" value="60"/>
force-subscription-domain

Это заставит профиль игнорировать домен указанный в заголовках to или from запроса Subscribe, а указывать значение заданное здесь. В БД же сохранится оригинальное значение - user@<from domain in SIP packet>. Закомментируйте для использования нескольких доменов.

 <param name="force-subscription-domain" value="$${domain}"/>

Presence

manage-presence

Включить состояния. Для отображения состояний (присутсвия) установите «true» и укажите БД общего присутствия.

 
 <param name="manage-presence" value="true"/>

dbname Используется для передачи данных о присутствии между профилями. Имя БД используемой этим профилем. <param name=«dbname» value=«share_presence»/>

presence-hold-state

По умолчанию, когда вызов поставлен на удержание, другие екстеншены видят этот екстеншен как звонящий. Вы можете изменить это поведение назначив данному параметру следующие значения:

confirmed - Екстеншен занят. early (default) - вызывается (звонит). terminated - свободен.

 <param name="presence-hold-state" value="confirmed"/>
presence-hosts

Список доменов поделившихся информацией о присутствие в БД указанной в dbname. Если требуется использовать несколько доменов на профиль, эта опция не может быть использована.

 <param name="presence-hosts" value="$${domain}"/>
presence-privacy

Не отображать caller ID в NOTIFY сообщениях

 <param name="presence-privacy" value="true"/>
send-presence-on-register

Сообщать или нет о регистрации пользователя.

  • false
  • true
  • first-only
 <param name="send-presence-on-register" value="true"/>

Опции CallerID

caller-id type

Выберете одно, для перезаписи типа входящего вызова и/или sip_CID_type переменной канала.

Remote-Party-ID заголовок:

 <param name="caller-id-type" value="rpid"/>

P-*-Identity family of headers:

 <param name="caller-id-type" value="pid"/>

ни то, ни другое:

 <param name="caller-id-type" value="none"/>
pass-callee-id

(по умолчанию true) Выкл. если требуется игнорировать Caller-ID.

 <param name="pass-callee-id" value="false"/>

Другие

hold-music
 <param name="hold-music" value="$${hold_music}"/>
disable-hold

Выключить Music on Hold Это может быть полезно, когда взывающее устройство отправляет собственный MoH.

 <param name="disable-hold" value="true"/>
apply-inbound-acl

Установить Access Control List (Список контроля доступа), назначается в acl.conf.xml, для данного профиля.

 <param name="apply-inbound-acl" value="domains"/>
apply-register-acl
 <param name="apply-register-acl" value="domains"/>
apply-proxy-acl
 <param name="apply-proxy-acl" value="myproxies"/>

Это разрешит трафик This allows traffic для отправки FreeSWITCH через один или больше proxy сервер. Прокси сервер должен добавить заголовок называемый X-AUTH-IP, содержащий IP адрес клиента. FreeSWITCH доверяет прокси, потому что IP адрес есть в списке прокси сереверов ACL и использует IP адрес клиента в заголовке для ACL аутентификации.

record-template
 <param name="record-template" value="$${base_dir}/recordings/${caller_id_number}.${target_domain}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/>
max-proceeding

максимально кол-во открытых диалогов в обработке.

 <param name="max-proceeding" value="1000"/>
bind-params
 <param name="bind-params" value="transport=udp"/>
 
disable-transfer

Выключить transfer, если это нежелательно для общего использования. disable transfer which may be undesirable in a public switch

 <param name="disable-transfer" value="true"/>
manual-redirect
 <param name="manual-redirect" value="true"/>
enable-3pcc

Разрешить управление вызовом третьей стороне (third party call control).

 <param name="enable-3pcc" value="true"/>
nonce-ttl

TTL для одноразовой аутентификации.

 <param name="nonce-ttl" value="60"/>

Этот параметр установлен 60 секунд, если здесь не назначено другое . It's used to determine how long to store the user registration record in the sip_authentication table. The expires field in the sip_authentication table is this value plus the expires set by the user agent.

sql-in-transactions

Накопить 500 SQL операторов или ждать 500 ms прежде чем выполнить их сдельно.

 <param name="sql-in-transactions" value="true"/>
odbc-dsn

Если вы используете ODBC и работает DSN (Data Source Name) используйте вместо SQLIte:

 <param name="odbc-dsn" value="dsn:user:pass"/>
mwi-use-reg-callid
 <param name="mwi-use-reg-callid" value="false">

username если вы хотите скрыть тот факт. что используете FreeSWITCH в SDP сообщениях (В частности в «o»= и «s»= полях) , задайте желаемое имя, для использования с данным профилем. Это никак не связано с параметром username в настройках шлюза (Gateway) Если ничего не задано, используется FreeSWITCH, по умолчанию.

<param name=«username» value=«AnyValueHere» />

Пример:

.
v=0.
o=root 1346068950 1346068951 IN IP4 1.2.3.4.
s=root.
c=IN IP4 1.2.3.4.
t=0 0.
m=audio 26934 RTP/AVP 18 0 101 13.
a=fmtp:18 annexb=no.
a=rtpmap:101 telephone-event/8000.
a=fmtp:101 0-16.
a=ptime:20.

если установлено:

 <param name="username" value="root" />
 

FreeSWITCH

  • freeswitch/sip/fs_sofia_xml.txt
  • Последние изменения: 2020/03/26