diff --git a/src/config_center/config_center.cpp b/src/config_center/config_center.cpp index 3908d70..88928cd 100644 --- a/src/config_center/config_center.cpp +++ b/src/config_center/config_center.cpp @@ -41,16 +41,43 @@ int ConfigCenter::Load() { enable_turn_ = ini_.GetBoolValue(section_, "enable_turn", enable_turn_); enable_srtp_ = ini_.GetBoolValue(section_, "enable_srtp", enable_srtp_); - signal_server_host_ = ini_.GetValue(section_, "signal_server_host", - signal_server_host_.c_str()); - signal_server_port_ = static_cast( - ini_.GetLongValue(section_, "signal_server_port", signal_server_port_)); - coturn_server_port_ = static_cast( - ini_.GetLongValue(section_, "coturn_server_port", coturn_server_port_)); - cert_file_path_ = - ini_.GetValue(section_, "cert_file_path", cert_file_path_.c_str()); enable_self_hosted_ = ini_.GetBoolValue(section_, "enable_self_hosted", enable_self_hosted_); + + const char* signal_server_host_value = + ini_.GetValue(section_, "signal_server_host", nullptr); + if (signal_server_host_value != nullptr && + strlen(signal_server_host_value) > 0) { + signal_server_host_ = signal_server_host_value; + } else { + signal_server_host_ = ""; + } + const char* signal_server_port_value = + ini_.GetValue(section_, "signal_server_port", nullptr); + if (signal_server_port_value != nullptr && + strlen(signal_server_port_value) > 0) { + signal_server_port_ = + static_cast(ini_.GetLongValue(section_, "signal_server_port", 0)); + } else { + signal_server_port_ = 0; + } + const char* coturn_server_port_value = + ini_.GetValue(section_, "coturn_server_port", nullptr); + if (coturn_server_port_value != nullptr && + strlen(coturn_server_port_value) > 0) { + coturn_server_port_ = + static_cast(ini_.GetLongValue(section_, "coturn_server_port", 0)); + } else { + coturn_server_port_ = 0; + } + const char* cert_file_path_value = + ini_.GetValue(section_, "cert_file_path", nullptr); + if (cert_file_path_value != nullptr && strlen(cert_file_path_value) > 0) { + cert_file_path_ = cert_file_path_value; + } else { + cert_file_path_ = ""; + } + enable_autostart_ = ini_.GetBoolValue(section_, "enable_autostart", enable_autostart_); enable_daemon_ = ini_.GetBoolValue(section_, "enable_daemon", enable_daemon_); @@ -71,11 +98,18 @@ int ConfigCenter::Save() { ini_.SetBoolValue(section_, "hardware_video_codec", hardware_video_codec_); ini_.SetBoolValue(section_, "enable_turn", enable_turn_); ini_.SetBoolValue(section_, "enable_srtp", enable_srtp_); - ini_.SetValue(section_, "signal_server_host", signal_server_host_.c_str()); - ini_.SetLongValue(section_, "signal_server_port", - static_cast(signal_server_port_)); - ini_.SetValue(section_, "cert_file_path", cert_file_path_.c_str()); ini_.SetBoolValue(section_, "enable_self_hosted", enable_self_hosted_); + + // only save when self hosted + if (enable_self_hosted_) { + ini_.SetValue(section_, "signal_server_host", signal_server_host_.c_str()); + ini_.SetLongValue(section_, "signal_server_port", + static_cast(signal_server_port_)); + ini_.SetLongValue(section_, "coturn_server_port", + static_cast(coturn_server_port_)); + ini_.SetValue(section_, "cert_file_path", cert_file_path_.c_str()); + } + ini_.SetBoolValue(section_, "enable_autostart", enable_autostart_); ini_.SetBoolValue(section_, "enable_daemon", enable_daemon_); ini_.SetBoolValue(section_, "enable_minimize_to_tray", @@ -210,6 +244,43 @@ int ConfigCenter::SetCertFilePath(const std::string& cert_file_path) { int ConfigCenter::SetSelfHosted(bool enable_self_hosted) { enable_self_hosted_ = enable_self_hosted; ini_.SetBoolValue(section_, "enable_self_hosted", enable_self_hosted_); + + // load from config if self hosted is enabled + if (enable_self_hosted_) { + const char* signal_server_host_value = + ini_.GetValue(section_, "signal_server_host", nullptr); + if (signal_server_host_value != nullptr && + strlen(signal_server_host_value) > 0) { + signal_server_host_ = signal_server_host_value; + } + const char* signal_server_port_value = + ini_.GetValue(section_, "signal_server_port", nullptr); + if (signal_server_port_value != nullptr && + strlen(signal_server_port_value) > 0) { + signal_server_port_ = static_cast( + ini_.GetLongValue(section_, "signal_server_port", 0)); + } + const char* coturn_server_port_value = + ini_.GetValue(section_, "coturn_server_port", nullptr); + if (coturn_server_port_value != nullptr && + strlen(coturn_server_port_value) > 0) { + coturn_server_port_ = static_cast( + ini_.GetLongValue(section_, "coturn_server_port", 0)); + } + const char* cert_file_path_value = + ini_.GetValue(section_, "cert_file_path", nullptr); + if (cert_file_path_value != nullptr && strlen(cert_file_path_value) > 0) { + cert_file_path_ = cert_file_path_value; + } + + ini_.SetValue(section_, "signal_server_host", signal_server_host_.c_str()); + ini_.SetLongValue(section_, "signal_server_port", + static_cast(signal_server_port_)); + ini_.SetLongValue(section_, "coturn_server_port", + static_cast(coturn_server_port_)); + ini_.SetValue(section_, "cert_file_path", cert_file_path_.c_str()); + } + SI_Error rc = ini_.SaveFile(config_path_.c_str()); if (rc < 0) { return -1; diff --git a/src/config_center/config_center.h b/src/config_center/config_center.h index f71456c..5bb33fe 100644 --- a/src/config_center/config_center.h +++ b/src/config_center/config_center.h @@ -70,7 +70,6 @@ class ConfigCenter { private: std::string config_path_; - std::string cert_file_path_; CSimpleIniA ini_; const char* section_ = "Settings"; @@ -81,12 +80,13 @@ class ConfigCenter { bool hardware_video_codec_ = false; bool enable_turn_ = true; bool enable_srtp_ = false; - std::string signal_server_host_ = "api.crossdesk.cn"; + std::string signal_server_host_ = ""; std::string signal_server_host_default_ = "api.crossdesk.cn"; - int signal_server_port_ = 9099; + int signal_server_port_ = 0; int server_port_default_ = 9099; - int coturn_server_port_ = 3478; + int coturn_server_port_ = 0; int coturn_server_port_default_ = 3478; + std::string cert_file_path_ = ""; std::string cert_file_path_default_ = ""; bool enable_self_hosted_ = false; bool enable_minimize_to_tray_ = false; diff --git a/src/gui/render.cpp b/src/gui/render.cpp index 6c2589d..f69e42a 100644 --- a/src/gui/render.cpp +++ b/src/gui/render.cpp @@ -491,14 +491,22 @@ int Render::CreateConnectionPeer() { strncpy(signal_server_ip_self_, config_center_->GetSignalServerHost().c_str(), sizeof(signal_server_ip_self_) - 1); signal_server_ip_self_[sizeof(signal_server_ip_self_) - 1] = '\0'; - strncpy(signal_server_port_self_, - std::to_string(config_center_->GetSignalServerPort()).c_str(), - sizeof(signal_server_port_self_) - 1); - signal_server_port_self_[sizeof(signal_server_port_self_) - 1] = '\0'; - strncpy(coturn_server_port_self_, - std::to_string(config_center_->GetCoturnServerPort()).c_str(), - sizeof(coturn_server_port_self_) - 1); - coturn_server_port_self_[sizeof(coturn_server_port_self_) - 1] = '\0'; + int signal_port = config_center_->GetSignalServerPort(); + if (signal_port > 0) { + strncpy(signal_server_port_self_, std::to_string(signal_port).c_str(), + sizeof(signal_server_port_self_) - 1); + signal_server_port_self_[sizeof(signal_server_port_self_) - 1] = '\0'; + } else { + signal_server_port_self_[0] = '\0'; + } + int coturn_port = config_center_->GetCoturnServerPort(); + if (coturn_port > 0) { + strncpy(coturn_server_port_self_, std::to_string(coturn_port).c_str(), + sizeof(coturn_server_port_self_) - 1); + coturn_server_port_self_[sizeof(coturn_server_port_self_) - 1] = '\0'; + } else { + coturn_server_port_self_[0] = '\0'; + } tls_cert_path_self_ = config_center_->GetCertFilePath(); // peer config @@ -1038,10 +1046,15 @@ int Render::Run() { config_center_->GetSignalServerHost().c_str(), sizeof(signal_server_ip_self_) - 1); signal_server_ip_self_[sizeof(signal_server_ip_self_) - 1] = '\0'; - strncpy(signal_server_port_self_, - std::to_string(config_center_->GetSignalServerPort()).c_str(), - sizeof(signal_server_port_self_) - 1); - signal_server_port_self_[sizeof(signal_server_port_self_) - 1] = '\0'; + int signal_port_init = config_center_->GetSignalServerPort(); + if (signal_port_init > 0) { + strncpy(signal_server_port_self_, + std::to_string(signal_port_init).c_str(), + sizeof(signal_server_port_self_) - 1); + signal_server_port_self_[sizeof(signal_server_port_self_) - 1] = '\0'; + } else { + signal_server_port_self_[0] = '\0'; + } strncpy(cert_file_path_, cert_path_.c_str(), sizeof(cert_file_path_) - 1); cert_file_path_[sizeof(cert_file_path_) - 1] = '\0'; } else { diff --git a/src/gui/windows/server_settings_window.cpp b/src/gui/windows/server_settings_window.cpp index ac86bb1..14093d2 100644 --- a/src/gui/windows/server_settings_window.cpp +++ b/src/gui/windows/server_settings_window.cpp @@ -275,16 +275,27 @@ int Render::SelfHostedServerWindow() { localization::cancel[localization_language_index_].c_str())) { show_self_hosted_server_config_window_ = false; self_hosted_server_config_window_pos_reset_ = true; - - strncpy(signal_server_ip_self_, signal_server_ip_, + strncpy(signal_server_ip_self_, + config_center_->GetSignalServerHost().c_str(), sizeof(signal_server_ip_self_) - 1); signal_server_ip_self_[sizeof(signal_server_ip_self_) - 1] = '\0'; - strncpy(signal_server_port_self_, signal_server_port_, - sizeof(signal_server_port_self_) - 1); - signal_server_port_self_[sizeof(signal_server_port_self_) - 1] = '\0'; - config_center_->SetServerHost(signal_server_ip_self_); - config_center_->SetServerPort(atoi(signal_server_port_self_)); - tls_cert_path_self_.clear(); + int signal_port = config_center_->GetSignalServerPort(); + if (signal_port > 0) { + strncpy(signal_server_port_self_, std::to_string(signal_port).c_str(), + sizeof(signal_server_port_self_) - 1); + signal_server_port_self_[sizeof(signal_server_port_self_) - 1] = '\0'; + } else { + signal_server_port_self_[0] = '\0'; + } + int coturn_port = config_center_->GetCoturnServerPort(); + if (coturn_port > 0) { + strncpy(coturn_server_port_self_, std::to_string(coturn_port).c_str(), + sizeof(coturn_server_port_self_) - 1); + coturn_server_port_self_[sizeof(coturn_server_port_self_) - 1] = '\0'; + } else { + coturn_server_port_self_[0] = '\0'; + } + tls_cert_path_self_ = config_center_->GetCertFilePath(); } ImGui::SetWindowFontScale(1.0f);