2 * Chan_Misdn -- Channel Driver for Asterisk
6 * Copyright (C) 2004, Christian Richter
8 * Christian Richter <crich@beronet.com>
10 * This program is free software, distributed under the terms of
11 * the GNU General Public License
24 #ifndef mISDNUSER_HEAD_SIZE
26 #ifdef MISDNUSER_JOLLY
27 #define mISDNUSER_HEAD_SIZE (sizeof(mISDNuser_head_t))
29 #define mISDNUSER_HEAD_SIZE (sizeof(mISDN_head_t))
33 #define MISDN_ASTERISK_TECH_PVT(ast) ast->tech_pvt
34 #define MISDN_ASTERISK_PVT(ast) 1
35 #define MISDN_ASTERISK_TYPE(ast) ast->tech->type
38 /* #include "ies.h" */
43 /** For initialization usage **/
44 /* typedef int ie_nothing_t ;*/
45 /** end of init usage **/
53 STATE_HOLD_ACKNOWLEDGE
71 enum mISDN_NUMBER_PLAN {
72 NUMPLAN_UNINITIALIZED=-1,
73 NUMPLAN_INTERNATIONAL=0x1,
75 NUMPLAN_SUBSCRIBER=0x4,
80 enum event_response_e {
81 RESPONSE_IGNORE_SETUP_WITHOUT_CLOSE,
82 RESPONSE_IGNORE_SETUP,
98 EVENT_SETUP_ACKNOWLEDGE,
99 EVENT_CONNECT_ACKNOWLEDGE ,
100 EVENT_USER_INFORMATION,
101 EVENT_SUSPEND_REJECT,
106 EVENT_HOLD_ACKNOWLEDGE,
107 EVENT_SUSPEND_ACKNOWLEDGE,
108 EVENT_RESUME_ACKNOWLEDGE,
111 EVENT_RETRIEVE_ACKNOWLEDGE,
112 EVENT_RETRIEVE_REJECT,
116 EVENT_RELEASE_COMPLETE,
119 EVENT_STATUS_ENQUIRY,
135 enum { /* bearer capability */
136 INFO_CAPABILITY_SPEECH=0,
137 INFO_CAPABILITY_AUDIO_3_1K=0x10 ,
138 INFO_CAPABILITY_AUDIO_7K=0x11 ,
139 INFO_CAPABILITY_VIDEO =0x18,
140 INFO_CAPABILITY_DIGITAL_UNRESTRICTED =0x8,
141 INFO_CAPABILITY_DIGITAL_RESTRICTED =0x09,
142 INFO_CAPABILITY_DIGITAL_UNRESTRICTED_TONES
145 enum { /* progress indicators */
146 INFO_PI_CALL_NOT_E2E_ISDN =0x01,
147 INFO_PI_CALLED_NOT_ISDN =0x02,
148 INFO_PI_CALLER_NOT_ISDN =0x03,
149 INFO_PI_CALLER_RETURNED_TO_ISDN =0x04,
150 INFO_PI_INBAND_AVAILABLE =0x08,
151 INFO_PI_DELAY_AT_INTERF =0x0a,
152 INFO_PI_INTERWORKING_WITH_PUBLIC =0x10,
153 INFO_PI_INTERWORKING_NO_RELEASE =0x11,
154 INFO_PI_INTERWORKING_NO_RELEASE_PRE_ANSWER =0x12,
155 INFO_PI_INTERWORKING_NO_RELEASE_POST_ANSWER =0x13
176 struct misdn_bchannel {
188 int channel_preselected;
193 unsigned char * bframe;
206 /* wether we should use jollys dsp or not */
209 /* wether we should use our jitter buf system or not */
212 enum mISDN_NUMBER_PLAN dnumplan;
213 enum mISDN_NUMBER_PLAN rnumplan;
214 enum mISDN_NUMBER_PLAN onumplan;
217 int progress_location;
218 int progress_indicator;
220 enum facility_type facility;
221 char facility_calldeflect_nr[15];
225 /*** CRYPTING STUFF ***/
234 /*char ast_dtmf_buf[255];
235 char misdn_dtmf_buf[255]; */
237 /*** CRYPTING STUFF END***/
246 enum bc_state_e state;
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];
274 unsigned char info_dad[64];
275 unsigned char infos_pending[64];
276 unsigned char info_keypad[32];
277 unsigned char clisub[24];
278 unsigned char cldsub[24];
279 unsigned char fac[132];
280 unsigned char uu[256];
285 /* struct misdn_bchannel hold_bc; */
299 struct misdn_bchannel *next;
300 struct misdn_stack *stack;
304 /** is first element because &nst equals &mISDNlist **/
312 int b_stids[MAX_BCHANS + 1];
325 enum mode_e {NT_MODE, TE_MODE} mode;
329 int procids[0x100+1];
331 msg_queue_t downqueue;
335 struct misdn_bchannel bc[MAX_BCHANS + 1];
337 struct misdn_bchannel* bc_list;
339 int channels[MAX_BCHANS + 1];
343 int te_choose_channel;
346 struct misdn_bchannel *holding; /* Queue which holds holded channels :) */
348 struct misdn_stack *next;
351 struct misdn_stack* get_misdn_stack( void );
353 enum event_response_e (*cb_event) (enum event_e event, struct misdn_bchannel *bc, void *user_data);
354 void (*cb_log) (int level, int port, char *tmpl, ...);
355 int (*cb_clearl3_true)(void);
357 struct misdn_lib_iface {
359 enum event_response_e (*cb_event)(enum event_e event, struct misdn_bchannel *bc, void *user_data);
360 void (*cb_log)(int level, int port, char *tmpl, ...);
361 int (*cb_clearl3_true)(void);
364 /***** USER IFACE **********/
366 int misdn_lib_init(char *portlist, struct misdn_lib_iface* iface, void *user_data);
367 int misdn_lib_send_event(struct misdn_bchannel *bc, enum event_e event );
368 void misdn_lib_destroy(void);
370 void misdn_lib_log_ies(struct misdn_bchannel *bc);
372 char *manager_isdn_get_info(enum event_e event);
374 void misdn_lib_transfer(struct misdn_bchannel* holded_bc);
376 struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel);
378 void manager_bchannel_activate(struct misdn_bchannel *bc);
379 void manager_bchannel_deactivate(struct misdn_bchannel * bc);
380 int manager_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len);
381 void manager_send_tone (struct misdn_bchannel *bc, enum tone_e tone);
383 void manager_ph_control(struct misdn_bchannel *bc, int c1, int c2);
386 int misdn_lib_port_restart(int port);
387 int misdn_lib_get_port_info(int port);
389 int misdn_lib_port_up(int port);
391 int misdn_lib_get_port_up (int port) ;
393 int misdn_lib_maxports_get(void) ;
395 void misdn_lib_release(struct misdn_bchannel *bc);
397 int misdn_cap_is_speech(int cap);
398 int misdn_inband_avail(struct misdn_bchannel *bc);
400 int misdn_lib_send_facility(struct misdn_bchannel *bc, enum facility_type fac, void *data);
404 unsigned long misdn_msg;
409 void (*msg_parser)(struct isdn_msg *msgs, msg_t *msg, struct misdn_bchannel *bc, int nt);
410 msg_t *(*msg_builder)(struct isdn_msg *msgs, struct misdn_bchannel *bc, int nt);
411 void (*msg_printer)(struct isdn_msg *msgs);
424 void manager_ec_enable(struct misdn_bchannel *bc);
425 void manager_ec_disable(struct misdn_bchannel *bc);
428 /* for isdn_msg_parser.c */
429 msg_t *create_l3msg(int prim, int mt, int dinfo , int size, int nt);
433 #define PRI_TRANS_CAP_SPEECH 0x0
434 #define PRI_TRANS_CAP_DIGITAL 0x08
435 #define PRI_TRANS_CAP_RESTRICTED_DIGITAL 0x09
436 #define PRI_TRANS_CAP_3_1K_AUDIO 0x10
437 #define PRI_TRANS_CAP_7K_AUDIO 0x11