MCPcopy Create free account
hub / github.com/DNSCrypt/encrypted-dns-server / handle_client_query

Function handle_client_query

src/main.rs:168–257  ·  view source on GitHub ↗
(
    globals: Arc<Globals>,
    client_ctx: ClientCtx,
    encrypted_packet: Vec<u8>,
)

Source from the content-addressed store, hash-verified

166}
167
168async fn handle_client_query(
169 globals: Arc<Globals>,
170 client_ctx: ClientCtx,
171 encrypted_packet: Vec<u8>,
172) -> Result<(), Error> {
173 let original_packet_size = encrypted_packet.len();
174 ensure!(original_packet_size >= DNS_HEADER_SIZE, "Short packet");
175 debug_assert!(DNSCRYPT_QUERY_MIN_OVERHEAD > ANONYMIZED_DNSCRYPT_QUERY_MAGIC.len());
176 if globals.anonymized_dns_enabled
177 && original_packet_size >= ANONYMIZED_DNSCRYPT_QUERY_MAGIC.len() + DNS_HEADER_SIZE
178 && encrypted_packet[..ANONYMIZED_DNSCRYPT_QUERY_MAGIC.len()]
179 == ANONYMIZED_DNSCRYPT_QUERY_MAGIC
180 {
181 return handle_anonymized_dns(
182 globals,
183 client_ctx,
184 &encrypted_packet[ANONYMIZED_DNSCRYPT_QUERY_MAGIC.len()..],
185 )
186 .await;
187 }
188 if !globals.dnscrypt_enabled {
189 return Ok(());
190 }
191 let mut dnscrypt_encryption_params_set = vec![];
192 for params in &**globals.dnscrypt_encryption_params_set.read() {
193 dnscrypt_encryption_params_set.push((*params).clone())
194 }
195 let over_udp = matches!(&client_ctx, ClientCtx::Udp(_));
196 let (enc_params, mut packet) =
197 match dnscrypt::decrypt(
198 &encrypted_packet,
199 &dnscrypt_encryption_params_set,
200 &globals.pq_ticket_key,
201 globals.pq_enabled,
202 ) {
203 Ok(x) => x,
204 Err(_) => {
205 let packet = encrypted_packet;
206 match serve_certificates(
207 &packet,
208 &globals.provider_name,
209 &dnscrypt_encryption_params_set,
210 globals.pq_enabled,
211 over_udp,
212 ) {
213 Ok(Some(synth_packet)) => {
214 return encrypt_and_respond_to_query(
215 globals,
216 client_ctx,
217 packet,
218 synth_packet,
219 original_packet_size,
220 None,
221 )
222 .await
223 }
224 Ok(None) => return Ok(()),
225 Err(_) => {

Callers 2

tcp_acceptorFunction · 0.85
udp_acceptorFunction · 0.85

Calls 7

handle_anonymized_dnsFunction · 0.85
decryptFunction · 0.85
serve_certificatesFunction · 0.85
may_be_quicFunction · 0.85
query_metaFunction · 0.85

Tested by

no test coverage detected