我已经使用Java编写了一个Hello World Asterisk AGI脚本。该脚本按预期运行,并播放hello world声音文件,但 Asterisk 控制台显示错误:



知道我在做什么错吗?

我正在使用asterisk-java-0.3.1.jar和Asterisk 1.8.10.1〜dfsg-1ubuntu1

Java类如下:

import org.asteriskjava.fastagi.AgiChannel;
import org.asteriskjava.fastagi.AgiException;
import org.asteriskjava.fastagi.AgiRequest;
import org.asteriskjava.fastagi.BaseAgiScript;

public class AgiHelloWorld extends BaseAgiScript
{
    @Override
    public void service(AgiRequest arg0, AgiChannel arg1) throws AgiException
    {
        answer();
        streamFile("hello-world");
        hangup();
    }
}

最佳答案

当脚本完成执行后,Asterisk尝试向AGI/FastAGI中写一些行时,会发生此错误。

通常, Asterisk 发送 header ,然后等待命令。每个命令后, Asterisk 都会发送响应。但这是一个异常(exception),在处,它写在更多行上

HANGUP

我认为这是 Asterisk 行无法写成的情况。您可以通过打开agi debug进行检查。在控制台中编写:
agi set debug on

然后在运行脚本之后,您应该会看到类似以下内容:
    -- <SIP/XXXX-0000007c>AGI Script YOUR_AGI_NAME completed, returning 4
<SIP/XXXX-0000007c>AGI Tx >> HANGUP
ERROR[1502]: utils.c:1232 ast_carefulwrite: write() returned error: Broken pipe

您可以看到 Asterisk 在脚本完成后尝试发送HANGUP。您不必担心,但这是一个库错误。

关于java - Asterisk Java AGI : utils. c write()返回错误:管道损坏,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18798021/

10-13 04:12