/** * TLS Client Header File * (C) 2004-2006 Jack Lloyd * * Released under the terms of the Botan license */ #ifndef BOTAN_CLIENT_H__ #define BOTAN_CLIENT_H__ #include #include #include #include namespace Botan { /** * TLS Client */ // FIXME: much of this can probably be moved up to TLS_Connection class BOTAN_DLL TLS_Client : public TLS_Connection { public: u32bit read(byte[], u32bit); void write(const byte[], u32bit); std::vector peer_cert_chain() const; void close(); bool is_closed() const; TLS_Client(RandomNumberGenerator& rng, Socket&, const Policy* = 0); // FIXME: support multiple cert/key pairs TLS_Client(RandomNumberGenerator& rng, Socket&, const X509_Certificate&, const PKCS8_PrivateKey&, const Policy* = 0); ~TLS_Client(); private: void close(Alert_Level, Alert_Type); void initialize(); void do_handshake(); void state_machine(); void read_handshake(byte, const MemoryRegion&); void process_handshake_msg(Handshake_Type, const MemoryRegion&); RandomNumberGenerator& rng; Record_Writer writer; Record_Reader reader; const Policy* policy; std::vector certs, peer_certs; std::vector keys; Handshake_State* state; SecureVector session_id; SecureQueue read_buf; std::string peer_id; bool active; }; } #endif