2017-09-07 2 views
0

J'ai un code qui gère les pointeurs SSL et SSL_CTX avec unique_ptr.en utilisant unique_ptr <SSL> avec OpenSSL v1.1.0

Le code suivant compile avec OpenSSL 1.0.2, mais pas avec OpenSSL 1.1.1:

std::unique_ptr<SSL> m_pSession 

I comprennent 'OpenSSL/ssl.h', mais avec OpenSSL 1.1.1 Je reçois le texte suivant compilez erreur (en utilisant Visual studio):

error C2027: use of undefined type 'ssl_st' 

J'ai googlé un peu et il semble que la version ultérieure de OpenSSL ne fournit pas la véritable déclaration de ssl_st nulle part? Quelle serait la solution à cela?

Répondre

0

Avec l'aide du forum OpenSSL, j'ai trouvé la solution suivante.

Defined un Deleter personnalisé pour unique_ptr:

struct SslDeleter { 
    void operator()(SSL *_p) 
    { 
     SSL_shutdown(_p); 
     SSL_free(_p); 
    } 

    void operator()(SSL_CTX *_p) 
    { 
     SSL_CTX_free(_p); 
    } 
}; 

Utilisez un typedef pour travailler facilement avec les pointeurs intelligents:

using UniqueSslPtr = std::unique_ptr<SSL, SslDeleter>; 

et

using UniqueCtxPtr = std::unique_ptr<SSL_CTX, SslDeleter>; 

Le Deleter personnalisé fonctionne pour SSL et SSL_CTX et devrait également fonctionner pour shared_ptr.