vdr  2.4.1
ci.h
Go to the documentation of this file.
1 /*
2  * ci.h: Common Interface
3  *
4  * See the main source file 'vdr.c' for copyright information and
5  * how to reach the author.
6  *
7  * $Id: ci.h 4.12.1.2 2019/05/28 15:55:44 kls Exp $
8  */
9 
10 #ifndef __CI_H
11 #define __CI_H
12 
13 #include <stdint.h>
14 #include <stdio.h>
15 #include "channels.h"
16 #include "ringbuffer.h"
17 #include "thread.h"
18 #include "tools.h"
19 
20 #define MAX_CAM_SLOTS_PER_ADAPTER 16 // maximum possible value is 255 (same value as MAXDEVICES!)
21 #define MAX_CONNECTIONS_PER_CAM_SLOT 8 // maximum possible value is 254
22 #define CAM_READ_TIMEOUT 50 // ms
23 
25 class cCamSlot;
26 
27 // VDR's Common Interface functions implement only the features that are absolutely
28 // necessary to control a CAM. If a plugin wants to implement additional functionality
29 // (i.e. "resources"), it can do so by deriving from cCiResourceHandler, cCiSession
30 // and (if necessary) from cCiApplicationInformation.
31 
32 class cCiSession {
33 private:
34  uint16_t sessionId;
35  uint32_t resourceId;
37 protected:
38  void SetTsPostProcessor(void);
41  void SetResourceId(uint32_t Id);
45  int GetTag(int &Length, const uint8_t **Data);
46  const uint8_t *GetData(const uint8_t *Data, int &Length);
47  void SendData(int Tag, int Length = 0, const uint8_t *Data = NULL);
48  cCiTransportConnection *Tc(void) { return tc; }
49 public:
51  virtual ~cCiSession();
52  uint16_t SessionId(void) { return sessionId; }
53  uint32_t ResourceId(void) { return resourceId; }
54  cCamSlot *CamSlot(void);
55  virtual bool HasUserIO(void) { return false; }
56  virtual void Process(int Length = 0, const uint8_t *Data = NULL);
57  virtual bool TsPostProcess(uint8_t *TsPacket) { return false; }
66  };
67 
69 protected:
70  int state;
71  uint8_t applicationType;
73  uint16_t manufacturerCode;
74  char *menuString;
75 public:
78  virtual void Process(int Length = 0, const uint8_t *Data = NULL);
79  bool EnterMenu(void);
80  const char *GetMenuString(void) { return menuString; }
81  };
82 
84 public:
85  cCiResourceHandler(void);
91  virtual ~cCiResourceHandler();
92  virtual const uint32_t *ResourceIds(void) const = 0;
95  virtual cCiSession *GetNewCiSession(uint32_t ResourceId, uint16_t SessionId, cCiTransportConnection *Tc) = 0;
97  };
98 
99 class cCiResourceHandlers : public cList<cCiResourceHandler> {
100 private:
102 public:
103  cCiResourceHandlers(void);
105  void Register(cCiResourceHandler *ResourceHandler);
110  const uint32_t *Ids(void) { return &resourceIds[0]; }
111  int NumIds(void) { return resourceIds.Size(); }
112  cCiSession *GetNewCiSession(uint32_t ResourceId, uint16_t SessionId, cCiTransportConnection *Tc);
113  };
114 
116 
117 class cCiMMI;
118 
119 class cCiMenu {
120  friend class cCamSlot;
121  friend class cCiMMI;
122 private:
123  enum { MAX_CIMENU_ENTRIES = 64 };
127  char *titleText;
129  char *bottomText;
132  bool AddEntry(char *s);
133  cCiMenu(cCiMMI *MMI, bool Selectable);
134 public:
135  ~cCiMenu();
136  const char *TitleText(void) { return titleText; }
137  const char *SubTitleText(void) { return subTitleText; }
138  const char *BottomText(void) { return bottomText; }
139  const char *Entry(int n) { return n < numEntries ? entries[n] : NULL; }
140  int NumEntries(void) { return numEntries; }
141  bool Selectable(void) { return selectable; }
142  void Select(int Index);
143  void Cancel(void);
144  void Abort(void);
145  bool HasUpdate(void);
146  };
147 
148 class cCiEnquiry {
149  friend class cCamSlot;
150  friend class cCiMMI;
151 private:
154  char *text;
155  bool blind;
157  cCiEnquiry(cCiMMI *MMI);
158 public:
159  ~cCiEnquiry();
160  const char *Text(void) { return text; }
161  bool Blind(void) { return blind; }
162  int ExpectedLength(void) { return expectedLength; }
163  void Reply(const char *s);
164  void Cancel(void);
165  void Abort(void);
166  };
167 
168 class cDevice;
169 
171 
172 class cCiAdapter : public cThread {
173  friend class cCamSlot;
174 private:
176  void AddCamSlot(cCamSlot *CamSlot);
178 protected:
179  cCamSlot *ItCamSlot(int &Iter);
183  virtual void Action(void);
187  virtual int Read(uint8_t *Buffer, int MaxLength) { return 0; }
192  virtual void Write(const uint8_t *Buffer, int Length) {}
194  virtual bool Reset(int Slot) { return false; }
197  virtual eModuleStatus ModuleStatus(int Slot) { return msNone; }
199  virtual bool Assign(cDevice *Device, bool Query = false) { return false; }
208 public:
209  cCiAdapter(void);
210  virtual ~cCiAdapter();
212  };
213 
214 class cTPDU;
216 class cCiSession;
217 class cCiCaProgramData;
218 class cCaPidReceiver;
220 class cMtdHandler;
221 class cMtdMapper;
222 class cMtdCamSlot;
223 class cCiCaPmt;
224 
225 struct cCiCaPmtList {
227  ~cCiCaPmtList();
228  cCiCaPmt *Add(uint8_t CmdId, int Source, int Transponder, int ProgramNumber, const int *CaSystemIds);
229  void Del(cCiCaPmt *CaPmt);
230  };
231 
232 class cCamSlot : public cListObject {
233  friend class cCiAdapter;
236  friend class cMtdCamSlot;
237 private:
247  cCiTransportConnection *tc[MAX_CONNECTIONS_PER_CAM_SLOT + 1]; // connection numbering starts with 1
249  time_t resetTime;
251  bool resendPmt;
252  int source;
257  void KeepSharedCaPids(int ProgramNumber, const int *CaSystemIds, int *CaPids);
258  void NewConnection(void);
259  void DeleteAllConnections(void);
260  void Process(cTPDU *TPDU = NULL);
261  void Write(cTPDU *TPDU);
262  cCiSession *GetSessionByResourceId(uint32_t ResourceId);
263  void MtdActivate(bool On);
265 protected:
266  virtual const int *GetCaSystemIds(void);
267  virtual void SendCaPmt(uint8_t CmdId);
268  virtual bool RepliesToQuery(void);
271  void BuildCaPmts(uint8_t CmdId, cCiCaPmtList &CaPmtList, cMtdMapper *MtdMapper = NULL);
274  void SendCaPmts(cCiCaPmtList &CaPmtList);
276  void MtdEnable(void);
279  int MtdPutData(uchar *Data, int Count);
283 public:
284  bool McdAvailable(void) { return RepliesToQuery(); }
286  bool MtdAvailable(void) { return mtdAvailable; }
288  bool MtdActive(void) { return mtdHandler != NULL; }
290 public:
291  cCamSlot(cCiAdapter *CiAdapter, bool WantsTsData = false, cCamSlot *MasterSlot = NULL);
305  virtual ~cCamSlot();
306  bool IsMasterSlot(void) { return !masterSlot; }
309  cCamSlot *MasterSlot(void) { return masterSlot ? masterSlot : this; }
312  cCamSlot *MtdSpawn(void);
317  void TriggerResendPmt(void) { resendPmt = true; }
319  virtual bool Assign(cDevice *Device, bool Query = false);
332  cDevice *Device(void) { return assignedDevice; }
334  bool Devices(cVector<int> &DeviceNumbers);
338  bool WantsTsData(void) const { return caPidReceiver != NULL; }
341  int SlotIndex(void) { return slotIndex; }
344  int SlotNumber(void) { return slotNumber; }
350  virtual bool Reset(void);
353  virtual bool CanActivate(void);
356  virtual void StartActivation(void);
366  virtual void CancelActivation(void);
368  virtual bool IsActivating(void);
370  virtual eModuleStatus ModuleStatus(void);
372  virtual const char *GetCamName(void);
375  virtual bool Ready(void);
377  virtual bool HasMMI(void);
379  virtual bool HasUserIO(void);
382  virtual bool EnterMenu(void);
384  virtual cCiMenu *GetMenu(void);
386  virtual cCiEnquiry *GetEnquiry(void);
388  int Priority(void);
391  virtual bool ProvidesCa(const int *CaSystemIds);
398  virtual void AddPid(int ProgramNumber, int Pid, int StreamType);
401  virtual void SetPid(int Pid, bool Active);
405  virtual void AddChannel(const cChannel *Channel);
410  virtual bool CanDecrypt(const cChannel *Channel, cMtdMapper *MtdMapper = NULL);
422  virtual void StartDecrypting(void);
428  virtual void StopDecrypting(void);
433  virtual bool IsDecrypting(void);
435  virtual uchar *Decrypt(uchar *Data, int &Count);
473  virtual bool TsPostProcess(uchar *Data);
479  virtual bool Inject(uchar *Data, int Count);
485  virtual void InjectEit(int Sid);
491  };
492 
493 class cCamSlots : public cList<cCamSlot> {
494 public:
495  int NumReadyMasterSlots(void);
498  bool WaitForAllCamSlotsReady(int Timeout = 0);
504  };
505 
506 extern cCamSlots CamSlots;
507 
508 class cChannelCamRelation;
509 
510 class cChannelCamRelations : public cList<cChannelCamRelation> {
511 private:
516  time_t lastCleanup;
517  void Cleanup(void);
518 public:
519  cChannelCamRelations(void);
520  void Reset(int CamSlotNumber);
521  bool CamChecked(tChannelID ChannelID, int CamSlotNumber);
522  bool CamDecrypt(tChannelID ChannelID, int CamSlotNumber);
523  void SetChecked(tChannelID ChannelID, int CamSlotNumber);
524  void SetDecrypt(tChannelID ChannelID, int CamSlotNumber);
525  void ClrChecked(tChannelID ChannelID, int CamSlotNumber);
526  void ClrDecrypt(tChannelID ChannelID, int CamSlotNumber);
527  void Load(const char *FileName);
528  void Save(void);
529  };
530 
532 
533 bool CamResponsesLoad(const char *FileName, bool AllowComments = false, bool MustExist = false);
534 
535 #endif //__CI_H
cCiResourceHandler::GetNewCiSession
virtual cCiSession * GetNewCiSession(uint32_t ResourceId, uint16_t SessionId, cCiTransportConnection *Tc)=0
Returns a new cCiSession, according to the given ResourceId.
cCiAdapter::Reset
virtual bool Reset(int Slot)
Resets the CAM in the given Slot.
Definition: ci.h:194
cCiConditionalAccessSupport
Definition: ci.c:1085
cCiEnquiry::Cancel
void Cancel(void)
Definition: ci.c:1693
cCamSlot::Devices
bool Devices(cVector< int > &DeviceNumbers)
Adds the numbers of any devices that currently use this CAM to the given DeviceNumbers.
Definition: ci.c:2236
cCamSlot::caPidReceiver
cCaPidReceiver * caPidReceiver
Definition: ci.h:243
cCamSlot
Definition: ci.h:232
ChannelCamRelations
cChannelCamRelations ChannelCamRelations
Definition: ci.c:2917
cCamSlots
Definition: ci.h:493
cCiEnquiry::blind
bool blind
Definition: ci.h:155
cCiAdapter::AddCamSlot
void AddCamSlot(cCamSlot *CamSlot)
Adds the given CamSlot to this CI adapter.
Definition: ci.c:2103
cChannelCamRelations::fileName
cString fileName
Definition: ci.h:513
cCiSession::Tc
cCiTransportConnection * Tc(void)
Definition: ci.h:48
cChannelCamRelations::Cleanup
void Cleanup(void)
Definition: ci.c:2924
cChannelCamRelations::CamDecrypt
bool CamDecrypt(tChannelID ChannelID, int CamSlotNumber)
Definition: ci.c:2974
cCamSlot::KeepSharedCaPids
void KeepSharedCaPids(int ProgramNumber, const int *CaSystemIds, int *CaPids)
Definition: ci.c:2540
cCamSlot::MtdPutData
int MtdPutData(uchar *Data, int Count)
Sends at most Count bytes of the given Data to the individual MTD CAM slots that are using this CAM.
Definition: ci.c:2618
cCiResourceHandler
Definition: ci.h:83
cCiApplicationInformation::applicationType
uint8_t applicationType
Definition: ci.h:71
ringbuffer.h
cCiSession::tc
cCiTransportConnection * tc
Definition: ci.h:36
cCiMenu::HasUpdate
bool HasUpdate(void)
Definition: ci.c:1642
cCamSlot::caActivationReceiver
cCaActivationReceiver * caActivationReceiver
Definition: ci.h:244
cCiSession::ResourceId
uint32_t ResourceId(void)
Definition: ci.h:53
cTPDU
Definition: ci.c:481
cCiAdapter
Definition: ci.h:172
cCiSession::GetTag
int GetTag(int &Length, const uint8_t **Data)
Definition: ci.c:725
cCiCaPmtList::Add
cCiCaPmt * Add(uint8_t CmdId, int Source, int Transponder, int ProgramNumber, const int *CaSystemIds)
Definition: ci.c:2481
cChannelCamRelations::Load
void Load(const char *FileName)
Definition: ci.c:3013
msReset
@ msReset
Definition: ci.h:170
cCiSession::resourceId
uint32_t resourceId
Definition: ci.h:35
cCiApplicationInformation::~cCiApplicationInformation
virtual ~cCiApplicationInformation()
Definition: ci.c:842
cCamSlot::GetMenu
virtual cCiMenu * GetMenu(void)
Gets a pending menu, or NULL if there is no menu.
Definition: ci.c:2449
cCiSession::SendData
void SendData(int Tag, int Length=0, const uint8_t *Data=NULL)
Definition: ci.c:746
cCamSlot::HasMMI
virtual bool HasMMI(void)
Returns 'true' if the CAM in this slot has an active MMI.
Definition: ci.c:2431
cCamSlot::processed
cCondVar processed
Definition: ci.h:239
cCiMenu::TitleText
const char * TitleText(void)
Definition: ci.h:136
cCiAdapter::camSlots
cCamSlot * camSlots[MAX_CAM_SLOTS_PER_ADAPTER]
Definition: ci.h:175
cCamSlot::SendCaPmt
virtual void SendCaPmt(uint8_t CmdId)
Definition: ci.c:2588
cCiMMI
Definition: ci.c:1380
cCondVar
Definition: thread.h:44
cCiMenu::Selectable
bool Selectable(void)
Definition: ci.h:141
cCamSlots::WaitForAllCamSlotsReady
bool WaitForAllCamSlotsReady(int Timeout=0)
Waits until all CAM slots have become ready, or the given Timeout (seconds) has expired.
Definition: ci.c:2820
cCamSlot::moduleCheckTimer
cTimeMs moduleCheckTimer
Definition: ci.h:250
cChannelCamRelations::ClrChecked
void ClrChecked(tChannelID ChannelID, int CamSlotNumber)
Definition: ci.c:2997
cCamSlot::lastModuleStatus
eModuleStatus lastModuleStatus
Definition: ci.h:248
cCamSlot::SendCaPmts
void SendCaPmts(cCiCaPmtList &CaPmtList)
Sends the given list of CA_PMTs to the CAM.
Definition: ci.c:2577
cCiAdapter::ModuleStatus
virtual eModuleStatus ModuleStatus(int Slot)
Returns the status of the CAM in the given Slot.
Definition: ci.h:197
cCamSlot::SlotIndex
int SlotIndex(void)
Returns the index of this CAM slot within its CI adapter.
Definition: ci.h:341
cCamSlot::cCamSlot
cCamSlot(cCiAdapter *CiAdapter, bool WantsTsData=false, cCamSlot *MasterSlot=NULL)
Creates a new CAM slot for the given CiAdapter.
Definition: ci.c:2152
cCiMenu::cCiMenu
cCiMenu(cCiMMI *MMI, bool Selectable)
Definition: ci.c:1612
cCiEnquiry::Text
const char * Text(void)
Definition: ci.h:160
cCiEnquiry::text
char * text
Definition: ci.h:154
cCamSlot::AddPid
virtual void AddPid(int ProgramNumber, int Pid, int StreamType)
Adds the given PID information to the list of PIDs.
Definition: ci.c:2653
cCiResourceHandlers::GetNewCiSession
cCiSession * GetNewCiSession(uint32_t ResourceId, uint16_t SessionId, cCiTransportConnection *Tc)
Definition: ci.c:1772
cCiSession::SetResourceId
void SetResourceId(uint32_t Id)
If this is a class that has been derived from an existing cCiSession class, but implements a differen...
Definition: ci.c:715
cCamSlot::StartDecrypting
virtual void StartDecrypting(void)
Sends all CA_PMT entries to the CAM that have been modified since the last call to this function.
Definition: ci.c:2750
cCamSlot::EnterMenu
virtual bool EnterMenu(void)
Requests the CAM in this slot to start its menu.
Definition: ci.c:2442
cCamSlot::mtdHandler
cMtdHandler * mtdHandler
Definition: ci.h:256
cCiApplicationInformation::state
int state
Definition: ci.h:70
cCiEnquiry::expectedLength
int expectedLength
Definition: ci.h:156
msPresent
@ msPresent
Definition: ci.h:170
cCiCaPmt
Definition: ci.c:910
cChannelCamRelations::SetDecrypt
void SetDecrypt(tChannelID ChannelID, int CamSlotNumber)
Definition: ci.c:2989
cCamSlot::GetEnquiry
virtual cCiEnquiry * GetEnquiry(void)
Gets a pending enquiry, or NULL if there is no enquiry.
Definition: ci.c:2462
cCaPidReceiver
Definition: ci.c:117
cCiCaProgramData
Definition: ci.c:2067
cCiMenu::bottomText
char * bottomText
Definition: ci.h:129
cCamSlot::source
int source
Definition: ci.h:252
cCiResourceHandler::~cCiResourceHandler
virtual ~cCiResourceHandler()
Definition: ci.c:1711
cCamSlot::GetCaSystemIds
virtual const int * GetCaSystemIds(void)
Definition: ci.c:2623
cCiApplicationInformation::Process
virtual void Process(int Length=0, const uint8_t *Data=NULL)
Definition: ci.c:847
cCiAdapter::Assign
virtual bool Assign(cDevice *Device, bool Query=false)
Assigns this adapter to the given Device, if this is possible.
Definition: ci.h:199
cChannelCamRelations::SetChecked
void SetChecked(tChannelID ChannelID, int CamSlotNumber)
Definition: ci.c:2981
cCamSlot::CancelActivation
virtual void CancelActivation(void)
Cancels a previously started activation (if any).
Definition: ci.c:2387
cCiSession::~cCiSession
virtual ~cCiSession()
Definition: ci.c:711
cCiSession::Process
virtual void Process(int Length=0, const uint8_t *Data=NULL)
Definition: ci.c:773
cCamSlot::transponder
int transponder
Definition: ci.h:253
cCiSession::cCiSession
cCiSession(uint16_t SessionId, uint32_t ResourceId, cCiTransportConnection *Tc)
Definition: ci.c:704
cCamSlot::BuildCaPmts
void BuildCaPmts(uint8_t CmdId, cCiCaPmtList &CaPmtList, cMtdMapper *MtdMapper=NULL)
Generates all CA_PMTs with the given CmdId and stores them in the given CaPmtList.
Definition: ci.c:2501
cCaActivationReceiver
Definition: ci.c:287
tChannelID
Definition: channels.h:49
cCiCaPmtList::Del
void Del(cCiCaPmt *CaPmt)
Definition: ci.c:2488
cCamSlot::~cCamSlot
virtual ~cCamSlot()
Definition: ci.c:2177
cCamSlot::Reset
virtual bool Reset(void)
Resets the CAM in this slot.
Definition: ci.c:2349
cCiEnquiry::mutex
cMutex * mutex
Definition: ci.h:153
cChannelCamRelations::CamChecked
bool CamChecked(tChannelID ChannelID, int CamSlotNumber)
Definition: ci.c:2967
cCamSlot::WantsTsData
bool WantsTsData(void) const
Returns true if this CAM slot wants to receive the TS data through its Decrypt() function.
Definition: ci.h:338
cChannelCamRelations::Save
void Save(void)
Definition: ci.c:3047
msNone
@ msNone
Definition: ci.h:170
cVector< uint32_t >
MAX_CAM_SLOTS_PER_ADAPTER
#define MAX_CAM_SLOTS_PER_ADAPTER
Definition: ci.h:20
cChannelCamRelations::lastCleanup
time_t lastCleanup
Definition: ci.h:516
cCiEnquiry::Blind
bool Blind(void)
Definition: ci.h:161
cCamSlot::SetPid
virtual void SetPid(int Pid, bool Active)
Sets the given Pid (which has previously been added through a call to AddPid()) to Active.
Definition: ci.c:2671
cCiMenu::Select
void Select(int Index)
Definition: ci.c:1648
cCamSlot::Assign
virtual bool Assign(cDevice *Device, bool Query=false)
Assigns this CAM slot to the given Device, if this is possible.
Definition: ci.c:2195
cCiEnquiry::Reply
void Reply(const char *s)
Definition: ci.c:1686
cCamSlot::caProgramList
cList< cCiCaProgramData > caProgramList
Definition: ci.h:254
cCiApplicationInformation::applicationManufacturer
uint16_t applicationManufacturer
Definition: ci.h:72
cCamSlot::slotIndex
int slotIndex
Definition: ci.h:245
cCiResourceHandlers
Definition: ci.h:99
cCamSlot::tc
cCiTransportConnection * tc[MAX_CONNECTIONS_PER_CAM_SLOT+1]
Definition: ci.h:247
cCamSlot::ciAdapter
cCiAdapter * ciAdapter
Definition: ci.h:240
cMutex
Definition: thread.h:67
cCiTransportConnection
Definition: ci.c:587
cCiSession::CamSlot
cCamSlot * CamSlot(void)
Definition: ci.c:768
channels.h
cCiMenu::BottomText
const char * BottomText(void)
Definition: ci.h:138
cCamSlot::ModuleStatus
virtual eModuleStatus ModuleStatus(void)
Returns the status of the CAM in this slot.
Definition: ci.c:2405
cListObject
Definition: tools.h:493
cCiResourceHandler::ResourceIds
virtual const uint32_t * ResourceIds(void) const =0
Returns a pointer to an array of resource identifiers, where the last value is zero.
cCamSlot::mutex
cMutex mutex
Definition: ci.h:238
CiResourceHandlers
cCiResourceHandlers CiResourceHandlers
Definition: ci.c:1752
cCiAdapter::~cCiAdapter
virtual ~cCiAdapter()
The derived class must call Cancel(3) in its destructor.
Definition: ci.c:2096
cCiEnquiry::~cCiEnquiry
~cCiEnquiry()
Definition: ci.c:1678
cDevice
Definition: device.h:117
cCiAdapter::Write
virtual void Write(const uint8_t *Buffer, int Length)
Writes Length bytes of the given Buffer.
Definition: ci.h:192
cCiSession::GetData
const uint8_t * GetData(const uint8_t *Data, int &Length)
Definition: ci.c:740
uchar
unsigned char uchar
Definition: tools.h:31
cCiMenu::selectable
bool selectable
Definition: ci.h:126
cCamSlot::IsActivating
virtual bool IsActivating(void)
Returns true if this CAM slot is currently activating a smart card.
Definition: ci.c:2398
cCiMenu::subTitleText
char * subTitleText
Definition: ci.h:128
cCamSlot::MasterSlotNumber
int MasterSlotNumber(void)
Returns the number of this CAM's master slot within the whole system.
Definition: ci.h:347
cCamSlot::IsMasterSlot
bool IsMasterSlot(void)
Returns true if this CAM slot itself is a master slot (which means that it doesn't have a pointer to ...
Definition: ci.h:306
cChannelCamRelations
Definition: ci.h:510
cCamSlot::ProvidesCa
virtual bool ProvidesCa(const int *CaSystemIds)
Returns true if the CAM in this slot provides one of the given CaSystemIds.
Definition: ci.c:2638
cCiAdapter::Action
virtual void Action(void)
Handles the attached CAM slots in a separate thread.
Definition: ci.c:2128
cMtdCamSlot
Definition: mtd.h:154
cCiEnquiry::mmi
cCiMMI * mmi
Definition: ci.h:152
cCamSlot::GetCamName
virtual const char * GetCamName(void)
Returns the name of the CAM in this slot, or NULL if there is no ready CAM in this slot.
Definition: ci.c:2419
cTimeMs
Definition: tools.h:369
msReady
@ msReady
Definition: ci.h:170
cVector::Size
int Size(void) const
Definition: tools.h:717
cCiMenu::Cancel
void Cancel(void)
Definition: ci.c:1655
cCamSlot::HasUserIO
virtual bool HasUserIO(void)
Returns true if there is a pending user interaction, which shall be retrieved via GetMenu() or GetEnq...
Definition: ci.c:2436
cList
Definition: tools.h:594
cCamSlot::TsPostProcess
virtual bool TsPostProcess(uchar *Data)
If there is a cCiSession that needs to do additional processing on TS packets (after the CAM has done...
Definition: ci.c:2790
cCiSession::TsPostProcess
virtual bool TsPostProcess(uint8_t *TsPacket)
If this cCiSession needs to do additional processing on TS packets (after the CAM has done the decryp...
Definition: ci.h:57
cCiMenu::~cCiMenu
~cCiMenu()
Definition: ci.c:1621
cCiEnquiry::Abort
void Abort(void)
Definition: ci.c:1698
cCamSlot::TriggerResendPmt
void TriggerResendPmt(void)
Tells this CAM slot to resend the list of CA_PMTs to the CAM.
Definition: ci.h:317
cCamSlot::NewConnection
void NewConnection(void)
Definition: ci.c:2246
cCamSlot::assignedDevice
cDevice * assignedDevice
Definition: ci.h:242
cCiApplicationInformation::cCiApplicationInformation
cCiApplicationInformation(uint16_t SessionId, cCiTransportConnection *Tc)
Definition: ci.c:834
cCamSlot::RepliesToQuery
virtual bool RepliesToQuery(void)
Returns true if the CAM in this slot replies to queries and thus supports MCD ("Multi Channel Decrypt...
Definition: ci.c:2494
cCamSlot::Process
void Process(cTPDU *TPDU=NULL)
Definition: ci.c:2268
cCamSlot::MtdSpawn
cCamSlot * MtdSpawn(void)
If this CAM slot can do MTD ("Multi Transponder Decryption"), a call to this function returns a cMtdC...
Definition: ci.c:2187
cCiResourceHandlers::NumIds
int NumIds(void)
Definition: ci.h:111
cCiSession::sessionId
uint16_t sessionId
Definition: ci.h:34
cChannel
Definition: channels.h:89
cCamSlot::resetTime
time_t resetTime
Definition: ci.h:249
cCiResourceHandlers::resourceIds
cVector< uint32_t > resourceIds
Definition: ci.h:101
cCamSlot::resendPmt
bool resendPmt
Definition: ci.h:251
cCiSession::SessionId
uint16_t SessionId(void)
Definition: ci.h:52
cCamSlots::NumReadyMasterSlots
int NumReadyMasterSlots(void)
Returns the number of master CAM slots in the system that are ready to decrypt.
Definition: ci.c:2810
cCamSlot::McdAvailable
bool McdAvailable(void)
Returns true if this CAM supports MCD ("Multi Channel Decyption").
Definition: ci.h:284
cCiMenu::numEntries
int numEntries
Definition: ci.h:131
cCiAdapter::ItCamSlot
cCamSlot * ItCamSlot(int &Iter)
Iterates over all added CAM slots of this adapter.
Definition: ci.c:2117
cCiMenu::mutex
cMutex * mutex
Definition: ci.h:125
cString
Definition: tools.h:176
cCiApplicationInformation::EnterMenu
bool EnterMenu(void)
Definition: ci.c:880
cCamSlot::MasterSlot
cCamSlot * MasterSlot(void)
Returns this CAM slot's master slot, or a pointer to itself if it is a master slot.
Definition: ci.h:309
cCamSlot::AddChannel
virtual void AddChannel(const cChannel *Channel)
Adds all PIDs of the given Channel to the current list of PIDs.
Definition: ci.c:2694
cCiResourceHandlers::cCiResourceHandlers
cCiResourceHandlers(void)
Creates the default list of resourceIds.
Definition: ci.c:1754
cCiApplicationInformation
Definition: ci.h:68
cCiSession
Definition: ci.h:32
eModuleStatus
eModuleStatus
Definition: ci.h:170
cChannelCamRelations::Reset
void Reset(int CamSlotNumber)
Definition: ci.c:2958
cCamSlot::StartActivation
virtual void StartActivation(void)
Puts the CAM in this slot into a mode where an inserted smart card can be activated.
Definition: ci.c:2372
cCamSlot::IsDecrypting
virtual bool IsDecrypting(void)
Returns true if the CAM in this slot is currently used for decrypting.
Definition: ci.c:2765
cThread
Definition: thread.h:79
cCiMenu::titleText
char * titleText
Definition: ci.h:127
cChannelCamRelations::mutex
cMutex mutex
Definition: ci.h:512
cCiCaPmtList::~cCiCaPmtList
~cCiCaPmtList()
Definition: ci.c:2475
cCiMenu::NumEntries
int NumEntries(void)
Definition: ci.h:140
cCiResourceHandlers::Register
void Register(cCiResourceHandler *ResourceHandler)
Adds the given ResourceHandler to the list of resource handlers and appends its ResourceIds to the gl...
Definition: ci.c:1759
cChannelCamRelations::GetEntry
cChannelCamRelation * GetEntry(tChannelID ChannelID)
Definition: ci.c:2938
cMtdCamSlot::MtdMapper
cMtdMapper * MtdMapper(void)
Definition: mtd.h:168
cCiCaPmtList
Definition: ci.h:225
cCamSlot::CanActivate
virtual bool CanActivate(void)
Returns true if there is a CAM in this slot that can be put into activation mode.
Definition: ci.c:2367
cCamSlot::DeleteAllConnections
void DeleteAllConnections(void)
Definition: ci.c:2259
cCamSlot::slotNumber
int slotNumber
Definition: ci.h:246
cCamSlot::mtdAvailable
bool mtdAvailable
Definition: ci.h:255
cCamSlot::MtdEnable
void MtdEnable(void)
Enables MTD support for this CAM.
Definition: ci.c:2596
cCiEnquiry::cCiEnquiry
cCiEnquiry(cCiMMI *MMI)
Definition: ci.c:1669
cMtdHandler
Definition: mtd.h:111
cCiCaPmtList::caPmts
cVector< cCiCaPmt * > caPmts
Definition: ci.h:226
CamResponsesLoad
bool CamResponsesLoad(const char *FileName, bool AllowComments=false, bool MustExist=false)
Definition: ci.c:457
cCiMenu::mmi
cCiMMI * mmi
Definition: ci.h:124
cCamSlot::MtdAvailable
bool MtdAvailable(void)
Returns true if this CAM supports MTD ("Multi Transponder Decryption").
Definition: ci.h:286
cCamSlot::masterSlot
cCamSlot * masterSlot
Definition: ci.h:241
cCiMenu
Definition: ci.h:119
cCamSlot::CanDecrypt
virtual bool CanDecrypt(const cChannel *Channel, cMtdMapper *MtdMapper=NULL)
Returns true if there is a CAM in this slot that is able to decrypt the given Channel (or at least cl...
Definition: ci.c:2714
cCamSlot::MtdActivate
void MtdActivate(bool On)
Activates (On == true) or deactivates (On == false) MTD.
Definition: ci.c:2601
cCamSlot::InjectEit
virtual void InjectEit(int Sid)
Injects a generated EIT with a "present event" for the given Sid into the TS data stream sent to the ...
Definition: ci.c:2800
cCiEnquiry
Definition: ci.h:148
cCiSession::HasUserIO
virtual bool HasUserIO(void)
Definition: ci.h:55
cCamSlot::Device
cDevice * Device(void)
Returns the device this CAM slot is currently assigned to.
Definition: ci.h:332
cCamSlot::Inject
virtual bool Inject(uchar *Data, int Count)
Sends all Count bytes of the given Data to the CAM, and returns true if this was possible.
Definition: ci.c:2795
cCiSession::SetTsPostProcessor
void SetTsPostProcessor(void)
If this cCiSession implements the TsPostProcess() function, it shall call SetTsPostProcessor() to reg...
Definition: ci.c:720
cCiApplicationInformation::manufacturerCode
uint16_t manufacturerCode
Definition: ci.h:73
cCamSlot::SlotNumber
int SlotNumber(void)
Returns the number of this CAM slot within the whole system.
Definition: ci.h:344
cCamSlot::Decrypt
virtual uchar * Decrypt(uchar *Data, int &Count)
If this is a CAM slot that can be freely assigned to any device, but will not be directly inserted in...
Definition: ci.c:2783
tools.h
cCamSlot::MtdActive
bool MtdActive(void)
Returns true if MTD is currently active.
Definition: ci.h:288
cCiMenu::MAX_CIMENU_ENTRIES
@ MAX_CIMENU_ENTRIES
Definition: ci.h:123
cMtdMapper
Definition: mtd.c:147
cCamSlot::Write
void Write(cTPDU *TPDU)
Definition: ci.c:2340
cChannelCamRelations::cChannelCamRelations
cChannelCamRelations(void)
Definition: ci.c:2919
cCiMenu::entries
char * entries[MAX_CIMENU_ENTRIES]
Definition: ci.h:130
cCamSlot::GetSessionByResourceId
cCiSession * GetSessionByResourceId(uint32_t ResourceId)
Definition: ci.c:2334
cChannelCamRelation
Definition: ci.c:2843
cChannelCamRelations::ClrDecrypt
void ClrDecrypt(tChannelID ChannelID, int CamSlotNumber)
Definition: ci.c:3005
cCiApplicationInformation::menuString
char * menuString
Definition: ci.h:74
cCiResourceHandler::cCiResourceHandler
cCiResourceHandler(void)
Creates a new resource handler, through which the available resources can be provides.
Definition: ci.c:1707
thread.h
cCiAdapter::Read
virtual int Read(uint8_t *Buffer, int MaxLength)
Reads one chunk of data into the given Buffer, up to MaxLength bytes.
Definition: ci.h:187
cCiAdapter::cCiAdapter
cCiAdapter(void)
Definition: ci.c:2089
CamSlots
cCamSlots CamSlots
Definition: ci.c:2808
cCiEnquiry::ExpectedLength
int ExpectedLength(void)
Definition: ci.h:162
cChannelCamRelations::AddEntry
cChannelCamRelation * AddEntry(tChannelID ChannelID)
Definition: ci.c:2949
cCamSlot::Priority
int Priority(void)
Returns the priority of the device this slot is currently assigned to, or IDLEPRIORITY if it is not a...
Definition: ci.c:2630
cCiMenu::AddEntry
bool AddEntry(char *s)
Definition: ci.c:1633
cCamSlot::Ready
virtual bool Ready(void)
Returns 'true' if the CAM in this slot is ready to decrypt.
Definition: ci.c:2425
MAX_CONNECTIONS_PER_CAM_SLOT
#define MAX_CONNECTIONS_PER_CAM_SLOT
Definition: ci.h:21
cCiMenu::Abort
void Abort(void)
Definition: ci.c:1660
cCiMenu::SubTitleText
const char * SubTitleText(void)
Definition: ci.h:137
cCiApplicationInformation::GetMenuString
const char * GetMenuString(void)
Definition: ci.h:80
cCamSlot::StopDecrypting
virtual void StopDecrypting(void)
Clears the list of CA_PMT entries and tells the CAM to stop decrypting.
Definition: ci.c:2755
cCiMenu::Entry
const char * Entry(int n)
Definition: ci.h:139
cCiResourceHandlers::Ids
const uint32_t * Ids(void)
Definition: ci.h:110