issue #5566
[asterisk/asterisk.git] / channels / misdn / isdn_lib.h
1 /*
2  * Chan_Misdn -- Channel Driver for Asterisk
3  *
4  * Interface to mISDN
5  *
6  * Copyright (C) 2004, Christian Richter
7  *
8  * Christian Richter <crich@beronet.com>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #ifndef TE_LIB
15 #define TE_LIB
16
17 /** For initialization usage **/
18 /* typedef int ie_nothing_t ;*/
19 /** end of init usage **/
20
21
22 #define MAX_BCHANS 30
23
24 enum bc_state_e {
25         STATE_NOTHING=0,
26         STATE_NULL,
27         STATE_CALL_INIT,
28         STATE_CONNECTED,
29         STATE_HOLD_ACKNOWLEDGE
30 };
31
32
33 enum tone_e {
34         TONE_NONE=0,
35         TONE_DIAL,
36         TONE_ALERTING,
37         TONE_BUSY,
38         TONE_FILE
39 };
40
41 enum misdn_err_e {
42         ENOCHAN=1
43 };
44
45
46
47 enum mISDN_NUMBER_PLAN {
48         NUMPLAN_UNINITIALIZED=-1,
49         NUMPLAN_INTERNATIONAL=0x1,
50         NUMPLAN_NATIONAL=0x2,
51         NUMPLAN_SUBSCRIBER=0x4,
52         NUMPLAN_UNKNOWN=0x0
53 }; 
54
55
56 enum event_response_e {
57         RESPONSE_IGNORE_SETUP_WITHOUT_CLOSE,
58         RESPONSE_IGNORE_SETUP,
59         RESPONSE_ERR,
60         RESPONSE_OK
61 };
62
63
64
65 enum event_e {
66         EVENT_NOTHING,
67         EVENT_BCHAN_DATA,
68         EVENT_CLEANUP,
69         EVENT_PROCEEDING,
70         EVENT_PROGRESS,
71         EVENT_SETUP,
72         EVENT_ALERTING,
73         EVENT_CONNECT,
74         EVENT_SETUP_ACKNOWLEDGE,
75         EVENT_CONNECT_ACKNOWLEDGE ,
76         EVENT_USER_INFORMATION,
77         EVENT_SUSPEND_REJECT,
78         EVENT_RESUME_REJECT,
79         EVENT_HOLD,
80         EVENT_SUSPEND,
81         EVENT_RESUME,
82         EVENT_HOLD_ACKNOWLEDGE,
83         EVENT_SUSPEND_ACKNOWLEDGE,
84         EVENT_RESUME_ACKNOWLEDGE,
85         EVENT_HOLD_REJECT,
86         EVENT_RETRIEVE,
87         EVENT_RETRIEVE_ACKNOWLEDGE,
88         EVENT_RETRIEVE_REJECT,
89         EVENT_DISCONNECT,
90         EVENT_RESTART,
91         EVENT_RELEASE,
92         EVENT_RELEASE_COMPLETE,
93         EVENT_FACILITY,
94         EVENT_NOTIFY,
95         EVENT_STATUS_ENQUIRY,
96         EVENT_INFORMATION,
97         EVENT_STATUS,
98         EVENT_TIMEOUT,
99         EVENT_DTMF_TONE,
100         EVENT_NEW_L3ID,
101         EVENT_NEW_BC,
102         EVENT_UNKNOWN
103 }; 
104
105
106 enum ie_name_e {
107         IE_DUMMY,
108         IE_LAST
109 };
110
111 enum { /* bearer capability */
112         INFO_CAPABILITY_SPEECH=0,
113         INFO_CAPABILITY_AUDIO_3_1K=0x10 ,
114         INFO_CAPABILITY_AUDIO_7K=0x11 ,
115         INFO_CAPABILITY_VIDEO =0x18,
116         INFO_CAPABILITY_DIGITAL_UNRESTRICTED =0x8,
117         INFO_CAPABILITY_DIGITAL_RESTRICTED =0x09,
118         INFO_CAPABILITY_DIGITAL_UNRESTRICTED_TONES
119 };
120
121 enum { /* progress indicators */
122         INFO_PI_CALL_NOT_E2E_ISDN =0x01,
123         INFO_PI_CALLED_NOT_ISDN =0x02,
124         INFO_PI_CALLER_NOT_ISDN =0x03,
125         INFO_PI_CALLER_RETURNED_TO_ISDN =0x04,
126         INFO_PI_INBAND_AVAILABLE =0x08,
127         INFO_PI_DELAY_AT_INTERF =0x0a,
128         INFO_PI_INTERWORKING_WITH_PUBLIC =0x10,
129         INFO_PI_INTERWORKING_NO_RELEASE =0x11,
130         INFO_PI_INTERWORKING_NO_RELEASE_PRE_ANSWER =0x12,
131         INFO_PI_INTERWORKING_NO_RELEASE_POST_ANSWER =0x13
132 };
133
134 enum { /*CODECS*/
135         INFO_CODEC_ULAW=2,
136         INFO_CODEC_ALAW=3
137 }; 
138
139
140 enum layer_e {
141         L3,
142         L2,
143         L1,
144         UNKNOWN
145 }; 
146
147 enum facility_type {
148         FACILITY_NONE,
149         FACILITY_CALLDEFLECT
150 };
151
152
153
154
155 struct misdn_bchannel {
156
157         int nt;
158         int port;
159         /** init stuff **/
160         int b_stid;
161         /* int b_addr; */
162         int layer_id;
163
164
165         
166         /** var stuff**/
167         int l3_id;
168         int pid;
169         int ces;
170   
171         int channel;
172         int channel_preselected;
173         
174         int in_use;
175         int addr;
176
177         unsigned char * bframe;
178         int bframe_len;
179         int time_usec;
180         
181         
182         void *astbuf;
183         void *misdnbuf;
184         
185
186         int te_choose_channel;
187         
188         /* dtmf digit */
189         int dtmf;
190         int send_dtmf;
191
192         /* wether we should use jollys dsp or not */
193         int nodsp;
194         
195         /* wether we should use our jitter buf system or not */
196         int nojitter;
197         
198         enum mISDN_NUMBER_PLAN dnumplan;
199         enum mISDN_NUMBER_PLAN rnumplan;
200         enum mISDN_NUMBER_PLAN onumplan;
201
202         int progress_coding;
203         int progress_location;
204         int progress_indicator;
205         
206         enum facility_type facility;
207         char facility_calldeflect_nr[15];
208         
209         enum event_e evq;
210         
211         /*** CRYPTING STUFF ***/
212         
213         int crypt;
214         int curprx;
215         int curptx; 
216         char crypt_key[255];
217   
218         int crypt_state;
219     
220         /*char ast_dtmf_buf[255];
221           char misdn_dtmf_buf[255]; */
222   
223         /*** CRYPTING STUFF END***/
224   
225         int active;
226         int upset;
227
228         enum tone_e tone;
229         int tone_cnt;
230         int tone_cnt2;
231   
232         enum bc_state_e state;
233
234         int holded;
235         int stack_holder;
236         
237         int pres;
238   
239         int nohdlc;
240         
241         int capability;
242         int law;
243         /** V110 Stuff **/
244         int rate;
245         int mode;
246
247         int user1;
248         int urate;
249         int async;
250         /* V110 */
251   
252         unsigned char display[84];
253         unsigned char msn[32];
254         unsigned char oad[32];
255         unsigned char rad[32];
256         unsigned char dad[32];
257         unsigned char orig_dad[32];
258         unsigned char keypad[32];
259   
260         unsigned char info_dad[64];
261         unsigned char infos_pending[64];
262         unsigned char info_keypad[32];
263         unsigned char clisub[24];
264         unsigned char cldsub[24];
265         unsigned char fac[132];
266         unsigned char uu[256];
267   
268         int cause;
269         int out_cause;
270   
271         /* struct misdn_bchannel hold_bc; */
272   
273         /** list stuf **/
274
275         int ec_enable;
276         int ec_deftaps;
277         int ec_whenbridged;
278         int ec_training;
279         
280         int orig;
281
282         int txgain;
283         int rxgain;
284   
285         struct misdn_bchannel *next;
286 };
287
288
289 enum event_response_e (*cb_event) (enum event_e event, struct misdn_bchannel *bc, void *user_data);
290 void (*cb_log) (int level, int port, char *tmpl, ...);
291 int (*cb_clearl3_true)(void);
292
293 struct misdn_lib_iface {
294         
295         enum event_response_e (*cb_event)(enum event_e event, struct misdn_bchannel *bc, void *user_data);
296         void (*cb_log)(int level, int port, char *tmpl, ...);
297         int (*cb_clearl3_true)(void);
298 };
299
300 /***** USER IFACE **********/
301
302 int misdn_lib_init(char *portlist, struct misdn_lib_iface* iface, void *user_data);
303 int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event );
304 void misdn_lib_destroy(void);
305
306 void misdn_lib_log_ies(struct misdn_bchannel *bc);
307
308 char *manager_isdn_get_info(enum event_e event);
309
310 void misdn_lib_transfer(struct misdn_bchannel* holded_bc);
311
312 struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel);
313
314 void manager_bchannel_activate(struct misdn_bchannel *bc);
315 void manager_bchannel_deactivate(struct misdn_bchannel * bc);
316 int manager_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len);
317 void manager_send_tone (struct misdn_bchannel *bc, enum tone_e tone);
318
319 void manager_ph_control(struct misdn_bchannel *bc, int c1, int c2);
320
321
322 int misdn_lib_port_restart(int port);
323 int misdn_lib_get_port_info(int port);
324
325 int misdn_lib_port_up(int port);
326
327 int misdn_lib_get_port_up (int port) ;
328      
329 int misdn_lib_maxports_get(void) ;
330
331 void misdn_lib_release(struct misdn_bchannel *bc);
332
333 int misdn_cap_is_speech(int cap);
334 int misdn_inband_avail(struct misdn_bchannel *bc);
335
336 int misdn_lib_send_facility(struct misdn_bchannel *bc, enum facility_type fac, void *data);
337
338
339 void manager_ec_enable(struct misdn_bchannel *bc);
340 void manager_ec_disable(struct misdn_bchannel *bc);
341
342 void get_show_stack_details(int port, char *buf);
343
344
345 /** Ibuf interface **/
346 int misdn_ibuf_usedcount(void *buf);
347 int misdn_ibuf_freecount(void *buf);
348 void misdn_ibuf_memcpy_r(char *to, void *from, int len);
349 void misdn_ibuf_memcpy_w(void *buf, char *from, int len);
350
351 /** Ibuf interface End **/
352
353
354 void misdn_lib_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
355 void misdn_lib_split_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
356
357
358 int misdn_lib_is_ptp(int port);
359
360 #define PRI_TRANS_CAP_SPEECH                                    0x0
361 #define PRI_TRANS_CAP_DIGITAL                                   0x08
362 #define PRI_TRANS_CAP_RESTRICTED_DIGITAL                        0x09
363 #define PRI_TRANS_CAP_3_1K_AUDIO                                0x10
364 #define PRI_TRANS_CAP_7K_AUDIO                                  0x11
365
366 #endif