From 681110a34aaa39821601de2cb262a7700ccb0a76 Mon Sep 17 00:00:00 2001 From: felixka Date: Wed, 12 Feb 2014 21:43:00 +0000 Subject: [PATCH] gbx: apply excisting parameter 'disablecrccws = ' to gbx. Background: Some gbox clones (e.g. diablo cam) calculate crc not conform to original gbox. This will cure issue raised here: http://www.streamboard.tv/wbb2/thread.php?threadid=40111&hilight=gbox git-svn-id: http://www.streamboard.tv/svn/oscam/trunk@9532 4b0bc96b-bc66-0410-9d44-ebda105a78c1 --- module-gbox.c | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/module-gbox.c b/module-gbox.c index bd1f6a6d..6e07295b 100644 --- a/module-gbox.c +++ b/module-gbox.c @@ -1525,7 +1525,7 @@ static int32_t gbox_recv_chk(struct s_client *cli, uchar *dcw, int32_t *rc, ucha for(i = 0, n = 0; i < cfg.max_pending && n == 0; i++) { - if(cl->ecmtask[i].gbox_crc == crc) + if(!cl->reader->disablecrccws && cl->ecmtask[i].gbox_crc == crc) { id_card = data[10] << 8 | data[11]; gbox_add_good_card(cl, id_card, cl->ecmtask[i].caid, cl->ecmtask[i].prid, cl->ecmtask[i].srvid); @@ -1538,8 +1538,22 @@ static int32_t gbox_recv_chk(struct s_client *cli, uchar *dcw, int32_t *rc, ucha *rc = 1; return cl->ecmtask[i].idx; } + else + { + id_card = data[10] << 8 | data[11]; + gbox_add_good_card(cl, id_card, cl->ecmtask[i].caid, cl->ecmtask[i].prid, cl->ecmtask[i].srvid); + if(cl->ecmtask[i].gbox_ecm_ok == 0 || cl->ecmtask[i].gbox_ecm_ok == 2) + { return -1; } + struct s_ecm_answer ea; + memset(&ea, 0, sizeof(struct s_ecm_answer)); + cl->ecmtask[i].gbox_ecm_ok = 2; + memcpy(ea.cw, dcw, 16); + *rc = 1; + cs_debug_mask(D_READER,"WARNING: gbox dcw crc disabled by [reader] config, rcvd-crc=%08X calc-crc=%08X",crc, cl->ecmtask[i].gbox_crc); + return cl->ecmtask[i].idx; + } } - cs_debug_mask(D_READER, "gbox: no task found for crc=%08x", crc); + cs_debug_mask(D_READER, "gbox: received corrupted dcw"); } return -1; } -- 2.11.4.GIT