ppaass_v3_protocol/
message.rs1use crate::UnifiedAddress;
2use bytes::Bytes;
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5#[derive(Debug, Serialize, Deserialize, Clone)]
8pub enum Encryption {
9 Plain,
11 Aes(#[serde(with = "crate::hex")] Bytes),
13 Blowfish(#[serde(with = "crate::hex")] Bytes),
15}
16
17#[derive(Debug, Serialize, Deserialize, Clone)]
27pub struct HandshakeRequest {
28 pub authentication: String,
31 pub encryption: Encryption,
33}
34
35#[derive(Debug, Serialize, Deserialize, Clone)]
38pub struct HandshakeResponse {
39 pub encryption: Encryption,
41}
42
43#[derive(Debug, Serialize, Deserialize, Clone)]
44pub enum TunnelControlRequest {
45 Heartbeat(HeartbeatRequest),
46 TunnelInit(TunnelInitRequest),
47}
48
49#[derive(Debug, Serialize, Deserialize, Clone)]
50pub enum TunnelControlResponse {
51 Heartbeat(HeartbeatResponse),
52 TunnelInit(TunnelInitResponse),
53}
54
55#[derive(Debug, Serialize, Deserialize, Clone)]
57pub struct TunnelInitRequest {
58 pub destination_address: UnifiedAddress,
60 pub keep_alive: bool,
62}
63
64#[derive(Debug, Serialize, Deserialize, Clone)]
66pub enum TunnelInitFailureReason {
67 AuthenticateFail,
69 InitWithDestinationFail,
71}
72
73#[derive(Debug, Serialize, Deserialize, Clone)]
75pub enum TunnelInitResponse {
76 Success,
77 Failure(TunnelInitFailureReason),
78}
79
80#[derive(Debug, Serialize, Deserialize, Clone)]
81pub struct HeartbeatRequest {
82 request_date_time: DateTime<Utc>,
83}
84
85impl HeartbeatRequest {
86 pub fn new() -> Self {
87 Self {
88 request_date_time: Utc::now(),
89 }
90 }
91
92 pub fn request_date_time(&self) -> &DateTime<Utc> {
93 &self.request_date_time
94 }
95}
96
97#[derive(Debug, Serialize, Deserialize, Clone)]
98pub struct HeartbeatResponse {
99 response_date_time: DateTime<Utc>,
100}
101
102impl HeartbeatResponse {
103 pub fn new() -> Self {
104 Self {
105 response_date_time: Utc::now(),
106 }
107 }
108
109 pub fn response_date_time(&self) -> &DateTime<Utc> {
110 &self.response_date_time
111 }
112}