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