]> www.vanbest.org Git - sasc-ng.git/commitdiff
fix creating tag length in CAM msg
authorleslie <unknown>
Mon, 24 Aug 2009 06:48:36 +0000 (14:48 +0800)
committerleslie <unknown>
Mon, 24 Aug 2009 06:48:36 +0000 (14:48 +0800)
cam.c
systems/cardclient/cccam2.c

diff --git a/cam.c b/cam.c
index 910eb430d3c9a1eae3e79b82d394c3af6757dbd9..165771eadca9b8d410ec2ab3ca7b42c0f96f8f3d 100644 (file)
--- a/cam.c
+++ b/cam.c
@@ -2127,6 +2127,8 @@ private:
   cCiFrame frame;
   //
   int GetLength(const unsigned char * &data);
+  int LengthSize(int n);
+  void SetSize(int n, unsigned char * &p);
   void CaInfo(int tcid, int cid);
   bool Check(void);
 public:
@@ -2206,20 +2208,32 @@ int cScCamSlot::GetLength(const unsigned char * &data)
   return len;
 }
 
+int cScCamSlot::LengthSize(int n)
+{
+  return n<TDPU_SIZE_INDICATOR?1:3;
+}
+
+void cScCamSlot::SetSize(int n, unsigned char * &p)
+{
+  if(n<TDPU_SIZE_INDICATOR) *p++=n;
+  else { *p++=2|TDPU_SIZE_INDICATOR; *p++=n>>8; *p++=n&0xFF; }
+}
+
 void cScCamSlot::CaInfo(int tcid, int cid)
 {
-  int n=9;
-  for(int i=0; caids[i]; i++) n+=2;
+  int cn=0;
+  for(int i=0; caids[i]; i++) cn+=2;
+  int n=cn+8+LengthSize(cn);
+PRINTF(L_CORE_CI,"n=%d cn=%d",n,cn);
   unsigned char *p;
-  if(!(p=frame.GetBuff(n+(n<TDPU_SIZE_INDICATOR?2:3)))) return;
+  if(!(p=frame.GetBuff(n+1+LengthSize(n)))) return;
   *p++=0xa0;
-  if(n<TDPU_SIZE_INDICATOR) *p++=n;
-  else { *p++=2|TDPU_SIZE_INDICATOR; *p++=n>>8; *p++=n&0xFF; }
+  SetSize(n,p);
   *p++=tcid;
   *p++=0x90;
   *p++=0x02; *p++=cid>>8; *p++=cid&0xff;
   *p++=0x9f; *p++=0x80;   *p++=0x31; // AOT_CA_INFO
-  *p++=n-9;
+  SetSize(cn,p);
   for(int i=0; caids[i]; i++) { *p++=caids[i]>>8; *p++=caids[i]&0xff; }
   frame.Put();
   PRINTF(L_CORE_CI,"%d.%d sending CA info",cardIndex,slot);
index 5d6c6075d68852afa30f363a6140be2eab95a090..6589cc41e9104925ac6b8308b6a8c5463f360266 100644 (file)
@@ -505,7 +505,7 @@ void cCardClientCCcam2::PacketAnalyzer(const struct CmdHeader *hdr, int length)
         for(cShare *s=shares.First(); s;) {
           cShare *n=shares.Next(s);
           if(s->ShareID()==shareid) {
-            PRINTF(L_CC_CCCAM2SH,"REMOVE share %08x caid: %04x",s->ShareID(),s->CaID());
+            PRINTF(L_CC_CCCAM2SH,"REMOVE share %08x caid: %04x (count %d)",s->ShareID(),s->CaID(),shares.Count());
             int caid=s->CaID();
             shares.Del(s);
             if(!shares.HasCaid(caid)) CaidsChanged();