freeswitch的变量与事件

最近需要在esl中设置某些通道变量。然后由其他的esl客户端程序读取这些通道变量。
一开始以为通道变量都会出现在事件的header中,但是测试中发现并非如此,比如 CHANNEL_CALLSTATE事件中就不会包含用户自己设置的channel variable, 不过这些变量实际上已经设置成功了,可以通过 uuid_gervar 这个api命令来获取。

编码验证,在收到事件的时候,使用下面的代码:

string uuid=getevtparam(eslEvt, "Caller-Unique-ID");

	char cmdbuff[2048];
	sprintf(cmdbuff,"api uuid_getvar %s desc_msg\n\n",uuid.c_str());
	esl_send_recv(&m_fsHandle,cmdbuff);
	if(m_fsHandle.last_sr_event && m_fsHandle.last_sr_event->body)
	{
		printf("last reply=%s\n",m_fsHandle.last_sr_event->body);
	}
	else
	{
		printf("last reply=%s\n",m_fsHandle.last_sr_reply);
	}

得到的输出如下:

last reply=desc_msg_test54321

与设置的通道变量值一致,说明该变量已经存在,并且可以获取,只不过在CHANNEL_CALLSTATE事件的header中没有打包这个变量而已。 这也说明freeswitch的事件处理的比较随意,在 CHANNEL_EXECUTE_COMPLETE事件和CHANNEL_HANGUP_COMPLETE事件中就打包了这些通道变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值