浏览代码

Fix network list API call.

Adam Ierymenko 8 年之前
父节点
当前提交
a78d7311a6
共有 2 个文件被更改,包括 20 次插入12 次删除
  1. 17 11
      controller/EmbeddedNetworkController.cpp
  2. 3 1
      controller/JSONDB.cpp

+ 17 - 11
controller/EmbeddedNetworkController.cpp

@@ -1019,16 +1019,22 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpGET(
 			}
 		} else if (path.size() == 1) {
 
-			/*
-			std::vector<std::string> networks(OSUtils::listSubdirectories((_path + ZT_PATH_SEPARATOR_S + "network").c_str()));
-			for(auto i(networks.begin());i!=networks.end();++i) {
-				if (i->length() == 16) {
-					responseBody.append((responseBody.length() == 1) ? "\"" : ",\"");
-					responseBody.append(*i);
-					responseBody.append("\"");
-				}
+			std::set<std::string> networkIds;
+			{
+				Mutex::Lock _l(_db_m);
+				_db.filter("network/",120000,[&networkIds](const std::string &n,const json &obj) {
+					if (n.length() == (16 + 8))
+						networkIds.insert(n.substr(8));
+					return true; // do not delete
+				});
+			}
+
+			responseBody.push_back('[');
+			for(std::set<std::string>::iterator i(networkIds.begin());i!=networkIds.end();++i) {
+				responseBody.append((responseBody.length() == 1) ? "\"" : ",\"");
+				responseBody.append(*i);
+				responseBody.append("\"");
 			}
-			*/
 			responseBody.push_back(']');
 			responseContentType = "application/json";
 			return 200;
@@ -1147,7 +1153,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
 							if (tags.is_array()) {
 								std::map<uint64_t,uint64_t> mtags;
 								for(unsigned long i=0;i<tags.size();++i) {
-									auto tag = tags[i];
+									json &tag = tags[i];
 									if ((tag.is_array())&&(tag.size() == 2))
 										mtags[_jI(tag[0],0ULL) & 0xffffffffULL] = _jI(tag[1],0ULL) & 0xffffffffULL;
 								}
@@ -1211,7 +1217,7 @@ unsigned int EmbeddedNetworkController::handleControlPlaneHttpPOST(
 					json hops = b["hops"];
 					if (hops.is_array()) {
 						for(unsigned long i=0;i<hops.size();++i) {
-							auto hops2 = hops[i];
+							json &hops2 = hops[i];
 							if (hops2.is_array()) {
 								for(unsigned long j=0;j<hops2.size();++j) {
 									std::string s = hops2[j];

+ 3 - 1
controller/JSONDB.cpp

@@ -119,7 +119,9 @@ void JSONDB::_reload(const std::string &p)
 			if (ZT_PATH_SEPARATOR != '/') std::replace(n.begin(),n.end(),ZT_PATH_SEPARATOR,'/');
 			if ((n.length() > 0)&&(n[n.length() - 1] != '/')) n.push_back('/');
 			n.append(li->first);
-			this->get(n,0); // causes load and cache or update
+			if ((n.length() > 5)&&(n.substr(n.length() - 5) == ".json")) {
+				this->get(n.substr(0,n.length() - 5),0); // causes load and cache or update
+			}
 		} else if (li->second == 'd') {
 			this->_reload(p + ZT_PATH_SEPARATOR + li->first);
 		}