#![deny(missing_docs)]
#![doc(html_root_url = "https://docs.rs/stund_protocol/0.1.4")]
extern crate bytes;
extern crate dirs;
#[macro_use] extern crate failure;
#[macro_use] extern crate futures;
extern crate libc;
extern crate serde;
#[macro_use] extern crate serde_derive;
#[macro_use] extern crate state_machine_future;
extern crate tokio_codec;
extern crate tokio_core;
extern crate tokio_io;
extern crate tokio_serde_bincode;
extern crate tokio_uds;
use failure::Error;
use std::path::PathBuf;
pub mod codecs;
pub mod client;
pub fn get_socket_path() -> Result<PathBuf, Error> {
let mut p = dirs::home_dir().ok_or(format_err!("unable to determine your home directory"))?;
p.push(".ssh");
p.push("stund.sock");
Ok(p)
}
#[derive(Debug, Deserialize, PartialEq, Serialize)]
pub enum ClientMessage {
Open(OpenParameters),
UserData(Vec<u8>),
Close(CloseParameters),
QueryStatus,
Exit,
Goodbye,
}
#[derive(Debug, Deserialize, PartialEq, Serialize)]
pub enum ServerMessage {
Ok,
Error(String),
SshData(Vec<u8>),
TunnelAlreadyOpen,
TunnelNotOpen,
StatusResponse(StatusInformation),
}
#[derive(Debug, Deserialize, PartialEq, Serialize)]
pub struct OpenParameters {
pub host: String,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum OpenResult {
Success,
AlreadyOpen,
}
#[derive(Debug, Deserialize, PartialEq, Serialize)]
pub struct CloseParameters {
pub host: String,
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum CloseResult {
Success,
NotOpen,
}
#[derive(Debug, Deserialize, PartialEq, Serialize)]
pub struct StatusInformation {
pub tunnels: Vec<TunnelInformation>,
}
#[derive(Debug, Deserialize, PartialEq, Serialize)]
pub struct TunnelInformation {
pub host: String,
pub state: TunnelState,
}
#[derive(Debug, Deserialize, PartialEq, Serialize)]
pub enum TunnelState {
Open,
Closed,
Died,
}