securetransport++.h [plain text]
#ifndef _H_SECURETRANSPORTPLUSPLUS
#define _H_SECURETRANSPORTPLUSPLUS
#include <Security/ip++.h>
#include <Security/SecureTransport.h>
namespace Security {
namespace IPPlusPlus {
class SecureTransportCore {
public:
SecureTransportCore();
virtual ~SecureTransportCore();
void open(); void close();
SSLSessionState state() const;
SSLProtocol version() const;
void version(SSLProtocol v);
UInt32 numSupportedCiphers() const;
void supportedCiphers(SSLCipherSuite *ciphers, size_t &numCiphers) const;
UInt32 numEnabledCiphers() const;
void enabledCiphers(SSLCipherSuite *ciphers, size_t &numCiphers) const; void enabledCiphers(SSLCipherSuite *ciphers, size_t numCiphers);
bool allowsExpiredCerts() const;
void allowsExpiredCerts(bool allow);
bool allowsUnknownRoots() const;
void allowsUnknownRoots(bool allow);
void peerId(const void *data, size_t length);
template <class T> void peerId(const T &obj) { peerId(&obj, sizeof(obj)); }
size_t read(void *data, size_t length);
size_t write(const void *data, size_t length);
bool atEnd() const { return mAtEnd; }
protected:
virtual size_t ioRead(void *data, size_t length) const = 0;
virtual size_t ioWrite(const void *data, size_t length) const = 0;
virtual bool ioAtEnd() const = 0;
private:
static OSStatus sslReadFunc(SSLConnectionRef, void *, size_t *);
static OSStatus sslWriteFunc(SSLConnectionRef, const void *, size_t *);
bool continueHandshake();
private:
SSLContextRef mContext; bool mAtEnd; };
template <class IO>
class SecureTransport : public SecureTransportCore {
public:
SecureTransport(IO &ioRef) : io(ioRef) { }
~SecureTransport() { close(); }
IO &io;
private:
size_t ioRead(void *data, size_t length) const { return io.read(data, length); }
size_t ioWrite(const void *data, size_t length) const { return io.write(data, length); }
bool ioAtEnd() const { return io.atEnd(); }
};
} }
#endif //_H_SECURETRANSPORTPLUSPLUS