]> www.vanbest.org Git - sasc-ng.git/commitdiff
cardclient-cccam: cleanup / extend logging
authorleslie <unknown>
Sun, 24 May 2009 13:16:01 +0000 (21:16 +0800)
committerleslie <unknown>
Sun, 24 May 2009 13:16:01 +0000 (21:16 +0800)
systems/cardclient/cccam.c

index 81bebe9f57ac2651851456b0d2686e3bcbe44fe1..133ba7cc70761c1388f172a46f073eb661227c37 100644 (file)
@@ -93,6 +93,7 @@ bool cCCcamCard::Connect(void)
   memset(&serv_addr_un,0,sizeof(serv_addr_un));\r
   serv_addr_un.sun_family=AF_LOCAL;\r
   snprintf(serv_addr_un.sun_path,sizeof(serv_addr_un.sun_path),path,cardnum);\r
+  PRINTF(L_CC_CCCAM,"%d: using camd socket '%s'",cardnum,serv_addr_un.sun_path);\r
   if(connect(ccam_fd,(const sockaddr*)&serv_addr_un,sizeof(serv_addr_un))!=0) {\r
     PRINTF(L_CC_CCCAM,"%d: connect failed: %s",cardnum,strerror(errno));\r
     Disconnect();\r
@@ -222,80 +223,82 @@ bool cCardClientCCcam::ProcessECM(const cEcmInfo *ecm, const unsigned char *data
   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,0xFF,0xFF,\r
-    0x01,\r
+  cCCcamCard *c=&card[cardnum];\r
+  int timeout=700;\r
+  if(ecm->ecm_pid!=c->Pid() || !c->Connected()) { // channel change\r
+    static const unsigned char pmt[] = {\r
+      0x9f,0x80,0x32,0x82,0xFF,0xFF,\r
+      0x01,\r
 #define PRG_POS 7\r
-    0xFF,0xFF,                                          // prg-nr\r
+      0xFF,0xFF,                                          // prg-nr\r
 #define VERS_POS 9\r
-    0xFF,                                               // version\r
+      0xFF,                                               // version\r
 #define LEN_POS 10\r
-    0xFF,0xFF,                                          // prg-info-len\r
-    0x01,                                               // ca pmt command\r
+      0xFF,0xFF,                                          // prg-info-len\r
+      0x01,                                               // ca pmt command\r
 #define PRIV_POS 13\r
-    0x81,0x08,0x00,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,  // private descr\r
+      0x81,0x08,0x00,0x00,0xFF,0x00,0xFF,0xFF,0xFF,0xFF,  // private descr\r
 #define DMX_POS 23\r
-    0x82,0x02,0xFF,0xFF,                                // demuxer stuff\r
+     0x82,0x02,0xFF,0xFF,                                // demuxer stuff\r
 #define PID_POS 27\r
-    0x84,0x02,0xFF,0xFF                                 // pmt pid\r
-    };\r
-  unsigned char capmt[2048];\r
-  memcpy(capmt,pmt,sizeof(pmt));\r
-  int wp=sizeof(pmt);\r
-  int len=wp-LEN_POS-2;\r
-  capmt[PRG_POS]=ecm->prgId>>8;\r
-  capmt[PRG_POS+1]=ecm->prgId&0xff;\r
-  capmt[VERS_POS]=pmtversion;\r
-  pmtversion=(pmtversion+1)&0x1f;\r
-  capmt[PRIV_POS+4]=cardnum;\r
-  capmt[PRIV_POS+6]=ecm->transponder>>8;\r
-  capmt[PRIV_POS+7]=ecm->transponder&0xFF;\r
-  capmt[PRIV_POS+8]=ecm->provId>>8;\r
-  capmt[PRIV_POS+9]=ecm->provId&0xFF;\r
-  capmt[DMX_POS+2]=1<<cardnum ;\r
-  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
+      0x84,0x02,0xFF,0xFF                                 // pmt pid\r
+      };\r
+    unsigned char capmt[2048];\r
+    memcpy(capmt,pmt,sizeof(pmt));\r
+    int wp=sizeof(pmt);\r
+    int len=wp-LEN_POS-2;\r
+    capmt[PRG_POS]=ecm->prgId>>8;\r
+    capmt[PRG_POS+1]=ecm->prgId&0xff;\r
+    capmt[VERS_POS]=pmtversion;\r
+    pmtversion=(pmtversion+1)&0x1f;\r
+    capmt[PRIV_POS+4]=cardnum;\r
+    capmt[PRIV_POS+6]=ecm->transponder>>8;\r
+    capmt[PRIV_POS+7]=ecm->transponder&0xFF;\r
+    capmt[PRIV_POS+8]=ecm->provId>>8;\r
+    capmt[PRIV_POS+9]=ecm->provId&0xFF;\r
+    capmt[DMX_POS+2]=1<<cardnum ;\r
+    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
 #if APIVERSNUM >= 10500\r
-  int casys[2];\r
+    int casys[2];\r
 #else\r
-  unsigned short casys[2];\r
+    unsigned short casys[2];\r
 #endif\r
-  casys[0]=ecm->caId;\r
-  casys[1]=0;\r
-  int n=GetCaDescriptors(ecm->source,ecm->transponder,ecm->prgId,casys,sizeof(capmt)-wp,&capmt[wp],streamflag);\r
-  if(n<=0) {\r
-    PRINTF(L_CC_CCCAM,"no CA descriptor for caid %04x sid %d prov %04x",ecm->caId,ecm->prgId,ecm->provId);\r
-    return false;\r
-    }\r
-  len+=n; wp+=n;\r
-  capmt[wp++]=0x01;\r
-  capmt[wp++]=0x0f;\r
-  capmt[wp++]=cardnum;   // cccam uses this one as PID to program ca0\r
-  capmt[wp++]=0x00;      //es_length\r
-  capmt[wp++]=0x06;      //es ca_pmt_cmd_id\r
-  capmt[LEN_POS]=((len&0xf00)>>8);\r
-  capmt[LEN_POS+1]=(len&0xff);\r
-  capmt[4]=(wp-6)>>8;\r
-  capmt[5]=(wp-6)&0xff;\r
+    casys[0]=ecm->caId;\r
+    casys[1]=0;\r
+    int n=GetCaDescriptors(ecm->source,ecm->transponder,ecm->prgId,casys,sizeof(capmt)-wp,&capmt[wp],streamflag);\r
+    if(n<=0) {\r
+      PRINTF(L_CC_CCCAM,"%d: no CA descriptor for caid %04x sid %d prov %04x",cardnum,ecm->caId,ecm->prgId,ecm->provId);\r
+      return false;\r
+      }\r
+    len+=n; wp+=n;\r
+    capmt[wp++]=0x01;\r
+    capmt[wp++]=0x0f;\r
+    capmt[wp++]=cardnum;   // cccam uses this one as PID to program ca0\r
+    capmt[wp++]=0x00;      //es_length\r
+    capmt[wp++]=0x06;      //es ca_pmt_cmd_id\r
+    capmt[LEN_POS]=((len&0xf00)>>8);\r
+    capmt[LEN_POS+1]=(len&0xff);\r
+    capmt[4]=(wp-6)>>8;\r
+    capmt[5]=(wp-6)&0xff;\r
 \r
-  cCCcamCard *c=&card[cardnum];\r
-  int timeout=700;\r
-  if(ecm->ecm_pid!=c->Pid() || !c->Connected()) { // channel change\r
-    PRINTF(L_CC_CCCAM,"sending capmts ");\r
+    HEXDUMP(L_CC_CCCAM,capmt,wp,"%d: sending capmts for pid %04x",cardnum,ecm->ecm_pid);\r
     c->NewCaPmt(ecm->ecm_pid,capmt,wp);\r
     timeout=3000;\r
     }\r
   if(!c->GetCw(cw,timeout)) {\r
+    PRINTF(L_CC_CCCAM,"%d: getting CW timedout, re-writing CAPMT",cardnum);\r
     // somethings up, so we will send capmt again.\r
     c->WriteCaPmt();\r
     if(!c->GetCw(cw,1000)) {\r
-      PRINTF(L_CC_CCCAM,"%d: FAILED ECM !",cardnum);\r
+      PRINTF(L_CC_CCCAM,"%d: getting CW timedout again, failed ECM",cardnum);\r
       c->Disconnect();\r
       failedcw++;\r
       if(failedcw>=10) {\r
         // CCcam is having problems lets mark it for a restart....\r
+        PRINTF(L_CC_CCCAM,"%d: marked CCcam for restart",cardnum);\r
         FILE *f=fopen("/tmp/killCCcam","w+");\r
         fclose(f);\r
         failedcw=0;\r
@@ -303,7 +306,7 @@ bool cCardClientCCcam::ProcessECM(const cEcmInfo *ecm, const unsigned char *data
       return false;\r
       }\r
     }\r
-  PRINTF(L_CC_CCCAM,"%d: GOT CW !",cardnum);\r
+  PRINTF(L_CC_CCCAM,"%d: got a CW",cardnum);\r
   failedcw=0;\r
   return true;\r
 }\r
@@ -312,10 +315,12 @@ void cCardClientCCcam::Action(void)
 {\r
   unsigned char cw[18];\r
   while(Running()) {\r
-    if(so.Read(cw,sizeof(cw))==sizeof(cw)) {\r
-      LDUMP(L_CC_CCCAM,cw+2,16,"got: %02x%02x",cw[0],cw[1]);\r
+    int r=so.Read(cw,sizeof(cw));\r
+    if(r==sizeof(cw)) {\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
+    else PRINTF(L_CC_CCCAM,"unexpected read length r=%d",r);\r
     }\r
 }\r