SASC-NG
DVBSoftCAM

cProviderViaccess Class Reference

#include <parse.h>

Inheritance diagram for cProviderViaccess:

List of all members.

Public Member Functions

 cProviderViaccess (void)
 cProviderViaccess (const unsigned char *id, const unsigned char *s)
virtual ~cProviderViaccess ()
virtual bool MatchID (const unsigned char *data)
virtual bool MatchEMM (const unsigned char *data)
virtual unsigned long long ProvId (void)
virtual int UpdateType (const unsigned char *data)
virtual int Assemble (cAssembleData *ad)

Public Attributes

unsigned char ident [3]
unsigned char sa [4]

Detailed Description

Definition at line 184 of file parse.h.


Constructor & Destructor Documentation

cProviderViaccess::cProviderViaccess ( void  )

Definition at line 331 of file parse.c.

{
  sharedEmm=0; sharedLen=sharedToggle=0;
}
cProviderViaccess::cProviderViaccess ( const unsigned char *  id,
const unsigned char *  s 
)

Definition at line 336 of file parse.c.

References ident, and sa.

{
  sharedEmm=0; sharedLen=sharedToggle=0;
  memcpy(ident,id,sizeof(ident));
  ident[2]&=0xf0;
  memcpy(sa,s,sizeof(sa));
}
cProviderViaccess::~cProviderViaccess ( ) [virtual]

Definition at line 344 of file parse.c.

References free.

{
  free(sharedEmm);
}

Member Function Documentation

int cProviderViaccess::Assemble ( cAssembleData *  ad) [virtual]

Reimplemented from cProvider.

Definition at line 385 of file parse.c.

References AUTOMEM, cAssembleData::Data(), data, free, cParseViaccess::NanoStart(), SCT_LEN, cAssembleData::SetAssembled(), SetSctLen(), and SortNanos().

{
  const unsigned char *data=ad->Data();
  int len=SCT_LEN(data);
  switch(data[0]) {
    case 0x8C:
    case 0x8D:
      if(data[0]!=sharedToggle) {
        free(sharedEmm);
        sharedLen=len;
        sharedEmm=(unsigned char *)malloc(len);
        if(sharedEmm) memcpy(sharedEmm,data,sharedLen);
        sharedToggle=data[0];
        }
      break;

    case 0x8E:
      if(sharedEmm) {
        unsigned char *tmp=AUTOMEM(len+sharedLen);
        unsigned char *ass=(unsigned char *)cParseViaccess::NanoStart(data);
        len-=(ass-data);
        if((data[6]&2)==0) {
          const int addrlen=len-8;
          len=0;
          tmp[len++]=0x9e;
          tmp[len++]=addrlen;
          memcpy(&tmp[len],&ass[0],addrlen); len+=addrlen;
          tmp[len++]=0xf0;
          tmp[len++]=0x08;
          memcpy(&tmp[len],&ass[addrlen],8); len+=8;
          }
        else {
          memcpy(tmp,ass,len);
          }
        ass=(unsigned char *)cParseViaccess::NanoStart(sharedEmm);
        int l=sharedLen-(ass-sharedEmm);
        memcpy(&tmp[len],ass,l); len+=l;

        ass=(unsigned char *)malloc(len+7);
        if(ass) {
          memcpy(ass,data,7);
          SortNanos(ass+7,tmp,len);
          SetSctLen(ass,len+4);
          ad->SetAssembled(ass);
          return 1; // assembled
          }
        }
      break;
    }
  return -1; // ignore
}
bool cProviderViaccess::MatchEMM ( const unsigned char *  data) [virtual]

Implements cProvider.

Definition at line 355 of file parse.c.

References MatchID(), and sa.

{
  switch(data[0]) {
    case 0x8e: 
      if(memcmp(&data[3],sa,sizeof(sa)-1)) break;
      if((data[6]&2)==0)
        return sharedEmm && MatchID(sharedEmm);
      // fall through
    case 0x8c:
    case 0x8d:
      return MatchID(data);
    }
  return false;
}
bool cProviderViaccess::MatchID ( const unsigned char *  data) [virtual]

Implements cProvider.

Definition at line 349 of file parse.c.

References ident, and cParseViaccess::ProvIdPtr().

Referenced by MatchEMM().

{
  const unsigned char *id=cParseViaccess::ProvIdPtr(data);
  return id && id[0]==ident[0] && id[1]==ident[1] && (id[2]&0xf0)==ident[2];
}
unsigned long long cProviderViaccess::ProvId ( void  ) [virtual]

Implements cProvider.

Definition at line 370 of file parse.c.

References ident.

Referenced by cSmartCardViaccess::Init().

{
  return (ident[0]<<16)+(ident[1]<<8)+ident[2];
}
int cProviderViaccess::UpdateType ( const unsigned char *  data) [virtual]

Reimplemented from cProvider.

Definition at line 375 of file parse.c.

{
  switch(data[0]) {
    case 0x8e: return 2; // shared
    case 0x8c:
    case 0x8d:
    default:   return 0; // global
    }
}

Member Data Documentation

unsigned char cProviderViaccess::ident[3]

Definition at line 189 of file parse.h.

Referenced by cProviderViaccess(), MatchID(), cViaccessCardInfo::Parse(), and ProvId().

unsigned char cProviderViaccess::sa[4]

Definition at line 190 of file parse.h.

Referenced by cProviderViaccess(), MatchEMM(), and cViaccessCardInfo::Parse().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines