134 lines
2.7 KiB
C
134 lines
2.7 KiB
C
#include "freetdm.h"
|
|
|
|
|
|
static void *test_call(ftdm_thread_t *me, void *obj)
|
|
{
|
|
ftdm_channel_t *chan = (ftdm_channel_t *) obj;
|
|
uint8_t frame[1024];
|
|
ftdm_size_t len;
|
|
char *number = strdup("5551212");
|
|
|
|
ftdm_sleep(10 * 1000);
|
|
|
|
ftdm_log(FTDM_LOG_DEBUG, "answer call and start echo test\n");
|
|
|
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_UP);
|
|
ftdm_channel_command(chan, FTDM_COMMAND_SEND_DTMF, number);
|
|
|
|
while (chan->state == FTDM_CHANNEL_STATE_UP) {
|
|
ftdm_wait_flag_t flags = FTDM_READ;
|
|
|
|
if (ftdm_channel_wait(chan, &flags, -1) == FTDM_FAIL) {
|
|
break;
|
|
}
|
|
len = sizeof(frame);
|
|
if (flags & FTDM_READ) {
|
|
if (ftdm_channel_read(chan, frame, &len) == FTDM_SUCCESS) {
|
|
//ftdm_log(FTDM_LOG_DEBUG, "WRITE %d\n", len);
|
|
ftdm_channel_write(chan, frame, sizeof(frame), &len);
|
|
} else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (chan->state == FTDM_CHANNEL_STATE_UP) {
|
|
ftdm_set_state_locked(chan, FTDM_CHANNEL_STATE_BUSY);
|
|
}
|
|
|
|
ftdm_log(FTDM_LOG_DEBUG, "call over\n");
|
|
free(number);
|
|
return NULL;
|
|
}
|
|
|
|
static FIO_SIGNAL_CB_FUNCTION(on_signal)
|
|
{
|
|
ftdm_log(FTDM_LOG_DEBUG, "got sig [%s]\n", ftdm_signal_event2str(sigmsg->event_id));
|
|
|
|
switch(sigmsg->event_id) {
|
|
case FTDM_SIGEVENT_START:
|
|
ftdm_set_state_locked(sigmsg->channel, FTDM_CHANNEL_STATE_RING);
|
|
ftdm_log(FTDM_LOG_DEBUG, "launching thread and indicating ring\n");
|
|
ftdm_thread_create_detached(test_call, sigmsg->channel);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return FTDM_SUCCESS;
|
|
}
|
|
|
|
static int R = 0;
|
|
#if 0
|
|
static void handle_SIGINT(int sig)
|
|
{
|
|
if (sig);
|
|
R = 0;
|
|
return;
|
|
}
|
|
#endif
|
|
|
|
int main(int argc, char *argv[])
|
|
{
|
|
ftdm_span_t *span;
|
|
int span_id;
|
|
int digit_timeout = 2000;
|
|
int max_dialstr = 11;
|
|
|
|
if (argc < 2) {
|
|
printf("usage %s <spanno>\n", argv[0]);
|
|
exit(-1);
|
|
}
|
|
|
|
span_id = atoi(argv[1]);
|
|
|
|
ftdm_global_set_default_logger(FTDM_LOG_LEVEL_DEBUG);
|
|
|
|
if (ftdm_global_init() != FTDM_SUCCESS) {
|
|
ftdm_log(FTDM_LOG_ERROR, "Error loading FreeTDM\n");
|
|
exit(-1);
|
|
}
|
|
|
|
ftdm_log(FTDM_LOG_DEBUG, "FreeTDM loaded\n");
|
|
|
|
if (ftdm_span_find(span_id, &span) != FTDM_SUCCESS) {
|
|
ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span\n");
|
|
goto done;
|
|
}
|
|
|
|
|
|
if (ftdm_configure_span("analog", span, on_signal,
|
|
"tonemap", "us",
|
|
"digit_timeout", &digit_timeout,
|
|
"max_dialstr", &max_dialstr,
|
|
TAG_END
|
|
) != FTDM_SUCCESS) {
|
|
ftdm_log(FTDM_LOG_ERROR, "Error configuring FreeTDM span\n");
|
|
goto done;
|
|
}
|
|
ftdm_span_start(span);
|
|
|
|
R = 1;
|
|
|
|
while(ftdm_running() && R) {
|
|
ftdm_sleep(1 * 1000);
|
|
}
|
|
|
|
done:
|
|
|
|
ftdm_global_destroy();
|
|
return 0;
|
|
}
|
|
|
|
/* For Emacs:
|
|
* Local Variables:
|
|
* mode:c
|
|
* indent-tabs-mode:t
|
|
* tab-width:4
|
|
* c-basic-offset:4
|
|
* End:
|
|
* For VIM:
|
|
* vim:set softtabstop=4 shiftwidth=4 tabstop=4:
|
|
*/
|
|
|