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::*;