summaryrefslogtreecommitdiff
path: root/node
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2017-03-17 13:55:26 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2017-03-17 13:55:26 -0700
commitc6a39ed927161736e44aeaa67c6783024c1fb86a (patch)
tree5f92551e3b4cbc58409c8daaca0755c75c61fa6e /node
parent0daff26fba640f2ef167ad66974dc1c4a6c79c01 (diff)
downloadinfinitytier-c6a39ed927161736e44aeaa67c6783024c1fb86a.tar.gz
infinitytier-c6a39ed927161736e44aeaa67c6783024c1fb86a.zip
Fixes for possible ARM issues, cleanup, fix for spurious meaningless exceptions on NETWORK_CONFIG_REQUEST
Diffstat (limited to 'node')
-rw-r--r--node/Dictionary.hpp25
-rw-r--r--node/IncomingPacket.cpp6
-rw-r--r--node/Network.cpp8
3 files changed, 30 insertions, 9 deletions
diff --git a/node/Dictionary.hpp b/node/Dictionary.hpp
index 15ab9ce3..fa9e2883 100644
--- a/node/Dictionary.hpp
+++ b/node/Dictionary.hpp
@@ -61,15 +61,23 @@ public:
Dictionary(const char *s)
{
- Utils::scopy(_d,sizeof(_d),s);
+ if (s) {
+ Utils::scopy(_d,sizeof(_d),s);
+ } else {
+ _d[0] = (char)0;
+ }
}
Dictionary(const char *s,unsigned int len)
{
- if (len > (C-1))
- len = C-1;
- memcpy(_d,s,len);
- _d[len] = (char)0;
+ if (s) {
+ if (len > (C-1))
+ len = C-1;
+ memcpy(_d,s,len);
+ _d[len] = (char)0;
+ } else {
+ _d[0] = (char)0;
+ }
}
Dictionary(const Dictionary &d)
@@ -91,7 +99,12 @@ public:
*/
inline bool load(const char *s)
{
- return Utils::scopy(_d,sizeof(_d),s);
+ if (s) {
+ return Utils::scopy(_d,sizeof(_d),s);
+ } else {
+ _d[0] = (char)0;
+ return true;
+ }
}
/**
diff --git a/node/IncomingPacket.cpp b/node/IncomingPacket.cpp
index 800985dc..ac4ae377 100644
--- a/node/IncomingPacket.cpp
+++ b/node/IncomingPacket.cpp
@@ -836,7 +836,7 @@ bool IncomingPacket::_doNETWORK_CREDENTIALS(const RuntimeEnvironment *RR,const S
bool trustEstablished = false;
unsigned int p = ZT_PACKET_IDX_PAYLOAD;
- while ((p < size())&&((*this)[p])) {
+ while ((p < size())&&((*this)[p] != 0)) {
p += com.deserialize(*this,p);
if (com) {
const SharedPtr<Network> network(RR->node->network(com.networkId()));
@@ -953,8 +953,8 @@ bool IncomingPacket::_doNETWORK_CONFIG_REQUEST(const RuntimeEnvironment *RR,cons
const uint64_t requestPacketId = packetId();
if (RR->localNetworkController) {
- const unsigned int metaDataLength = at<uint16_t>(ZT_PROTO_VERB_NETWORK_CONFIG_REQUEST_IDX_DICT_LEN);
- const char *metaDataBytes = (const char *)field(ZT_PROTO_VERB_NETWORK_CONFIG_REQUEST_IDX_DICT,metaDataLength);
+ const unsigned int metaDataLength = (ZT_PROTO_VERB_NETWORK_CONFIG_REQUEST_IDX_DICT_LEN <= size()) ? at<uint16_t>(ZT_PROTO_VERB_NETWORK_CONFIG_REQUEST_IDX_DICT_LEN) : 0;
+ const char *metaDataBytes = (metaDataLength != 0) ? (const char *)field(ZT_PROTO_VERB_NETWORK_CONFIG_REQUEST_IDX_DICT,metaDataLength) : (const char *)0;
const Dictionary<ZT_NETWORKCONFIG_METADATA_DICT_CAPACITY> metaData(metaDataBytes,metaDataLength);
RR->localNetworkController->request(nwid,(hopCount > 0) ? InetAddress() : _path->address(),requestPacketId,peer->identity(),metaData);
} else {
diff --git a/node/Network.cpp b/node/Network.cpp
index dd812cab..92ca67ab 100644
--- a/node/Network.cpp
+++ b/node/Network.cpp
@@ -1517,6 +1517,10 @@ void Network::_sendUpdatesToMembers(const MulticastGroup *const newMulticastGrou
Packet outp(*a,RR->identity.address(),Packet::VERB_NETWORK_CREDENTIALS);
_config.com.serialize(outp);
outp.append((uint8_t)0x00);
+ outp.append((uint16_t)0); // no capabilities
+ outp.append((uint16_t)0); // no tags
+ outp.append((uint16_t)0); // no revocations
+ outp.append((uint16_t)0); // no certificates of ownership
RR->sw->send(outp,true);
}
_announceMulticastGroupsTo(*a,groups);
@@ -1529,6 +1533,10 @@ void Network::_sendUpdatesToMembers(const MulticastGroup *const newMulticastGrou
Packet outp(c,RR->identity.address(),Packet::VERB_NETWORK_CREDENTIALS);
_config.com.serialize(outp);
outp.append((uint8_t)0x00);
+ outp.append((uint16_t)0); // no capabilities
+ outp.append((uint16_t)0); // no tags
+ outp.append((uint16_t)0); // no revocations
+ outp.append((uint16_t)0); // no certificates of ownership
RR->sw->send(outp,true);
}
_announceMulticastGroupsTo(c,groups);