forked from eden-emu/eden
		
	Merge pull request #4842 from liushuyu/fix-web-srv
web_backend: fix a regression introduced in 39c8d18
			
			
This commit is contained in:
		
						commit
						7d27a7a511
					
				
					 8 changed files with 17 additions and 402 deletions
				
			
		
							
								
								
									
										25
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										25
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							|  | @ -73,17 +73,20 @@ if (NOT LIBZIP_FOUND) | ||||||
| endif() | endif() | ||||||
| 
 | 
 | ||||||
| if (ENABLE_WEB_SERVICE) | if (ENABLE_WEB_SERVICE) | ||||||
|     # LibreSSL |     find_package(OpenSSL 1.1) | ||||||
|     set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") |     if (OPENSSL_FOUND) | ||||||
|     add_subdirectory(libressl EXCLUDE_FROM_ALL) |         set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto) | ||||||
|     target_include_directories(ssl INTERFACE ./libressl/include) |     else() | ||||||
|     target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP) |         # LibreSSL | ||||||
|     get_directory_property(OPENSSL_LIBRARIES |         set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") | ||||||
|         DIRECTORY libressl |         set(OPENSSLDIR "/etc/ssl/") | ||||||
|         DEFINITION OPENSSL_LIBS) |         add_subdirectory(libressl EXCLUDE_FROM_ALL) | ||||||
| 
 |         target_include_directories(ssl INTERFACE ./libressl/include) | ||||||
|     # lurlparser |         target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP) | ||||||
|     add_subdirectory(lurlparser EXCLUDE_FROM_ALL) |         get_directory_property(OPENSSL_LIBRARIES | ||||||
|  |             DIRECTORY libressl | ||||||
|  |             DEFINITION OPENSSL_LIBS) | ||||||
|  |     endif() | ||||||
| 
 | 
 | ||||||
|     # httplib |     # httplib | ||||||
|     add_library(httplib INTERFACE) |     add_library(httplib INTERFACE) | ||||||
|  |  | ||||||
							
								
								
									
										2
									
								
								externals/libressl
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								externals/libressl
									
										
									
									
										vendored
									
									
								
							|  | @ -1 +1 @@ | ||||||
| Subproject commit 7d01cb01cb1a926ecb4c9c98b107ef3c26f59dfb | Subproject commit 8289d0d07de6553bf4b900bf60e808ea3f7f59da | ||||||
							
								
								
									
										8
									
								
								externals/lurlparser/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								externals/lurlparser/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							|  | @ -1,8 +0,0 @@ | ||||||
| add_library(lurlparser |  | ||||||
|         LUrlParser.cpp |  | ||||||
|         LUrlParser.h |  | ||||||
| ) |  | ||||||
| 
 |  | ||||||
| create_target_directory_groups(lurlparser) |  | ||||||
| 
 |  | ||||||
| target_include_directories(lurlparser INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) |  | ||||||
							
								
								
									
										265
									
								
								externals/lurlparser/LUrlParser.cpp
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										265
									
								
								externals/lurlparser/LUrlParser.cpp
									
										
									
									
										vendored
									
									
								
							|  | @ -1,265 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * Lightweight URL & URI parser (RFC 1738, RFC 3986) |  | ||||||
|  * https://github.com/corporateshark/LUrlParser
 |  | ||||||
|  * |  | ||||||
|  * The MIT License (MIT) |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2015 Sergey Kosarevsky (sk@linderdaum.com) |  | ||||||
|  * |  | ||||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  * of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  * in the Software without restriction, including without limitation the rights |  | ||||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  * copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  * furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  * The above copyright notice and this permission notice shall be included in all |  | ||||||
|  * copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
|  * SOFTWARE. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #include "LUrlParser.h" |  | ||||||
| 
 |  | ||||||
| #include <algorithm> |  | ||||||
| #include <cstring> |  | ||||||
| #include <stdlib.h> |  | ||||||
| 
 |  | ||||||
| // check if the scheme name is valid
 |  | ||||||
| static bool IsSchemeValid( const std::string& SchemeName ) |  | ||||||
| { |  | ||||||
|     for ( auto c : SchemeName  ) |  | ||||||
|     { |  | ||||||
|         if ( !isalpha( c ) && c != '+' && c != '-' && c != '.' ) return false; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     return true; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| bool LUrlParser::clParseURL::GetPort( int* OutPort ) const |  | ||||||
| { |  | ||||||
|     if ( !IsValid() ) { return false; } |  | ||||||
| 
 |  | ||||||
|     int Port = atoi( m_Port.c_str() ); |  | ||||||
| 
 |  | ||||||
|     if ( Port <= 0 || Port > 65535 ) { return false; } |  | ||||||
| 
 |  | ||||||
|     if ( OutPort ) { *OutPort = Port; } |  | ||||||
| 
 |  | ||||||
|     return true; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| // based on RFC 1738 and RFC 3986
 |  | ||||||
| LUrlParser::clParseURL LUrlParser::clParseURL::ParseURL( const std::string& URL ) |  | ||||||
| { |  | ||||||
|     LUrlParser::clParseURL Result; |  | ||||||
| 
 |  | ||||||
|     const char* CurrentString = URL.c_str(); |  | ||||||
| 
 |  | ||||||
|     /*
 |  | ||||||
|      *	<scheme>:<scheme-specific-part> |  | ||||||
|      *	<scheme> := [a-z\+\-\.]+ |  | ||||||
|      *	For resiliency, programs interpreting URLs should treat upper case letters as equivalent to lower case in scheme names |  | ||||||
|      */ |  | ||||||
| 
 |  | ||||||
|     // try to read scheme
 |  | ||||||
|     { |  | ||||||
|         const char* LocalString = strchr( CurrentString, ':' ); |  | ||||||
| 
 |  | ||||||
|         if ( !LocalString ) |  | ||||||
|         { |  | ||||||
|             return clParseURL( LUrlParserError_NoUrlCharacter ); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // save the scheme name
 |  | ||||||
|         Result.m_Scheme = std::string( CurrentString, LocalString - CurrentString ); |  | ||||||
| 
 |  | ||||||
|         if ( !IsSchemeValid( Result.m_Scheme ) ) |  | ||||||
|         { |  | ||||||
|             return clParseURL( LUrlParserError_InvalidSchemeName ); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // scheme should be lowercase
 |  | ||||||
|         std::transform( Result.m_Scheme.begin(), Result.m_Scheme.end(), Result.m_Scheme.begin(), ::tolower ); |  | ||||||
| 
 |  | ||||||
|         // skip ':'
 |  | ||||||
|         CurrentString = LocalString+1; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /*
 |  | ||||||
|      *	//<user>:<password>@<host>:<port>/<url-path>
 |  | ||||||
|      *	any ":", "@" and "/" must be normalized |  | ||||||
|      */ |  | ||||||
| 
 |  | ||||||
|     // skip "//"
 |  | ||||||
|     if ( *CurrentString++ != '/' ) return clParseURL( LUrlParserError_NoDoubleSlash ); |  | ||||||
|     if ( *CurrentString++ != '/' ) return clParseURL( LUrlParserError_NoDoubleSlash ); |  | ||||||
| 
 |  | ||||||
|     // check if the user name and password are specified
 |  | ||||||
|     bool bHasUserName = false; |  | ||||||
| 
 |  | ||||||
|     const char* LocalString = CurrentString; |  | ||||||
| 
 |  | ||||||
|     while ( *LocalString ) |  | ||||||
|     { |  | ||||||
|         if ( *LocalString == '@' ) |  | ||||||
|         { |  | ||||||
|             // user name and password are specified
 |  | ||||||
|             bHasUserName = true; |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         else if ( *LocalString == '/' ) |  | ||||||
|         { |  | ||||||
|             // end of <host>:<port> specification
 |  | ||||||
|             bHasUserName = false; |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         LocalString++; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // user name and password
 |  | ||||||
|     LocalString = CurrentString; |  | ||||||
| 
 |  | ||||||
|     if ( bHasUserName ) |  | ||||||
|     { |  | ||||||
|         // read user name
 |  | ||||||
|         while ( *LocalString && *LocalString != ':' && *LocalString != '@' ) LocalString++; |  | ||||||
| 
 |  | ||||||
|         Result.m_UserName = std::string( CurrentString, LocalString - CurrentString ); |  | ||||||
| 
 |  | ||||||
|         // proceed with the current pointer
 |  | ||||||
|         CurrentString = LocalString; |  | ||||||
| 
 |  | ||||||
|         if ( *CurrentString == ':' ) |  | ||||||
|         { |  | ||||||
|             // skip ':'
 |  | ||||||
|             CurrentString++; |  | ||||||
| 
 |  | ||||||
|             // read password
 |  | ||||||
|             LocalString = CurrentString; |  | ||||||
| 
 |  | ||||||
|             while ( *LocalString && *LocalString != '@' ) LocalString++; |  | ||||||
| 
 |  | ||||||
|             Result.m_Password = std::string( CurrentString, LocalString - CurrentString ); |  | ||||||
| 
 |  | ||||||
|             CurrentString = LocalString; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // skip '@'
 |  | ||||||
|         if ( *CurrentString != '@' ) |  | ||||||
|         { |  | ||||||
|             return clParseURL( LUrlParserError_NoAtSign ); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         CurrentString++; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     bool bHasBracket = ( *CurrentString == '[' ); |  | ||||||
| 
 |  | ||||||
|     // go ahead, read the host name
 |  | ||||||
|     LocalString = CurrentString; |  | ||||||
| 
 |  | ||||||
|     while ( *LocalString ) |  | ||||||
|     { |  | ||||||
|         if ( bHasBracket && *LocalString == ']' ) |  | ||||||
|         { |  | ||||||
|             // end of IPv6 address
 |  | ||||||
|             LocalString++; |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
|         else if ( !bHasBracket && ( *LocalString == ':' || *LocalString == '/' ) ) |  | ||||||
|         { |  | ||||||
|             // port number is specified
 |  | ||||||
|             break; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         LocalString++; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     Result.m_Host = std::string( CurrentString, LocalString - CurrentString ); |  | ||||||
| 
 |  | ||||||
|     CurrentString = LocalString; |  | ||||||
| 
 |  | ||||||
|     // is port number specified?
 |  | ||||||
|     if ( *CurrentString == ':' ) |  | ||||||
|     { |  | ||||||
|         CurrentString++; |  | ||||||
| 
 |  | ||||||
|         // read port number
 |  | ||||||
|         LocalString = CurrentString; |  | ||||||
| 
 |  | ||||||
|         while ( *LocalString && *LocalString != '/' ) LocalString++; |  | ||||||
| 
 |  | ||||||
|         Result.m_Port = std::string( CurrentString, LocalString - CurrentString ); |  | ||||||
| 
 |  | ||||||
|         CurrentString = LocalString; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // end of string
 |  | ||||||
|     if ( !*CurrentString ) |  | ||||||
|     { |  | ||||||
|         Result.m_ErrorCode = LUrlParserError_Ok; |  | ||||||
| 
 |  | ||||||
|         return Result; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // skip '/'
 |  | ||||||
|     if ( *CurrentString != '/' ) |  | ||||||
|     { |  | ||||||
|         return clParseURL( LUrlParserError_NoSlash ); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     CurrentString++; |  | ||||||
| 
 |  | ||||||
|     // parse the path
 |  | ||||||
|     LocalString = CurrentString; |  | ||||||
| 
 |  | ||||||
|     while ( *LocalString && *LocalString != '#' && *LocalString != '?' ) LocalString++; |  | ||||||
| 
 |  | ||||||
|     Result.m_Path = std::string( CurrentString, LocalString - CurrentString ); |  | ||||||
| 
 |  | ||||||
|     CurrentString = LocalString; |  | ||||||
| 
 |  | ||||||
|     // check for query
 |  | ||||||
|     if ( *CurrentString == '?' ) |  | ||||||
|     { |  | ||||||
|         // skip '?'
 |  | ||||||
|         CurrentString++; |  | ||||||
| 
 |  | ||||||
|         // read query
 |  | ||||||
|         LocalString = CurrentString; |  | ||||||
| 
 |  | ||||||
|         while ( *LocalString && *LocalString != '#' ) LocalString++; |  | ||||||
| 
 |  | ||||||
|         Result.m_Query = std::string( CurrentString, LocalString - CurrentString ); |  | ||||||
| 
 |  | ||||||
|         CurrentString = LocalString; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     // check for fragment
 |  | ||||||
|     if ( *CurrentString == '#' ) |  | ||||||
|     { |  | ||||||
|         // skip '#'
 |  | ||||||
|         CurrentString++; |  | ||||||
| 
 |  | ||||||
|         // read fragment
 |  | ||||||
|         LocalString = CurrentString; |  | ||||||
| 
 |  | ||||||
|         while ( *LocalString ) LocalString++; |  | ||||||
| 
 |  | ||||||
|         Result.m_Fragment = std::string( CurrentString, LocalString - CurrentString ); |  | ||||||
| 
 |  | ||||||
|         CurrentString = LocalString; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     Result.m_ErrorCode = LUrlParserError_Ok; |  | ||||||
| 
 |  | ||||||
|     return Result; |  | ||||||
| } |  | ||||||
							
								
								
									
										78
									
								
								externals/lurlparser/LUrlParser.h
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										78
									
								
								externals/lurlparser/LUrlParser.h
									
										
									
									
										vendored
									
									
								
							|  | @ -1,78 +0,0 @@ | ||||||
| /*
 |  | ||||||
|  * Lightweight URL & URI parser (RFC 1738, RFC 3986) |  | ||||||
|  * https://github.com/corporateshark/LUrlParser
 |  | ||||||
|  * |  | ||||||
|  * The MIT License (MIT) |  | ||||||
|  * |  | ||||||
|  * Copyright (C) 2015 Sergey Kosarevsky (sk@linderdaum.com) |  | ||||||
|  * |  | ||||||
|  * Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  * of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  * in the Software without restriction, including without limitation the rights |  | ||||||
|  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  * copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  * furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  * The above copyright notice and this permission notice shall be included in all |  | ||||||
|  * copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |  | ||||||
|  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |  | ||||||
|  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |  | ||||||
|  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |  | ||||||
|  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |  | ||||||
|  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |  | ||||||
|  * SOFTWARE. |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| #pragma once |  | ||||||
| 
 |  | ||||||
| #include <string> |  | ||||||
| 
 |  | ||||||
| namespace LUrlParser |  | ||||||
| { |  | ||||||
| enum LUrlParserError |  | ||||||
| { |  | ||||||
|     LUrlParserError_Ok = 0, |  | ||||||
|     LUrlParserError_Uninitialized = 1, |  | ||||||
|     LUrlParserError_NoUrlCharacter = 2, |  | ||||||
|     LUrlParserError_InvalidSchemeName = 3, |  | ||||||
|     LUrlParserError_NoDoubleSlash = 4, |  | ||||||
|     LUrlParserError_NoAtSign = 5, |  | ||||||
|     LUrlParserError_UnexpectedEndOfLine = 6, |  | ||||||
|     LUrlParserError_NoSlash = 7, |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| class clParseURL |  | ||||||
| { |  | ||||||
| public: |  | ||||||
|     LUrlParserError m_ErrorCode; |  | ||||||
|     std::string m_Scheme; |  | ||||||
|     std::string m_Host; |  | ||||||
|     std::string m_Port; |  | ||||||
|     std::string m_Path; |  | ||||||
|     std::string m_Query; |  | ||||||
|     std::string m_Fragment; |  | ||||||
|     std::string m_UserName; |  | ||||||
|     std::string m_Password; |  | ||||||
| 
 |  | ||||||
|     clParseURL() |  | ||||||
|             : m_ErrorCode( LUrlParserError_Uninitialized ) |  | ||||||
|     {} |  | ||||||
| 
 |  | ||||||
|     /// return 'true' if the parsing was successful
 |  | ||||||
|     bool IsValid() const { return m_ErrorCode == LUrlParserError_Ok; } |  | ||||||
| 
 |  | ||||||
|     /// helper to convert the port number to int, return 'true' if the port is valid (within the 0..65535 range)
 |  | ||||||
|     bool GetPort( int* OutPort ) const; |  | ||||||
| 
 |  | ||||||
|     /// parse the URL
 |  | ||||||
|     static clParseURL ParseURL( const std::string& URL ); |  | ||||||
| 
 |  | ||||||
| private: |  | ||||||
|     explicit clParseURL( LUrlParserError ErrorCode ) |  | ||||||
|             : m_ErrorCode( ErrorCode ) |  | ||||||
|     {} |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| } // namespace LUrlParser
 |  | ||||||
							
								
								
									
										19
									
								
								externals/lurlparser/README.md
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										19
									
								
								externals/lurlparser/README.md
									
										
									
									
										vendored
									
									
								
							|  | @ -1,19 +0,0 @@ | ||||||
| From https://github.com/corporateshark/LUrlParser/commit/455d5e2d27e3946f11ad0328fee9ee2628e6a8e2 |  | ||||||
| 
 |  | ||||||
| MIT License |  | ||||||
| 
 |  | ||||||
| === |  | ||||||
| 
 |  | ||||||
| Lightweight URL & URI parser (RFC 1738, RFC 3986) |  | ||||||
| 
 |  | ||||||
| (C) Sergey Kosarevsky, 2015 |  | ||||||
| 
 |  | ||||||
| @corporateshark sk@linderdaum.com |  | ||||||
| 
 |  | ||||||
| http://www.linderdaum.com |  | ||||||
| 
 |  | ||||||
| http://blog.linderdaum.com |  | ||||||
| 
 |  | ||||||
| ============================= |  | ||||||
| 
 |  | ||||||
| A tiny and lightweight URL & URI parser (RFC 1738, RFC 3986) written in C++. |  | ||||||
|  | @ -9,4 +9,4 @@ add_library(web_service STATIC | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| create_target_directory_groups(web_service) | create_target_directory_groups(web_service) | ||||||
| target_link_libraries(web_service PRIVATE common nlohmann_json::nlohmann_json httplib lurlparser) | target_link_libraries(web_service PRIVATE common nlohmann_json::nlohmann_json httplib) | ||||||
|  |  | ||||||
|  | @ -7,7 +7,6 @@ | ||||||
| #include <mutex> | #include <mutex> | ||||||
| #include <string> | #include <string> | ||||||
| 
 | 
 | ||||||
| #include <LUrlParser.h> |  | ||||||
| #include <fmt/format.h> | #include <fmt/format.h> | ||||||
| #include <httplib.h> | #include <httplib.h> | ||||||
| 
 | 
 | ||||||
|  | @ -19,9 +18,6 @@ namespace WebService { | ||||||
| 
 | 
 | ||||||
| constexpr std::array<const char, 1> API_VERSION{'1'}; | constexpr std::array<const char, 1> API_VERSION{'1'}; | ||||||
| 
 | 
 | ||||||
| constexpr int HTTP_PORT = 80; |  | ||||||
| constexpr int HTTPS_PORT = 443; |  | ||||||
| 
 |  | ||||||
| constexpr std::size_t TIMEOUT_SECONDS = 30; | constexpr std::size_t TIMEOUT_SECONDS = 30; | ||||||
| 
 | 
 | ||||||
| struct Client::Impl { | struct Client::Impl { | ||||||
|  | @ -67,21 +63,7 @@ struct Client::Impl { | ||||||
|                              const std::string& jwt = "", const std::string& username = "", |                              const std::string& jwt = "", const std::string& username = "", | ||||||
|                              const std::string& token = "") { |                              const std::string& token = "") { | ||||||
|         if (cli == nullptr) { |         if (cli == nullptr) { | ||||||
|             const auto parsedUrl = LUrlParser::clParseURL::ParseURL(host); |             cli = std::make_unique<httplib::Client>(host.c_str()); | ||||||
|             int port{}; |  | ||||||
|             if (parsedUrl.m_Scheme == "http") { |  | ||||||
|                 if (!parsedUrl.GetPort(&port)) { |  | ||||||
|                     port = HTTP_PORT; |  | ||||||
|                 } |  | ||||||
|             } else if (parsedUrl.m_Scheme == "https") { |  | ||||||
|                 if (!parsedUrl.GetPort(&port)) { |  | ||||||
|                     port = HTTPS_PORT; |  | ||||||
|                 } |  | ||||||
|             } else { |  | ||||||
|                 LOG_ERROR(WebService, "Bad URL scheme {}", parsedUrl.m_Scheme); |  | ||||||
|                 return WebResult{WebResult::Code::InvalidURL, "Bad URL scheme", ""}; |  | ||||||
|             } |  | ||||||
|             cli = std::make_unique<httplib::Client>(parsedUrl.m_Host.c_str(), port); |  | ||||||
|         } |         } | ||||||
|         cli->set_connection_timeout(TIMEOUT_SECONDS); |         cli->set_connection_timeout(TIMEOUT_SECONDS); | ||||||
|         cli->set_read_timeout(TIMEOUT_SECONDS); |         cli->set_read_timeout(TIMEOUT_SECONDS); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 LC
						LC