libssh-sys 0.1.0

FFI bindings for libssh
use libssh_sys::*;
use std::ffi::{CStr, CString};
use std::os::raw::{c_int, c_void};

fn main() -> Result<(), String> {
    unsafe {
        let verbosity = SSH_LOG_PROTOCOL;
        let host = CString::new("localhost").unwrap();
        let port: c_int = 22;

        let my_ssh_session = ssh_new();
        if my_ssh_session.is_null() {
            return Err("creating a session".to_string());
        }

        ssh_options_set(
            my_ssh_session,
            SSH_OPTIONS_LOG_VERBOSITY,
            &verbosity as *const c_int as *const c_void,
        );
        ssh_options_set(
            my_ssh_session,
            SSH_OPTIONS_HOST,
            host.as_ptr() as *const c_void,
        );
        ssh_options_set(
            my_ssh_session,
            SSH_OPTIONS_PORT,
            &port as *const c_int as *const c_void,
        );

        if ssh_connect(my_ssh_session) != SSH_OK {
            let error = CStr::from_ptr(ssh_get_error(my_ssh_session as *mut c_void));
            return Err(format!("connecting to localhost: {:?}", error));
        }

        // TODO
        // - authenticate the server
        // - authenticate the user
        // - do something

        ssh_disconnect(my_ssh_session);
        ssh_free(my_ssh_session);
    }
    Ok(())
}