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