mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	externals: update httplib and libressl ...
* In older `httplib`, SSL connections were not handled correctly and will have issues with proxy servers. Also, keep alive directives were not available back then, which is probably necessary to implement HTTP_C service correctly. * Another reason being `httplib` now requires OpenSSL 1.1+ API while LibreSSL 2.x provided OpenSSL 1.0 compatible API. * The bundled LibreSSL has been updated to 3.2.2 so it now provides OpenSSL 1.1 compatible API now. * Also the path hint has been added so that it will find the correct path to the CA certs on *nix systems. * An option is provided so that *nix system distributions/providers can use their own SSL implementations when compiling Yuzu/Citra to (hopefully) complies with their maintenance guidelines. * LURLParse is also removed since `httplib` can handle `scheme:host:port` string itself now.
This commit is contained in:
		
							parent
							
								
									45a4a56264
								
							
						
					
					
						commit
						af24f75c18
					
				
					 12 changed files with 4436 additions and 2124 deletions
				
			
		
							
								
								
									
										24
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										24
									
								
								externals/CMakeLists.txt
									
										
									
									
										vendored
									
									
								
							|  | @ -100,19 +100,24 @@ if (USE_DISCORD_PRESENCE) | |||
| endif() | ||||
| 
 | ||||
| if (ENABLE_WEB_SERVICE) | ||||
|     # LibreSSL | ||||
|     set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") | ||||
|     add_subdirectory(libressl EXCLUDE_FROM_ALL) | ||||
|     target_include_directories(ssl INTERFACE ./libressl/include) | ||||
|     target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP) | ||||
| 
 | ||||
|     find_package(OpenSSL 1.1) | ||||
|     if (OPENSSL_FOUND) | ||||
|         set(OPENSSL_LIBRARIES OpenSSL::SSL OpenSSL::Crypto) | ||||
|     else() | ||||
|         # LibreSSL | ||||
|         set(LIBRESSL_SKIP_INSTALL ON CACHE BOOL "") | ||||
|         set(OPENSSLDIR "/etc/ssl/") | ||||
|         add_subdirectory(libressl EXCLUDE_FROM_ALL) | ||||
|         target_include_directories(ssl INTERFACE ./libressl/include) | ||||
|         target_compile_definitions(ssl PRIVATE -DHAVE_INET_NTOP) | ||||
|         get_directory_property(OPENSSL_LIBRARIES | ||||
|             DIRECTORY libressl | ||||
|             DEFINITION OPENSSL_LIBS) | ||||
|     endif() | ||||
|     # JSON | ||||
|     add_library(json-headers INTERFACE) | ||||
|     target_include_directories(json-headers INTERFACE ./json) | ||||
| 
 | ||||
|     # lurlparser | ||||
|     add_subdirectory(lurlparser EXCLUDE_FROM_ALL) | ||||
| 
 | ||||
|     if(ANDROID) | ||||
|         add_subdirectory(android-ifaddrs) | ||||
|     endif() | ||||
|  | @ -121,6 +126,7 @@ if (ENABLE_WEB_SERVICE) | |||
|     add_library(httplib INTERFACE) | ||||
|     target_include_directories(httplib INTERFACE ./httplib) | ||||
|     target_compile_options(httplib INTERFACE -DCPPHTTPLIB_OPENSSL_SUPPORT) | ||||
|     target_link_libraries(httplib INTERFACE ${OPENSSL_LIBRARIES}) | ||||
| 
 | ||||
|     # cpp-jwt | ||||
|     add_library(cpp-jwt INTERFACE) | ||||
|  |  | |||
							
								
								
									
										6078
									
								
								externals/httplib/httplib.h
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										6078
									
								
								externals/httplib/httplib.h
									
										
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										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++. | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue