5ebdc79955
* Instead of creating an OpenSSL context ofor each socket, use a global one and initialize it lazily when the first SecureSocket is created * Load the certificates from our certificate list so SSL certificates sent by servers can be validated. * Add a callback for signalling that certificate validation failed, the default implementation proceeds with the connection anyway (to keep the old behavior). * Introduce BCertificate class, that provides some information about a certificate. Currently it's only used by the callback mentionned above, but it will be possible to get the leaf certificate for the connection after it's established. Review of the API and implementation is welcome, before I start making use of this in HttpRequest and WebKit to allow the user to accept new certificates.
47 lines
1.0 KiB
C++
47 lines
1.0 KiB
C++
/*
|
|
* Copyright 2011, Haiku, Inc. All Rights Reserved.
|
|
* Distributed under the terms of the MIT License.
|
|
*/
|
|
#ifndef _SECURE_SOCKET_H
|
|
#define _SECURE_SOCKET_H
|
|
|
|
|
|
#include <Socket.h>
|
|
|
|
|
|
class BCertificate;
|
|
|
|
|
|
class BSecureSocket : public BSocket {
|
|
public:
|
|
BSecureSocket();
|
|
BSecureSocket(const BNetworkAddress& peer,
|
|
bigtime_t timeout = B_INFINITE_TIMEOUT);
|
|
BSecureSocket(const BSecureSocket& other);
|
|
virtual ~BSecureSocket();
|
|
|
|
virtual bool CertificateVerificationFailed(BCertificate);
|
|
|
|
// BSocket implementation
|
|
|
|
virtual status_t Connect(const BNetworkAddress& peer,
|
|
bigtime_t timeout = B_INFINITE_TIMEOUT);
|
|
virtual void Disconnect();
|
|
|
|
virtual status_t WaitForReadable(bigtime_t timeout
|
|
= B_INFINITE_TIMEOUT) const;
|
|
|
|
// BDataIO implementation
|
|
|
|
virtual ssize_t Read(void* buffer, size_t size);
|
|
virtual ssize_t Write(const void* buffer, size_t size);
|
|
|
|
private:
|
|
friend class BCertificate;
|
|
class Private;
|
|
Private* fPrivate;
|
|
};
|
|
|
|
|
|
#endif // _SECURE_SOCKET_H
|