From: leslie Date: Sat, 19 Dec 2009 12:44:50 +0000 (+0100) Subject: cardclient: don't delete client if initial login fails X-Git-Tag: upstream/620~130 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=b6f4df738b8484b41cc3804e8e400d037994912f;p=sasc-ng.git cardclient: don't delete client if initial login fails --- diff --git a/systems/cardclient/aroureos.c b/systems/cardclient/aroureos.c index 59eddd3..608f9c8 100644 --- a/systems/cardclient/aroureos.c +++ b/systems/cardclient/aroureos.c @@ -28,11 +28,10 @@ class cCardClientAroureos : public cCardClient, protected cIdSet { private: bool ParseCardConfig(const char *config, int *num); -protected: - virtual bool Login(void); public: cCardClientAroureos(const char *Name); virtual bool Init(const char *config); + virtual bool Login(void); virtual bool ProcessECM(const cEcmInfo *ecm, const unsigned char *source, unsigned char *cw, int cardnum); virtual bool ProcessEMM(int caSys, const unsigned char *source); }; diff --git a/systems/cardclient/camd.c b/systems/cardclient/camd.c index 67a2ef5..e779aab 100644 --- a/systems/cardclient/camd.c +++ b/systems/cardclient/camd.c @@ -45,7 +45,6 @@ protected: char username[11], password[11]; int emmReqLen; // - virtual bool Login(void); bool ParseKeyConfig(const char *config, int *num); bool ParseUserConfig(const char *config, int *num); virtual bool SendMsg(const unsigned char *data, int len); @@ -55,6 +54,8 @@ protected: public: cCardClientCommon(const char *Name, bool ConReply, bool LogReply, bool DoAES, int MinMsgLen); virtual bool Init(const char *config); + virtual bool Login(void); + virtual bool Immediate(void); virtual bool ProcessECM(const cEcmInfo *ecm, const unsigned char *source, unsigned char *cw, int cardnum); virtual bool ProcessEMM(int caSys, const unsigned char *source); }; @@ -122,6 +123,11 @@ int cCardClientCommon::RecvMsg(unsigned char *data, int len, int to) return n; } +bool cCardClientCommon::Immediate(void) +{ + return emmAllowed && logReply && cCardClient::Immediate(); +} + bool cCardClientCommon::Init(const char *config) { cMutexLock lock(this); @@ -130,7 +136,7 @@ bool cCardClientCommon::Init(const char *config) if(ParseStdConfig(config,&num) && ParseUserConfig(config,&num) && (!doAES || ParseKeyConfig(config,&num))) { - return (emmAllowed && logReply && Immediate()) ? Login() : true; + return true; } return false; } @@ -321,11 +327,10 @@ cCardClientCardd::cCardClientCardd(const char *Name) class cCardClientBuffy : public cCardClientCommon { private: unsigned short CAIDs[MAX_CAIDS], numCAIDs; -protected: - virtual bool Login(void); public: cCardClientBuffy(const char *Name); virtual bool Init(const char *config); + virtual bool Login(void); virtual bool CanHandle(unsigned short SysId); }; @@ -338,10 +343,7 @@ cCardClientBuffy::cCardClientBuffy(const char *Name) bool cCardClientBuffy::Init(const char *config) { cMutexLock lock(this); - if(cCardClientCommon::Init(config)) { - return Immediate() ? Login() : true; - } - return false; + return cCardClientCommon::Init(config); } bool cCardClientBuffy::CanHandle(unsigned short SysId) @@ -431,7 +433,6 @@ protected: unsigned char Dx[8]; int lastEmmReq; // - virtual bool Login(void); bool ParseUserConfig(const char *config, int *num); bool SendBlock(struct CmdBlock *cb, int datalen); int RecvBlock(struct CmdBlock *cb, int maxlen, int to); @@ -440,6 +441,7 @@ protected: public: cCardClientCamd35(const char *Name); virtual bool Init(const char *config); + virtual bool Login(void); virtual bool ProcessECM(const cEcmInfo *ecm, const unsigned char *data, unsigned char *cw, int cardnum); virtual bool ProcessEMM(int caSys, const unsigned char *data); }; diff --git a/systems/cardclient/cc.c b/systems/cardclient/cc.c index 3532e08..7e2909e 100644 --- a/systems/cardclient/cc.c +++ b/systems/cardclient/cc.c @@ -285,6 +285,7 @@ bool cSystemLinkCardClient::ParseLinePlain(const char *line) if(cc->Init(&line[num])) { Add(cc); PRINTF(L_CC_CORE,"client '%s' ready",cc->Name()); + if(cc->Immediate()) cc->Login(); return true; } else { diff --git a/systems/cardclient/cc.h b/systems/cardclient/cc.h index 1709546..645c46d 100644 --- a/systems/cardclient/cc.h +++ b/systems/cardclient/cc.h @@ -70,13 +70,13 @@ protected: bool ParseStdConfig(const char *config, int *num=0); virtual bool SendMsg(const unsigned char *data, int len); virtual int RecvMsg(unsigned char *data, int len, int to=-1); - virtual bool Login(void) { return false; } virtual void Logout(void); - bool Immediate(void); void CaidsChanged(void); public: cCardClient(const char *Name); virtual bool Init(const char *config)=0; + virtual bool Login(void)=0; + virtual bool Immediate(void); virtual bool CanHandle(unsigned short SysId); virtual bool ProcessECM(const cEcmInfo *ecm, const unsigned char *data, unsigned char *cw, int cardnum)=0; virtual bool ProcessEMM(int caSys, const unsigned char *data) { return false; } diff --git a/systems/cardclient/cccam.c b/systems/cardclient/cccam.c index 091729f..9f5cb52 100644 --- a/systems/cardclient/cccam.c +++ b/systems/cardclient/cccam.c @@ -168,12 +168,12 @@ private: int failedcw; char *socketpath; protected: - virtual bool Login(void); virtual void Action(void); public: cCardClientCCcam(const char *Name); ~cCardClientCCcam(); virtual bool Init(const char *CfgDir); + virtual bool Login(void); virtual bool ProcessECM(const cEcmInfo *ecm, const unsigned char *data, unsigned char *Cw, int cardnum); }; @@ -205,7 +205,7 @@ bool cCardClientCCcam::Init(const char *config) PRINTF(L_CC_CORE,"%s: socket=%s",name,path); socketpath=strdup(path); for(int i=0; i<4; i++) card[i].Setup(i,socketpath); - return Immediate() ? Login() : true; + return true; } bool cCardClientCCcam::Login(void) diff --git a/systems/cardclient/cccam2.c b/systems/cardclient/cccam2.c index 617ba27..e724937 100644 --- a/systems/cardclient/cccam2.c +++ b/systems/cardclient/cccam2.c @@ -545,13 +545,13 @@ private: int CryptRecv(unsigned char *data, int len, int to=-1); bool CryptSend(const unsigned char *data, int len); protected: - virtual bool Login(void); virtual void Logout(void); virtual void Action(void); public: cCardClientCCcam2(const char *Name); ~cCardClientCCcam2(); virtual bool Init(const char *CfgDir); + virtual bool Login(void); virtual bool CanHandle(unsigned short SysId); virtual bool ProcessECM(const cEcmInfo *ecm, const unsigned char *data, unsigned char *Cw, int cardnum); virtual bool ProcessEMM(int caSys, const unsigned char *data); @@ -743,7 +743,7 @@ bool cCardClientCCcam2::Init(const char *config) for(unsigned int i=0; i