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 #if !defined MISDNUSER_VERSION_CODE || (MISDNUSER_VERSION_CODE < MISDNUSER_VERSION(1, 0, 3))
00015 #error "You need a newer version of mISDNuser ..."
00016 #endif
00017
00018
00019 #define QI_ELEMENT(a) a.off
00020
00021
00022 #ifndef mISDNUSER_HEAD_SIZE
00023
00024 #define mISDNUSER_HEAD_SIZE (sizeof(mISDNuser_head_t))
00025
00026 #endif
00027
00028
00029 ibuffer_t *astbuf;
00030 ibuffer_t *misdnbuf;
00031
00032 struct send_lock {
00033 pthread_mutex_t lock;
00034 };
00035
00036
00037 struct isdn_msg {
00038 unsigned long misdn_msg;
00039
00040 enum layer_e layer;
00041 enum event_e event;
00042
00043 void (*msg_parser)(struct isdn_msg *msgs, msg_t *msg, struct misdn_bchannel *bc, int nt);
00044 msg_t *(*msg_builder)(struct isdn_msg *msgs, struct misdn_bchannel *bc, int nt);
00045 char *info;
00046
00047 } ;
00048
00049
00050 msg_t *create_l3msg(int prim, int mt, int dinfo , int size, int nt);
00051
00052
00053
00054 struct misdn_stack {
00055
00056 net_stack_t nst;
00057 manager_t mgr;
00058
00059 int d_stid;
00060
00061 int b_num;
00062
00063 int b_stids[MAX_BCHANS + 1];
00064
00065 int ptp;
00066
00067 int l2upcnt;
00068
00069 int l2_id;
00070 int lower_id;
00071 int upper_id;
00072
00073
00074 int blocked;
00075
00076 int l2link;
00077
00078 time_t l2establish;
00079
00080 int l1link;
00081 int midev;
00082
00083 int nt;
00084
00085 int pri;
00086
00087
00088 int procids[0x100+1];
00089
00090 msg_queue_t downqueue;
00091 msg_queue_t upqueue;
00092 int busy;
00093
00094 int port;
00095 struct misdn_bchannel bc[MAX_BCHANS + 1];
00096
00097 struct misdn_bchannel* bc_list;
00098
00099 int channels[MAX_BCHANS + 1];
00100
00101
00102 struct misdn_bchannel *holding;
00103
00104 struct misdn_stack *next;
00105 };
00106
00107
00108 struct misdn_stack* get_stack_by_bc(struct misdn_bchannel *bc);
00109
00110 int isdn_msg_get_index(struct isdn_msg msgs[], msg_t *frm, int nt);
00111 enum event_e isdn_msg_get_event(struct isdn_msg msgs[], msg_t *frm, int nt);
00112 int isdn_msg_parse_event(struct isdn_msg msgs[], msg_t *frm, struct misdn_bchannel *bc, int nt);
00113 char * isdn_get_info(struct isdn_msg msgs[], enum event_e event, int nt);
00114 msg_t * isdn_msg_build_event(struct isdn_msg msgs[], struct misdn_bchannel *bc, enum event_e event, int nt);
00115 int isdn_msg_get_index_by_event(struct isdn_msg msgs[], enum event_e event, int nt);
00116 char * isdn_msg_get_info(struct isdn_msg msgs[], msg_t *msg, int nt);
00117
00118
00119 #endif