在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相关推荐

  1. openSIPS脚本里的函数

    OpenSIPS 脚本中,路由块可以调用的函数分为两种类型:一种是由OpenSIPS  core提供的:另一种是由外围模块提供的. OpenSIPS core实现的函数通常简约而不简单,其原型是非常灵 ...

  2. shell脚本中的YYYY-MM-DD格式日期

    我尝试在我的bash shell脚本中使用$(date) ,但我希望日期为YYYY-MM-DD格式. 我怎么得到这个? #1楼 你可以这样做: $ date +'%Y-%m-%d' #2楼 在bash ...

  3. Shell脚本中$的用法

    2019独角兽企业重金招聘Python工程师标准>>> $0: 脚本名称,相对路径还是绝对路径要看调用的方式.如果是在父目录中,./dollarTest.sh调用,那么$0就是 ./ ...

  4. 交叉编译飞思卡尔imx6烧写工具MFGtools脚本中的sfdisk小软件

    原文链接:(5条消息) 交叉编译飞思卡尔imx6烧写工具MFGtools脚本中的sfdisk小软件_bxf0817的专栏-CSDN博客 MFGtools中的脚本中有如此一段 sfdisk --forc ...

  5. linux 脚本 alias,在shell脚本中使用alias别名

    本文最后更新于2015年7月12日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢! 缘由: 经常用Linux进行操作的同学一般都会有各种各样的技巧来提升工作效率,而添加/改写shell ...

  6. 脚本中echo显示内容带颜色显示

    脚本中echo显示内容带颜色显示,echo显示带颜色,需要使用参数-e 格式如下: echo -e "\033[字背景颜色:文字颜色m字符串\033[0m" 例如: echo -e ...

  7. shell脚本中的特殊变量与if条件测试

    1.特殊变量 实际工作中我们不可避免的遇到一些xxxx.sh脚本文件,实际阅读shell脚本代码时经常会遇到很多特殊变量(例如:$0.$n.$#.$@.$*.$?.$$等),我们常常会被这些特殊符号折 ...

  8. shell脚本中的变量

    shell脚本中的变量 1 变量的定义 2 shell脚本中变量的定义方法 2.1 环境级别 2.2 用户级别 2.3 系统级别 3 变量名称 4 变量的转译 4.1 转译 4.2 声明 4.3 变量 ...

  9. linux脚本外输入参数,shell 脚本中关于用户输入参数的处理

    1.命令行参数 向shell脚本传递数据的最基本方式是使用命令行参数. (1) 读取参数 读取输入的参数的变量为位置参数,位置参数通过标准数字表示, 其中$0为程序名称,$1为第一个参数,$2为第二个 ...

  10. 第四组视频:在bash脚本中使用脚本选项

    马哥教育(http://www.magedu.com)在bash脚本中使用脚本选项.本视频是我们上课过程的实际记录.下载地址:    http://down.51cto.com/data/414002 ...

最新文章

  1. 64位Ubuntu上编译32位程序
  2. 高并发MPP查询引擎Impala初识
  3. 在开发游戏过程中遇到的一些错误(很基础的错误)
  4. Katalon Studio之swagger中的API导入
  5. java恶意小程序_小程序java实现校验一张图片是否含有违法违规内容security.imgSecCheck...
  6. Java heap space设置方法记录
  7. 用lua扩展你的Nginx(整理)
  8. [Leedcode][JAVA][第876题][快慢指针]
  9. 优先队列实现迪杰特斯拉模板
  10. SpringBoot + Redis + Shiro 实现权限管理
  11. 说明书 Cisco wrv210
  12. tab weui 页面切换_weui tabbar 到底怎么用啊?tab页面为什么不能切换?
  13. 动态三角形(动态规划思想入门)
  14. gooflow 自定义流程图
  15. 汽车一键启动 汽车手机远程启动系统  汽车无钥匙进入 手机APP控车智能防盗
  16. 征途服务器维护镖车怎么办,征途网络游戏家族运镖问题
  17. 辐射骚扰测试软件,电磁兼容EMC测试
  18. 西门子S7-1200PLC堆栈程序 在使用西门子1200PLC时候发现,系统没有自带的堆栈功能块,不能实现数据的先进先出后进后出功能
  19. 递归函数——上台阶问题
  20. 南阳理工学院ACM多乐赛暨16级退役纪念赛 A 食堂的座位

热门文章

  1. workbench应力应变曲线_ANSYS WORKBENCH后处理中各种应力结果的详细说明
  2. SEO人员,如何搭建你的网站基础框架?
  3. 工业相机 - - 线阵相机
  4. 线阵相机参数选择 照明方式
  5. ens32文件空白(没有ens33文件)
  6. 指令系统相兼容的计算机称为系列机,第4章指令系统.ppt
  7. 全国地表径流量数据获取/植被类型数据/NPP数据/土壤侵蚀数据/土壤质地分类/降雨量栅格数据/太阳辐射量数据
  8. yolov7调用大华工业相机进行识别
  9. DBSCAN聚类算法原理和伪代码
  10. 语音合成1700多个中文音频