From b90e66f7c7546aaf9c0c8a6bf14cc834f82fa680 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Wed, 15 Jun 2016 15:02:40 -0700 Subject: ManagedRoute, which applies C++ RAII to injected routes. Move RoutingTable to attic. --- node/InetAddress.hpp | 20 +++++++++++++++++++- node/Utils.hpp | 16 +++++++++++----- 2 files changed, 30 insertions(+), 6 deletions(-) (limited to 'node') diff --git a/node/InetAddress.hpp b/node/InetAddress.hpp index b60a5a3a..1d171ba7 100644 --- a/node/InetAddress.hpp +++ b/node/InetAddress.hpp @@ -231,7 +231,6 @@ struct InetAddress : public sockaddr_storage * @param port Port, 0 to 65535 */ inline void setPort(unsigned int port) - throw() { switch(ss_family) { case AF_INET: @@ -243,6 +242,25 @@ struct InetAddress : public sockaddr_storage } } + /** + * @return True if this network/netmask route describes a default route (e.g. 0.0.0.0/0) + */ + inline bool isDefaultRoute() + { + switch(ss_family) { + case AF_INET: + return ( (reinterpret_cast(this)->sin_addr.s_addr == 0) && (reinterpret_cast(this)->sin_port == 0) ); + case AF_INET6: + const uint8_t *ipb = reinterpret_cast(reinterpret_cast(this)->sin6_addr.s6_addr); + for(int i=0;i<16;++i) { + if (ipb[i]) + return false; + } + return (reinterpret_cast(this)->sin6_port == 0); + } + return false; + } + /** * @return ASCII IP/port format representation */ diff --git a/node/Utils.hpp b/node/Utils.hpp index 3f4cc765..04838f1c 100644 --- a/node/Utils.hpp +++ b/node/Utils.hpp @@ -225,18 +225,24 @@ public: } /** - * Perform a safe C string copy + * Perform a safe C string copy, ALWAYS null-terminating the result * - * @param dest Destination buffer - * @param len Length of buffer - * @param src Source string + * This will never ever EVER result in dest[] not being null-terminated + * regardless of any input parameter (other than len==0 which is invalid). + * + * @param dest Destination buffer (must not be NULL) + * @param len Length of dest[] (if zero, false is returned and nothing happens) + * @param src Source string (if NULL, dest will receive a zero-length string and true is returned) * @return True on success, false on overflow (buffer will still be 0-terminated) */ static inline bool scopy(char *dest,unsigned int len,const char *src) - throw() { if (!len) return false; // sanity check + if (!src) { + *dest = (char)0; + return true; + } char *end = dest + len; while ((*dest++ = *src++)) { if (dest == end) { -- cgit v1.2.3