{
static eDVBCISession *sessions[SLMS];
static eDVBCISession *eDVBCISession::createSession(eDVBCISlot *slot, const unsigned char *resource_identifier, unsigned char &status);
- void eDVBCISession::sendSPDU(eDVBCISlot *slot, unsigned char tag,const void *data, int len, unsigned short session_nb, const void *apdu=0,int alen=0);
- void sendOpenSessionResponse(eDVBCISlot *slot,unsigned char session_status, const unsigned char *resource_identifier,unsigned short session_nb);
+ static void eDVBCISession::sendSPDU(eDVBCISlot *slot, unsigned char tag,const void *data, int len, unsigned short session_nb, const void *apdu=0,int alen=0);
+ static void sendOpenSessionResponse(eDVBCISlot *slot,unsigned char session_status, const unsigned char *resource_identifier,unsigned short session_nb);
+ void recvCreateSessionResponse(const unsigned char *data);
+ void recvCloseSessionRequest(const unsigned char *data);
protected:
int state;
int status;
int action;
eDVBCISlot *slot; //base only
unsigned short session_nb;
+ virtual int receivedAPDU(const unsigned char *tag, const void *data, int len) = 0;
+ void eDVBCISession::sendAPDU(const unsigned char *tag, const void *data=0,int len=0);
+ void eDVBCISession::sendSPDU(unsigned char tag, const void *data, int len,const void *apdu=0, int alen=0);
+ virtual int doAction()=0;
+ void handleClose();
public:
- eDVBCISession(eDVBCISlot *cislot);
- ~eDVBCISession();
+ virtual ~eDVBCISession();
+
+ int poll() { if (action) { action=doAction(); return 1; } return 0; }
enum { stateInCreation, stateBusy, stateInDeletion, stateStarted, statePrivate};
- int parseLengthField(const unsigned char *pkt, int &len);
- int buildLengthField(unsigned char *pkt, int len);
+ static int parseLengthField(const unsigned char *pkt, int &len);
+ static int buildLengthField(unsigned char *pkt, int len);
- void receiveData(const unsigned char *ptr, size_t len);
+ static void receiveData(eDVBCISlot *slot, const unsigned char *ptr, size_t len);
int getState() { return state; }
int getStatus() { return status; }
+
+ static int pollAll();
+
};
#endif