gpt4 book ai didi

c++ - 将类方法设置为 OpenSSL 回调

转载 作者:行者123 更新时间:2023-11-27 23:36:02 25 4
gpt4 key购买 nike

我正在编写一个使用 OpenSSL 处理加密相关工作的类。如何为 PSK 相关回调指定类的方法?

SSL_set_psk_find_session_callbackSSL_set_psk_use_session_callback

已尝试 std::bind,但出现编译错误:

SSL_set_psk_find_session_callback(ssl, bind(&OpenSslHandler::psk_find_session_cb, this));

Error C2664 'void SSL_set_psk_find_session_callback(SSL *,SSL_psk_find_session_cb_func)': cannot convert argument 2 from 'std::_Binder' to 'SSL_psk_find_session_cb_func'

编辑:有多个 OpenSSLHandler 实例从多个线程调用 - 以处理同时连接

最佳答案

每个连接都有一个唯一的 SSL *专用于该连接。该值将传递给您的回调函数。

您不能指定类实例以用于通过 OpenSSL 接口(interface)进行实例方法调用 - 它严格是 C 而不是 C++。

使用 std::map<SSL *,OpenSslHandler *>extern "C" 中的类似数据结构回调函数来找到合适的类实例来调用实例方法。只需确保正确互斥保护您的数据结构即可。

或者,您可以使用 SSL_set_ex_data() 当你得到你的 SSL *连接,并设置一个 OpenSslHandler *指向 OpenSslHandler 的指针实例 SSL *连接,然后使用 SSL_get_ex_data()检索指针 - 再次在 extern "C" 中回调函数。

要使用get/set 方法,您首先需要通过调用 SSL_get_ex_new_index() 创建一个唯一索引。 .返回的整数索引可以存储在静态类变量中。它在您的应用程序中是唯一的,可以与所有 SSL 对象一起使用以获取/设置 Ex_Data。

关于c++ - 将类方法设置为 OpenSSL 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59160457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com