OpenSIPS脚本中的flag
在OpenSIPS脚本中,支持使用二进制状态标识(flag),如on/off。
flag是一种简单易用的机制,在脚本中,可以标记某些内容,提高可读性。
按使用目的分类,可以把flag分为三种类型:
- Message flag(transaction flag):生命周期与transaction绑定的flag,只要transaction存在,它们对所有的路由块都是可见的
- Branch flag:它们也是存储在transaction里的,但对每个branch独立。它们持久化关联registration或branch。
- Script flag:非消息相关的flag,只与脚本逻辑关联。它们只存在于脚本执行过程中,一旦退出路由脚本,就会消失。通常这类flag可以标识一些状态,一般不需要持久存储。
OpenSIPS对每种flag提供了相应的函数,可以对它们set、reset,还有测试某个flag的值。对于每种类型,最能能使用32个flag。通过flag(字符串)的名字引用flag,不需要预定义flag的名字,使用起来很简单。比如:
if ($rd=="domain.sip")setflag(MY_DOMAIN);
if (isflagset(MY_DOMAIN))xlog("Domain in Request URI is domain.sip\n");
# Message/transaction flags
setflag(FLAG)
resetflag(FLAG)
isflagset(FLAG)# Branch flags
setbflag/setbranchflag(branch_idx, FLAG)
resetbflag/resetbranchflag(branch_idx, FLAG)
isbflagset/isbranchflagset(branch_idx, FLAG)# shorter format, working on the default (branch 0) flags
setbflag(FLAG)
resetbflag(FLAG)
isbflagset(FLAG)
每种flag在特定类型的路由中,有特定的行为:
- Message/transaction flag:这类flag会展现给所有与initial request 关联的路由处理。因此,对于branch、failure,及onreply路由块来说,它们都是可见的,也是可修改的。它们对所有的branch都是共享的,因此,如果你在某个branch中修改了flag值,那么后续的branch会继承这个值。
- Branch flag:这类flag将会展示给与initial branch请求相关的所有路由消息。因此,在branch路由里,你会看到不同的flag集(因为它们是不同的branch);在onreply 路由里,你能看到应答消息所属branch对应的branch flag;在failure 路由里,branch flag对应reply消息所属的branch。在请求路由里,可能会有多个branch(比如说,lookup()、enum查询、append_branch(),等等),这里缺省的branch是零(对应RURI)。在reply 路由里,只会有一个branch,即零号branch。在branch 路由里,缺省的branch就是当前处理的branch(索引为0)。在failure路由里,永远只会有一个branch(索引为0)与之对应。
- Script flag:这类flag只作用于route脚本本身,还有它的subroute,每次执行顶层route都会刷新(顶层route是由OpenSIPS触发的)。它们的持久化周期等同于每个main route、 onreply route、branch route和failure route。调用subroute会继承Script flag。
OpenSIPS脚本中的flag相关推荐
- openSIPS脚本里的函数
OpenSIPS 脚本中,路由块可以调用的函数分为两种类型:一种是由OpenSIPS core提供的:另一种是由外围模块提供的. OpenSIPS core实现的函数通常简约而不简单,其原型是非常灵 ...
- shell脚本中的YYYY-MM-DD格式日期
我尝试在我的bash shell脚本中使用$(date) ,但我希望日期为YYYY-MM-DD格式. 我怎么得到这个? #1楼 你可以这样做: $ date +'%Y-%m-%d' #2楼 在bash ...
- Shell脚本中$的用法
2019独角兽企业重金招聘Python工程师标准>>> $0: 脚本名称,相对路径还是绝对路径要看调用的方式.如果是在父目录中,./dollarTest.sh调用,那么$0就是 ./ ...
- 交叉编译飞思卡尔imx6烧写工具MFGtools脚本中的sfdisk小软件
原文链接:(5条消息) 交叉编译飞思卡尔imx6烧写工具MFGtools脚本中的sfdisk小软件_bxf0817的专栏-CSDN博客 MFGtools中的脚本中有如此一段 sfdisk --forc ...
- linux 脚本 alias,在shell脚本中使用alias别名
本文最后更新于2015年7月12日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢! 缘由: 经常用Linux进行操作的同学一般都会有各种各样的技巧来提升工作效率,而添加/改写shell ...
- 脚本中echo显示内容带颜色显示
脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: echo -e ...
- shell脚本中的特殊变量与if条件测试
1.特殊变量 实际工作中我们不可避免的遇到一些xxxx.sh脚本文件,实际阅读shell脚本代码时经常会遇到很多特殊变量(例如:$0.$n.$#.$@.$*.$?.$$等),我们常常会被这些特殊符号折 ...
- shell脚本中的变量
shell脚本中的变量 1 变量的定义 2 shell脚本中变量的定义方法 2.1 环境级别 2.2 用户级别 2.3 系统级别 3 变量名称 4 变量的转译 4.1 转译 4.2 声明 4.3 变量 ...
- linux脚本外输入参数,shell 脚本中关于用户输入参数的处理
1.命令行参数 向shell脚本传递数据的最基本方式是使用命令行参数. (1) 读取参数 读取输入的参数的变量为位置参数,位置参数通过标准数字表示, 其中$0为程序名称,$1为第一个参数,$2为第二个 ...
- 第四组视频:在bash脚本中使用脚本选项
马哥教育(http://www.magedu.com)在bash脚本中使用脚本选项.本视频是我们上课过程的实际记录.下载地址: http://down.51cto.com/data/414002 ...
最新文章
- 64位Ubuntu上编译32位程序
- 高并发MPP查询引擎Impala初识
- 在开发游戏过程中遇到的一些错误(很基础的错误)
- Katalon Studio之swagger中的API导入
- java恶意小程序_小程序java实现校验一张图片是否含有违法违规内容security.imgSecCheck...
- Java heap space设置方法记录
- 用lua扩展你的Nginx(整理)
- [Leedcode][JAVA][第876题][快慢指针]
- 优先队列实现迪杰特斯拉模板
- SpringBoot + Redis + Shiro 实现权限管理
- 说明书 Cisco wrv210
- tab weui 页面切换_weui tabbar 到底怎么用啊?tab页面为什么不能切换?
- 动态三角形(动态规划思想入门)
- gooflow 自定义流程图
- 汽车一键启动 汽车手机远程启动系统 汽车无钥匙进入 手机APP控车智能防盗
- 征途服务器维护镖车怎么办,征途网络游戏家族运镖问题
- 辐射骚扰测试软件,电磁兼容EMC测试
- 西门子S7-1200PLC堆栈程序 在使用西门子1200PLC时候发现,系统没有自带的堆栈功能块,不能实现数据的先进先出后进后出功能
- 递归函数——上台阶问题
- 南阳理工学院ACM多乐赛暨16级退役纪念赛 A 食堂的座位