[tor-commits] [tor/master] use control reply lines for protocolinfo

teor at torproject.org teor at torproject.org
Sun Dec 15 22:17:37 UTC 2019


commit a08f43ba045e051f16f3ea211be0438c09a906d6
Author: Taylor Yu <catalyst at torproject.org>
Date:   Thu Aug 22 16:58:30 2019 -0500

    use control reply lines for protocolinfo
    
    Simplify handle_control_protocolinfo() by using the new reply line
    abstraction.
    
    Part of #30984.
---
 src/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
index 0f279b08d..ce7d1ad2c 100644
--- 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;
 }
 





More information about the tor-commits mailing list