/* */ #ifndef TLS_SESSION_H #define TLS_SESSION_H #include "common.h" // To create another SSL/TLS backend, implement TLSSession class below. // // class TLSSession { // public: // TLSSession(TLSContext* tlsContext); // // // MUST deallocate all resources // ~TLSSession(); // // // Initializes SSL/TLS session. The |sockfd| is the underlying // // tranport socket. This function returns TLS_ERR_OK if it // // succeeds, or TLS_ERR_ERROR. // int init(sock_t sockfd); // // // Sets |hostname| for TLS SNI extension. This is only meaningful for // // client side session. This function returns TLS_ERR_OK if it // // succeeds, or TLS_ERR_ERROR. // int setSNIHostname(const std::string& hostname); // // // Closes the SSL/TLS session. Don't close underlying transport // // socket. This function returns TLS_ERR_OK if it succeeds, or // // TLS_ERR_ERROR. // int closeConnection(); // // // Returns TLS_WANT_READ if SSL/TLS session needs more data from // // remote endpoint to proceed, or TLS_WANT_WRITE if SSL/TLS session // // needs to write more data to proceed. If SSL/TLS session needs // // neither read nor write data at the moment, return value is // // undefined. // int checkDirection(); // // // Sends |data| with length |len|. This function returns the number // // of bytes sent if it succeeds, or TLS_ERR_WOULDBLOCK if the // // underlying tranport blocks, or TLS_ERR_ERROR. // ssize_t writeData(const void* data, size_t len); // // // Receives data into |data| with length |len|. This function returns // // the number of bytes received if it succeeds, or TLS_ERR_WOULDBLOCK // // if the underlying tranport blocks, or TLS_ERR_ERROR. // ssize_t readData(void* data, size_t len); // // // Performs client side handshake. The |hostname| is the hostname of // // the remote endpoint and is used to verify its certificate. This // // function returns TLS_ERR_OK if it succeeds, or TLS_ERR_WOULDBLOCK // // if the underlying transport blocks, or TLS_ERR_ERROR. // // When returning TLS_ERR_ERROR, provide certificate validation error // // in |handshakeErr|. // int tlsConnect(const std::string& hostname, std::string& handshakeErr); // // // Performs server side handshake. This function returns TLS_ERR_OK // // if it succeeds, or TLS_ERR_WOULDBLOCK if the underlying transport // // blocks, or TLS_ERR_ERROR. // int tlsAccept(); // // // Returns last error string // std::string getLastErrorString(); // }; #ifdef HAVE_OPENSSL # include "LibsslTLSSession.h" #elif defined HAVE_LIBGNUTLS # include "LibgnutlsTLSSession.h" #endif #endif // TLS_SESSION_H