mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-06 12:33:44 +02:00
Remove "members" from Network record and instead enumerate members via specific query to /network/nwid/member sub-path. More RESTful, scalable, and compatible with how OnePoint code works.
This commit is contained in:
parent
b343eac10d
commit
a061aa3d87
2 changed files with 124 additions and 114 deletions
|
@ -1278,7 +1278,13 @@ unsigned int SqliteNetworkController::_doCPGet(
|
||||||
Utils::snprintf(nwids,sizeof(nwids),"%.16llx",(unsigned long long)nwid);
|
Utils::snprintf(nwids,sizeof(nwids),"%.16llx",(unsigned long long)nwid);
|
||||||
|
|
||||||
if (path.size() >= 3) {
|
if (path.size() >= 3) {
|
||||||
if ((path.size() == 4)&&(path[2] == "member")&&(path[3].length() == 10)) {
|
// /network/<nwid>/...
|
||||||
|
|
||||||
|
if (path[2] == "member") {
|
||||||
|
|
||||||
|
if (path.size() >= 4) {
|
||||||
|
// Get specific member info
|
||||||
|
|
||||||
uint64_t address = Utils::hexStrToU64(path[3].c_str());
|
uint64_t address = Utils::hexStrToU64(path[3].c_str());
|
||||||
char addrs[24];
|
char addrs[24];
|
||||||
Utils::snprintf(addrs,sizeof(addrs),"%.10llx",address);
|
Utils::snprintf(addrs,sizeof(addrs),"%.10llx",address);
|
||||||
|
@ -1382,7 +1388,26 @@ unsigned int SqliteNetworkController::_doCPGet(
|
||||||
responseContentType = "application/json";
|
responseContentType = "application/json";
|
||||||
return 200;
|
return 200;
|
||||||
} // else 404
|
} // else 404
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// List members
|
||||||
|
|
||||||
|
sqlite3_reset(_sListNetworkMembers);
|
||||||
|
sqlite3_bind_text(_sListNetworkMembers,1,nwids,16,SQLITE_STATIC);
|
||||||
|
while (sqlite3_step(_sListNetworkMembers) == SQLITE_ROW) {
|
||||||
|
responseBody.push_back((responseBody.length()) ? ',' : '[');
|
||||||
|
responseBody.push_back('"');
|
||||||
|
responseBody.append((const char *)sqlite3_column_text(_sListNetworkMembers,0));
|
||||||
|
responseBody.push_back('"');
|
||||||
|
}
|
||||||
|
responseBody.push_back(']');
|
||||||
|
responseContentType = "application/json";
|
||||||
|
return 200;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
} // else 404
|
} // else 404
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// get network info
|
// get network info
|
||||||
sqlite3_reset(_sGetNetworkById);
|
sqlite3_reset(_sGetNetworkById);
|
||||||
|
@ -1402,7 +1427,7 @@ unsigned int SqliteNetworkController::_doCPGet(
|
||||||
"\t\"creationTime\": %llu,\n"
|
"\t\"creationTime\": %llu,\n"
|
||||||
"\t\"revision\": %llu,\n"
|
"\t\"revision\": %llu,\n"
|
||||||
"\t\"memberRevisionCounter\": %llu,\n"
|
"\t\"memberRevisionCounter\": %llu,\n"
|
||||||
"\t\"members\": [",
|
"\t\"relays\": [",
|
||||||
nwids,
|
nwids,
|
||||||
_instanceId.c_str(),
|
_instanceId.c_str(),
|
||||||
_jsonEscape((const char *)sqlite3_column_text(_sGetNetworkById,0)).c_str(),
|
_jsonEscape((const char *)sqlite3_column_text(_sGetNetworkById,0)).c_str(),
|
||||||
|
@ -1417,20 +1442,6 @@ unsigned int SqliteNetworkController::_doCPGet(
|
||||||
(unsigned long long)sqlite3_column_int64(_sGetNetworkById,9));
|
(unsigned long long)sqlite3_column_int64(_sGetNetworkById,9));
|
||||||
responseBody = json;
|
responseBody = json;
|
||||||
|
|
||||||
sqlite3_reset(_sListNetworkMembers);
|
|
||||||
sqlite3_bind_text(_sListNetworkMembers,1,nwids,16,SQLITE_STATIC);
|
|
||||||
bool firstMember = true;
|
|
||||||
while (sqlite3_step(_sListNetworkMembers) == SQLITE_ROW) {
|
|
||||||
if (!firstMember)
|
|
||||||
responseBody.push_back(',');
|
|
||||||
responseBody.push_back('"');
|
|
||||||
responseBody.append((const char *)sqlite3_column_text(_sListNetworkMembers,0));
|
|
||||||
responseBody.push_back('"');
|
|
||||||
firstMember = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
responseBody.append("],\n\t\"relays\": [");
|
|
||||||
|
|
||||||
sqlite3_reset(_sGetRelays);
|
sqlite3_reset(_sGetRelays);
|
||||||
sqlite3_bind_text(_sGetRelays,1,nwids,16,SQLITE_STATIC);
|
sqlite3_bind_text(_sGetRelays,1,nwids,16,SQLITE_STATIC);
|
||||||
bool firstRelay = true;
|
bool firstRelay = true;
|
||||||
|
|
|
@ -173,7 +173,6 @@ To create a new network with a random last six digits safely and atomically, you
|
||||||
<tr><td>creationTime</td><td>integer</td><td>Time network was created in ms since epoch</td><td>no</td></tr>
|
<tr><td>creationTime</td><td>integer</td><td>Time network was created in ms since epoch</td><td>no</td></tr>
|
||||||
<tr><td>revision</td><td>integer</td><td>Network config revision number</td><td>no</td></tr>
|
<tr><td>revision</td><td>integer</td><td>Network config revision number</td><td>no</td></tr>
|
||||||
<tr><td>memberRevisionCounter</td><td>integer</td><td>Current value of network revision counter (incremented after every member add or revision)</td><td>no</td></tr>
|
<tr><td>memberRevisionCounter</td><td>integer</td><td>Current value of network revision counter (incremented after every member add or revision)</td><td>no</td></tr>
|
||||||
<tr><td>members</td><td>[string]</td><td>Array of ZeroTier addresses of network members</td><td>no</td></tr>
|
|
||||||
<tr><td>relays</td><td>[object]</td><td>Array of network-specific relay nodes (see below)</td><td>yes</td></tr>
|
<tr><td>relays</td><td>[object]</td><td>Array of network-specific relay nodes (see below)</td><td>yes</td></tr>
|
||||||
<tr><td>ipLocalRoutes</td><td>[string]</td><td>Array of IP network/netmask entries corresponding to networks routed directly via this interface (e.g. 10.0.0.0/8 to route 10.0.0.0 via this interface)</td></tr>
|
<tr><td>ipLocalRoutes</td><td>[string]</td><td>Array of IP network/netmask entries corresponding to networks routed directly via this interface (e.g. 10.0.0.0/8 to route 10.0.0.0 via this interface)</td></tr>
|
||||||
<tr><td>ipAssignmentPools</td><td>[object]</td><td>Array of IP auto-assignment pools for 'zt' assignment mode</td><td>yes</td></tr>
|
<tr><td>ipAssignmentPools</td><td>[object]</td><td>Array of IP auto-assignment pools for 'zt' assignment mode</td><td>yes</td></tr>
|
||||||
|
|
Loading…
Add table
Reference in a new issue