use serde::{Deserialize, Serialize};
pub const ALPN: &[u8] = b"PAI_SHO/1";
#[derive(Debug, Serialize, Deserialize)]
pub enum Request {
Invite {
key: Option<String>,
name: Option<String>,
expose: Vec<u16>,
},
Accept {
handle: String,
name: Option<String>,
},
Forget {
peer: String,
},
Expose {
port: u16,
to: Vec<String>,
all: bool,
},
Unexpose {
port: u16,
to: Option<String>,
},
List,
Key,
Project {
peer: String,
ip: Option<String>,
name: Option<String>,
},
Unproject {
peer: String,
},
}
#[derive(Debug, Serialize, Deserialize)]
pub enum Response {
Ok,
Key(String),
List(ListInfo),
Invite(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>,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct GrantInfo {
pub port: u16,
pub to: String,
}
#[derive(Debug, Serialize, Deserialize)]
pub struct PeerInfo {
pub key: String,
pub name: Option<String>,
pub online: bool,
pub admission: String,
pub they_expose: Vec<u16>,
pub ip: Option<String>,
pub bound: Vec<u16>,
}
#[derive(Debug, Serialize, Deserialize)]
pub enum PeerMessage {
ExposedPorts(Vec<u16>),
Connect { port: u16 },
Enroll { token: String },
Error(String),
}