Skip to content
Snippets Groups Projects
Commit 758cce3a authored by David Goulet's avatar David Goulet :panda_face:
Browse files

Merge branch 'maint-0.4.8'

parents b3c6b566 e302e214
No related branches found
No related tags found
No related merge requests found
Pipeline #254272 failed
o Minor bugfixes (control port):
- Correctly report conflux pair information to controller fields
Fixes bug 40872; bugfix on 0.4.8.1-alpha
......@@ -442,3 +442,33 @@ conflux_validate_legs(const conflux_t *cfx)
conflux_log_set(LOG_PROTOCOL_WARN, cfx, is_client);
}
}
/** Return the nonce for a circuit, for use on the control port */
const uint8_t *
conflux_get_nonce(const circuit_t *circ)
{
if (circ->conflux_pending_nonce) {
return circ->conflux_pending_nonce;
} else if (circ->conflux) {
return circ->conflux->nonce;
} else {
return NULL;
}
}
/** Return the conflux RTT for a circuit, for use on the control port */
uint64_t
conflux_get_circ_rtt(const circuit_t *circ)
{
if (circ->conflux) {
conflux_leg_t *leg = conflux_get_leg(circ->conflux, circ);
if (BUG(!leg)) {
return 0;
} else {
return leg->circ_rtts_usec;
}
} else {
return 0;
}
}
......@@ -34,6 +34,9 @@ CIRCUIT_IS_CONFLUX(const circuit_t *circ)
}
}
const uint8_t *conflux_get_nonce(const circuit_t *circ);
uint64_t conflux_get_circ_rtt(const circuit_t *circ);
int circuit_get_package_window(circuit_t *circ,
const crypt_path_t *cpath);
bool conflux_can_send(conflux_t *cfx);
......
......@@ -21,6 +21,7 @@
#include "core/or/entry_connection_st.h"
#include "core/or/or_connection_st.h"
#include "core/or/origin_circuit_st.h"
#include "core/or/conflux_util.h"
#include "core/or/socks_request_st.h"
#include "feature/control/control_connection_st.h"
......@@ -160,6 +161,26 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
smartlist_add_asprintf(descparts, "HS_POW=v1,%u", circ->hs_pow_effort);
}
/* Add conflux id and RTT info, for accurate circuit display. The RTT is
* provided to indicate the primary (preferred) circuit of a set
* (which will have the lowest current RTT). */
if (CIRCUIT_IS_CONFLUX(TO_CIRCUIT(circ))) {
const uint8_t *nonce = conflux_get_nonce(TO_CIRCUIT(circ));
tor_assert(nonce);
/* The conflux nonce is sensitive data. Only output half of it. */
smartlist_add_asprintf(descparts, "CONFLUX_ID=%s",
hex_str((const char *)nonce, DIGEST256_LEN/2));
/* If we have a conflux object, the circ is linked and has an RTT */
if (TO_CIRCUIT(circ)->conflux) {
uint64_t circ_rtt = conflux_get_circ_rtt(TO_CIRCUIT(circ));
if (circ_rtt) {
smartlist_add_asprintf(descparts, "CONFLUX_RTT=%" PRIu64, circ_rtt);
}
}
}
rv = smartlist_join_strings(descparts, " ", 0, NULL);
SMARTLIST_FOREACH(descparts, char *, cp, tor_free(cp));
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment