|
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.
|