conf/sip_profiles/internal.xml说明
internal.xml
internel.xml 定义了一个 profile,在本节,我们以系统默认的配置逐行来解释:
<profile name="internal"> 复制代码
profile 的名字就叫 internal,这个名字本身并没有特殊的意义,也不需要与文件名相同,你可以改成任何你喜欢的名字,只是需要记住它,因为很多地方要使用这个名字。
<aliases> <!-- <alias name="default"/> --> </aliases> 复制代码
如果你喜欢,可以为该 profile 起一个别名。注意默认是加了注释的,也就是说不起作用。再说一遍,“<!– –>”在 XML 中的含义是注释。
<gateways> <X-PRE-PROCESS cmd="include" data="internal/*.xml"/> </gateways> 复制代码
即然 profile 是一个 UA,它就可以注册到别的 SIP 服务器上去,它要注册的 SIP 服务器就称为 Gateway。我们一般不在 internal 这个 profile 上使用 Gateway,这个留到 external 时再讲。
<domains> <!--<domain name="$${domain}" parse="true"/>--> <domain name="all" alias="true" parse="false"/> </domains> 复制代码
定义该 profile 所属的 domain。它可以是 IP 地址,或一个 DNS 域名。需要注意,直接在 hosts 文件中设置的 IP-域名可能不好用。
<settings> 复制代码
settings 部分设置 profile 的参数。
<!--<param name="media-option" value="resume-media-on-hold"/> --> 复制代码
如果 FreeSWITCH 是没有媒体(no media)的,那么如果设置了该参数,当你在话机上按下 hold 键时,FreeSWITCH 将会回到有媒体的状态。
那么什么叫有媒体无媒体呢?如下图,bob 和 alice 通过 FreeSWITCH 使用 SIP 接通了电话,他们谈话的语音(或视频)数据要通过 RTP 包传送的。RTP 可以 像 SIP 一样经过 FreeSWITCH 转发,但是,RTP 占用很大的带宽,如果 FreeSWITCH 不需要“偷听”他们谈话的话,为了节省带宽,完全可以让 RTP 直接在两者间传送,这种情况对 FreeSWITCH 来讲就是没有 media 的,在 FreeSWITCH 中也称 bypass media(绕过媒体)。
FreeSWITCH SIP / \ SIP / \ bob ------RTP------ alice 复制代码
.
<!--<param name="media-option" value="bypass-media-after-att-xfer"/>--> 复制代码
Attended Transfer 称为出席转移,它需要 media 才能完成工作。但如果在执行 att-xfer 之前没有媒体,该参数能让 att-xfer 执行时有 media,转移结束后再回到 bypass media 状态。
<!-- <param name="user-agent-string" value="FreeSWITCH Rocks!"/> --> 复制代码
不用解释,就是设置 SIP 消息中显示的 User-Agent 字段。
<param name="debug" value="0"/> 复制代码
debug 级别。
<!-- <param name="shutdown-on-fail" value="true"/> --> 复制代码
由于各种原因(如端口被占用,IP地址错误等),都可能造成 UA 在初始化时失败,该参数在失败时会停止 FreeSWITCH。
<param name="sip-trace" value="no"/> 复制代码
是否开启 SIP 消息跟踪。另外,也可以在控制台上用以下命令开启和关闭 sip-trace:
sofia profile internal siptrace on sofia profile internal siptrace off 复制代码
.
<param name="log-auth-failures" value="true"/> 复制代码
是否将认证错误写入日志。
<param name="context" value="public"/> 复制代码
context 是 dialplan 中的环境。在此指定来话要落到 dialplan 的哪个 context 环境中。需要指出,如果用户注册到该 profile 上(或是经过认证的用户,即本地用户),则用户目录(directory)中设置的 contex 优先级要比这里高。
<param name="rfc2833-pt" value="101"/> 复制代码
设置 SDP 中 RFC2833 的值。RFC2833 是传递 DTMF 的标准。
<param name="sip-port" value="$${internal_sip_port}"/> 复制代码
监听的 SIP 端口号,变量 internal_sip_port 在 vars.xml 中定义,默认是 5060。
<param name="dialplan" value="XML"/> 复制代码
设置对应默认的 dialplan。我们后面会专门讲 dialplan。
<param name="dtmf-duration" value="2000"/> 复制代码
设置 DTMF 的时长。
<param name="inbound-codec-prefs" value="$${global_codec_prefs}"/> 复制代码
支持的来话语音编码,用于语音编码协商。global_codec_prefs 是在 vars.xml中定义的。
<param name="outbound-codec-prefs" value="$${global_codec_prefs}"/> 复制代码
支持的去话语音编码。
<param name="rtp-timer-name" value="soft"/> 复制代码
RTP 时钟名称
<param name="rtp-ip" value="$${local_ip_v4}"/> 复制代码
RTP 的 IP 地址,仅支持 IP 地址而不支持域名。虽然 RTP 标准说应该域名,但实际情况是域名解析有时不可靠。
<param name="sip-ip" value="$${local_ip_v4}"/> 复制代码
SIP 的 IP。不支持域名。
<param name="hold-music" value="$${hold_music}"/> 复制代码
UA 进行 hold 状态时默认播放的音乐。
<param name="apply-nat-acl" value="nat.auto"/> 复制代码
使用哪个 NAT ACL。
<!-- <param name="extended-info-parsing" value="true"/> --> 复制代码
扩展 INFO 解析支持。
<!--<param name="aggressive-nat-detection" value="true"/>--> 复制代码
NAT穿越,检测 SIP 消息中的 IP 地址与实际的 IP 地址是否相符,详见 NAT穿越。
<!-- There are known issues (asserts and segfaults) when 100rel is enabled. It is not recommended to enable 100rel at this time. --> <!--<param name="enable-100rel" value="true"/>--> 复制代码
该功能暂时还不推荐使用。
<!--<param name="enable-compact-headers" value="true"/>--> 复制代码
支持压缩 SIP 头。
<!--<param name="enable-timer" value="false"/>--> 复制代码
开启、关闭 SIP 时钟。
<!--<param name="minimum-session-expires" value="120"/>--> 复制代码
SIP 会话超时值,在 SIP 消息中设置 Min-SE。
<param name="apply-inbound-acl" value="domains"/> 复制代码
对来话采用哪个 ACL。详见 ACL。
<param name="local-network-acl" value="localnet.auto"/> 复制代码
默认情况下,FreeSWITCH 会自动检测本地网络,并创建一条 localnet.auto ACL 规则。
<!--<param name="apply-register-acl" value="domains"/>--> 复制代码
对注册请求采用哪个 ACL。
<!--<param name="dtmf-type" value="info"/>--> 复制代码
DTMF 收号的类型。有三种方式,info、inband、rfc2833。
- info 方式是采用 SIP 的 INFO 消息传送 DTMF 按键信息的,由于 SIP 和 RTP 是分开走的,所以,可能会造成不同步。
- inband 是在 RTP 包中象普通语音数据那样进行带内传送,由于需要对所有包进行鉴别和提取,需要占用更多的资源。
- rfc2833 也是在带内传送,但它的 RTP 包有特殊的标记,因而比 inband 方式节省资源。它是在 RFC2833 中定义的。
<!-- 'true' means every time 'first-only' means on the first register --> <!--<param name="send-message-query-on-register" value="true"/>--> 复制代码
如何发送请求消息。true 是每次都发送,而 first-only 只是首次注册时发送。
<!--<param name="caller-id-type" value="rpid|pid|none"/>--> 复制代码
设置来电显示的类型,rpid 将会在 SIP 消息中设置 Remote-Party-ID,而 pid 则会设置 P-*-Identity,如果不需要这些,可以设置成 none。
<param name="record-path" value="$${recordings_dir}"/> 复制代码
录音文件的默认存放路径。
<param name="record-template" value="${caller_id_number}.${target_domain}.${strftime(%Y-%m-%d-%H-%M-%S)}.wav"/> 复制代码
录音文件名模板。
<param name="manage-presence" value="true"/> 复制代码
是否支持列席。
<!--<param name="manage-shared-appearance" value="true"/>--> 复制代码
是否支持 SLA – Shared Line Apperance。
<!--<param name="dbname" value="share_presence"/>--> <!--<param name="presence-hosts" value="$${domain}"/>--> 复制代码
这两个参数用以在多个 profile 间共享列席信息。
<!-- This setting is for AAL2 bitpacking on G726 --> <!-- <param name="bitpacking" value="aal2"/> --> <!--<param name="max-proceeding" value="1000"/>--> 复制代码
最大的开放对话(SIP Dialog)数。
<!--session timers for all call to expire after the specified seconds --> <!--<param name="session-timeout" value="120"/>--> 复制代码
会话超时时间。
<!-- Can be 'true' or 'contact' --> <!--<param name="multiple-registrations" value="contact"/>--> 复制代码
是否支持多点注册,可以是 contact 或 true。开启多点注册后多个 UA 可以注册上来,有人呼叫这些 UA 时所有 UA 都会振铃。
<!--set to 'greedy' if you want your codec list to take precedence --> <param name="inbound-codec-negotiation" value="generous"/> 复制代码
SDP 中的语音编协商,如果设成 greedy,则自己提供的语音编码列表会有优先权.
<!-- if you want to send any special bind params of your own --> <!--<param name="bind-params" value="transport=udp"/>--> <!--<param name="unregister-on-options-fail" value="true"/>--> 复制代码
为了 NAT 穿越或 keep alive,如果 FreeSWITCH 向其它网关注册时,可以周期性地发一些 OPTIONS 包,相当于 ping 功能。该参数说明当 ping 失败时是否自动取消注册。
<param name="tls" value="$${internal_ssl_enable}"/> 复制代码