cyfs_bdt/protocol/
mod.rs

1#[macro_export]
2
3macro_rules! downcast_sn_handle {
4    ($dynamic_package: expr, $handler: expr) => {
5        match $dynamic_package.cmd_code() {
6            protocol::PackageCmdCode::SnCall => $handler($dynamic_package.as_any().downcast_ref::<protocol::SnCall>().unwrap()),
7            protocol::PackageCmdCode::SnCallResp => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::SnCallResp>().unwrap()),
8            protocol::PackageCmdCode::SnCalled => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::SnCalled>().unwrap()),
9            protocol::PackageCmdCode::SnCalledResp => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::SnCalledResp>().unwrap()),
10            protocol::PackageCmdCode::SnPing => $handler($dynamic_package.as_any().downcast_ref::<protocol::SnPing>().unwrap()),
11            protocol::PackageCmdCode::SnPingResp => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::SnPingResp>().unwrap()),
12            _ => panic!()
13        }
14    }
15}
16
17macro_rules! downcast_tunnel_handle {
18    ($dynamic_package: expr, $handler: expr) => {
19        match $dynamic_package.cmd_code() {
20            protocol::PackageCmdCode::SynTunnel => $handler($dynamic_package.as_any().downcast_ref::<protocol::SynTunnel>().unwrap()),
21            protocol::PackageCmdCode::AckTunnel => $handler($dynamic_package.as_any().downcast_ref::<protocol::AckTunnel>().unwrap()),
22            protocol::PackageCmdCode::AckAckTunnel => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::AckAckTunnel>().unwrap()),
23            protocol::PackageCmdCode::PingTunnel => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::PingTunnel>().unwrap()),
24            protocol::PackageCmdCode::PingTunnelResp => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::PingTunnelResp>().unwrap()),
25            protocol::PackageCmdCode::Datagram => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::Datagram>().unwrap()),
26            protocol::PackageCmdCode::SessionData => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::SessionData>().unwrap()),
27            protocol::PackageCmdCode::TcpSynConnection => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::TcpSynConnection>().unwrap()),
28            _ => panic!()
29        }
30    }
31}
32
33macro_rules! downcast_tcp_stream_handle {
34    ($dynamic_package: expr, $handler: expr) => {
35        match $dynamic_package.cmd_code() {
36            protocol::PackageCmdCode::TcpSynConnection => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::TcpSynConnection>().unwrap()),
37            protocol::PackageCmdCode::TcpAckConnection => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::TcpAckConnection>().unwrap()),
38            protocol::PackageCmdCode::TcpAckAckConnection => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::TcpAckAckConnection>().unwrap()),
39            _ => panic!()
40        }
41    }
42}
43
44macro_rules! downcast_session_handle {
45    ($dynamic_package: expr, $handler: expr) => {
46        match $dynamic_package.cmd_code() {
47            protocol::PackageCmdCode::Datagram => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::Datagram>().unwrap()),
48            protocol::PackageCmdCode::SessionData => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::SessionData>().unwrap()),
49            protocol::PackageCmdCode::TcpSynConnection => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::TcpSynConnection>().unwrap()),
50            _ => panic!()
51        }
52    }
53}
54
55macro_rules! downcast_proxy_handle {
56    ($dynamic_package: expr, $handler: expr) => {
57        match $dynamic_package.cmd_code() {
58            protocol::PackageCmdCode::SynProxy => $handler($dynamic_package.as_any().downcast_ref::<protocol::SynProxy>().unwrap()),
59            protocol::PackageCmdCode::AckProxy => $handler($dynamic_package.as_any().downcast_ref::<protocol::v0::AckProxy>().unwrap()),
60            _ => panic!()
61        }
62    }
63}
64
65
66macro_rules! downcast_handle {
67    ($dynamic_package: expr, $handler: expr) => {
68        if $dynamic_package.cmd_code().is_exchange() {
69            $handler($dynamic_package.as_any().downcast_ref::<protocol::Exchange>().unwrap())
70        } else if $dynamic_package.cmd_code().is_tunnel() {
71            downcast_tunnel_handle!($dynamic_package, $handler)
72        } else if $dynamic_package.cmd_code().is_sn() {
73            downcast_sn_handle!($dynamic_package, $handler)
74        } else if $dynamic_package.cmd_code().is_proxy() {
75            downcast_proxy_handle!($dynamic_package, $handler)
76        } else {
77            downcast_tcp_stream_handle!($dynamic_package, $handler)
78        }
79    };
80    ($dynamic_package: expr) => {
81        downcast_handle!($dynamic_package, |p| p)
82    };
83}
84
85mod common;
86mod package;
87mod package_box;
88pub mod v0;
89
90pub use common::*;
91pub use package::*;
92pub use package_box::*;