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