Asterisk AGI с проблемами C

ЭХЛО всем

Я увлекаюсь AGI с языком C, и через некоторое время у меня возникла проблема. Когда я воспроизвожу файл на канал с помощью 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");

Asterisk показывает мне предупреждение об использовании sleep() следующим образом:

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

Почему это происходит?


person Emel Ramone    schedule 04.12.2014    source источник


Ответы (1)


Во-первых, не нужно изобретать велосипед. Существует более одной реализации интерфейса AGI для c/c++.

Вы не используете сон, потоки, ожидание и т. д. внутри скрипта agi.

Архитектура AGI является примером блокировки вводом STD. Просто дождитесь ввода (ПРОЧИТАЙТЕ из STD), и он вернет вам информацию, когда будет готов.

Если вы используете его, такое сообщение является нормальным и ожидаемым. Вы можете использовать неблокирующие версии сна.

ТАКЖЕ вы не используете ПОЛУЧЕНИЕ ДАННЫХ, если вам не нужны ДАННЫЕ. Вы можете использовать ПОТОК

person arheops    schedule 05.12.2014
comment
1) Это процесс обучения, поэтому я этим увлекаюсь, на самом деле я использую для производственных сред asterisk-perl. 2) Я использовал fgets, но вместо этого получил ответ 200 от Asterisk. Я помню, что у asterisk-perl была такая же проблема, мне пришлось добавить 3 секунды тишины перед получением данных. - person Emel Ramone; 06.12.2014
comment
Вы получаете 200 при входе в систему. Вы прочитали весь ответ. Астериск аги работает нормально. - person arheops; 06.12.2014
comment
да 200 - это нормально, но если я попрошу звездочку воспроизвести файл, по крайней мере, должен ли он воспроизводить его без сна? - person Emel Ramone; 06.12.2014
comment
Пожалуйста, используйте уже разработанный пакет AGI или делайте свою логику СТРОГО так, как описано в спецификации AGI. Если вы прочитали все ответы, вам просто нужно дождаться нового ответа во время воспроизведения файла. Здесь нет другого ответа. AGI работает нормально, да, он работает нормально и на C/C++. - person arheops; 06.12.2014