Changeset 11337
- Timestamp:
- 01/15/17 10:55:40 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/oscam-chk.c
r11308 r11337 28 28 } 29 29 30 31 30 static int32_t find_nano(uchar *ecm, int32_t l, uchar nano, int32_t s) 32 31 { … … 190 189 } 191 190 192 193 191 int32_t has_lb_srvid(struct s_client *cl, ECM_REQUEST *er) 194 192 { … … 205 203 return 0; 206 204 } 207 208 205 209 206 int32_t chk_srvid_match_by_caid_prov(uint16_t caid, uint32_t provid, SIDTAB *sidtab) … … 400 397 } 401 398 402 403 399 int32_t chk_ident_filter(uint16_t rcaid, uint32_t rprid, FTAB *ftab) 404 400 { … … 430 426 return(rc); 431 427 } 432 433 428 434 429 int32_t chk_ufilters(ECM_REQUEST *er) … … 573 568 return (rc); 574 569 } 575 576 570 577 571 static int32_t chk_rfilter(ECM_REQUEST *er, struct s_reader *rdr) … … 984 978 if(skip == 0 || (foundcaid == 1 && foundprovid == 1 && entryok == 0 && skip == 1)) 985 979 { 986 cs_log_dump_dbg(D_TRACE, er->ecm, er->ecmlen, 987 "following ECM %04X@%06X:%04X was filtered by ECMHeaderwhitelist of Reader %s from User %s because of not matching Header:", 988 er->caid, er->prid, er->srvid, rdr->label, username(er->client)); 980 cs_log_dump_dbg(D_TRACE, er->ecm, er->ecmlen, "following ECM %04X@%06X:%04X was filtered by ECMHeaderwhitelist of Reader %s from User %s because of not matching Header:", er->caid, er->prid, er->srvid, rdr->label, username(er->client)); 989 981 rdr->ecmsfilteredhead += 1; 990 982 rdr->webif_ecmsfilteredhead += 1; … … 997 989 998 990 //Check ip source+dest: 999 if(cfg.block_same_ip && IP_EQUAL(cur_cl->ip, rdr->client->ip) && 1000 get_module(cur_cl)->listenertype != LIS_DVBAPI && 1001 is_network_reader(rdr)) 1002 { 1003 rdr_log_dbg(rdr, D_TRACE, "User (%s) has the same ip (%s) as the reader, blocked because block_same_ip=1!", 1004 username(cur_cl), cs_inet_ntoa(rdr->client->ip)); 991 if(cfg.block_same_ip && IP_EQUAL(cur_cl->ip, rdr->client->ip) && get_module(cur_cl)->listenertype != LIS_DVBAPI && is_network_reader(rdr)) 992 { 993 rdr_log_dbg(rdr, D_TRACE, "User (%s) has the same ip (%s) as the reader, blocked because block_same_ip=1!", username(cur_cl), cs_inet_ntoa(rdr->client->ip)); 1005 994 return 0; 1006 995 } … … 1008 997 if(cfg.block_same_name && strcmp(username(cur_cl), rdr->label) == 0) 1009 998 { 1010 rdr_log_dbg(rdr, D_TRACE, "User (%s) has the same name as the reader, blocked because block_same_name=1!", 1011 username(cur_cl)); 999 rdr_log_dbg(rdr, D_TRACE, "User (%s) has the same name as the reader, blocked because block_same_name=1!", username(cur_cl)); 1012 1000 return 0; 1013 1001 } … … 1029 1017 { 1030 1018 CAIDTAB_DATA *d = &ctab->ctdata[i]; 1031 if((caid & d->mask) == d->caid) 1032 return d->cmap ? d->cmap : caid; 1019 if((caid & d->mask) == d->caid) { return d->cmap ? d->cmap : caid; } 1033 1020 } 1034 1021 return -1; … … 1052 1039 int32_t caid; 1053 1040 caid = chk_caid(er->caid, ctab); 1054 if(caid < 0) 1055 { return 0; } 1041 if(caid < 0) { return 0; } 1056 1042 er->caid = caid; 1057 1043 return 1; … … 1072 1058 } 1073 1059 1074 1075 1076 1060 /** 1077 1061 * Check for ecm request that expects half cw format … … 1079 1063 int8_t is_halfCW_er(ECM_REQUEST *er) 1080 1064 { 1081 if(caid_is_videoguard(er->caid) && 1082 (er->caid == 0x09C4 || er->caid == 0x098C || er->caid == 0x0963 || er->caid == 0x09CD || er->caid == 0x0919 || er->caid == 0x093B || er->caid == 0x098E) 1083 ) 1084 return 1; 1085 1086 return 0; 1087 } 1088 1065 if( caid_is_videoguard(er->caid) && (er->caid == 0x09C4 || er->caid == 0x09C7 || er->caid == 0x098C || er->caid == 0x0963 || er->caid == 0x09CD || er->caid == 0x0919 || er->caid == 0x093B || er->caid == 0x098E)) 1066 { return 1; } 1067 return 0; 1068 } 1089 1069 1090 1070 /** … … 1093 1073 int8_t chk_halfCW(ECM_REQUEST *er, uchar *cw) 1094 1074 { 1095 if(is_halfCW_er(er) && cw){ 1096 1097 int8_t part1 = checkCWpart(cw, 0); 1098 int8_t part2 = checkCWpart(cw, 1); 1099 1100 //check for correct half cw format 1101 if(part1 && part2){ 1102 return 0; 1103 } 1104 1105 //check for correct cw position 1106 if( 1107 (get_odd_even(er) == 0x80 && part1 && !part2) //xxxxxxxx00000000 1075 if(is_halfCW_er(er) && cw) 1076 { 1077 uchar cw15 = cw[15]; 1078 if(get_odd_even(er) == 0x80 && cw[15] == 0xF0) { cw[15] = 0; } 1079 1080 int8_t part1 = checkCWpart(cw, 0); 1081 int8_t part2 = checkCWpart(cw, 1); 1082 1083 //check for correct half cw format 1084 if(part1 && part2){ cw[15] = cw15; return 0; } 1085 1086 //check for correct cw position 1087 if( 1088 (get_odd_even(er) == 0x80 && part1 && !part2) //xxxxxxxx00000000 1108 1089 || 1109 1090 (get_odd_even(er) == 0x81 && !part1 && part2) //00000000xxxxxxxx 1110 ) 1111 { 1112 return 1; 1113 } 1114 1115 return 0; //not correct swapped cw 1116 1117 }else 1091 ) 1092 { return 1; } 1093 cw[15] = cw15; 1094 return 0; //not correct swapped cw 1095 }else 1118 1096 return 1; 1119 1097 } 1120 1121 1098 1122 1099 /** … … 1128 1105 for(i = 0; i < len; i++) 1129 1106 { 1130 if(node_id[i]) 1131 { return 0; } 1107 if(node_id[i]) { return 0; } 1132 1108 } 1133 1109 return 1; … … 1137 1113 bool check_client(struct s_client *cl) 1138 1114 { 1139 if(cl && !cl->kill) 1140 { return true; } 1115 if(cl && !cl->kill) { return true; } 1141 1116 return false; 1142 1117 } … … 1148 1123 { 1149 1124 CAIDVALUETAB_DATA *cvdata = &cv->cvdata[i]; 1150 if(cvdata->caid == caid || cvdata->caid == caid >> 8) 1151 return cvdata->value; 1125 if(cvdata->caid == caid || cvdata->caid == caid >> 8) { return cvdata->value; } 1152 1126 } 1153 1127 return default_value; … … 1158 1132 uint32_t i, is_fakecw = 0; 1159 1133 uint32_t idx = ((cw[0]&0xF)<<4) | (cw[8]&0xF); 1160 1134 1161 1135 cs_readlock(__func__, &config_lock); 1162 1136 for(i=0; i<cfg.fakecws[idx].count; i++)
Note:
See TracChangeset
for help on using the changeset viewer.