From: leslie Date: Mon, 28 Sep 2009 12:00:19 +0000 (+0800) Subject: cardclient-cccam2: use DCW checksum with pending DCW answers X-Git-Tag: upstream/620~155 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=4ca16f9c2bd4f8c508ba11cfac3da0dc612cf896;p=sasc-ng.git cardclient-cccam2: use DCW checksum with pending DCW answers --- diff --git a/systems/cardclient/cccam2.c b/systems/cardclient/cccam2.c index 5c423f9..58ac4ee 100644 --- a/systems/cardclient/cccam2.c +++ b/systems/cardclient/cccam2.c @@ -583,13 +583,14 @@ void cCardClientCCcam2::PacketAnalyzer(const struct CmdHeader *hdr, int length) LDUMP(L_CC_CCCAM2DT,tempcw,16,"scrambled CW"); cCCcamCrypt::ScrambleDcw(tempcw,nodeid,shareid); LDUMP(L_CC_CCCAM2DT,tempcw,16,"un-scrambled CW"); - cCCcamCrypt::DcwChecksum(tempcw); - cwmutex.Lock(); - newcw=true; - if(!CheckNull(tempcw+0,8)) memcpy(cw+0,tempcw+0,8); - if(!CheckNull(tempcw+8,8)) memcpy(cw+8,tempcw+8,8); - cwwait.Broadcast(); - cwmutex.Unlock(); + if(cCCcamCrypt::DcwChecksum(tempcw) || pendingDCW==0) { + cwmutex.Lock(); + newcw=true; + memcpy(cw,tempcw,16); + cwwait.Broadcast(); + cwmutex.Unlock(); + } + else PRINTF(L_CC_CCCAM2,"pending DCW, skipping bad CW"); decr.Decrypt(tempcw,tempcw,16); if(keymaskpos>0 && --keymaskpos<=2) { PRINTF(L_CC_CCCAM2,"disconnecting due to key limit...");