From 4ca16f9c2bd4f8c508ba11cfac3da0dc612cf896 Mon Sep 17 00:00:00 2001 From: leslie Date: Mon, 28 Sep 2009 20:00:19 +0800 Subject: [PATCH] cardclient-cccam2: use DCW checksum with pending DCW answers --- systems/cardclient/cccam2.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) 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..."); -- 2.39.5