summaryrefslogtreecommitdiff
path: root/controller
diff options
context:
space:
mode:
authorAdam Ierymenko <adam.ierymenko@gmail.com>2015-05-16 13:42:53 -0700
committerAdam Ierymenko <adam.ierymenko@gmail.com>2015-05-16 13:42:53 -0700
commit0bb92715f4f25cce00abeead44f07ba17ff7a529 (patch)
treeade1c297b52ad9f69fccbeef8a753d0ea40e76d4 /controller
parent78769900a910326d799a581cc914ba282b59de25 (diff)
downloadinfinitytier-0bb92715f4f25cce00abeead44f07ba17ff7a529.tar.gz
infinitytier-0bb92715f4f25cce00abeead44f07ba17ff7a529.zip
DELETE function in network controller JSON API, and a newIdentity convenience request in ControlPlane for scripted testing.
Diffstat (limited to 'controller')
-rw-r--r--controller/SqliteNetworkController.cpp43
-rw-r--r--controller/SqliteNetworkController.hpp2
2 files changed, 45 insertions, 0 deletions
diff --git a/controller/SqliteNetworkController.cpp b/controller/SqliteNetworkController.cpp
index 16f8e5e9..92b8c32c 100644
--- a/controller/SqliteNetworkController.cpp
+++ b/controller/SqliteNetworkController.cpp
@@ -180,6 +180,8 @@ SqliteNetworkController::SqliteNetworkController(const char *dbPath) :
||(sqlite3_prepare_v2(_db,"DELETE FROM Rule WHERE networkId = ?",-1,&_sDeleteRulesForNetwork,(const char **)0) != SQLITE_OK)
||(sqlite3_prepare_v2(_db,"INSERT INTO IpAssignmentPool (networkId,ipNetwork,ipNetmaskBits,ipVersion) VALUES (?,?,?,?)",-1,&_sCreateIpAssignmentPool,(const char **)0) != SQLITE_OK)
||(sqlite3_prepare_v2(_db,"UPDATE Member SET ? = ? WHERE rowid = ?",-1,&_sUpdateMemberField,(const char **)0) != SQLITE_OK)
+ ||(sqlite3_prepare_v2(_db,"DELETE FROM Member WHERE networkId = ? AND nodeId = ?",-1,&_sDeleteMember,(const char **)0) != SQLITE_OK)
+ ||(sqlite3_prepare_v2(_db,"DELETE FROM IpAssignment WHERE networkId = ?; DELETE FROM IpAssignmentPool WHERE networkId = ?; DELETE FROM Member WHERE networkId = ?; DELETE FROM MulticastRate WHERE networkId = ?; DELETE FROM Relay WHERE networkId = ?; DELETE FROM Rule WHERE networkId = ?; DELETE FROM Network WHERE id = ?;",-1,&_sDeleteNetworkAndRelated,(const char **)0) != SQLITE_OK)
) {
sqlite3_close(_db);
throw std::runtime_error("SqliteNetworkController unable to initialize one or more prepared statements");
@@ -223,6 +225,7 @@ SqliteNetworkController::~SqliteNetworkController()
sqlite3_finalize(_sDeleteRulesForNetwork);
sqlite3_finalize(_sCreateIpAssignmentPool);
sqlite3_finalize(_sUpdateMemberField);
+ sqlite3_finalize(_sDeleteNetworkAndRelated);
sqlite3_close(_db);
}
}
@@ -1214,6 +1217,46 @@ unsigned int SqliteNetworkController::handleControlPlaneHttpDELETE(
return 404;
Mutex::Lock _l(_lock);
+ if (path[0] == "network") {
+
+ if ((path.size() >= 2)&&(path[1].length() == 16)) {
+ uint64_t nwid = Utils::hexStrToU64(path[1].c_str());
+ char nwids[24];
+ Utils::snprintf(nwids,sizeof(nwids),"%.16llx",(unsigned long long)nwid);
+
+ if (path.size() >= 3) {
+
+ if ((path.size() == 4)&&(path[2] == "member")&&(path[3].length() == 10)) {
+ uint64_t address = Utils::hexStrToU64(path[3].c_str());
+ char addrs[24];
+ Utils::snprintf(addrs,sizeof(addrs),"%.10llx",address);
+
+ sqlite3_reset(_sDeleteIpAllocations);
+ sqlite3_bind_text(_sDeleteIpAllocations,1,nwids,16,SQLITE_STATIC);
+ sqlite3_bind_text(_sDeleteIpAllocations,2,addrs,10,SQLITE_STATIC);
+ if (sqlite3_step(_sDeleteIpAllocations) == SQLITE_DONE) {
+ sqlite3_reset(_sDeleteMember);
+ sqlite3_bind_text(_sDeleteMember,1,nwids,16,SQLITE_STATIC);
+ sqlite3_bind_text(_sDeleteMember,2,addrs,10,SQLITE_STATIC);
+ if (sqlite3_step(_sDeleteMember) != SQLITE_DONE)
+ return 500;
+ } else return 500;
+
+ return 200;
+ }
+
+ } else {
+
+ sqlite3_reset(_sDeleteNetworkAndRelated);
+ for(int i=1;i<=7;++i)
+ sqlite3_bind_text(_sDeleteNetworkAndRelated,i,nwids,16,SQLITE_STATIC);
+ return ((sqlite3_step(_sDeleteNetworkAndRelated) == SQLITE_DONE) ? 200 : 500);
+
+ }
+ } // else 404
+
+ } // else 404
+
return 404;
}
diff --git a/controller/SqliteNetworkController.hpp b/controller/SqliteNetworkController.hpp
index d2fba0b6..c5d4c51a 100644
--- a/controller/SqliteNetworkController.hpp
+++ b/controller/SqliteNetworkController.hpp
@@ -120,6 +120,8 @@ private:
sqlite3_stmt *_sDeleteRulesForNetwork;
sqlite3_stmt *_sCreateIpAssignmentPool;
sqlite3_stmt *_sUpdateMemberField;
+ sqlite3_stmt *_sDeleteMember;
+ sqlite3_stmt *_sDeleteNetworkAndRelated;
Mutex _lock;
};