source: trunk/globals.h@ 8467

Last change on this file since 8467 was 8467, checked in by gf, 9 years ago

ird-guess: Move everything related to irdeto guessing in the module.

  • Property svn:eol-style set to LF
File size: 55.6 KB
Line 
1#ifndef GLOBALS_H_
2#define GLOBALS_H_
3
4#define _GNU_SOURCE //needed for PTHREAD_MUTEX_RECURSIVE on some plattforms and maybe other things; do not remove
5#include <stdlib.h>
6#include <stdio.h>
7#include <stdbool.h>
8#include <stddef.h>
9#include <assert.h>
10#include <fcntl.h>
11#include <sys/ioctl.h>
12#include <sys/poll.h>
13#include <ctype.h>
14#include <sys/types.h>
15#include <sys/stat.h>
16#include <sys/wait.h>
17#include <unistd.h>
18#include <sys/mman.h>
19#include <stdarg.h>
20#include <time.h>
21#include <sys/time.h>
22#include <limits.h>
23#include <pwd.h>
24#include <netinet/tcp.h>
25#include <sys/socket.h>
26#include <netinet/in.h>
27#include <arpa/inet.h>
28#include <netdb.h>
29#include <string.h>
30#include <signal.h>
31#include <errno.h>
32#include <pthread.h>
33#include <dirent.h>
34#include <termios.h>
35#include <inttypes.h>
36
37//for reader-nagra variables in s_reader:
38#include "cscrypt/idea.h"
39
40/*
41 * The following hack is taken from Linux: include/linux/kconfig.h
42 * Original comment follows:
43 * Getting something that works in C and CPP for an arg that may or may
44 * not be defined is tricky. Here, if we have "#define CONFIG_BOOGER 1"
45 * we match on the placeholder define, insert the "0," for arg1 and generate
46 * the triplet (0, 1, 0). Then the last step cherry picks the 2nd arg (a one).
47 * When CONFIG_BOOGER is not defined, we generate a (... 1, 0) pair, and when
48 * the last step cherry picks the 2nd arg, we get a zero.
49 */
50#define __ARG_PLACEHOLDER_1 0,
51#define config_enabled(cfg) _config_enabled(cfg)
52#define _config_enabled(value) __config_enabled(__ARG_PLACEHOLDER_##value)
53#define __config_enabled(arg1_or_junk) ___config_enabled(arg1_or_junk 1, 0)
54#define ___config_enabled(__ignored, val, ...) val
55
56#include "config.h"
57
58#if defined(WITH_SSL) && !defined(WITH_LIBCRYPTO)
59# define WITH_LIBCRYPTO 1
60#endif
61
62#if defined(__CYGWIN__) || defined(__arm__) || defined(__SH4__) || defined(__MIPS__) || defined(__MIPSEL__) || defined(__powerpc__)
63# define CS_LOGFILE "/dev/tty"
64#endif
65
66#if defined(__AIX__) || defined(__SGI__) || defined(__OSF__) || defined(__HPUX__) || defined(__SOLARIS__) || defined(__APPLE__)
67# define NEED_DAEMON
68#endif
69
70#if defined(__AIX__) || defined(__SGI__) || defined(__OSF__) || defined(__HPUX__) || defined(__SOLARIS__) || defined(__CYGWIN__)
71# define NO_ENDIAN_H
72#endif
73
74#if defined(__AIX__) || defined(__SGI__)
75# define socklen_t unsigned long
76#endif
77
78#if defined(__SOLARIS__) || defined(__FreeBSD__)
79# define BSD_COMP
80#endif
81
82#if defined(__HPUX__)
83# define _XOPEN_SOURCE_EXTENDED
84#endif
85
86#if defined(__APPLE__) && !defined(s6_addr32)
87#define s6_addr32 __u6_addr.__u6_addr32
88#endif
89
90#ifdef __ANDROID__
91#ifndef in_port_t
92#define in_port_t uint16_t
93#endif
94#define tcdrain(fd) ioctl(fd, TCSBRK, 1)
95#endif
96
97#ifdef __uClinux__
98#define fork() 0
99#endif
100
101#include "cscrypt/aes.h"
102#include "cscrypt/bn.h"
103
104#ifndef uchar
105typedef unsigned char uchar;
106#endif
107
108#ifdef IPV6SUPPORT
109#define IN_ADDR_T struct in6_addr
110#define SOCKADDR sockaddr_storage
111#else
112#define IN_ADDR_T in_addr_t
113#define SOCKADDR sockaddr_in
114#endif
115
116#ifndef NO_ENDIAN_H
117 #if defined(__APPLE__)
118 #include <machine/endian.h>
119 #define __BYTE_ORDER __DARWIN_BYTE_ORDER
120 #define __BIG_ENDIAN __DARWIN_BIG_ENDIAN
121 #define __LITTLE_ENDIAN __DARWIN_LITTLE_ENDIAN
122 #elif defined(__FreeBSD__)
123 #include <sys/endian.h>
124 #define __BYTE_ORDER _BYTE_ORDER
125 #define __BIG_ENDIAN _BIG_ENDIAN
126 #define __LITTLE_ENDIAN _LITTLE_ENDIAN
127 #else
128 #include <endian.h>
129 #include <byteswap.h>
130 #endif
131#endif
132
133#ifdef CARDREADER_PCSC
134 #if defined(__CYGWIN__)
135 #define __reserved
136 #define __nullnullterminated
137 #include <specstrings.h>
138 #include "extapi/cygwin/WinSCard.h"
139 #else
140 #include <PCSC/pcsclite.h>
141 #if defined(__APPLE__)
142 #include <PCSC/wintypes.h>
143 #else
144 #include <PCSC/reader.h>
145 #endif
146 #endif
147#endif
148
149/* ===========================
150 * macros
151 * =========================== */
152// Prevent use of unsafe functions (doesn't work for MacOSX)
153#if !defined(__APPLE__)
154#define strcpy(a,b) UNSAFE_STRCPY_USE_CS_STRNCPY_INSTEAD()
155#define sprintf(a,...) UNSAFE_SPRINTF_USE_SNPRINTF_INSTEAD()
156#define strtok(a,b,c) UNSAFE_STRTOK_USE_STRTOK_R_INSTEAD()
157#define gmtime(a) UNSAFE_GMTIME_NOT_THREADSAFE_USE_CS_GMTIME_R()
158#define localtime(a) UNSAFE_LOCALTIME_NOT_THREADSAFE_USE_LOCALTIME_R()
159#define asctime(a) UNSAFE_ASCTIME_NOT_THREADSAFE_USE_ASCTIME_R()
160#define ctime(a) UNSAFE_CTIME_NOT_THREADSAFE_USE_CS_CTIME_R()
161#define gethostbyaddr(a,b,c) UNSAFE_GETHOSTBYADDR_NOT_THREADSAFE_USE_GETADDRINFO()
162#define gethostent(a) UNSAFE_GETHOSTENT_NOT_THREADSAFE()
163#define getprotobyname(a) UNSAFE_GETPROTOBYNAME_NOT_THREADSAFE_USE_GETPROTOBYNAME_R()
164#define getservbyname(a,b) UNSAFE_GETSERVBYNAME_NOT_THREADSAFE_USE_GETSERVBYNAME_R()
165#define getservbyport(a,b) UNSAFE_GETSERVBYPORT_NOT_THREADSAFE_USE_GETSERVBYPORT_R()
166#define getservent() UNSAFE_GETSERVENT_NOT_THREADSAFE_USE_GETSERVENT_R()
167#define getnetbyname(a) UNSAFE_GETNETBYNAME_NOT_THREADSAFE_USE_GETNETBYNAME_R
168#define getnetbyaddr(a,b) UNSAFE_GETNETBYADDR_NOT_THREADSAFE_USE_GETNETBYADDR_R
169#define getnetent() UNSAFE_GETNETENT_NOT_THREADSAFE_USE_GETNETENT_R
170#define getrpcbyname(a) UNSAFE_GETRPCBYNAME_NOT_THREADSAFE_USE_GETRPCBYNAME_R
171#define getrpcbynumber(a) UNSAFE_GETRPCBYNUMBER_NOT_THREADSAFE_USE_GETRPCBYNUMBER_R
172#define getrpcent() UNSAFE_GETRPCENT_NOT_THREADSAFE_USE_GETRPCENT_R
173#define ctermid(a) UNSAFE_CTERMID_NOT_THREADSAFE_USE_CTERMID_R
174#define tmpnam(a) UNSAFE_TMPNAM_NOT_THREADSAFE
175#define tempnam(a,b) UNSAFE_TEMPNAM_NOT_THREADSAFE
176#define getlogin() UNSAFE_GETLOGIN_NOT_THREADSAFE_USE_GETLOGIN_R
177#define getpwnam(a) UNSAFE_GETPWNAM_NOT_THREADSAFE_USE_GETPWNAM_R
178#define getpwent() UNSAFE_GETPWENT_NOT_THREADSAFE_USE_GETPWENT_R
179#define fgetpwent(a) UNSAFE_FGETPWENT_NOT_THREADSAFE_USE_FGETPWENT_R
180#ifndef __ANDROID__
181#define getpwuid(a) UNSAFE_GETPWUID_NOT_THREADSAFE_USE_GETPWUID_R
182#endif
183#define getspent() UNSAFE_GETSPENT_NOT_THREADSAFE_USE_GETSPENT_R
184#define getspnam(a) UNSAFE_GETSPNAM_NOT_THREADSAFE_USE_GETSPNAM_R
185#define fgetspent(a) UNSAFE_FGETSPENT_NOT_THREADSAFE_USE_FGETSPENT_R
186#define getgrnam(a) UNSAFE_GETGRNAM_NOT_THREADSAFE_USE_GETGRNAM_R
187#define getgrent() UNSAFE_GETGRENT_NOT_THREADSAFE_USE_GETGRENT_R
188#define getgrgid(a) UNSAFE_GETGRGID_NOT_THREADSAFE_USE_GETGRGID_R
189#define fgetgrent() UNSAFE_FGETGRENT_NOT_THREADSAFE_USE_FGETGRGID_R
190#define fcvt(a,b,c,d) UNSAFE_FCVT_NOT_THREADSAFE_AND_DEPRECATED
191#define ecvt(a,b,c,d) UNSAFE_ECVT_NOT_THREADSAFE_AND_DEPRECATED
192#define gcvt(a,b,c) UNSAFE_GCVT_NOT_THREADSAFE_AND_DEPRECATED
193#define strptime(a,b,c) STRPTIME_NOT_EXISTS_ON_SOME_DM500_DB2()
194#define ftime(a) FTIME_DEPRECATED()
195#define timegm(a) TIMEGM_GNU_SPECIFIC_USE_CS_TIMEGM
196#endif
197
198#ifdef UNUSED
199#elif __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
200# define UNUSED(x) UNUSED_ ## x __attribute__((unused))
201#elif defined(__LCLINT__)
202# define UNUSED(x) /*@unused@*/ x
203#else
204# define UNUSED(x) x
205#endif
206
207#if __GNUC__ >= 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
208# define MUST_CHECK_RESULT __attribute__((warn_unused_result))
209#endif
210
211#ifdef OK
212#undef OK
213#endif
214
215#ifdef ERROR
216#undef ERROR
217#endif
218
219#ifdef WITH_DEBUG
220# define call(arg) \
221 if (arg) { \
222 cs_debug_mask(D_TRACE, "ERROR, function call %s returns error.",#arg); \
223 return ERROR; \
224 }
225#else
226# define call(arg) \
227 if (arg) { \
228 return ERROR; \
229 }
230#endif
231
232//checking if (X) free(X) unneccessary since freeing a null pointer doesnt do anything
233#define NULLFREE(X) {if (X) {void *tmpX=X; X=NULL; free(tmpX); }}
234
235/* ===========================
236 * constants
237 * =========================== */
238#define CS_VERSION "1.20-unstable_svn"
239#ifndef CS_SVN_VERSION
240# define CS_SVN_VERSION "test"
241#endif
242#ifndef CS_TARGET
243# define CS_TARGET "unknown"
244#endif
245#ifndef CS_CONFDIR
246#define CS_CONFDIR "/usr/local/etc"
247#endif
248#ifndef CS_LOGFILE
249#define CS_LOGFILE "/var/log/oscam.log"
250#endif
251#define CS_QLEN 128 // size of request queue
252#define CS_MAXCAIDTAB 32 // max. caid-defs/user
253#define CS_MAXTUNTAB 50 // max. betatunnel mappings
254#define CS_MAXPROV 32
255#define CS_MAXPORTS 32 // max server ports
256#define CS_MAXFILTERS 16
257#define CS_MAX_CAIDVALUETAB 16
258#define CS_CLIENT_HASHBUCKETS 32
259
260#define CS_ECMSTORESIZE 16 // use MD5()
261#define CS_EMMSTORESIZE 16 // use MD5()
262#define CS_CLIENT_TIMEOUT 5000
263#define CS_CLIENT_MAXIDLE 120
264#define CS_BIND_TIMEOUT 120
265#define CS_DELAY 0
266#define CS_ECM_RINGBUFFER_MAX 0x10 // max size for ECM last responsetimes ringbuffer. Keep this set to power of 2 values!
267
268#ifndef PTHREAD_STACK_MIN
269#define PTHREAD_STACK_MIN 64000
270#endif
271#define PTHREAD_STACK_SIZE PTHREAD_STACK_MIN+32768
272
273#define CS_MAXEMMBLOCKBYLEN 10
274
275#define CS_EMMCACHESIZE 127 //nr of EMMs that each client will cache; cache is per client, so memory-expensive...
276#define MSGLOGSIZE 64 //size of string buffer for a ecm to return messages
277
278#define D_TRACE 0x0001 // Generate very detailed error/trace messages per routine
279#define D_ATR 0x0002 // Debug ATR parsing, dump of ecm, cw
280#define D_READER 0x0004 // Debug Reader/Proxy Process
281#define D_CLIENT 0x0008 // Debug Client Process
282#define D_IFD 0x0010 // Debug IFD+protocol
283#define D_DEVICE 0x0020 // Debug Reader I/O
284#define D_EMM 0x0040 // Dumps EMM
285#define D_DVBAPI 0x0080 // Debug DVBAPI
286#define D_LB 0x0100 // Debug Loadbalancer
287#define D_CACHEEX 0x0200 // Debug CACHEEX
288#define D_CLIENTECM 0x0400 // Debug Client ECMs
289#define D_CSPCWC 0x0800 // Debug CSP/CWC
290#define D_CSPCWCFUL 0x1000 // Debug CSP/CWC FULL
291#define D_ALL_DUMP 0xFFFF // dumps all
292
293#define MAX_DEBUG_LEVELS 11
294
295#define R_DB2COM1 0x1 // Reader Dbox2 @ com1
296#define R_DB2COM2 0x2 // Reader Dbox2 @ com1
297#define R_SC8in1 0x3 // Reader Sc8in1 or MCR
298#define R_MP35 0x4 // AD-Teknik Multiprogrammer 3.5 and 3.6 (only usb tested)
299#define R_MOUSE 0x5 // Reader smartcard mouse
300/////////////////// phoenix readers which need baudrate setting and timings need to be guarded by OSCam: BEFORE R_MOUSE
301#define R_INTERNAL 0x6 // Reader smartcard intern
302/////////////////// internal readers (Dreambox, Coolstream, IPBox) are all R_INTERNAL, they are determined compile-time
303/////////////////// readers that do not reed baudrate setting and timings are guarded by reader itself (large buffer built in): AFTER R_SMART
304#define R_SMART 0x7 // Smartreader+
305#define R_PCSC 0x8 // PCSC
306/////////////////// proxy readers after R_CS378X
307#define R_CAMD35 0x20 // Reader cascading camd 3.5x
308#define R_CAMD33 0x21 // Reader cascading camd 3.3x
309#define R_NEWCAMD 0x22 // Reader cascading newcamd
310#define R_RADEGAST 0x23 // Reader cascading radegast
311#define R_CS378X 0x24 // Reader cascading camd 3.5x TCP
312#define R_CONSTCW 0x25 // Reader for Constant CW
313#define R_CSP 0x26 // Cache CSP
314#define R_GHTTP 0x27 // Reader ghttp
315/////////////////// peer to peer proxy readers after R_CCCAM
316#define R_GBOX 0x30 // Reader cascading gbox
317#define R_CCCAM 0x35 // Reader cascading cccam
318#define R_PANDORA 0x36 // Reader cascading pandora
319#define R_SERIAL 0x80 // Reader serial
320#define R_IS_NETWORK 0x60
321#define R_IS_CASCADING 0xE0
322
323#define is_network_reader(__X) (__X->typ & R_IS_NETWORK)
324#define is_cascading_reader(__X) (__X->typ & R_IS_CASCADING)
325
326//ECM rc codes:
327#define E_FOUND 0
328#define E_CACHE1 1
329#define E_CACHE2 2
330#define E_CACHEEX 3
331///////above is all found
332#define E_NOTFOUND 4 //for selection of found, use < E_NOTFOUND
333#define E_TIMEOUT 5
334#define E_SLEEPING 6
335#define E_FAKE 7
336#define E_INVALID 8
337#define E_CORRUPT 9
338#define E_NOCARD 10
339#define E_EXPDATE 11
340#define E_DISABLED 12
341#define E_STOPPED 13 //for selection of error, use <= E_STOPPED and exclude selection of found
342///////above is all notfound, some error or problem
343#define E_99 99 //this code is undocumented
344#define E_UNHANDLED 100 //for selection of unhandled, use >= E_UNHANDLED
345
346#define CS_MAX_MOD 20
347#define MOD_CONN_TCP 1
348#define MOD_CONN_UDP 2
349#define MOD_CONN_NET 3
350#define MOD_CONN_SERIAL 4
351#define MOD_NO_CONN 8
352
353#define MOD_CARDSYSTEM 16
354#define MOD_ADDON 32
355
356#define EMM_UNIQUE 1
357#define EMM_SHARED 2
358#define EMM_GLOBAL 4
359#define EMM_UNKNOWN 8
360
361//Listener Types
362#define LIS_CAMD33TCP 1
363#define LIS_CAMD35UDP 2
364#define LIS_CAMD35TCP 4
365#define LIS_NEWCAMD 8
366#define LIS_CCCAM 16
367#define LIS_GBOX 32
368#define LIS_RADEGAST 64
369#define LIS_DVBAPI 128
370#define LIS_CONSTCW 256
371#define LIS_SERIAL 1024
372#define LIS_CSPUDP 2048
373
374//EMM types:
375#define UNKNOWN 0
376#define UNIQUE 1
377#define SHARED 2
378#define GLOBAL 3
379
380#define PIP_ID_ECM 0
381#define PIP_ID_EMM 1
382#define PIP_ID_CIN 2 // CARD_INFO
383#define PIP_ID_UDP 3
384#define PIP_ID_MAX PIP_ID_UDP
385#define PIP_ID_ERR (-1)
386#define PIP_ID_NUL (-2)
387
388#define cdiff *c_start
389
390#define NCD_AUTO 0
391#define NCD_524 1
392#define NCD_525 2
393
394// moved from reader-common.h
395#define UNKNOWN 0
396#define CARD_NEED_INIT 1
397#define CARD_INSERTED 2
398#define CARD_FAILURE 3
399#define NO_CARD 4
400
401// moved from stats
402#define DEFAULT_REOPEN_SECONDS 900
403#define DEFAULT_MIN_ECM_COUNT 5
404#define DEFAULT_MAX_ECM_COUNT 500
405#define DEFAULT_NBEST 1
406#define DEFAULT_NFB 1
407#define DEFAULT_RETRYLIMIT 800
408#define DEFAULT_LB_MODE 0
409#define DEFAULT_LB_STAT_CLEANUP 336
410#define DEFAULT_LB_REOPEN_MODE 0
411#define DEFAULT_UPDATEINTERVAL 240
412#define DEFAULT_LB_AUTO_BETATUNNEL 1
413#define DEFAULT_LB_AUTO_BETATUNNEL_MODE 0
414#define DEFAULT_LB_AUTO_BETATUNNEL_PREFER_BETA 50
415
416#define DEFAULT_MAX_CACHE_TIME 15
417#define DEFAULT_MAX_CACHE_COUNT 1000
418
419#define DEFAULT_LB_AUTO_TIMEOUT 0
420#define DEFAULT_LB_AUTO_TIMEOUT_P 30
421#define DEFAULT_LB_AUTO_TIMEOUT_T 300
422
423#define DEFAULT_GBOX_MAX_DIST 2
424#define DEFAULT_GBOX_MAX_ECM_SEND 3
425#define DEFAULT_GBOX_RECONNECT 300
426#define CS_GBOX_MAX_LOCAL_CARDS 16
427
428enum {E1_GLOBAL=0, E1_USER, E1_READER, E1_SERVER, E1_LSERVER};
429
430//LB blocking events:
431enum {E2_GLOBAL=0, E2_GROUP, E2_CAID, E2_IDENT, E2_CLASS, E2_CHID, E2_QUEUE, E2_OFFLINE,
432 E2_SID, E2_CCCAM_NOCARD,
433 //From here only LB nonblocking events:
434 E2_CCCAM_NOK1, E2_CCCAM_NOK2, E2_CCCAM_LOOP, E2_WRONG_CHKSUM, E2_RATELIMIT};
435
436#define LB_NONBLOCK_E2_FIRST E2_CCCAM_NOK1
437
438#define CTA_RES_LEN 512
439
440#define MAX_ATR_LEN 33 // max. ATR length
441#define MAX_HIST 15 // max. number of historical characters
442
443#define MAX_SIDBITS 64 // max services
444#define SIDTABBITS uint64_t // 64bit type for services, if a system does not support this type,
445 // please use a define and define it as uint32_t / MAX_SIDBITS 32
446
447#define BAN_UNKNOWN 1 // Failban mask for anonymous/ unknown contact
448#define BAN_DISABLED 2 // Failban mask for Disabled user
449#define BAN_SLEEPING 4 // Failban mask for sleeping user
450#define BAN_DUPLICATE 8 // Failban mask for duplicate user
451
452#define MAX_HTTP_DYNDNS 3 // maximum allowed Dyndns addresses for webif access
453
454#define CHECK_WAKEUP 1
455#define CHECK_ANTICASCADER 2
456#define CHECK_ECMCACHE 3
457
458#define AVAIL_CHECK_CONNECTED 0
459#define AVAIL_CHECK_LOADBALANCE 1
460
461#define ECM_FMT_LEN 109 //64
462#define CXM_FMT_LEN 209 // 160
463
464#define LB_MAX_STAT_TIME 10
465
466#if defined(__APPLE__) || defined(__FreeBSD__)
467#define OSCAM_SIGNAL_WAKEUP SIGCONT
468#else
469#define OSCAM_SIGNAL_WAKEUP SIGRTMAX-2
470#endif
471
472#define READER_ACTIVE 0x01
473#define READER_FALLBACK 0x02
474#define READER_LOCAL 0x04
475#define READER_CACHEEX 0x08
476
477#define REQUEST_SENT 0x10
478#define REQUEST_ANSWERED 0x20
479
480/* ===========================
481 * Default Values
482 * =========================== */
483#define DEFAULT_INACTIVITYTIMEOUT 0
484#define DEFAULT_TCP_RECONNECT_TIMEOUT 30
485#define DEFAULT_NCD_KEEPALIVE 0
486
487#define DEFAULT_CC_MAXHOPS 10
488#define DEFAULT_CC_RESHARE -1 // Use global cfg
489#define DEFAULT_CC_IGNRSHR -1 // Use global cfg
490#define DEFAULT_CC_STEALTH -1 // Use global cfg
491#define DEFAULT_CC_KEEPALIVE 0
492#define DEFAULT_CC_RECONNECT 12000
493#define DEFAULT_CC_RECV_TIMEOUT 2000
494
495#define DEFAULT_AC_USERS -1 // Use global cfg
496#define DEFAULT_AC_PENALTY -1 // Use global cfg
497
498// Return MPEG section length
499#define SCT_LEN(sct) (3+((sct[1]&0x0f)<<8)+sct[2])
500// Used by readers
501#define MAX_LEN 256
502
503#define NO_CAID_VALUE 0xfffe
504#define NO_SRVID_VALUE 0xfffe
505
506// If NULL return empty string
507#define ESTR(x) ((x) ? (x) : "")
508
509#ifndef MAX
510#define MAX(a,b) ((a) > (b) ? (a) : (b))
511#endif
512
513#ifndef MIN
514#define MIN(a,b) ((a) < (b) ? (a) : (b))
515#endif
516
517/*
518 See: http://stackoverflow.com/questions/10269685/kernels-container-of-any-way-to-make-it-iso-conforming
519 http://www.kroah.com/log/linux/container_of.html
520*/
521#define container_of(ptr, type, member) \
522 ((type *) ((char *) (ptr) - offsetof(type, member) + \
523 (&((type *) 0)->member == (ptr)) * 0))
524
525/* ===========================
526 * global structures
527 * =========================== */
528struct timeb {
529 time_t time;
530 uint16_t millitm;
531};
532
533typedef struct cs_mutexlock {
534 int32_t timeout;
535 pthread_mutex_t lock;
536 pthread_cond_t writecond, readcond;
537 const char *name;
538 int8_t flag;
539 int16_t writelock, readlock;
540} CS_MUTEX_LOCK;
541
542#include "oscam-llist.h"
543
544typedef struct s_caidvaluetab {
545 uint16_t n;
546 uint16_t caid[CS_MAX_CAIDVALUETAB];
547 uint16_t value[CS_MAX_CAIDVALUETAB];
548} CAIDVALUETAB;
549
550typedef struct s_classtab {
551 uchar an;
552 uchar bn;
553 uchar aclass[31];
554 uchar bclass[31];
555} CLASSTAB;
556
557typedef struct s_caidtab {
558 uint16_t caid[CS_MAXCAIDTAB];
559 uint16_t mask[CS_MAXCAIDTAB];
560 uint16_t cmap[CS_MAXCAIDTAB];
561} CAIDTAB;
562
563typedef struct s_tuntab {
564 uint16_t n;
565 uint16_t bt_caidfrom[CS_MAXTUNTAB];
566 uint16_t bt_caidto[CS_MAXTUNTAB];
567 uint16_t bt_srvid[CS_MAXTUNTAB];
568} TUNTAB;
569
570typedef struct s_sidtab {
571 char label[64];
572 uint16_t num_caid;
573 uint16_t num_provid;
574 uint16_t num_srvid;
575 uint16_t *caid;
576 uint32_t *provid;
577 uint16_t *srvid;
578 struct s_sidtab *next;
579} SIDTAB;
580
581typedef struct s_filter {
582 uint16_t caid;
583 uchar nprids;
584 uint32_t prids[CS_MAXPROV];
585} FILTER;
586
587typedef struct s_ftab {
588 int32_t nfilts;
589 FILTER filts[CS_MAXFILTERS];
590} FTAB;
591
592struct ncd_port {
593 bool ncd_key_is_set;
594 uint8_t ncd_key[14];
595 FTAB ncd_ftab;
596};
597
598typedef struct s_port {
599 int32_t fd;
600 int32_t s_port;
601 struct ncd_port *ncd; // newcamd specific settings
602} PORT;
603
604typedef struct s_ptab {
605 int32_t nports;
606 PORT ports[CS_MAXPORTS];
607} PTAB;
608
609typedef struct aes_entry {
610 uint16_t keyid;
611 uint16_t caid;
612 uint32_t ident;
613 uchar plainkey[16];
614 AES_KEY key;
615 struct aes_entry *next;
616} AES_ENTRY;
617
618struct s_ecm {
619 uchar ecmd5[CS_ECMSTORESIZE];
620 uchar cw[16];
621 uint16_t caid;
622 uint64_t grp;
623 struct s_reader *reader;
624 int32_t rc;
625 time_t time;
626};
627
628struct s_emm {
629 uchar emmd5[CS_EMMSTORESIZE];
630 uchar type;
631 int32_t count;
632};
633
634typedef struct v_ban { // Failban listmember
635 int32_t v_count;
636 IN_ADDR_T v_ip;
637 int32_t v_port;
638 time_t v_time;
639 char *info;
640} V_BAN;
641
642typedef struct s_cacheex_stat_entry { // Cacheex stats listmember
643 int32_t cache_count;
644 time_t cache_last;
645 uint16_t cache_caid;
646 uint16_t cache_srvid;
647 uint32_t cache_prid;
648 int8_t cache_direction; // 0 = push / 1 = got
649} S_CACHEEX_STAT_ENTRY;
650
651typedef struct s_entitlement { // contains entitlement Info
652 uint64_t id; // the element ID
653 uint32_t type; // enumerator for tier,chid whatever
654 // 0="", 1="Package", 2="PPV-Event", 3="chid", 4="tier", 5 = "class", 6 = "PBM". 7 = "seca-admin"
655 uint16_t caid; // the caid of element
656 uint32_t provid; // the provid of element
657 uint32_t class; // the class needed for some systems
658 time_t start; // startdate
659 time_t end; // enddate
660} S_ENTITLEMENT;
661
662struct s_client ;
663struct ecm_request_t ;
664struct emm_packet_t ;
665struct s_ecm_answer ;
666
667struct s_module {
668 int8_t active;
669 int8_t type;
670 int8_t large_ecm_support;
671 int16_t listenertype;
672 char *desc;
673 //int32_t s_port;
674 IN_ADDR_T s_ip;
675 uint16_t bufsize;
676 void *(*s_handler)(struct s_client *, uchar *, int32_t);
677 void (*s_init)(struct s_client *);
678 int32_t (*recv)(struct s_client *, uchar *, int32_t);
679 void (*send_dcw)(struct s_client*, struct ecm_request_t *);
680 void (*cleanup)(struct s_client*);
681 int32_t (*c_recv_chk)(struct s_client*, uchar *, int32_t *, uchar *, int32_t);
682 int32_t (*c_init)(struct s_client*);
683 int32_t (*c_send_ecm)(struct s_client *, struct ecm_request_t *, uchar *);
684 int32_t (*c_send_emm)(struct emm_packet_t *);
685 int32_t (*c_available)(struct s_reader *, int32_t, struct ecm_request_t *); //Schlocke: available check for load-balancing,
686 // params:
687 // rdr (reader to check)
688 // int32_t checktype (0=return connected, 1=return loadbalance-avail) return int
689 void (*c_idle)(void); // Schlocke: called when reader is idle
690 void (*s_idle)(struct s_client*);
691 void (*c_card_info)(void); // Schlocke: request card infos
692#ifdef CS_CACHEEX
693 int32_t (*c_cache_push)(struct s_client*, struct ecm_request_t *); //Cache push
694 int32_t (*c_cache_push_chk)(struct s_client*, struct ecm_request_t *); //Cache push Node Check, 0=no push
695#endif
696 int32_t c_port;
697 PTAB ptab;
698 int32_t num;
699};
700
701struct s_ATR ;
702
703struct s_cardreader
704{
705 char *desc;
706 int32_t (*reader_init)(struct s_reader*);
707 int32_t (*get_status)(struct s_reader*, int*);
708 int32_t (*activate)(struct s_reader*, struct s_ATR *);
709 int32_t (*transmit)(struct s_reader*, unsigned char *sent, uint32_t size, uint32_t delay, uint32_t timeout);
710 int32_t (*receive)(struct s_reader*, unsigned char *data, uint32_t size, uint32_t delay, uint32_t timeout);
711 int32_t (*lock_init)(struct s_reader *);
712 void (*lock)(struct s_reader *);
713 void (*unlock)(struct s_reader *);
714 int32_t (*close)(struct s_reader*);
715 int32_t (*set_parity)(struct s_reader*, uchar parity);
716 // FIXME: All parameters passed to write_settingsX should be put in a struct
717 int32_t (*write_settings)(struct s_reader*,
718 uint32_t ETU,
719 uint32_t EGT,
720 unsigned char P,
721 unsigned char I,
722 uint16_t Fi,
723 unsigned char Di,
724 unsigned char Ni);
725 // FIXME: write_settings2 is used by coolstream reader
726 int32_t (*write_settings2)(struct s_reader *, uint32_t EGT, uint32_t BGT);
727 // FIXME: write_settings3 is used by sci reader
728 int32_t (*write_settings3)(struct s_reader *, uint32_t ETU, uint32_t WWT, uint32_t I);
729 int32_t (*set_protocol)(struct s_reader*,
730 unsigned char * params,
731 uint32_t *length,
732 uint32_t len_request);
733 int32_t (*set_baudrate)(struct s_reader*,
734 uint32_t baud); //set only for readers which need baudrate setting and timings need to be guarded by OSCam
735 int32_t (*card_write)(struct s_reader *pcsc_reader,
736 const uchar *buf,
737 unsigned char *cta_res,
738 uint16_t *cta_lr,
739 int32_t l);
740 void (*display_msg)(struct s_reader *, char *msg);
741 void (*set_transmit_timeout)(struct s_reader *);
742
743 int32_t (*do_reset)(struct s_reader *, struct s_ATR *,
744 int32_t (*rdr_activate_card)(struct s_reader *, struct s_ATR *, uint16_t deprecated),
745 int32_t (*rdr_get_cardsystem)(struct s_reader *, struct s_ATR *));
746
747 bool (*set_DTS_RTS)(struct s_reader *, int32_t *dtr, int32_t *rts);
748
749 int32_t typ; // fixme: workaround, remove when all old code is converted
750
751 int8_t max_clock_speed; // 1 for reader->typ > R_MOUSE
752 int8_t need_inverse; // 0 = reader does inversing; 1 = inversing done by oscam
753 //io_serial config
754 int8_t flush;
755 int8_t read_written; // 1 = written bytes has to read from device
756 int8_t timings_in_etu; // timings in ETU instead of us
757 bool skip_extra_atr_parsing;
758 bool skip_t1_command_retries;
759 bool skip_setting_ifsc;
760};
761
762struct s_cardsystem {
763 int8_t active;
764 char *desc;
765 int32_t (*card_init)(struct s_reader *reader, struct s_ATR *);
766 int32_t (*card_info)(struct s_reader *);
767 int32_t (*do_ecm)(struct s_reader *, const struct ecm_request_t *, struct s_ecm_answer *);
768 bool (*do_emm_reassembly)(struct s_reader *, struct emm_packet_t *); // Returns 1/true if the EMM is ready to be written in the card
769 int32_t (*do_emm)(struct s_reader *, struct emm_packet_t *);
770 void (*post_process)(struct s_reader *);
771 int32_t (*get_emm_type)(struct emm_packet_t *, struct s_reader *);
772 void (*get_emm_filter)(struct s_reader * rdr, uchar *filter);
773 uint16_t caids[2];
774};
775
776#define MAX_ECM_SIZE 512
777
778typedef struct ecm_request_t {
779 uchar ecm[MAX_ECM_SIZE];
780 uchar cw[16];
781 uchar ecmd5[CS_ECMSTORESIZE];
782 int16_t ecmlen;
783 uint16_t caid;
784 uint16_t ocaid; //original caid, used for betatunneling
785 uint16_t srvid;
786 uint16_t onid;
787 uint16_t tsid;
788 uint32_t ens;
789 uint16_t chid;
790 uint16_t pid;
791 uint16_t idx;
792 uint32_t prid;
793 struct s_reader *selected_reader;
794 struct s_ecm_answer *matching_rdr; //list of matching readers
795 const struct s_reader *fallback; //fallback is the first fallback reader in the list matching_rdr
796 struct s_client *client; //contains pointer to 'c' client while running in 'r' client
797 uint64_t grp;
798 int32_t msgid; // client pending table index
799 uint8_t stage; // processing stage in server module
800 int8_t rc;
801 uint8_t rcEx;
802 struct timeb tps; // incoming time stamp
803 uchar locals_done;
804 int8_t btun; // mark er as betatunneled
805 uint16_t reader_avail; // count of available readers
806 uint16_t reader_count; // count of contacted readers
807 uint16_t reader_requested; // count of real requested readers
808 int8_t checked; //for doublecheck
809 uchar cw_checked[16]; //for doublecheck
810 struct s_reader *origin_reader;
811
812#if defined MODULE_CCCAM
813 void *origin_card; // CCcam preferred card!
814#endif
815
816#if defined MODULE_GBOX
817 uint32_t gbox_crc; // rcrc for gbox, used to identify ECM task in peer responses
818 uint16_t gbox_ecm_id;
819 uint8_t gbox_ecm_ok;
820#endif
821
822 void *src_data;
823 struct ecm_request_t *ecmcacheptr; // Pointer to ecm-cw-rc-cache!
824#ifdef CS_CACHEEX
825 uchar cacheex_done;
826 struct s_client *cacheex_src; // Cacheex origin
827 int8_t cacheex_pushed; // to avoid duplicate pushs
828 int32_t csp_hash; // csp has its own hash
829 LLIST *csp_lastnodes; // last 10 Cacheex nodes atm cc-proto-only
830 uint32_t cacheex_wait_time; // cacheex wait time in ms
831 struct timeb cacheex_wait; // incoming time stamp (tps) + cacheex wait time
832#endif
833 char msglog[MSGLOGSIZE];
834 struct ecm_request_t *parent;
835 struct ecm_request_t *next;
836} ECM_REQUEST;
837
838
839struct s_ecm_answer {
840 uint8_t status;
841 struct s_reader *reader;
842 ECM_REQUEST *er;
843 int8_t rc;
844 uint8_t rcEx;
845 uchar cw[16];
846 char msglog[MSGLOGSIZE];
847#ifdef WITH_LB
848 int32_t value;
849 int32_t time;
850#endif
851 struct s_ecm_answer *next;
852};
853
854struct s_acasc_shm {
855 uint16_t ac_count : 15;
856 uint16_t ac_deny : 1;
857};
858
859struct s_acasc {
860 uint16_t stat[10];
861 uchar idx; // current active index in stat[]
862};
863
864struct s_cwresponse {
865 int32_t duration;
866 time_t timestamp;
867 int32_t rc;
868};
869
870struct s_cascadeuser {
871 uint16_t caid;
872 uint32_t prid;
873 uint16_t srvid;
874 time_t time;
875 int8_t cwrate;
876};
877
878typedef struct sidtabs {
879 SIDTABBITS ok; // positive services
880 SIDTABBITS no; // negative services
881} SIDTABS;
882
883struct s_client {
884 uint32_t tid;
885 int8_t init_done;
886 pthread_mutex_t thread_lock;
887 int8_t thread_active;
888 int8_t kill;
889 int8_t kill_started;
890 LLIST *joblist;
891 IN_ADDR_T ip;
892 in_port_t port;
893 time_t login; // connection
894 time_t logout; // disconnection
895 time_t last;
896 time_t lastswitch;
897 time_t lastemm;
898 time_t lastecm;
899 time_t expirationdate;
900 int32_t allowedtimeframe[2];
901 int8_t c35_suppresscmd08;
902 uint8_t c35_sleepsend;
903 int8_t ncd_keepalive;
904 int8_t disabled;
905 uint64_t grp;
906 int8_t crypted;
907 int8_t dup;
908 LLIST *aureader_list;
909 int8_t autoau;
910 int8_t monlvl;
911 CAIDTAB ctab;
912 TUNTAB ttab;
913 SIDTABS sidtabs;
914 int8_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
915 uint8_t module_idx;
916 uint16_t last_srvid;
917 uint16_t last_caid;
918 struct s_srvid *last_srvidptr;
919 int32_t tosleep;
920 struct s_auth *account;
921 int32_t udp_fd;
922 struct SOCKADDR udp_sa;
923 socklen_t udp_sa_len;
924 int8_t log;
925 int32_t logcounter;
926 int32_t cwfound; // count found ECMs per client
927 int32_t cwcache; // count ECMs from cache1/2 per client
928 int32_t cwnot; // count not found ECMs per client
929 int32_t cwtun; // count betatunneled ECMs per client
930 int32_t cwignored; // count ignored ECMs per client
931 int32_t cwtout; // count timeouted ECMs per client
932 int32_t cwlastresptime; //last Responsetime (ms)
933#ifdef CW_CYCLE_CHECK
934 int32_t cwcycledchecked; // count checked cwcycles per client
935 int32_t cwcycledok; // count pos checked cwcycles per client
936 int32_t cwcyclednok; // count neg checked cwcycles per client
937 int32_t cwcycledign; // count ign cwcycles per client
938#endif
939 int32_t emmok; // count EMM ok
940 int32_t emmnok; // count EMM nok
941 int8_t pending; // number of ECMs pending
942#ifdef CS_CACHEEX
943 int32_t cwcacheexpush; // count pushed ecms/cws
944 int32_t cwcacheexgot; // count got ecms/cws
945 int32_t cwcacheexhit; // count hit ecms/cws
946 LLIST *ll_cacheex_stats; // List for Cacheex statistics
947 int8_t cacheex_maxhop;
948 int32_t cwcacheexerr; //cw=00 or chksum wrong
949 int32_t cwcacheexerrcw; //Same Hex, different CW
950#endif
951
952#ifdef WEBIF
953 struct s_cwresponse cwlastresptimes[CS_ECM_RINGBUFFER_MAX]; //ringbuffer for last 20 times
954 int32_t cwlastresptimes_last; // ringbuffer pointer
955 int8_t wihidden; // hidden in webinterface status
956 char lastreader[64]; // last cw got from this reader
957#endif
958
959 uchar ucrc[4]; // needed by monitor and used by camd35
960 uint32_t pcrc; // password crc
961 AES_KEY aeskey; // encryption key needed by monitor and used by camd33, camd35
962 AES_KEY aeskey_decrypt; // decryption key needed by monitor and used by camd33, camd35
963 uint16_t ncd_msgid;
964 uint16_t ncd_client_id;
965 uchar ncd_skey[16]; //Also used for camd35 Cacheex to store remote node id
966
967#ifdef MODULE_CCCAM
968 void *cc;
969#endif
970
971#ifdef MODULE_GBOX
972 void *gbox;
973 uint8_t gbox_cw_id[2];
974 uint8_t gbox_peer_id[2];
975 uint8_t gbox_ver;
976#endif
977
978#ifdef MODULE_GHTTP
979 void *ghttp;
980#endif
981
982 int32_t port_idx; // index in server ptab
983 int32_t ncd_server; // newcamd server
984
985#ifdef CS_ANTICASC
986 int32_t ac_fakedelay; // When this is -1, the global ac_fakedelay is used
987 uint16_t ac_limit;
988 int8_t ac_penalty;
989 struct s_acasc_shm acasc;
990#endif
991
992 FTAB fchid;
993 FTAB ftab; // user [caid] and ident filter
994 CLASSTAB cltab;
995
996 int32_t pfd; // Primary FD, must be closed on exit
997 struct s_reader *reader; // points to s_reader when cl->typ='r'
998
999 ECM_REQUEST *ecmtask;
1000 struct s_emm *emmcache;
1001
1002 pthread_t thread;
1003
1004#ifdef MODULE_SERIAL
1005 struct s_serial_client *serialdata;
1006#endif
1007 //reader common
1008 int32_t last_idx;
1009 uint16_t idx;
1010 int8_t rotate;
1011
1012 int8_t ncd_proto;
1013 uint8_t ncd_header[12];
1014
1015 //camd35
1016 uchar upwd[64];
1017 int8_t is_udp;
1018 int8_t stopped;
1019 uint16_t lastcaid;
1020 uint16_t lastsrvid;
1021 int32_t lastpid;
1022 time_t emm_last;
1023 int8_t disable_counter;
1024 uchar lastserial[8];
1025
1026 //monitor
1027 int8_t auth;
1028
1029 //oscam.c
1030 struct timeval tv;
1031
1032 // Failban value set bitwise - compared with BAN_
1033 int32_t failban;
1034 int8_t cleaned;
1035
1036 LLIST *cascadeusers; //s_cascadeuser
1037
1038#ifdef MODULE_PANDORA
1039 int32_t pand_autodelay;
1040 uint8_t pand_send_ecm;
1041 uchar pand_ignore_ecm;
1042 uchar pand_md5_key[16];
1043#endif
1044
1045 struct s_client *next; //make client a linked list
1046 struct s_client *nexthashed;
1047};
1048
1049struct geo_cache { //for viaccess var in s_reader:
1050 uint32_t provid;
1051 uchar geo[256];
1052 uchar geo_len;
1053 int32_t number_ecm;
1054};
1055
1056struct s_CmdTabEntry { // for videoguard in s_reader
1057 unsigned char cla;
1058 unsigned char cmd;
1059 unsigned char len;
1060 unsigned char mode;
1061};
1062
1063struct s_CmdTab {
1064 unsigned char index;
1065 unsigned char size;
1066 unsigned char Nentries;
1067 unsigned char dummy;
1068 struct s_CmdTabEntry e[1];
1069};
1070
1071struct s_ecmWhitelist {
1072 uint16_t caid;
1073 struct s_ecmWhitelistIdent *idents;
1074 struct s_ecmWhitelist *next;
1075};
1076
1077struct s_ecmWhitelistIdent {
1078 uint32_t ident;
1079 struct s_ecmWhitelistLen *lengths;
1080 struct s_ecmWhitelistIdent *next;
1081};
1082
1083struct s_ecmWhitelistLen {
1084 int16_t len;
1085 struct s_ecmWhitelistLen *next;
1086};
1087
1088struct s_ecmHeaderwhitelist {
1089 uint16_t caid;
1090 uint32_t provid;
1091 uchar header[20];
1092 int16_t len;
1093 struct s_ecmHeaderwhitelist *next;
1094};
1095
1096//ratelimit
1097struct ecmrl {
1098 uint16_t srvid;
1099 time_t last;
1100 uchar ecmd5[CS_ECMSTORESIZE];
1101
1102};
1103#define MAXECMRATELIMIT 20
1104
1105struct s_sc8in1_display {
1106 char *text;
1107 uint16_t text_length;
1108 uint16_t char_change_time;
1109 uint16_t last_char;
1110 uint8_t blocking;
1111 struct s_sc8in1_display *next;
1112};
1113struct s_sc8in1_config {
1114 struct termios stored_termio[8];
1115 uint16_t current_slot;
1116 uint32_t current_baudrate;
1117 struct s_reader *current_reader;
1118 unsigned char cardstatus;
1119 unsigned char mcr_type;
1120 CS_MUTEX_LOCK sc8in1_lock;
1121 struct s_sc8in1_display *display;
1122 CS_MUTEX_LOCK sc8in1_display_lock;
1123 unsigned char display_running;
1124 pthread_t display_thread;
1125};
1126
1127#ifdef CS_CACHEEX
1128typedef struct ce_csp_tab {
1129 uint16_t n;
1130 int32_t caid[CS_MAXCAIDTAB];
1131 int32_t cmask[CS_MAXCAIDTAB];
1132 int32_t prid[CS_MAXCAIDTAB];
1133 int32_t srvid[CS_MAXCAIDTAB];
1134 int16_t awtime[CS_MAXCAIDTAB];
1135 int16_t dwtime[CS_MAXCAIDTAB];
1136} CECSPVALUETAB;
1137
1138typedef struct ce_csp_t {
1139 int8_t mode;
1140 int8_t maxhop;
1141 CECSPVALUETAB filter_caidtab;
1142 uint8_t allow_request;
1143 uint8_t drop_csp;
1144} CECSP;
1145#endif
1146
1147struct s_reader //contains device info, reader info and card info
1148{
1149 uint8_t changes_since_shareupdate;
1150 int32_t resetcycle; // ECM until reset
1151 int32_t resetcounter; // actual count
1152 uint32_t auprovid; // AU only for this provid
1153 int8_t audisabled; // exclude reader from auto AU
1154 int8_t smargopatch;
1155 struct s_client *client; // pointer to 'r'client this reader is running in
1156 LLIST *ll_entitlements; // entitlements
1157 int8_t enable;
1158 int8_t active;
1159 int8_t dropbadcws; // Schlocke: 1=drops cw if checksum is wrong. 0=fix checksum (default)
1160 int8_t disablecrccws; // 1=disable cw checksum test. 0=enable checksum check
1161 int8_t fd_error;
1162 uint64_t grp;
1163 int8_t fallback;
1164#ifdef CS_CACHEEX
1165 CECSP cacheex; //CacheEx Settings
1166#endif
1167 int32_t typ;
1168#ifdef WITH_COOLAPI
1169 int32_t cool_timeout_init; // read/transmit timeout while init for coolstream internal reader
1170 int32_t cool_timeout_after_init; // read/transmit timeout after init for coolstream internal reader
1171#endif
1172 char label[64];
1173#ifdef WEBIF
1174 char *description;
1175#endif
1176 char device[128];
1177 void *spec_dev; // pointer to structure that contains specific device data
1178 uint16_t slot; // in case of multiple slots like sc8in1; first slot = 1
1179 int32_t handle; // device handle
1180 int32_t fdmc; // device handle for multicam
1181#ifdef WITH_STAPI
1182 uint32_t stsmart_handle; // device handle for stsmart driver
1183#endif
1184 char pcsc_name[128];
1185 int8_t pcsc_has_card;
1186 int32_t detect;
1187 int32_t mhz; // actual clock rate of reader in 10khz steps
1188 int32_t cardmhz; // standard clock speed your card should have in 10khz steps; normally 357 but for Irdeto cards 600
1189 int32_t divider; // PLL divider for internal readers
1190 int32_t r_port;
1191 char r_usr[64];
1192 char r_pwd[64];
1193 char l_pwd[64];
1194 int32_t l_port;
1195 CAIDTAB ctab;
1196 uint32_t boxid;
1197 int8_t nagra_read; // read nagra ncmed records: 0 Disabled (default), 1 read all records, 2 read valid records only
1198 uint8_t boxkey[8]; // n3 boxkey 8byte
1199 char country_code[3]; // irdeto country code.
1200 int8_t force_irdeto;
1201 uchar rsa_mod[120]; // rsa modulus for nagra cards.
1202 uchar atr[64];
1203 uchar card_atr[64]; // ATR readed from card
1204 int8_t card_atr_length; // length of ATR
1205 int32_t atrlen;
1206 SIDTABS sidtabs;
1207 uchar hexserial[8];
1208 int32_t nprov;
1209 uchar prid[CS_MAXPROV][8];
1210 uchar availkeys[CS_MAXPROV][16]; // viaccess; misused in seca, if availkeys[PROV][0]=0 then expired, 1 then valid.
1211 uchar sa[CS_MAXPROV][4]; // viaccess & seca
1212 uint16_t acs; // irdeto
1213 uint16_t caid;
1214 uint16_t b_nano;
1215 uint16_t s_nano;
1216 int8_t ecmcommand; // used for filtering nagra bad ecm commands
1217 uchar ecmcommandcache[4]; // cachebuff for ecm commands
1218 int32_t blockemm;
1219 int32_t saveemm;
1220 int16_t blockemmbylen[CS_MAXEMMBLOCKBYLEN];
1221 char *emmfile;
1222 char pincode[5];
1223 int32_t ucpk_valid;
1224 int8_t logemm;
1225 int8_t cachemm;
1226 int16_t rewritemm;
1227 int8_t card_status;
1228 int8_t deprecated; //if 0 ATR obeyed, if 1 default speed (9600) is chosen; for devices that cannot switch baudrate
1229 int32_t reassemble_emm_len;
1230 uint8_t reassemble_emm[512];
1231 struct s_module ph;
1232 struct s_cardreader crdr;
1233 struct s_cardsystem csystem;
1234 uint8_t ncd_key[14];
1235 uchar ncd_skey[16];
1236 int8_t ncd_connect_on_init;
1237 int8_t ncd_disable_server_filt;
1238 int8_t ncd_proto;
1239 int8_t currenthops; // number of hops (cccam & gbox)
1240#ifdef MODULE_CCCAM
1241 char cc_version[7]; // cccam version
1242 char cc_build[7]; // cccam build number
1243 int8_t cc_maxhops; // cccam max distance
1244 int8_t cc_mindown; // cccam min downhops
1245 int8_t cc_want_emu; // Schlocke: Client want to have EMUs, 0 - NO; 1 - YES
1246 uint32_t cc_id;
1247 int8_t cc_keepalive;
1248 int8_t cc_hop; // For non-cccam reader: hop for virtual cards
1249 int8_t cc_reshare;
1250 int32_t cc_reconnect; //reconnect on ecm-request timeout
1251#endif
1252 int8_t tcp_connected;
1253 int32_t tcp_ito; // inactivity timeout
1254 int32_t tcp_rto; // reconnect timeout
1255 struct timeb tcp_block_connect_till; //time tcp connect ist blocked
1256 int32_t tcp_block_delay; //incrementing block time
1257 time_t last_g; // get (if last_s-last_g>tcp_rto - reconnect )
1258 time_t last_s; // send
1259 time_t last_check; // last checked
1260 FTAB fchid;
1261 FTAB ftab;
1262 CLASSTAB cltab;
1263 struct s_ecmWhitelist *ecmWhitelist;
1264 struct s_ecmHeaderwhitelist *ecmHeaderwhitelist; // ECM Header Whitelist
1265 int32_t brk_pos;
1266 int32_t msg_idx;
1267 int32_t secatype; // 0=not determined, 2=seca2, 3=nagra(~seca3) this is only valid for localreaders!
1268 double worketu; // in us for internal and external readers calculated (1/D)*(F/cardclock)*1000000
1269 uint32_t maxreadtimeout; // in us
1270 uint32_t minreadtimeout; // in us
1271 uint32_t maxwritetimeout; // in us
1272 uint32_t minwritetimeout; // in us
1273#if defined(WEBIF) || defined(LCDSUPPORT)
1274 int32_t emmwritten[4]; // count written EMM
1275 int32_t emmskipped[4]; // count skipped EMM
1276 int32_t emmerror[4]; // count error EMM
1277 int32_t emmblocked[4]; // count blocked EMM
1278 int32_t lbvalue; // loadbalance Value
1279#endif
1280#ifdef CARDREADER_PCSC
1281 SCARDCONTEXT hContext;
1282 SCARDHANDLE hCard;
1283 DWORD dwActiveProtocol;
1284#endif
1285#ifdef CARDREADER_SMART
1286 struct s_sr_config *sr_config;
1287#endif
1288#ifdef WITH_AZBOX
1289 int32_t azbox_mode;
1290#endif
1291 int32_t use_gpio; // Should this reader use GPIO functions
1292 int gpio_outen; // fd of opened /dev/gpio/outen
1293 int gpio_out; // fd of opened /dev/gpio/out
1294 int gpio_in; // fd of opened /dev/gpio/in
1295 uint32_t gpio; // gpio addr
1296 ////variables from icc_async.h start
1297#ifdef WITH_CARDREADER
1298 int32_t convention; // Convention of this ICC
1299 unsigned char protocol_type; // Type of protocol
1300 uint32_t current_baudrate; // (for overclocking uncorrected) baudrate to prevent unnecessary conversions from/to termios structure
1301 uint32_t read_timeout; // Max timeout (ms) to receive characters
1302 uint32_t block_delay; // Delay (ms) after starting to transmit
1303 uint32_t char_delay; // Delay (ms) after transmiting each sucesive char
1304 ////variables from io_serial.h
1305 int32_t written; // keep score of how much bytes are written to serial port, since they are echoed back they have to be read
1306#endif
1307 uint32_t BWT,CWT; // (for overclocking uncorrected) block waiting time, character waiting time, in ETU
1308 ////variables from protocol_t1.h
1309 uint16_t ifsc; // Information field size for the ICC
1310 unsigned char ns; // Send sequence number
1311 ////variables from reader-dre.c
1312 unsigned char provider;
1313 ////variables from reader-nagra.c
1314 IDEA_KEY_SCHEDULE ksSession;
1315 int8_t is_pure_nagra;
1316 int8_t is_tiger;
1317 int8_t is_n3_na;
1318 int8_t has_dt08;
1319 int8_t swapCW;
1320 uint8_t ExpiryDate[2];
1321 uint8_t ActivationDate[2];
1322 unsigned char rom[15];
1323 unsigned char plainDT08RSA[64];
1324 unsigned char IdeaCamKey[16];
1325 unsigned char irdId[4];
1326 unsigned char sessi[16];
1327 unsigned char signature[8];
1328 unsigned char cam_state[3];
1329 ////variables from reader-irdeto.c
1330 int32_t acs57; // A flag for the ACS57 ITA DVB-T
1331 ////variables from reader-cryptoworks.c
1332 BIGNUM exp;
1333 BIGNUM ucpk;
1334 ////variables from reader-viaccess.c
1335 struct geo_cache last_geo;
1336#ifdef WITH_LB
1337 int32_t lb_weight; //loadbalance weight factor, if unset, weight=100. The higher the value, the higher the usage-possibility
1338 int32_t lb_usagelevel; //usagelevel for loadbalancer
1339 int32_t lb_usagelevel_ecmcount;
1340 time_t lb_usagelevel_time; //time for counting ecms, this creates usagelevel
1341 struct timeb lb_last; //time for oldest reader
1342 LLIST *lb_stat; //loadbalancer reader statistics
1343 CS_MUTEX_LOCK lb_stat_lock;
1344#endif
1345
1346 AES_ENTRY *aes_list; // multi AES linked list
1347 // variables from reader-videoguard*
1348 int8_t ndsversion; // 0 auto (default), 1 NDS1, 12 NDS1+, 2 NDS2
1349 const char *card_desc;
1350 int32_t card_baseyear;
1351 int32_t card_tierstart;
1352 int32_t card_system_version;
1353 time_t card_valid_to;
1354 struct s_CmdTab *cmd_table;
1355 uint16_t cardkeys[3][32];
1356 unsigned char stateD3A[16];
1357 AES_KEY ekey;
1358 AES_KEY astrokey;
1359 //ratelimit
1360 int32_t ratelimitecm;
1361 int32_t ratelimitseconds;
1362 int8_t ecmunique; // check for matching ecm hash in ratelimitslot
1363 int32_t srvidholdseconds; // seconds to keep srvid in ratelimitslot (during this time not checked for ecmunique!)
1364 time_t lastdvbapirateoverride;
1365 uint32_t ecmsok;
1366 uint32_t ecmsnok;
1367 uint32_t ecmnotfoundlimit; // config setting. restart reader if ecmsnok >= ecmnotfoundlimit
1368 int32_t ecmsfilteredhead; // count filtered ECM's by ECM Headerwhitelist
1369 int32_t ecmsfilteredlen; // count filtered ECM's by ECM Whitelist
1370 float ecmshealthok;
1371 float ecmshealthnok;
1372 int32_t cooldown[2];
1373 int8_t cooldownstate;
1374 time_t cooldowntime;
1375 struct ecmrl rlecmh[MAXECMRATELIMIT];
1376 int8_t fix_9993;
1377 uint8_t ins7E[0x1A+1];
1378 uint8_t ins7E11[0x01+1];
1379 int8_t ins7e11_fast_reset;
1380 struct s_sc8in1_config *sc8in1_config;
1381 uint8_t sc8in1_dtrrts_patch; // fix for kernel commit 6a1a82df91fa0eb1cc76069a9efe5714d087eccd
1382#ifdef MODULE_GBOX
1383 char gbox_my_password[9];
1384 int8_t gbox_maxdist;
1385 int8_t gbox_maxecmsend;
1386 int8_t gbox_reshare;
1387 uint16_t gbox_peer_id;
1388 uint64_t gbox_grp;
1389#endif
1390
1391#ifdef MODULE_PANDORA
1392 uint8_t pand_send_ecm;
1393#endif
1394 uint8_t cnxlastecm; // == 0 - las ecm has not been paired ecm, > 0 last ecm has been paired ecm
1395
1396 uint8_t bulcrypt_version;
1397 uint8_t griffin_cmd_base; // Griffin command base, depends on the card
1398 uint8_t emm_reassembly;
1399
1400 struct s_reader *next;
1401};
1402
1403struct s_cpmap
1404{
1405 uint16_t caid;
1406 uint32_t provid;
1407 uint16_t sid;
1408 uint16_t chid;
1409 uint16_t dwtime;
1410 struct s_cpmap *next;
1411};
1412
1413struct s_auth
1414{
1415 char usr[64];
1416 char *pwd;
1417#ifdef WEBIF
1418 char *description;
1419#endif
1420 int8_t uniq;
1421#ifdef CS_CACHEEX
1422 CECSP cacheex; //CacheEx Settings
1423#endif
1424 int16_t allowedprotocols;
1425 LLIST *aureader_list;
1426 int8_t autoau;
1427 int8_t monlvl;
1428 uint64_t grp;
1429 int32_t tosleep;
1430 CAIDTAB ctab;
1431 SIDTABS sidtabs;
1432 FTAB fchid;
1433 FTAB ftab; // user [caid] and ident filter
1434 CLASSTAB cltab;
1435 TUNTAB ttab;
1436#ifdef CS_ANTICASC
1437 int32_t ac_fakedelay; // When this is -1, the global ac_fakedelay is used
1438 int32_t ac_users; // 0 - unlimited
1439 int8_t ac_penalty; // 0 - log, >0 - fake dw
1440 struct s_acasc ac_stat;
1441#endif
1442 IN_ADDR_T dynip;
1443 char *dyndns;
1444 time_t expirationdate;
1445 time_t firstlogin;
1446 int32_t allowedtimeframe[2];
1447 int8_t c35_suppresscmd08;
1448 uint8_t c35_sleepsend;
1449 int8_t ncd_keepalive;
1450#ifdef MODULE_CCCAM
1451 int32_t cccmaxhops;
1452 int8_t cccreshare;
1453 int8_t cccignorereshare;
1454 int8_t cccstealth;
1455#endif
1456 int8_t disabled;
1457 int32_t failban;
1458
1459 int32_t cwfound;
1460 int32_t cwcache;
1461 int32_t cwnot;
1462 int32_t cwtun;
1463 int32_t cwignored;
1464 int32_t cwtout;
1465#ifdef CW_CYCLE_CHECK
1466 int32_t cwcycledchecked; // count checked cwcycles per client
1467 int32_t cwcycledok; // count pos checked cwcycles per client
1468 int32_t cwcyclednok; // count neg checked cwcycles per client
1469 int32_t cwcycledign; // count ign cwcycles per client
1470#endif
1471 int32_t emmok;
1472 int32_t emmnok;
1473#ifdef CS_CACHEEX
1474 int32_t cwcacheexpush; // count pushed ecms/cws
1475 int32_t cwcacheexgot; // count got ecms/cws
1476 int32_t cwcacheexhit; // count hit ecms/cws
1477 int32_t cwcacheexerr; //cw=00 or chksum wrong
1478 int32_t cwcacheexerrcw; //Same Hex, different CW
1479#endif
1480 struct s_auth *next;
1481};
1482
1483struct s_srvid
1484{
1485 uint16_t srvid;
1486 int8_t ncaid;
1487 uint16_t caid[10];
1488 char *data;
1489 char *prov;
1490 char *name;
1491 char *type;
1492 char *desc;
1493 struct s_srvid *next;
1494};
1495
1496struct s_tierid
1497{
1498 uint16_t tierid;
1499 int8_t ncaid;
1500 uint16_t caid[10];
1501 char name[33];
1502 struct s_tierid *next;
1503};
1504
1505struct s_provid
1506{
1507 uint16_t caid;
1508 uint32_t provid;
1509 char prov[33];
1510 char sat[33];
1511 char lang[33];
1512 struct s_provid *next;
1513};
1514
1515struct s_ip
1516{
1517 IN_ADDR_T ip[2];
1518 struct s_ip *next;
1519};
1520
1521struct s_global_whitelist
1522{
1523 uint32_t line; //linenr of oscam.whitelist file, starting with 1
1524 char type; // w or i or l
1525 uint16_t caid;
1526 uint32_t provid;
1527 uint16_t srvid;
1528 uint16_t chid;
1529 uint16_t pid;
1530 uint16_t ecmlen;
1531 uint16_t mapcaid;
1532 uint32_t mapprovid;
1533 struct s_global_whitelist *next;
1534};
1535
1536struct s_cacheex_matcher
1537{
1538 uint32_t line; //linenr of oscam.Cacheex file, starting with 1
1539 char type; // m
1540 uint16_t caid;
1541 uint32_t provid;
1542 uint16_t srvid;
1543 uint16_t chid;
1544 uint16_t pid;
1545 uint16_t ecmlen;
1546
1547 uint16_t to_caid;
1548 uint32_t to_provid;
1549 uint16_t to_srvid;
1550 uint16_t to_chid;
1551 uint16_t to_pid;
1552 uint16_t to_ecmlen;
1553
1554 int32_t valid_from;
1555 int32_t valid_to;
1556
1557 struct s_cacheex_matcher *next;
1558};
1559
1560typedef struct csp_ce_hit_t {
1561 time_t time;
1562 int16_t ecmlen;
1563 uint16_t caid;
1564 uint32_t prid;
1565 uint16_t srvid;
1566 uint64_t grp;
1567 struct csp_ce_hit_t *prev;
1568 struct csp_ce_hit_t *next;
1569} CSPCEHIT;
1570
1571struct s_config
1572{
1573 int32_t nice;
1574 uint32_t netprio;
1575 uint32_t ctimeout;
1576 uint32_t ftimeout;
1577 uint32_t cmaxidle;
1578 int32_t ulparent;
1579 uint32_t delay;
1580 int32_t bindwait;
1581 int32_t tosleep;
1582 IN_ADDR_T srvip;
1583 char *usrfile;
1584 char *cwlogdir;
1585 char *emmlogdir;
1586 char *logfile;
1587 char *mailfile;
1588 uint8_t logtostdout;
1589 uint8_t logtosyslog;
1590 int8_t logduplicatelines;
1591#if defined(WEBIF) || defined(MODULE_MONITOR)
1592 uint32_t loghistorysize;
1593#endif
1594 int8_t disablelog;
1595 int8_t disablemail;
1596 int8_t disableuserfile;
1597 int8_t usrfileflag;
1598 struct s_auth *account;
1599 struct s_srvid *srvid[16];
1600 struct s_tierid *tierid;
1601 //Todo #ifdef CCCAM
1602 struct s_provid *provid;
1603 struct s_sidtab *sidtab;
1604#ifdef MODULE_MONITOR
1605 int32_t mon_port;
1606 IN_ADDR_T mon_srvip;
1607 struct s_ip *mon_allowed;
1608 uint8_t mon_level;
1609#endif
1610 int32_t aulow;
1611 int32_t hideclient_to;
1612 int8_t appendchaninfo;
1613#ifdef WEBIF
1614 int32_t http_port;
1615 char *http_user;
1616 char *http_pwd;
1617 char *http_css;
1618 int32_t http_prepend_embedded_css;
1619 char *http_jscript;
1620 char *http_tpl;
1621 char *http_script;
1622 int32_t http_refresh;
1623 int8_t http_hide_idle_clients;
1624 char *http_hide_type;
1625 int8_t http_showpicons;
1626 struct s_ip *http_allowed;
1627 int8_t http_readonly;
1628 IN_ADDR_T http_dynip[MAX_HTTP_DYNDNS];
1629 uchar http_dyndns[MAX_HTTP_DYNDNS][64];
1630 int8_t http_use_ssl;
1631 int8_t http_force_sslv3;
1632 char *http_cert;
1633 char *http_help_lang;
1634#endif
1635 int8_t http_full_cfg;
1636 int32_t failbantime;
1637 int32_t failbancount;
1638 LLIST *v_list; // Failban list
1639#ifdef MODULE_CAMD33
1640 int32_t c33_port;
1641 IN_ADDR_T c33_srvip;
1642 uint8_t c33_key[16];
1643 int32_t c33_crypted;
1644 int32_t c33_passive;
1645 struct s_ip *c33_plain;
1646#endif
1647#if defined(MODULE_CAMD35) || defined(MODULE_CAMD35_TCP)
1648 int32_t c35_port;
1649 IN_ADDR_T c35_srvip;
1650 int8_t c35_tcp_suppresscmd08;
1651 int8_t c35_udp_suppresscmd08;
1652 PTAB c35_tcp_ptab;
1653 IN_ADDR_T c35_tcp_srvip;
1654#endif
1655 int8_t c35_suppresscmd08; // used in cccam module
1656#ifdef MODULE_NEWCAMD
1657 PTAB ncd_ptab;
1658 IN_ADDR_T ncd_srvip;
1659 uint8_t ncd_key[14];
1660 int8_t ncd_keepalive;
1661 int8_t ncd_mgclient;
1662 struct s_ip *ncd_allowed;
1663#endif
1664#ifdef MODULE_RADEGAST
1665 int32_t rad_port;
1666 IN_ADDR_T rad_srvip;
1667 struct s_ip *rad_allowed;
1668 char *rad_usr;
1669#endif
1670#ifdef MODULE_CCCAM
1671 uint16_t cc_port[CS_MAXPORTS];
1672 int8_t cc_reshare;
1673 int8_t cc_ignore_reshare;
1674 int32_t cc_update_interval;
1675 IN_ADDR_T cc_srvip;
1676 char cc_version[7];
1677 int8_t cc_minimize_cards;
1678 int8_t cc_keep_connected;
1679 int8_t cc_stealth;
1680 int8_t cc_reshare_services;
1681 int8_t cc_forward_origin_card;
1682 uint8_t cc_fixed_nodeid[8];
1683 uint32_t cc_recv_timeout; // The poll() timeout parameter in ms. Default: DEFAULT_CC_RECV_TIMEOUT (2000 ms).
1684#endif
1685#ifdef MODULE_GBOX
1686 char *gbox_hostname;
1687 unsigned long gbox_card[CS_GBOX_MAX_LOCAL_CARDS]; // gbox list of local cards
1688 int32_t gbox_local_cards_num; // number of local card gbox cards
1689 int32_t gbox_reconnect;
1690#endif
1691#ifdef MODULE_SERIAL
1692 char *ser_device;
1693#endif
1694 uint32_t srtimeout; // SerialReaderTimeount in millisec
1695 int32_t max_log_size;
1696 int8_t waitforcards;
1697 int32_t waitforcards_extra_delay;
1698 int8_t preferlocalcards;
1699 int32_t reader_restart_seconds; // schlocke: reader restart auf x seconds, disable = 0
1700 int8_t dropdups; // drop duplicate logins
1701
1702
1703//Loadbalancer-Config:
1704#ifdef WITH_LB
1705 int32_t lb_mode; // schlocke: reader loadbalancing mode
1706 int32_t lb_save; // schlocke: load/save statistics to file, save every x ecms
1707 int32_t lb_nbest_readers; // count of best readers
1708 int32_t lb_nfb_readers; // count of fallback readers
1709 int32_t lb_min_ecmcount; // minimal ecm count to evaluate lbvalues
1710 int32_t lb_max_ecmcount; // maximum ecm count before reseting lbvalues
1711 int32_t lb_reopen_seconds; // time between retrying failed readers/caids/prov/srv
1712 int32_t lb_retrylimit; // reopen only happens if reader response time > retrylimit
1713 CAIDVALUETAB lb_retrylimittab;
1714 CAIDVALUETAB lb_nbest_readers_tab; // like nbest_readers, but for special caids
1715 CAIDTAB lb_noproviderforcaid; // do not store loadbalancer stats with providers for this caid
1716 char *lb_savepath; // path where the stat file is save. Empty=default=/tmp/.oscam/stat
1717 int32_t lb_stat_cleanup; // duration in hours for cleaning old statistics
1718 int32_t lb_reopen_mode; // reopen readers mode
1719 int32_t lb_max_readers; // limit the amount of readers during learning
1720 int32_t lb_auto_betatunnel; // automatic selection of betatunnel convertion based on learned data
1721 int32_t lb_auto_betatunnel_mode; // automatic selection of betatunnel direction
1722 int32_t lb_auto_betatunnel_prefer_beta; // prefer-beta-over-nagra factor
1723 int32_t lb_auto_timeout; // Automatic timeout by loadbalancer statistics
1724 int32_t lb_auto_timeout_p; // percent added to avg time as timeout time
1725 int32_t lb_auto_timeout_t; // minimal time added to avg time as timeout time
1726#endif
1727 int32_t resolve_gethostbyname;
1728 int8_t double_check; // schlocke: Double checks each ecm+dcw from two (or more) readers
1729 CAIDTAB double_check_caid; // do not store loadbalancer stats with providers for this caid
1730
1731#ifdef HAVE_DVBAPI
1732 int8_t dvbapi_enabled;
1733 int8_t dvbapi_au;
1734 char *dvbapi_usr;
1735 int8_t dvbapi_boxtype;
1736 int8_t dvbapi_pmtmode;
1737 int8_t dvbapi_requestmode;
1738 SIDTABS dvbapi_sidtabs;
1739 int8_t dvbapi_reopenonzap;
1740 int8_t dvbapi_decodeforever; // do not stop after 3 tries
1741 int32_t dvbapi_delayer; // delayer ms, minimum time to write cw
1742#endif
1743
1744#ifdef CS_ANTICASC
1745 int8_t ac_enabled;
1746 int32_t ac_users; // num of users for account (0 - default)
1747 int32_t ac_stime; // time to collect AC statistics (3 min - default)
1748 int32_t ac_samples; // qty of samples
1749 int8_t ac_penalty; // 0 - write to log
1750 int32_t ac_fakedelay; // 100-1000 ms
1751 int32_t ac_denysamples;
1752 char *ac_logfile;
1753 struct s_cpmap *cpmap;
1754#endif
1755
1756#ifdef LEDSUPPORT
1757 int8_t enableled; // 0=disabled led, 1=enable led for routers, 2=enable qboxhd led
1758#endif
1759
1760#ifdef LCDSUPPORT
1761 int8_t enablelcd;
1762 char *lcd_output_path;
1763 int32_t lcd_hide_idle;
1764 int32_t lcd_write_intervall;
1765#endif
1766
1767#ifdef MODULE_PANDORA
1768 int8_t pand_skip_send_dw;
1769 struct s_ip *pand_allowed;
1770 char *pand_usr;
1771 char *pand_pass;
1772 int8_t pand_ecm;
1773 int32_t pand_port;
1774 IN_ADDR_T pand_srvip;
1775#endif
1776
1777 uint32_t max_cache_time; //seconds
1778 uint32_t max_cache_count; //count ecms
1779
1780 int8_t block_same_ip; //0=allow all, 1=block client requests to reader with same ip (default=1)
1781 int8_t block_same_name; //0=allow all, 1=block client requests to reader with same name (default=1)
1782
1783#ifdef CS_CACHEEX
1784 IN_ADDR_T csp_srvip;
1785 int32_t csp_port;
1786 CECSPVALUETAB cacheex_wait_timetab;
1787 CECSP csp; //CSP Settings
1788 uint8_t cacheex_enable_stats; //enable stats
1789 struct s_cacheex_matcher *cacheex_matcher;
1790#endif
1791
1792#ifdef CW_CYCLE_CHECK
1793 int8_t cwcycle_check_enable; // on or off
1794 CAIDTAB cwcycle_check_caidtab; // Caid for CW Cycle Check
1795 int32_t keepcycletime; // how long stay the learned Cycletime in Memory
1796 int32_t maxcyclelist; // max size of cwcyclelist
1797 int8_t onbadcycle; // what to do on bad cwcycle
1798 int8_t cwcycle_dropold; // what to do on old ecmd5/cw
1799#endif
1800
1801 //Global whitelist:
1802 struct s_global_whitelist *global_whitelist;
1803 int8_t global_whitelist_use_l;
1804 int8_t global_whitelist_use_m;
1805
1806 char *ecmfmt;
1807 char *pidfile;
1808
1809 int32_t max_pending;
1810};
1811
1812struct s_clientinit
1813{
1814 void *(*handler)(struct s_client*);
1815 struct s_client * client;
1816};
1817
1818struct s_clientmsg {
1819 uint8_t msg[1024];
1820 int32_t len;
1821 int32_t cmd;
1822};
1823
1824typedef struct reader_stat_t
1825{
1826 int32_t rc;
1827 uint16_t caid;
1828 uint32_t prid;
1829 uint16_t srvid;
1830 uint32_t chid;
1831 int16_t ecmlen;
1832
1833 time_t last_received;
1834
1835 int32_t ecm_count;
1836 int32_t time_avg;
1837 int32_t time_stat[LB_MAX_STAT_TIME];
1838 int32_t time_idx;
1839
1840 int32_t fail_factor;
1841} READER_STAT;
1842
1843typedef struct cs_stat_query {
1844 uint16_t caid;
1845 uint32_t prid;
1846 uint16_t srvid;
1847 uint32_t chid;
1848 int16_t ecmlen;
1849} STAT_QUERY;
1850
1851
1852typedef struct emm_packet_t
1853{
1854 uchar emm[258];
1855 int16_t emmlen;
1856 uchar caid[2];
1857 uchar provid[4];
1858 uchar hexserial[8]; //contains hexserial or SA of EMM
1859 uchar type;
1860 struct s_client *client;
1861} EMM_PACKET;
1862
1863
1864/* ===========================
1865 * global variables
1866 * =========================== */
1867extern pthread_key_t getclient;
1868extern struct s_client *first_client;
1869extern CS_MUTEX_LOCK config_lock;
1870extern CS_MUTEX_LOCK clientlist_lock;
1871extern CS_MUTEX_LOCK readerlist_lock;
1872extern struct s_reader *first_active_reader; //points to list of _active_ readers (enable = 1, deleted = 0)
1873extern LLIST *configured_readers;
1874
1875// These are used pretty much everywhere
1876extern struct s_config cfg;
1877extern uint16_t cs_dblevel;
1878
1879#include "oscam-log.h"
1880#include "oscam-log-reader.h"
1881
1882// Add here *only* funcs that are implemented in oscam.c and are called in other places
1883void cs_exit(int32_t sig);
1884void cs_exit_oscam(void);
1885void cs_restart_oscam(void);
1886int32_t cs_get_restartmode(void);
1887
1888void set_thread_name(const char *thread_name);
1889void start_thread(void *startroutine, char *nameroutine);
1890void kill_thread(struct s_client *cl);
1891
1892struct s_module *get_module(struct s_client *cl);
1893void module_reader_set(struct s_reader *rdr);
1894
1895// Until we find a better place for these (they are implemented in oscam-simples.h)
1896char *get_servicename(struct s_client *cl, uint16_t srvid, uint16_t caid, char *buf);
1897char *get_tiername(uint16_t tierid, uint16_t caid, char *buf);
1898char *get_provider(uint16_t caid, uint32_t provid, char *buf, uint32_t buflen);
1899void add_provider(uint16_t caid, uint32_t provid, const char *name, const char *sat, const char *lang);
1900
1901#endif
Note: See TracBrowser for help on using the repository browser.