committed head of chan_misdn with a lot of new features. Most important of all: chan_...
[asterisk/asterisk.git] / channels / misdn / isdn_lib.h
old mode 100755 (executable)
new mode 100644 (file)
index a6f3a25..a27e7c5
 #ifndef TE_LIB
 #define TE_LIB
 
-#include <mISDNlib.h>
-#include <isdn_net.h>
-#include <l3dss1.h>
-#include <net_l3.h>
-
-#include <pthread.h>
-
-#ifndef mISDNUSER_HEAD_SIZE
-
-#ifdef MISDNUSER_JOLLY
-#define mISDNUSER_HEAD_SIZE (sizeof(mISDNuser_head_t))
-#else
-#define mISDNUSER_HEAD_SIZE (sizeof(mISDN_head_t))
-#endif
-#endif
-
-#define MISDN_ASTERISK_TECH_PVT(ast) ast->tech_pvt
-#define MISDN_ASTERISK_PVT(ast) 1
-#define MISDN_ASTERISK_TYPE(ast) ast->tech->type
-
-
-/* #include "ies.h" */
-
-#define MAX_BCHANS 30
-
 
 /** For initialization usage **/
 /* typedef int ie_nothing_t ;*/
 /** end of init usage **/
 
 
+
+#define MAX_BCHANS 30
+
 enum bc_state_e {
        STATE_NOTHING=0,
        STATE_NULL,
@@ -168,17 +146,36 @@ enum layer_e {
        UNKNOWN
 }; 
 
+
+
+/** FACILITY STUFF **/
+
 enum facility_type {
        FACILITY_NONE,
-       FACILITY_CALLDEFLECT
+       FACILITY_CALLDEFLECT=0x91,
+       FACILITY_CENTREX=0x88
+};
+
+union facility {
+       char calldeflect_nr[15];
+       char cnip[256];
 };
 
+
+
+
 struct misdn_bchannel {
+
+       int nt;
+       int port;
        /** init stuff **/
        int b_stid;
        /* int b_addr; */
        int layer_id;
-  
+
+       int layer;
+       
+       
        /** var stuff**/
        int l3_id;
        int pid;
@@ -194,11 +191,14 @@ struct misdn_bchannel {
        int bframe_len;
        int time_usec;
        
-       sem_t astsem;
-       sem_t misdnsem;
-       ibuffer_t *astbuf;
-       ibuffer_t *misdnbuf;
-  
+       
+       void *astbuf;
+
+       void *misdnbuf;
+
+       int te_choose_channel;
+       int early_bconnect;
+       
        /* dtmf digit */
        int dtmf;
        int send_dtmf;
@@ -217,8 +217,11 @@ struct misdn_bchannel {
        int progress_location;
        int progress_indicator;
        
-       enum facility_type facility;
-       char facility_calldeflect_nr[15];
+       enum facility_type fac_type;
+       union facility fac;
+       
+       enum facility_type out_fac_type;
+       union facility out_fac;
        
        enum event_e evq;
        
@@ -249,8 +252,7 @@ struct misdn_bchannel {
        int stack_holder;
        
        int pres;
-  
-       int nohdlc;
+       int screen;
        
        int capability;
        int law;
@@ -270,14 +272,14 @@ struct misdn_bchannel {
        unsigned char dad[32];
        unsigned char orig_dad[32];
        unsigned char keypad[32];
-  
+
        unsigned char info_dad[64];
        unsigned char infos_pending[64];
-       unsigned char info_keypad[32];
-       unsigned char clisub[24];
-       unsigned char cldsub[24];
-       unsigned char fac[132];
-       unsigned char uu[256];
+
+/*     unsigned char info_keypad[32]; */
+/*     unsigned char clisub[24]; */
+/*     unsigned char cldsub[24]; */
+/*     unsigned char uu[256]; */
   
        int cause;
        int out_cause;
@@ -297,67 +299,19 @@ struct misdn_bchannel {
        int rxgain;
   
        struct misdn_bchannel *next;
-       struct misdn_stack *stack;
 };
 
-struct misdn_stack {
-       /** is first element because &nst equals &mISDNlist **/
-       net_stack_t nst;
-       manager_t mgr;
-  
-       int d_stid;
-  
-       int b_num;
-  
-       int b_stids[MAX_BCHANS + 1];
-  
-       int ptp;
-       int lower_id;
-       int upper_id;
-  
-       int l2link;
-  
-       time_t l2establish;
-  
-       int l1link;
-       int midev;
-  
-       enum mode_e {NT_MODE, TE_MODE} mode;
-       int pri;
-  
-
-       int procids[0x100+1];
-
-       msg_queue_t downqueue;
-       int busy;
-  
-       int port;
-       struct misdn_bchannel bc[MAX_BCHANS + 1];
-  
-       struct misdn_bchannel* bc_list; 
-  
-       int channels[MAX_BCHANS + 1];
-
-  
-  
-       int te_choose_channel;
-  
-
-       struct misdn_bchannel *holding; /* Queue which holds holded channels :) */
-  
-       struct misdn_stack *next;
-}; 
-
-struct misdn_stack* get_misdn_stack( void );
 
 enum event_response_e (*cb_event) (enum event_e event, struct misdn_bchannel *bc, void *user_data);
 void (*cb_log) (int level, int port, char *tmpl, ...);
 int (*cb_clearl3_true)(void);
+int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
 
 struct misdn_lib_iface {
        
        enum event_response_e (*cb_event)(enum event_e event, struct misdn_bchannel *bc, void *user_data);
        void (*cb_log)(int level, int port, char *tmpl, ...);
+       int (*cb_jb_empty)(struct misdn_bchannel *bc, char *buffer, int len);
        int (*cb_clearl3_true)(void);
 };
 
@@ -377,7 +331,9 @@ struct misdn_bchannel* misdn_lib_get_free_bc(int port, int channel);
 
 void manager_bchannel_activate(struct misdn_bchannel *bc);
 void manager_bchannel_deactivate(struct misdn_bchannel * bc);
-int manager_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len);
+
+int misdn_lib_tx2misdn_frm(struct misdn_bchannel *bc, void *data, int len);
+
 void manager_send_tone (struct misdn_bchannel *bc, enum tone_e tone);
 
 void manager_ph_control(struct misdn_bchannel *bc, int c1, int c2);
@@ -400,35 +356,33 @@ int misdn_inband_avail(struct misdn_bchannel *bc);
 int misdn_lib_send_facility(struct misdn_bchannel *bc, enum facility_type fac, void *data);
 
 
-struct isdn_msg {
-       unsigned long misdn_msg;
-  
-       enum layer_e layer;
-       enum event_e event;
-  
-       void (*msg_parser)(struct isdn_msg *msgs, msg_t *msg, struct misdn_bchannel *bc, int nt);
-       msg_t *(*msg_builder)(struct isdn_msg *msgs, struct misdn_bchannel *bc, int nt);
-       void (*msg_printer)(struct isdn_msg *msgs);
-  
-       char *info;
-  
-} ; 
-
-
+void manager_ec_enable(struct misdn_bchannel *bc);
+void manager_ec_disable(struct misdn_bchannel *bc);
 
 
+void get_show_stack_details(int port, char *buf);
 
 
+/** Ibuf interface **/
+int misdn_ibuf_usedcount(void *buf);
+int misdn_ibuf_freecount(void *buf);
+void misdn_ibuf_memcpy_r(char *to, void *from, int len);
+void misdn_ibuf_memcpy_w(void *buf, char *from, int len);
 
+void misdn_free_ibuffer(void *ibuf);
+void misdn_clear_ibuffer(void *ibuf);
+void *misdn_init_ibuffer(int len);
 
-void manager_ec_enable(struct misdn_bchannel *bc);
-void manager_ec_disable(struct misdn_bchannel *bc);
+/** Ibuf interface End **/
 
+void misdn_lib_setup_bc(struct misdn_bchannel *bc);
 
-/* for isdn_msg_parser.c */
-msg_t *create_l3msg(int prim, int mt, int dinfo , int size, int nt);
+void misdn_lib_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
+void misdn_lib_split_bridge( struct misdn_bchannel * bc1, struct misdn_bchannel *bc2);
 
+unsigned char * flip_buf_bits ( unsigned char * buf , int len);
 
+int misdn_lib_is_ptp(int port);
 
 #define PRI_TRANS_CAP_SPEECH                                    0x0
 #define PRI_TRANS_CAP_DIGITAL                                   0x08