00001 #ifndef ISDN_LIB_INTERN
00002 #define ISDN_LIB_INTERN
00003
00004
00005 #include <mISDNuser/mISDNlib.h>
00006 #include <mISDNuser/isdn_net.h>
00007 #include <mISDNuser/l3dss1.h>
00008 #include <mISDNuser/net_l3.h>
00009
00010 #include <pthread.h>
00011
00012 #include "isdn_lib.h"
00013
00014 #ifndef MISDNUSER_VERSION_CODE
00015 #error "You need a newer version of mISDNuser ..."
00016 #elif MISDNUSER_VERSION_CODE < MISDNUSER_VERSION(1, 0, 3)
00017 #error "You need a newer version of mISDNuser ..."
00018 #endif
00019
00020
00021 #define QI_ELEMENT(a) a.off
00022
00023
00024 #ifndef mISDNUSER_HEAD_SIZE
00025
00026 #define mISDNUSER_HEAD_SIZE (sizeof(mISDNuser_head_t))
00027
00028 #endif
00029
00030
00031 #if 0
00032 ibuffer_t *astbuf;
00033 ibuffer_t *misdnbuf;
00034 #endif
00035
00036 struct send_lock {
00037 pthread_mutex_t lock;
00038 };
00039
00040
00041 struct isdn_msg {
00042 unsigned long misdn_msg;
00043
00044 enum event_e event;
00045
00046 void (*msg_parser)(struct isdn_msg *msgs, msg_t *msg, struct misdn_bchannel *bc, int nt);
00047 msg_t *(*msg_builder)(struct isdn_msg *msgs, struct misdn_bchannel *bc, int nt);
00048 char *info;
00049 } ;
00050
00051
00052 msg_t *create_l3msg(int prim, int mt, int dinfo , int size, int nt);
00053
00054 #if defined(AST_MISDN_ENHANCEMENTS)
00055
00056 #define MISDN_MAX_REGISTER_LINKS MAX_BCHANS
00057 #else
00058
00059 #define MISDN_MAX_REGISTER_LINKS 0
00060 #endif
00061
00062 #define MAXPROCS 0x100
00063
00064 struct misdn_stack {
00065
00066 net_stack_t nst;
00067 manager_t mgr;
00068 pthread_mutex_t nstlock;
00069
00070
00071 pthread_mutex_t st_lock;
00072
00073
00074 int d_stid;
00075
00076
00077 int b_num;
00078
00079
00080 int b_stids[MAX_BCHANS + 1];
00081
00082
00083 int ptp;
00084
00085
00086 int l2upcnt;
00087
00088 int l2_id;
00089
00090
00091 int lower_id;
00092
00093
00094 int upper_id;
00095
00096
00097 int blocked;
00098
00099
00100 int l2link;
00101
00102
00103 int l1link;
00104
00105
00106 int restart_sent;
00107
00108
00109 int midev;
00110
00111
00112 int nt;
00113
00114
00115 int pri;
00116
00117
00118 int procids[MAXPROCS];
00119
00120
00121 msg_queue_t downqueue;
00122 msg_queue_t upqueue;
00123 int busy;
00124
00125
00126 int port;
00127
00128
00129
00130
00131
00132 struct misdn_bchannel bc[MAX_BCHANS + 1 + MISDN_MAX_REGISTER_LINKS];
00133
00134
00135
00136
00137
00138 char channels[MAX_BCHANS + 1 + MISDN_MAX_REGISTER_LINKS];
00139
00140
00141 struct misdn_bchannel *holding;
00142
00143
00144 struct misdn_stack *next;
00145 };
00146
00147
00148 struct misdn_stack* get_stack_by_bc(struct misdn_bchannel *bc);
00149
00150 int isdn_msg_get_index(struct isdn_msg msgs[], msg_t *frm, int nt);
00151 enum event_e isdn_msg_get_event(struct isdn_msg msgs[], msg_t *frm, int nt);
00152 int isdn_msg_parse_event(struct isdn_msg msgs[], msg_t *frm, struct misdn_bchannel *bc, int nt);
00153 char * isdn_get_info(struct isdn_msg msgs[], enum event_e event, int nt);
00154 msg_t * isdn_msg_build_event(struct isdn_msg msgs[], struct misdn_bchannel *bc, enum event_e event, int nt);
00155 int isdn_msg_get_index_by_event(struct isdn_msg msgs[], enum event_e event, int nt);
00156 char * isdn_msg_get_info(struct isdn_msg msgs[], msg_t *msg, int nt);
00157
00158
00159 #endif