about summary refs log tree commit diff stats
path: root/src/wrapped/wrappedlibssl3.c
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2023-06-10 11:43:14 +0200
committerptitSeb <sebastien.chev@gmail.com>2023-06-10 11:43:14 +0200
commit8ee8301bd078de79d2214ccaeba776afdca91020 (patch)
treeaa7771b78e7faefe62a1d1d9b7bdb1dbedd6c891 /src/wrapped/wrappedlibssl3.c
parent1d584fead4e5df89d62f17521e17de21f81342c8 (diff)
downloadbox64-8ee8301bd078de79d2214ccaeba776afdca91020.tar.gz
box64-8ee8301bd078de79d2214ccaeba776afdca91020.zip
Added a bunch of wrapped function to libssl.so.3, libcrytpo.so.3 and icu (for #829)
Diffstat (limited to 'src/wrapped/wrappedlibssl3.c')
-rwxr-xr-xsrc/wrapped/wrappedlibssl3.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/wrapped/wrappedlibssl3.c b/src/wrapped/wrappedlibssl3.c
index 9c287b56..38ba5444 100755
--- a/src/wrapped/wrappedlibssl3.c
+++ b/src/wrapped/wrappedlibssl3.c
@@ -259,6 +259,30 @@ static void* find_client_cert_Fct(void* fct)
     return NULL;
 }
 
+// alpn_select_cb
+#define GO(A)   \
+static uintptr_t my3_alpn_select_cb_fct_##A = 0;                                                    \
+static int my3_alpn_select_cb_##A(void* a, void* b, void* c, void* d, uint32_t e, void* f)          \
+{                                                                                                   \
+    return (int)RunFunctionFmt(my_context, my3_alpn_select_cb_fct_##A, "ppppup", a, b, c, d, e, f); \
+}
+SUPER()
+#undef GO
+static void* find_alpn_select_cb_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    void* p;
+    if((p = GetNativeFnc((uintptr_t)fct))) return p;
+    #define GO(A) if(my3_alpn_select_cb_fct_##A == (uintptr_t)fct) return my3_alpn_select_cb_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my3_alpn_select_cb_fct_##A == 0) {my3_alpn_select_cb_fct_##A = (uintptr_t)fct; return my3_alpn_select_cb_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libSSL alpn_select_cb callback\n");
+    return NULL;
+}
+
 #undef SUPER
 
 EXPORT void my3_SSL_CTX_set_default_passwd_cb(x64emu_t* emu, void* ctx, void* cb)
@@ -327,6 +351,11 @@ EXPORT void my3_SSL_CTX_set_client_cert_cb(x64emu_t* emu, void* ctx, void* cb)
     my->SSL_CTX_set_client_cert_cb(ctx, find_client_cert_Fct(cb));
 }
 
+EXPORT void my3_SSL_CTX_set_alpn_select_cb(x64emu_t* emu, void* ctx, void* f, void* arg)
+{
+    my->SSL_CTX_set_alpn_select_cb(ctx, find_alpn_select_cb_Fct(f), arg);
+}
+
 #define CUSTOM_INIT \
     SETALT(my3_);   \
     getMy(lib);     \