|
@@ -27,6 +27,8 @@ namespace rtc::impl {
|
|
|
|
|
|
using namespace std::placeholders;
|
|
using namespace std::placeholders;
|
|
|
|
|
|
|
|
+const string PemBeginCertificateTag = "-----BEGIN CERTIFICATE-----";
|
|
|
|
+
|
|
WebSocketServer::WebSocketServer(Configuration config_)
|
|
WebSocketServer::WebSocketServer(Configuration config_)
|
|
: config(std::move(config_)), tcpServer(std::make_unique<TcpServer>(config.port)),
|
|
: config(std::move(config_)), tcpServer(std::make_unique<TcpServer>(config.port)),
|
|
mStopped(false) {
|
|
mStopped(false) {
|
|
@@ -34,16 +36,19 @@ WebSocketServer::WebSocketServer(Configuration config_)
|
|
|
|
|
|
if (config.enableTls) {
|
|
if (config.enableTls) {
|
|
if (config.certificatePemFile && config.keyPemFile) {
|
|
if (config.certificatePemFile && config.keyPemFile) {
|
|
- mCertificate = std::make_shared<Certificate>(Certificate::FromFile(
|
|
|
|
- *config.certificatePemFile, *config.keyPemFile, config.keyPemPass.value_or("")));
|
|
|
|
-
|
|
|
|
- } else if (!config.certificatePemFile && !config.keyPemFile) {
|
|
|
|
mCertificate = std::make_shared<Certificate>(
|
|
mCertificate = std::make_shared<Certificate>(
|
|
- Certificate::Generate(CertificateType::Default, "localhost"));
|
|
|
|
- } else {
|
|
|
|
- throw std::invalid_argument(
|
|
|
|
- "Either none or both certificate and key PEM files must be specified");
|
|
|
|
|
|
+ config.certificatePemFile->find(PemBeginCertificateTag) != string::npos
|
|
|
|
+ ? Certificate::FromString(*config.certificatePemFile, *config.keyPemFile)
|
|
|
|
+ : Certificate::FromFile(*config.certificatePemFile, *config.keyPemFile,
|
|
|
|
+ config.keyPemPass.value_or("")));
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ } else if (!config.certificatePemFile && !config.keyPemFile) {
|
|
|
|
+ mCertificate = std::make_shared<Certificate>(
|
|
|
|
+ Certificate::Generate(CertificateType::Default, "localhost"));
|
|
|
|
+ } else {
|
|
|
|
+ throw std::invalid_argument(
|
|
|
|
+ "Either none or both certificate and key PEM files must be specified");
|
|
}
|
|
}
|
|
|
|
|
|
mThread = std::thread(&WebSocketServer::runLoop, this);
|
|
mThread = std::thread(&WebSocketServer::runLoop, this);
|