#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW
#endif
+#include <ctime>
// ------------------------------------------
void PCPStream::init(GnuID &rid)
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){
//int error;
GnuIDList routeList;
GnuID remoteID;
-
};
#endif
bcstClap = 0x00000001
};
+ // PCP broadcast flood
+ GnuID lastPCPFromID;
+ time_t lastPCPBcstTime;
+
private:
FW_STATE firewalled;
};
#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
// ------------------------------------------------
#define DEBUG_NEW new(__FILE__, __LINE__)
#define new DEBUG_NEW
#endif
+#include <ctime>
// ------------------------------------------
void PCPStream::init(GnuID &rid)
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){
//int error;
GnuIDList routeList;
GnuID remoteID;
-
};
#endif
bcstClap = 0x00000001
};
+ // PCP broadcast flood
+ GnuID lastPCPFromID;
+ time_t lastPCPBcstTime;
+
private:
FW_STATE firewalled;
};
#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
// ------------------------------------------------