OSDN Git Service

IM0034 IM0034
authoreru <eru01@users.sourceforge.jp>
Sat, 23 May 2009 13:51:47 +0000 (13:51 +0000)
committereru <eru01@users.sourceforge.jp>
Sat, 23 May 2009 13:51:47 +0000 (13:51 +0000)
PeerCast.root/PeerCast/core/common/pcp.cpp
PeerCast.root/PeerCast/core/common/pcp.h
PeerCast.root/PeerCast/core/common/servmgr.h
PeerCast.root/PeerCast/core/common/version2.h
c:/Git/PeerCast.root/PeerCast/core/common/pcp.cpp
c:/Git/PeerCast.root/PeerCast/core/common/pcp.h
c:/Git/PeerCast.root/PeerCast/core/common/servmgr.h
c:/Git/PeerCast.root/PeerCast/core/common/version2.h

index a7b47fb..1b0b66a 100644 (file)
@@ -25,6 +25,7 @@
 #define DEBUG_NEW new(__FILE__, __LINE__)
 #define new DEBUG_NEW
 #endif
+#include <ctime>
 
 // ------------------------------------------
 void PCPStream::init(GnuID &rid)
@@ -802,6 +803,22 @@ int PCPStream::readBroadcastAtoms(AtomStream &atom,int numc,BroadcastState &bcs)
        char tmp[64];
        bcs.chanID.toStr(tmp);
 
+       // Broadcast flood
+       if (servMgr->lastPCPFromID.isSame(fromID)
+               && time(NULL) - servMgr->lastPCPBcstTime < 3)
+       {
+               memcpy(servMgr->lastPCPFromID.id, fromID.id, 16);
+               servMgr->lastPCPBcstTime = time(NULL);
+               LOG_DEBUG("PCP bcst reject: group=%d, hops=%d, ver=%d(%c%c%04d), from=%s, dest=%s ttl=%d",
+                       bcs.group,bcs.numHops,ver,ver_ex_prefix[0],ver_ex_prefix[1],ver_ex_number,fromStr,destStr,bcs.ttl);
+
+               return r;
+       }
+       memcpy(servMgr->lastPCPFromID.id, fromID.id, 16);
+       servMgr->lastPCPBcstTime = time(NULL);
+
+       servMgr->lastPCPFromID.toStr(destStr);
+
 //     LOG_DEBUG(tmp);
 
        if (ver_ex_number){
index da23723..b4f2bfb 100644 (file)
@@ -267,7 +267,6 @@ public:
        //int   error;
        GnuIDList       routeList;
        GnuID   remoteID;
-
 };
 
 #endif
index 0fdae48..8a9310d 100644 (file)
@@ -449,6 +449,10 @@ public:
                bcstClap                = 0x00000001
        };
 
+       // PCP broadcast flood
+       GnuID lastPCPFromID;
+       time_t lastPCPBcstTime;
+
 private:
        FW_STATE        firewalled;
 };
index a12118d..6e68529 100644 (file)
@@ -44,9 +44,9 @@ extern int version_ex; // PP
 #if 1 /* for VP extend version */
 //#define VERSION_EX 1
 static const char *PCP_CLIENT_VERSION_EX_PREFIX = "IM"; // 2bytes only
-static const int  PCP_CLIENT_VERSION_EX_NUMBER = 33;
-static const char *PCX_AGENTEX = "PeerCast/0.1218(IM0033)";
-static const char *PCX_VERSTRING_EX = "v0.1218(IM0033)";
+static const int  PCP_CLIENT_VERSION_EX_NUMBER = 34;
+static const char *PCX_AGENTEX = "PeerCast/0.1218(IM0034)";
+static const char *PCX_VERSTRING_EX = "v0.1218(IM0034)";
 #endif
 
 // ------------------------------------------------
index a7b47fb..1b0b66a 100644 (file)
@@ -25,6 +25,7 @@
 #define DEBUG_NEW new(__FILE__, __LINE__)
 #define new DEBUG_NEW
 #endif
+#include <ctime>
 
 // ------------------------------------------
 void PCPStream::init(GnuID &rid)
@@ -802,6 +803,22 @@ int PCPStream::readBroadcastAtoms(AtomStream &atom,int numc,BroadcastState &bcs)
        char tmp[64];
        bcs.chanID.toStr(tmp);
 
+       // Broadcast flood
+       if (servMgr->lastPCPFromID.isSame(fromID)
+               && time(NULL) - servMgr->lastPCPBcstTime < 3)
+       {
+               memcpy(servMgr->lastPCPFromID.id, fromID.id, 16);
+               servMgr->lastPCPBcstTime = time(NULL);
+               LOG_DEBUG("PCP bcst reject: group=%d, hops=%d, ver=%d(%c%c%04d), from=%s, dest=%s ttl=%d",
+                       bcs.group,bcs.numHops,ver,ver_ex_prefix[0],ver_ex_prefix[1],ver_ex_number,fromStr,destStr,bcs.ttl);
+
+               return r;
+       }
+       memcpy(servMgr->lastPCPFromID.id, fromID.id, 16);
+       servMgr->lastPCPBcstTime = time(NULL);
+
+       servMgr->lastPCPFromID.toStr(destStr);
+
 //     LOG_DEBUG(tmp);
 
        if (ver_ex_number){
index da23723..b4f2bfb 100644 (file)
@@ -267,7 +267,6 @@ public:
        //int   error;
        GnuIDList       routeList;
        GnuID   remoteID;
-
 };
 
 #endif
index 0fdae48..8a9310d 100644 (file)
@@ -449,6 +449,10 @@ public:
                bcstClap                = 0x00000001
        };
 
+       // PCP broadcast flood
+       GnuID lastPCPFromID;
+       time_t lastPCPBcstTime;
+
 private:
        FW_STATE        firewalled;
 };
index a12118d..6e68529 100644 (file)
@@ -44,9 +44,9 @@ extern int version_ex; // PP
 #if 1 /* for VP extend version */
 //#define VERSION_EX 1
 static const char *PCP_CLIENT_VERSION_EX_PREFIX = "IM"; // 2bytes only
-static const int  PCP_CLIENT_VERSION_EX_NUMBER = 33;
-static const char *PCX_AGENTEX = "PeerCast/0.1218(IM0033)";
-static const char *PCX_VERSTRING_EX = "v0.1218(IM0033)";
+static const int  PCP_CLIENT_VERSION_EX_NUMBER = 34;
+static const char *PCX_AGENTEX = "PeerCast/0.1218(IM0034)";
+static const char *PCX_VERSTRING_EX = "v0.1218(IM0034)";
 #endif
 
 // ------------------------------------------------