|  | @@ -53,7 +53,6 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 | 
	
		
			
				|  |  |  		const uint64_t controllerAddressInt = _myId.address().toInt();
 | 
	
		
			
				|  |  |  		_myId.address().toString(controllerAddress);
 | 
	
		
			
				|  |  |  		std::string networksSelectorName("com.zerotier.controller.lfdb:"); networksSelectorName.append(controllerAddress); networksSelectorName.append("/network");
 | 
	
		
			
				|  |  | -		std::string membersSelectorName("com.zerotier.controller.lfdb:"); membersSelectorName.append(controllerAddress); membersSelectorName.append("/member");
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		// LF record masking key is the first 32 bytes of SHA512(controller private key) in hex,
 | 
	
		
			
				|  |  |  		// hiding record values from anything but the controller or someone who has its key.
 | 
	
	
		
			
				|  | @@ -156,7 +155,7 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 | 
	
		
			
				|  |  |  								nlohmann::json newrec,selector0,selector1,selectors;
 | 
	
		
			
				|  |  |  								selector0["Name"] = networksSelectorName;
 | 
	
		
			
				|  |  |  								selector0["Ordinal"] = ns->first;
 | 
	
		
			
				|  |  | -								selector1["Name"] = membersSelectorName;
 | 
	
		
			
				|  |  | +								selector1["Name"] = "member";
 | 
	
		
			
				|  |  |  								selector1["Ordinal"] = ms->first;
 | 
	
		
			
				|  |  |  								selectors.push_back(selector0);
 | 
	
		
			
				|  |  |  								selectors.push_back(selector1);
 | 
	
	
		
			
				|  | @@ -190,16 +189,16 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			try {
 | 
	
		
			
				|  |  |  				std::ostringstream query;
 | 
	
		
			
				|  |  | -				query
 | 
	
		
			
				|  |  | -					<< '{'
 | 
	
		
			
				|  |  | -						<< "\"Ranges\":[{"
 | 
	
		
			
				|  |  | -							<< "\"Name\":\"" << networksSelectorName << "\","
 | 
	
		
			
				|  |  | -							<< "\"Range\":[0,18446744073709551615]"
 | 
	
		
			
				|  |  | -						<< "}],"
 | 
	
		
			
				|  |  | -						<< "\"TimeRange\":[" << timeRangeStart << ",9223372036854775807],"
 | 
	
		
			
				|  |  | -						<< "\"MaskingKey\":\"" << maskingKey << "\","
 | 
	
		
			
				|  |  | -						<< "\"Owners\":[\"" << _lfOwnerPublic << "\"]"
 | 
	
		
			
				|  |  | -					<< '}';
 | 
	
		
			
				|  |  | +				query <<
 | 
	
		
			
				|  |  | +					"{"
 | 
	
		
			
				|  |  | +						"\"Ranges\":[{"
 | 
	
		
			
				|  |  | +							"\"Name\":\"" << networksSelectorName << "\","
 | 
	
		
			
				|  |  | +							"\"Range\":[0,18446744073709551615]"
 | 
	
		
			
				|  |  | +						"}],"
 | 
	
		
			
				|  |  | +						"\"TimeRange\":[" << timeRangeStart << ",9223372036854775807],"
 | 
	
		
			
				|  |  | +						"\"MaskingKey\":\"" << maskingKey << "\","
 | 
	
		
			
				|  |  | +						"\"Owners\":[\"" << _lfOwnerPublic << "\"]"
 | 
	
		
			
				|  |  | +					"}";
 | 
	
		
			
				|  |  |  				auto resp = htcli.Post("/query",query.str(),"application/json");
 | 
	
		
			
				|  |  |  				if (resp) {
 | 
	
		
			
				|  |  |  					if (resp->status == 200) {
 | 
	
	
		
			
				|  | @@ -259,19 +258,19 @@ LFDB::LFDB(const Identity &myId,const char *path,const char *lfOwnerPrivate,cons
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  			try {
 | 
	
		
			
				|  |  |  				std::ostringstream query;
 | 
	
		
			
				|  |  | -				query
 | 
	
		
			
				|  |  | -					<< '{'
 | 
	
		
			
				|  |  | -						<< "\"Ranges\":[{"
 | 
	
		
			
				|  |  | -							<< "\"Name\":\"" << networksSelectorName << "\","
 | 
	
		
			
				|  |  | -							<< "\"Range\":[0,18446744073709551615]"
 | 
	
		
			
				|  |  | -						<< "},{"
 | 
	
		
			
				|  |  | -							<< "\"Name\":\"" << membersSelectorName << "\","
 | 
	
		
			
				|  |  | -							<< "\"Range\":[0,18446744073709551615]"
 | 
	
		
			
				|  |  | -						<< "}],"
 | 
	
		
			
				|  |  | -						<< "\"TimeRange\":[" << timeRangeStart << ",9223372036854775807],"
 | 
	
		
			
				|  |  | -						<< "\"MaskingKey\":\"" << maskingKey << "\","
 | 
	
		
			
				|  |  | -						<< "\"Owners\":[\"" << _lfOwnerPublic << "\"]"
 | 
	
		
			
				|  |  | -					<< '}';
 | 
	
		
			
				|  |  | +				query <<
 | 
	
		
			
				|  |  | +					"{"
 | 
	
		
			
				|  |  | +						"\"Ranges\":[{"
 | 
	
		
			
				|  |  | +							"\"Name\":\"" << networksSelectorName << "\","
 | 
	
		
			
				|  |  | +							"\"Range\":[0,18446744073709551615]"
 | 
	
		
			
				|  |  | +						"},{"
 | 
	
		
			
				|  |  | +							"\"Name\":\"member\","
 | 
	
		
			
				|  |  | +							"\"Range\":[0,18446744073709551615]"
 | 
	
		
			
				|  |  | +						"}],"
 | 
	
		
			
				|  |  | +						"\"TimeRange\":[" << timeRangeStart << ",9223372036854775807],"
 | 
	
		
			
				|  |  | +						"\"MaskingKey\":\"" << maskingKey << "\","
 | 
	
		
			
				|  |  | +						"\"Owners\":[\"" << _lfOwnerPublic << "\"]"
 | 
	
		
			
				|  |  | +					"}";
 | 
	
		
			
				|  |  |  				auto resp = htcli.Post("/query",query.str(),"application/json");
 | 
	
		
			
				|  |  |  				if (resp) {
 | 
	
		
			
				|  |  |  					if (resp->status == 200) {
 |