Pārlūkot izejas kodu

WIP: Pass listen port down to Postgres

Grant Limberg 6 gadi atpakaļ
vecāks
revīzija
d98bdb5643

+ 3 - 2
controller/EmbeddedNetworkController.cpp

@@ -456,8 +456,9 @@ static bool _parseRule(json &r,ZT_VirtualNetworkRule &rule)
 
 
 } // anonymous namespace
 } // anonymous namespace
 
 
-EmbeddedNetworkController::EmbeddedNetworkController(Node *node,const char *dbPath) :
+EmbeddedNetworkController::EmbeddedNetworkController(Node *node,const char *dbPath, int listenPort) :
 	_startTime(OSUtils::now()),
 	_startTime(OSUtils::now()),
+	_listenPort(listenPort),
 	_node(node),
 	_node(node),
 	_path(dbPath),
 	_path(dbPath),
 	_sender((NetworkController::Sender *)0)
 	_sender((NetworkController::Sender *)0)
@@ -480,7 +481,7 @@ void EmbeddedNetworkController::init(const Identity &signingId,Sender *sender)
 	_signingIdAddressString = signingId.address().toString(tmp);
 	_signingIdAddressString = signingId.address().toString(tmp);
 #ifdef ZT_CONTROLLER_USE_LIBPQ
 #ifdef ZT_CONTROLLER_USE_LIBPQ
 	if ((_path.length() > 9)&&(_path.substr(0,9) == "postgres:"))
 	if ((_path.length() > 9)&&(_path.substr(0,9) == "postgres:"))
-		_db.reset(new PostgreSQL(this,_signingId,_path.substr(9).c_str()));
+		_db.reset(new PostgreSQL(this,_signingId,_path.substr(9).c_str(), _listenPort));
 	else // else use FileDB after endif
 	else // else use FileDB after endif
 #endif
 #endif
 		_db.reset(new FileDB(this,_signingId,_path.c_str()));
 		_db.reset(new FileDB(this,_signingId,_path.c_str()));

+ 2 - 1
controller/EmbeddedNetworkController.hpp

@@ -59,7 +59,7 @@ public:
 	 * @param node Parent node
 	 * @param node Parent node
 	 * @param dbPath Database path (file path or database credentials)
 	 * @param dbPath Database path (file path or database credentials)
 	 */
 	 */
-	EmbeddedNetworkController(Node *node,const char *dbPath);
+	EmbeddedNetworkController(Node *node,const char *dbPath, int listenPort);
 	virtual ~EmbeddedNetworkController();
 	virtual ~EmbeddedNetworkController();
 
 
 	virtual void init(const Identity &signingId,Sender *sender);
 	virtual void init(const Identity &signingId,Sender *sender);
@@ -141,6 +141,7 @@ private:
 	};
 	};
 
 
 	const int64_t _startTime;
 	const int64_t _startTime;
+	int _listenPort;
 	Node *const _node;
 	Node *const _node;
 	std::string _path;
 	std::string _path;
 	Identity _signingId;
 	Identity _signingId;

+ 2 - 1
controller/PostgreSQL.cpp

@@ -64,12 +64,13 @@ std::string join(const std::vector<std::string> &elements, const char * const se
 
 
 using namespace ZeroTier;
 using namespace ZeroTier;
 
 
-PostgreSQL::PostgreSQL(EmbeddedNetworkController *const nc, const Identity &myId, const char *path)
+PostgreSQL::PostgreSQL(EmbeddedNetworkController *const nc, const Identity &myId, const char *path, int listenPort)
     : DB(nc, myId, path)
     : DB(nc, myId, path)
     , _ready(0)
     , _ready(0)
 	, _connected(1)
 	, _connected(1)
     , _run(1)
     , _run(1)
     , _waitNoticePrinted(false)
     , _waitNoticePrinted(false)
+	, _listenPort(listenPort)
 {
 {
 	_connString = std::string(path) + " application_name=controller_" +_myAddressStr;
 	_connString = std::string(path) + " application_name=controller_" +_myAddressStr;
 
 

+ 3 - 1
controller/PostgreSQL.hpp

@@ -41,7 +41,7 @@ namespace ZeroTier
 class PostgreSQL : public DB
 class PostgreSQL : public DB
 {
 {
 public:
 public:
-    PostgreSQL(EmbeddedNetworkController *const nc, const Identity &myId, const char *path);
+    PostgreSQL(EmbeddedNetworkController *const nc, const Identity &myId, const char *path, int listenPort);
     virtual ~PostgreSQL();
     virtual ~PostgreSQL();
 
 
     virtual bool waitForReady();
     virtual bool waitForReady();
@@ -90,6 +90,8 @@ private:
     mutable std::mutex _readyLock;
     mutable std::mutex _readyLock;
     std::atomic<int> _ready, _connected, _run;
     std::atomic<int> _ready, _connected, _run;
     mutable volatile bool _waitNoticePrinted;
     mutable volatile bool _waitNoticePrinted;
+
+    int _listenPort;
 };
 };
 
 
 }
 }

+ 1 - 1
service/OneService.cpp

@@ -805,7 +805,7 @@ public:
 			OSUtils::rmDashRf((_homePath + ZT_PATH_SEPARATOR_S "iddb.d").c_str());
 			OSUtils::rmDashRf((_homePath + ZT_PATH_SEPARATOR_S "iddb.d").c_str());
 
 
 			// Network controller is now enabled by default for desktop and server
 			// Network controller is now enabled by default for desktop and server
-			_controller = new EmbeddedNetworkController(_node,_controllerDbPath.c_str());
+			_controller = new EmbeddedNetworkController(_node,_controllerDbPath.c_str(),_ports[0]);
 			_node->setNetconfMaster((void *)_controller);
 			_node->setNetconfMaster((void *)_controller);
 
 
 			// Join existing networks in networks.d
 			// Join existing networks in networks.d