Обратный вызов сертификата проверки OpenSSL - возможно ли использовать лямбда-функцию или функцию класса для обратного вызова? - PullRequest
0 голосов
/ 27 марта 2020

Можно ли перейти к этой функции:

 void SSL_CTX_set_verify(SSL_CTX *ctx, int mode, int (*verify_callback)(int, X509_STORE_CTX *));

лямбда-функция с & или этим параметром? Или мне нужно использовать глобальную переменную?

Я пробовал

auto lambda = [this](int preverify_ok, X509_STORE_CTX* x509_ctx) {
    return 0;
};

, но, как вы знаете, вероятно, это не работает, потому что Нет оператора преобразования, определенного пользователем доступно, что может выполнить это преобразование, или оператор не может быть вызван . Без этого параметра он работает хорошо.

Я бы хотел избежать использования глобальной переменной. Я использую сейчас C ++ 17. Я знаю, что не было возможности передать функцию класса в старом C ++, но, может быть, времена уже изменились?

1 Ответ

1 голос
/ 27 марта 2020

Нет, вы можете преобразовать только лямбда-функцию без перехватов в указатель функции.

Вместо этого используйте SSL_CTX_set_ex_data и SSL_CTX_get_ex_data для сохранения sh ваш this указатель в SSL_CTX объекте. Вы можете получить аргумент idx, вызвав SSL_CTX_get_ex_new_index один раз в начале вашей программы.

...