Changeset 4144
- Timestamp:
- 12/18/10 08:49:32 (13 years ago)
- Location:
- trunk
- Files:
-
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Maketype
r4136 r4144 64 64 $(LIBFILE1)(module-stat.o) \ 65 65 $(LIBFILE1)(module-datastruct-llist.o) \ 66 $(LIBFILE1)(oscam-nano.o) \67 66 $(LIBFILE1)(oscam-chk.o) \ 68 67 $(LIBFILE1)(oscam-http.o) \ -
trunk/globals.h
r4141 r4144 1324 1324 extern int chk_sfilter(ECM_REQUEST *, PTAB*); 1325 1325 extern int chk_ufilters(ECM_REQUEST *); 1326 extern int chk_rfilter(ECM_REQUEST *, struct s_reader *);1327 1326 extern int chk_rsfilter(struct s_reader * reader, ECM_REQUEST *); 1328 extern int chk_avail_reader(ECM_REQUEST *, struct s_reader *);1329 1327 extern int matching_reader(ECM_REQUEST *, struct s_reader *); 1330 1328 extern void set_signal_handler(int , int , void (*)); … … 1335 1333 extern void update_reader_config(uchar *ptr); 1336 1334 extern int chk_ctab(ushort caid, CAIDTAB *ctab); 1337 extern int chk_srvid_match_by_caid_prov(ushort caid, ulong provid, SIDTAB *sidtab);1338 1335 extern int chk_srvid_by_caid_prov(struct s_client *, ushort caid, ulong provid); 1339 1336 extern void kill_thread(struct s_client *cl); … … 1356 1353 extern void ac_chk(ECM_REQUEST*, int); 1357 1354 #endif 1358 1359 // oscam-nano1360 extern int chk_class(ECM_REQUEST *, CLASSTAB*, const char*, const char*);1361 1355 1362 1356 // oscam-config -
trunk/oscam-chk.c
r4141 r4144 1 //FIXME Not checked on threadsafety yet; after checking please remove this line2 1 #include "globals.h" 2 3 #define CS_NANO_CLASS 0xE2 4 5 static int find_nano(uchar *ecm, int l, uchar nano, int s) 6 { 7 uchar *snano; 8 9 if( s >= l ) return 0; 10 if( !s ) s=(ecm[4]==0xD2) ? 12 : 9; // tpsflag -> offset+3 11 snano = ecm + s; 12 13 while( (*snano!=nano) && (s<l) ) 14 { 15 if( *snano == 0xEA ) return 0; 16 snano++; 17 s++; 18 } 19 20 return (s<l)?++s:0; 21 } 22 23 static int chk_class(ECM_REQUEST *er, CLASSTAB *clstab, const char *D_USE(type), const char *D_USE(name)) 24 { 25 int i, j, an, cl_n, l; 26 uchar ecm_class; 27 28 if( er->caid!=0x0500 ) return 1; 29 if( !clstab->bn && !clstab->an ) return 1; 30 31 j=an=cl_n=l=0; 32 while( (j=find_nano(er->ecm, er->l, CS_NANO_CLASS, j)) > 0 ) 33 { 34 l = er->ecm[j]; 35 ecm_class = er->ecm[j+l]; 36 cs_debug_mask(D_CLIENT, "ecm class=%02X", ecm_class); 37 for( i=0; i<clstab->bn; i++ ) // search in blocked 38 if( ecm_class==clstab->bclass[i] ) 39 { 40 cs_debug_mask(D_CLIENT, "class %02X rejected by %s '%s' !%02X filter", 41 ecm_class, type, name, ecm_class); 42 return 0; 43 } 44 45 cl_n++; 46 for( i=0; i<clstab->an; i++ ) // search in allowed 47 if( ecm_class==clstab->aclass[i] ) 48 { 49 an++; 50 break; 51 } 52 j+=l; 53 } 54 55 if( cl_n && clstab->an ) 56 { 57 if( an ) 58 cs_debug_mask(D_CLIENT, "ECM classes allowed by %s '%s' filter", type, name); 59 else { 60 cs_debug_mask(D_CLIENT, "ECM classes don't match %s '%s' filter, rejecting", type, name); 61 return 0; 62 } 63 } 64 65 return 1; 66 } 3 67 4 68 int chk_srvid_match(ECM_REQUEST *er, SIDTAB *sidtab) … … 50 114 } 51 115 52 int chk_srvid_match_by_caid_prov(ushort caid, ulong provid, SIDTAB *sidtab)116 static int chk_srvid_match_by_caid_prov(ushort caid, ulong provid, SIDTAB *sidtab) 53 117 { 54 118 int i, rc=0; … … 262 326 } 263 327 264 int chk_rfilter(ECM_REQUEST *er, struct s_reader *rdr)328 static int chk_rfilter(ECM_REQUEST *er, struct s_reader *rdr) 265 329 { 266 330 int i, j, rc=1; … … 299 363 } 300 364 301 int chk_avail_reader(ECM_REQUEST *er, struct s_reader *rdr)302 {303 if( !chk_rfilter(er, rdr) ) {304 if( !er->rcEx ) er->rcEx=(E1_READER<<4)|E2_IDENT;305 return 0;306 }307 if( !chk_class(er, &rdr->cltab, "reader", rdr->label) ) {308 if( !er->rcEx ) er->rcEx=(E1_READER<<4)|E2_CLASS;309 return 0;310 }311 if( !chk_chid(er, &rdr->fchid, "reader", rdr->label) ) {312 if( !er->rcEx ) er->rcEx=(E1_READER<<4)|E2_CHID;313 return 0;314 }315 //fixme re-activated code for testing316 if( rdr->typ=='r' )317 {318 if( rdr->qlen>=rdr->maxqlen )319 {320 cs_log("reader '%s' max. queue length(%d) reached, rejected", rdr->label, rdr->qlen);321 if( !er->rcEx ) er->rcEx=(E1_READER<<4)|E2_QUEUE;322 return 0;323 }324 else {325 cs_log("reader '%s' qlen=%d", rdr->label, rdr->qlen);326 rdr->qlen++;327 }328 }329 330 return 1;331 }332 333 365 int chk_ctab(ushort caid, CAIDTAB *ctab) { 334 366 if (!caid || !ctab->caid[0])
Note:
See TracChangeset
for help on using the changeset viewer.