常用SIP URL解析

SIP支持多种URI/URL方案,包括sip、sips、tel、pres,还有用于SIP的im,这里想谈谈安全SIP、电话、状态呈现和即时消息相关的URI方案。之前SIP URL中给了一个列表,说明SIP头域中可以引用的URI方案。

 

SIP 与 SIPS URI

        许多地方使用SUP URI,其中包括To、From、Contact这些头域,还有说明请求目的端的Request-URI。SIP URI和mailto URI很像,也可以在页面上显示为超链接。它们还可以是电话号码。SIP URI里的信息说明了联系SIP资源(用户)的具体方式。

        SIP URI以方案名sip打头,紧接着是一个冒号“:”,然后是用户名加@,@后面是主机名或IPv4/ IPv6地址,端口是可选的,如果有端口,用冒号“:”分隔,最后是URI参数列表,参数列表中的参数以分号";"作为分割符。具体示例:

sip:joseph.fourier@transform.example.org:5060;transport=udp;user=ip;method=INVITE;ttl=1;maddr=240.101.102.103?Subject=FFT

        URI中不能包含空白字符或换行符。有些SIP URI没有用户名,只有主机名或IP,比如说REGISTER请求的Request-URI。在上面实例中,端口使用的是SIP的标准端口5060。对于SIP URI来说,如果没有描述端口,那么就假定它使用的是默认端口5060;对于SIPS URI来说,则是5061。transport参数说明传输协议选用UDP,这也是SIP的缺省选择。transport参数的可选值还有TCP、TLS和SCTP。

  •         user参数来说明URI的用户名部分是否为电话号码。它的缺省值为ip,说明不是电话号码。如果是电话号码,那么它的值为应该设为phone。不能用这个参数猜测UA的特征或功能。比如说,user=phone表示UA就是一部SIP电话(它可能有显示及处理能力的限制)。在电话环境中,IP电话和IP/PSTN网关实际上可能使用相反的假设,把用户名中的任何数字都解释为数字,而不关心user=phone是否存在。user=dialstring说明用户部分是一个拨号串,可能包含拨号前缀。比方说,用户拨打外线号码时,SIP URI的用户部分以“9”打头,但是它并不是实际电话号码的组成部分,这时用户部分就可以解释为拨号串。
  •         参数method说明所使用的方法。默认值是INVITE。这个参数对To、From头域及Request-URI来说没有意义,但对于注册的Contact头域或转移的Refer-To头域来说是有用处的。
  •         ttl参数是生存时间,只有当maddr参数包含多播地址,而transport参数包含udp时,才能使用该参数。默认值是1。此值作用于多播会话广播。
  •         maddr通常包含请求应当被定向到的多播地址,覆盖URI中主机部分的地址。它还可以携带备用服务器的单播地址。

        method、maddr、ttl及header这几个参数不允许出现在To或From头域中,但可以在Contact头域或Request-URI使用。除了这些参数之外,SIP URI可以包含其它用户定义参数。

        可以在问号“?”之后指定需要包含在请求中的参数名字。这一点和mailto URL的操作类似,后者允许为请求设置主题(Subject)及优先级(Priority)这些参数。可以指定其它头域并用“&”分隔。如果头域名为body,说明URI中指定了INVITE请求的消息体。

        如果存在user=phone参数,那么URI中的用户名部分可以解释为电话号码。它允许在URI的用户名部分添加其它参数,从而允许SIP URI的用户部分中出现tel URL 的参数及结构。

        sips URI方案的结构和sip URI相同,不同之处就是方案名字变为sips。需要注意的是sips URI并不等同于带有transport=tls的sip URI,因为sip URI不具备sips URI相同的安全需求。要求对SIP路径中端到端使用TLS传输。

        示例中没有出现松散路由(loose route)参数lr,它可以在sip或sips的Record-Route及Route URI中使用,说明代理服务器所标识的URI支持松散路由。

 

tel URL

        tel URI方案,可用于描述一个电话号码所标识的资源。电话号码通常有两种格式:本地或全球的。本地号码只在特定的地理区域内有效,并且只有本地意义。如果在区域外使用,要么失败,要么返回错误的资源。全球号码也称为E.164号码,原则上,它在任何地方都是有效的。它包含足够的国家、地区和位置信息,以便PSTN网络把呼叫路由给正确的资源。下面是本一个本地号码的具体示例:

tel:411;phone-context=+1314

它表示呼叫给电话号码时,仅在国家代码为1并且地区代码为314时有效,这些信息都通过phone-context参数标识。下面是一个全球号码示例:

tel:+13145551212

全球号码总是以加号“+”打头,随后是国家代码(本例中是1),接着是剩余的号码位。

Tel URL 还可以包含一些拨号串/模式相关的特征或信息。比如:

tel:#70555-1212;isub=1000;phone-context=+1

在本例中,由PSTN网关解释拨号串,它是DTMF串#70(取消呼叫等待),后续号码是555–1212。附加的参数包括ISDN子地址1000。这个例子中用到了可视化分隔符“-” 或 “.”,它们是可选的。

Tel URL也可以嵌入到网页中,或在HTML标记中描述,例如:

Click <A HREF=”tel:+1972.555.1212”>here</A> to get information about Dallas.

tel URL的语法及参数可用于sip URI的user部分。比如,之前的第一个示例,可用SIP URI表达如下:

sip:411;phone-context=+1314@gateway.example.com

SIP URI加上一个域名描述,它表示将要路由这条消息的域或网关。

 

状态呈现及即时消息URL

     RFC3861中定义了pres URL方案,表示某种“呈现实体”或状态代理PA。RFC3861还定义了im URL方案,用于描述即时消息信箱或客户端。这两种URL都不代理新的协议,但都可以使用DNS SRV查询解析,解析返回另一种指向实际资源或即时消息协议的URI。比如说,如果通过以下URL访问PA:

pres:user@example.com

假设它支持SIP状态呈现,那么DNS SRV查询将返回一个SIP URI:

sip:user@example.com

然后代理客户端可以向这个SIP URI发SUBSCRIBE请求以获取用户的状态信息。

同样的处理流程可以将im URL解析为SIP URI,然后发MESSAGE请求。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值