From 7390eaf7652125fa438b74ffd8d42e0c7bf345c8 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sat, 12 Aug 2006 10:26:43 +0200 Subject: [PATCH] Made the cCiSession members sessionId and resourceId uint16_t and uint32_t --- CONTRIBUTORS | 1 + HISTORY | 3 +++ ci.c | 68 ++++++++++++++++++++++++++-------------------------- ci.h | 14 +++++------ 4 files changed, 45 insertions(+), 41 deletions(-) diff --git a/CONTRIBUTORS b/CONTRIBUTORS index 97a16376..90699891 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -1622,6 +1622,7 @@ Ville Skytt for reporting that the call to pthread_setschedparam(childTid, SCHED_RR, 0) in thread.c caused a compiler warning with g++ 4.1.1 for fixing converting the port number in the "connect from..." log message of SVDRP + for reporting that there are places where ntohs() is assigned to different types Steffen Beyer for fixing setting the colored button help after deleting a recording in case the next diff --git a/HISTORY b/HISTORY index d3ca8bf6..d74f9dae 100644 --- a/HISTORY +++ b/HISTORY @@ -4863,3 +4863,6 @@ Video Disk Recorder Revision History - Fixed converting the port number in the "connect from..." log message of SVDRP (thanks to Ville Skyttä). +- Made the cCiSession members sessionId and resourceId uint16_t and uint32_t, + respectively, to match their types in the CI session data (thanks to Ville Skyttä + for reporting that there are places where ntohs() is assigned to different types). diff --git a/ci.c b/ci.c index e6bfa72b..d1332dd4 100644 --- a/ci.c +++ b/ci.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.c 1.43 2006/07/22 13:40:30 kls Exp $ + * $Id: ci.c 1.44 2006/08/12 10:14:27 kls Exp $ */ #include "ci.h" @@ -630,24 +630,24 @@ cCiTransportConnection *cCiTransportLayer::Process(int Slot) class cCiSession { private: - int sessionId; - int resourceId; + uint16_t sessionId; + uint32_t resourceId; cCiTransportConnection *tc; protected: int GetTag(int &Length, const uint8_t **Data); const uint8_t *GetData(const uint8_t *Data, int &Length); int SendData(int Tag, int Length = 0, const uint8_t *Data = NULL); public: - cCiSession(int SessionId, int ResourceId, cCiTransportConnection *Tc); + cCiSession(uint16_t SessionId, uint32_t ResourceId, cCiTransportConnection *Tc); virtual ~cCiSession(); const cCiTransportConnection *Tc(void) { return tc; } - int SessionId(void) { return sessionId; } - int ResourceId(void) { return resourceId; } + uint16_t SessionId(void) { return sessionId; } + uint32_t ResourceId(void) { return resourceId; } virtual bool HasUserIO(void) { return false; } virtual bool Process(int Length = 0, const uint8_t *Data = NULL); }; -cCiSession::cCiSession(int SessionId, int ResourceId, cCiTransportConnection *Tc) +cCiSession::cCiSession(uint16_t SessionId, uint32_t ResourceId, cCiTransportConnection *Tc) { sessionId = SessionId; resourceId = ResourceId; @@ -711,11 +711,11 @@ class cCiResourceManager : public cCiSession { private: int state; public: - cCiResourceManager(int SessionId, cCiTransportConnection *Tc); + cCiResourceManager(uint16_t SessionId, cCiTransportConnection *Tc); virtual bool Process(int Length = 0, const uint8_t *Data = NULL); }; -cCiResourceManager::cCiResourceManager(int SessionId, cCiTransportConnection *Tc) +cCiResourceManager::cCiResourceManager(uint16_t SessionId, cCiTransportConnection *Tc) :cCiSession(SessionId, RI_RESOURCE_MANAGER, Tc) { dbgprotocol("New Resource Manager (session id %d)\n", SessionId); @@ -729,12 +729,12 @@ bool cCiResourceManager::Process(int Length, const uint8_t *Data) switch (Tag) { case AOT_PROFILE_ENQ: { dbgprotocol("%d: <== Profile Enquiry\n", SessionId()); - int resources[] = { htonl(RI_RESOURCE_MANAGER), - htonl(RI_APPLICATION_INFORMATION), - htonl(RI_CONDITIONAL_ACCESS_SUPPORT), - htonl(RI_DATE_TIME), - htonl(RI_MMI) - }; + uint32_t resources[] = { htonl(RI_RESOURCE_MANAGER), + htonl(RI_APPLICATION_INFORMATION), + htonl(RI_CONDITIONAL_ACCESS_SUPPORT), + htonl(RI_DATE_TIME), + htonl(RI_MMI) + }; dbgprotocol("%d: ==> Profile\n", SessionId()); SendData(AOT_PROFILE, sizeof(resources), (uint8_t*)resources); state = 3; @@ -779,14 +779,14 @@ private: uint16_t manufacturerCode; char *menuString; public: - cCiApplicationInformation(int SessionId, cCiTransportConnection *Tc); + cCiApplicationInformation(uint16_t SessionId, cCiTransportConnection *Tc); virtual ~cCiApplicationInformation(); virtual bool Process(int Length = 0, const uint8_t *Data = NULL); bool EnterMenu(void); const char *GetMenuString(void) { return menuString; } }; -cCiApplicationInformation::cCiApplicationInformation(int SessionId, cCiTransportConnection *Tc) +cCiApplicationInformation::cCiApplicationInformation(uint16_t SessionId, cCiTransportConnection *Tc) :cCiSession(SessionId, RI_APPLICATION_INFORMATION, Tc) { dbgprotocol("New Application Information (session id %d)\n", SessionId); @@ -963,14 +963,14 @@ private: int numCaSystemIds; unsigned short caSystemIds[MAXCASYSTEMIDS + 1]; // list is zero terminated! public: - cCiConditionalAccessSupport(int SessionId, cCiTransportConnection *Tc); + cCiConditionalAccessSupport(uint16_t SessionId, cCiTransportConnection *Tc); virtual bool Process(int Length = 0, const uint8_t *Data = NULL); const unsigned short *GetCaSystemIds(void) { return caSystemIds; } bool SendPMT(cCiCaPmt *CaPmt); bool ReceivedReply(bool CanDescramble = false); }; -cCiConditionalAccessSupport::cCiConditionalAccessSupport(int SessionId, cCiTransportConnection *Tc) +cCiConditionalAccessSupport::cCiConditionalAccessSupport(uint16_t SessionId, cCiTransportConnection *Tc) :cCiSession(SessionId, RI_CONDITIONAL_ACCESS_SUPPORT, Tc) { dbgprotocol("New Conditional Access Support (session id %d)\n", SessionId); @@ -1090,11 +1090,11 @@ private: time_t lastTime; bool SendDateTime(void); public: - cCiDateTime(int SessionId, cCiTransportConnection *Tc); + cCiDateTime(uint16_t SessionId, cCiTransportConnection *Tc); virtual bool Process(int Length = 0, const uint8_t *Data = NULL); }; -cCiDateTime::cCiDateTime(int SessionId, cCiTransportConnection *Tc) +cCiDateTime::cCiDateTime(uint16_t SessionId, cCiTransportConnection *Tc) :cCiSession(SessionId, RI_DATE_TIME, Tc) { interval = 0; @@ -1193,7 +1193,7 @@ private: cCiMenu *menu, *fetchedMenu; cCiEnquiry *enquiry, *fetchedEnquiry; public: - cCiMMI(int SessionId, cCiTransportConnection *Tc); + cCiMMI(uint16_t SessionId, cCiTransportConnection *Tc); virtual ~cCiMMI(); virtual bool Process(int Length = 0, const uint8_t *Data = NULL); virtual bool HasUserIO(void) { return menu || enquiry; } @@ -1204,7 +1204,7 @@ public: bool SendCloseMMI(void); }; -cCiMMI::cCiMMI(int SessionId, cCiTransportConnection *Tc) +cCiMMI::cCiMMI(uint16_t SessionId, cCiTransportConnection *Tc) :cCiSession(SessionId, RI_MMI, Tc) { dbgprotocol("New MMI (session id %d)\n", SessionId); @@ -1524,12 +1524,12 @@ cCiHandler *cCiHandler::CreateCiHandler(const char *FileName) return NULL; } -int cCiHandler::ResourceIdToInt(const uint8_t *Data) +uint32_t cCiHandler::ResourceIdToInt(const uint8_t *Data) { - return (ntohl(get_unaligned((int32_t *)Data))); + return (ntohl(get_unaligned((uint32_t *)Data))); } -bool cCiHandler::Send(uint8_t Tag, int SessionId, int ResourceId, int Status) +bool cCiHandler::Send(uint8_t Tag, uint16_t SessionId, uint32_t ResourceId, int Status) { uint8_t buffer[16]; uint8_t *p = buffer; @@ -1538,7 +1538,7 @@ bool cCiHandler::Send(uint8_t Tag, int SessionId, int ResourceId, int Status) if (Status >= 0) *p++ = Status; if (ResourceId) { - put_unaligned(htonl(ResourceId), (int32_t *)p); + put_unaligned(htonl(ResourceId), (uint32_t *)p); p += 4; } put_unaligned(htons(SessionId), (uint16_t *)p); @@ -1547,7 +1547,7 @@ bool cCiHandler::Send(uint8_t Tag, int SessionId, int ResourceId, int Status) return tc && tc->SendData(p - buffer, buffer) == OK; } -cCiSession *cCiHandler::GetSessionBySessionId(int SessionId) +cCiSession *cCiHandler::GetSessionBySessionId(uint16_t SessionId) { for (int i = 0; i < MAX_CI_SESSION; i++) { if (sessions[i] && sessions[i]->SessionId() == SessionId) @@ -1556,7 +1556,7 @@ cCiSession *cCiHandler::GetSessionBySessionId(int SessionId) return NULL; } -cCiSession *cCiHandler::GetSessionByResourceId(int ResourceId, int Slot) +cCiSession *cCiHandler::GetSessionByResourceId(uint32_t ResourceId, int Slot) { for (int i = 0; i < MAX_CI_SESSION; i++) { if (sessions[i] && sessions[i]->Tc()->Slot() == Slot && sessions[i]->ResourceId() == ResourceId) @@ -1565,7 +1565,7 @@ cCiSession *cCiHandler::GetSessionByResourceId(int ResourceId, int Slot) return NULL; } -cCiSession *cCiHandler::CreateSession(int ResourceId) +cCiSession *cCiHandler::CreateSession(uint32_t ResourceId) { if (!GetSessionByResourceId(ResourceId, tc->Slot())) { for (int i = 0; i < MAX_CI_SESSION; i++) { @@ -1588,7 +1588,7 @@ cCiSession *cCiHandler::CreateSession(int ResourceId) bool cCiHandler::OpenSession(int Length, const uint8_t *Data) { if (Length == 6 && *(Data + 1) == 0x04) { - int ResourceId = ResourceIdToInt(Data + 2); + uint32_t ResourceId = ResourceIdToInt(Data + 2); dbgprotocol("OpenSession %08X\n", ResourceId); switch (ResourceId) { case RI_RESOURCE_MANAGER: @@ -1611,9 +1611,9 @@ bool cCiHandler::OpenSession(int Length, const uint8_t *Data) return false; } -bool cCiHandler::CloseSession(int SessionId) +bool cCiHandler::CloseSession(uint16_t SessionId) { - dbgprotocol("CloseSession %08X\n", SessionId); + dbgprotocol("CloseSession %d\n", SessionId); cCiSession *Session = GetSessionBySessionId(SessionId); if (Session && sessions[SessionId - 1] == Session) { delete Session; @@ -1675,7 +1675,7 @@ bool cCiHandler::Process(int Slot) if (Data && Length > 1) { switch (*Data) { case ST_SESSION_NUMBER: if (Length > 4) { - int SessionId = ntohs(get_unaligned((uint16_t *)&Data[2])); + uint16_t SessionId = ntohs(get_unaligned((uint16_t *)&Data[2])); cCiSession *Session = GetSessionBySessionId(SessionId); if (Session) Session->Process(Length - 4, Data + 4); diff --git a/ci.h b/ci.h index 3817a89b..45740106 100644 --- a/ci.h +++ b/ci.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: ci.h 1.21 2006/01/07 15:03:05 kls Exp $ + * $Id: ci.h 1.22 2006/08/12 09:43:31 kls Exp $ */ #ifndef __CI_H @@ -110,14 +110,14 @@ private: int source; int transponder; cList caProgramList; - int ResourceIdToInt(const uint8_t *Data); - bool Send(uint8_t Tag, int SessionId, int ResourceId = 0, int Status = -1); + uint32_t ResourceIdToInt(const uint8_t *Data); + bool Send(uint8_t Tag, uint16_t SessionId, uint32_t ResourceId = 0, int Status = -1); const unsigned short *GetCaSystemIds(int Slot); - cCiSession *GetSessionBySessionId(int SessionId); - cCiSession *GetSessionByResourceId(int ResourceId, int Slot); - cCiSession *CreateSession(int ResourceId); + cCiSession *GetSessionBySessionId(uint16_t SessionId); + cCiSession *GetSessionByResourceId(uint32_t ResourceId, int Slot); + cCiSession *CreateSession(uint32_t ResourceId); bool OpenSession(int Length, const uint8_t *Data); - bool CloseSession(int SessionId); + bool CloseSession(uint16_t SessionId); int CloseAllSessions(int Slot); cCiHandler(int Fd, int NumSlots); void SendCaPmt(void);