use serde::{Deserialize, Serialize};
pub const ALPN: &[u8] = b"PAI_SHO/1";
#[derive(Debug, Serialize, Deserialize)]
pub enum Request {
AddPeer {
ticket: String,
},
RemovePeer {
ticket: String,
},
Expose {
port: u16,
to: Vec<String>,
},
Unexpose {
port: u16,
to: Option<String>,
},
List,
Ticket,
GrantToken {
label: String,
},
Pin {
key: String,
label: String,
},
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Response {
Ok,
Ticket(String),
List(ListInfo),
Token(String),
Error(String),
}
#[derive(Debug, Serialize, Deserialize)]
pub struct ListInfo {
pub me: String,
pub peers: Vec<PeerInfo>,
pub i_expose: Vec<u16>,
pub grants: Vec<GrantInfo>,
pub bindings: Vec<BindingInfo>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GrantInfo {
pub port: u16,
pub to: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PeerInfo {
pub key: String,
pub label: Option<String>,
pub online: bool,
pub they_expose: Vec<u16>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct BindingInfo {
pub port: u16,
pub peer: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum PeerMessage {
ExposedPorts(Vec<u16>),
Connect { port: u16 },
Enroll { token: String },
Error(String),
}