mirror of
				https://github.com/Telecominfraproject/wlan-cloud-owprov.git
				synced 2025-10-30 02:02:36 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			104 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| //
 | |
| //	License type: BSD 3-Clause License
 | |
| //	License copy: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE
 | |
| //
 | |
| //	Created by Stephane Bourque on 2021-03-04.
 | |
| //	Arilia Wireless Inc.
 | |
| //
 | |
| 
 | |
| #include "Poco/Environment.h"
 | |
| #include "Poco/Net/SSLManager.h"
 | |
| #include "Poco/Util/Application.h"
 | |
| #include "Poco/Util/Option.h"
 | |
| 
 | |
| #include "AutoDiscovery.h"
 | |
| #include "Daemon.h"
 | |
| #include "DeviceTypeCache.h"
 | |
| #include "FileDownloader.h"
 | |
| #include "FindCountry.h"
 | |
| #include "JobController.h"
 | |
| #include "SerialNumberCache.h"
 | |
| #include "Signup.h"
 | |
| #include "StorageService.h"
 | |
| #include "UI_Prov_WebSocketNotifications.h"
 | |
| #include "framework/ConfigurationValidator.h"
 | |
| #include "framework/UI_WebSocketClientServer.h"
 | |
| #include <RadiusEndpointTypes/GlobalReach.h>
 | |
| #include <RadiusEndpointTypes/OrionWifi.h>
 | |
| #include <RadiusEndpointTypes/Radsec.h>
 | |
| #include <RadiusEndpointTypes/GenericRadius.h>
 | |
| 
 | |
| namespace OpenWifi {
 | |
| 	class Daemon *Daemon::instance_ = nullptr;
 | |
| 
 | |
| 	class Daemon *Daemon::instance() {
 | |
| 		if (instance_ == nullptr) {
 | |
| 			instance_ = new Daemon(vDAEMON_PROPERTIES_FILENAME, vDAEMON_ROOT_ENV_VAR,
 | |
| 								   vDAEMON_CONFIG_ENV_VAR, vDAEMON_APP_NAME, vDAEMON_BUS_TIMER,
 | |
| 								   SubSystemVec{OpenWifi::StorageService(), DeviceTypeCache(),
 | |
| 												ConfigurationValidator(), SerialNumberCache(),
 | |
| 												AutoDiscovery(), JobController(),
 | |
| 												UI_WebSocketClientServer(), FindCountryFromIP(),
 | |
| 												Signup(), FileDownloader(),
 | |
|                                                 OpenRoaming_GlobalReach(),
 | |
|                                                 OpenRoaming_Orion(), OpenRoaming_Radsec(),
 | |
|                                                 OpenRoaming_GenericRadius()
 | |
|             });
 | |
| 		}
 | |
| 		return instance_;
 | |
| 	}
 | |
| 
 | |
| 	void Daemon::PostInitialization([[maybe_unused]] Poco::Util::Application &self) {
 | |
| 		if (MicroService::instance().ConfigGetBool("firmware.updater.upgrade", false)) {
 | |
| 			if (MicroService::instance().ConfigGetBool("firmware.updater.releaseonly", false)) {
 | |
| 				FWRules_ = ProvObjects::upgrade_release_only;
 | |
| 			} else {
 | |
| 				FWRules_ = ProvObjects::upgrade_latest;
 | |
| 			}
 | |
| 		} else {
 | |
| 			FWRules_ = ProvObjects::dont_upgrade;
 | |
| 		}
 | |
| 
 | |
| 		WebSocketProcessor_ = std::make_unique<ProvWebSocketClient>(logger());
 | |
| 
 | |
| 		AssetDir_ = MicroService::instance().DataDir() + "/wwwassets";
 | |
| 		Poco::File DataDir(AssetDir_);
 | |
| 		if (!DataDir.exists()) {
 | |
| 			try {
 | |
| 				DataDir.createDirectory();
 | |
| 			} catch (const Poco::Exception &E) {
 | |
| 				logger().log(E);
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	void DaemonPostInitialization(Poco::Util::Application &self) {
 | |
| 		Daemon()->PostInitialization(self);
 | |
| 		ProvWebSocketNotifications::Register();
 | |
| 	}
 | |
| 
 | |
| } // namespace OpenWifi
 | |
| 
 | |
| int main(int argc, char **argv) {
 | |
| 	int ExitCode;
 | |
| 	try {
 | |
| 		Poco::Net::SSLManager::instance().initializeServer(nullptr, nullptr, nullptr);
 | |
| 		auto App = OpenWifi::Daemon::instance();
 | |
| 		ExitCode = App->run(argc, argv);
 | |
| 		Poco::Net::SSLManager::instance().shutdown();
 | |
| 	} catch (Poco::Exception &exc) {
 | |
| 		ExitCode = Poco::Util::Application::EXIT_SOFTWARE;
 | |
| 		std::cout << exc.displayText() << std::endl;
 | |
| 	} catch (std::exception &exc) {
 | |
| 		ExitCode = Poco::Util::Application::EXIT_TEMPFAIL;
 | |
| 		std::cout << exc.what() << std::endl;
 | |
| 	} catch (...) {
 | |
| 		ExitCode = Poco::Util::Application::EXIT_TEMPFAIL;
 | |
| 		std::cout << "Exception on closure" << std::endl;
 | |
| 	}
 | |
| 
 | |
| 	std::cout << "Exitcode: " << ExitCode << std::endl;
 | |
| 	return ExitCode;
 | |
| }
 | |
| 
 | |
| // end of namespace
 | 
