X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/682b9158bbddde229a2559365aa108812b15de61..5c644fbbceaa79a49501975de16b090771edee29:/lib/dvb_ci/dvbci_session.h diff --git a/lib/dvb_ci/dvbci_session.h b/lib/dvb_ci/dvbci_session.h index 426c7f82..1705d765 100644 --- a/lib/dvb_ci/dvbci_session.h +++ b/lib/dvb_ci/dvbci_session.h @@ -10,27 +10,38 @@ class eDVBCISession { 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