source: trunk/globals.h@ 8466

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

cfg: Remove serial vars from struct s_config when the module is disabled.

  • Property svn:eol-style set to LF
File size: 55.7 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
776struct s_irdeto_quess {
777 int32_t b47;
778 uint16_t caid;
779 uint16_t sid;
780 struct s_irdeto_quess *next;
781};
782
783#define MAX_ECM_SIZE 512
784
785typedef struct ecm_request_t {
786 uchar ecm[MAX_ECM_SIZE];
787 uchar cw[16];
788 uchar ecmd5[CS_ECMSTORESIZE];
789 int16_t ecmlen;
790 uint16_t caid;
791 uint16_t ocaid; //original caid, used for betatunneling
792 uint16_t srvid;
793 uint16_t onid;
794 uint16_t tsid;
795 uint32_t ens;
796 uint16_t chid;
797 uint16_t pid;
798 uint16_t idx;
799 uint32_t prid;
800 struct s_reader *selected_reader;
801 struct s_ecm_answer *matching_rdr; //list of matching readers
802 const struct s_reader *fallback; //fallback is the first fallback reader in the list matching_rdr
803 struct s_client *client; //contains pointer to 'c' client while running in 'r' client
804 uint64_t grp;
805 int32_t msgid; // client pending table index
806 uint8_t stage; // processing stage in server module
807 int8_t rc;
808 uint8_t rcEx;
809 struct timeb tps; // incoming time stamp
810 uchar locals_done;
811 int8_t btun; // mark er as betatunneled
812 uint16_t reader_avail; // count of available readers
813 uint16_t reader_count; // count of contacted readers
814 uint16_t reader_requested; // count of real requested readers
815 int8_t checked; //for doublecheck
816 uchar cw_checked[16]; //for doublecheck
817 struct s_reader *origin_reader;
818
819#if defined MODULE_CCCAM
820 void *origin_card; // CCcam preferred card!
821#endif
822
823#if defined MODULE_GBOX
824 uint32_t gbox_crc; // rcrc for gbox, used to identify ECM task in peer responses
825 uint16_t gbox_ecm_id;
826 uint8_t gbox_ecm_ok;
827#endif
828
829 void *src_data;
830 struct ecm_request_t *ecmcacheptr; // Pointer to ecm-cw-rc-cache!
831#ifdef CS_CACHEEX
832 uchar cacheex_done;
833 struct s_client *cacheex_src; // Cacheex origin
834 int8_t cacheex_pushed; // to avoid duplicate pushs
835 int32_t csp_hash; // csp has its own hash
836 LLIST *csp_lastnodes; // last 10 Cacheex nodes atm cc-proto-only
837 uint32_t cacheex_wait_time; // cacheex wait time in ms
838 struct timeb cacheex_wait; // incoming time stamp (tps) + cacheex wait time
839#endif
840 char msglog[MSGLOGSIZE];
841 struct ecm_request_t *parent;
842 struct ecm_request_t *next;
843} ECM_REQUEST;
844
845
846struct s_ecm_answer {
847 uint8_t status;
848 struct s_reader *reader;
849 ECM_REQUEST *er;
850 int8_t rc;
851 uint8_t rcEx;
852 uchar cw[16];
853 char msglog[MSGLOGSIZE];
854#ifdef WITH_LB
855 int32_t value;
856 int32_t time;
857#endif
858 struct s_ecm_answer *next;
859};
860
861struct s_acasc_shm {
862 uint16_t ac_count : 15;
863 uint16_t ac_deny : 1;
864};
865
866struct s_acasc {
867 uint16_t stat[10];
868 uchar idx; // current active index in stat[]
869};
870
871struct s_cwresponse {
872 int32_t duration;
873 time_t timestamp;
874 int32_t rc;
875};
876
877struct s_cascadeuser {
878 uint16_t caid;
879 uint32_t prid;
880 uint16_t srvid;
881 time_t time;
882 int8_t cwrate;
883};
884
885typedef struct sidtabs {
886 SIDTABBITS ok; // positive services
887 SIDTABBITS no; // negative services
888} SIDTABS;
889
890struct s_client {
891 uint32_t tid;
892 int8_t init_done;
893 pthread_mutex_t thread_lock;
894 int8_t thread_active;
895 int8_t kill;
896 int8_t kill_started;
897 LLIST *joblist;
898 IN_ADDR_T ip;
899 in_port_t port;
900 time_t login; // connection
901 time_t logout; // disconnection
902 time_t last;
903 time_t lastswitch;
904 time_t lastemm;
905 time_t lastecm;
906 time_t expirationdate;
907 int32_t allowedtimeframe[2];
908 int8_t c35_suppresscmd08;
909 uint8_t c35_sleepsend;
910 int8_t ncd_keepalive;
911 int8_t disabled;
912 uint64_t grp;
913 int8_t crypted;
914 int8_t dup;
915 LLIST *aureader_list;
916 int8_t autoau;
917 int8_t monlvl;
918 CAIDTAB ctab;
919 TUNTAB ttab;
920 SIDTABS sidtabs;
921 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
922 uint8_t module_idx;
923 uint16_t last_srvid;
924 uint16_t last_caid;
925 struct s_srvid *last_srvidptr;
926 int32_t tosleep;
927 struct s_auth *account;
928 int32_t udp_fd;
929 struct SOCKADDR udp_sa;
930 socklen_t udp_sa_len;
931 int8_t log;
932 int32_t logcounter;
933 int32_t cwfound; // count found ECMs per client
934 int32_t cwcache; // count ECMs from cache1/2 per client
935 int32_t cwnot; // count not found ECMs per client
936 int32_t cwtun; // count betatunneled ECMs per client
937 int32_t cwignored; // count ignored ECMs per client
938 int32_t cwtout; // count timeouted ECMs per client
939 int32_t cwlastresptime; //last Responsetime (ms)
940#ifdef CW_CYCLE_CHECK
941 int32_t cwcycledchecked; // count checked cwcycles per client
942 int32_t cwcycledok; // count pos checked cwcycles per client
943 int32_t cwcyclednok; // count neg checked cwcycles per client
944 int32_t cwcycledign; // count ign cwcycles per client
945#endif
946 int32_t emmok; // count EMM ok
947 int32_t emmnok; // count EMM nok
948 int8_t pending; // number of ECMs pending
949#ifdef CS_CACHEEX
950 int32_t cwcacheexpush; // count pushed ecms/cws
951 int32_t cwcacheexgot; // count got ecms/cws
952 int32_t cwcacheexhit; // count hit ecms/cws
953 LLIST *ll_cacheex_stats; // List for Cacheex statistics
954 int8_t cacheex_maxhop;
955 int32_t cwcacheexerr; //cw=00 or chksum wrong
956 int32_t cwcacheexerrcw; //Same Hex, different CW
957#endif
958
959#ifdef WEBIF
960 struct s_cwresponse cwlastresptimes[CS_ECM_RINGBUFFER_MAX]; //ringbuffer for last 20 times
961 int32_t cwlastresptimes_last; // ringbuffer pointer
962 int8_t wihidden; // hidden in webinterface status
963 char lastreader[64]; // last cw got from this reader
964#endif
965
966 uchar ucrc[4]; // needed by monitor and used by camd35
967 uint32_t pcrc; // password crc
968 AES_KEY aeskey; // encryption key needed by monitor and used by camd33, camd35
969 AES_KEY aeskey_decrypt; // decryption key needed by monitor and used by camd33, camd35
970 uint16_t ncd_msgid;
971 uint16_t ncd_client_id;
972 uchar ncd_skey[16]; //Also used for camd35 Cacheex to store remote node id
973
974#ifdef MODULE_CCCAM
975 void *cc;
976#endif
977
978#ifdef MODULE_GBOX
979 void *gbox;
980 uint8_t gbox_cw_id[2];
981 uint8_t gbox_peer_id[2];
982 uint8_t gbox_ver;
983#endif
984
985#ifdef MODULE_GHTTP
986 void *ghttp;
987#endif
988
989 int32_t port_idx; // index in server ptab
990 int32_t ncd_server; // newcamd server
991
992#ifdef CS_ANTICASC
993 int32_t ac_fakedelay; // When this is -1, the global ac_fakedelay is used
994 uint16_t ac_limit;
995 int8_t ac_penalty;
996 struct s_acasc_shm acasc;
997#endif
998
999 FTAB fchid;
1000 FTAB ftab; // user [caid] and ident filter
1001 CLASSTAB cltab;
1002
1003 int32_t pfd; // Primary FD, must be closed on exit
1004 struct s_reader *reader; // points to s_reader when cl->typ='r'
1005
1006 ECM_REQUEST *ecmtask;
1007 struct s_emm *emmcache;
1008
1009 pthread_t thread;
1010
1011#ifdef MODULE_SERIAL
1012 struct s_serial_client *serialdata;
1013#endif
1014 //reader common
1015 int32_t last_idx;
1016 uint16_t idx;
1017 int8_t rotate;
1018
1019 int8_t ncd_proto;
1020 uint8_t ncd_header[12];
1021
1022 //camd35
1023 uchar upwd[64];
1024 int8_t is_udp;
1025 int8_t stopped;
1026 uint16_t lastcaid;
1027 uint16_t lastsrvid;
1028 int32_t lastpid;
1029 time_t emm_last;
1030 int8_t disable_counter;
1031 uchar lastserial[8];
1032
1033 //monitor
1034 int8_t auth;
1035
1036 //oscam.c
1037 struct timeval tv;
1038
1039 // Failban value set bitwise - compared with BAN_
1040 int32_t failban;
1041 int8_t cleaned;
1042
1043 LLIST *cascadeusers; //s_cascadeuser
1044
1045#ifdef MODULE_PANDORA
1046 int32_t pand_autodelay;
1047 uint8_t pand_send_ecm;
1048 uchar pand_ignore_ecm;
1049 uchar pand_md5_key[16];
1050#endif
1051
1052 struct s_client *next; //make client a linked list
1053 struct s_client *nexthashed;
1054};
1055
1056struct geo_cache { //for viaccess var in s_reader:
1057 uint32_t provid;
1058 uchar geo[256];
1059 uchar geo_len;
1060 int32_t number_ecm;
1061};
1062
1063struct s_CmdTabEntry { // for videoguard in s_reader
1064 unsigned char cla;
1065 unsigned char cmd;
1066 unsigned char len;
1067 unsigned char mode;
1068};
1069
1070struct s_CmdTab {
1071 unsigned char index;
1072 unsigned char size;
1073 unsigned char Nentries;
1074 unsigned char dummy;
1075 struct s_CmdTabEntry e[1];
1076};
1077
1078struct s_ecmWhitelist {
1079 uint16_t caid;
1080 struct s_ecmWhitelistIdent *idents;
1081 struct s_ecmWhitelist *next;
1082};
1083
1084struct s_ecmWhitelistIdent {
1085 uint32_t ident;
1086 struct s_ecmWhitelistLen *lengths;
1087 struct s_ecmWhitelistIdent *next;
1088};
1089
1090struct s_ecmWhitelistLen {
1091 int16_t len;
1092 struct s_ecmWhitelistLen *next;
1093};
1094
1095struct s_ecmHeaderwhitelist {
1096 uint16_t caid;
1097 uint32_t provid;
1098 uchar header[20];
1099 int16_t len;
1100 struct s_ecmHeaderwhitelist *next;
1101};
1102
1103//ratelimit
1104struct ecmrl {
1105 uint16_t srvid;
1106 time_t last;
1107 uchar ecmd5[CS_ECMSTORESIZE];
1108
1109};
1110#define MAXECMRATELIMIT 20
1111
1112struct s_sc8in1_display {
1113 char *text;
1114 uint16_t text_length;
1115 uint16_t char_change_time;
1116 uint16_t last_char;
1117 uint8_t blocking;
1118 struct s_sc8in1_display *next;
1119};
1120struct s_sc8in1_config {
1121 struct termios stored_termio[8];
1122 uint16_t current_slot;
1123 uint32_t current_baudrate;
1124 struct s_reader *current_reader;
1125 unsigned char cardstatus;
1126 unsigned char mcr_type;
1127 CS_MUTEX_LOCK sc8in1_lock;
1128 struct s_sc8in1_display *display;
1129 CS_MUTEX_LOCK sc8in1_display_lock;
1130 unsigned char display_running;
1131 pthread_t display_thread;
1132};
1133
1134#ifdef CS_CACHEEX
1135typedef struct ce_csp_tab {
1136 uint16_t n;
1137 int32_t caid[CS_MAXCAIDTAB];
1138 int32_t cmask[CS_MAXCAIDTAB];
1139 int32_t prid[CS_MAXCAIDTAB];
1140 int32_t srvid[CS_MAXCAIDTAB];
1141 int16_t awtime[CS_MAXCAIDTAB];
1142 int16_t dwtime[CS_MAXCAIDTAB];
1143} CECSPVALUETAB;
1144
1145typedef struct ce_csp_t {
1146 int8_t mode;
1147 int8_t maxhop;
1148 CECSPVALUETAB filter_caidtab;
1149 uint8_t allow_request;
1150 uint8_t drop_csp;
1151} CECSP;
1152#endif
1153
1154struct s_reader //contains device info, reader info and card info
1155{
1156 uint8_t changes_since_shareupdate;
1157 int32_t resetcycle; // ECM until reset
1158 int32_t resetcounter; // actual count
1159 uint32_t auprovid; // AU only for this provid
1160 int8_t audisabled; // exclude reader from auto AU
1161 int8_t smargopatch;
1162 struct s_client *client; // pointer to 'r'client this reader is running in
1163 LLIST *ll_entitlements; // entitlements
1164 int8_t enable;
1165 int8_t active;
1166 int8_t dropbadcws; // Schlocke: 1=drops cw if checksum is wrong. 0=fix checksum (default)
1167 int8_t disablecrccws; // 1=disable cw checksum test. 0=enable checksum check
1168 int8_t fd_error;
1169 uint64_t grp;
1170 int8_t fallback;
1171#ifdef CS_CACHEEX
1172 CECSP cacheex; //CacheEx Settings
1173#endif
1174 int32_t typ;
1175#ifdef WITH_COOLAPI
1176 int32_t cool_timeout_init; // read/transmit timeout while init for coolstream internal reader
1177 int32_t cool_timeout_after_init; // read/transmit timeout after init for coolstream internal reader
1178#endif
1179 char label[64];
1180#ifdef WEBIF
1181 char *description;
1182#endif
1183 char device[128];
1184 void *spec_dev; // pointer to structure that contains specific device data
1185 uint16_t slot; // in case of multiple slots like sc8in1; first slot = 1
1186 int32_t handle; // device handle
1187 int32_t fdmc; // device handle for multicam
1188#ifdef WITH_STAPI
1189 uint32_t stsmart_handle; // device handle for stsmart driver
1190#endif
1191 char pcsc_name[128];
1192 int8_t pcsc_has_card;
1193 int32_t detect;
1194 int32_t mhz; // actual clock rate of reader in 10khz steps
1195 int32_t cardmhz; // standard clock speed your card should have in 10khz steps; normally 357 but for Irdeto cards 600
1196 int32_t divider; // PLL divider for internal readers
1197 int32_t r_port;
1198 char r_usr[64];
1199 char r_pwd[64];
1200 char l_pwd[64];
1201 int32_t l_port;
1202 CAIDTAB ctab;
1203 uint32_t boxid;
1204 int8_t nagra_read; // read nagra ncmed records: 0 Disabled (default), 1 read all records, 2 read valid records only
1205 uint8_t boxkey[8]; // n3 boxkey 8byte
1206 char country_code[3]; // irdeto country code.
1207 int8_t force_irdeto;
1208 uchar rsa_mod[120]; // rsa modulus for nagra cards.
1209 uchar atr[64];
1210 uchar card_atr[64]; // ATR readed from card
1211 int8_t card_atr_length; // length of ATR
1212 int32_t atrlen;
1213 SIDTABS sidtabs;
1214 uchar hexserial[8];
1215 int32_t nprov;
1216 uchar prid[CS_MAXPROV][8];
1217 uchar availkeys[CS_MAXPROV][16]; // viaccess; misused in seca, if availkeys[PROV][0]=0 then expired, 1 then valid.
1218 uchar sa[CS_MAXPROV][4]; // viaccess & seca
1219 uint16_t acs; // irdeto
1220 uint16_t caid;
1221 uint16_t b_nano;
1222 uint16_t s_nano;
1223 int8_t ecmcommand; // used for filtering nagra bad ecm commands
1224 uchar ecmcommandcache[4]; // cachebuff for ecm commands
1225 int32_t blockemm;
1226 int32_t saveemm;
1227 int16_t blockemmbylen[CS_MAXEMMBLOCKBYLEN];
1228 char *emmfile;
1229 char pincode[5];
1230 int32_t ucpk_valid;
1231 int8_t logemm;
1232 int8_t cachemm;
1233 int16_t rewritemm;
1234 int8_t card_status;
1235 int8_t deprecated; //if 0 ATR obeyed, if 1 default speed (9600) is chosen; for devices that cannot switch baudrate
1236 int32_t reassemble_emm_len;
1237 uint8_t reassemble_emm[512];
1238 struct s_module ph;
1239 struct s_cardreader crdr;
1240 struct s_cardsystem csystem;
1241 uint8_t ncd_key[14];
1242 uchar ncd_skey[16];
1243 int8_t ncd_connect_on_init;
1244 int8_t ncd_disable_server_filt;
1245 int8_t ncd_proto;
1246 int8_t currenthops; // number of hops (cccam & gbox)
1247#ifdef MODULE_CCCAM
1248 char cc_version[7]; // cccam version
1249 char cc_build[7]; // cccam build number
1250 int8_t cc_maxhops; // cccam max distance
1251 int8_t cc_mindown; // cccam min downhops
1252 int8_t cc_want_emu; // Schlocke: Client want to have EMUs, 0 - NO; 1 - YES
1253 uint32_t cc_id;
1254 int8_t cc_keepalive;
1255 int8_t cc_hop; // For non-cccam reader: hop for virtual cards
1256 int8_t cc_reshare;
1257 int32_t cc_reconnect; //reconnect on ecm-request timeout
1258#endif
1259 int8_t tcp_connected;
1260 int32_t tcp_ito; // inactivity timeout
1261 int32_t tcp_rto; // reconnect timeout
1262 struct timeb tcp_block_connect_till; //time tcp connect ist blocked
1263 int32_t tcp_block_delay; //incrementing block time
1264 time_t last_g; // get (if last_s-last_g>tcp_rto - reconnect )
1265 time_t last_s; // send
1266 time_t last_check; // last checked
1267 FTAB fchid;
1268 FTAB ftab;
1269 CLASSTAB cltab;
1270 struct s_ecmWhitelist *ecmWhitelist;
1271 struct s_ecmHeaderwhitelist *ecmHeaderwhitelist; // ECM Header Whitelist
1272 int32_t brk_pos;
1273 int32_t msg_idx;
1274 int32_t secatype; // 0=not determined, 2=seca2, 3=nagra(~seca3) this is only valid for localreaders!
1275 double worketu; // in us for internal and external readers calculated (1/D)*(F/cardclock)*1000000
1276 uint32_t maxreadtimeout; // in us
1277 uint32_t minreadtimeout; // in us
1278 uint32_t maxwritetimeout; // in us
1279 uint32_t minwritetimeout; // in us
1280#if defined(WEBIF) || defined(LCDSUPPORT)
1281 int32_t emmwritten[4]; // count written EMM
1282 int32_t emmskipped[4]; // count skipped EMM
1283 int32_t emmerror[4]; // count error EMM
1284 int32_t emmblocked[4]; // count blocked EMM
1285 int32_t lbvalue; // loadbalance Value
1286#endif
1287#ifdef CARDREADER_PCSC
1288 SCARDCONTEXT hContext;
1289 SCARDHANDLE hCard;
1290 DWORD dwActiveProtocol;
1291#endif
1292#ifdef CARDREADER_SMART
1293 struct s_sr_config *sr_config;
1294#endif
1295#ifdef WITH_AZBOX
1296 int32_t azbox_mode;
1297#endif
1298 int32_t use_gpio; // Should this reader use GPIO functions
1299 int gpio_outen; // fd of opened /dev/gpio/outen
1300 int gpio_out; // fd of opened /dev/gpio/out
1301 int gpio_in; // fd of opened /dev/gpio/in
1302 uint32_t gpio; // gpio addr
1303 ////variables from icc_async.h start
1304#ifdef WITH_CARDREADER
1305 int32_t convention; // Convention of this ICC
1306 unsigned char protocol_type; // Type of protocol
1307 uint32_t current_baudrate; // (for overclocking uncorrected) baudrate to prevent unnecessary conversions from/to termios structure
1308 uint32_t read_timeout; // Max timeout (ms) to receive characters
1309 uint32_t block_delay; // Delay (ms) after starting to transmit
1310 uint32_t char_delay; // Delay (ms) after transmiting each sucesive char
1311 ////variables from io_serial.h
1312 int32_t written; // keep score of how much bytes are written to serial port, since they are echoed back they have to be read
1313#endif
1314 uint32_t BWT,CWT; // (for overclocking uncorrected) block waiting time, character waiting time, in ETU
1315 ////variables from protocol_t1.h
1316 uint16_t ifsc; // Information field size for the ICC
1317 unsigned char ns; // Send sequence number
1318 ////variables from reader-dre.c
1319 unsigned char provider;
1320 ////variables from reader-nagra.c
1321 IDEA_KEY_SCHEDULE ksSession;
1322 int8_t is_pure_nagra;
1323 int8_t is_tiger;
1324 int8_t is_n3_na;
1325 int8_t has_dt08;
1326 int8_t swapCW;
1327 uint8_t ExpiryDate[2];
1328 uint8_t ActivationDate[2];
1329 unsigned char rom[15];
1330 unsigned char plainDT08RSA[64];
1331 unsigned char IdeaCamKey[16];
1332 unsigned char irdId[4];
1333 unsigned char sessi[16];
1334 unsigned char signature[8];
1335 unsigned char cam_state[3];
1336 ////variables from reader-irdeto.c
1337 int32_t acs57; // A flag for the ACS57 ITA DVB-T
1338 ////variables from reader-cryptoworks.c
1339 BIGNUM exp;
1340 BIGNUM ucpk;
1341 ////variables from reader-viaccess.c
1342 struct geo_cache last_geo;
1343#ifdef WITH_LB
1344 int32_t lb_weight; //loadbalance weight factor, if unset, weight=100. The higher the value, the higher the usage-possibility
1345 int32_t lb_usagelevel; //usagelevel for loadbalancer
1346 int32_t lb_usagelevel_ecmcount;
1347 time_t lb_usagelevel_time; //time for counting ecms, this creates usagelevel
1348 struct timeb lb_last; //time for oldest reader
1349 LLIST *lb_stat; //loadbalancer reader statistics
1350 CS_MUTEX_LOCK lb_stat_lock;
1351#endif
1352
1353 AES_ENTRY *aes_list; // multi AES linked list
1354 // variables from reader-videoguard*
1355 int8_t ndsversion; // 0 auto (default), 1 NDS1, 12 NDS1+, 2 NDS2
1356 const char *card_desc;
1357 int32_t card_baseyear;
1358 int32_t card_tierstart;
1359 int32_t card_system_version;
1360 time_t card_valid_to;
1361 struct s_CmdTab *cmd_table;
1362 uint16_t cardkeys[3][32];
1363 unsigned char stateD3A[16];
1364 AES_KEY ekey;
1365 AES_KEY astrokey;
1366 //ratelimit
1367 int32_t ratelimitecm;
1368 int32_t ratelimitseconds;
1369 int8_t ecmunique; // check for matching ecm hash in ratelimitslot
1370 int32_t srvidholdseconds; // seconds to keep srvid in ratelimitslot (during this time not checked for ecmunique!)
1371 time_t lastdvbapirateoverride;
1372 uint32_t ecmsok;
1373 uint32_t ecmsnok;
1374 uint32_t ecmnotfoundlimit; // config setting. restart reader if ecmsnok >= ecmnotfoundlimit
1375 int32_t ecmsfilteredhead; // count filtered ECM's by ECM Headerwhitelist
1376 int32_t ecmsfilteredlen; // count filtered ECM's by ECM Whitelist
1377 float ecmshealthok;
1378 float ecmshealthnok;
1379 int32_t cooldown[2];
1380 int8_t cooldownstate;
1381 time_t cooldowntime;
1382 struct ecmrl rlecmh[MAXECMRATELIMIT];
1383 int8_t fix_9993;
1384 uint8_t ins7E[0x1A+1];
1385 uint8_t ins7E11[0x01+1];
1386 int8_t ins7e11_fast_reset;
1387 struct s_sc8in1_config *sc8in1_config;
1388 uint8_t sc8in1_dtrrts_patch; // fix for kernel commit 6a1a82df91fa0eb1cc76069a9efe5714d087eccd
1389#ifdef MODULE_GBOX
1390 char gbox_my_password[9];
1391 int8_t gbox_maxdist;
1392 int8_t gbox_maxecmsend;
1393 int8_t gbox_reshare;
1394 uint16_t gbox_peer_id;
1395 uint64_t gbox_grp;
1396#endif
1397
1398#ifdef MODULE_PANDORA
1399 uint8_t pand_send_ecm;
1400#endif
1401 uint8_t cnxlastecm; // == 0 - las ecm has not been paired ecm, > 0 last ecm has been paired ecm
1402
1403 uint8_t bulcrypt_version;
1404 uint8_t griffin_cmd_base; // Griffin command base, depends on the card
1405 uint8_t emm_reassembly;
1406
1407 struct s_reader *next;
1408};
1409
1410struct s_cpmap
1411{
1412 uint16_t caid;
1413 uint32_t provid;
1414 uint16_t sid;
1415 uint16_t chid;
1416 uint16_t dwtime;
1417 struct s_cpmap *next;
1418};
1419
1420struct s_auth
1421{
1422 char usr[64];
1423 char *pwd;
1424#ifdef WEBIF
1425 char *description;
1426#endif
1427 int8_t uniq;
1428#ifdef CS_CACHEEX
1429 CECSP cacheex; //CacheEx Settings
1430#endif
1431 int16_t allowedprotocols;
1432 LLIST *aureader_list;
1433 int8_t autoau;
1434 int8_t monlvl;
1435 uint64_t grp;
1436 int32_t tosleep;
1437 CAIDTAB ctab;
1438 SIDTABS sidtabs;
1439 FTAB fchid;
1440 FTAB ftab; // user [caid] and ident filter
1441 CLASSTAB cltab;
1442 TUNTAB ttab;
1443#ifdef CS_ANTICASC
1444 int32_t ac_fakedelay; // When this is -1, the global ac_fakedelay is used
1445 int32_t ac_users; // 0 - unlimited
1446 int8_t ac_penalty; // 0 - log, >0 - fake dw
1447 struct s_acasc ac_stat;
1448#endif
1449 IN_ADDR_T dynip;
1450 char *dyndns;
1451 time_t expirationdate;
1452 time_t firstlogin;
1453 int32_t allowedtimeframe[2];
1454 int8_t c35_suppresscmd08;
1455 uint8_t c35_sleepsend;
1456 int8_t ncd_keepalive;
1457#ifdef MODULE_CCCAM
1458 int32_t cccmaxhops;
1459 int8_t cccreshare;
1460 int8_t cccignorereshare;
1461 int8_t cccstealth;
1462#endif
1463 int8_t disabled;
1464 int32_t failban;
1465
1466 int32_t cwfound;
1467 int32_t cwcache;
1468 int32_t cwnot;
1469 int32_t cwtun;
1470 int32_t cwignored;
1471 int32_t cwtout;
1472#ifdef CW_CYCLE_CHECK
1473 int32_t cwcycledchecked; // count checked cwcycles per client
1474 int32_t cwcycledok; // count pos checked cwcycles per client
1475 int32_t cwcyclednok; // count neg checked cwcycles per client
1476 int32_t cwcycledign; // count ign cwcycles per client
1477#endif
1478 int32_t emmok;
1479 int32_t emmnok;
1480#ifdef CS_CACHEEX
1481 int32_t cwcacheexpush; // count pushed ecms/cws
1482 int32_t cwcacheexgot; // count got ecms/cws
1483 int32_t cwcacheexhit; // count hit ecms/cws
1484 int32_t cwcacheexerr; //cw=00 or chksum wrong
1485 int32_t cwcacheexerrcw; //Same Hex, different CW
1486#endif
1487 struct s_auth *next;
1488};
1489
1490struct s_srvid
1491{
1492 uint16_t srvid;
1493 int8_t ncaid;
1494 uint16_t caid[10];
1495 char *data;
1496 char *prov;
1497 char *name;
1498 char *type;
1499 char *desc;
1500 struct s_srvid *next;
1501};
1502
1503struct s_tierid
1504{
1505 uint16_t tierid;
1506 int8_t ncaid;
1507 uint16_t caid[10];
1508 char name[33];
1509 struct s_tierid *next;
1510};
1511
1512struct s_provid
1513{
1514 uint16_t caid;
1515 uint32_t provid;
1516 char prov[33];
1517 char sat[33];
1518 char lang[33];
1519 struct s_provid *next;
1520};
1521
1522struct s_ip
1523{
1524 IN_ADDR_T ip[2];
1525 struct s_ip *next;
1526};
1527
1528struct s_global_whitelist
1529{
1530 uint32_t line; //linenr of oscam.whitelist file, starting with 1
1531 char type; // w or i or l
1532 uint16_t caid;
1533 uint32_t provid;
1534 uint16_t srvid;
1535 uint16_t chid;
1536 uint16_t pid;
1537 uint16_t ecmlen;
1538 uint16_t mapcaid;
1539 uint32_t mapprovid;
1540 struct s_global_whitelist *next;
1541};
1542
1543struct s_cacheex_matcher
1544{
1545 uint32_t line; //linenr of oscam.Cacheex file, starting with 1
1546 char type; // m
1547 uint16_t caid;
1548 uint32_t provid;
1549 uint16_t srvid;
1550 uint16_t chid;
1551 uint16_t pid;
1552 uint16_t ecmlen;
1553
1554 uint16_t to_caid;
1555 uint32_t to_provid;
1556 uint16_t to_srvid;
1557 uint16_t to_chid;
1558 uint16_t to_pid;
1559 uint16_t to_ecmlen;
1560
1561 int32_t valid_from;
1562 int32_t valid_to;
1563
1564 struct s_cacheex_matcher *next;
1565};
1566
1567typedef struct csp_ce_hit_t {
1568 time_t time;
1569 int16_t ecmlen;
1570 uint16_t caid;
1571 uint32_t prid;
1572 uint16_t srvid;
1573 uint64_t grp;
1574 struct csp_ce_hit_t *prev;
1575 struct csp_ce_hit_t *next;
1576} CSPCEHIT;
1577
1578struct s_config
1579{
1580 int32_t nice;
1581 uint32_t netprio;
1582 uint32_t ctimeout;
1583 uint32_t ftimeout;
1584 uint32_t cmaxidle;
1585 int32_t ulparent;
1586 uint32_t delay;
1587 int32_t bindwait;
1588 int32_t tosleep;
1589 IN_ADDR_T srvip;
1590 char *usrfile;
1591 char *cwlogdir;
1592 char *emmlogdir;
1593 char *logfile;
1594 char *mailfile;
1595 uint8_t logtostdout;
1596 uint8_t logtosyslog;
1597 int8_t logduplicatelines;
1598#if defined(WEBIF) || defined(MODULE_MONITOR)
1599 uint32_t loghistorysize;
1600#endif
1601 int8_t disablelog;
1602 int8_t disablemail;
1603 int8_t disableuserfile;
1604 int8_t usrfileflag;
1605 struct s_auth *account;
1606 struct s_srvid *srvid[16];
1607 struct s_tierid *tierid;
1608 //Todo #ifdef CCCAM
1609 struct s_provid *provid;
1610 struct s_sidtab *sidtab;
1611#ifdef MODULE_MONITOR
1612 int32_t mon_port;
1613 IN_ADDR_T mon_srvip;
1614 struct s_ip *mon_allowed;
1615 uint8_t mon_level;
1616#endif
1617 int32_t aulow;
1618 int32_t hideclient_to;
1619 int8_t appendchaninfo;
1620#ifdef WEBIF
1621 int32_t http_port;
1622 char *http_user;
1623 char *http_pwd;
1624 char *http_css;
1625 int32_t http_prepend_embedded_css;
1626 char *http_jscript;
1627 char *http_tpl;
1628 char *http_script;
1629 int32_t http_refresh;
1630 int8_t http_hide_idle_clients;
1631 char *http_hide_type;
1632 int8_t http_showpicons;
1633 struct s_ip *http_allowed;
1634 int8_t http_readonly;
1635 IN_ADDR_T http_dynip[MAX_HTTP_DYNDNS];
1636 uchar http_dyndns[MAX_HTTP_DYNDNS][64];
1637 int8_t http_use_ssl;
1638 int8_t http_force_sslv3;
1639 char *http_cert;
1640 char *http_help_lang;
1641#endif
1642 int8_t http_full_cfg;
1643 int32_t failbantime;
1644 int32_t failbancount;
1645 LLIST *v_list; // Failban list
1646#ifdef MODULE_CAMD33
1647 int32_t c33_port;
1648 IN_ADDR_T c33_srvip;
1649 uint8_t c33_key[16];
1650 int32_t c33_crypted;
1651 int32_t c33_passive;
1652 struct s_ip *c33_plain;
1653#endif
1654#if defined(MODULE_CAMD35) || defined(MODULE_CAMD35_TCP)
1655 int32_t c35_port;
1656 IN_ADDR_T c35_srvip;
1657 int8_t c35_tcp_suppresscmd08;
1658 int8_t c35_udp_suppresscmd08;
1659 PTAB c35_tcp_ptab;
1660 IN_ADDR_T c35_tcp_srvip;
1661#endif
1662 int8_t c35_suppresscmd08; // used in cccam module
1663#ifdef MODULE_NEWCAMD
1664 PTAB ncd_ptab;
1665 IN_ADDR_T ncd_srvip;
1666 uint8_t ncd_key[14];
1667 int8_t ncd_keepalive;
1668 int8_t ncd_mgclient;
1669 struct s_ip *ncd_allowed;
1670#endif
1671#ifdef MODULE_RADEGAST
1672 int32_t rad_port;
1673 IN_ADDR_T rad_srvip;
1674 struct s_ip *rad_allowed;
1675 char *rad_usr;
1676#endif
1677#ifdef MODULE_CCCAM
1678 uint16_t cc_port[CS_MAXPORTS];
1679 int8_t cc_reshare;
1680 int8_t cc_ignore_reshare;
1681 int32_t cc_update_interval;
1682 IN_ADDR_T cc_srvip;
1683 char cc_version[7];
1684 int8_t cc_minimize_cards;
1685 int8_t cc_keep_connected;
1686 int8_t cc_stealth;
1687 int8_t cc_reshare_services;
1688 int8_t cc_forward_origin_card;
1689 uint8_t cc_fixed_nodeid[8];
1690 uint32_t cc_recv_timeout; // The poll() timeout parameter in ms. Default: DEFAULT_CC_RECV_TIMEOUT (2000 ms).
1691#endif
1692#ifdef MODULE_GBOX
1693 char *gbox_hostname;
1694 unsigned long gbox_card[CS_GBOX_MAX_LOCAL_CARDS]; // gbox list of local cards
1695 int32_t gbox_local_cards_num; // number of local card gbox cards
1696 int32_t gbox_reconnect;
1697#endif
1698#ifdef MODULE_SERIAL
1699 char *ser_device;
1700#endif
1701 uint32_t srtimeout; // SerialReaderTimeount in millisec
1702 int32_t max_log_size;
1703 int8_t waitforcards;
1704 int32_t waitforcards_extra_delay;
1705 int8_t preferlocalcards;
1706 int32_t reader_restart_seconds; // schlocke: reader restart auf x seconds, disable = 0
1707 int8_t dropdups; // drop duplicate logins
1708
1709
1710//Loadbalancer-Config:
1711#ifdef WITH_LB
1712 int32_t lb_mode; // schlocke: reader loadbalancing mode
1713 int32_t lb_save; // schlocke: load/save statistics to file, save every x ecms
1714 int32_t lb_nbest_readers; // count of best readers
1715 int32_t lb_nfb_readers; // count of fallback readers
1716 int32_t lb_min_ecmcount; // minimal ecm count to evaluate lbvalues
1717 int32_t lb_max_ecmcount; // maximum ecm count before reseting lbvalues
1718 int32_t lb_reopen_seconds; // time between retrying failed readers/caids/prov/srv
1719 int32_t lb_retrylimit; // reopen only happens if reader response time > retrylimit
1720 CAIDVALUETAB lb_retrylimittab;
1721 CAIDVALUETAB lb_nbest_readers_tab; // like nbest_readers, but for special caids
1722 CAIDTAB lb_noproviderforcaid; // do not store loadbalancer stats with providers for this caid
1723 char *lb_savepath; // path where the stat file is save. Empty=default=/tmp/.oscam/stat
1724 int32_t lb_stat_cleanup; // duration in hours for cleaning old statistics
1725 int32_t lb_reopen_mode; // reopen readers mode
1726 int32_t lb_max_readers; // limit the amount of readers during learning
1727 int32_t lb_auto_betatunnel; // automatic selection of betatunnel convertion based on learned data
1728 int32_t lb_auto_betatunnel_mode; // automatic selection of betatunnel direction
1729 int32_t lb_auto_betatunnel_prefer_beta; // prefer-beta-over-nagra factor
1730 int32_t lb_auto_timeout; // Automatic timeout by loadbalancer statistics
1731 int32_t lb_auto_timeout_p; // percent added to avg time as timeout time
1732 int32_t lb_auto_timeout_t; // minimal time added to avg time as timeout time
1733#endif
1734 int32_t resolve_gethostbyname;
1735 int8_t double_check; // schlocke: Double checks each ecm+dcw from two (or more) readers
1736 CAIDTAB double_check_caid; // do not store loadbalancer stats with providers for this caid
1737
1738#ifdef IRDETO_GUESSING
1739 struct s_irdeto_quess *itab[0xff];
1740#endif
1741
1742#ifdef HAVE_DVBAPI
1743 int8_t dvbapi_enabled;
1744 int8_t dvbapi_au;
1745 char *dvbapi_usr;
1746 int8_t dvbapi_boxtype;
1747 int8_t dvbapi_pmtmode;
1748 int8_t dvbapi_requestmode;
1749 SIDTABS dvbapi_sidtabs;
1750 int8_t dvbapi_reopenonzap;
1751 int8_t dvbapi_decodeforever; // do not stop after 3 tries
1752 int32_t dvbapi_delayer; // delayer ms, minimum time to write cw
1753#endif
1754
1755#ifdef CS_ANTICASC
1756 int8_t ac_enabled;
1757 int32_t ac_users; // num of users for account (0 - default)
1758 int32_t ac_stime; // time to collect AC statistics (3 min - default)
1759 int32_t ac_samples; // qty of samples
1760 int8_t ac_penalty; // 0 - write to log
1761 int32_t ac_fakedelay; // 100-1000 ms
1762 int32_t ac_denysamples;
1763 char *ac_logfile;
1764 struct s_cpmap *cpmap;
1765#endif
1766
1767#ifdef LEDSUPPORT
1768 int8_t enableled; // 0=disabled led, 1=enable led for routers, 2=enable qboxhd led
1769#endif
1770
1771#ifdef LCDSUPPORT
1772 int8_t enablelcd;
1773 char *lcd_output_path;
1774 int32_t lcd_hide_idle;
1775 int32_t lcd_write_intervall;
1776#endif
1777
1778#ifdef MODULE_PANDORA
1779 int8_t pand_skip_send_dw;
1780 struct s_ip *pand_allowed;
1781 char *pand_usr;
1782 char *pand_pass;
1783 int8_t pand_ecm;
1784 int32_t pand_port;
1785 IN_ADDR_T pand_srvip;
1786#endif
1787
1788 uint32_t max_cache_time; //seconds
1789 uint32_t max_cache_count; //count ecms
1790
1791 int8_t block_same_ip; //0=allow all, 1=block client requests to reader with same ip (default=1)
1792 int8_t block_same_name; //0=allow all, 1=block client requests to reader with same name (default=1)
1793
1794#ifdef CS_CACHEEX
1795 IN_ADDR_T csp_srvip;
1796 int32_t csp_port;
1797 CECSPVALUETAB cacheex_wait_timetab;
1798 CECSP csp; //CSP Settings
1799 uint8_t cacheex_enable_stats; //enable stats
1800 struct s_cacheex_matcher *cacheex_matcher;
1801#endif
1802
1803#ifdef CW_CYCLE_CHECK
1804 int8_t cwcycle_check_enable; // on or off
1805 CAIDTAB cwcycle_check_caidtab; // Caid for CW Cycle Check
1806 int32_t keepcycletime; // how long stay the learned Cycletime in Memory
1807 int32_t maxcyclelist; // max size of cwcyclelist
1808 int8_t onbadcycle; // what to do on bad cwcycle
1809 int8_t cwcycle_dropold; // what to do on old ecmd5/cw
1810#endif
1811
1812 //Global whitelist:
1813 struct s_global_whitelist *global_whitelist;
1814 int8_t global_whitelist_use_l;
1815 int8_t global_whitelist_use_m;
1816
1817 char *ecmfmt;
1818 char *pidfile;
1819
1820 int32_t max_pending;
1821};
1822
1823struct s_clientinit
1824{
1825 void *(*handler)(struct s_client*);
1826 struct s_client * client;
1827};
1828
1829struct s_clientmsg {
1830 uint8_t msg[1024];
1831 int32_t len;
1832 int32_t cmd;
1833};
1834
1835typedef struct reader_stat_t
1836{
1837 int32_t rc;
1838 uint16_t caid;
1839 uint32_t prid;
1840 uint16_t srvid;
1841 uint32_t chid;
1842 int16_t ecmlen;
1843
1844 time_t last_received;
1845
1846 int32_t ecm_count;
1847 int32_t time_avg;
1848 int32_t time_stat[LB_MAX_STAT_TIME];
1849 int32_t time_idx;
1850
1851 int32_t fail_factor;
1852} READER_STAT;
1853
1854typedef struct cs_stat_query {
1855 uint16_t caid;
1856 uint32_t prid;
1857 uint16_t srvid;
1858 uint32_t chid;
1859 int16_t ecmlen;
1860} STAT_QUERY;
1861
1862
1863typedef struct emm_packet_t
1864{
1865 uchar emm[258];
1866 int16_t emmlen;
1867 uchar caid[2];
1868 uchar provid[4];
1869 uchar hexserial[8]; //contains hexserial or SA of EMM
1870 uchar type;
1871 struct s_client *client;
1872} EMM_PACKET;
1873
1874
1875/* ===========================
1876 * global variables
1877 * =========================== */
1878extern pthread_key_t getclient;
1879extern struct s_client *first_client;
1880extern CS_MUTEX_LOCK config_lock;
1881extern CS_MUTEX_LOCK clientlist_lock;
1882extern CS_MUTEX_LOCK readerlist_lock;
1883extern struct s_reader *first_active_reader; //points to list of _active_ readers (enable = 1, deleted = 0)
1884extern LLIST *configured_readers;
1885
1886// These are used pretty much everywhere
1887extern struct s_config cfg;
1888extern uint16_t cs_dblevel;
1889
1890#include "oscam-log.h"
1891#include "oscam-log-reader.h"
1892
1893// Add here *only* funcs that are implemented in oscam.c and are called in other places
1894void cs_exit(int32_t sig);
1895void cs_exit_oscam(void);
1896void cs_restart_oscam(void);
1897int32_t cs_get_restartmode(void);
1898
1899void set_thread_name(const char *thread_name);
1900void start_thread(void *startroutine, char *nameroutine);
1901void kill_thread(struct s_client *cl);
1902
1903struct s_module *get_module(struct s_client *cl);
1904void module_reader_set(struct s_reader *rdr);
1905
1906// Until we find a better place for these (they are implemented in oscam-simples.h)
1907char *get_servicename(struct s_client *cl, uint16_t srvid, uint16_t caid, char *buf);
1908char *get_tiername(uint16_t tierid, uint16_t caid, char *buf);
1909char *get_provider(uint16_t caid, uint32_t provid, char *buf, uint32_t buflen);
1910void add_provider(uint16_t caid, uint32_t provid, const char *name, const char *sat, const char *lang);
1911
1912#endif
Note: See TracBrowser for help on using the repository browser.