LINUX.ORG.RU

Простенькая программка :(


0

0

Eсть linphone-nox и аккаунт на sip серваке. Задача - скриптом из консольки позвонить на определённый номер, подождать, положить трубку и вывалиться. Делаю следующее:
$cat callmy.c

#include <stdio.h>

int main(){
sleep(1);
printf("call 123456789\n");
sleep(5);
printf("terminate\n");
sleep(3);
printf("quit\n");
sleep(5);
fflush(NULL);
}

$gcc callmy.c -o callmy
$callmy | linphonec

По идее, должен набраться номер, подождать 5 секунд и linphonec должен положить трубку. После чего отвалиться. На практике - запускается linphonec, коннектится к СИП серваку, ждёт немного, затем залпом выполняет все команды и вылетает. При этом на номер 123456789 идёт дозвон, несмотря на то, что linphonec уже отработал и отвалился, и вызов будет продолжаться до тех пор, пока сама АТС-ка не разрвёт соединение.

Как заставить linphonec звонить, ждать и отваливаться по задуманному?

PS: Буду рад другим, но работающим вариантам :)

Re: Простенькая программка :(

1. Писать подобные скрипты на сях - моветон
2. Если сильно свербит именно на сях, то sleep() в качестве аргумента принимает количество миллисекунд, а не секунд.

shutty ()

Re: Простенькая программка :(

Вы же пытаетесь передать параметры через пайп, а сами выводите их в stdout.
Смотрите в сторону popen.

andreyu ★★★★★ ()
Ответ на: Re: Простенькая программка :( от shutty

Re: Простенькая программка :(

> Если сильно свербит именно на сях, то sleep() в качестве аргумента принимает количество миллисекунд, а не секунд.

Не надо никого вводить в заблуждение! sleep всю жизнь принимает в параметре именно число секунд! man sleep

sigurd ★★★ ()
Ответ на: Re: Простенькая программка :( от shutty

Re: Простенькая программка :(

>sleep() в качестве аргумента принимает количество миллисекунд

Я что-то пропустил?! В man sleep всё ещё секунды!

Но вообще-то, и правда, незачем такое писать на C.

lodin ★★★★ ()

Re: Простенькая программка :(

У вас классический пример для использования утилиты expect или ей подобной! И диалог с программой должен быть двухсторонний, а не на таймаутах. Вот статья в журнале про expect http://www.osp.ru/pcworld/2003/07/165973/

sigurd ★★★ ()

Re: Простенькая программка :(

файл callmy

#!/bin/sh
sleep 1
echo "call 123456789"
sleep 5
echo "terminate"
sleep 3
echo "quit"
sleep 5
exit 0


звонить так:
$ callmy | linphonec


(подобным скриптом модем через телнет перезагружало при повисе)

n_play ()

Re: Простенькая программка :(

sleep в сях прерывается сигналами.

поэтому правильный слип реализуется по-другому.

scaldov ★★ ()

Re: Простенькая программка :(

буферизация? попробуй fprintf/fflush вместо printf

gorilych ★★ ()
Ответ на: Re: Простенькая программка :( от sigurd

Re: Простенькая программка :(

> У вас классический пример для использования утилиты expect или ей подобной! И диалог с программой должен быть двухсторонний, а не на таймаутах. Вот статья в журнале про expect http://www.osp.ru/pcworld/2003/07/165973/

Огромное спасибо за expect. Именно то, что надо!!!

jekaev ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.