This source file includes following definitions.
- test_call
- FIO_SIGNAL_CB_FUNCTION
- handle_SIGINT
- main
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include "freetdm.h"
5
6
7 static void *test_call(ftdm_thread_t *me, void *obj)
8 {
9 ftdm_channel_t *chan = (ftdm_channel_t *) obj;
10 uint8_t frame[1024];
11 ftdm_size_t len;
12 char *number = ftdm_strdup("5551212");
13
14 ftdm_sleep(10 * 1000);
15
16 ftdm_log(FTDM_LOG_DEBUG, "answer call and start echo test\n");
17
18 ftdm_channel_call_answer(chan);
19 ftdm_channel_command(chan, FTDM_COMMAND_SEND_DTMF, number);
20
21 while (ftdm_channel_call_check_answered(chan)) {
22 ftdm_wait_flag_t flags = FTDM_READ;
23
24 if (ftdm_channel_wait(chan, &flags, -1) == FTDM_FAIL) {
25 break;
26 }
27 len = sizeof(frame);
28 if (flags & FTDM_READ) {
29 if (ftdm_channel_read(chan, frame, &len) == FTDM_SUCCESS) {
30
31 ftdm_channel_write(chan, frame, sizeof(frame), &len);
32 } else {
33 break;
34 }
35 }
36 }
37
38 if (ftdm_channel_call_check_answered(chan)) {
39 ftdm_channel_call_indicate(chan, FTDM_CHANNEL_INDICATE_BUSY);
40 }
41
42 ftdm_log(FTDM_LOG_DEBUG, "call over\n");
43 ftdm_safe_free(number);
44 return NULL;
45 }
46
47 static FIO_SIGNAL_CB_FUNCTION(on_signal)
48 {
49 ftdm_log(FTDM_LOG_DEBUG, "got sig [%s]\n", ftdm_signal_event2str(sigmsg->event_id));
50
51 switch(sigmsg->event_id) {
52 case FTDM_SIGEVENT_START:
53 ftdm_channel_call_indicate(sigmsg->channel, FTDM_CHANNEL_INDICATE_RINGING);
54 ftdm_log(FTDM_LOG_DEBUG, "launching thread and indicating ring\n");
55 ftdm_thread_create_detached(test_call, sigmsg->channel);
56 break;
57 default:
58 break;
59 }
60
61 return FTDM_SUCCESS;
62 }
63
64 static int R = 0;
65 #if 0
66 static void handle_SIGINT(int sig)
67 {
68 if (sig);
69 R = 0;
70 return;
71 }
72 #endif
73
74 int main(int argc, char *argv[])
75 {
76 ftdm_span_t *span;
77 int span_id;
78 int digit_timeout = 2000;
79 int max_dialstr = 11;
80
81 if (argc < 2) {
82 printf("usage %s <spanno>\n", argv[0]);
83 exit(-1);
84 }
85
86 span_id = atoi(argv[1]);
87
88 ftdm_global_set_default_logger(FTDM_LOG_LEVEL_DEBUG);
89
90 if (ftdm_global_init() != FTDM_SUCCESS) {
91 ftdm_log(FTDM_LOG_ERROR, "Error loading FreeTDM\n");
92 exit(-1);
93 }
94
95 ftdm_log(FTDM_LOG_DEBUG, "FreeTDM loaded\n");
96
97 if (ftdm_span_find(span_id, &span) != FTDM_SUCCESS) {
98 ftdm_log(FTDM_LOG_ERROR, "Error finding FreeTDM span\n");
99 goto done;
100 }
101
102
103 if (ftdm_configure_span(span, "analog", on_signal,
104 "tonemap", "us",
105 "digit_timeout", &digit_timeout,
106 "max_dialstr", &max_dialstr,
107 FTDM_TAG_END
108 ) != FTDM_SUCCESS) {
109 ftdm_log(FTDM_LOG_ERROR, "Error configuring FreeTDM span\n");
110 goto done;
111 }
112 ftdm_span_start(span);
113
114 R = 1;
115
116 while(ftdm_running() && R) {
117 ftdm_sleep(1 * 1000);
118 }
119
120 done:
121
122 ftdm_global_destroy();
123 return 0;
124 }
125
126
127
128
129
130
131
132
133
134
135
136