#![feature(globs)]
#![feature(phase)]
#[phase(plugin, link)] extern crate log;
use std::sync::{Once, ONCE_INIT};
pub mod libssh_server;
pub mod libssh;
pub mod ssh_key;
pub mod ssh_session;
pub mod ssh_bind;
pub mod ssh_message;
static SSH_INIT: Once = ONCE_INIT;
pub fn ssh_init() {
SSH_INIT.doit(|| {
unsafe { libssh::ssh_init() };
})
}
pub fn ssh_finalize() {
debug!("calling ssh_finalize().");
unsafe { libssh::ssh_finalize() };
}
pub struct SSHFinalizer;
impl Drop for SSHFinalizer {
fn drop(&mut self) {
ssh_finalize();
}
}
pub fn with_ssh(func: ||) {
ssh_init();
let finalizer = SSHFinalizer;
func();
drop(finalizer);
}