]> www.vanbest.org Git - sasc-ng.git/commitdiff
cardclient-CCcam: more cleanup
authorleslie <unknown>
Mon, 9 Jun 2008 09:22:47 +0000 (17:22 +0800)
committerleslie <unknown>
Mon, 9 Jun 2008 09:22:47 +0000 (17:22 +0800)
systems/cardclient/cccam.c

index b120bac30934d4696652a6c064e854989b2fd98f..c490ded731ecea817675e4d02176a3c106baa0b4 100644 (file)
 #include <stdio.h>\r
 #include <stdlib.h>\r
 #include <errno.h>\r
-#include <string.h>\r
 #include <unistd.h>\r
-#include <errno.h>\r
 #include <sys/socket.h>\r
 #include <sys/un.h>\r
-#include <fcntl.h>\r
-#include <netinet/in.h>\r
-#include <arpa/inet.h>\r
-#include <signal.h>\r
 \r
 #include <vdr/pat.h>\r
 \r
 #include "cc.h"\r
 #include "network.h"\r
-//#include "parse.h"\r
 \r
 #define LIST_ONLY 0x03   /* CA application should clear the list when an 'ONLY' CAPMT object is received, and start working with the object */\r
 \r
@@ -170,7 +163,7 @@ bool cCCcamCard::GetCw(unsigned char *Cw, int timeout)
 \r
 // -- cCardClientCCcam ---------------------------------------------------------\r
 \r
-class cCardClientCCcam : public cCardClient , private cThread {\r
+class cCardClientCCcam : public cCardClient, private cThread {\r
 private:\r
   cNetSocket so;\r
   cCCcamCard card[4];\r
@@ -181,9 +174,9 @@ protected:
   virtual void Action(void);\r
 public:\r
   cCardClientCCcam(const char *Name);\r
+  ~cCardClientCCcam();\r
   virtual bool Init(const char *CfgDir);\r
   virtual bool ProcessECM(const cEcmInfo *ecm, const unsigned char *data, unsigned char *Cw, int cardnum);\r
-  virtual bool CanHandle(unsigned short SysId);\r
   };\r
 \r
 static cCardClientLinkReg<cCardClientCCcam> __ncd("CCcam");\r
@@ -197,6 +190,11 @@ cCardClientCCcam::cCardClientCCcam(const char *Name)
   for(int i=0; i<4; i++) card[i].Setup(i,socketPath);\r
 }\r
 \r
+cCardClientCCcam::~cCardClientCCcam()\r
+{\r
+  Cancel(3);\r
+}\r
+\r
 bool cCardClientCCcam::Init(const char *config)\r
 {\r
   cMutexLock lock(this);\r
@@ -205,32 +203,23 @@ bool cCardClientCCcam::Init(const char *config)
   return true;\r
 }\r
 \r
-bool cCardClientCCcam::CanHandle(unsigned short SysId)\r
-{\r
-  if((SysId & 0xf000) != 0x5000) return true;\r
-  return false;\r
-}\r
-\r
 bool cCardClientCCcam::Login(void)\r
 {\r
-  if(!so.Connected()) {\r
-    so.Disconnect();\r
-    if(!so.Bind("127.0.0.1",port)) return false;\r
-    PRINTF(L_CC_CCCAM,"Bound to port %d, starting UDP listener",port);\r
-    Start();\r
-    }\r
+  cMutexLock lock(this);\r
+  so.Disconnect();\r
+  if(!so.Bind("127.0.0.1",port)) return false;\r
+  PRINTF(L_CC_CCCAM,"Bound to port %d, starting UDP listener",port);\r
+  Start();\r
   return true;\r
 }\r
 \r
 bool cCardClientCCcam::ProcessECM(const cEcmInfo *ecm, const unsigned char *data, unsigned char *cw, int cardnum)\r
 {\r
-  // if(((ccam_fd ==0) && !Login()) || !CanHandle(ecm->caId)) return false;\r
-  //so.Flush();\r
-  //  cMutexLock lock(this);\r
-  //newcw[cardnum] =0;\r
+  cMutexLock lock(this);\r
+  if((!so.Connected() && !Login()) || !CanHandle(ecm->caId)) return false;\r
 \r
   static const unsigned char pmt[] = {\r
-    0x9f,0x80,0x32,0x82,0x00,0x00,\r
+    0x9f,0x80,0x32,0x82,0xFF,0xFF,\r
     0x01,\r
 #define PRG_POS 7\r
     0xFF,0xFF,                                          // prg-nr\r
@@ -263,7 +252,7 @@ bool cCardClientCCcam::ProcessECM(const cEcmInfo *ecm, const unsigned char *data
   capmt[DMX_POS+3]=cardnum ;\r
   capmt[PID_POS+2]=ecm->ecm_pid>>8;\r
   capmt[PID_POS+3]=ecm->ecm_pid&0xFF;\r
-  bool streamflag = 1;\r
+  bool streamflag=1;\r
 #if APIVERSNUM >= 10500\r
   int casys[2];\r
 #else\r
@@ -297,8 +286,7 @@ bool cCardClientCCcam::ProcessECM(const cEcmInfo *ecm, const unsigned char *data
   if(!c->GetCw(cw,timeout)) {\r
     // somethings up, so we will send capmt again.\r
     c->WriteCaPmt();\r
-    timeout=1000;\r
-    if(!c->GetCw(cw,timeout)) {\r
+    if(!c->GetCw(cw,1000)) {\r
       PRINTF(L_CC_CCCAM,"%d: FAILED ECM !",cardnum);\r
       c->Disconnect();\r
       failedcw++;\r
@@ -316,16 +304,12 @@ bool cCardClientCCcam::ProcessECM(const cEcmInfo *ecm, const unsigned char *data
   return true;\r
 }\r
 \r
-void cCardClientCCcam::Action()\r
+void cCardClientCCcam::Action(void)\r
 {\r
   unsigned char cw[18];\r
   while(Running()) {\r
     if(so.Read(cw,sizeof(cw))==sizeof(cw)) {\r
-      PRINTF(L_CC_CCCAM," Got: %02hhx%02hhx  %02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx  %02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx%02hhx",\r
-        cw[0],cw[1],\r
-        cw[2],cw[3],cw[4],cw[5],cw[6],cw[7],cw[8],cw[9],\r
-        cw[10],cw[11],cw[12],cw[13],cw[14],cw[15],cw[16],cw[17]);\r
-\r
+      LDUMP(L_CC_CCCAM,cw+2,16,"got: %02x%02x",cw[0],cw[1]);\r
       if(cw[1]==0x0f && cw[0]<4)\r
         card[cw[0]].NewCw(cw+2);\r
       }\r