SASC
DVBSoftCAM

cHookManager Class Reference

Inheritance diagram for cHookManager:

List of all members.

Public Member Functions

 cHookManager (cDevice *Device, const char *DevId)
virtual ~cHookManager ()
void AddHook (cLogHook *hook)
bool TriggerHook (int id)
void Down (void)
 cHookManager (cDevice *Device, const char *DevId)
virtual ~cHookManager ()
void AddHook (cLogHook *hook)
bool TriggerHook (int id)
void Down (void)

Protected Member Functions

virtual void Process (cPidFilter *filter, unsigned char *data, int len)
virtual void Process (cPidFilter *filter, unsigned char *data, int len)

Detailed Description

Definition at line 165 of file cam.c.


Constructor & Destructor Documentation

cHookManager::cHookManager ( cDevice *  Device,
const char *  DevId 
)

Definition at line 182 of file cam.c.

References cAction::Priority().

:cAction("hookmanager",Device,DevId)
{
  devId=DevId;
  Priority(10);
}
cHookManager::~cHookManager ( ) [virtual]

Definition at line 189 of file cam.c.

References Down().

{
  Down();
}
cHookManager::cHookManager ( cDevice *  Device,
const char *  DevId 
)
virtual cHookManager::~cHookManager ( ) [virtual]

Member Function Documentation

void cHookManager::AddHook ( cLogHook *  hook)

Definition at line 215 of file cam.c.

References cSimpleListBase::Add(), CHAIN_HOLD, cSimpleList< T >::First(), L_CORE_HOOK, cThread::Lock(), cSimpleList< T >::Next(), pid::pid, cLogHook::pids, PRINTF, cTimeMs::Set(), cThread::Unlock(), and cPidFilter::userData.

Referenced by cCam::AddHook().

{
  Lock();
  PRINTF(L_CORE_HOOK,"%s: starting hook '%s' (%04x)",devId,hook->name,hook->id);
  hook->delay.Set(CHAIN_HOLD);
  hooks.Add(hook);
  for(cPid *pid=hook->pids.First(); pid; pid=hook->pids.Next(pid)) {
    cPidFilter *filter=AddFilter(pid->pid,pid->sct,pid->mask,CHAIN_HOLD/8);
    if(filter) {
      filter->userData=(void *)hook;
      pid->filter=filter;
      }
    }
  Unlock();
}
void cHookManager::AddHook ( cLogHook *  hook)
void cHookManager::Down ( void  )

Definition at line 194 of file cam.c.

References cAction::DelAllFilter(), cSimpleList< T >::First(), cThread::Lock(), and cThread::Unlock().

Referenced by cCam::Stop(), and ~cHookManager().

{
  Lock();
  while(cLogHook *hook=hooks.First()) DelHook(hook);
  DelAllFilter();
  Unlock();
}
void cHookManager::Down ( void  )
virtual void cHookManager::Process ( cPidFilter *  filter,
unsigned char *  data,
int  len 
) [protected, virtual]

Implements cAction.

void cHookManager::Process ( cPidFilter *  filter,
unsigned char *  data,
int  len 
) [protected, virtual]

Implements cAction.

Definition at line 256 of file cam.c.

References data, HEXDUMP, L_CORE_HOOK, L_HEX_HOOK, cPidFilter::Pid(), PRINTF, cLogHook::Process(), SCT_LEN, cTimeMs::TimedOut(), and cPidFilter::userData.

{
  if(data && len>0) {
    HEXDUMP(L_HEX_HOOK,data,len,"HOOK pid 0x%04x",filter->Pid());
    if(SCT_LEN(data)==len) {
      cLogHook *hook=(cLogHook *)(filter->userData);
      if(hook) {
        hook->Process(filter->Pid(),data);
        if(hook->bailOut || hook->delay.TimedOut()) DelHook(hook);
        }
      }
    else PRINTF(L_CORE_HOOK,"%s: incomplete section %d != %d",devId,len,SCT_LEN(data));
    }
  else {
    cLogHook *hook=(cLogHook *)(filter->userData);
    if(hook && (hook->bailOut || hook->delay.TimedOut())) DelHook(hook);
    }
}
bool cHookManager::TriggerHook ( int  id)
bool cHookManager::TriggerHook ( int  id)

Definition at line 202 of file cam.c.

References CHAIN_HOLD, cSimpleList< T >::First(), cThread::Lock(), cSimpleList< T >::Next(), and cThread::Unlock().

Referenced by cCam::TriggerHook().

{
  Lock();
  for(cLogHook *hook=hooks.First(); hook; hook=hooks.Next(hook))
    if(hook->id==id) {
      hook->delay.Set(CHAIN_HOLD);
      Unlock();
      return true;
      }
  Unlock();
  return false;
}

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