class iox.SshChannel

class SshChannel {
    // enums

    enum State;

    // structs

    struct ConnectParams;

    // fields

    io.SocketAddress readonly m_remoteAddress;
    static string_t const m_stateStringTable[11] = {  "Closed",  "Resolving...",  "Waiting...",  "Connecting...",  "Handhsaking...",  "Authenticating...",  "Authenticating...",  "Opening channel...",  "Requesting PTY...",  "Starting process...",  "Connected",  };

    // properties

    iox.SshChannel.State bindable autoget autoset property m_state;
    bool bindable autoget autoset property m_isTransmitEnabled;

    // events

    event m_onLoginDlgCompleted(
        string_t userName,
        ui.AuthenticationMethod authenticationMethod,
        string_t privateKeyFileName
    );

    event m_onConnected();
    event m_onDisconnected();

    event m_onIncomingData(
        void const* p,
        size_t size
    );

    // construction

    construct(doc.PluginHost* pluginHost);

    // methods

    void close();

    bool errorcode connect(
        string_t addressString,
        iox.SshChannel.ConnectParams const* params
    );

    bool errorcode connect(
        io.SocketAddress const* address,
        iox.SshChannel.ConnectParams const* params
    );

    size_t errorcode read(
        void* p,
        size_t size
    );

    size_t errorcode write(
        void const* p,
        size_t size
    );

    static void initConnectParams(
        iox.SshChannel.ConnectParams* params,
        ui.SocketPropertySet const* socketPropSet,
        ui.SshPropertySet const* sshPropSet,
        ui.BufferPropertySet const* bufferPropSet
    );

    bool errorcode applyProperties(
        ui.SocketPropertySet const* socketPropSet,
        ui.SshPropertySet const* sshPropSet,
        ui.BufferPropertySet const* bufferPropSet
    );

    void waitSshEvents();
    string_t getLastPassword();
    string_t getLastPrivateKeyPassphrase();
};