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, UInt32 &numCiphers) const;
UInt32 numEnabledCiphers() const;
void enabledCiphers(SSLCipherSuite *ciphers, UInt32 &numCiphers) const; void enabledCiphers(SSLCipherSuite *ciphers, UInt32 numCiphers);
bool allowExpiredCerts() const;
void allowExpiredCerts(bool allow);
bool allowUnknownRoots() const;
void allowUnknownRoots(bool allow);
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 *, UInt32 *);
static OSStatus sslWriteFunc(SSLConnectionRef, const void *, UInt32 *);
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