2014-12-04 61 views
0

EHLO everyone带有C问题的Asterisk AGI

我正在用C语言进入AGI,过了一段时间后我遇到了问题。当我使用GET DATA(和其他AGI命令)将文件播放到频道时,我需要应用睡眠功能,以便可以播放并且用户有时间听到它。

我的部分代码是这样的:

char line[80]; 
int digit; 
setlinebuf(stdout); 
setlinebuf(stderr); 
printf("ANSWER\n"); 
printf("GET DATA en/pbx-transfer 5000 4 \n"); 
sleep(3); 
printf("CHANNEL STATUS\n"); 
printf("HANGUP"); 

星号表示我对我的使用sleep()这样的警告:

The FD we were waiting for has something waiting. Waitfordigit returning numeric 1 

这究竟是为什么?

回答

-1

首先 - 无需推倒重来。有对C/C++

你没有使用休眠,线程,等待等AGI脚本里面不止一个AGI接口implemntation。

AGI架构是例如通过STD输入阻断。只需等待输入(从STD读取),它会在您准备好时返回您的信息。

如果你使用它,这样的消息是正常的和预期。您可以使用非阻塞版本的睡眠。

你也没有使用GET DATA,如果你不需要的数据。您可以使用STREAM

+0

1)这是一个学习的过程,所以这就是为什么我到这一点,其实我使用的生产环境中星号的Perl。 2)我确实使用过fgets,但是我收到了来自Asterisk的“200”答案。我记得asterisk-perl有同样的问题,我不得不在获取数据之前增加3秒的沉默。 – 2014-12-05 21:51:24

+0

登录时会得到200。您已阅读所有回复。星号agi工作正常。 – arheops 2014-12-06 04:52:37

+0

是啊200是好的,但如果我问星号玩一个文件,至少应该玩它没有我睡觉? – 2014-12-06 17:27:40