summaryrefslogtreecommitdiff
path: root/node/Node.cpp
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-08 16:49:21 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-04-08 16:49:21 -0700
commit4d5a6a25d373b395fa7c7c374c2e0d6da7854e46 (patch)
treef3d2ae0ca44d3fbb0f055473ff30c46b2a7c7df8 /node/Node.cpp
parent9d9d0ef12ccb60bda417c6bfed576ae87380e7e4 (diff)
downloadinfinitytier-4d5a6a25d373b395fa7c7c374c2e0d6da7854e46.tar.gz
infinitytier-4d5a6a25d373b395fa7c7c374c2e0d6da7854e46.zip
Add events for packet decode errors, etc., and re-implement TRACE as an event.
Diffstat (limited to 'node/Node.cpp')
-rw-r--r--node/Node.cpp44
1 files changed, 34 insertions, 10 deletions
diff --git a/node/Node.cpp b/node/Node.cpp
index 1f77f727..32b1a2eb 100644
--- a/node/Node.cpp
+++ b/node/Node.cpp
@@ -175,14 +175,10 @@ ZT1_ResultCode Node::processVirtualNetworkFrame(
return rc;
} else _now = now;
- try {
- SharedPtr<Network> nw(network(nwid));
- if (nw)
- RR->sw->onLocalEthernet(nw,MAC(sourceMac),MAC(destMac),etherType,vlanId,frameData,frameLength);
- else return ZT1_RESULT_ERROR_NETWORK_NOT_FOUND;
- } catch ( ... ) {
- return ZT1_RESULT_FATAL_ERROR_INTERNAL;
- }
+ SharedPtr<Network> nw(network(nwid));
+ if (nw)
+ RR->sw->onLocalEthernet(nw,MAC(sourceMac),MAC(destMac),etherType,vlanId,frameData,frameLength);
+ else return ZT1_RESULT_ERROR_NETWORK_NOT_FOUND;
return ZT1_RESULT_OK;
}
@@ -364,10 +360,37 @@ void Node::postNewerVersionIfNewer(unsigned int major,unsigned int minor,unsigne
_newestVersionSeen[0] = major;
_newestVersionSeen[1] = minor;
_newestVersionSeen[2] = rev;
- this->postEvent(ZT1_EVENT_SAW_MORE_RECENT_VERSION);
+ this->postEvent(ZT1_EVENT_SAW_MORE_RECENT_VERSION,(const void *)_newestVersionSeen);
}
}
+#ifdef ZT_TRACE
+void Node::postTrace(const char *module,unsigned int line,const char *fmt,...)
+{
+ static Mutex traceLock;
+
+ va_list ap;
+ char tmp1[1024],tmp2[1024],tmp3[256];
+
+ Mutex::Lock _l(traceLock);
+
+#ifdef __WINDOWS__
+ ctime_s(tmp3,sizeof(tmp3),&now);
+ const char *nowstr = tmp3;
+#else
+ const char *nowstr = ctime_r(&now,tmp3);
+#endif
+
+ va_start(ap,fmt);
+ vsnprintf(tmp2,sizeof(tmp2),fmt,ap);
+ va_end(ap);
+ tmp2[sizeof(tmp2)-1] = (char)0;
+
+ Utils::snprintf(tmp1,sizeof(tmp1),"[%s] %s:%u %s",nowstr,module,line,tmp2);
+ postEvent(ZT1_EVENT_TRACE,tmp1);
+}
+#endif // ZT_TRACE
+
} // namespace ZeroTier
/****************************************************************************/
@@ -421,7 +444,8 @@ enum ZT1_ResultCode ZT1_Node_processWirePacket(
} catch (std::bad_alloc &exc) {
return ZT1_RESULT_FATAL_ERROR_OUT_OF_MEMORY;
} catch ( ... ) {
- return ZT1_RESULT_ERROR_PACKET_INVALID;
+ reinterpret_cast<ZeroTier::Node *>(node)->postEvent(ZT1_EVENT_INVALID_PACKET,(const void *)remoteAddress);
+ return ZT1_RESULT_OK;
}
}