diff --git a/netconf-service/netconf.cpp b/netconf-service/netconf.cpp index 08ff33d2c..d04534311 100644 --- a/netconf-service/netconf.cpp +++ b/netconf-service/netconf.cpp @@ -231,11 +231,23 @@ int main(int argc,char **argv) } } - std::string etherTypeWhitelist; + std::string etherTypeWhitelistOld; { Query q = dbCon->query(); q << "SELECT DISTINCT etherType FROM NetworkEthertypes WHERE Network_id = " << nwid; StoreQueryResult rs = q.store(); + for(unsigned long i=0;i 0) + etherTypeWhitelistOld.push_back(','); + etherTypeWhitelistOld.append(rs[i]["etherType"].c_str()); + } + } + + std::string etherTypeWhitelist; + { + Query q = dbCon->query(); + q << "SELECT DISTINCT LOWER(HEX(etherType)) AS etherType FROM NetworkEthertypes WHERE Network_id = " << nwid; + StoreQueryResult rs = q.store(); for(unsigned long i=0;i 0) etherTypeWhitelist.push_back(','); @@ -251,7 +263,7 @@ int main(int argc,char **argv) netconf["o"] = (isOpen ? "1" : "0"); netconf["name"] = name; netconf["desc"] = desc; - netconf["etherTypes"] = etherTypeWhitelist; // TODO: remove, old name + netconf["etherTypes"] = etherTypeWhitelistOld; // TODO: remove, old name netconf["et"] = etherTypeWhitelist; sprintf(buf,"%llx",(unsigned long long)Utils::now()); netconf["ts"] = buf; diff --git a/node/Network.cpp b/node/Network.cpp index 11e7c455b..bc651661e 100644 --- a/node/Network.cpp +++ b/node/Network.cpp @@ -80,21 +80,15 @@ bool Network::Certificate::qualifyMembership(const Network::Certificate &mc) con // indicates a floating point comparison. Otherwise an integer // comparison occurs. if (deltaField->second.find('.') != std::string::npos) { - double my = strtod(myField->second.c_str(),(char **)0); - double their = strtod(theirField->second.c_str(),(char **)0); - double delta = strtod(deltaField->second.c_str(),(char **)0); + double my = Utils::strToDouble(myField->second.c_str()); + double their = Utils::strToDouble(theirField->second.c_str()); + double delta = Utils::strToDouble(deltaField->second.c_str()); if (fabs(my - their) > delta) return false; } else { -#ifdef __WINDOWS__ - int64_t my = _strtoi64(myField->second.c_str(),(char **)0,10); - int64_t their = _strtoi64(theirField->second.c_str(),(char **)0,10); - int64_t delta = _strtoi64(deltaField->second.c_str(),(char **)0,10); -#else - int64_t my = strtoll(myField->second.c_str(),(char **)0,10); - int64_t their = strtoll(theirField->second.c_str(),(char **)0,10); - int64_t delta = strtoll(deltaField->second.c_str(),(char **)0,10); -#endif + uint64_t my = Utils::hexStrToU64(myField->second.c_str()); + uint64_t their = Utils::hexStrToU64(theirField->second.c_str()); + uint64_t delta = Utils::hexStrToU64(deltaField->second.c_str()); if (my > their) { if ((my - their) > delta) return false; diff --git a/node/Network.hpp b/node/Network.hpp index 6340c0495..6e79705d5 100644 --- a/node/Network.hpp +++ b/node/Network.hpp @@ -91,49 +91,6 @@ public: Certificate(const std::string &s) : Dictionary(s) {} inline std::string toString() const { return Dictionary::toString(); } - inline void setNetworkId(uint64_t id) - { - char buf[32]; - Utils::snprintf(buf,sizeof(buf),"%.16llx",(unsigned long long)id); - (*this)["nwid"] = buf; - } - - inline uint64_t networkId() const - throw(std::invalid_argument) - { -#ifdef __WINDOWS__ - return _strtoui64(get("nwid").c_str(),(char **)0,16); -#else - return strtoull(get("nwid").c_str(),(char **)0,16); -#endif - } - - inline void setPeerAddress(Address &a) - { - (*this)["peer"] = a.toString(); - } - - inline Address peerAddress() const - throw(std::invalid_argument) - { - return Address(get("peer")); - } - - /** - * Set the timestamp and timestamp max-delta - * - * @param ts Timestamp in ms since epoch - * @param maxDelta Maximum difference between two peers on the same network - */ - inline void setTimestamp(uint64_t ts,uint64_t maxDelta) - { - char foo[32]; - Utils::snprintf(foo,sizeof(foo),"%llu",(unsigned long long)ts); - (*this)["ts"] = foo; - Utils::snprintf(foo,sizeof(foo),"%llu",(unsigned long long)maxDelta); - (*this)["~ts"] = foo; - } - /** * Sign this certificate * @@ -381,7 +338,7 @@ public: if (!Utils::scopy(tmp,sizeof(tmp),get("et","").c_str())) return et; // sanity check, packet can't really be that big for(char *f=Utils::stok(tmp,",",&saveptr);(f);f=Utils::stok((char *)0,",",&saveptr)) { - unsigned int t = Utils::strToUInt(f); + unsigned int t = Utils::hexStrToUInt(f); if (t) et.insert(t); }