SASC
DVBSoftCAM

cTpsAuHook Class Reference

Inheritance diagram for cTpsAuHook:

List of all members.

Public Member Functions

 cTpsAuHook (void)
 ~cTpsAuHook ()
virtual void Process (int pid, unsigned char *data)
 cTpsAuHook (void)
virtual ~cTpsAuHook ()
virtual void Process (int pid, unsigned char *data)
void DummyProcess (unsigned char *data, int size)
 cTpsAuHook (void)
 ~cTpsAuHook ()
virtual void Process (int pid, unsigned char *data)
 cTpsAuHook (void)
virtual ~cTpsAuHook ()
virtual void Process (int pid, unsigned char *data)
void DummyProcess (unsigned char *data, int size)

Detailed Description

Definition at line 506 of file tps.c.


Constructor & Destructor Documentation

cTpsAuHook::cTpsAuHook ( void  )

Definition at line 960 of file tps.c.

References cPids::AddPid(), and cLogHook::pids.

:cLogHook(HOOK_TPSAU,"tpsau")
{
  mod=0; pmtpid=aupid=-1;
  pids.AddPid(0x0000,0x00,0xff); // PAT
}
cTpsAuHook::~cTpsAuHook ( )

Definition at line 967 of file tps.c.

References mod.

{
  delete mod;
}
cTpsAuHook::cTpsAuHook ( void  )
virtual cTpsAuHook::~cTpsAuHook ( ) [virtual]
cTpsAuHook::cTpsAuHook ( void  )
cTpsAuHook::~cTpsAuHook ( )
cTpsAuHook::cTpsAuHook ( void  )
virtual cTpsAuHook::~cTpsAuHook ( ) [virtual]

Member Function Documentation

void cTpsAuHook::DummyProcess ( unsigned char *  data,
int  size 
)

Definition at line 60 of file testTPS.c.

References cStructLoaderPlain::Load(), cStructLoaderPlain::Save(), and tpskeys.

Referenced by main().

{
  tpskeys.Load(false);
  if(data && size) {
    cOpenTVModule mod(2,data,size);
    tpskeys.ProcessAu(&mod);
    }
  else {
    tpskeys.LoadBin();
    }
  tpskeys.Purge(time(0));
  tpskeys.Save();
}
void cTpsAuHook::DummyProcess ( unsigned char *  data,
int  size 
)
virtual void cTpsAuHook::Process ( int  pid,
unsigned char *  data 
) [virtual]

Implements cLogHook.

virtual void cTpsAuHook::Process ( int  pid,
unsigned char *  data 
) [virtual]

Implements cLogHook.

void cTpsAuHook::Process ( int  pid,
unsigned char *  data 
) [virtual]

Implements cLogHook.

Definition at line 972 of file tps.c.

References cOpenTVModule::AddPart(), SI::PAT::associationLoop, AUSID, cLogHook::BailOut(), SI::CRCSection::CheckCRCAndParse(), cPid::filter, cSimpleList< T >::First(), cPidFilter::Flush(), SI::PMT::Stream::getPid(), SI::PAT::Association::getPid(), SI::PMT::getServiceId(), SI::PAT::Association::getServiceId(), SI::PMT::Stream::getStreamType(), cOpenTVModule::Id(), SI::PAT::Association::isNITPid(), L_GEN_DEBUG, L_SYS_TPSAU, mod, cLogHook::pids, PRINTF, SCT_LEN, cPidFilter::Start(), and SI::PMT::streamLoop.

{
  if(data) {
    if(pid==0) { // PAT
      SI::PAT pat(data,false);
      if(pat.CheckCRCAndParse()) {
        SI::PAT::Association assoc;
        for(SI::Loop::Iterator it; pat.associationLoop.getNext(assoc,it);) {
          if(!assoc.isNITPid() && assoc.getServiceId()==AUSID) {
            pmtpid=assoc.getPid();
            PRINTF(L_SYS_TPSAU,"got PMT pid %04x for SID %04x",pmtpid,AUSID);
            cPid *pid=pids.First();
            if(pid && pid->filter) {
              pid->filter->Start(pmtpid,0x02,0xFF);
              pid->filter->Flush();
              }
            else PRINTF(L_GEN_DEBUG,"internal: no pid/filter in cTpsAuHook/pat");
            return;
            }
          }
        PRINTF(L_SYS_TPSAU,"no PMT pid found for SID %04x",AUSID);
        BailOut();
        }
      }
    else if(pid==pmtpid) { // PMT
      SI::PMT pmt(data,false);
      if(pmt.CheckCRCAndParse() && pmt.getServiceId()==AUSID) {
        SI::PMT::Stream stream;
        for(SI::Loop::Iterator it; pmt.streamLoop.getNext(stream,it); ) {
          if(stream.getStreamType()==0x05) {
            aupid=stream.getPid();
            PRINTF(L_SYS_TPSAU,"got AU pid %04x",aupid);
            cPid *pid=pids.First();
            if(pid && pid->filter) {
              pid->filter->Start(aupid,0x87,0xFF);
              pid->filter->Flush();
              }
            else PRINTF(L_GEN_DEBUG,"internal: no pid/filter in cTpsAuHook/pmt");
            return;
            }
          }
        PRINTF(L_SYS_TPSAU,"could not locate AU pid in PMT %04x data",pmtpid);
        BailOut();
        }
      }
    else if(pid==aupid) {
      if(cOpenTVModule::Id(data)==2) {
        if(!mod) mod=new cOpenTVModule(data);
        if(mod) {
          int r=mod->AddPart(data,SCT_LEN(data));
          if(r>0) {
            PRINTF(L_SYS_TPSAU,"received complete OpenTV module ID 2");
            if(tpskeys.ProcessAu(mod)) BailOut();
            r=-1;
            }            
          if(r<0) { delete mod; mod=0; }
          }
        }
      }
    }
}
virtual void cTpsAuHook::Process ( int  pid,
unsigned char *  data 
) [virtual]

Implements cLogHook.


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