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 ...
随机推荐
- [ABC262E] Red and Blue Graph
Problem Statement You are given a simple undirected graph with $N$ vertices and $M$ edges. The verti ...
- [ABC246B] Get Closer
section> Problem Statement From the point $(0,0)$ in a two-dimensional plane, let us move the dis ...
- SpringBoot-Validation优雅实现参数校验
1.是什么? 它简化了 Java Bean Validation 的集成.Java Bean Validation 通过 JSR 380,也称为 Bean Validation 2.0,是一种标准化的 ...
- Gradle导致Lombok不生效问题
现象 从debug看是可以查询到数据的,但是返回起前端是没有数据的 解决办法 // 引入lombok注解处理器 annotationProcessor,不然lombok不会生效 annotationP ...
- 高斯朴素贝叶斯(Gaussian Naive Bayes)原理与实现——垃圾邮件识别实战
朴素贝叶斯(Naive Bayes): 根据贝叶斯定理和朴素假设提出的朴素贝叶斯模型. 贝叶斯定理: 朴素假设(特征条件独立性假设): 代入可知朴素贝叶斯模型计算公式: 因为朴素贝叶斯是用来分类任务, ...
- Educational Codeforces Round 26 Problem A
A. Text Volume time limit per test 1 second memory limit per test 256 megabytes input standard input ...
- ElasticSearch 命令执行漏洞
漏洞编号:CVE-2014-3120 漏洞详情 CVE编号 CVE-2014-3120 漏洞级别 中危6.8 标题 Elasticsearch默认配置允许动态脚本执行漏洞 披露时间 2014/07/2 ...
- window10 AppX Deployment Service (AppXSVC)占用大量内存导致资源管理器卡死无响应
window10 AppX Deployment Service (AppXSVC)占用大量内存导致资源管理器卡死无响应,导致无法进入桌面打开软件等等. 1.打开任务管理的情况下,先结束卡死的资源管理 ...
- P6357 题解
Luogu 题面 题目描述 给定一串长度为 \(n\) 的数字,数字为 \(0 \sim 9\) 之间的任意一个,下标从 \(1\) 记起. 然后进行 \(m\) 次区间查询,每次查找区间 \([l, ...
- super只能用在构造方法里面吗?
super关键字并不仅限于在构造方法中使用.在Java中,super关键字有两个主要的用途: 在子类的构造方法中调用父类的构造方法.这是super的一个常见用法,通常是在子类的构造方法的第一行使用,用 ...