From: <arn...@us...> - 2006-10-20 12:35:41
|
Revision: 683 http://svn.sourceforge.net/dcplusplus/?rev=683&view=rev Author: arnetheduck Date: 2006-10-20 05:35:20 -0700 (Fri, 20 Oct 2006) Log Message: ----------- dupe cid detection Modified Paths: -------------- dcplusplus/trunk/client/AdcHub.cpp dcplusplus/trunk/client/AdcHub.h dcplusplus/trunk/client/ShareManager.cpp dcplusplus/trunk/release.cmd Modified: dcplusplus/trunk/client/AdcHub.cpp =================================================================== --- dcplusplus/trunk/client/AdcHub.cpp 2006-10-18 21:36:08 UTC (rev 682) +++ dcplusplus/trunk/client/AdcHub.cpp 2006-10-20 12:35:20 UTC (rev 683) @@ -73,6 +73,16 @@ return i == users.end() ? NULL : i->second; } +OnlineUser* AdcHub::findUser(const CID& aCID) const { + Lock l(cs); + for(SIDMap::const_iterator i = users.begin(); i != users.end(); ++i) { + if(i->second->getUser()->getCID() == aCID) { + return i->second; + } + } + return 0; +} + void AdcHub::putUser(const uint32_t aSID) { OnlineUser* ou = 0; { @@ -112,12 +122,27 @@ string cid; OnlineUser* u = 0; - if(c.getParam("ID", 0, cid)) - u = &getUser(c.getFrom(), CID(cid)); - else if(c.getFrom() == AdcCommand::HUB_SID) + if(c.getParam("ID", 0, cid)) { + u = findUser(CID(cid)); + if(u) { + if(u->getIdentity().getSID() != c.getFrom()) { + // Same CID but different SID not allowed - buggy hub? + string nick; + if(!c.getParam("NI", 0, nick)) { + nick = "[nick unknown]"; + } + fire(ClientListener::StatusMessage(), this, u->getIdentity().getNick() + " (" + u->getIdentity().getSIDString() + + ") has same CID {" + cid + "} as " + nick + " (" + AdcCommand::fromSID(c.getFrom()) + "), ignoring."); + return; + } + } else { + u = &getUser(c.getFrom(), CID(cid)); + } + } else if(c.getFrom() == AdcCommand::HUB_SID) { u = &getUser(c.getFrom(), CID()); - else + } else { u = findUser(c.getFrom()); + } if(!u) { dcdebug("AdcHub::INF Unknown user / no ID\n"); Modified: dcplusplus/trunk/client/AdcHub.h =================================================================== --- dcplusplus/trunk/client/AdcHub.h 2006-10-18 21:36:08 UTC (rev 682) +++ dcplusplus/trunk/client/AdcHub.h 2006-10-20 12:35:20 UTC (rev 683) @@ -84,6 +84,7 @@ OnlineUser& getUser(const uint32_t aSID, const CID& aCID); OnlineUser* findUser(const uint32_t sid) const; + OnlineUser* findUser(const CID& cid) const; void putUser(const uint32_t sid); void clearUsers(); Modified: dcplusplus/trunk/client/ShareManager.cpp =================================================================== --- dcplusplus/trunk/client/ShareManager.cpp 2006-10-18 21:36:08 UTC (rev 682) +++ dcplusplus/trunk/client/ShareManager.cpp 2006-10-20 12:35:20 UTC (rev 683) @@ -223,10 +223,9 @@ throw ShareException(UserConnection::FILE_NOT_AVAILABLE); } - string::size_type i = virtualFile.find('/', 1); if(i == string::npos || i == 1) { - return false; + throw ShareException(UserConnection::FILE_NOT_AVAILABLE); } string virtualName = virtualFile.substr(1, i-1); Modified: dcplusplus/trunk/release.cmd =================================================================== --- dcplusplus/trunk/release.cmd 2006-10-18 21:36:08 UTC (rev 682) +++ dcplusplus/trunk/release.cmd 2006-10-20 12:35:20 UTC (rev 683) @@ -2,7 +2,7 @@ copy /b app\dcplusplus.chm . copy /b app\dcplusplus.pdb . "c:\program files\WinRAR\WinRAR" a -ep -m5 DCPlusPlus-%1.zip dcppboot.xml unicows.dll unicows.pdb dcplusplus.chm dcplusplus.exe dcplusplus.pdb dbghelp.dll changelog.txt Example.xml License.txt GeoIPCountryWhois.csv -"c:\program files\WinRAR\WinRAR" a -m5 DCPlusPlus-%1-src.zip dcppboot.xml bootstrap makedefs.py Makefile.am configure.ac libunicows.lib unicows.dll unicows.pdb yassl\* yassl\certs\* yassl\include\openssl\* yassl\mySTL\* yassl\src\* yassl\include\* yassl\taocrypt\* yassl\taocrypt\src\* yassl\taocrypt\include\* stlport\.keep wtl\.keep help\* zlib\* bzip2\* client\* MakeDefs\* res\* windows\* changelog.txt Example.xml License.txt compile.txt GeoIPCountryWhois.csv *.dsp *.vcproj *.dsw *.sln *.rc extensions.txt doxyfile dcplusplus.nsi +"c:\program files\WinRAR\WinRAR" a -m5 DCPlusPlus-%1-src.zip dcppboot.xml makedefs.py libunicows.lib unicows.dll unicows.pdb yassl\* yassl\certs\* yassl\include\openssl\* yassl\mySTL\* yassl\src\* yassl\include\* yassl\taocrypt\* yassl\taocrypt\src\* yassl\taocrypt\include\* stlport\.keep wtl\.keep help\* zlib\* bzip2\* client\* res\* windows\* changelog.txt Example.xml License.txt compile.txt GeoIPCountryWhois.csv *.vcproj *.sln *.rc extensions.txt doxyfile dcplusplus.nsi del dcplusplus.exe del dcplusplus.pdb del dcplusplus.chm This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |