* removed pp_l2_check (fixed L2 bug in mISDNuser)
[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 #ifdef WITH_BEROEC
23 typedef int beroec_t;
24
25
26 enum beroec_type {
27         BEROEC_FULLBAND=0,
28         BEROEC_SUBBAND,
29         BEROEC_FASTSUBBAND
30 };
31
32 void beroec_init(void);
33 void beroec_exit(void);
34 beroec_t *beroec_new(int tail, enum beroec_type type, int anti_howl,
35                      int tonedisable, int zerocoeff, int adapt, int nlp);
36
37 void beroec_destroy(beroec_t *ec);
38 int beroec_cancel_alaw_chunk(beroec_t *ec, 
39         char *send, 
40         char *receive , 
41         int len);
42
43 int beroec_version(void);
44 #endif
45
46
47
48 enum tone_e {
49         TONE_NONE=0,
50         TONE_DIAL,
51         TONE_ALERTING,
52         TONE_FAR_ALERTING,
53         TONE_BUSY,
54         TONE_HANGUP,
55         TONE_CUSTOM,
56         TONE_FILE
57 };
58
59
60
61 #define MAX_BCHANS 30
62
63 enum bchannel_state {
64         BCHAN_CLEANED=0,
65         BCHAN_EMPTY,
66         BCHAN_SETUP,
67         BCHAN_SETUPED,
68         BCHAN_ACTIVE,
69         BCHAN_ACTIVATED,
70         BCHAN_BRIDGE,
71         BCHAN_BRIDGED,
72         BCHAN_RELEASE,
73         BCHAN_RELEASED,
74         BCHAN_CLEAN,
75         BCHAN_CLEAN_REQUEST,
76         BCHAN_ERROR
77 };
78
79
80 enum misdn_err_e {
81         ENOCHAN=1
82 };
83
84
85 enum mISDN_NUMBER_PLAN {
86         NUMPLAN_UNINITIALIZED=-1,
87         NUMPLAN_INTERNATIONAL=0x1,
88         NUMPLAN_NATIONAL=0x2,
89         NUMPLAN_SUBSCRIBER=0x4,
90         NUMPLAN_UNKNOWN=0x0
91 }; 
92
93
94 enum event_response_e {
95         RESPONSE_IGNORE_SETUP_WITHOUT_CLOSE,
96         RESPONSE_IGNORE_SETUP,
97         RESPONSE_ERR,
98         RESPONSE_OK
99 };
100
101
102 enum event_e {
103         EVENT_NOTHING,
104         EVENT_TONE_GENERATE,
105         EVENT_BCHAN_DATA,
106         EVENT_BCHAN_ACTIVATED,
107         EVENT_CLEANUP,
108         EVENT_PROCEEDING,
109         EVENT_PROGRESS,
110         EVENT_SETUP,
111         EVENT_ALERTING,
112         EVENT_CONNECT,
113         EVENT_SETUP_ACKNOWLEDGE,
114         EVENT_CONNECT_ACKNOWLEDGE ,
115         EVENT_USER_INFORMATION,
116         EVENT_SUSPEND_REJECT,
117         EVENT_RESUME_REJECT,
118         EVENT_HOLD,
119         EVENT_SUSPEND,
120         EVENT_RESUME,
121         EVENT_HOLD_ACKNOWLEDGE,
122         EVENT_SUSPEND_ACKNOWLEDGE,
123         EVENT_RESUME_ACKNOWLEDGE,
124         EVENT_HOLD_REJECT,
125         EVENT_RETRIEVE,
126         EVENT_RETRIEVE_ACKNOWLEDGE,
127         EVENT_RETRIEVE_REJECT,
128         EVENT_DISCONNECT,
129         EVENT_RESTART,
130         EVENT_RELEASE,
131         EVENT_RELEASE_COMPLETE,
132         EVENT_FACILITY,
133         EVENT_NOTIFY,
134         EVENT_STATUS_ENQUIRY,
135         EVENT_INFORMATION,
136         EVENT_STATUS,
137         EVENT_TIMEOUT,
138         EVENT_DTMF_TONE,
139         EVENT_NEW_L3ID,
140         EVENT_NEW_BC,
141         EVENT_PORT_ALARM,
142         EVENT_NEW_CHANNEL,
143         EVENT_UNKNOWN
144 }; 
145
146
147 enum ie_name_e {
148         IE_DUMMY,
149         IE_LAST
150 };
151
152 enum { /* bearer capability */
153         INFO_CAPABILITY_SPEECH=0,
154         INFO_CAPABILITY_AUDIO_3_1K=0x10 ,
155         INFO_CAPABILITY_AUDIO_7K=0x11 ,
156         INFO_CAPABILITY_VIDEO =0x18,
157         INFO_CAPABILITY_DIGITAL_UNRESTRICTED =0x8,
158         INFO_CAPABILITY_DIGITAL_RESTRICTED =0x09,
159         INFO_CAPABILITY_DIGITAL_UNRESTRICTED_TONES
160 };
161
162 enum { /* progress indicators */
163         INFO_PI_CALL_NOT_E2E_ISDN =0x01,
164         INFO_PI_CALLED_NOT_ISDN =0x02,
165         INFO_PI_CALLER_NOT_ISDN =0x03,
166         INFO_PI_CALLER_RETURNED_TO_ISDN =0x04,
167         INFO_PI_INBAND_AVAILABLE =0x08,
168         INFO_PI_DELAY_AT_INTERF =0x0a,
169         INFO_PI_INTERWORKING_WITH_PUBLIC =0x10,
170         INFO_PI_INTERWORKING_NO_RELEASE =0x11,
171         INFO_PI_INTERWORKING_NO_RELEASE_PRE_ANSWER =0x12,
172         INFO_PI_INTERWORKING_NO_RELEASE_POST_ANSWER =0x13
173 };
174
175 enum { /*CODECS*/
176         INFO_CODEC_ULAW=2,
177         INFO_CODEC_ALAW=3
178 }; 
179
180
181 enum layer_e {
182         L3,
183         L2,
184         L1,
185         UNKNOWN
186 }; 
187
188
189
190 /** FACILITY STUFF **/
191
192 enum facility_type {
193         FACILITY_NONE,
194         FACILITY_CALLDEFLECT=0x91,
195         FACILITY_CENTREX=0x88
196 };
197
198 union facility {
199         char calldeflect_nr[15];
200         char cnip[256];
201 };
202
203
204
205
206 struct misdn_bchannel {
207
208         int nt;
209         int port;
210         /** init stuff **/
211         int b_stid;
212         /* int b_addr; */
213         int layer_id;
214
215         void *ack_hdlc;
216         
217         int layer;
218         
219         /*state stuff*/
220         int need_disconnect;
221         int need_release;
222         int need_release_complete;
223
224         /** var stuff**/
225         int l3_id;
226         int pid;
227         int ces;
228
229         int restart_channel;
230         int channel;
231         int channel_preselected;
232         
233         int in_use;
234         int addr;
235
236         unsigned char * bframe;
237         int bframe_len;
238         int time_usec;
239         
240         
241         void *astbuf;
242
243         void *misdnbuf;
244
245         int te_choose_channel;
246         int early_bconnect;
247         
248         /* dtmf digit */
249         int dtmf;
250         int send_dtmf;
251
252         /* get setup ack */
253         int need_more_infos;
254
255         /* may there be more infos ?*/
256         int sending_complete;
257
258
259         /* wether we should use jollys dsp or not */
260         int nodsp;
261         
262         /* wether we should use our jitter buf system or not */
263         int nojitter;
264         
265         enum mISDN_NUMBER_PLAN dnumplan;
266         enum mISDN_NUMBER_PLAN rnumplan;
267         enum mISDN_NUMBER_PLAN onumplan;
268         enum mISDN_NUMBER_PLAN cpnnumplan;
269
270         int progress_coding;
271         int progress_location;
272         int progress_indicator;
273         
274         enum facility_type fac_type;
275         union facility fac;
276         
277         enum facility_type out_fac_type;
278         union facility out_fac;
279         
280         enum event_e evq;
281         
282         /*** CRYPTING STUFF ***/
283         
284         int crypt;
285         int curprx;
286         int curptx; 
287         char crypt_key[255];
288   
289         int crypt_state;
290     
291         /*char ast_dtmf_buf[255];
292           char misdn_dtmf_buf[255]; */
293   
294         /*** CRYPTING STUFF END***/
295   
296         int active;
297         int upset;
298
299         int generate_tone;
300         int tone_cnt;
301  
302         enum bchannel_state bc_state;
303         enum bchannel_state next_bc_state;
304
305         int conf_id;
306         
307         int holded;
308         int stack_holder;
309
310         struct misdn_bchannel *holded_bc;
311         
312         int pres;
313         int screen;
314         
315         int capability;
316         int law;
317         /** V110 Stuff **/
318         int rate;
319         int mode;
320
321         int user1;
322         int urate;
323         int hdlc;
324         /* V110 */
325   
326         unsigned char display[84];
327         unsigned char msn[32];
328         unsigned char oad[32];
329         unsigned char rad[32];
330         unsigned char dad[32];
331         unsigned char cad[32];
332         unsigned char orig_dad[32];
333         unsigned char keypad[32];
334
335         unsigned char info_dad[64];
336         unsigned char infos_pending[64];
337
338 /*      unsigned char info_keypad[32]; */
339 /*      unsigned char clisub[24]; */
340 /*      unsigned char cldsub[24]; */
341 /*      unsigned char uu[256]; */
342   
343         int cause;
344         int out_cause;
345   
346         /* struct misdn_bchannel hold_bc; */
347   
348         /** list stuf **/
349
350         int ec_enable;
351         int ec_deftaps;
352         int ec_whenbridged;
353         int ec_training;
354
355 #ifdef WITH_BEROEC
356         beroec_t *ec;
357         int bnec_tail;
358         int bnec_ah;
359         int bnec_nlp;
360         int bnec_td;
361         int bnec_adapt;
362         int bnec_zero;
363 #endif
364         
365         int orig;
366
367         int txgain;
368         int rxgain;
369   
370         struct misdn_bchannel *next;
371 };
372
373
374 enum event_response_e (*cb_event) (enum event_e event, struct misdn_bchannel *bc, void *user_data);
375 void (*cb_log) (int level, int port, char *tmpl, ...);
376 int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
377
378 struct misdn_lib_iface {
379         enum event_response_e (*cb_event)(enum event_e event, struct misdn_bchannel *bc, void *user_data);
380         void (*cb_log)(int level, int port, char *tmpl, ...);
381         int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
382 };
383
384 /***** USER IFACE **********/
385
386 void misdn_lib_nt_debug_init( int flags, char *file );
387
388 int misdn_lib_init(char *portlist, struct misdn_lib_iface* iface, void *user_data);
389 int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event );
390 void misdn_lib_destroy(void);
391
392 void misdn_lib_isdn_l1watcher(int port);
393
394 void misdn_lib_log_ies(struct misdn_bchannel *bc);
395
396 char *manager_isdn_get_info(enum event_e event);
397
398 void misdn_lib_transfer(struct misdn_bchannel* holded_bc);
399
400 struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel);
401
402 void manager_bchannel_activate(struct misdn_bchannel *bc);
403 void manager_bchannel_deactivate(struct misdn_bchannel * bc);
404
405 int misdn_lib_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len);
406
407 void manager_ph_control(struct misdn_bchannel *bc, int c1, int c2);
408
409
410 int misdn_lib_port_restart(int port);
411 int misdn_lib_get_port_info(int port);
412
413 int misdn_lib_port_block(int port);
414 int misdn_lib_port_unblock(int port);
415
416 int misdn_lib_port_up(int port, int notcheck);
417
418 int misdn_lib_get_port_down(int port);
419
420 int misdn_lib_get_port_up (int port) ;
421      
422 int misdn_lib_maxports_get(void) ;
423
424 void misdn_lib_release(struct misdn_bchannel *bc);
425
426 int misdn_cap_is_speech(int cap);
427 int misdn_inband_avail(struct misdn_bchannel *bc);
428
429 int misdn_lib_send_facility(struct misdn_bchannel *bc, enum facility_type fac, void *data);
430
431
432 void manager_ec_enable(struct misdn_bchannel *bc);
433 void manager_ec_disable(struct misdn_bchannel *bc);
434
435 void misdn_lib_send_tone(struct misdn_bchannel *bc, enum tone_e tone);
436
437 void get_show_stack_details(int port, char *buf);
438
439
440 void misdn_lib_tone_generator_start(struct misdn_bchannel *bc);
441 void misdn_lib_tone_generator_stop(struct misdn_bchannel *bc);
442
443
444 void misdn_lib_setup_bc(struct misdn_bchannel *bc);
445
446 void misdn_lib_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
447 void misdn_lib_split_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
448
449 void misdn_lib_echo(struct misdn_bchannel *bc, int onoff);
450
451 int misdn_lib_is_ptp(int port);
452 int misdn_lib_get_maxchans(int port);
453
454 void misdn_lib_reinit_nt_stack(int port);
455
456 #define PRI_TRANS_CAP_SPEECH                                    0x0
457 #define PRI_TRANS_CAP_DIGITAL                                   0x08
458 #define PRI_TRANS_CAP_RESTRICTED_DIGITAL                        0x09
459 #define PRI_TRANS_CAP_3_1K_AUDIO                                0x10
460 #define PRI_TRANS_CAP_7K_AUDIO                                  0x11
461
462
463
464 char *bc_state2str(enum bchannel_state state);
465 void bc_state_change(struct misdn_bchannel *bc, enum bchannel_state state);
466
467
468
469 #endif