两个YATE服务器互联的实现

Yate软件环境与H323协议部署详解 Yate(Yet Another Telephony Engine)是一个开源的通讯软件,它支持各种通讯协议,如SIP、H323、IAX等,并可以用于构建复杂的通讯系统。Yate具有模块化的设计、灵活的脚本语言支持,并能轻松地与现有系统集成。H323协议是国际电信联盟电信标准部门(ITU-T)在1990年代中期推出的一套用于在分组交换网络上进行实时多媒体通信的协议。它最初是为了支持基于IP网络的视频会议和电话服务。H323定义了一系列用于多媒体通信的网络协议,包括音频、视频以及数据的传输。 阅读详情

一、 引言

根据研究的进度,我们已经知道在一台YATE服务器上用简单的注册、认证模块:regfile,配置用户信息,同一个域内的用户可以成功注册到一个YATE服务器上,并呼叫成功。但我们没有完成的是如何使两台YATE服务器实现互联,让一台YATE的用户成功呼叫另一台YATE的用户。

案例如下,假设两台YATE服务器YA、YB,YA的IP地址192.168.114.51,YB的IP地址192.168.114.52,两台服务器的域和IP地址相同。YA服务器上开通101用户,YB服务器上开通202用户,现要求101和202能互相呼叫成功。

二、 实现方法

要实现两台YATE服务器互通,服务器则必须实现SIP Proxy功能。查看文档发现在YATE中Proxy功能是通过Route(路由)模块实现的,常见的Route模块是regexroute,另外可以自己编写路由模块。下面我们主要使用regexroute模块实现。

三、 Regexroute

Regexroute模块在YATE内部提供了一个简单的方法去路由电信呼叫。这个模块用一个配置文件进行配置。在regexroute中有两个消息被处理:

  • Preroute
  • 在Preroute消息处理中,模块把呼叫者进行分类,并归到一个上下文(context)中。

  • Route
  • 在Route消息中模块会根据被叫号码把呼叫映射到一个字符串描述的目标信道(channel)或模块。

a) Preroute阶段

在Preroute阶段,呼叫者会在[contexts]中依次对字符串进行匹配,匹配的结果是“context”,会在后面对应的“context”节进行进一步的处理。如:

[contexts]
    ^$=empty
    ^00=international
    ^0=longdistance
    .*=default

上面每行=左边是欲匹配的正则表达式,右边是匹配的Context结果。具体的正则表达式规则参考“正则表达式”节。

上面的例子是说,所有以00打头的呼叫者用Context为international的进行处理,0打头的用longdistance进行处理,缺省情况用default处理。

然后可以在配置文件后面依次增加Context节,如:
    [international]
    [longdistance]
    [default]

b) Route阶段

在Route阶段被叫号码会根据Context节依次对正则表达式进行匹配,匹配成功后执行匹配目标的动作。

匹配目标的第一个字符有特殊的含义:

  • return - 从此Context立刻返回而不再进行路由
  • include - 呼叫另外一个Context,如果另一个Context没有成功返回就从下一条目返回。
  • jump - 跳转到另一个Context,但是就不再返回到这个Context了
  • match - 修改匹配的字符串代替特定的目标
  • echo - 只是显示置换的行

模块也允许通过name=value的形式设置消息的参数,各参数间用分号(;)分割

c) 例子

^00/(.*/)$=iax//1@internat.ion.al//0
匹配以00开头的所有字符,如果我们呼叫:0099123456,模块将返回:iax/99123456@internat.ion.al/009912
3456。后面目标中的/0、/1是参数,前面出现的字符为/0,例子中的0099123456,/1为匹配中第一个/( /)之间的参数,/2为匹配中第二个/( /)的参数。/1在例子中是:99123456。

将112和911路由到POTS(普通电话服务)上,也就是E1的任意通道上,并且强制指定特定的编码:
    ^112$=zap/1-31; format=alaw
    ^911$=zap/1-31; format=mulaw

通过SIP路由内部呼叫,并替换呼叫者名称:
    ^00/(.*/)$=sip/sip:/1@international.gateway ; callername = International call

通过IAX 路由增值业务:
    ^09/(.*/)$=iax/vap@gateway.for.vap//1

其他一切以0开头的都通过H323网关
    ^0/(.*/)$=h323//1@long.distance.gateway

其他非法呼叫,我们可以给用户放一段“你拨的是空号”的录音:
    .*=wave/play/sounds/invalid_number.gsm

四、 具体配置

根据上面所述,我们按照要求对YA192.168.114.51服务器进行配置如下:

因为我们不用对呼叫者进行分类,Context节只开启缺省的就可以了,即所有的呼叫者都通过default Context进行处理;当然应该根据实际情况进行调节。要注意的是,这里匹配的是呼叫者(主叫用户)不是被叫者的字符串。

[contexts]
    .*=default

default Context节的配置如下:
    [default]
    ^99991001$=tone/dial
    ^99991002$=tone/busy
    ^99991003$=tone/ring
    ^99991004$=tone/specdial
    ^99991005$=tone/congestion
    ^99991006$=tone/outoforder
    ^99991007$=tone/milliwatt
    ^202$=sip/sip:/0@192.168.114.52

最后一行是我们添加的,意思很清楚,如果呼叫的是202,就通过SIP进行内部路由,并替换呼叫者的名称为202@192.168.114.52,因为我们知道202是注册在192.168.114.52域的,所以我们会告诉YATE把对202的呼叫路由(Proxy)到202@192.168.114.52,YATE就会充当SIP Proxy的角色将呼叫转到192.168.114.52(YB),192.168.114.52再呼叫用户到202。这样我们就可以成功的将101呼叫到202了,相反的过程也是类似的。

五、 正则表达式

Regexroute使用的正则表达式和Linux sed、grep中的类似。

^匹配字符串的开始
$匹配字符串的结束
.匹配任意字符
[list]匹配列表中的一个字符,如[a-z],匹配a-z间的任意字符
[^list]匹配不是列表中的一个字符
 列表可以是单独的字符,如[a,b,1,9],也可以是字符的一个间隔,如[a-z]。
*匹配前面表达式的任意重复,包括0
/+匹配前面表达式的大于等于1次重复
/?匹配前面表达式0或1次重复
/{N/}匹配前面表达式准确的N次重复
/{N,/}匹配前面表达式大于等于N次重复
/{N,M/}匹配前面表达式N到M次重复
/( /)捕获包含的子表达式
用yate建立VoIP服务器 用yate建立VoIP服务器_实现免费语音通话(SIP协议 收藏备用 立即下载

相关推荐

YATE SIP服务器

SIP服务器 XP yate2服务器打电话 VOIP

VoIP服务器Yate设置MySql用户验证

(1)在MySQL里面添加个库yate,然后创建users用户表: CREATE TABLE `users` ( `username` varchar(50) NOT NULL, `password` varchar(50) DEFAULT '9999', `location` varchar(255) DEFAULT NULL, `expires` datetime DEFAU

fengZ的专栏 1195

yate 环境搭建的源码包

yate,搭建 H323 环境 包括:yate3.tar.gz yateadmin3.tar.gz pwlib.tar.gz openh323.tar.gz compiler.h (均为匹配版本)

VOIP:yate sip客户端直接呼叫

环境 macos系统下Parallels Desktop 16 + ubuntu 20 在两台电脑上分别装好Yate后,启动Yate Client客户端,如下图所示。 用户在软件的红色框中输入被叫用户的URI地址即可,具体的格式为: sip/sip:username@ip_address:port sip/sip:第一个”sip”表明使用SIP协议,”/” 为分隔符,第2个”sip:” 是uri语法的一部分; username:用户名,在这里可以随便输入; @:分隔符,uri语法的一部分 ip_addres

uianster的博客 1971

CSipSimple客户端安装包+SIP yate服务端安装包可在win7上安装

SIP相关安装包整合:1、CSipSimple客户端安装包 2、SIP服务端:yate安装包,可以在win7上安装 (附上部分自己研究SIP源码过程中 一步步走来看过的资料,以及一些分析,希望能帮到你 o.0)

yate-5.3.0-1-setup.exe

这是一个yate-5.3.0-1-setup.exe,在winddows上面安装的,可以实现音频点对点的通话,以及SIP Server的功能。

yeta服务器搭建(sip)

前面我们服务以及启动了,通过Windows服务列表也可以看到我们yate服务的状态,等我们加上了日志信息再来分析服务的整个启动流程。勾选上“Create a Quick Launch icon”和“Create a Desktop icon”,点击“Next”,勾选“Start service”和“Launch Qt client”,启动服务,运行Qt客户端。保存配置文件后,重启yate服务,右键“yate服务”----》“重新启动”选择“Full installation” 全部安装,点击“Next”,

weixin_46523990的博客 991

零基础玩转NILM:用nilmtk提取UKDALE电器数据的保姆级教程

本文为零基础用户提供了一份详细的NILM入门指南,重点讲解如何使用nilmtk工具包从UKDALE数据集中提取电器级用电数据。教程涵盖环境搭建、核心概念解析、数据提取实战及常见问题排查,帮助读者快速掌握非侵入式负荷监测的数据预处理关键步骤。

rgv234567的博客 499

sip服务器搭建

写这篇博客,距离我上次提到yate已经有很长一段时间了,今天的主题是:在ubuntu 12.04下搭建sip服务器,并且实现与数据库的连接,从而开发一款互联网电话。 至于yate的简介等,这里免了!直接进入主题,下载源码并安装,

全栈之旅 2565

ROS2 Nav2 - 模型预测路径积分控制器(MPPI)

这是一个预测控制器(局部轨迹规划器),用于实现模型预测路径积分(MPPI)算法,以跟踪具有自适应避障功能的路径。它包含基于插件的 critic 函数,可影响算法的行为。它由 Aleksei Budyakov 创建,由 Steve Macenski 为 Nav2 进行改编和开发。该插件实现了 nav2_core::Controller(控制器)接口,可在整个导航堆栈中作为控制器服务器的动作服务器(controller_server)中的局部轨迹规划器使用。据测定,该控制器可在中等英特尔处理器(第四代 i5)上

机器人控制与仿真应用 3908

orchestrator常见问题汇总

默认的取集群名称的规则为参数决定 ,默认为取主实例 主机名 ,然后按分隔符"."之前的第一段字符为集群别名,这样在集群主库宕机后,新提升的从库的服务器名称为了新的集群名,宕机的主库成为单独的一个集群。1 默认配置文件中设置了匹配规则 ,只有被匹配的主机名才能进行故障恢复,所以该参数需要设置为 "*"3 另外配置文件中还有许多发现,恢复的忽略规则(Ignore) 这些参数也是需要注意的。由于LVS的后端的RS为IP地址,如果直接显示主机名,LVS的接口方法将无法工作。只传入脚本中用到的参数,不要多传入。

DBA之路的博客 829

freepbx的SIP通话客户端X-lite Yate eyeBeam Linphone

在上一篇文章安装freepbx后创建sip分机里我们已经创建好了SIP分机,接下来我们使用几大客户端进行登陆。我们接下来会使用到的软件有X-lite,Yate client,eyeBeam, Linphone。 首先对于mac或者是windows我建议使用YateClient,或者是X-lite,因为这两个相对于eyeBeam的更容易下载得到。对于android 来说,我更建议你使用Li...

weixin_30727835的博客 1270

【Python图像处理局部放大】输入图像,选择两处不同的区域进行放大操作,然后将原始图像、处理后的两个区域以及标记合成新图像进行展示

Python图像处理与区域放大连接标记:选择特定区域并对其进行放大操作,然后将原始图像、处理后的两个区域进行标记后的新图像保存到文件中。

qq_35831906的博客 2243

SIP入门(二):建立SIPserver

       在我的上一篇文章中已经介绍怎样通过SIP软电话直接通话,可是假设须要支持很多其它用户互相通话,同一时候基于安全考虑,须要对用户帐户登录进行验证控制,这些情况下就须要建立SIPserver。 SIPserver的作用:        呼叫控制和处理功能、业务提供/支持功能、用户管理功能、协议处理功能、路由处理、接入认证、计费信息採集、操作维护/网管功能、互通功能、安全功...

weixin_34082695的博客 121

基于YOLOv8的人群聚集检测系统:含UI界面设计与数据集应用

人群聚集检测是智慧城市、公共安全和疫情防控等领域的重要任务。本文结合YOLOv8最新目标检测技术,设计并实现了一个高效的人群聚集检测系统,支持可视化UI界面操作,方便用户实时检测和分析视频中的人群密度。本文详细介绍了系统设计思路、使用的数据集、YOLOv8模型训练和推理过程,以及UI界面的开发与整合。最后通过实验验证了该系统的实用性和性能表现。更灵活的模型架构强化的特征融合网络(PAN++)自动混合精度训练支持支持多任务学习(目标检测+分类+分割)预训练模型丰富,适应多种应用场景。

YOLO 433

ESP32-C3入门教程 WiFi篇①——WiFi Scan 扫描附近AP无线热点 | 堵塞等待扫描结果,回调事件通知扫描结果

文章目录一、快速运行二、运行效果三、程序流畅四、关键函数4.1 扫描所有有效的AP4.2 获取上次扫描中找到的AP列表4.3 获取上次扫描中找到的AP数 一、快速运行 示例项目中,选择WiFi—>scan menuconfig配置ESP32C3-Specific—>Rec 0 芯片选择ESP32-C3(Built-in USB JTAG) 快速运行ESP-IDF Build, Flash and Monitor(左下角) 二、运行效果 三、程序流畅 esp_netif_init,初始

5417

开源代码网站总结

1.       WxWindowWxWidgetswxWidgets是一个开源的跨平台的C++构架库(framework),它可以提供GUI(图形用户界面)和其它工具。目前的2.x版本支持所有版本的Windows、带GTK+或Motif的Unix和MacOS。一个支持OS/2的版本正在开发中。2.       Wxlib 3.       reciprocate4.    ReSIProcate是由SIPFoundry开发的,ReSIProcate最开始起源于Vocal,由于Vocal开始只支持rfc32

max123456的专栏 1091

华为OD机试新系统真题-魔法咒语组合(Java/Py/C++/Go/C/Js)

华为OD机试 新系统真题【魔法咒语组合】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【魔法咒语组合】多语言题解

qq_45776114的博客 668

FreeSWITCH入门基础(一):什么是FreeSWITCH?

什么是FreeSWITCH?

Soul丶君的博客 1196

YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计

实时检测器架构的轻量级设计GsConv。

Limiiiing的博客 1364

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

开源软交换电话平台FreeSWITCH的深度探索

FreeSWITCH是一个功能强大、性能优异的开源电话交换平台。它具有丰富的功能集和高度的灵活性,能够满足不同企业和组织的通信需求。通过深入了解FreeSWITCH的基本概念、发展历程、技术标准、扩展支持、应用平台、安装配置、核心功能以及实际应用等多个方面,我们可以。

技术永不眠 Q:53195017 967

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

《 FreeSWITCH权威指南》——第3章 初识FreeSWITCH3.1 什么是FreeSWITCH ?

本节书摘来自华章计算机《 FreeSWITCH权威指南》一书中的第3章,第3.1节,作者:杜金房 张令考 更多章节内容可以访问云栖社区“华章计算机”公众号查看。 第3章 初识FreeSWITCH 在前面几章,我们用了很大的篇幅介绍了电话通信的背景和基础知识,以及电信业务的知识。对于刚刚跨入通信(或电信)领域的读者来说,熟悉这些背景知识以及里面提到的各种名...

weixin_33984032的博客 323

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: YATE内部的消息机制
下一篇: GAE Gqlquery Date属性不能设置为过滤条件的Bug
kernelspirit
博客等级 码龄25年 135粉丝 92原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值