source: trunk/globals.h @ 5375

Last change on this file since 5375 was 5373, checked in by _network, 8 years ago

correct some declarations

File size: 36.5 KB
Line 
1#define _GNU_SOURCE //needed for PTHREAD_MUTEX_RECURSIVE on some plattforms and maybe other things; do not remove
2#include <stdlib.h>
3#include <stdio.h>
4#include <assert.h>
5#include <fcntl.h>
6#include <sys/ioctl.h>
7#include <sys/poll.h>
8#include <ctype.h>
9#include <sys/types.h>
10#include <sys/stat.h>
11#include <sys/shm.h>
12#include <sys/wait.h>
13#include <unistd.h>
14#include <sys/mman.h>
15#include <stdarg.h>
16#include <time.h>
17#include <sys/timeb.h>
18#include <limits.h>
19#include <pwd.h>
20#include <netinet/tcp.h>
21#include <sys/socket.h>
22#include <netinet/in.h>
23#include <arpa/inet.h>
24#include <netdb.h>
25#include <string.h>
26#include <signal.h>
27#include <errno.h>
28#include <pthread.h>
29
30#include "module-datastruct-llist.h"
31
32//for reader-nagra variables in s_reader:
33#include "cscrypt/idea.h"
34
35#include "oscam-config.h"
36
37#ifndef USE_CMAKE
38#  include "oscam-ostype.h"
39#endif
40#include "oscam-types.h"
41#include "cscrypt/cscrypt.h"
42
43#ifdef HAVE_PCSC
44  #ifdef OS_CYGWIN32
45    #define __reserved
46    #define __nullnullterminated
47    #include <specstrings.h>
48    #include "cygwin/WinSCard.h"
49  #else
50    #include <PCSC/pcsclite.h>
51    #ifdef OS_MACOSX
52        #include <PCSC/wintypes.h>
53    #else
54        #include <PCSC/reader.h>
55    #endif
56  #endif
57#endif
58
59#if defined(LIBUSB)
60#ifdef __FreeBSD__
61#include <libusb.h>
62#else
63#include <libusb-1.0/libusb.h>
64#endif
65#include "csctapi/smartreader_types.h"
66#endif
67
68/* ===========================
69 *         macros
70 * =========================== */
71// Prevent use of unsafe functions (doesn't work for MacOSX)
72#ifndef OS_MACOSX
73#define strcpy(a,b) UNSAFE_STRCPY_USE_CS_STRNCPY_INSTEAD()
74#define sprintf(a,...) UNSAFE_SPRINTF_USE_SNPRINTF_INSTEAD()
75#define strtok(a,b,c) UNSAFE_STRTOK_USE_STRTOK_R_INSTEAD()
76#endif
77
78#ifdef UNUSED
79#elif defined(__GNUC__)
80# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
81#elif defined(__LCLINT__)
82# define UNUSED(x) /*@unused@*/ x
83#else
84# define UNUSED(x) x
85#endif
86
87#ifdef WITH_DEBUG
88# define call(arg) \
89    if (arg) { \
90        cs_debug_mask(D_TRACE, "ERROR, function call %s returns error.",#arg); \
91    }
92# define D_USE(x) x
93#else
94# define call(arg) arg
95# if defined(__GNUC__)
96#  define D_USE(x) D_USE_ ## x __attribute__((unused))
97# elif defined(__LCLINT__)
98#  define D_USE(x) /*@debug use only@*/ x
99# else
100#  define D_USE(x) x
101# endif
102#endif
103
104//checking if (X) free(X) unneccessary since freeing a null pointer doesnt do anything
105#define NULLFREE(X) {if (X) {void *tmpX=X; X=NULL; free(tmpX); }}
106
107/* ===========================
108 *         constants
109 * =========================== */
110#ifndef CS_GLOBALS
111#define CS_GLOBALS
112#define CS_VERSION    "1.00-unstable_svn"
113#ifndef CS_SVN_VERSION
114#   define CS_SVN_VERSION "test"
115#endif
116#ifndef CS_CONFDIR
117#define CS_CONFDIR    "/usr/local/etc"
118#endif
119#ifndef CS_LOGFILE
120#define CS_LOGFILE    "/var/log/oscam.log"
121#endif
122#define CS_QLEN       128 // size of request queue
123#define CS_MAXCAIDTAB 32  // max. caid-defs/user
124#define CS_MAXTUNTAB  20  // max. betatunnel mappings
125#define CS_MAXPROV    32
126#define CS_MAXPORTS   32  // max server ports
127#define CS_MAXFILTERS   16
128#define CS_MAX_CAIDVALUETAB 16
129
130#define CS_ECMSTORESIZE   16  // use MD5()
131#define CS_EMMSTORESIZE   16  // use MD5()
132#define CS_CLIENT_TIMEOUT 5000
133#define CS_CLIENT_MAXIDLE 120
134#define CS_BIND_TIMEOUT   120
135#define CS_DELAY          0
136#define CS_ECM_RINGBUFFER_MAX 20 // max size for ECM last responsetimes ringbuffer
137
138#define CS_CACHE_TIMEOUT  60
139#ifndef PTHREAD_STACK_MIN
140#define PTHREAD_STACK_MIN 64000
141#endif
142#define PTHREAD_STACK_SIZE PTHREAD_STACK_MIN+32768
143
144#ifdef  CS_EMBEDDED
145#define CS_MAXPENDING   16
146#else
147#define CS_MAXPENDING   32
148#endif
149
150#define CS_EMMCACHESIZE  64 //nr of EMMs that each client will cache; cache is per client, so memory-expensive...
151#define MSGLOGSIZE 64   //size of string buffer for a ecm to return messages
152
153#define D_TRACE     1 // Generate very detailed error/trace messages per routine
154#define D_ATR       2 // Debug ATR parsing, dump of ecm, cw
155#define D_READER    4 // Debug Reader/Proxy Process
156#define D_CLIENT    8 // Debug Client Process
157#define D_IFD       16  // Debug IFD+protocol
158#define D_DEVICE    32  // Debug Reader I/O
159#define D_EMM               64  // Dumps EMM
160#define D_DVBAPI        128 // Debug DVBAPI
161#define D_ALL_DUMP  255 // dumps all
162
163#define R_DB2COM1   0x1 // Reader Dbox2 @ com1
164#define R_DB2COM2   0x2 // Reader Dbox2 @ com1
165#define R_SC8in1    0x3 // Reader Sc8in1 or MCR
166#define R_MP35      0x4 // AD-Teknik Multiprogrammer 3.5 and 3.6 (only usb tested)
167#define R_MOUSE     0x5 // Reader smartcard mouse
168/////////////////// phoenix readers which need baudrate setting and timings need to be guarded by OSCam: BEFORE R_MOUSE
169#define R_INTERNAL  0x6 // Reader smartcard intern
170/////////////////// internal readers (Dreambox, Coolstream, IPBox) are all R_INTERNAL, they are determined compile-time
171/////////////////// readers that do not reed baudrate setting and timings are guarded by reader itself (large buffer built in): AFTER R_SMART
172#define R_SMART     0x7 // Smartreader+
173#define R_PCSC      0x8 // PCSC
174/////////////////// proxy readers after R_CS378X
175#define R_CAMD35    0x20  // Reader cascading camd 3.5x
176#define R_CAMD33    0x21  // Reader cascading camd 3.3x
177#define R_NEWCAMD   0x22  // Reader cascading newcamd
178#define R_RADEGAST  0x23  // Reader cascading radegast
179#define R_CS378X    0x24  // Reader cascading camd 3.5x TCP
180#define R_CONSTCW   0x25  // Reader for Constant CW
181/////////////////// peer to peer proxy readers after R_CCCAM
182#define R_GBOX      0x30  // Reader cascading gbox
183#define R_CCCAM     0x35  // Reader cascading cccam
184#define R_SERIAL    0x80  // Reader serial
185#define R_IS_NETWORK    0x60
186#define R_IS_CASCADING  0xE0
187
188//ECM rc codes, reader only:
189#define E_RDR_NOTFOUND          0
190#define E_RDR_FOUND             1
191//ECM rc codes:
192#define E_FOUND         0
193#define E_CACHE1        1
194#define E_CACHE2        2
195#define E_EMU               3
196///////above is all found
197#define E_NOTFOUND  4  //for selection of found, use < E_NOTFOUND
198#define E_TIMEOUT       5
199#define E_SLEEPING  6
200#define E_FAKE          7
201#define E_INVALID       8
202#define E_CORRUPT       9
203#define E_NOCARD        10
204#define E_EXPDATE       11
205#define E_DISABLED  12
206#define E_STOPPED       13 //for selection of error, use <= E_STOPPED and exclude selection of found
207///////above is all notfound, some error or problem
208#define E_99                99 //this code is undocumented
209#define E_UNHANDLED 100 //for selection of unhandled, use >= E_UNHANDLED
210
211#define CS_MAX_MOD 20
212#define MOD_CONN_TCP    1
213#define MOD_CONN_UDP    2
214#define MOD_CONN_NET    3
215#define MOD_CONN_SERIAL 4
216#define MOD_NO_CONN 8
217
218#define MOD_CARDSYSTEM  16
219#define MOD_ADDON       32
220
221#ifdef HAVE_DVBAPI
222#define BOXTYPE_DREAMBOX    1
223#define BOXTYPE_DUCKBOX 2
224#define BOXTYPE_UFS910  3
225#define BOXTYPE_DBOX2   4
226#define BOXTYPE_IPBOX   5
227#define BOXTYPE_IPBOX_PMT   6
228#define BOXTYPE_DM7000  7
229#define BOXTYPE_QBOXHD  8
230#define BOXTYPE_COOLSTREAM  9
231#define BOXTYPE_NEUMO   10
232#define BOXTYPES        10
233extern const char *boxdesc[];
234#endif
235
236#define EMM_UNIQUE 1
237#define EMM_SHARED 2
238#define EMM_GLOBAL 4
239#define EMM_UNKNOWN 8
240
241//EMM types:
242#define UNKNOWN 0
243#define UNIQUE  1
244#define SHARED  2
245#define GLOBAL  3
246
247#ifdef CS_CORE
248char *PIP_ID_TXT[] = { "ECM", "EMM", "CIN", "KCL", "UDP", NULL  };
249char *RDR_CD_TXT[] = { "cd", "dsr", "cts", "ring", "none",
250#ifdef USE_GPIO
251                       "gpio1", "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7", //felix: changed so that gpio can be used
252#endif
253                       NULL };
254#else
255extern char *PIP_ID_TXT[];
256extern char *RDR_CD_TXT[];
257#endif
258
259#define PIP_ID_ECM    0
260#define PIP_ID_EMM    1
261#define PIP_ID_CIN    2  // CARD_INFO
262#define PIP_ID_KCL    3  // Schlocke: Kill all Clients (no param)
263#define PIP_ID_UDP    4
264#define PIP_ID_MAX    PIP_ID_UDP
265#define PIP_ID_ERR    (-1)
266#define PIP_ID_DIR    (-2)
267#define PIP_ID_NUL    (-3)
268
269#define cdiff *c_start
270
271#define NCD_AUTO    0
272#define NCD_524     1
273#define NCD_525     2
274
275// moved from reader-common.h
276#define UNKNOWN        0
277#define CARD_NEED_INIT 1
278#define CARD_INSERTED  2
279#define CARD_FAILURE   3
280#define NO_CARD        4
281
282// moved from stats
283#define DEFAULT_REOPEN_SECONDS 900
284#define DEFAULT_MIN_ECM_COUNT 5
285#define DEFAULT_MAX_ECM_COUNT 500
286#define DEFAULT_NBEST 1
287#define DEFAULT_NFB 1
288#define DEFAULT_RETRYLIMIT 800
289#define DEFAULT_LB_MODE 0
290#define DEFAULT_LB_STAT_CLEANUP 336
291#define DEFAULT_LB_USE_LOCKING 0
292#define DEFAULT_LB_REOPEN_MODE 0
293#define DEFAULT_UPDATEINTERVAL 240
294#define DEFAULT_LB_AUTO_BETATUNNEL 1
295
296enum {E1_GLOBAL=0, E1_USER, E1_READER, E1_SERVER, E1_LSERVER};
297enum {E2_GLOBAL=0, E2_GROUP, E2_CAID, E2_IDENT, E2_CLASS, E2_CHID, E2_QUEUE,
298      E2_EA_LEN, E2_F0_LEN, E2_OFFLINE, E2_SID,
299      E2_CCCAM_NOCARD=0x27, E2_CCCAM_NOK1=0x28, E2_CCCAM_NOK2=0x29, E2_CCCAM_LOOP=0x30};
300
301#define CTA_RES_LEN 512
302
303#ifdef CS_LED
304#define  LED1A      0
305#define  LED1B      1
306#define  LED2       2
307#define  LED3       3
308#define  LED_OFF    0
309#define  LED_ON     1
310#define  LED_BLINK_ON   2
311#define  LED_BLINK_OFF  3
312#define  LED_DEFAULT    10
313extern void cs_switch_led(int32_t led, int32_t action);
314#endif
315
316#ifdef QBOXHD_LED
317#define QBOXHD_LED_DEVICE               "/dev/sw0"
318#define QBOXHD_SET_LED_ALL_PANEL_COLOR  _IO(0xBC, 13)    // payload = 3byte [H][S][V]
319#define QBOXHD_LED_COLOR_RED        359  // only H value, S and V values are always == 99
320#define QBOXHD_LED_COLOR_GREEN      120
321#define QBOXHD_LED_COLOR_BLUE       230
322#define QBOXHD_LED_COLOR_YELLOW     55
323#define QBOXHD_LED_COLOR_MAGENTA    290
324
325#define QBOXHDMINI_LED_DEVICE       "/dev/lpc_0"
326#define QBOXHDMINI_IOSET_RGB        _IOWR('L', 6, qboxhdmini_led_color_struct)
327#define QBOXHDMINI_LED_COLOR_RED     0x1F0000               // 3 bytes RGB , 5 bit used for each color
328#define QBOXHDMINI_LED_COLOR_GREEN   0x001F00
329#define QBOXHDMINI_LED_COLOR_BLUE    0x00001F
330#define QBOXHDMINI_LED_COLOR_YELLOW  0x1F1F00
331#define QBOXHDMINI_LED_COLOR_MAGENTA 0x1F001F
332
333#define QBOXHD_LED_COLOR_OFF        -1   // all colors H,S,V and/or R,G,B == 0,0,0
334
335#define QBOXHD_LED_BLINK_FAST       100  // blink milliseconds
336#define QBOXHD_LED_BLINK_MEDIUM     200
337#define QBOXHD_LED_BLINK_SLOW       400
338
339#endif //QBOXHD_LED
340
341#define MAX_ATR_LEN 33         // max. ATR length
342#define MAX_HIST    15         // max. number of historical characters
343
344#define MAX_SIDBITS 64         // max services
345#define SIDTABBITS uint64_t      // 64bit type for services, if a system does not support this type,
346                               // please use a define and define it as uint32_t / MAX_SIDBITS 32
347
348#define BAN_UNKNOWN 1           //failban mask for anonymous/ unknown contact
349#define BAN_DISABLED 2          //failban mask for disabled user
350#define BAN_SLEEPING 4          //failban mask for sleeping user
351#define BAN_DUPLICATE 8         //failban mask for duplicate user
352
353#define AVAIL_CHECK_CONNECTED 0
354#define AVAIL_CHECK_LOADBALANCE 1
355
356#define LB_MAX_STAT_TIME 10
357
358/* ===========================
359 *      global structures
360 * =========================== */
361typedef struct s_caidvaluetab
362{
363  uint16_t n;
364  uint16_t caid[CS_MAX_CAIDVALUETAB];
365  uint16_t value[CS_MAX_CAIDVALUETAB];
366} CAIDVALUETAB;
367
368typedef struct s_classtab
369{
370  uchar an;
371  uchar bn;
372  uchar aclass[31];
373  uchar bclass[31];
374} CLASSTAB;
375
376typedef struct s_caidtab
377{
378  uint16_t caid[CS_MAXCAIDTAB];
379  uint16_t mask[CS_MAXCAIDTAB];
380  uint16_t cmap[CS_MAXCAIDTAB];
381} CAIDTAB;
382
383typedef struct s_tuntab
384{
385  uint16_t n;
386  uint16_t bt_caidfrom[CS_MAXTUNTAB];
387  uint16_t bt_caidto[CS_MAXTUNTAB];
388  uint16_t bt_srvid[CS_MAXTUNTAB];
389} TUNTAB;
390
391typedef struct s_sidtab
392{
393  char     label[64];
394  uint16_t   num_caid;
395  uint16_t   num_provid;
396  uint16_t   num_srvid;
397  uint16_t   *caid;
398  uint32_t   *provid;
399  uint16_t   *srvid;
400  struct   s_sidtab *next;
401} SIDTAB;
402
403
404typedef struct s_filter
405{
406  uint16_t caid;
407  uchar  nprids;
408  uint32_t  prids[CS_MAXPROV];
409} FILTER;
410
411typedef struct s_ftab
412{
413  int32_t    nfilts;
414  FILTER filts[CS_MAXFILTERS];
415} FTAB;
416
417typedef struct s_port
418{
419  int32_t    fd;
420  int32_t    s_port;
421  int32_t    ncd_key_is_set;    //0 or 1
422  uchar  ncd_key[16];
423  FTAB   ftab;
424} PORT;
425
426typedef struct s_ptab
427{
428  int32_t    nports;
429  PORT   ports[CS_MAXPORTS];
430} PTAB;
431
432typedef struct aes_entry {
433    uint16_t      keyid;
434    uint16_t      caid;
435    uint32_t      ident;
436    uchar       plainkey[16];
437    AES_KEY     key;
438    struct aes_entry   *next;
439} AES_ENTRY;
440
441struct s_ecm
442{
443  uchar     ecmd5[CS_ECMSTORESIZE];
444  uchar     cw[16];
445  uint16_t  caid;
446  uint64_t      grp;
447  struct s_reader *reader;
448  int32_t  rc;
449  time_t time;
450};
451
452struct s_emm
453{
454  uchar emmd5[CS_EMMSTORESIZE];
455  uchar type;
456  int32_t   count;
457};
458
459// failban listmember
460typedef struct v_ban {
461    int32_t v_count;
462    uint32_t v_ip;
463    time_t v_time;
464} V_BAN;
465
466struct s_client ;
467struct ecm_request_t ;
468struct emm_packet_t ;
469
470struct s_module
471{
472  int8_t  active;
473  int8_t  multi;
474  int8_t  type;
475  int8_t  watchdog;
476  char desc[16];
477  char *logtxt;
478  //int32_t  s_port;
479  in_addr_t s_ip;
480  void *(*s_handler)();
481  int32_t  (*recv)(struct s_client *, uchar *, int32_t);
482  void (*send_dcw)(struct s_client*, struct ecm_request_t *);
483  void (*cleanup)(struct s_client*);
484  int8_t  c_multi;
485  int32_t  (*c_recv_chk)(struct s_client*, uchar *, int32_t *, uchar *, int32_t);
486  int32_t  (*c_init)(struct s_client*);
487  int32_t  (*c_send_ecm)(struct s_client *, struct ecm_request_t *, uchar *);
488  int32_t  (*c_send_emm)(struct emm_packet_t *);
489  int32_t  (*c_init_log)(void);
490  int32_t  (*c_recv_log)(uint16_t *, uint32_t *, uint16_t *);
491  int32_t  (*c_available)(struct s_reader *, int32_t);  //Schlocke: available check for load-balancing,
492                         //params:
493                         //rdr (reader to check)
494                         //int32_t checktype (0=return connected, 1=return loadbalance-avail) return int
495  void (*c_idle)(void);      //Schlocke: called when reader is idle
496  void (*c_card_info)(void); //Schlocke: request card infos
497  int32_t  c_port;
498  PTAB *ptab;
499  int32_t num;
500};
501
502struct s_ATR ;
503
504struct s_cardreader
505{
506    int8_t  active;
507    char    desc[16];
508    int32_t (*reader_init)(struct s_reader*);
509    int32_t (*get_status)(struct s_reader*, int*);
510    int32_t (*activate)(struct s_reader*, struct s_ATR *);
511    int32_t (*transmit)(struct s_reader*, unsigned char *sent, uint32_t size);
512    int32_t (*receive)(struct s_reader*, unsigned char *data, uint32_t size);
513    int32_t (*close)(struct s_reader*);
514    int32_t (*set_parity)(struct s_reader*, uchar parity);
515    int32_t (*write_settings)(struct s_reader*, uint32_t ETU, uint32_t EGT, unsigned char P, unsigned char I, uint16_t Fi, unsigned char Di, unsigned char Ni);
516    int32_t (*set_protocol)(struct s_reader*, unsigned char * params, uint32_t *length, uint32_t len_request);
517    int32_t (*set_baudrate)(struct s_reader*, uint32_t baud); //set only for readers which need baudrate setting and timings need to be guarded by OSCam
518    int32_t typ; //fixme: workaround, remove when all old code is converted
519
520    int8_t  max_clock_speed; // 1 for reader->typ > R_MOUSE
521    int8_t  need_inverse; //0 = reader does inversing; 1 = inversing done by oscam
522    //io_serial config
523    int8_t  flush;
524    int8_t  read_written; // 1 = written bytes has to read from device
525};
526
527struct s_cardsystem
528{
529    int8_t active;
530    char *desc;
531    int32_t  (*card_init)();
532    int32_t  (*card_info)();
533    int32_t  (*do_ecm)();
534    int32_t  (*do_emm)();
535    void (*post_process)();
536    int32_t  (*get_emm_type)();
537    void (*get_emm_filter)();
538    uchar caids[2];
539};
540
541#ifdef IRDETO_GUESSING
542struct s_irdeto_quess
543{
544  int32_t    b47;
545  uint16_t caid;
546  uint16_t sid;
547  struct s_irdeto_quess *next;
548};
549#endif
550
551typedef struct ecm_request_t
552{
553  uchar         ecm[256];
554  uchar         cw[16];
555  uchar         ecmd5[CS_ECMSTORESIZE];
556  int16_t         l;
557  uint16_t        caid;
558  uint16_t        ocaid; //original caid, used for betatunneling
559  uint16_t        srvid;
560  uint16_t        chid;
561  uint16_t        pid;
562  uint16_t        idx;
563  uint32_t         prid;
564  struct s_reader *selected_reader;
565  LLIST         *matching_rdr; //list of matching readers
566  LL_NODE       *fallback; // in *matching_rdr, at position "fallback" the first fallback reader is in the list
567  struct s_client *client; //contains pointer to 'c' client while running in 'r' client
568  int32_t           cpti;   // client pending table index
569  int32_t           stage;    // processing stage in server module
570  int32_t           level;    // send-level in client module
571  int32_t           rc;
572  uchar         rcEx;
573  struct timeb  tps;    // incoming time stamp
574  uchar         locals_done;
575  int32_t       btun; // mark er as betatunneled
576  int32_t       reader_avail; //count of available readers
577  int32_t           reader_count; //count of contacted readers
578#ifdef CS_WITH_DOUBLECHECK
579  int32_t       checked;
580  uchar     cw_checked[16];
581#endif
582
583#ifdef MODULE_CCCAM
584  struct s_reader *origin_reader;
585  void * origin_card; //CCcam preferred card!
586#endif
587
588  void *src_data;
589
590  struct s_ecm *ecmcacheptr; //Pointer to ecm-cw-rc-cache!
591
592  char msglog[MSGLOGSIZE];
593} ECM_REQUEST;
594
595#ifdef CS_ANTICASC
596struct s_acasc_shm {
597  uint16_t ac_count : 15;
598  uint16_t ac_deny  : 1;
599};
600
601struct s_acasc {
602  uint16_t stat[10];
603  uchar  idx;    // current active index in stat[]
604};
605#endif
606
607struct s_client
608{
609  in_addr_t ip;
610  in_port_t port;
611  time_t    login;
612  time_t    last;
613  time_t    lastswitch;
614  time_t    lastemm;
615  time_t    lastecm;
616  time_t    expirationdate;
617  int32_t       allowedtimeframe[2];
618  int8_t        c35_suppresscmd08;
619  uint8_t       c35_sleepsend;
620  int8_t        ncd_keepalive;
621  int8_t        disabled;
622  uint64_t  grp;
623  int8_t        crypted;
624  int8_t        dup;
625  LLIST *aureader_list;
626  int8_t        autoau;
627  int8_t        monlvl;
628  CAIDTAB   ctab;
629  TUNTAB    ttab;
630  SIDTABBITS    sidtabok; // positiv services
631  SIDTABBITS    sidtabno; // negative services
632  int32_t       typ;        // first s_client is type s=starting (master) thread; type r = physical reader, type p = proxy reader both always have 1 s_reader struct allocated; type c = client (user logging in into oscam) type m = monitor type h = http server a = anticascader
633  int32_t       ctyp;
634  int32_t       stat;
635  int32_t       last_srvid;
636  int32_t       last_caid;
637  struct s_srvid *last_srvidptr;
638  int32_t       tosleep;
639  struct s_auth *account;
640  int32_t       udp_fd;
641  int32_t       fd_m2c; //master writes to this fd
642  int32_t       fd_m2c_c; //client reads from this fd
643  struct    sockaddr_in udp_sa;
644  int32_t       log;
645  int32_t       logcounter;
646  int32_t       cwfound;     // count found ECMs per client
647  int32_t       cwcache;     // count ECMs from cache1/2 per client
648  int32_t       cwnot;       // count not found ECMs per client
649  int32_t       cwtun;       // count betatunneled ECMs per client
650  int32_t       cwignored;   // count ignored  ECMs per client
651  int32_t       cwtout;      // count timeouted ECMs per client
652  int32_t       cwlastresptime; //last Responsetime (ms)
653  int32_t       cwlastresptimes[CS_ECM_RINGBUFFER_MAX]; //ringbuffer for last 20 times
654  int32_t       cwlastresptimes_last; // ringbuffer pointer
655  int32_t       emmok;       // count EMM ok
656  int32_t       emmnok;      // count EMM nok
657  int32_t       pending;     // number of ECMs pending
658#ifdef WEBIF
659  int8_t        wihidden;   // hidden in webinterface status
660  char      lastreader[64]; // last cw got from this reader
661#endif
662  uchar     ucrc[4];    // needed by monitor and used by camd35
663  uint32_t      pcrc;        // pwd crc
664  AES_KEY   aeskey;      // encryption key needed by monitor and used by camd33, camd35
665  AES_KEY   aeskey_decrypt;      // decryption key needed by monitor and used by camd33, camd35
666  uint16_t  ncd_msgid;
667  char      ncd_client_id[5];
668  uchar     ncd_skey[16];
669
670#ifdef MODULE_CCCAM
671  void      *cc;
672#endif
673#ifdef MODULE_GBOX
674  void      *gbox;
675#endif
676  int32_t       port_idx;    // index in server ptab
677  int32_t       ncd_server;  // newcamd server
678#ifdef CS_ANTICASC
679  uint16_t  ac_limit;
680  struct    s_acasc_shm acasc;
681#endif
682  FTAB      fchid;
683  FTAB      ftab;        // user [caid] and ident filter
684  CLASSTAB  cltab;
685
686
687  int32_t pfd;      // Primary FD, must be closed on exit
688  struct s_reader *reader; //points to s_reader when cl->typ='r'
689
690  ECM_REQUEST *ecmtask;
691  struct s_emm *emmcache;
692
693  pthread_t thread;
694  pthread_mutex_t **mutexstore;
695  uint16_t mutexstore_alloc;
696  uint16_t mutexstore_used;
697#ifdef WITH_MUTEXDEBUG
698    char **mutexstore_file;
699    uint16_t *mutexstore_line;
700#endif
701
702  struct s_serial_client *serialdata;
703
704  //reader common
705  int32_t last_idx;
706  uint16_t idx;
707  int32_t rotate;
708
709  uchar *req;
710
711  int32_t       ncd_proto;
712
713  //camd35
714  uchar upwd[64];
715  int8_t is_udp;
716  int8_t stopped;
717  int32_t lastcaid;
718  int32_t lastsrvid;
719  int32_t lastpid;
720  time_t emm_last;
721  int8_t disable_counter;
722  uchar lastserial[8];
723
724  //monitor
725  int32_t auth;
726
727  //cs_hexdump buffer
728  uchar dump[520];
729
730  //oscam.c
731  struct timeval tv;
732
733  //failban value set bitwise - compared with BAN_
734  int32_t failban;
735  int8_t cleaned;
736  struct s_client *next; //make client a linked list
737};
738
739
740//for viaccess var in s_reader:
741struct geo_cache
742{
743    uint32_t provid;
744    uchar geo[256];
745    uchar geo_len;
746    int32_t number_ecm;
747};
748// for videoguard in s_reader
749struct s_CmdTabEntry {
750  unsigned char cla;
751  unsigned char cmd;
752  unsigned char len;
753  unsigned char mode;
754};
755
756struct s_CmdTab {
757  unsigned char index;
758  unsigned char size;
759  unsigned char Nentries;
760  unsigned char dummy;
761  struct s_CmdTabEntry e[1];
762};
763
764struct s_ecmWhitelist {
765    int16_t caid;
766    struct s_ecmWhitelistIdent *idents;
767    struct s_ecmWhitelist *next;
768};
769
770struct s_ecmWhitelistIdent {
771    uint32_t ident;
772    struct s_ecmWhitelistLen *lengths;
773    struct s_ecmWhitelistIdent *next;
774};
775
776struct s_ecmWhitelistLen {
777    int16_t len;
778    struct s_ecmWhitelistLen *next;
779};
780
781//ratelimit
782struct ecmrl {
783    uint16_t        srvid;
784    time_t  last;
785};
786#define MAXECMRATELIMIT 20
787
788struct s_reader  //contains device info, reader info and card info
789{
790  uint32_t      auprovid; // AU only for this provid
791  int8_t        audisabled; // exclude reader from auto AU
792  int8_t        smargopatch;
793  struct s_client * client; //pointer to 'r'client this reader is running in
794  int8_t       enable;
795  int8_t       available; //Schlocke: New flag for loadbalancing. Only reader if reader supports ph.c_available function
796  int32_t       fd_error;
797  int32_t       fd;
798  uint64_t    grp;
799  int32_t       fallback;
800  int32_t       typ;
801  char      label[64];
802  char      device[128];
803  void      *spec_dev;  //pointer to structure that contains specific device data
804  uint16_t    slot;   //in case of multiple slots like sc8in1; first slot = 1
805  int32_t       handle;   //device handle
806  int32_t       fdmc;     //device handle for multicam
807#ifdef WITH_STAPI
808  uint32_t stsmart_handle; //device handle for stsmart driver
809#endif
810  char      pcsc_name[128];
811  int8_t       pcsc_has_card;
812  int32_t       detect;
813  int32_t       mhz;      //actual clock rate of reader in 10khz steps
814  int32_t       cardmhz;        //standard clock speed your card should have in 10khz steps; normally 357 but for Irdeto cards 600
815  int32_t       r_port;
816  char      r_usr[64];
817  char      r_pwd[64];
818  char      l_pwd[64];
819  int32_t       l_port;
820  int32_t       log_port;
821  CAIDTAB   ctab;
822  uint32_t     boxid;
823  int8_t       nagra_read; // read nagra ncmed records: 0 disabled (default), 1 read all records, 2 read valid records only
824  uchar     nagra_boxkey[16]; //n3 boxkey 8byte  or tiger idea key 16byte
825  char      country_code[3]; // irdeto country code.
826  int8_t       force_irdeto;
827  uchar     rsa_mod[120]; //rsa modulus for nagra cards.
828  uchar     atr[64];
829  int32_t       atrlen;
830  SIDTABBITS    sidtabok;   // positiv services
831  SIDTABBITS    sidtabno;   // negative services
832  uchar     hexserial[8];
833  int32_t       nprov;
834  uchar     prid[CS_MAXPROV][8];
835  uchar     availkeys[CS_MAXPROV][16];  // viaccess; misused in seca, if availkeys[PROV][0]=0 then expired, 1 then valid.
836  uchar     sa[CS_MAXPROV][4];    // viaccess & seca
837  uint16_t    acs;    // irdeto
838  uint16_t    caid;
839  uint16_t  b_nano;
840  uint16_t  s_nano;
841  int32_t       blockemm;
842  char      * emmfile;
843  char      pincode[5];
844  int32_t       ucpk_valid;
845  int32_t       logemm;
846  int32_t       cachemm;
847  int32_t       rewritemm;
848  int8_t       card_status;
849  int8_t       deprecated; //if 0 ATR obeyed, if 1 default speed (9600) is chosen; for devices that cannot switch baudrate
850  struct    s_module ph;
851  struct    s_cardreader crdr;
852  struct    s_cardsystem csystem;
853  uchar     ncd_key[16];
854  uchar     ncd_skey[16];
855  int8_t       ncd_disable_server_filt;
856  uint16_t    ncd_msgid;
857  int32_t       ncd_proto;
858#ifdef MODULE_CCCAM
859  char      cc_version[7];  // cccam version
860  char      cc_build[7];    // cccam build number
861  int8_t       cc_maxhop;      // cccam max distance
862  int8_t       cc_mindown;     // cccam min downhops
863  int8_t       cc_currenthops; // number of hops for CCCam
864  int8_t       cc_want_emu; //Schlocke: Client want to have EMUs, 0 - NO; 1 - YES
865  uint32_t    cc_id;
866  int8_t       cc_keepalive;
867  int8_t        cc_hop; //For non-cccam reader: hop for virtual cards
868#endif
869  uchar     tcp_connected;
870  int32_t       tcp_ito;      // inactivity timeout
871  int32_t       tcp_rto;      // reconnect timeout
872  struct timeb  tcp_block_connect_till; //time tcp connect ist blocked
873  int32_t       tcp_block_delay; //incrementing block time
874  time_t    last_g;       // get (if last_s-last_g>tcp_rto - reconnect )
875  time_t    last_s;       // send
876  uchar     show_cls;     // number of classes subscription showed on kill -31
877  FTAB      fchid;
878  FTAB      ftab;
879  CLASSTAB  cltab;
880  struct    s_ecmWhitelist *ecmWhitelist;
881  char      *init_history;
882  int32_t       init_history_pos;
883  int32_t       brk_pos;
884  int32_t       msg_idx;
885#ifdef WEBIF
886  int32_t       emmwritten[4]; //count written EMM
887  int32_t       emmskipped[4]; //count skipped EMM
888  int32_t       emmerror[4];    //count error EMM
889  int32_t       emmblocked[4];  //count blocked EMM
890  int32_t       lbvalue;        //loadbalance Value
891#endif
892#ifdef HAVE_PCSC
893  SCARDCONTEXT hContext;
894  SCARDHANDLE hCard;
895  DWORD dwActiveProtocol;
896#endif
897#ifdef LIBUSB
898  uint8_t  device_endpoint; // usb endpoint for Infinity USB Smart in smartreader mode.
899  struct s_sr_config *sr_config;
900#endif
901#ifdef AZBOX
902  int32_t mode;
903#endif
904    ////variables from icc_async.h start
905    int32_t convention; //Convention of this ICC
906    unsigned char protocol_type; // Type of protocol
907    uint16_t BWT,CWT; // (for overclocking uncorrected) block waiting time, character waiting time, in ETU
908    uint32_t current_baudrate; // (for overclocking uncorrected) baudrate to prevent unnecessary conversions from/to termios structure
909    uint32_t read_timeout; // Max timeout (ms) to receive characters
910    uint32_t block_delay; // Delay (ms) after starting to transmit
911    uint32_t char_delay; // Delay (ms) after transmiting each sucesive char
912    ////variables from io_serial.h
913    int32_t written; //keep score of how much bytes are written to serial port, since they are echoed back they have to be read
914    ////variables from protocol_t1.h
915    uint16_t ifsc;  /* Information field size for the ICC */
916    unsigned char  ns;              /* Send sequence number */
917    ////variables from reader-dre.c
918    unsigned char provider;
919    ////variables from reader-nagra.c
920    IDEA_KEY_SCHEDULE ksSession;
921    int8_t is_pure_nagra;
922    int8_t is_tiger;
923    int8_t is_n3_na;
924    int8_t has_dt08;
925    int8_t swapCW;
926    uint8_t ExpiryDate[2];
927    uint8_t ActivationDate[2];
928    unsigned char rom[15];
929    unsigned char plainDT08RSA[64];
930    unsigned char IdeaCamKey[16];
931    unsigned char irdId[4];
932    unsigned char sessi[16];
933    unsigned char signature[8];
934    unsigned char cam_state[3];
935    ////variables from reader-irdeto.c
936    int32_t acs57; // A flag for the ACS57 ITA DVB-T
937    ////variables from reader-cryptoworks.c
938    BIGNUM exp;
939    BIGNUM ucpk;
940    ////variables from reader-viaccess.c
941    struct geo_cache last_geo;
942#ifdef MODULE_CCCAM
943    int32_t cc_reshare;
944#endif
945#ifdef WITH_LB
946    int32_t lb_weight;     //loadbalance weight factor, if unset, weight=100. The higher the value, the higher the usage-possibility
947    int32_t lb_usagelevel; //usagelevel for loadbalancer
948    int32_t lb_usagelevel_ecmcount;
949    time_t lb_usagelevel_time; //time for counting ecms, this creates usagelevel
950    struct timeb lb_last; //time for oldest reader
951    LLIST *lb_stat; //loadbalancer reader statistics
952#endif
953    // multi AES linked list
954    AES_ENTRY *aes_list;
955    // variables from reader-videoguard*
956    int8_t ndsversion; // 0 auto (default), 1 NDS1, 12 NDS1+, 2 NDS2
957    const char * card_desc;
958    int32_t  card_baseyear;
959    int32_t  card_tierstart;
960    int32_t  card_system_version;
961    struct s_CmdTab *cmd_table;
962    uint16_t cardkeys[3][32];
963    unsigned char stateD3A[16];
964    AES_KEY       ekey;
965    AES_KEY       astrokey;
966    //ratelimit
967    int32_t ratelimitecm;
968    int32_t ratelimitseconds;
969    struct ecmrl    rlecmh[MAXECMRATELIMIT];
970    int8_t fix_9993;
971    struct s_reader *next;
972};
973
974#ifdef CS_ANTICASC
975struct s_cpmap
976{
977  uint16_t caid;
978  uint32_t  provid;
979  uint16_t sid;
980  uint16_t chid;
981  uint16_t dwtime;
982  struct s_cpmap *next;
983};
984#endif
985
986struct s_auth
987{
988  char     usr[64];
989  char     pwd[64];
990#ifdef WEBIF
991  char     description[64];
992#endif
993  int8_t      uniq;
994  LLIST    *aureader_list;
995  int8_t      autoau;
996  int8_t      monlvl;
997  uint64_t   grp;
998  int32_t      tosleep;
999  CAIDTAB  ctab;
1000  SIDTABBITS   sidtabok;  // positiv services
1001  SIDTABBITS   sidtabno;  // negative services
1002  FTAB     fchid;
1003  FTAB     ftab;       // user [caid] and ident filter
1004  CLASSTAB cltab;
1005  TUNTAB   ttab;
1006#ifdef CS_ANTICASC
1007  int32_t       ac_users;   // 0 - unlimited
1008  uchar     ac_penalty; // 0 - log, >0 - fake dw
1009  struct s_acasc ac_stat;
1010#endif
1011  in_addr_t dynip;
1012  uchar     dyndns[64];
1013  time_t    expirationdate;
1014  time_t    firstlogin;
1015  int32_t       allowedtimeframe[2];
1016  int8_t       c35_suppresscmd08;
1017  uint8_t       c35_sleepsend;
1018  int8_t       ncd_keepalive;
1019  int32_t       cccmaxhops;
1020  int32_t       cccreshare;
1021  int8_t       cccignorereshare;
1022  int8_t        cccstealth;
1023  int8_t       disabled;
1024  int32_t       failban;
1025
1026  int32_t       cwfound;
1027  int32_t       cwcache;
1028  int32_t       cwnot;
1029  int32_t       cwtun;
1030  int32_t       cwignored;
1031  int32_t       cwtout;
1032  int32_t       emmok;
1033  int32_t       emmnok;
1034
1035  struct   s_auth *next;
1036};
1037
1038struct s_srvid
1039{
1040  int32_t     srvid;
1041  int32_t     ncaid;
1042  int32_t     caid[10];
1043  char    *data;
1044  char    *prov;
1045  char    *name;
1046  char    *type;
1047  char    *desc;
1048  struct  s_srvid *next;
1049};
1050
1051struct s_tierid
1052{
1053  int32_t     tierid;
1054  int32_t     ncaid;
1055  int32_t     caid[10];
1056  char    name[33];
1057  struct  s_tierid *next;
1058};
1059
1060//Todo #ifdef CCCAM
1061struct s_provid
1062{
1063    int32_t     caid;
1064    uint32_t    provid;
1065    char    prov[33];
1066    char    sat[33];
1067    char    lang[33];
1068    struct  s_provid *next;
1069};
1070
1071struct s_ip
1072{
1073  in_addr_t ip[2];
1074  struct s_ip *next;
1075};
1076
1077struct s_config
1078{
1079    int32_t     nice;
1080    uint32_t        netprio;
1081    uint32_t        ctimeout;
1082    uint32_t        ftimeout;
1083    uint32_t        cmaxidle;
1084    int32_t     ulparent;
1085    uint32_t        delay;
1086    int32_t     bindwait;
1087    int32_t     tosleep;
1088    in_addr_t   srvip;
1089    char        *usrfile;
1090    char        *cwlogdir;
1091    char        *emmlogdir;
1092    char        *logfile;
1093    char        *mailfile;
1094    uint8_t logtostdout;
1095    uint8_t     logtosyslog;
1096    uint32_t    loghistorysize;
1097    int8_t      disablelog;
1098    int8_t      disablemail;
1099    int8_t      disableuserfile;
1100    int8_t      usrfileflag;
1101    struct s_auth   *account;
1102    struct s_srvid  *srvid[16];
1103    struct s_tierid *tierid;
1104    //Todo #ifdef CCCAM
1105    struct s_provid *provid;
1106    struct s_sidtab *sidtab;
1107    int32_t     mon_port;
1108    in_addr_t   mon_srvip;
1109    struct s_ip     *mon_allowed;
1110    int32_t     mon_aulow;
1111    int32_t     mon_hideclient_to;
1112    int32_t     mon_level;
1113    int32_t     mon_appendchaninfo;
1114#ifdef WEBIF
1115    int32_t         http_port;
1116    char        http_user[65];
1117    char        http_pwd[65];
1118    char        http_css[128];
1119    char        http_jscript[128];
1120    char        http_tpl[128];
1121    char        http_script[128];
1122    int32_t         http_refresh;
1123    int8_t          http_hide_idle_clients;
1124    struct s_ip *http_allowed;
1125    int8_t          http_readonly;
1126    in_addr_t   http_dynip;
1127    uchar       http_dyndns[64];
1128    int8_t          http_use_ssl;
1129    char        http_cert[128];
1130    char        http_help_lang[3];
1131#endif
1132    int8_t          http_full_cfg;
1133    int32_t         failbantime;
1134    int32_t         failbancount;
1135    LLIST       *v_list; //failban list
1136    int32_t     c33_port;
1137    in_addr_t   c33_srvip;
1138    uchar       c33_key[16];
1139    int32_t     c33_crypted;
1140    int32_t     c33_passive;
1141    struct s_ip     *c33_plain;
1142    int32_t     c35_port;
1143    in_addr_t   c35_srvip;
1144    int8_t      c35_suppresscmd08;
1145    int8_t      c35_tcp_suppresscmd08;
1146    int8_t      c35_udp_suppresscmd08;
1147    PTAB        c35_tcp_ptab;
1148    in_addr_t   c35_tcp_srvip;
1149    PTAB        ncd_ptab;
1150    in_addr_t   ncd_srvip;
1151    uchar       ncd_key[16];
1152    int32_t     ncd_keepalive;
1153    int8_t      ncd_mgclient;
1154    struct s_ip     *ncd_allowed;
1155    int32_t     rad_port;
1156    in_addr_t   rad_srvip;
1157#ifdef MODULE_CCCAM
1158    uint16_t    cc_port[CS_MAXPORTS];
1159    int8_t      cc_reshare;
1160    int8_t      cc_ignore_reshare;
1161    int32_t     cc_update_interval;
1162    in_addr_t   cc_srvip;
1163    char        cc_version[7];
1164    int8_t      cc_minimize_cards;
1165    int8_t      cc_keep_connected;
1166    int8_t      cc_stealth;
1167    int8_t      cc_reshare_services;
1168    int8_t      cc_forward_origin_card;
1169    int8_t      cc_use_fixed_nodeid;
1170    uint8_t     cc_fixed_nodeid[8];
1171#endif
1172    char    gbox_hostname[128];
1173    char    gbox_key[9];
1174    char    gbox_gsms_path[200];
1175    int32_t     gbox_port;
1176    struct s_ip *rad_allowed;
1177    char        rad_usr[32];
1178    char        ser_device[512];
1179    uint32_t        srtimeout;  // SerialReaderTimeount in millisec
1180    int32_t     max_log_size;
1181    int8_t      waitforcards;
1182    int32_t     waitforcards_extra_delay;
1183    int8_t      preferlocalcards;
1184    int8_t      saveinithistory;
1185    int32_t     reader_restart_seconds; //schlocke: reader restart auf x seconds, disable = 0
1186    int8_t      dropdups; //drop duplicate logins
1187
1188
1189//Loadbalancer-Config:
1190#ifdef WITH_LB
1191    int32_t     lb_mode; //schlocke: reader loadbalancing mode
1192    int32_t     lb_save; //schlocke: load/save statistics to file, save every x ecms
1193    int32_t     lb_nbest_readers; // count of best readers
1194    int32_t     lb_nfb_readers; // count of fallback readers
1195    int32_t     lb_min_ecmcount; // minimal ecm count to evaluate lbvalues
1196    int32_t     lb_max_ecmcount; // maximum ecm count before reseting lbvalues
1197    int32_t     lb_reopen_seconds; //time between retrying failed readers/caids/prov/srv
1198    int32_t lb_retrylimit; //reopen only happens if reader response time > retrylimit
1199    CAIDVALUETAB lb_retrylimittab;
1200    CAIDVALUETAB lb_nbest_readers_tab; //like nbest_readers, but for special caids
1201    CAIDTAB lb_noproviderforcaid; //do not store loadbalancer stats with providers for this caid
1202    char    *lb_savepath; //path where the stat file is save. Empty=default=/tmp/.oscam/stat
1203    int32_t lb_stat_cleanup; //duration in hours for cleaning old statistics
1204    int32_t lb_use_locking; //use a mutex lock while searching for readers (get_cw())
1205    int32_t lb_reopen_mode; //reopen readers mode
1206    int32_t lb_max_readers; //limit the amount of readers during learning
1207    int32_t lb_auto_betatunnel; //automatic selection of betatunnel convertion based on learned data
1208#endif
1209    int32_t resolve_gethostbyname;
1210
1211#ifdef CS_WITH_DOUBLECHECK
1212    int8_t double_check; //schlocke: Double checks each ecm+dcw from two (or more) readers
1213#endif
1214
1215#ifdef IRDETO_GUESSING
1216    struct s_irdeto_quess *itab[0xff];
1217#endif
1218
1219#ifdef HAVE_DVBAPI
1220    int8_t      dvbapi_enabled;
1221    int8_t      dvbapi_au;
1222    char        dvbapi_usr[64];
1223    int8_t      dvbapi_boxtype;
1224    int8_t      dvbapi_pmtmode;
1225    int8_t      dvbapi_requestmode;
1226    SIDTABBITS    dvbapi_sidtabok;  // positiv services
1227    SIDTABBITS    dvbapi_sidtabno;  // negative services
1228#endif
1229
1230#ifdef CS_ANTICASC
1231    char        ac_enabled;
1232    int32_t     ac_users;       // num of users for account (0 - default)
1233    int32_t     ac_stime;       // time to collect AC statistics (3 min - default)
1234    int32_t     ac_samples;     // qty of samples
1235    int32_t     ac_penalty;     // 0 - write to log
1236    int32_t     ac_fakedelay;   // 100-1000 ms
1237    int32_t     ac_denysamples;
1238    char        ac_logfile[128];
1239    struct      s_cpmap *cpmap;
1240#endif
1241
1242#ifdef QBOXHD_LED
1243    int8_t disableqboxhdled; // disable qboxhd led , default = 0
1244#endif
1245
1246#ifdef LCDSUPPORT
1247    char        *lcd_output_path;
1248    int32_t     lcd_hide_idle;
1249    int32_t     lcd_write_intervall;
1250#endif
1251
1252};
1253
1254struct s_clientinit
1255{
1256    void *(*handler)(struct s_client*);
1257    struct s_client * client;
1258};
1259
1260typedef struct reader_stat_t
1261{
1262  int32_t           rc;
1263  uint16_t        caid;
1264  uint32_t         prid;
1265  uint16_t        srvid;
1266  int16_t           ecmlen;
1267
1268  time_t        last_received;
1269
1270  int32_t           ecm_count;
1271  int32_t           time_avg;
1272  int32_t           time_stat[LB_MAX_STAT_TIME];
1273  int32_t           time_idx;
1274
1275  int32_t           fail_factor;
1276} READER_STAT;
1277
1278typedef struct emm_packet_t
1279{
1280  uchar emm[258];
1281  uchar l;
1282  uchar caid[2];
1283  uchar provid[4];
1284  uchar hexserial[8];                    //contains hexserial or SA of EMM
1285  uchar type;
1286  struct s_client *client;
1287} EMM_PACKET;
1288
1289#ifdef QBOXHD_LED
1290typedef struct {
1291    uint16_t H;  // range 0-359
1292    unsigned char S;   // range 0-99
1293    unsigned char V;   // range 0-99
1294} qboxhd_led_color_struct;
1295typedef struct {
1296    unsigned char red;  // first 5 bit used (&0x1F)
1297    unsigned char green; // first 5 bit used (&0x1F)
1298    unsigned char blue; // first 5 bit used (&0x1F)
1299} qboxhdmini_led_color_struct;
1300#endif
1301
1302
1303/* ===========================
1304 *      global variables
1305 * =========================== */
1306extern char cs_tmpdir[200];
1307extern pthread_key_t getclient;
1308extern struct s_client *first_client;
1309extern struct s_reader *first_active_reader; //points to list of _active_ readers (enable = 1, deleted = 0)
1310extern LLIST *configured_readers;
1311extern int32_t cs_dblevel;
1312extern uint16_t len4caid[256];
1313extern struct s_config cfg;
1314extern char cs_confdir[];
1315extern char *loghist, *loghistptr;
1316extern struct s_module ph[CS_MAX_MOD];
1317extern struct s_cardsystem cardsystem[CS_MAX_MOD];
1318extern struct s_cardreader cardreader[CS_MAX_MOD];
1319extern pthread_mutex_t gethostbyname_lock;
1320
1321extern pid_t server_pid; // PID of server - set while startup
1322
1323#ifdef CS_ANTICASC
1324extern FILE *fpa;
1325#endif
1326
1327/* ===========================
1328 *      global functions
1329 * =========================== */
1330#include "global-functions.h"
1331
1332#endif  // CS_GLOBALS
Note: See TracBrowser for help on using the repository browser.