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重定向只能在呼叫未接通之前使用。
空空如常
求真得真
freeswitch的3XX重定向的更多相关文章
- 3XX重定向
3XX响应结果表明浏览器需要执行某些特殊的处理以正确处理请求 301 Moved Permanently 永久性重定向 该状态码表示请求的资源已经被分配了新的URI,以后应使用资源现 ...
- nginx-301重定向开始
日常工作中使用301重定向的情况很多:如网页目录结构变动,网页重命名.网页的扩展名改变.网站域名改变.SEO优化.等等,301重定向可以很方便的使页面实现跳转. 参考 URL重写模块 一.首先更改配置 ...
- HTTP的response code 1xx,2xx,3xx,4xx,5xx分别代表什么
HTTP 状态码点击链接可了解详情.您也可以访问 HTTP 状态码上的 W3C 页获取更多信息. 1xx(临时响应):表示临时响应并需要请求者继续执行操作的状态码. 2xx (成功):表示成功处理了请 ...
- 温故知新,.NET 重定向深度分析
在早期的.NET Framework程序员心里,重定向Redirect其实分为两种: Response.Redirect: Response对象的Redirect方法提供了一种实现客户端重定向的方法 ...
- 3xx HTTP状态码的终极指南
前言 如果你在管理一些网站,那么对HTTP重定向的理解对于可靠的网站性能至关重要.在这篇文章中,我们将全面了解一下3xx HTTP状态码,从这里你可以了解它们是如何工作的,如何更好地管理它们,以及它们 ...
- 重温Http协议--请求报文和响应报文
http协议是位于应用层的协议,我们在日常浏览网页比如在导航网站请求百度首页的时候,会先通过http协议把请求做一个类似于编码的工作,发送给百度的服务器,然后在百度服务器响应请求时把相应的内容再通过h ...
- HTTP常用状态码分析
不管是面试还是工作中,经常会碰到需要通过HTTP状态码去判断问题的情况,比如对于后台RD,给到前端FE的一个接口,出现502或者504 error错误,FE就会说接口存在问题,如果没有知识储备,那就只 ...
- 《图解HTTP》读书笔记
目前国内讲解HTTP协议的书是在太少了,记忆中有两本被誉为经典的书<HTTP权威指南>与<TCP/IP详解,卷1>,但内容晦涩难懂,学习难度较大.其实,HTTP协议并不复杂,理 ...
- 【原】HTTP in iOS你看我就够
声明:本文是本人 编程小翁 原创,转载请注明. 本文同步发布在简书中,强烈建议移步简书查看,编程小翁 HTTP属于老话题了,在项目中我们经常需要往服务端发POST或者GET请求,但是对于HTTP的了解 ...
- ajax response status list [转载]
比较理想的解释方法应该以"状态:任务(目标)+过程+表现(或特征)"的表达模式来对这几个状态进行定义 [全文] 在<Pragmatic Ajax A Web 2.0 Pr ...
随机推荐
- [计蒜客20191103C] 分组
小 C 是 \(n\) 个学生的老师,他现在要把所有学生分成两组,他会按照以下这些要求: 1.如果两个同学是好朋友那么他们就不会被分到同一组 2.小 C 想最小化两组人数差值 现在请你写一个程序来帮助 ...
- 使用Mybatis自定义插件实现不侵入业务的公共参数自动追加
背景 后台业务开发的过程中,往往会遇到这种场景:需要记录每条记录产生时间.修改时间.修改人及添加人,在查询时查询出来. 以往的做法通常是手动在每个业务逻辑里耦合上这么一块代码,也有更优雅一点的做法是写 ...
- 关于WPF下用户登录后再启动主窗体的实现方法
/// <summary>App.xaml 的交互逻辑</summary> public partial class App : Application { private b ...
- 【类型转换】使用c#实现简易的类型转换(Emit,Expression,反射)
引言 哈喽.大家好,好久不见,最近遇到了一个场景,就是在FrameWork的asp.net mvc中,有个系统里面使用的是EntityFramework的框架,在这个框架里,提供了一个SqlQuery ...
- 通过数字证书对PDF电子文件进行数字签名/盖章
以下代码详细说明如何使用数字证书对PDF电子文件进行数字签名/盖章.PDF文件签署主要传递PDF文件,数字证书信息,签章图片3个信息.代码中需要的文件.数字证书.签章图片可访问开放签电子签章开源系统详 ...
- .net Core中间件实战
新建一个ASP.NET Core Web Application 项目选中空模板 然后为项目添加一个Microsoft.Extensions.Logging.Console 由于我用的.net cor ...
- Linux系统快速入门
LINUX基础知识 I.Linux概述 linux是啥? 一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的Un ...
- 如何上传你的组件到npm
前言 以react为例子 webpack作为打包工具 准备工作 安装node npm上注册账号 https://www.npmjs.com/ 创建要上传组件 新建项目 生成package.json文件 ...
- 数仓性能调优:row_number() over(p)-rn=1性能瓶颈发现和改写套路
本文分享自华为云社区<GaussDB(DWS)性能调优:row_number() over(p)-rn=1性能瓶颈发现和改写套路>,作者:Zawami . 1.改写场景 本套路应用于子查询 ...
- 从原生迈向混合,小而美团队如何搞定APP高效定制
摘要:洞悉华为云数字化差旅App的架构变迁之路,体验混合开发魅力. 本文分享自华为云社区<DTSE Tech Talk 第21期丨从原生迈向混合,小而美团队如何搞定APP高效定制?>, ...