Freeswitch-sofia.conf.xml
Overview
Freeswitch SIP module 설정파일 sofia.conf.xml 내용 정리
Structure
sofia.conf.xml 파일은 다음과 같은 구조로 되어있다. <source lang=xml> <configuration name="sofia.conf" description="sofia endpoint">
<global_settings> ... </global_settings>
<profiles> ... </profiles>
</configuration> </source>
global_settings
전역 설정을 하는 부분이다. <source lang=xml>
<global_settings> <param name="log-level" value="0"/> <param name="auto-restart" value="false"/> <param name="debug-presence" value="0"/> </global_settings>
</source>
profiles
sofia 모듈에서 사용하는 각각의 프로필을 설정한다.
<source lang=xml>
<profiles> <profile name="example"> <gateways> <gateway name="example-gateway"> ... </gateway> ... </gateways>
<aliases> <alias name="default"/> </aliases>
<domains> <domain name="all" alias="true" parse="false"/> </domains>
<settings> ... </settings> </profile> </profiles>
</source>
profile
profile/gateways
gateway 는 속성값 name 을 가지며, 이를 통해 다른 곳에서 해당 gateway 를 참조할 수 있게된다. 각각의 gateway 는 서로 다른 UA로써 작동하게되며 어떻게 목적지까지 도달하는지를 정의하게 된다. 예를 들면, PSTN 연결 방식을 지정할 수도 있으며 혹은 Private SIP Network 가 정의되어 있을 수도 있다. Asterisk 의 Registry 와 비슷한 개념으로 볼 수 있다. <source lang=xml> <gateways>
<gateway> elements... </gateway>
<gateway> elements... </gateway>
</gateways> </source>
다음은 설정 예제이다. <source lang=xml> <gateway name="gateway012">
<param name="realm" value="sip.voipcarrier.com" /> <param name="username" value="WBrandes" /> <param name="password" value="myvoiceismypassword" /> <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="PCMU,PCMA" direction="outbound" /> <variable name="customer_id" value="3532" direction="inbound"/> </variables>
</gateway> </source>
여기서 설정한 gateway 를 dialplan 에서 사용하는 방법은 다음과 같다.
sofia/gateway/<gateway_name>/<dialstring>
Parameters
realm
<source lang=xml> <param name="realm" value="sip.example.com[:port]"/> </source>
username
Profile setting 에서의 username 과 혼동하지 말것. <source lang=xml> <param name="username" value="foo"/> </source>
password
<source lang=xml> <param name="password" value="a password"/> </source>
from-user
<source lang=xml> <param name="from-user" value="fooman"/> </source>
from-domain
<source lang=xml> <param name="from-domain" value="asterlink.com"/> </source>
Use Freeswitch as a client
Freeswitch 는 다른 서버(freeswitch 등)로부터 이벤트를 받아오는 client 로서 작동할 수 있다. 이를 위해서는 gateway 설정에 아래와 같이 subscriptions 섹션을 추가하면 된다. <source lang=xml> <include>
<gateway name="fs2"> <param name="realm" value="192.168.7.2"/> <param name="username" value="1000"/> <param name="password" value="1234"/> <param name="register" value="false"/>
<subscriptions name="x">
<subscription event="dialog"> <param name="retry-seconds" value="40"/> <param name="expire-seconds" value="60"/> <param name="content-type" value="application/dialog-info+xml"/> <param name="username-in-request" value="true"/> </subscription>
</subscriptions> </gateway>
</include> </source>
profile/settings
Basic settings
debug
<source lang=xml> <param name="debug" value="0"/> </source>
sip-trace
SIP detail 로그를 기록한다. <source lang=xml> <param name="sip-trace" value="yes"/> </source>
sip-capture
<source lang=xml> <param name="sip-capture" value="no"/> </source>
watchdog-enabled
<source lang=xml> <param name="watchdog-enabled" value="no"/> </source>
watchdog-step-timeout
<source lang=xml> <param name="watchdog-step-timeout" value="30000"/> </source>
watchdog-event-timeout
<source lang=xml> <param name="watchdog-event-timeout" value="30000"/> </source>
context
해당 프로필로 인입된 콜에 적용될 context 를 지정한다. <source lang=xml> <param name="context" value="public"/> </source>
sip-port
port 번호를 지정한다. <source lang=xml> <param name="sip-port" value="$${internal_sip_port}"/> </source>
dialplan
dialplan parameter 는 특별히 중요하다. 가장 단순하게는 XML dialplan 을 사용할 수 있다. XML 설정 시, mod_xml_curl 모듈을 이용해서 freeswitch.xml dialplan 섹션에 설정된 파일 내용을 읽어오게 된다. dialplan 적용시, 설정된 dialplan 내용 중에서 가장 처음 적용가능한 dialplan 내용을 적용하게 된다. <source lang=xml> <param name="dialplan" value="XML"/> </source>
enum lookup 을 사용할 수도 있다(mod_enum 에서 dialplan 을 지원한다면). 이 경우 enum lookup 이 XML dialplan 설정을 덮어쓰게 된다. <source lang=xml> <param name="dialplan" value="enum,XML"/> </source>
순서를 반대로 적용할 경우, XML lookup 이 실패했을 경우에만 enum 설정을 적용하게 된다. <source lang=xml> <param name="dialplan" value="XML,enum"/> </source>
특정 enum root 를 적용할 수도 있다. <source lang=xml> <param name="dialplan" value="enum:foo.com,XML"/> </source>
특정 XML 을 지정할 수도 있다. <source lang=xml> <param name="dialplan" value="XML:/tmp/foo.xml,XML,enum"/> </source>
rtp-ip
RTP Listen IP 주소를 설정한다. 반드시 IP Address로 입력해야 한다. hostname 으로 입력하면 안된다. <source lang=xml> <param name="rtp-ip" value="$${local_ip_v4_or_v6}"/> </source>
sip-ip
SIP listen IP 주소를 설정한다. 반드시 IP Address로 입력해야 한다. hostname 으로 입력하면 안된다. <source lang=xml> <param name="sip-ip" value="$${local_ip_v4_or_v6}"/> </source>
Auth
log-auth-failures
인증실패시 해당 내역을 로그로 기록한다(Registration & invite). fail2ban 과 같은 유틸을 사용하고자할 때 유용하다. <source lang=xml> <param name="log-auth-failures" value="false"/> </source>
DTMF
rfc2833-pt
<source lang=xml> <param name="rfc2833-pt" value="101"/> </source>
dtmf-duration
<source lang=xml> <param name="dtmf-duration" value="100"/> </source>
inbound-codec-prefs
inbound 시 적용할 codec 우선순위를 설정한다. <source lang=xml> <param name="inbound-codec-prefs" value="$${global_codec_prefs}"/> </source>
outbound-codec-prefs
outbound 시 적용할 codec 우선순위를 설정한다. <source lang=xml> <param name="outbound-codec-prefs" value="$${outbound_codec_prefs}"/> </source>
SIP Related options
enable-timer
RFC4028 SIP Session Timer 를 Enable/Disable 한다. <source lang=xml> <param name="enable-timer" value="false"/> </source>
minimum-session-expires
RFC4028 에서의 "Min-SE" 값(Sec)을 설정한다. 최소 90 이상이 설정되어야 한다. <source lang=xml> <param name="minimum-session-expires" value="120"/> </source>
session-timeout
session timers for all call to expire after the specified seconds Then it will send another invite (re-invite). If not specified defaults to 30 minutes. Some gateways may reject values less than 30 minutes. This values refers to Session-Expires in RFC 4028 (The time at which an element will consider the session timed out, if no successful session refresh transaction occurs beforehand) <source> <param name="session-timeout" value="1800"/> </source
RTP Related options
rtp-timer-name
<source lang=xml> <param name="rtp-timer-name" value="soft"/> </source>
NATing
aggressive-nat-detection
적극적인 NAT dectection 을 적용한다. SIP Via: header 를 분석하여 SIP From: 내용과 맞지 않으면 NAT 모드를 enable 한다. <source lang=xml> <param name="aggressive-nat-detection" value="true"/> </source>
Presence
manage-presence
Presence 모드를 enable/disable 한다. If you want to share your presence (see dbname and presence-hosts) set this to "true" on the first profile and enable the shared presence database. Then on subsequent profiles that share presence set this variable to "passive" and enable the shared presence database there as well. <source lang=xml> <param name="manage-presence" value="true"/> </source>
presence-hosts
A list of domains that have a shared presence in the database specified in dbname. People who use multiple domains per profile can't use this feature anyway, so you'll want to set it to something like "_DISABLED_" in this case to avoid getting users from similar domains all mashed together. For multiple domains also known as multi-tenant calling 1001 would call all matching users in all domains. Don't use presence-hosts with multi-tenant. <source lang=xml> <param name="presence-hosts" value="$${domain},$${local_ip_v4}"/> </source>
ETC
forward-unsolicited-mwi-notify
<source lang=xml> <param name="forward-unsolicited-mwi-notify" value="false"/> </source>
hold-music
<source lang=xml> <param name="hold-music" value="$${hold_music}"/> </source>
record-path
<source lang=xml> <param name="record-path" value="$${recordings_dir}"/> </source>
record-template
<source lang=xml> <param name="record-template" value="$${base_dir}/recordings/${caller_id_number}.${target_domain}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> </source>
<source lang=xml> </source> <source lang=xml> </source> <source lang=xml> </source> <source lang=xml> </source> <source lang=xml> </source> <source lang=xml> </source> <source lang=xml> </source> <source lang=xml> </source> <source lang=xml> </source> <source lang=xml> </source>
See also
- http://wiki.freeswitch.org/wiki/Sofia_Configuration_Files - sofia.conf.xml
References
<references />