class io.SslState

class SslState {
    // properties

    size_t const property m_availableCipherCount;
    io.SslCipher* const indexed property m_availableCipherSet(size_t i);
    io.SslCipher* const property m_currentCipher;
    size_t const property m_peerCertificateChainLength;
    io.SslCertificate const* const indexed property m_peerCertificateChain(size_t i);
    io.SslCertificate const* const property m_peerCertificate;
    io.SslVerifyMode property m_verifyMode;
    size_t property m_verifyDepth;
    string_t const property m_stateString;
    string_t const property m_stateStringLong;

    // events

    event m_onStateChanged(
        io.SslStateFlags flags,
        int alertInfo
    );

    // construction

    construct();
    destruct();

    // methods

    bool errorcode enableCiphers(string_t ciphers);
    bool errorcode setEphemeralDhParams(string_t pem);
    bool errorcode loadEphemeralDhParams(string_t fileName);
    bool errorcode setEphemeralDhStdParams(io.SslStdDh dh = SslStdDh.Dh1024x160);
    bool errorcode setEphemeralEcdhCurve(string_t curveName = "secp112r1");
    bool errorcode loadCertificate(string_t fileName);
    bool errorcode loadPrivateKey(string_t fileName);

    bool errorcode loadVerifyLocations(
        string_t caFileName,
        string_t caDir = null
    );

    bool errorcode shutdown();
};