diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/jpegd/image_loader_jpegd.cpp | 54 | ||||
-rw-r--r-- | drivers/openssl/stream_peer_openssl.cpp | 46 | ||||
-rw-r--r-- | drivers/openssl/stream_peer_openssl.h | 1 |
3 files changed, 70 insertions, 31 deletions
diff --git a/drivers/jpegd/image_loader_jpegd.cpp b/drivers/jpegd/image_loader_jpegd.cpp index 9d1263b81b..5339e9f69d 100644 --- a/drivers/jpegd/image_loader_jpegd.cpp +++ b/drivers/jpegd/image_loader_jpegd.cpp @@ -17,23 +17,9 @@ #include <string.h> -Error ImageLoaderJPG::load_image(Image *p_image,FileAccess *f) { - - - DVector<uint8_t> src_image; - int src_image_len = f->get_len(); - ERR_FAIL_COND_V(src_image_len == 0, ERR_FILE_CORRUPT); - src_image.resize(src_image_len); - - DVector<uint8_t>::Write w = src_image.write(); - - f->get_buffer(&w[0],src_image_len); - - f->close(); - +Error jpeg_load_image_from_buffer(Image *p_image,const uint8_t* p_buffer, int p_buffer_len) { - - jpgd::jpeg_decoder_mem_stream mem_stream(w.ptr(),src_image_len); + jpgd::jpeg_decoder_mem_stream mem_stream(p_buffer,p_buffer_len); jpgd::jpeg_decoder decoder(&mem_stream); @@ -85,14 +71,36 @@ Error ImageLoaderJPG::load_image(Image *p_image,FileAccess *f) { fmt=Image::FORMAT_RGBA; dw = DVector<uint8_t>::Write(); - w = DVector<uint8_t>::Write(); - p_image->create(image_width,image_height,0,fmt,data); return OK; } + +Error ImageLoaderJPG::load_image(Image *p_image,FileAccess *f) { + + + DVector<uint8_t> src_image; + int src_image_len = f->get_len(); + ERR_FAIL_COND_V(src_image_len == 0, ERR_FILE_CORRUPT); + src_image.resize(src_image_len); + + DVector<uint8_t>::Write w = src_image.write(); + + f->get_buffer(&w[0],src_image_len); + + f->close(); + + + Error err = jpeg_load_image_from_buffer(p_image,w.ptr(),src_image_len); + + w = DVector<uint8_t>::Write(); + + return err; + +} + void ImageLoaderJPG::get_recognized_extensions(List<String> *p_extensions) const { p_extensions->push_back("jpg"); @@ -100,9 +108,17 @@ void ImageLoaderJPG::get_recognized_extensions(List<String> *p_extensions) const } -ImageLoaderJPG::ImageLoaderJPG() { +static Image _jpegd_mem_loader_func(const uint8_t* p_png,int p_size) { + + Image img; + Error err = jpeg_load_image_from_buffer(&img,p_png,p_size); + return img; +} + +ImageLoaderJPG::ImageLoaderJPG() { + Image::_jpg_mem_loader_func=_jpegd_mem_loader_func; } diff --git a/drivers/openssl/stream_peer_openssl.cpp b/drivers/openssl/stream_peer_openssl.cpp index 81795fdc60..aad3a11b7e 100644 --- a/drivers/openssl/stream_peer_openssl.cpp +++ b/drivers/openssl/stream_peer_openssl.cpp @@ -532,8 +532,26 @@ StreamPeerSSL* StreamPeerOpenSSL::_create_func() { Vector<X509*> StreamPeerOpenSSL::certs; +void StreamPeerOpenSSL::_load_certs(const ByteArray& p_array) { + + ByteArray::Read r = p_array.read(); + BIO* mem = BIO_new(BIO_s_mem()); + BIO_puts(mem,(const char*)r.ptr()); + while(true) { + X509*cert = PEM_read_bio_X509(mem, NULL, 0, NULL); + if (!cert) + break; + certs.push_back(cert); + } + BIO_free(mem); +} + void StreamPeerOpenSSL::initialize_ssl() { + available=true; + + load_certs_func=_load_certs; + _create=_create_func; CRYPTO_malloc_init(); // Initialize malloc, free, etc for OpenSSL's use SSL_library_init(); // Initialize OpenSSL's SSL libraries @@ -544,20 +562,24 @@ void StreamPeerOpenSSL::initialize_ssl() { Globals::get_singleton()->set_custom_property_info("ssl/certificates",PropertyInfo(Variant::STRING,"ssl/certificates",PROPERTY_HINT_FILE,"*.crt")); if (certs_path!="") { - Vector<uint8_t> data = FileAccess::get_file_as_array(certs_path);; - if (data.size()) { - data.push_back(0); - BIO* mem = BIO_new(BIO_s_mem()); - BIO_puts(mem,(const char*) data.ptr()); - while(true) { - X509*cert = PEM_read_bio_X509(mem, NULL, 0, NULL); - if (!cert) - break; - certs.push_back(cert); + + + FileAccess *f=FileAccess::open(certs_path,FileAccess::READ); + if (f) { + ByteArray arr; + int flen = f->get_len(); + arr.resize(flen+1); + { + ByteArray::Write w = arr.write(); + f->get_buffer(w.ptr(),flen); + w[flen]=0; //end f string } - BIO_free(mem); + + memdelete(f); + + _load_certs(arr); + print_line("Loaded certs from '"+certs_path+"': "+itos(certs.size())); } - print_line("Loaded certs from '"+certs_path+"': "+itos(certs.size())); } String config_path =GLOBAL_DEF("ssl/config",""); Globals::get_singleton()->set_custom_property_info("ssl/config",PropertyInfo(Variant::STRING,"ssl/config",PROPERTY_HINT_FILE,"*.cnf")); diff --git a/drivers/openssl/stream_peer_openssl.h b/drivers/openssl/stream_peer_openssl.h index 64f5a1d7ac..20266ee584 100644 --- a/drivers/openssl/stream_peer_openssl.h +++ b/drivers/openssl/stream_peer_openssl.h @@ -54,6 +54,7 @@ private: static Vector<X509*> certs; + static void _load_certs(const ByteArray& p_array); protected: static void _bind_methods(); public: |