Jelajahi Sumber

Generalize SSL cert reading from file

Fabio Alessandrelli 7 tahun lalu
induk
melakukan
490dd9f946

+ 31 - 0
core/io/stream_peer_ssl.cpp

@@ -29,6 +29,8 @@
 /*************************************************************************/
 
 #include "stream_peer_ssl.h"
+#include "os/file_access.h"
+#include "project_settings.h"
 
 StreamPeerSSL *(*StreamPeerSSL::_create)() = NULL;
 
@@ -50,6 +52,35 @@ bool StreamPeerSSL::is_available() {
 	return available;
 }
 
+PoolByteArray StreamPeerSSL::get_project_cert_array() {
+
+	PoolByteArray out;
+	String certs_path = GLOBAL_DEF("network/ssl/certificates", "");
+	ProjectSettings::get_singleton()->set_custom_property_info("network/ssl/certificates", PropertyInfo(Variant::STRING, "network/ssl/certificates", PROPERTY_HINT_FILE, "*.crt"));
+
+	if (certs_path != "") {
+
+		FileAccess *f = FileAccess::open(certs_path, FileAccess::READ);
+		if (f) {
+			int flen = f->get_len();
+			out.resize(flen + 1);
+			{
+				PoolByteArray::Write w = out.write();
+				f->get_buffer(w.ptr(), flen);
+				w[flen] = 0; //end f string
+			}
+
+			memdelete(f);
+
+#ifdef DEBUG_ENABLED
+			print_line("Loaded certs from '" + certs_path);
+#endif
+		}
+	}
+
+	return out;
+}
+
 void StreamPeerSSL::_bind_methods() {
 
 	ClassDB::bind_method(D_METHOD("poll"), &StreamPeerSSL::poll);

+ 1 - 0
core/io/stream_peer_ssl.h

@@ -66,6 +66,7 @@ public:
 
 	static StreamPeerSSL *create();
 
+	static PoolByteArray get_project_cert_array();
 	static void load_certs_from_memory(const PoolByteArray &p_memory);
 	static bool is_available();
 

+ 4 - 22
modules/mbedtls/stream_peer_mbed_tls.cpp

@@ -293,28 +293,10 @@ void StreamPeerMbedTLS::initialize_ssl() {
 	mbedtls_debug_set_threshold(1);
 #endif
 
-	String certs_path = GLOBAL_DEF("network/ssl/certificates", "");
-	ProjectSettings::get_singleton()->set_custom_property_info("network/ssl/certificates", PropertyInfo(Variant::STRING, "network/ssl/certificates", PROPERTY_HINT_FILE, "*.crt"));
-
-	if (certs_path != "") {
-
-		FileAccess *f = FileAccess::open(certs_path, FileAccess::READ);
-		if (f) {
-			PoolByteArray arr;
-			int flen = f->get_len();
-			arr.resize(flen + 1);
-			{
-				PoolByteArray::Write w = arr.write();
-				f->get_buffer(w.ptr(), flen);
-				w[flen] = 0; //end f string
-			}
-
-			memdelete(f);
-
-			_load_certs(arr);
-			print_line("Loaded certs from '" + certs_path);
-		}
-	}
+	PoolByteArray cert_array = StreamPeerSSL::get_project_cert_array();
+
+	if (cert_array.size() > 0)
+		_load_certs(cert_array);
 
 	available = true;
 }

+ 0 - 2
modules/mbedtls/stream_peer_mbed_tls.h

@@ -32,8 +32,6 @@
 #define STREAM_PEER_OPEN_SSL_H
 
 #include "io/stream_peer_ssl.h"
-#include "os/file_access.h"
-#include "project_settings.h"
 
 #include "mbedtls/config.h"
 #include "mbedtls/ctr_drbg.h"