source: trunk/globals.h@ 102

Last change on this file since 102 was 95, checked in by smurzch2, 15 years ago

Try decoding first on local cards.

Thanks to okmikel for this patch.
Try decoding first on local cards before sending ECM to network readers (only
for not Fallback Readers).
This is controlled with global config
PreferLocalCards = 1

File size: 18.6 KB
Line 
1#include <stdlib.h>
2#include <stdio.h>
3#include <assert.h>
4#include <fcntl.h>
5#include <sys/ioctl.h>
6#include <sys/poll.h>
7#include <ctype.h>
8#include <sys/types.h>
9#include <sys/stat.h>
10#include <sys/shm.h>
11#include <sys/wait.h>
12#include <unistd.h>
13#include <sys/mman.h>
14#include <stdarg.h>
15#include <time.h>
16#include <sys/timeb.h>
17#include <limits.h>
18
19#include <sys/socket.h>
20#include <netinet/in.h>
21#include <arpa/inet.h>
22#include <netdb.h>
23#include <string.h>
24#include <signal.h>
25#include <errno.h>
26
27#include <pthread.h>
28
29#ifndef CS_GLOBALS
30#define CS_GLOBALS
31#define CS_VERSION "0.99.3svn"
32
33#if defined(__GNUC__)
34# define GCC_PACK __attribute__((packed))
35#else
36# define GCC_PACK
37#endif
38
39#include "oscam-config.h"
40#include "oscam-ostype.h"
41#include "oscam-types.h"
42#include "cscrypt/cscrypt.h"
43
44#ifndef CS_CONFDIR
45#define CS_CONFDIR "/usr/local/etc"
46#endif
47#ifndef CS_MMAPFILE
48#define CS_MMAPFILE "/tmp/mcps.mem"
49#endif
50#ifndef CS_LOGFILE
51#define CS_LOGFILE "/var/log/mcps.log"
52#endif
53#define CS_QLEN 128 // size of request queue
54#define CS_MAXQLEN 128 // size of request queue for cardreader
55#define CS_MAXCAIDTAB 32 // max. caid-defs/user
56#define CS_MAXTUNTAB 4 // max. betatunnel mappings
57#define CS_MAXPROV 32
58#define CS_MAXPORTS 32 // max server ports
59#define CS_MAXFILTERS 16
60
61#define CS_MAXCARDS 4096
62#define CS_MAXIGNORE 1024
63#define CS_MAXLOCALS 16
64#define CS_ECMSTORESIZE 16 // use MD5()
65#define CS_EMMSTORESIZE 270
66#define CS_CLIENT_TIMEOUT 5000
67#define CS_CLIENT_MAXIDLE 120
68#define CS_BIND_TIMEOUT 120
69#define CS_DELAY 0
70#define CS_RESOLVE_DELAY 30
71#define CS_MAXLOGHIST 30
72#define CS_LOGHISTSIZE 160 // 32+128: username + logline
73
74#ifdef OLD_DEFS
75#ifdef CS_EMBEDDED
76#define CS_MAXPENDING 32
77#define CS_ECMCACHESIZE 32
78#define CS_EMMCACHESIZE 64
79#define CS_MAXPID 32
80#define CS_MAXREADER 8
81#else
82#define CS_MAXPENDING 128
83#define CS_ECMCACHESIZE 128
84#define CS_EMMCACHESIZE 256
85#define CS_MAXPID 128
86#define CS_MAXREADER 64
87#endif
88#endif
89
90#ifdef CS_EMBEDDED
91#define CS_MAXPID 32
92#define CS_MAXREADER (CS_MAXPID>>1)
93#define CS_MAXPENDING CS_MAXPID
94#define CS_ECMCACHESIZE CS_MAXPID
95#define CS_EMMCACHESIZE (CS_MAXPID<<1)
96#else
97#define CS_MAXPID 512
98#define CS_MAXREADER (CS_MAXPID>>2)
99#define CS_MAXPENDING (CS_MAXPID<<1)
100#define CS_ECMCACHESIZE CS_MAXPID
101#define CS_EMMCACHESIZE (CS_MAXPID<<1)
102#define CS_RDR_INIT_HIST
103#endif
104
105#define D_DUMP 1 // Debug Dumps
106#define D_MASTER 2 // Debug Master Process
107#define D_READER 4 // Debug Reader/Proxy Process
108#define D_CLIENT 8 // Debug Client Process
109#define D_DEVICE 16 // Debug Reader I/O
110#define D_WATCHDOG 32 // Debug Watchdog
111#define D_ALL_DUMP 63
112
113#define R_MOUSE 0x1 // Reader smartcard mouse
114#define R_INTERN 0x2 // Reader smartcard intern
115#define R_SMART 0x5 // Smartreader+
116#define R_CAMD35 0x10 // Reader cascading camd 3.5x
117#define R_CAMD33 0x11 // Reader cascading camd 3.3x
118#define R_NEWCAMD 0x12 // Reader cascading newcamd
119#define R_RADEGAST 0x13 // Reader cascading radegast
120#define R_CS378X 0x14 // Reader cascading camd 3.5x TCP
121#define R_GBOX 0x20 // Reader cascading gbox
122#define R_SERIAL 0x80 // Reader serial
123#define R_IS_NETWORK 0x70
124#define R_IS_CASCADING 0xF0
125
126#define CS_MAX_MOD 8
127#define MOD_CONN_TCP 1
128#define MOD_CONN_UDP 2
129#define MOD_CONN_NET 3
130#define MOD_CONN_SERIAL 4
131
132#ifdef CS_CORE
133char *PIP_ID_TXT[] = { "ECM", "EMM", "LOG", "CIN", "HUP", NULL };
134char *RDR_CD_TXT[] = { "cd", "dsr", "cts", "ring", "none",
135#ifdef USE_GPIO
136 "gpio2", "gpio3", "gpio4", "gpio5", "gpio6", "gpio7",
137#endif
138 NULL };
139#else
140extern char *PIP_ID_TXT[];
141extern char *RDR_CD_TXT[];
142#endif
143
144#define PIP_ID_ECM 0
145#define PIP_ID_EMM 1
146#define PIP_ID_LOG 2
147#define PIP_ID_CIN 3 // CARD_INFO
148#define PIP_ID_HUP 4
149#define PIP_ID_MAX PIP_ID_HUP
150#define PIP_ID_DCW 5
151
152#define PIP_ID_ERR (-1)
153#define PIP_ID_DIR (-2)
154#define PIP_ID_NUL (-3)
155
156#define cdiff *c_start
157
158#define NCD_AUTO 0
159#define NCD_524 1
160#define NCD_525 2
161
162#define CS_ANTICASC
163
164// moved from reader-common.h
165#define CARD_INSERTED 1
166#define CARD_NEED_INIT 2
167#define CARD_FAILURE 4
168
169enum {E1_GLOBAL=0, E1_USER, E1_READER, E1_SERVER, E1_LSERVER};
170enum {E2_GLOBAL=0, E2_GROUP, E2_CAID, E2_IDENT, E2_CLASS, E2_CHID, E2_QUEUE,
171 E2_EA_LEN, E2_F0_LEN, E2_OFFLINE, E2_SID};
172
173//typedef unsigned char uchar;
174//typedef unsigned long ulong;
175
176typedef struct s_classtab
177{
178 uchar an;
179 uchar bn;
180 uchar aclass[31];
181 uchar bclass[31];
182} GCC_PACK CLASSTAB;
183
184typedef struct s_caidtab
185{
186 ushort caid[CS_MAXCAIDTAB];
187 ushort mask[CS_MAXCAIDTAB];
188 ushort cmap[CS_MAXCAIDTAB];
189} GCC_PACK CAIDTAB;
190
191typedef struct s_tuntab
192{
193 ushort bt_caidfrom[CS_MAXTUNTAB];
194 ushort bt_caidto[CS_MAXTUNTAB];
195 ushort bt_srvid[CS_MAXTUNTAB];
196} GCC_PACK TUNTAB;
197
198typedef struct s_sidtab
199{
200 char label[33];
201 ushort num_caid;
202 ushort num_provid;
203 ushort num_srvid;
204 ushort *caid;
205 ulong *provid;
206 ushort *srvid;
207 struct s_sidtab *next;
208} GCC_PACK SIDTAB;
209
210
211typedef struct s_filter
212{
213 ushort caid;
214 uchar nprids;
215 ulong prids[CS_MAXPROV];
216} GCC_PACK FILTER;
217
218typedef struct s_ftab
219{
220 int nfilts;
221 FILTER filts[CS_MAXFILTERS];
222} GCC_PACK FTAB;
223
224typedef struct s_port
225{
226 int fd;
227 int s_port;
228 FTAB ftab;
229} GCC_PACK PORT;
230
231typedef struct s_ptab
232{
233 int nports;
234 PORT ports[CS_MAXPORTS];
235} GCC_PACK PTAB;
236
237struct s_ecm
238{
239 uchar ecmd5[CS_ECMSTORESIZE];
240 uchar cw[16];
241 ushort caid;
242 ulong prid;
243 ulong grp;
244// int level;
245};
246
247struct s_emm
248{
249 uchar emm[CS_EMMSTORESIZE];
250 uchar type;
251 int count;
252};
253
254struct s_module
255{
256 //int fd;
257 int multi;
258 int type;
259 int watchdog;
260 char desc[16];
261 char *logtxt;
262 //int s_port;
263 in_addr_t s_ip;
264 void (*s_handler)();
265 int (*recv)();
266 void (*send_dcw)();
267 int c_multi;
268 int (*c_recv_chk)();
269 int (*c_init)();
270 int (*c_send_ecm)();
271 int (*c_init_log)();
272 int (*c_recv_log)();
273 int c_port;
274 PTAB *ptab;
275};
276
277struct s_irdeto_quess
278{
279 int b47;
280 ushort caid;
281 ushort sid;
282 struct s_irdeto_quess *next;
283};
284
285struct s_client
286{
287 pid_t pid;
288 in_addr_t ip;
289 in_port_t port;
290 time_t login;
291 time_t last;
292 time_t lastswitch;
293 time_t lastemm;
294 time_t lastecm;
295 ulong grp;
296 int crypted;
297 int dup;
298 int au;
299 int monlvl;
300 int dbglvl;
301 CAIDTAB ctab;
302 TUNTAB ttab;
303 ulong sidtabok; // positiv services
304 ulong sidtabno; // negative services
305 int typ;
306 int ctyp;
307 int stat;
308 int ufd;
309 int last_srvid;
310 int last_caid;
311 int tosleep;
312 char usr[32];
313 int udp_fd;
314 int fd_m2c;
315 struct sockaddr_in udp_sa;
316 int log;
317 int logcounter;
318 int cwfound;
319 int cwcache;
320 int cwnot;
321 uchar ucrc[4]; // needed by monitor and used by camd35
322 ulong pcrc; // pwd crc
323 AES_KEY aeskey; // needed by monitor and used by camd33, camd35
324 ushort ncd_msgid;
325 uchar ncd_skey[16];
326 int port_idx; // index in server ptab
327 int ncd_server; // newcamd server?
328#ifdef CS_ANTICASC
329 ushort ac_idx;
330 ushort ac_limit;
331 uchar ac_penalty;
332#endif
333 FTAB fchid;
334 FTAB ftab; // user [caid] and ident filter
335 CLASSTAB cltab;
336};
337
338struct s_reader
339{
340 int cs_idx;
341 int fd;
342 ulong grp;
343 int fallback;
344 int typ;
345 int card_system;
346 char label[32];
347 char device[128];
348 int detect;
349 int mhz;
350 int custom_speed;
351 int r_port;
352 char r_usr[64];
353 char r_pwd[64];
354 int r_crypted;
355 int l_port;
356 int log_port;
357 CAIDTAB ctab;
358 ulong boxid;
359 uchar aes_key[16];
360 ulong sidtabok; // positiv services
361 ulong sidtabno; // negative services
362 uchar hexserial[8];
363 int nprov;
364 uchar prid[CS_MAXPROV][8];
365 uchar availkeys[CS_MAXPROV][16]; // viaccess; misused in seca, if availkeys[PROV][0]=0 then expired, 1 then valid.
366 uchar sa[CS_MAXPROV][4]; // viaccess & seca
367 ushort acs; // irdeto
368 ushort caid[16];
369 uchar b_nano[256];
370 char pincode[5];
371 int logemm;
372 int cachemm;
373 int rewritemm;
374 int online;
375 int card_status;
376 struct s_module ph;
377 uchar ncd_key[16];
378 uchar ncd_skey[16];
379 int ncd_disable_server_filt;
380 ushort ncd_msgid;
381 int ncd_proto;
382 uchar tcp_connected;
383 int tcp_ito; // inactivity timeout
384 int tcp_rto; // reconnect timeout
385 time_t last_g; // get (if last_s-last_g>tcp_rto - reconnect )
386 time_t last_s; // send
387 uchar show_cls; // number of classes subscription showed on kill -31
388 int maxqlen; // max queue length
389 int qlen; // current queue length
390 FTAB fchid;
391 FTAB ftab;
392 CLASSTAB cltab;
393 uchar gbox_pwd[4];
394 uchar gbox_timecode[7];
395 int gbox_online;
396 uchar gbox_vers;
397 uchar gbox_prem;
398 int gbox_fd;
399 struct timeb gbox_lasthello; // incoming time stamp
400#ifdef CS_RDR_INIT_HIST
401 uchar init_history[1024];
402 int init_history_pos;
403#endif
404};
405
406#ifdef CS_ANTICASC
407
408struct s_acasc_shm {
409 ushort count : 15;
410 ushort deny : 1;
411};
412
413struct s_acasc {
414 ushort stat[10];
415 uchar idx; // current active index in stat[]
416};
417
418struct s_cpmap
419{
420 ushort caid;
421 ulong provid;
422 ushort sid;
423 ushort chid;
424 ushort dwtime;
425 struct s_cpmap *next;
426};
427#endif
428
429struct s_auth
430{
431 char usr[33];
432 char pwd[33];
433 int uniq;
434 int au;
435 int monlvl;
436 ulong grp;
437 int tosleep;
438 CAIDTAB ctab;
439 ulong sidtabok; // positiv services
440 ulong sidtabno; // negative services
441 FTAB fchid;
442 FTAB ftab; // user [caid] and ident filter
443 CLASSTAB cltab;
444 TUNTAB ttab;
445#ifdef CS_ANTICASC
446 int ac_idx;
447 int ac_users; // 0 - unlimited
448 uchar ac_penalty; // 0 - log, >0 - fake dw
449#endif
450 in_addr_t dynip;
451 uchar dyndns[64];
452 struct s_auth *next;
453};
454
455struct s_srvid
456{
457 int srvid;
458 char name[33];
459 struct s_srvid *next;
460};
461
462struct s_ip
463{
464 in_addr_t ip[2];
465 struct s_ip *next;
466};
467
468struct s_config
469{
470 int nice;
471 ulong netprio;
472 ulong ctimeout;
473 ulong ftimeout;
474 int cmaxidle;
475 int ulparent;
476 ulong delay;
477 int bindwait;
478 int resolvedelay;
479 int tosleep;
480 in_addr_t srvip;
481 char pidfile[128];
482 char usrfile[128];
483 struct s_auth *account;
484 struct s_srvid *srvid;
485 struct s_sidtab *sidtab;
486 int mon_port;
487 in_addr_t mon_srvip;
488 struct s_ip *mon_allowed;
489 int mon_aulow;
490 int mon_hideclient_to;
491 int mon_level;
492 int c33_port;
493 in_addr_t c33_srvip;
494 uchar c33_key[16];
495 int c33_crypted;
496 int c33_passive;
497 struct s_ip *c33_plain;
498 int c35_port;
499 in_addr_t c35_srvip;
500 PTAB c35_tcp_ptab;
501 in_addr_t c35_tcp_srvip;
502 PTAB ncd_ptab;
503 in_addr_t ncd_srvip;
504 uchar ncd_key[16];
505 int rad_port;
506 in_addr_t rad_srvip;
507 struct s_ip *rad_allowed;
508 char rad_usr[32];
509 char ser_device[512];
510 int srtimeout; // SerialReaderTimeount in millisec
511 int max_log_size;
512 int show_ecm_dw;
513 int waitforcards;
514 int preferlocalcards;
515 uchar gbox_pwd[8];
516 uchar ignorefile[512];
517 uchar cardfile[512];
518 uchar gbxShareOnl[512];
519 int maxdist;
520 int num_locals;
521 unsigned long locals[CS_MAXLOCALS];
522 //struct s_irdeto_quess *itab[0xff];
523#ifdef CS_ANTICASC
524 char ac_enabled;
525 int ac_users; // num of users for account (0 - default)
526 int ac_stime; // time to collect AC statistics (3 min - default)
527 int ac_samples; // qty of samples
528 int ac_penalty; // 0 - write to log
529 int ac_fakedelay; // 100-1000 ms
530 int ac_denysamples;
531 char ac_logfile[128];
532 struct s_cpmap *cpmap;
533#endif
534// struct s_reader reader[];
535};
536
537typedef struct ecm_request_t
538{
539
540 uchar ecm[256];
541 uchar cw[16];
542 uchar ecmd5[CS_ECMSTORESIZE];
543// uchar l;
544 short l;
545 ushort caid;
546 ushort ocaid;
547 ushort srvid;
548 ushort chid;
549 ushort pid;
550 ushort idx;
551 ulong prid;
552 int reader[CS_MAXREADER];
553 int cidx; // client index
554 int cpti; // client pending table index
555 int stage; // processing stage in server module
556 int level; // send-level in client module
557 int rc;
558 uchar rcEx;
559 struct timeb tps; // incoming time stamp
560 uchar locals_done;
561 ushort gbxCWFrom;
562 ushort gbxFrom;
563 ushort gbxTo;
564
565 uchar gbxForward[16];
566 int gbxRidx;
567} GCC_PACK ECM_REQUEST;
568
569typedef struct emm_packet_t
570{
571 uchar emm[258];
572 uchar l;
573 uchar caid[2];
574 uchar provid[4];
575 uchar hexserial[8];
576 uchar type;
577 int cidx;
578} GCC_PACK EMM_PACKET;
579
580// oscam-simples
581extern char *remote_txt(void);
582extern char *trim(char *);
583extern char *strtolower(char *);
584extern int gethexval(char);
585extern int cs_atob(uchar *, char *, int);
586extern ulong cs_atoi(char *, int, int);
587extern int byte_atob(char *);
588extern long word_atob(char *);
589extern int key_atob(char *, uchar *);
590extern int key_atob4(char *, uchar *);
591extern char *key_btoa(char *, uchar *);
592extern char *cs_hexdump(int, uchar *, int);
593extern in_addr_t cs_inet_order(in_addr_t);
594extern char *cs_inet_ntoa(in_addr_t);
595extern in_addr_t cs_inet_addr(char *txt);
596extern ulong b2i(int, uchar *);
597extern ullong b2ll(int, uchar *);
598extern uchar *i2b(int, ulong);
599extern ulong a2i(char *, int);
600extern int boundary(int, int);
601extern void cs_ftime(struct timeb *);
602extern void cs_sleepms(int);
603extern int bytes_available(int);
604extern void cs_setpriority(int);
605extern struct s_auth *find_user(char *);
606
607// oscam variables
608extern int pfd, rfd, fd_c2m, fd_m2c, cs_idx, *c_start, cs_ptyp, cs_dblevel, cs_hw;
609extern int *logidx, *loghistidx, *log_fd;
610extern int is_server, *mcl;
611extern uchar mbuf[1024];
612extern ushort len4caid[256];
613extern pid_t master_pid;
614extern struct s_ecm *ecmcache;
615extern struct s_client *client;
616extern struct s_reader *reader;
617
618extern struct card_struct *Cards;
619extern struct idstore_struct *idstore;
620extern unsigned long *IgnoreList;
621
622extern struct s_config *cfg;
623extern char cs_confdir[], *loghist;
624extern EMM_PACKET epg;
625extern struct s_module ph[CS_MAX_MOD];
626extern ECM_REQUEST *ecmtask;
627extern char logfile[256];
628#ifdef CS_ANTICASC
629extern struct s_acasc_shm *acasc;
630extern FILE *fpa;
631extern int use_ac_log;
632#endif
633
634
635// oscam
636extern char *cs_platform(char *);
637extern int recv_from_udpipe(uchar *, int);
638extern char* username(int);
639extern int idx_from_pid(pid_t);
640extern int chk_bcaid(ECM_REQUEST *, CAIDTAB *);
641extern void cs_exit(int sig);
642extern int cs_fork(in_addr_t, in_port_t);
643extern void wait4master(void);
644extern int cs_auth_client(struct s_auth *, char*);
645extern void cs_disconnect_client(void);
646extern int check_ecmcache(ECM_REQUEST *, ulong);
647extern int write_to_pipe(int, int, uchar *, int);
648extern int read_from_pipe(int, uchar **, int);
649extern int write_ecm_request(int, ECM_REQUEST *);
650extern int write_ecm_answer(int, ECM_REQUEST *);
651extern void log_emm_request(int);
652extern ulong chk_provid(uchar *, ushort);
653extern void guess_cardsystem(ECM_REQUEST *);
654extern void guess_irdeto(ECM_REQUEST *);
655extern void get_cw(ECM_REQUEST *);
656extern void do_emm(EMM_PACKET *);
657extern ECM_REQUEST *get_ecmtask(void);
658extern void request_cw(ECM_REQUEST *, int, int);
659extern int send_dcw(ECM_REQUEST *);
660extern int process_input(uchar *, int, int);
661extern int chk_srvid(ECM_REQUEST *, int);
662extern int chk_sfilter(ECM_REQUEST *, PTAB*);
663extern int chk_ufilters(ECM_REQUEST *);
664extern int chk_rfilter(ECM_REQUEST *, struct s_reader *);
665extern int chk_rsfilter(ECM_REQUEST *, int);
666extern int chk_avail_reader(ECM_REQUEST *, struct s_reader *);
667extern void set_signal_handler(int , int , void (*)(int));
668extern void cs_log_config(void);
669
670#ifdef CS_ANTICASC
671//extern void start_anticascader(void);
672extern void init_ac(void);
673extern void ac_init_stat(int);
674extern int ac_init_log(char*);
675extern void ac_do_stat(void);
676extern void ac_init_client(struct s_auth *);
677extern void ac_chk(ECM_REQUEST*, int);
678#endif
679
680// oscam-nano
681extern int chk_class(ECM_REQUEST *, CLASSTAB*, const char*, const char*);
682
683// oscam-config
684extern int init_config(void);
685extern int init_userdb(void);
686extern int init_readerdb(void);
687extern int init_sidtab(void);
688extern int init_srvid(void);
689extern int search_boxkey(ushort, ulong, char *);
690extern void init_len4caid(void);
691extern int init_irdeto_guess_tab(void);
692
693// oscam-reader
694extern int ridx, logfd;
695extern void cs_ri_brk(int);
696extern void cs_ri_log(char *,...);
697extern void start_cardreader(void);
698extern void reader_card_info(void);
699
700// oscam-log
701extern int cs_init_log(char *);
702extern void cs_log(char *,...);
703extern void cs_debug(char *,...);
704extern void cs_ddump(uchar *, int, char *, ...);
705extern void cs_close_log(void);
706extern int cs_init_statistics(char *);
707extern void cs_statistics(int);
708extern void cs_dump(uchar *, int, char *, ...);
709
710// oscam-aes
711extern void aes_set_key(char *);
712extern void aes_encrypt_idx(int, uchar *, int);
713extern void aes_decrypt(uchar *, int);
714#define aes_encrypt(b, n) aes_encrypt_idx(cs_idx, b, n)
715
716// reader-common
717extern int reader_device_init(char *, int);
718extern int reader_checkhealth(void);
719extern int reader_ecm(ECM_REQUEST *);
720extern int reader_emm(EMM_PACKET *);
721
722// reader-irdeto
723extern int irdeto_card_init(uchar *, int);
724extern int irdeto_do_ecm(ECM_REQUEST *);
725extern int irdeto_do_emm(EMM_PACKET *);
726extern int irdeto_card_info(void);
727
728// reader-viaccess
729extern int viaccess_card_init(uchar *, int);
730extern int viaccess_do_ecm(ECM_REQUEST *);
731extern int viaccess_do_emm(EMM_PACKET *);
732extern int viaccess_card_info(void);
733
734// reader-videoguard
735extern int videoguard_card_init(uchar *, int);
736extern int videoguard_do_ecm(ECM_REQUEST *);
737extern int videoguard_do_emm(EMM_PACKET *);
738extern int videoguard_card_info(void);
739
740// reader-cryptoworks
741extern int cryptoworks_card_init(uchar *, int);
742extern int cryptoworks_do_ecm(ECM_REQUEST *);
743extern int cryptoworks_do_emm(EMM_PACKET *);
744extern int cryptoworks_card_info(void);
745
746// reader-seca
747extern int seca_card_init(uchar *, int);
748extern int seca_do_ecm(ECM_REQUEST *);
749extern int seca_do_emm(EMM_PACKET *);
750extern int seca_card_info(void);
751
752// protocol modules
753extern int monitor_send_idx(int, char *);
754extern void module_monitor(struct s_module *);
755extern void module_camd35(struct s_module *);
756extern void module_camd35_tcp(struct s_module *);
757extern void module_camd33(struct s_module *);
758extern void module_newcamd(struct s_module *);
759extern void module_radegast(struct s_module *);
760extern void module_oscam_ser(struct s_module *);
761extern void module_gbox(struct s_module *);
762extern struct timeval *chk_pending(struct timeb tp_ctimeout);
763#endif // CS_GLOBALS
Note: See TracBrowser for help on using the repository browser.