@@ -4,6 +4,7 @@ use std::sync::Arc;
4
4
use std:: time:: Duration ;
5
5
6
6
use colored:: Colorize ;
7
+ use log:: debug;
7
8
use reqwest:: { Client as HttpClient , Url } ;
8
9
9
10
use super :: config:: Configuration ;
@@ -38,7 +39,7 @@ impl Service {
38
39
39
40
let mut check_results = vec ! [ ] ;
40
41
41
- self . check_udp_trackers ( ) ;
42
+ self . check_udp_trackers ( & mut check_results ) . await ;
42
43
43
44
self . check_http_trackers ( & mut check_results) . await ;
44
45
@@ -47,11 +48,44 @@ impl Service {
47
48
check_results
48
49
}
49
50
50
- fn check_udp_trackers ( & self ) {
51
+ async fn check_udp_trackers ( & self , check_results : & mut Vec < CheckResult > ) {
51
52
self . console . println ( "UDP trackers ..." ) ;
52
53
53
54
for udp_tracker in & self . config . udp_trackers {
54
- self . check_udp_tracker ( udp_tracker) ;
55
+ let colored_tracker_url = udp_tracker. to_string ( ) . yellow ( ) ;
56
+
57
+ /* todo:
58
+ - Initialize the UDP client
59
+ - Pass the connected client the the check function
60
+ - Connect to the tracker
61
+ - Make the request (announce or scrape)
62
+ */
63
+
64
+ match self . check_udp_announce ( udp_tracker) . await {
65
+ Ok ( ( ) ) => {
66
+ check_results. push ( Ok ( ( ) ) ) ;
67
+ self . console
68
+ . println ( & format ! ( "{} - Announce at {} is OK" , "✓" . green( ) , colored_tracker_url) ) ;
69
+ }
70
+ Err ( err) => {
71
+ check_results. push ( Err ( err) ) ;
72
+ self . console
73
+ . println ( & format ! ( "{} - Announce at {} is failing" , "✗" . red( ) , colored_tracker_url) ) ;
74
+ }
75
+ }
76
+
77
+ match self . check_udp_scrape ( udp_tracker) . await {
78
+ Ok ( ( ) ) => {
79
+ check_results. push ( Ok ( ( ) ) ) ;
80
+ self . console
81
+ . println ( & format ! ( "{} - Scrape at {} is OK" , "✓" . green( ) , colored_tracker_url) ) ;
82
+ }
83
+ Err ( err) => {
84
+ check_results. push ( Err ( err) ) ;
85
+ self . console
86
+ . println ( & format ! ( "{} - Scrape at {} is failing" , "✗" . red( ) , colored_tracker_url) ) ;
87
+ }
88
+ }
55
89
}
56
90
}
57
91
@@ -65,7 +99,7 @@ impl Service {
65
99
Ok ( ( ) ) => {
66
100
check_results. push ( Ok ( ( ) ) ) ;
67
101
self . console
68
- . println ( & format ! ( "{} - Announce at {} is OK" , "✓" . green( ) , colored_tracker_url) ) ;
102
+ . println ( & format ! ( "{} - Announce at {} is OK (TODO) " , "✓" . green( ) , colored_tracker_url) ) ;
69
103
}
70
104
Err ( err) => {
71
105
check_results. push ( Err ( err) ) ;
@@ -78,7 +112,7 @@ impl Service {
78
112
Ok ( ( ) ) => {
79
113
check_results. push ( Ok ( ( ) ) ) ;
80
114
self . console
81
- . println ( & format ! ( "{} - Scrape at {} is OK" , "✓" . green( ) , colored_tracker_url) ) ;
115
+ . println ( & format ! ( "{} - Scrape at {} is OK (TODO) " , "✓" . green( ) , colored_tracker_url) ) ;
82
116
}
83
117
Err ( err) => {
84
118
check_results. push ( Err ( err) ) ;
@@ -100,37 +134,39 @@ impl Service {
100
134
}
101
135
}
102
136
103
- fn check_udp_tracker ( & self , address : & SocketAddr ) {
104
- // todo:
105
- // - Make announce request
106
- // - Make scrape request
107
-
108
- let colored_address = address. to_string ( ) . yellow ( ) ;
137
+ #[ allow( clippy:: unused_async) ]
138
+ async fn check_udp_announce ( & self , tracker_socket_addr : & SocketAddr ) -> Result < ( ) , CheckError > {
139
+ debug ! ( "{tracker_socket_addr}" ) ;
140
+ Ok ( ( ) )
141
+ }
109
142
110
- self . console . println ( & format ! (
111
- "{} - UDP tracker at udp://{} is OK ({})" ,
112
- "✓" . green( ) ,
113
- colored_address,
114
- "TODO" . red( ) ,
115
- ) ) ;
143
+ #[ allow( clippy:: unused_async) ]
144
+ async fn check_udp_scrape ( & self , tracker_socket_addr : & SocketAddr ) -> Result < ( ) , CheckError > {
145
+ debug ! ( "{tracker_socket_addr}" ) ;
146
+ Ok ( ( ) )
116
147
}
117
148
118
- async fn check_http_announce ( & self , url : & Url ) -> Result < ( ) , CheckError > {
149
+ async fn check_http_announce ( & self , tracker_url : & Url ) -> Result < ( ) , CheckError > {
119
150
let info_hash_str = "9c38422213e30bff212b30c360d26f9a02136422" . to_string ( ) ; // # DevSkim: ignore DS173237
120
151
let info_hash = InfoHash :: from_str ( & info_hash_str) . expect ( "a valid info-hash is required" ) ;
121
152
122
- let response = Client :: new ( url . clone ( ) )
153
+ let response = Client :: new ( tracker_url . clone ( ) )
123
154
. announce ( & QueryBuilder :: with_default_values ( ) . with_info_hash ( & info_hash) . query ( ) )
124
155
. await ;
125
156
126
157
if let Ok ( body) = response. bytes ( ) . await {
127
158
if let Ok ( _announce_response) = serde_bencode:: from_bytes :: < Announce > ( & body) {
128
159
Ok ( ( ) )
129
160
} else {
130
- Err ( CheckError :: HttpError { url : url. clone ( ) } )
161
+ debug ! ( "announce body {:#?}" , body) ;
162
+ Err ( CheckError :: HttpError {
163
+ url : tracker_url. clone ( ) ,
164
+ } )
131
165
}
132
166
} else {
133
- Err ( CheckError :: HttpError { url : url. clone ( ) } )
167
+ Err ( CheckError :: HttpError {
168
+ url : tracker_url. clone ( ) ,
169
+ } )
134
170
}
135
171
}
136
172
@@ -144,6 +180,7 @@ impl Service {
144
180
if let Ok ( _scrape_response) = scrape:: Response :: try_from_bencoded ( & body) {
145
181
Ok ( ( ) )
146
182
} else {
183
+ debug ! ( "scrape body {:#?}" , body) ;
147
184
Err ( CheckError :: HttpError { url : url. clone ( ) } )
148
185
}
149
186
} else {
0 commit comments