关闭

freeswitch新增app接口

标签: freeswitchcentosapp interfacebridgemod_dptools
515人阅读 评论(0) 收藏 举报
分类:

1,  概述

freeswitch自带了许多app接口和api接口,可以满足常用的大部分需求,但是有些定制化需求仍然需要我们自己增加或修改当前接口

2,  环境

Centos:CentOS release 6.7 (Final)

Freeswitch:v1.6.5

3,  目的

原本的回拨流程:

呼叫1001用户

originate  {origination_uuid=1}user/1001  &echo()

1001 answer后呼叫1002用户

originate  {origination_uuid=2}user/1002  &echo()

1002answer后发送命令把1001和1002桥接起来

uuid_bridge  1  2

 

新的需求:

1002返回sip 183消息后,需要把1002的彩铃透传给1001

为了实现这一点,我们就需要在1002ring后,把1001和1002桥接起来

并且原本的流程中,originate1002到uuid_bridge之间的实现有些繁琐和冗余(因为&echo()的关系,需要收到answer和execute之后才能执行uuid_bridge,否则有可能桥接失败)

 

新的回拨流程:

呼叫1001用户

originate  {origination_uuid=1}user/1001  &echo()

1001 answer后呼叫1002用户,并把1001和1002桥接起来

originate  {origination_uuid=2}user/1002  &uuid_bridge(1,2)

 

新的问题:

originate 1002的时候,&后面需要的是一个app接口,但是uuid_bridge是一个api接口,不能这样调用

研究之后决定,新增一个实现uuid_bridge的功能的app接口,app_uuid_bridge()

 

4,  代码

修改fs1.6.5\src\mod\applications\mod_dptools\mod_dptools.c

#define APP_UUID_BRIDGE_SYNTAX "UUIDA UUIDB"

SWITCH_STANDARD_APP(app_uuid_bridge_function)

{

    char *uuida;

    char *uuidb;

 

char *mydata, *argv[2]= { 0 };

 

   switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,"app_uuid_bridge_function\n");

 

if (!zstr(data)&& (mydata = switch_core_session_strdup(session, data))) {

           switch_separate_string(mydata,',', argv, (sizeof(argv) / sizeof(argv[0])));

} else {

           switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session),SWITCH_LOG_ERROR, "No uuid specified.\n");

           return;

}

 

uuida = argv[0];

uuidb = argv[1];

 

   switch_log_printf(SWITCH_CHANNEL_SESSION_LOG(session), SWITCH_LOG_DEBUG,"app_uuid_bridge_function(UUIDA=%s, UUIDB=%s)\n", uuida, uuidb);

   

   switch_ivr_uuid_bridge(uuida, uuidb);

}

 

SWITCH_ADD_APP(app_interface, "app_uuid_bridge","app_uuid_bridge", "bridge by uuid",app_uuid_bridge_function, APP_UUID_BRIDGE_SYNTAX, SAF_SUPPORT_NOMEDIA);

 

5,  编译安装

cd  fs1.6.5/src/mod/applications/mod_dptools/

make

make install

 

6,  运行

因为mod_dptools是接口模块,无法unload,只能重启freeswitch

/usr/local/freeswitch/bin/freeswitch  -stop

/usr/local/freeswitch/bin/freeswitch  -nc

 

7,  测试

originate{origination_uuid=1}user/1001 &echo()

originate{origination_uuid=2}user/1002 &app_uuid_bridge(1,2) 

1002ring之后,1001就可以听到1002的彩铃声音了

 

如果有更好的方法或建议,请留言,谢谢

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:7399次
    • 积分:141
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    文章分类
    最新评论