summaryrefslogtreecommitdiff
path: root/src/feature/hs/hs_client.c
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2019-05-28 13:36:34 -0400
committerGeorge Kadianakis <desnacked@riseup.net>2019-11-18 19:06:43 +0200
commitfb1d2120212bef100f2b5e90d27b8c251280cb0c (patch)
treebcabf8608fadbe6b5fcfda67dca548affc17b4ff /src/feature/hs/hs_client.c
parent7bba8bf72f20aa2ac71ac381a7fdf66fadbd473f (diff)
downloadtor-fb1d2120212bef100f2b5e90d27b8c251280cb0c.tar.gz
tor-fb1d2120212bef100f2b5e90d27b8c251280cb0c.zip
hs-v3: Set extended error when descriptor is not found
Part of #30382 Signed-off-by: David Goulet <dgoulet@torproject.org>
Diffstat (limited to 'src/feature/hs/hs_client.c')
-rw-r--r--src/feature/hs/hs_client.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c
index 491c52a047..0e4df73b9f 100644
--- a/src/feature/hs/hs_client.c
+++ b/src/feature/hs/hs_client.c
@@ -42,6 +42,7 @@
#include "core/or/entry_connection_st.h"
#include "core/or/extend_info_st.h"
#include "core/or/origin_circuit_st.h"
+#include "core/or/socks_request_st.h"
/** Client-side authorizations for hidden services; map of service identity
* public key to hs_client_service_authorization_t *. */
@@ -1758,6 +1759,29 @@ hs_client_desc_has_arrived(const hs_ident_dir_conn_t *ident)
smartlist_free(entry_conns);
}
+/** This is called when a descriptor fetch was not found. Every entry
+ * connection that matches the requested onion service, its extended error
+ * code will be set accordingly. */
+void
+hs_client_desc_not_found(const hs_ident_dir_conn_t *ident)
+{
+ smartlist_t *entry_conns;
+
+ tor_assert(ident);
+
+ entry_conns = find_entry_conns(&ident->identity_pk);
+
+ SMARTLIST_FOREACH_BEGIN(entry_conns, entry_connection_t *, entry_conn) {
+ /* Descriptor was not found. We'll flag the socks request with the
+ * extended error code. If it is supported, it will be sent back. */
+ entry_conn->socks_request->socks_extended_error_code =
+ SOCKS5_HS_NOT_FOUND;
+ } SMARTLIST_FOREACH_END(entry_conn);
+
+ /* We don't have ownership of the objects in this list. */
+ smartlist_free(entry_conns);
+}
+
/** Return a newly allocated extend_info_t for a randomly chosen introduction
* point for the given edge connection identifier ident. Return NULL if we
* can't pick any usable introduction points. */