From 04e0dfeab0a5d5b2d98f6e0de8e4565d006d5fc9 Mon Sep 17 00:00:00 2001
From: Thulinma <jaron@vietors.com>
Date: Mon, 8 May 2017 15:16:07 +0200
Subject: [PATCH] Added instance ID

---
 src/controller/controller.cpp         | 8 ++++++++
 src/controller/controller_api.cpp     | 1 +
 src/controller/controller_storage.cpp | 1 +
 src/controller/controller_storage.h   | 1 +
 4 files changed, 11 insertions(+)

diff --git a/src/controller/controller.cpp b/src/controller/controller.cpp
index cd88f9b2..0f638c0b 100644
--- a/src/controller/controller.cpp
+++ b/src/controller/controller.cpp
@@ -286,6 +286,14 @@ int main_loop(int argc, char ** argv){
   
   Controller::Log("CONF", "Controller started");
   Controller::conf.activate();//activate early, so threads aren't killed.
+  //Generate instanceId once per boot.
+  if (Controller::instanceId == ""){
+    srand(time(NULL));
+    do{
+      Controller::instanceId += (char)(64 + rand() % 62);
+    }while(Controller::instanceId.size() < 16);
+  }
+  
 
   //start stats thread
   tthread::thread statsThread(Controller::SharedMemStats, &Controller::conf);
diff --git a/src/controller/controller_api.cpp b/src/controller/controller_api.cpp
index 7d0b2105..27a4233a 100644
--- a/src/controller/controller_api.cpp
+++ b/src/controller/controller_api.cpp
@@ -351,6 +351,7 @@ void Controller::handleAPICommands(JSON::Value & Request, JSON::Value & Response
   //sent current configuration, if not minimal or was changed/requested
   if (!Request.isMember("minimal") || Request.isMember("config")){
     Response["config"] = Controller::Storage["config"];
+    Response["config"]["iid"] = instanceId;
     Response["config"]["version"] = PACKAGE_VERSION;
     //add required data to the current unix time to the config, for syncing reasons
     Response["config"]["time"] = Util::epoch();
diff --git a/src/controller/controller_storage.cpp b/src/controller/controller_storage.cpp
index 91fdb35b..0f3d9176 100644
--- a/src/controller/controller_storage.cpp
+++ b/src/controller/controller_storage.cpp
@@ -10,6 +10,7 @@
 
 ///\brief Holds everything unique to the controller.
 namespace Controller {
+  std::string instanceId; /// instanceId (previously uniqId) is set in controller.cpp
 
   Util::Config conf;
   JSON::Value Storage; ///< Global storage of data.
diff --git a/src/controller/controller_storage.h b/src/controller/controller_storage.h
index 868e46cf..1c5994dc 100644
--- a/src/controller/controller_storage.h
+++ b/src/controller/controller_storage.h
@@ -4,6 +4,7 @@
 #include <mist/tinythread.h>
 
 namespace Controller {
+  extern std::string instanceId; ///<global storage of instanceId (previously uniqID) is set in controller.cpp
   extern Util::Config conf;///< Global storage of configuration.
   extern JSON::Value Storage; ///< Global storage of data.
   extern tthread::mutex logMutex;///< Mutex for log thread.