-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
dp2SSL 增加了 SIP 消息变换脚本机制 #1199
Comments
Charging.xml 配置文件结构messageIO 元素位于根元素之下级。 logging 属性定义了是否将 SIP 消息记入错误日志中。为 "on" 表示要记载;其它值(或者 logging 属性缺省)表示不记载。 script 元素位于 messageIO 元素之下级。 script/@lang 属性lang 属性定义了语言类型,目前支持 "javascript" 和 "ZHAO" 两种语言。 元素内的文本部分是程序代码。如果直接在 script 元素的文本部分内书写代码,需要注意 ‘<’ ‘>’ 等字符需要表达为 XML 的 entity 形态,例如:
而这样用 CDATA 方式书写则比较容易阅读:
这两种书写方式效果是等同的。 ZHAO 语言的 script 元素举例:
(ZHAO 语言的原理和编制方法请参考相关文档)
|
javascript 脚本代码的作用原理环境变量在脚本被触发以前,javascript 解释器环境会预先准备好以下几个变量,便于脚本实现具体业务功能。 context这是一个 ScriptContext 类型的对象(可参考 dp2ssl 源代码),生存周期是和 SIP 通讯通道的生命周期一致。也就是说,每一次 javascript 脚本代码被触发调用之间,可以用它来存储和传递各种信息,让状态持久。 用法举例:
另外 context 的内容集合中如果包含 key 名字为 "verifyMessage" 的事项,则可以控制宿主 dp2ssl 后续环节在解析 SIP 消息的阶段,如何进行消息正确性校验。这个事项的值可以为 "",或者 "fix,var,requir" 或者这三个值的任意组合。"" 表示全功能校验,也就是 "fix,var,requir";fix 表示要校验固定长字段的正确性; var 表示要校验变长字段的正确性,requir 表示要校验必备字段是否具备。 如果上述 "verifyMessage" 事项的值为 ''[none]',则表示不进行正确性校验。 最后,如果 context 的内容集合中不包含 key 名字为 "verifyMessage" 的事项,则宿主 dp2ssl 后续环节的对 SIP 消息的校验,会按照 (注: 如果 charging.xml 中 message[in,out] javascript 脚本代码可以对它的内容进行修改,当脚本返回以后,宿主程序会用修改后的内容继续后继处理。 SIP 消息的具体格式请参考相关文档。 error[out] 期待的功能需要用 C# 实现一个方便 javascript 操作的 SIP 消息解析、处理的类,这样可以避免直接用 javasript 脚本代码做繁琐的字符串编程。这部分计划研究以后逐步加入。 |
SIP 消息变换语言 ZHAO 的基本概念和用法
可以按照这个规则定义方式对所有消息进行过滤筛选,对不符合要求的参数进行二次加工 quirk:英文怪癖,泛指sip2的一些奇怪写法,参数1:字符集,终端跟服务器进行交互时使用的字符集,可以规避因为设备端编码与服务器不一致导致的乱码 msg:消息缩写,参数1:消息ID,sip2消息的前两个字节,消息处理的依据,参数2:beg,begin的缩写,如果|之前的第一个字段需要处理,为了快速定位,需要指定固定长度的头的长度,参数3:头长,包含协议头2个字节在内 fld:字段field缩写,目前有4中处理方式,1是过滤掉,关键字是ign,ignore忽略的缩写;2是变换,将字段重定义为另一个字段,关键字是tsf,transfer缩写;3是对值进行更改,比如一些状态需要修复,关键字是map,标识接下来需要枚举出映射关系;4是add,添加,支持预设值添加与脚本返回值添加 map:mapper的缩写,两个参数,第一个参数是消息里的原始值,第二个参数是准备替换成的值,同一个字段的枚举值可能有多个,需要写多条map来匹配。 |
为增强适配第三方 SIP Server 变体消息的能力,最新版 dp2ssl 增加了用定制脚本代码(或定制的 DLL)对 SIP 消息进行变换的机制。
配置使用方法:
(后面专门介绍这个配置文件的结构)
(上面示范代码的作用是,在原先消息的末尾添加部分内容,其中包括请求/响应的类型)
重新启动 dp2ssl。现在从 dp2ssl 发出的 SIP 消息,会自动先经过 charging.xml 文件中的 charging/messageIO/script 元素内的脚本代码处理,然后到达目标 SIP Server;目标 SIP Server 响应的代码,会自动先经过上述脚本代码处理,然后被 dp2ssl 相关功能模块进行处理。
如果需要对上述脚本代码的执行效果进行调试观察,先要确保 charging.xml 文件中的 charging/messageIO/@logging 属性值为 'on',这样 dp2ssl 运行过程中,所有发出和收到的 SIP 消息,都会记入 dp2ssl 数据目录下 log 子目录中的当天的错误日志文件中。
The text was updated successfully, but these errors were encountered: