1
1
use clap:: Arg ;
2
2
use clap:: ArgAction ;
3
+ use clap:: ArgMatches ;
3
4
use clap:: Command ;
4
5
use dephy_pproxy:: command:: PProxyCommander ;
5
6
use dephy_pproxy:: gateway:: proxy_gateway;
@@ -12,7 +13,8 @@ fn parse_args() -> Command {
12
13
. about ( "A proxy tool based on p2p network" )
13
14
. version ( "0.1.0" ) ;
14
15
15
- app = app
16
+ let serve = Command :: new ( "serve" )
17
+ . about ( "Start a pproxy server" )
16
18
. arg (
17
19
Arg :: new ( "KEY" )
18
20
. long ( "key" )
@@ -42,6 +44,17 @@ fn parse_args() -> Command {
42
44
. num_args ( 1 )
43
45
. action ( ArgAction :: Set )
44
46
. help ( "Will reverse proxy this address if set" ) ,
47
+ ) ;
48
+
49
+ let gateway = Command :: new ( "gateway" )
50
+ . about ( "Set up a local server that allows users proxy data to remote peer" )
51
+ . arg (
52
+ Arg :: new ( "COMMANDER_SERVER_ADDR" )
53
+ . long ( "commander-server-addr" )
54
+ . num_args ( 1 )
55
+ . default_value ( "127.0.0.1:10086" )
56
+ . action ( ArgAction :: Set )
57
+ . help ( "Commander server address" ) ,
45
58
)
46
59
. arg (
47
60
Arg :: new ( "PROXY_GATEWAY_ADDR" )
@@ -50,18 +63,21 @@ fn parse_args() -> Command {
50
63
. default_value ( "127.0.0.1:10000" )
51
64
. action ( ArgAction :: Set )
52
65
. help ( "Set up a local HTTP server that allows users use peerid header to proxy requests to remote peer" ) ,
66
+ )
67
+ . arg (
68
+ Arg :: new ( "PEER_MULTIADDR" )
69
+ . long ( "peer-multiaddr" )
70
+ . num_args ( 1 )
71
+ . action ( ArgAction :: Set )
72
+ . required ( true )
73
+ . help ( "The multiaddr of the remote peer" ) ,
53
74
) ;
54
75
76
+ app = app. subcommand ( serve) . subcommand ( gateway) ;
55
77
app
56
78
}
57
79
58
- #[ tokio:: main]
59
- async fn main ( ) {
60
- let _ = tracing_subscriber:: fmt ( )
61
- . with_env_filter ( tracing_subscriber:: EnvFilter :: from_default_env ( ) )
62
- . try_init ( ) ;
63
-
64
- let args = parse_args ( ) . get_matches ( ) ;
80
+ async fn serve ( args : & ArgMatches ) {
65
81
let key = args
66
82
. get_one :: < String > ( "KEY" )
67
83
. map ( |key| {
@@ -85,15 +101,9 @@ async fn main() {
85
101
let proxy_addr = args
86
102
. get_one :: < String > ( "PROXY_ADDR" )
87
103
. map ( |addr| addr. parse ( ) . expect ( "Invalid proxy address" ) ) ;
88
- let proxy_gateway_addr = args
89
- . get_one :: < String > ( "PROXY_GATEWAY_ADDR" )
90
- . unwrap ( )
91
- . parse ( )
92
- . expect ( "Invalid proxy gateway address" ) ;
93
104
94
105
println ! ( "server_addr: {}" , server_addr) ;
95
106
println ! ( "commander_server_addr: {}" , commander_server_addr) ;
96
- println ! ( "proxy_gateway_addr: {}" , proxy_gateway_addr) ;
97
107
98
108
let ( pproxy, pproxy_handle) = PProxy :: new ( key, server_addr, proxy_addr) ;
99
109
@@ -109,11 +119,45 @@ async fn main() {
109
119
. await
110
120
. expect( "Commander server failed" )
111
121
} ,
112
- async move {
113
- proxy_gateway( proxy_gateway_addr, commander_server_addr)
114
- . await
115
- . expect( "Gateway server failed" )
116
- } ,
117
122
async move { pproxy. run( ) . await }
118
123
) ;
119
124
}
125
+
126
+ async fn gateway ( args : & ArgMatches ) {
127
+ let commander_server_addr = args
128
+ . get_one :: < String > ( "COMMANDER_SERVER_ADDR" )
129
+ . unwrap ( )
130
+ . parse ( )
131
+ . expect ( "Invalid command server address" ) ;
132
+ let proxy_gateway_addr = args
133
+ . get_one :: < String > ( "PROXY_GATEWAY_ADDR" )
134
+ . unwrap ( )
135
+ . parse ( )
136
+ . expect ( "Invalid proxy gateway address" ) ;
137
+ let peer_multiaddr = args
138
+ . get_one :: < String > ( "PEER_MULTIADDR" )
139
+ . unwrap ( )
140
+ . parse ( )
141
+ . expect ( "Missing peer multiaddr" ) ;
142
+ println ! ( "proxy_gateway_addr: {}" , proxy_gateway_addr) ;
143
+ proxy_gateway ( proxy_gateway_addr, commander_server_addr, peer_multiaddr)
144
+ . await
145
+ . expect ( "Gateway server failed" )
146
+ }
147
+
148
+ #[ tokio:: main]
149
+ async fn main ( ) {
150
+ let _ = tracing_subscriber:: fmt ( )
151
+ . with_env_filter ( tracing_subscriber:: EnvFilter :: from_default_env ( ) )
152
+ . try_init ( ) ;
153
+
154
+ let args = parse_args ( ) . get_matches ( ) ;
155
+
156
+ if let Some ( args) = args. subcommand_matches ( "serve" ) {
157
+ serve ( args) . await ;
158
+ }
159
+
160
+ if let Some ( args) = args. subcommand_matches ( "gateway" ) {
161
+ gateway ( args) . await ;
162
+ }
163
+ }
0 commit comments