]> www.vanbest.org Git - sasc-ng.git/commitdiff
nagra: fix BEV with CAID 1801
authorleslie <unknown>
Wed, 22 Oct 2008 13:10:09 +0000 (21:10 +0800)
committerleslie <unknown>
Wed, 22 Oct 2008 13:10:09 +0000 (21:10 +0800)
cam.c
system.c
system.h
systems/nagra/nagra2.c
systems/sc-viaccess/sc-viaccess.c
systems/viaccess/viaccess.c

diff --git a/cam.c b/cam.c
index 5ec3a4d0341fdc1ca6050c40f8638c4ecdd0e419..2d8df90e387fc71b6b3393f14560b288af4942ab 100644 (file)
--- a/cam.c
+++ b/cam.c
@@ -1246,7 +1246,7 @@ void cEcmHandler::ParseCAInfo(int SysId)
         while((sys=cSystems::FindBySysId(sysId,!cam->IsSoftCSA(filterCwIndex==0),sysPri))) {
           sysPri=sys->Pri();
           cSimpleList<cEcmInfo> ecms;
-          sys->ParseCADescriptor(&ecms,sysId,&buff[index+2],buff[index+1]);
+          sys->ParseCADescriptor(&ecms,sysId,filterSource,&buff[index+2],buff[index+1]);
           delete sys;
           if(ecms.Count()) {
             cEcmInfo *n;
index 36e83c63a3d46556e9aefae58a4f4fdc4451f98d..c86f31adda1cf20ea958484b33e886012521f65a 100644 (file)
--- a/system.c
+++ b/system.c
@@ -126,7 +126,7 @@ void cSystem::StartLog(const cEcmInfo *ecm, int caid)
     }
 }
 
-void cSystem::ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, const unsigned char *data, int len)
+void cSystem::ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, int source, const unsigned char *data, int len)
 {
   const int pid=WORD(data,2,0x1FFF);
   switch(sysId>>8) {
@@ -145,7 +145,7 @@ void cSystem::ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysI
     default:   // default style
       {
       cEcmInfo *n=new cEcmInfo(name,pid,sysId,0);
-      if(sysId==0x1234) { // BEV
+      if(sysId==0x1234 || (sysId==0x1801 && (source==0x8334 || source==0x838e))) { // BEV
         n->ecm_table=0x8e;
         n->emmCaId=0x1801;
         }
index 03283e30996eb914269089bb2d9f9c6e4aad2322..38b0fc5c90906f7f387b7760a964249b322fcd30 100644 (file)
--- a/system.h
+++ b/system.h
@@ -117,7 +117,7 @@ public:
   virtual void CheckECMResult(const cEcmInfo *ecm, const unsigned char *data, bool result);
   virtual bool ProcessECM(const cEcmInfo *ecm, unsigned char *buffer)=0;
   virtual void ProcessEMM(int pid, int caid, unsigned char *buffer) {};
-  virtual void ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, const unsigned char *data, int len);
+  virtual void ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, int source, const unsigned char *data, int len);
   virtual void ParseCAT(cPids *pids, const unsigned char *buffer);
   unsigned char *CW(void) { return cw; }
   void DoLog(bool Log) { doLog=Log; }
index c1af024d0082ef1766fe32dbae53f169323444fc..71d4ca120d0e1e0c8a9bc95f82f6e6f250327eb6 100644 (file)
@@ -1157,9 +1157,12 @@ bool cSystemNagra2::ProcessECM(const cEcmInfo *ecm, unsigned char *data)
   memcpy(odata,data,sizeof(odata));
   if(ecm->source>=NA_SOURCE_START && ecm->source<=NA_SOURCE_END) {
     if(ecm->caId==0x1234) data[5]=0x09;                // NA rev 248 morph
-    else if(ecm->caId==0x1801 && ecm->source==0x83ca) data[5]=0xC1; // 97W
-    else data[5]=0x01;                         // I _HATE_ this provider
-    data[6]&=0x1F;                             // specific stuff :(
+    else {
+      if(ecm->source==0x83ca) data[5]=0xC1;     // 97W
+      else if(ecm->source==0x8334 || ecm->source==0x838e) data[5]=0x09; // 82W 91W
+      else data[5]=0x01;
+      }
+    data[6]&=0x1F;
     data[7]=data[7]&0x10|0x86;
     data[8]=0;
     data[9]=data[9]&0x80|0x08;
index c6298cfc790d90bb0150b7fe86a3b9dab9f19775..5b0faf45895772366e509f65a9945df960a88a23 100644 (file)
@@ -53,7 +53,7 @@ ADD_MODULE(L_SC,lm_sc)
 class cSystemScViaccess : public cSystemScCore { //, private cTPS {
 public:
   cSystemScViaccess(void);
-  virtual void ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, const unsigned char *data, int len);
+  virtual void ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, int source, const unsigned char *data, int len);
   };
 
 cSystemScViaccess::cSystemScViaccess(void)
@@ -62,14 +62,14 @@ cSystemScViaccess::cSystemScViaccess(void)
   hasLogger=true;
 }
 
-void cSystemScViaccess::ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, const unsigned char *data, int len)
+void cSystemScViaccess::ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, int source, const unsigned char *data, int len)
 {
   const int pid=WORD(data,2,0x1FFF);
   if(pid>=0xAA && pid<=0xCF) {
     PRINTF(L_CORE_ECMPROC,"sc-viaccess: dropped \"fake\" ecm pid 0x%04xn",pid);
     return;
     }
-  cSystem::ParseCADescriptor(ecms,sysId,data,len);
+  cSystem::ParseCADescriptor(ecms,sysId,source,data,len);
 }
 
 // -- cSystemLinkScViaccess --------------------------------------------------------------
index 76e98a19d3cb749189fbc6fa99d2ef39a241fad4..305083a550ff696e6285bcd1fbc530d017970669 100644 (file)
@@ -354,7 +354,7 @@ public:
   cSystemViaccess(void);
   virtual bool ProcessECM(const cEcmInfo *ecm, unsigned char *data);
   virtual void ProcessEMM(int pid, int caid, unsigned char *data);
-  virtual void ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, const unsigned char *data, int len);
+  virtual void ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, int source, const unsigned char *data, int len);
   };
 
 cSystemViaccess::cSystemViaccess(void)
@@ -363,14 +363,14 @@ cSystemViaccess::cSystemViaccess(void)
   hasLogger=true;
 }
 
-void cSystemViaccess::ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, const unsigned char *data, int len)
+void cSystemViaccess::ParseCADescriptor(cSimpleList<cEcmInfo> *ecms, unsigned short sysId, int source, const unsigned char *data, int len)
 {
   const int pid=WORD(data,2,0x1FFF);
   if(pid>=0xAA && pid<=0xCF) {
     PRINTF(L_CORE_ECMPROC,"viaccess: dropped \"fake\" ecm pid 0x%04x",pid);
     return;
     }
-  cSystem::ParseCADescriptor(ecms,sysId,data,len);
+  cSystem::ParseCADescriptor(ecms,sysId,source,data,len);
 }
 
 bool cSystemViaccess::ProcessECM(const cEcmInfo *ecm, unsigned char *data)