diff options
author | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-07-20 18:24:56 -0400 |
---|---|---|
committer | Adam Ierymenko <adam.ierymenko@gmail.com> | 2013-07-20 18:24:56 -0400 |
commit | b8e9a79d009411525c99b886b7af41bb4c650669 (patch) | |
tree | 64f905c620571a2085b88a3a440b3e6538d70ddc | |
parent | e4e517e9c3ba16076b231d082a179aad8e892d6c (diff) | |
download | infinitytier-b8e9a79d009411525c99b886b7af41bb4c650669.tar.gz infinitytier-b8e9a79d009411525c99b886b7af41bb4c650669.zip |
docs
-rw-r--r-- | node/Multicaster.hpp | 11 | ||||
-rw-r--r-- | node/NodeConfig.cpp | 7 | ||||
-rw-r--r-- | node/Packet.hpp | 2 |
3 files changed, 17 insertions, 3 deletions
diff --git a/node/Multicaster.hpp b/node/Multicaster.hpp index 9c28e1c2..ac89f84b 100644 --- a/node/Multicaster.hpp +++ b/node/Multicaster.hpp @@ -261,7 +261,16 @@ public: bf.set((peers[chosen++] = *i)->address().sum()); // Add a supernode if there are fewer than the desired - // number of recipients. + // number of recipients. Note that we do not use the bloom + // filter to track visits to supernodes, intentionally + // allowing multicasts to ping pong between supernodes. + // Supernodes propagate even messages they've already seen, + // while regular nodes do not. Thus this ping-ponging will + // cause the supernodes to pick new starting points for + // peer to peer graph traversal multiple times. It's a + // simple, stateless way to increase supernode-driven + // propagation of a multicast in the event that peer to + // peer connectivity for its group is sparse. if (chosen < max) { Address avoid[2]; avoid[0] = originalSubmitter; diff --git a/node/NodeConfig.cpp b/node/NodeConfig.cpp index 21ed5188..849d73fc 100644 --- a/node/NodeConfig.cpp +++ b/node/NodeConfig.cpp @@ -219,12 +219,17 @@ bool NodeConfig::decodeControlMessagePacket(const void *key,const void *data,uns void NodeConfig::_CBcontrolPacketHandler(UdpSocket *sock,void *arg,const InetAddress &remoteAddr,const void *data,unsigned int len) { NodeConfig *nc = (NodeConfig *)arg; + const RuntimeEnvironment *_r = nc->_r; + try { unsigned long convId = 0; std::vector<std::string> commands; - if (!decodeControlMessagePacket(nc->_controlSocketKey,data,len,convId,commands)) + if (!decodeControlMessagePacket(nc->_controlSocketKey,data,len,convId,commands)) { + TRACE("control bus packet from %s failed decode, discarded",remoteAddr.toString().c_str()); return; + } + TRACE("control bus packet from %s, contains %d commands",remoteAddr.toString().c_str(),(int)commands.size()); for(std::vector<std::string>::iterator c(commands.begin());c!=commands.end();++c) { std::vector< Buffer<ZT_NODECONFIG_MAX_PACKET_SIZE> > resultPackets(encodeControlMessage(nc->_controlSocketKey,convId,nc->execute(c->c_str()))); diff --git a/node/Packet.hpp b/node/Packet.hpp index a5c450fb..5ccfae45 100644 --- a/node/Packet.hpp +++ b/node/Packet.hpp @@ -449,7 +449,7 @@ public: * <[2] 16-bit length of payload> * <[2] 16-bit length of signature> * <[...] ethernet payload> - * <[...] ECDSA signature> + * <[...] ECDSA signature of SHA-256 hash (see below)> * * The signature is made using the key of the original submitter, and * can be used to authenticate the submitter for security and rate |