当前位置: 首页 > news >正文

freeswitch的3XX重定向

 

概述

sip协议标准RFC3261中,对3XX重定向有明确的定义。

freeswitch中如何使用3XX redirect的特性,如何落地,应用场景有哪些?

环境

centos:CentOS  release 7.0 (Final)或以上版本

freeswitch:v1.8.7

GCC:4.8.5

3XX重定向

RFC3261中对3XX的响应定义是这样的。

3xx responses give information about the user's new location, or about alternative services that might be able to satisfy the call.

3XX响应提供有关用户新位置的信息,或者可能能够满足呼叫请求的替代服务。

各种具体的响应消息定义如下。

300 Multiple Choices: Indicates that the address resolved to more than one location.

300 多重选择:响应中带有多个可选地址。

301 Moved permanently: Indicates user is no longer available at this location, an alternate location should be included in the header.

301 永久转移:当前地址永久性不可用,响应中附带可选的新地址。

302 Moved Temporarily: Indicates that the user in temporarily unavailable, an alternate location should be included in the header.

302 临时转移:当前地址临时性不可用,响应中附带可选的新地址。

305 Use Proxy: This response indicates that the caller must use a proxy to contact the called party.

305 使用代理:该响应表示用户必须使用代理来建立呼叫。

380 Call is not successful but alternate services are available.

380 呼叫失败但是有可用的替代服务。

freeswitch中的重定向

freeswitch的官方文档中,只找到了300和302响应的app接口“mod_dptools: redirect”。

应用很简单,dialplan拨号计划中直接配置使用。

拨号计划实例:

<action application="redirect" data="sip:foo@bar.com"/>

<action application="redirect" data="sip:foo@bar.com,sip:foo@end.com"/>

查看fs源代码,发现的可用的数据格式。

<action application="redirect" data="<sip:1002@10.55.55.137:5082>;q=0.128,<sip:1002@10.55.55.137:5084>;q=0.129,<sip:1002@10.55.55.137:5086>;q=0.15"/>

其中的“q值”可以用来作为redirect的排序依据。

配置测试

构造一个简单场景,测试一下redirect的流程。

1001->fs138->fs137->fs138->1002

其中,fs137开放多个端口5080、5082、5084、5086。

fs137的5080端口收到invite之后,使用redirect返回300重定向消息,重定向位置为fs137的多个端口5082、5084、5086。

修改dialplan拨号计划如下。

<context name="public">

    <extension name="test" continue="false">

        <condition field="destination_number" expression="^(\d+)$">

        <action application="redirect" data="sip:$1@10.55.55.137:5082,sip:$1@10.55.55.137:5084,sip:$1@10.55.55.137:5086" />

        </condition>

    </extension>

</context>

重启fs之后,发起呼叫测试,sngrep的信令流程如下。

redirect 300的消息流程截图。

重定向之后的呼叫流程截图。

总结

可以在redirect之前,增加一致性HASH的接口来计算重定向目标,以达到负载均衡的目的。

3XX重定向服务可以用在故障转移场景?

3XX重定向服务在分布式大集群中应用的场景,集群容量上限该如何计算?

302重定向只能在呼叫未接通之前使用。

空空如常

求真得真

相关文章:

  • jsp+sql毕业生招聘系统免费系统+论文
  • Java毕业设计-火车订票管理系统
  • SwiftUI 界面状态 成员变量 @State @Buiding immutable
  • Java 进阶集合和数据结构
  • RabbitMQ、RocketMQ、Kafka常见消息队列不得不知道的事
  • 简单工厂模式、工厂模式、抽象工厂模式(含C++代码)
  • 自动化测试之路 —— Appium输入及模拟手势
  • 使用聚类(K-means)分析方法对骑手进行分类标签定义
  • Z-Score模型的进阶版:Zeta模型
  • 从零开始配置vim(20)——模糊查询
  • 【CSAPP】现代操作系统前几章
  • React全家桶
  • 聊一聊密钥交换
  • 安装 ZooKeeper 并配置服务
  • 【时间序列】时间序列预测基本方法:移动平均(SMA,EMA,WMA)
  • CentOS 7 修改主机名
  • const let
  • Java到底能干嘛?
  • leetcode386. Lexicographical Numbers
  • Lucene解析 - 基本概念
  • PHP的类修饰符与访问修饰符
  • Python十分钟制作属于你自己的个性logo
  • Redis的resp协议
  • Ruby 2.x 源代码分析:扩展 概述
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • SpiderData 2019年2月23日 DApp数据排行榜
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • ViewService——一种保证客户端与服务端同步的方法
  • 给github项目添加CI badge
  • 机器学习 vs. 深度学习
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 在Mac OS X上安装 Ruby运行环境
  • scrapy中间件源码分析及常用中间件大全
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​iOS实时查看App运行日志
  • #控制台大学课堂点名问题_课堂随机点名
  • (1)常见O(n^2)排序算法解析
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (ros//EnvironmentVariables)ros环境变量
  • (备忘)Java Map 遍历
  • (二)Linux——Linux常用指令
  • (翻译)terry crowley: 写给程序员
  • (分布式缓存)Redis分片集群
  • (过滤器)Filter和(监听器)listener
  • (三)centos7案例实战—vmware虚拟机硬盘挂载与卸载
  • (转) RFS+AutoItLibrary测试web对话框
  • . Flume面试题
  • .net framework 4.0中如何 输出 form 的name属性。
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 开发怎么实现前后端分离_前后端分离:分离式开发和一体式发布
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET企业级应用架构设计系列之技术选型
  • .Net中的设计模式——Factory Method模式