From 3908d210793ba46ac964a076e2fe75ab1e4950b9 Mon Sep 17 00:00:00 2001 From: leslie Date: Mon, 7 Sep 2009 20:35:21 +0800 Subject: [PATCH] cardclient: vitual logout --- systems/cardclient/aroureos.c | 4 ++-- systems/cardclient/camd.c | 8 ++++---- systems/cardclient/cc.c | 9 +++++++-- systems/cardclient/cc.h | 1 + systems/cardclient/cccam.c | 4 ++-- systems/cardclient/cccam2.c | 28 +++++++++++----------------- systems/cardclient/gbox.c | 3 ++- systems/cardclient/newcamd.c | 5 +++-- systems/cardclient/radegast.c | 4 ++-- 9 files changed, 34 insertions(+), 32 deletions(-) diff --git a/systems/cardclient/aroureos.c b/systems/cardclient/aroureos.c index 60da8a5..59eddd3 100644 --- a/systems/cardclient/aroureos.c +++ b/systems/cardclient/aroureos.c @@ -65,7 +65,7 @@ bool cCardClientAroureos::ParseCardConfig(const char *config, int *num) bool cCardClientAroureos::Init(const char *config) { cMutexLock lock(this); - so.Disconnect(); + Logout(); int num=0; return ParseStdConfig(config,&num) && ParseCardConfig(config,&num); @@ -73,7 +73,7 @@ bool cCardClientAroureos::Init(const char *config) bool cCardClientAroureos::Login(void) { - so.Disconnect(); + Logout(); if(!so.Connect(hostname,port)) return false; PRINTF(L_CC_LOGIN,"%s: connected to %s:%d",name,hostname,port); if(!emmAllowed) PRINTF(L_CC_EMM,"%s: EMM disabled from config",name); diff --git a/systems/cardclient/camd.c b/systems/cardclient/camd.c index 22f3c6d..374161d 100644 --- a/systems/cardclient/camd.c +++ b/systems/cardclient/camd.c @@ -125,7 +125,7 @@ int cCardClientCommon::RecvMsg(unsigned char *data, int len, int to) bool cCardClientCommon::Init(const char *config) { cMutexLock lock(this); - so.Disconnect(); + Logout(); int num=0; if(ParseStdConfig(config,&num) && ParseUserConfig(config,&num) && @@ -137,7 +137,7 @@ bool cCardClientCommon::Init(const char *config) bool cCardClientCommon::Login(void) { - so.Disconnect(); + Logout(); if(!so.Connect(hostname,port)) return false; PRINTF(L_CC_LOGIN,"%s: connected to %s:%d (%s)",name,hostname,port,name); emmProcessing=false; @@ -515,14 +515,14 @@ int cCardClientCamd35::RecvBlock(struct CmdBlock *cb, int maxlen, int to) bool cCardClientCamd35::Init(const char *config) { cMutexLock lock(this); - so.Disconnect(); + Logout(); int num=0; return (ParseStdConfig(config,&num) && ParseUserConfig(config,&num)); } bool cCardClientCamd35::Login(void) { - so.Disconnect(); + Logout(); if(!so.Connect(hostname,port)) return false; PRINTF(L_CC_LOGIN,"%s: connected to %s:%d (%s)",name,hostname,port,name); emmProcessing=false; lastEmmReq=0; diff --git a/systems/cardclient/cc.c b/systems/cardclient/cc.c index e0b9a0c..7ae1f91 100644 --- a/systems/cardclient/cc.c +++ b/systems/cardclient/cc.c @@ -101,12 +101,17 @@ bool cCardClient::CanHandle(unsigned short SysId) return false; } +void cCardClient::Logout(void) +{ + so.Disconnect(); +} + bool cCardClient::SendMsg(const unsigned char *data, int len) { if(!so.Connected() && !Login()) return false; if(so.Write(data,len)<0) { PRINTF(L_CC_CORE,"send error. reconnecting...");; - so.Disconnect(); + Logout(); return false; } return true; @@ -118,7 +123,7 @@ int cCardClient::RecvMsg(unsigned char *data, int len, int to) int n=so.Read(data,len,to); if(n<0) { PRINTF(L_CC_CORE,"recv error. reconnecting...");; - so.Disconnect(); + Logout(); } return n; } diff --git a/systems/cardclient/cc.h b/systems/cardclient/cc.h index 06b1372..1709546 100644 --- a/systems/cardclient/cc.h +++ b/systems/cardclient/cc.h @@ -71,6 +71,7 @@ protected: 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: diff --git a/systems/cardclient/cccam.c b/systems/cardclient/cccam.c index f6a0fba..645b2a6 100644 --- a/systems/cardclient/cccam.c +++ b/systems/cardclient/cccam.c @@ -199,6 +199,7 @@ bool cCardClientCCcam::Init(const char *config) cMutexLock lock(this); int num=0; char path[256]; + Logout(); if(!ParseStdConfig(config,&num) || sscanf(&config[num],":%255[^:]",path)!=1) return false; PRINTF(L_CC_CORE,"%s: socket=%s",name,path); @@ -209,8 +210,7 @@ bool cCardClientCCcam::Init(const char *config) bool cCardClientCCcam::Login(void) { - cMutexLock lock(this); - so.Disconnect(); + Logout(); if(!so.Bind("127.0.0.1",port)) return false; so.SetQuietLog(true); PRINTF(L_CC_CCCAM,"Bound to port %d, starting UDP listener",port); diff --git a/systems/cardclient/cccam2.c b/systems/cardclient/cccam2.c index cbbd120..b82ea30 100644 --- a/systems/cardclient/cccam2.c +++ b/systems/cardclient/cccam2.c @@ -442,10 +442,10 @@ private: cMutex cwmutex; cCondVar cwwait; // - void Logout(void); void PacketAnalyzer(const struct CmdHeader *hdr, int length); protected: virtual bool Login(void); + virtual void Logout(void); virtual void Action(void); public: cCardClientCCcam2(const char *Name); @@ -577,6 +577,7 @@ bool cCardClientCCcam2::Init(const char *config) { cMutexLock lock(this); int num=0; + Logout(); if(!ParseStdConfig(config,&num) || sscanf(&config[num],":%20[^:]:%63[^:]",username,password)!=2 ) return false; PRINTF(L_CC_CORE,"%s: username=%s password=%s",name,username,password); @@ -589,7 +590,7 @@ void cCardClientCCcam2::Logout(void) { login=false; Cancel(3); - so.Disconnect(); + cCardClient::Logout(); } bool cCardClientCCcam2::Login(void) @@ -603,9 +604,8 @@ bool cCardClientCCcam2::Login(void) unsigned char buffer[512]; int len; - if((len=so.Read(buffer,16))<0) { + if((len=RecvMsg(buffer,16))<0) { PRINTF(L_CC_CCCAM2,"no welcome from server"); - Logout(); return false; } LDUMP(L_CC_CCCAM2DT,buffer,len,"welcome answer:"); @@ -626,9 +626,8 @@ bool cCardClientCCcam2::Login(void) LDUMP(L_CC_CCCAM2DT,buff2,20,"welcome response:"); encr.Encrypt(buff2,buffer,20); - if(so.Write(buffer,20)<0) { + if(!SendMsg(buffer,20)) { PRINTF(L_CC_CCCAM2,"failed to send welcome response"); - Logout(); return false; } @@ -636,23 +635,20 @@ bool cCardClientCCcam2::Login(void) strcpy((char *)buff2,username); LDUMP(L_CC_CCCAM2DT,buff2,20,"send username:"); encr.Encrypt(buff2,buffer,20); - if(so.Write(buffer,20)<0) { + if(!SendMsg(buffer,20)) { PRINTF(L_CC_CCCAM2,"failed to send username"); - Logout(); return false; } encr.Encrypt((unsigned char *)password,buffer,strlen(password)); encr.Encrypt((unsigned char *)cccamstr,buffer,6); - if(so.Write(buffer,6)<0) { + if(!SendMsg(buffer,6)) { PRINTF(L_CC_CCCAM2,"failed to send password hash"); - Logout(); return false; } - if((len=so.Read(buffer,20))<0) { + if((len=RecvMsg(buffer,20))<0) { PRINTF(L_CC_CCCAM2,"no login answer from server"); - Logout(); return false; } decr.Decrypt(buffer,buffer,len); @@ -675,9 +671,8 @@ bool cCardClientCCcam2::Login(void) memcpy(clt.nodeid,nodeid,8); LDUMP(L_CC_CCCAM2DT,&clt,sizeof(clt),"send clientinfo:"); encr.Encrypt((unsigned char*)&clt,buffer,sizeof(clt)); - if(so.Write(buffer,sizeof(clt))<0) { + if(!SendMsg(buffer,sizeof(clt))) { PRINTF(L_CC_CCCAM2,"failed to send clientinfo"); - Logout(); return false; } login=true; @@ -724,9 +719,8 @@ bool cCardClientCCcam2::ProcessECM(const cEcmInfo *ecm, const unsigned char *dat PRINTF(L_CC_CCCAM2EX,"now try shareid %08x",shareid); LDUMP(L_CC_CCCAM2DT,req,ecm_len,"send ecm:"); encr.Encrypt((unsigned char *)req,netbuff,ecm_len); - if(so.Write(netbuff,ecm_len)<0) { + if(!SendMsg(netbuff,ecm_len)) { PRINTF(L_CC_CCCAM2,"failed so send ecm request"); - Logout(); break; } cwmutex.Lock(); @@ -762,7 +756,7 @@ void cCardClientCCcam2::Action(void) int cnt=0; while(Running() && so.Connected()) { unsigned char recvbuff[1024]; - int len=so.Read(recvbuff+cnt,-(sizeof(recvbuff)-cnt),200); + int len=RecvMsg(recvbuff+cnt,-(sizeof(recvbuff)-cnt),200); if(len>0) { decr.Decrypt(recvbuff+cnt,recvbuff+cnt,len); HEXDUMP(L_CC_CCCAM2DT,recvbuff+cnt,len,"net read: len=%d cnt=%d",len,cnt+len); diff --git a/systems/cardclient/gbox.c b/systems/cardclient/gbox.c index 4e81637..5dcd13d 100644 --- a/systems/cardclient/gbox.c +++ b/systems/cardclient/gbox.c @@ -55,6 +55,7 @@ cCardClientGbox::cCardClientGbox(const char *Name) bool cCardClientGbox::Init(const char *config) { cMutexLock lock(this); + Logout(); int num=0; if(!ParseStdConfig(config,&num)) return false; return Immediate() ? Login() : true; @@ -62,7 +63,7 @@ bool cCardClientGbox::Init(const char *config) bool cCardClientGbox::Login(void) { - so.Disconnect(); + Logout(); if(!so.Bind("127.0.0.1",8003)) return false; return true; } diff --git a/systems/cardclient/newcamd.c b/systems/cardclient/newcamd.c index 029a2ac..306ff10 100644 --- a/systems/cardclient/newcamd.c +++ b/systems/cardclient/newcamd.c @@ -355,6 +355,7 @@ bool cCardClientNewCamd::CanHandle(unsigned short SysId) bool cCardClientNewCamd::Init(const char *config) { cMutexLock lock(this); + Logout(); int num=0; char key[29]; const char *tmp=key; @@ -368,14 +369,14 @@ bool cCardClientNewCamd::Init(const char *config) bool cCardClientNewCamd::Login(void) { - so.Disconnect(); + Logout(); if(!so.Connect(hostname,port)) return false; InitVars(); unsigned char randData[14]; if(so.Read(randData,sizeof(randData))<0) { PRINTF(L_CC_NEWCAMD,"no connect answer from %s:%d",hostname,port); - so.Disconnect(); + Logout(); return false; } diff --git a/systems/cardclient/radegast.c b/systems/cardclient/radegast.c index e41db88..3a71b21 100644 --- a/systems/cardclient/radegast.c +++ b/systems/cardclient/radegast.c @@ -80,7 +80,7 @@ bool cCardClientRadegast::CanHandle(unsigned short SysId) bool cCardClientRadegast::Init(const char *config) { cMutexLock lock(this); - so.Disconnect(); + Logout(); return ParseStdConfig(config) && (Immediate() ? Login() : true); } @@ -170,7 +170,7 @@ int cCardClientRadegast::Recv(unsigned char *buff, int len) bool cCardClientRadegast::Login(void) { - so.Disconnect(); + Logout(); if(!so.Connect(hostname,port)) return false; PRINTF(L_CC_LOGIN,"%s: connected to %s:%d",name,hostname,port); -- 2.39.5