freeswitch反注册记录
应用情景: 使用阿里服务器,落地使用本地的模拟线路(O口网关)。
1、FreeSWITCH 服务器开一个账号,比如 5000 internal , O口 SIP设置页面按照网关注册 5000 的账号信息。
2、dialplan 中添加拨号规则:
<condition field="destination_number" expression="^(\d{8,12})$">
<action application="lua" data="reregister.lua 5000 $1"/>
</condition>
3、FreeSWITCH scripts/ 目录下 生产如下 reregister.lua :
gatewayNumber = argv[]
destNumber = argv[] api = freeswitch.API();
-- 获取网关注册的地址,主叫号码替换
local domain = freeswitch.getGlobalVariable("domain");
local sofiaContactStr = api:executeString("sofia_contact " .. gatewayNumber .."@" .. domain);
local dialStr = string.gsub(sofiaContactStr, gatewayNumber, destNumber); -- bridge到被叫号码
session:execute("bridge" , dialStr);
当然还有最方便和直接的方式,直接在dialplan中进行替换:
最直接方式还是在拨号规则中直接配置:
<include>
<extension name="gopstn">
<condition field="destination_number" expression="^9(.*)$">
<action application="bridge" data="sofia/internal/sip:$1${regex(${sofia_contact(user/3000)}|^sofia/internal/sip:(\d+)(.*)|$2)}"/>
</condition>
</extension>
</include>
如:
${sofia_contact(user/3000)} ==> sofia/internal/sip:3000@192.168.5.58:5060
${regex(${sofia_contact(user/3000)}|^sofia/internal/sip:(\d+)(.*)|$2)} ==> @192.168.5.58:5060
经过拼接和组装,一个替换过的呼叫字符串就组装好了。
或者:
<include>
<extension name="gopstn">
<condition field="destination_number" expression="^9(.*)$">
<action application="bridge" data="${replace(${sofia_contact(user/6003)}|6003|$1)}"/>
</condition>
</extension>
</include>
freeswitch反注册记录的更多相关文章
- 【Demo 0025】注册/反注册窗体类RegisterClassEx/UnregisterClass
所有窗体在创建前都必须注册窗体类,只有注册的窗体类才被系统认知并允许实例化,换句话说通过注册告诉进程窗体管理器此类窗体的属性如: 背景色,窗体上的鼠标样式以及窗体事件处理函数等; 有一些控件类系统自 ...
- springcloud 服务注册、反注册 AOP 拦截,实现自定义功能
@Aspect@Component@Order(1000)public class EurekaServerAspect {private Logger logger = Logger.getLogg ...
- Android BroadcastReceiver 注册和反注册
说起来这个问题很简单,只要注册和反注册成对出现就行,好像很多教材都是如此介绍.但实际开发中,对广播注册和反注册的时机把握还是很重要的. 关于广BroadcastReceiver注册和反注册时机,主要有 ...
- 7.Go退出向Consuk反注册服务,优雅关闭服务
注册和反注册代码 package utils import ( consulapi "github.com/hashicorp/consul/api" "log" ...
- ActiveX控件的注册和反注册
原文转自 https://blog.csdn.net/piaopiaopiaopiaopiao/article/details/41649495 ActiveX控件,需要注册之后才能使用. 注意:注册 ...
- dll的注册与反注册
regsvr32.exe是32位系统下使用的DLL注册和反注册工具,使用它必须通过命令行的方式使用,格式是:regsvr32 [/i[:cmdline]] DLL文件名命令可以在"开始→运行 ...
- apply-register-acl 参数允许FreeSWITCH分机注册/拨打不验证密码
今天调试 发现 注册的分机 的 `Auth-User` 居然是 `unknown` !!! 怎么回事? 仔细对比检查 发现, internal profile 指定了 `apply-register- ...
- FreeSwitch安装配置记录
安装FreeSwitch 主要命令如下: git clone -b v1.2.stable git://git.freeswitch.org/freeswitch.gitcd freeswitch/. ...
- RedGate .NET Reflector注册问题(反注册)
Reflector分为桌面版和VS集成版本,当我们使用注册机注册的时候如果注册了Standvard版本,那么我们的VS就不能集成查看,也不能Debug,那么这 显然不是我们想要的,我们会选择重新注册, ...
随机推荐
- ACdream - 1060 递推数(矩阵+循环节)
https://vjudge.net/problem/71677/origin 已知A(0) = 0 , A(1) = 1 , A(n) = 3 * A(n-1) + A(n-2) (n ≥ 2) 求 ...
- Spring boot 连接Redis实现HMSET操作
这篇文章记录使用spring-boot-starter-redis访问Redis.Redis相关的的配置文件放在Resources目录下的application.yml文件中,如下所示: spring ...
- 【由浅入深理解java集合】(三)——集合 List
第一篇文章中介绍了List集合的一些通用知识.本篇文章将集中介绍List集合相比Collection接口增加的一些重要功能以及List集合的两个重要子类ArrayList及LinkedList. 一. ...
- 20155324王鸣宇安装虚拟机+初次学习Linux的感想20155324
安装Linux系统 这是最后一次预备作业,但不是最后一次作业.当然要认真对待,在这个除旧迎新的日子里.认真的花了一个下午的时间专研学习了如何安装Linux系统.通过学习了基于VirtualBox虚拟机 ...
- Linux中的libc和glibc
现在centos6.8-x64系统里的c标准库已经成了glibc,glibc取代了libc,c标准库的位置在/lib64/libc.so.6 以下为转载 一.libc库 Linux平台提供的C标准库包 ...
- Kotlin中,lateinit 和 lazy{} 的区别
1.lazy{} 只能用在val类型, lateinit 只能用在var类型 如 : val name: String by lazy { "sherlbon" }lateinit ...
- Applet、Scriptlet与Servlet
Applet.Scriptlet与Servlet - 青春念邵的博客 - 博客频道 - CSDN.NEThttp://blog.csdn.net/mo_fan_qing_wa/article/deta ...
- Hadoop配置文件参数详解
core-site.xml <configuration> <property> <name>hadoop.tmp.dir</name> <val ...
- python第六天函数,定义、调用、不带参函数、带参函数等
在python定义函数需要用到的关键字是 def xxxx():,这个关键字就是 defined 的缩写.具体看实例: >>> def hello(): print("你 ...
- Hadoop Streaming开发要点
一.shell脚本中的相关配置 HADOOP_CMD="/usr/local/src/hadoop-1.2.1/bin/hadoop" STREAM_JAR_PATH=" ...