tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit a08f43ba045e051f16f3ea211be0438c09a906d6
parent 2143bae6c40a282f7184460452236192d2168e02
Author: Taylor Yu <catalyst@torproject.org>
Date:   Thu, 22 Aug 2019 16:58:30 -0500

use control reply lines for protocolinfo

Simplify handle_control_protocolinfo() by using the new reply line
abstraction.

Part of #30984.

Diffstat:
Msrc/feature/control/control_cmd.c | 26+++++++++++++++++---------
1 file changed, 17 insertions(+), 9 deletions(-)

diff --git a/src/feature/control/control_cmd.c b/src/feature/control/control_cmd.c @@ -1285,17 +1285,19 @@ get_esc_cfile(const or_options_t *options) return esc_cfile; } -/** Send the auth methods lines of a PROTOCOLINFO reply. */ +/** Compose the auth methods line of a PROTOCOLINFO reply. */ static void -send_authmethods(control_connection_t *conn) +add_authmethods(smartlist_t *reply) { const or_options_t *options = get_options(); char *methods = get_authmethods(options); char *esc_cfile = get_esc_cfile(options); - control_printf_midreply(conn, 250, "AUTH METHODS=%s%s%s", methods, - esc_cfile ? " COOKIEFILE=" : "", - esc_cfile ? esc_cfile : ""); + control_reply_add_str(reply, 250, "AUTH"); + control_reply_append_kv(reply, "METHODS", methods); + if (esc_cfile) + control_reply_append_kv(reply, "COOKIEFILE", esc_cfile); + tor_free(methods); tor_free(esc_cfile); } @@ -1307,6 +1309,7 @@ handle_control_protocolinfo(control_connection_t *conn, { const char *bad_arg = NULL; const smartlist_t *args = cmd_args->args; + smartlist_t *reply = NULL; conn->have_sent_protocolinfo = 1; @@ -1326,10 +1329,15 @@ handle_control_protocolinfo(control_connection_t *conn, connection_mark_for_close(TO_CONN(conn)); return 0; } - control_write_midreply(conn, 250, "PROTOCOLINFO 1"); - send_authmethods(conn); - control_printf_midreply(conn, 250, "VERSION Tor=%s", escaped(VERSION)); - send_control_done(conn); + reply = smartlist_new(); + control_reply_add_str(reply, 250, "PROTOCOLINFO 1"); + add_authmethods(reply); + control_reply_add_str(reply, 250, "VERSION"); + control_reply_append_kv(reply, "Tor", escaped(VERSION)); + control_reply_add_done(reply); + + control_write_reply_lines(conn, reply); + control_reply_free(reply); return 0; }