Changeset 3652
- Timestamp:
- 10/21/10 12:07:31 (13 years ago)
- Location:
- trunk
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/globals.h
r3650 r3652 548 548 int crypted; 549 549 int dup; 550 int au;550 struct s_reader *aureader; //the reader that needs EMMs from this client 551 551 int autoau; 552 552 int monlvl; -
trunk/module-camd33.c
r3618 r3652 1 1 #include "globals.h" 2 extern struct s_reader reader[CS_MAXREADER];3 2 4 3 #define REQ_SIZE 4 … … 32 31 static void camd33_request_emm() 33 32 { 34 int au;35 33 uchar mbuf[20]; 36 au=cur_client()->au;37 if ( (au<0) || (au>CS_MAXREADER)) return; // TODO38 if ( reader[au].hexserial[0])39 { 40 log_emm_request( au);34 struct s_reader *aureader=cur_client()->aureader; 35 if (!aureader) return; // TODO 36 if (aureader->hexserial[0]) 37 { 38 log_emm_request(get_ridx(aureader)); 41 39 mbuf[0]=0; 42 mbuf[1]= reader[au].caid[0]>>8;43 mbuf[2]= reader[au].caid[0]&0xff;44 memcpy(mbuf+3, reader[au].hexserial, 4);45 memcpy(mbuf+7, & reader[au].prid[0][1], 3);46 memcpy(mbuf+10, & reader[au].prid[2][1], 3);40 mbuf[1]=aureader->caid[0]>>8; 41 mbuf[2]=aureader->caid[0]&0xff; 42 memcpy(mbuf+3, aureader->hexserial, 4); 43 memcpy(mbuf+7, &aureader->prid[0][1], 3); 44 memcpy(mbuf+10, &aureader->prid[2][1], 3); 47 45 camd33_send(mbuf, 13); 48 46 } -
trunk/module-camd35.c
r3618 r3652 1 1 #include "globals.h" 2 extern struct s_reader reader[CS_MAXREADER];3 2 4 3 //CMD00 - ECM (request) … … 146 145 static void camd35_request_emm(ECM_REQUEST *er) 147 146 { 148 int i , au;147 int i; 149 148 time_t now; 150 149 uchar mbuf[1024]; 151 150 struct s_client *cl = cur_client(); 152 151 153 au = cl->au;154 if ( (au < 0) || (au > CS_MAXREADER))152 struct s_reader *aureader = cl->aureader; 153 if (!aureader) 155 154 return; // TODO 156 155 157 156 time(&now); 158 if (!memcmp(cl->lastserial, reader[au].hexserial, 8))157 if (!memcmp(cl->lastserial, aureader->hexserial, 8)) 159 158 if (abs(now-cl->last) < 180) return; 160 159 161 memcpy(cl->lastserial, reader[au].hexserial, 8);160 memcpy(cl->lastserial, aureader->hexserial, 8); 162 161 cl->last = now; 163 162 164 if ( reader[au].caid[0])163 if (aureader->caid[0]) 165 164 { 166 165 cl->disable_counter = 0; 167 log_emm_request( au);166 log_emm_request(get_ridx(aureader)); 168 167 } 169 168 else … … 178 177 179 178 //override request provid with auprovid if set in CMD05 180 if( reader[au].auprovid) {181 if( reader[au].auprovid != er->prid)182 memcpy(mbuf + 12, i2b(4, reader[au].auprovid), 4);179 if(aureader->auprovid) { 180 if(aureader->auprovid != er->prid) 181 memcpy(mbuf + 12, i2b(4, aureader->auprovid), 4); 183 182 else 184 183 memcpy(mbuf + 12, i2b(4, er->prid), 4); … … 190 189 mbuf[0] = 5; 191 190 mbuf[1] = 111; 192 if ( reader[au].caid[0])191 if (aureader->caid[0]) 193 192 { 194 193 mbuf[39] = 1; // no. caids 195 mbuf[20] = reader[au].caid[0]>>8; // caid's (max 8)196 mbuf[21] = reader[au].caid[0]&0xff;197 memcpy(mbuf + 40, reader[au].hexserial, 6); // serial now 6 bytes198 mbuf[47] = reader[au].nprov;199 for (i = 0; i < reader[au].nprov; i++)194 mbuf[20] = aureader->caid[0]>>8; // caid's (max 8) 195 mbuf[21] = aureader->caid[0]&0xff; 196 memcpy(mbuf + 40, aureader->hexserial, 6); // serial now 6 bytes 197 mbuf[47] = aureader->nprov; 198 for (i = 0; i < aureader->nprov; i++) 200 199 { 201 if ((( reader[au].caid[0] >= 0x1700) && (reader[au].caid[0] <= 0x1799)) || // Betacrypt202 (( reader[au].caid[0] >= 0x0600) && (reader[au].caid[0] <= 0x0699))) // Irdeto (don't know if this is correct, cause I don't own a IRDETO-Card)200 if (((aureader->caid[0] >= 0x1700) && (aureader->caid[0] <= 0x1799)) || // Betacrypt 201 ((aureader->caid[0] >= 0x0600) && (aureader->caid[0] <= 0x0699))) // Irdeto (don't know if this is correct, cause I don't own a IRDETO-Card) 203 202 { 204 mbuf[48 + (i*5)] = reader[au].prid[i][0];205 memcpy(&mbuf[50 + (i*5)], & reader[au].prid[i][1], 3);203 mbuf[48 + (i*5)] = aureader->prid[i][0]; 204 memcpy(&mbuf[50 + (i*5)], &aureader->prid[i][1], 3); 206 205 } 207 206 else 208 207 { 209 mbuf[48 + (i * 5)] = reader[au].prid[i][2];210 mbuf[49 + (i * 5)] = reader[au].prid[i][3];211 memcpy(&mbuf[50 + (i * 5)], & reader[au].sa[i][0],4); // for conax we need at least 4 Bytes208 mbuf[48 + (i * 5)] = aureader->prid[i][2]; 209 mbuf[49 + (i * 5)] =aureader->prid[i][3]; 210 memcpy(&mbuf[50 + (i * 5)], &aureader->sa[i][0],4); // for conax we need at least 4 Bytes 212 211 } 213 212 } 214 213 //we think client/server protocols should deliver all information, and only readers should discard EMM 215 mbuf[128] = ( reader[au].blockemm_g == 1) ? 0: 1;216 mbuf[129] = ( reader[au].blockemm_s == 1) ? 0: 1;217 mbuf[130] = ( reader[au].blockemm_u == 1) ? 0: 1;218 //mbuf[131] = reader[au].card_system; //Cardsystem for Oscam client214 mbuf[128] = (aureader->blockemm_g == 1) ? 0: 1; 215 mbuf[129] = (aureader->blockemm_s == 1) ? 0: 1; 216 mbuf[130] = (aureader->blockemm_u == 1) ? 0: 1; 217 //mbuf[131] = aureader->card_system; //Cardsystem for Oscam client 219 218 } 220 219 else // disable emm … … 290 289 static void camd35_process_emm(uchar *buf) 291 290 { 292 int au;293 291 EMM_PACKET epg; 294 292 memset(&epg, 0, sizeof(epg)); 295 au = cur_client()->au; 296 if ((au < 0) || (au > CS_MAXREADER)) return; // TODO 293 if (!cur_client()->aureader ) return; // TODO 297 294 epg.l = buf[1]; 298 295 memcpy(epg.caid, buf + 10, 2); -
trunk/module-cccam.c
r3642 r3652 62 62 block->counter = 0; 63 63 block->sum = 0; 64 }65 66 int is_au(struct s_client *cl) {67 int au = cl->au;68 if ((au < 0) || (au > CS_MAXREADER))69 return 0;70 return 1;71 64 } 72 65 … … 1858 1851 cs_debug_mask(D_EMM, "%s EMM Request received!", getprefix()); 1859 1852 1860 if (! is_au(cl)) {1853 if (!cl->aureader) { 1861 1854 cs_debug_mask( 1862 1855 D_EMM, … … 2055 2048 */ 2056 2049 ulong get_reader_hexserial_crc(struct s_client *cl) { 2057 if (! is_au(cl))2050 if (!cl->aureader) 2058 2051 return 0; 2059 2052 … … 2267 2260 LLIST *reported_carddatas = ll_create(); 2268 2261 2269 int isau = is_au(cl);2262 int isau = (cl->aureader)?1:0; 2270 2263 2271 2264 struct s_reader *rdr; -
trunk/module-monitor.c
r3650 r3652 290 290 con = 0; 291 291 292 if( (cau = cl->au+ 1) )292 if( (cau = get_ridx(cl->aureader) + 1) ) 293 293 if ((now-cl->lastemm) /60 > cfg->mon_aulow) 294 294 cau=-cau; -
trunk/module-newcamd.c
r3633 r3652 618 618 uchar *key=0; 619 619 uchar passwdcrypt[120]; 620 int au=0;620 struct s_reader *aureader=first_reader; //FIXME strange enough au was initialized to 0 = first reader, and not to -1 = no reader 621 621 struct s_ip *p_ip; 622 622 struct s_client *cl = cur_client(); … … 712 712 if (ok) 713 713 { 714 au = cl->au;715 if (au != -1)714 aureader = cl->aureader; 715 if (aureader) 716 716 { 717 if (cfg->ncd_ptab.ports[cl->port_idx].ftab.filts[0].caid != reader[au].caid[0]718 && cfg->ncd_ptab.ports[cl->port_idx].ftab.filts[0].caid != reader[au].ftab.filts[0].caid719 && reader[au].typ != R_CCCAM) // disabling AU breaks cccam-au when cascading over newcamd, but with enabled au client was receiving wrong card data on faulty configured newcamd filters and when using betatunnel717 if (cfg->ncd_ptab.ports[cl->port_idx].ftab.filts[0].caid != aureader->caid[0] 718 && cfg->ncd_ptab.ports[cl->port_idx].ftab.filts[0].caid != aureader->ftab.filts[0].caid 719 && aureader->typ != R_CCCAM) // disabling AU breaks cccam-au when cascading over newcamd, but with enabled au client was receiving wrong card data on faulty configured newcamd filters and when using betatunnel 720 720 { 721 721 cs_log("AU wont be used on this port -> disable AU"); 722 au = -1;722 aureader = NULL; 723 723 } 724 724 else 725 725 { 726 cs_log("AU enabled for user %s on reader %s", usr, reader[au].label);726 cs_log("AU enabled for user %s on reader %s", usr, aureader->label); 727 727 } 728 728 } … … 760 760 761 761 // set userfilter for au enabled clients 762 if (au != -1)763 cl->ftab.filts[0] = mk_user_au_ftab( au);762 if (aureader) 763 cl->ftab.filts[0] = mk_user_au_ftab(get_ridx(aureader)); 764 764 765 765 pufilt = &cl->ftab.filts[0]; … … 770 770 mbuf[2] = 0x00; 771 771 772 if( au != -1)772 if(aureader) 773 773 mbuf[3] = 1; 774 774 else … … 780 780 mbuf[7] = 0x00; 781 781 782 if (au != -1)782 if (aureader) 783 783 { 784 784 if (((pufilt->caid >> 8) == 0x17) || ((pufilt->caid >> 8) == 0x06)) // Betacrypt or Irdeto … … 788 788 mbuf[8]=0x00; //serial only 4 bytes 789 789 mbuf[9]=0x00; //serial only 4 bytes 790 // 1 Byte Hex Base (see reader-irdeto.c how this is stored in " reader[au].hexserial")791 mbuf[10]= reader[au].hexserial[3];792 // 3 Bytes Hex Serial (see reader-irdeto.c how this is stored in " reader[au].hexserial")793 mbuf[11]= reader[au].hexserial[0];794 mbuf[12]= reader[au].hexserial[1];795 mbuf[13]= reader[au].hexserial[2];790 // 1 Byte Hex Base (see reader-irdeto.c how this is stored in "aureader->hexserial") 791 mbuf[10]=aureader->hexserial[3]; 792 // 3 Bytes Hex Serial (see reader-irdeto.c how this is stored in "aureader->hexserial") 793 mbuf[11]=aureader->hexserial[0]; 794 mbuf[12]=aureader->hexserial[1]; 795 mbuf[13]=aureader->hexserial[2]; 796 796 } 797 797 else if (((pufilt->caid >> 8) == 0x05) || ((pufilt->caid >> 8) == 0x0D)) 798 798 { 799 799 mbuf[8] = 0x00; 800 mbuf[9] = reader[au].hexserial[0];801 mbuf[10] = reader[au].hexserial[1];802 mbuf[11] = reader[au].hexserial[2];803 mbuf[12] = reader[au].hexserial[3];804 mbuf[13] = reader[au].hexserial[4];800 mbuf[9] = aureader->hexserial[0]; 801 mbuf[10] = aureader->hexserial[1]; 802 mbuf[11] = aureader->hexserial[2]; 803 mbuf[12] = aureader->hexserial[3]; 804 mbuf[13] = aureader->hexserial[4]; 805 805 } 806 806 else 807 807 { 808 mbuf[8] = reader[au].hexserial[0];809 mbuf[9] = reader[au].hexserial[1];810 mbuf[10] = reader[au].hexserial[2];811 mbuf[11] = reader[au].hexserial[3];812 mbuf[12] = reader[au].hexserial[4];813 mbuf[13] = reader[au].hexserial[5];808 mbuf[8] = aureader->hexserial[0]; 809 mbuf[9] = aureader->hexserial[1]; 810 mbuf[10] = aureader->hexserial[2]; 811 mbuf[11] = aureader->hexserial[3]; 812 mbuf[12] = aureader->hexserial[4]; 813 mbuf[13] = aureader->hexserial[5]; 814 814 } 815 815 } 816 816 else 817 817 { 818 cl->au = -1;818 cl->aureader = NULL; 819 819 mbuf[8] = 0x00; 820 820 mbuf[9] = 0x00; … … 843 843 mbuf[20+11*j] = 0x00; 844 844 mbuf[21+11*j] = 0x00; 845 if ( au!=-1)845 if (aureader) 846 846 { 847 847 // check if user provid from IDENT exists on card … … 849 849 ulong rprid; 850 850 found=0; 851 if( pufilt->caid== reader[au].caid[0] )851 if( pufilt->caid==aureader->caid[0] ) 852 852 { 853 for( k=0; (k< reader[au].nprov); k++ )853 for( k=0; (k<aureader->nprov); k++ ) 854 854 { 855 rprid=b2i(3, & reader[au].prid[k][1]);855 rprid=b2i(3, &aureader->prid[k][1]); 856 856 if( rprid==pufilt->prids[j] ) 857 857 { 858 858 if (((pufilt->caid >> 8) == 0x17) || ((pufilt->caid >> 8) == 0x06)) // Betacrypt or Irdeto 859 859 { 860 mbuf[22+11*j] = reader[au].prid[k][0];861 mbuf[23+11*j] = reader[au].prid[k][1];862 mbuf[24+11*j] = reader[au].prid[k][2];863 mbuf[25+11*j] = reader[au].prid[k][3];860 mbuf[22+11*j] = aureader->prid[k][0]; 861 mbuf[23+11*j] = aureader->prid[k][1]; 862 mbuf[24+11*j] = aureader->prid[k][2]; 863 mbuf[25+11*j] = aureader->prid[k][3]; 864 864 } 865 865 else 866 866 { 867 mbuf[22+11*j] = reader[au].sa[k][0];868 mbuf[23+11*j] = reader[au].sa[k][1];869 mbuf[24+11*j] = reader[au].sa[k][2];870 mbuf[25+11*j] = reader[au].sa[k][3];867 mbuf[22+11*j] = aureader->sa[k][0]; 868 mbuf[23+11*j] = aureader->sa[k][1]; 869 mbuf[24+11*j] = aureader->sa[k][2]; 870 mbuf[25+11*j] = aureader->sa[k][3]; 871 871 } 872 872 found=1; … … 906 906 memset(&cd, 0, sizeof(cd)); 907 907 908 if (au != -1)908 if (aureader) 909 909 { 910 if ( reader[au].blockemm_g)910 if (aureader->blockemm_g) 911 911 cd.sid |= 4; 912 if ( reader[au].blockemm_s)912 if (aureader->blockemm_s) 913 913 cd.sid |= 2; 914 if ( reader[au].blockemm_u)914 if (aureader->blockemm_u) 915 915 cd.sid |= 1; 916 916 } … … 987 987 static void newcamd_process_emm(uchar *buf) 988 988 { 989 int au,ok=1;989 int ok=1; 990 990 ushort caid; 991 991 struct s_client *cl = cur_client(); … … 993 993 994 994 memset(&epg, 0, sizeof(epg)); 995 au=cl->au;995 struct s_reader *aureader=cl->aureader; 996 996 997 997 // if client is not allowed to do AU just send back the OK-answer to 998 998 // the client and do nothing else with the received data 999 if ( (au>=0) && (au<=CS_MAXREADER))999 if (aureader) 1000 1000 { 1001 1001 epg.l=buf[2]+3; … … 1004 1004 epg.caid[1] = (uchar)(caid); 1005 1005 1006 epg.provid[0] = (uchar)( reader[au].auprovid>>24);1007 epg.provid[1] = (uchar)( reader[au].auprovid>>16);1008 epg.provid[2] = (uchar)( reader[au].auprovid>>8);1009 epg.provid[3] = (uchar)( reader[au].auprovid);1006 epg.provid[0] = (uchar)(aureader->auprovid>>24); 1007 epg.provid[1] = (uchar)(aureader->auprovid>>16); 1008 epg.provid[2] = (uchar)(aureader->auprovid>>8); 1009 epg.provid[3] = (uchar)(aureader->auprovid); 1010 1010 1011 1011 /* if (caid == 0x0500) … … 1018 1018 case 0x8e70: // EMM-S 1019 1019 memcpy(epg.hexserial+1, buf+3, 4); 1020 epg.hexserial[4]= reader[au].hexserial[4];1020 epg.hexserial[4]=aureader->hexserial[4]; 1021 1021 break; 1022 1022 case 0x8870: // EMM-U -
trunk/module-serial.c
r3614 r3652 888 888 while(1) 889 889 { 890 cur_client()->au =(-1);890 cur_client()->aureader=NULL; 891 891 cur_client()->usr[0]='\0'; 892 892 cur_client()->login=time((time_t *)0); -
trunk/module-stat.c
r3631 r3652 440 440 { 441 441 int seconds = cfg->lb_reopen_seconds; 442 if (!rdr->audisabled && (grs->client->autoau || grs->client->au == i))442 if (!rdr->audisabled && (grs->client->autoau || grs->client->aureader == rdr)) 443 443 seconds = seconds/10; 444 444 -
trunk/oscam-http.c
r3650 r3652 1764 1764 else con=0; 1765 1765 1766 if( (cau= cl->au+1) && (now-cl->lastemm)/60 > cfg->mon_aulow) cau=-cau;1766 if( (cau=get_ridx(cl->aureader)+1) && (now-cl->lastemm)/60 > cfg->mon_aulow) cau=-cau; 1767 1767 1768 1768 lt=localtime(&cl->login); -
trunk/oscam.c
r3631 r3652 474 474 if (account && cl->pcrc == crc32(0L, MD5((uchar *)account->pwd, strlen(account->pwd), cur_client()->dump), 16)) { 475 475 cl->grp = account->grp; 476 cl->au = account->au;476 cl->aureader = &reader[account->au]; 477 477 cl->autoau = account->autoau; 478 478 cl->expirationdate = account->expirationdate; … … 558 558 cl->next = NULL; 559 559 int fdp[2]; 560 cl->au =(-1);560 cl->aureader=NULL; 561 561 if (pipe(fdp)) { 562 562 cs_log("Cannot create pipe (errno=%d)", errno); … … 638 638 first_client->ip=cs_inet_addr("127.0.0.1"); 639 639 first_client->typ='s'; 640 first_client->au =(-1);640 first_client->aureader=NULL; 641 641 first_client->thread=pthread_self(); 642 642 if (pthread_setspecific(getclient, first_client)) { … … 958 958 { 959 959 cl->dup = 1; 960 cl->au = -1;960 cl->aureader = NULL; 961 961 cs_log("client(%8X) duplicate user '%s' from %s set to fake (uniq=%d)", cl->thread, usr, cs_inet_ntoa(ip), uniq); 962 962 } … … 964 964 { 965 965 client->dup = 1; 966 client->au = -1;966 client->aureader = NULL; 967 967 cs_log("client(%8X) duplicate user '%s' from %s set to fake (uniq=%d)", pthread_self(), usr, cs_inet_ntoa(ip), uniq); 968 968 break; … … 985 985 memset(&client->grp, 0xff, sizeof(uint64)); 986 986 //client->grp=0xffffffffffffff; 987 client->au =(-1);987 client->aureader=NULL; 988 988 switch((long)account) 989 989 { … … 1030 1030 client->ncd_keepalive = account->ncd_keepalive; 1031 1031 client->grp = account->grp; 1032 client->au = account->au;1032 client->aureader = &reader[account->au]; 1033 1033 client->autoau = account->autoau; 1034 1034 client->tosleep = (60*account->tosleep); … … 1064 1064 if(client->ncd_server) 1065 1065 { 1066 int r=0;1067 1066 struct s_reader *rdr; 1068 for (r =0,rdr=first_reader; rdr ; rdr=rdr->next, r++)1067 for (rdr=first_reader; rdr ; rdr=rdr->next) 1069 1068 if(rdr->caid[0]==cfg->ncd_ptab.ports[client->port_idx].ftab.filts[0].caid) { 1070 client->au =r;1069 client->aureader=rdr; 1071 1070 break; 1072 1071 } 1073 if( client->au<0) sprintf(t_msg[0], "au(auto)=%d", client->au+1);1074 else sprintf(t_msg[0], "au(auto)=%s", reader[client->au].label);1072 if(!client->aureader) sprintf(t_msg[0], "au(auto)=%d", get_ridx(client->aureader)+1); 1073 else sprintf(t_msg[0], "au(auto)=%s", client->aureader->label); 1075 1074 } 1076 1075 else … … 1081 1080 else 1082 1081 { 1083 if( client->au<0) sprintf(t_msg[0], "au=%d", client->au+1);1084 else sprintf(t_msg[0], "au=%s", reader[client->au].label);1082 if(!client->aureader) sprintf(t_msg[0], "au=%d", get_ridx(client->aureader)+1); 1083 else sprintf(t_msg[0], "au=%s", client->aureader->label); 1085 1084 } 1086 1085 } … … 1463 1462 } 1464 1463 1465 int hexserialset(int ridx)1464 static int hexserialset(struct s_reader *rdr) 1466 1465 { 1467 1466 int i; 1468 1467 for (i = 0; i < 8; i++) 1469 if (r eader[ridx].hexserial[i])1468 if (rdr->hexserial[i]) 1470 1469 return 1; 1471 1470 return 0; … … 1558 1557 if(!client->ncd_server && client->autoau && er->rcEx==0) 1559 1558 { 1560 if(client->au >=0 && er->caid!=reader[client->au].caid[0])1559 if(client->aureader && er->caid!=client->aureader->caid[0]) 1561 1560 { 1562 client->au =(-1);1561 client->aureader=NULL; 1563 1562 } 1564 1563 //martin … … 1569 1568 1570 1569 if (cur->typ == R_CCCAM && !cur->caid[0] && !cur->audisabled && 1571 cur->card_system == get_cardsystem(er->caid) && hexserialset( er->reader[0]))1572 client->au = er->reader[0];1570 cur->card_system == get_cardsystem(er->caid) && hexserialset(&reader[er->reader[0]])) 1571 client->aureader= &reader[er->reader[0]]; 1573 1572 else if((er->caid == cur->caid[0]) && (!cur->audisabled)) { 1574 client->au = er->reader[0]; // First chance - check whether actual reader can AU1573 client->aureader = &reader[er->reader[0]]; // First chance - check whether actual reader can AU 1575 1574 } else { 1576 int r=0; 1577 for (r=0,cur=first_reader; cur ; cur=cur->next, r++) { //second chance loop through all readers to find an AU reader 1575 for (cur=first_reader; cur ; cur=cur->next) { //second chance loop through all readers to find an AU reader 1578 1576 if (matching_reader(er, cur)) { 1579 1577 if (cur->typ == R_CCCAM && !cur->caid[0] && !cur->audisabled && 1580 cur->card_system == get_cardsystem(er->caid) && hexserialset( r))1578 cur->card_system == get_cardsystem(er->caid) && hexserialset(cur)) 1581 1579 { 1582 client->au =r;1580 client->aureader = cur; 1583 1581 break; 1584 1582 } 1585 1583 else if((er->caid == cur->caid[0]) && (er->prid == cur->auprovid) && (!cur->audisabled)) 1586 1584 { 1587 client->au =r;1585 client->aureader = cur; 1588 1586 break; 1589 1587 } … … 1591 1589 } 1592 1590 if(!cur) { 1593 client->au =(-1);1591 client->aureader=NULL; 1594 1592 } 1595 1593 } … … 2199 2197 void do_emm(struct s_client * client, EMM_PACKET *ep) 2200 2198 { 2201 int au;2202 2199 char *typtext[]={"unknown", "unique", "shared", "global"}; 2203 2200 2204 au = client->au;2201 struct s_reader *aureader = client->aureader; 2205 2202 cs_ddump_mask(D_ATR, ep->emm, ep->l, "emm:"); 2206 2203 2207 2204 //Unique Id matching for pay-per-view channels: 2208 2205 if (client->autoau) { 2209 int i;2210 2206 struct s_reader *rdr; 2211 for ( i=0,rdr=first_reader; rdr ; rdr=rdr->next, i++) {2207 for (rdr=first_reader; rdr ; rdr=rdr->next) { 2212 2208 if (rdr->card_system>0 && !rdr->audisabled) { 2213 if (reader_get_emm_type(ep, &reader[i])) { //decodes ep->type and ep->hexserial from the EMM2209 if (reader_get_emm_type(ep, rdr)) { //decodes ep->type and ep->hexserial from the EMM 2214 2210 if (memcmp(ep->hexserial, rdr->hexserial, sizeof(ep->hexserial))==0) { 2215 au = i;2211 aureader = rdr; 2216 2212 break; // 2217 2213 } … … 2221 2217 } 2222 2218 2223 if ( (au < 0) || (au >= CS_MAXREADER)) {2219 if (!aureader) { 2224 2220 cs_debug_mask(D_EMM, "emm disabled, client has no au-reader!"); 2225 2221 return; 2226 2222 } 2227 2223 2228 if ( reader[au].card_system>0) {2229 if (!reader_get_emm_type(ep, &reader[au])) { //decodes ep->type and ep->hexserial from the EMM2224 if (aureader->card_system>0) { 2225 if (!reader_get_emm_type(ep, aureader)) { //decodes ep->type and ep->hexserial from the EMM 2230 2226 cs_debug_mask(D_EMM, "emm skipped"); 2231 2227 return; … … 2233 2229 } 2234 2230 else { 2235 cs_debug_mask(D_EMM, "emm skipped, reader %s (%d) has no cardsystem defined!", reader[au].label, au);2231 cs_debug_mask(D_EMM, "emm skipped, reader %s (%d) has no cardsystem defined!", aureader->label, get_ridx(aureader)); 2236 2232 return; 2237 2233 } 2238 2234 2239 2235 //test: EMM becomes skipped if auprivid doesn't match with provid from EMM 2240 if( reader[au].auprovid) {2241 if( reader[au].auprovid != b2i(4, ep->provid)) {2242 cs_debug_mask(D_EMM, "emm skipped, reader %s (%d) auprovid doesn't match %06lX != %06lX!", reader[au].label, au, reader[au].auprovid, b2i(4, ep->provid));2236 if(aureader->auprovid) { 2237 if(aureader->auprovid != b2i(4, ep->provid)) { 2238 cs_debug_mask(D_EMM, "emm skipped, reader %s (%d) auprovid doesn't match %06lX != %06lX!", aureader->label, get_ridx(aureader), aureader->auprovid, b2i(4, ep->provid)); 2243 2239 return; 2244 2240 } 2245 2241 } 2246 2242 2247 cs_debug_mask(D_EMM, "emmtype %s. Reader %s has serial %s.", typtext[ep->type], reader[au].label, cs_hexdump(0, reader[au].hexserial, 8));2243 cs_debug_mask(D_EMM, "emmtype %s. Reader %s has serial %s.", typtext[ep->type], aureader->label, cs_hexdump(0, aureader->hexserial, 8)); 2248 2244 cs_ddump_mask(D_EMM, ep->hexserial, 8, "emm UA/SA:"); 2249 2245 cs_ddump_mask(D_EMM, ep->emm, ep->l, "emm:"); 2250 2246 2251 2247 client->last=time((time_t)0); 2252 if ( reader[au].b_nano[ep->emm[0]] & 0x02) //should this nano be saved?2248 if (aureader->b_nano[ep->emm[0]] & 0x02) //should this nano be saved? 2253 2249 { 2254 2250 char token[256]; … … 2260 2256 char buf[80]; 2261 2257 strftime (buf, 80, "%Y/%m/%d %H:%M:%S", timeinfo); 2262 sprintf (token, "%s%s_emm.log", cs_confdir, reader[au].label);2258 sprintf (token, "%s%s_emm.log", cs_confdir, aureader->label); 2263 2259 int emm_length = ((ep->emm[1] & 0x0f) << 8) | ep->emm[2]; 2264 2260 … … 2275 2271 } 2276 2272 2277 sprintf (token, "%s%s_emm.bin", cs_confdir, reader[au].label);2273 sprintf (token, "%s%s_emm.bin", cs_confdir, aureader->label); 2278 2274 if (!(fp = fopen (token, "ab"))) 2279 2275 { … … 2296 2292 int is_blocked = 0; 2297 2293 switch (ep->type) { 2298 case UNKNOWN: is_blocked = reader[au].blockemm_unknown;2294 case UNKNOWN: is_blocked = aureader->blockemm_unknown; 2299 2295 break; 2300 case UNIQUE: is_blocked = reader[au].blockemm_u;2296 case UNIQUE: is_blocked = aureader->blockemm_u; 2301 2297 break; 2302 case SHARED: is_blocked = reader[au].blockemm_s;2298 case SHARED: is_blocked = aureader->blockemm_s; 2303 2299 break; 2304 case GLOBAL: is_blocked = reader[au].blockemm_g;2300 case GLOBAL: is_blocked = aureader->blockemm_g; 2305 2301 break; 2306 2302 } … … 2308 2304 if (is_blocked != 0) { 2309 2305 #ifdef WEBIF 2310 reader[au].emmblocked[ep->type]++;2311 is_blocked = reader[au].emmblocked[ep->type];2306 aureader->emmblocked[ep->type]++; 2307 is_blocked = aureader->emmblocked[ep->type]; 2312 2308 #endif 2313 2309 /* we have to write the log for blocked EMM here because 2314 2310 this EMM never reach the reader module where the rest 2315 2311 of EMM log is done. */ 2316 if ( reader[au].logemm & 0x08) {2312 if (aureader->logemm & 0x08) { 2317 2313 cs_log("%s emmtype=%s, len=%d, idx=0, cnt=%d: blocked (0 ms) by %s", 2318 2314 client->usr, … … 2320 2316 ep->emm[2], 2321 2317 is_blocked, 2322 reader[au].label);2318 aureader->label); 2323 2319 } 2324 2320 return; … … 2328 2324 client->lastemm = time((time_t)0); 2329 2325 2330 if ( reader[au].card_system > 0) {2331 if (!check_emm_cardsystem( &reader[au], ep)) { // wrong caid2326 if (aureader->card_system > 0) { 2327 if (!check_emm_cardsystem(aureader, ep)) { // wrong caid 2332 2328 client->emmnok++; 2333 2329 return; … … 2336 2332 } 2337 2333 ep->client = cur_client(); 2338 cs_debug_mask(D_EMM, "emm is being sent to reader %s.", reader[au].label);2339 write_to_pipe( reader[au].fd, PIP_ID_EMM, (uchar *) ep, sizeof(EMM_PACKET));2334 cs_debug_mask(D_EMM, "emm is being sent to reader %s.", aureader->label); 2335 write_to_pipe(aureader->fd, PIP_ID_EMM, (uchar *) ep, sizeof(EMM_PACKET)); 2340 2336 } 2341 2337 -
trunk/reader-common.c
r3614 r3652 329 329 else 330 330 { 331 cur_client()->au = get_ridx(cur_client()->reader);331 cur_client()->aureader = cur_client()->reader; 332 332 reader_card_info(reader); 333 333 reader->card_status = CARD_INSERTED; … … 342 342 cur_client()->lastemm = 0; 343 343 cur_client()->lastecm = 0; 344 cur_client()->au = -1;344 cur_client()->aureader = NULL; 345 345 cs_log("card ejected slot = %i", reader->slot); 346 346 }
Note:
See TracChangeset
for help on using the changeset viewer.