add notes from other things that should be glossarized
[torspec/neena.git] / control-spec.txt
blob1625aa976ba9007160918731a4795f970c806f71
2                    TC: A Tor control protocol (Version 1)
4 0. Scope
6   This document describes an implementation-specific protocol that is used
7   for other programs (such as frontend user-interfaces) to communicate with a
8   locally running Tor process.  It is not part of the Tor onion routing
9   protocol.
11   This protocol replaces version 0 of TC, which is now deprecated.  For
12   reference, TC is described in "control-spec-v0.txt".  Implementors are
13   recommended to avoid using TC directly, but instead to use a library that
14   can easily be updated to use the newer protocol.  (Version 0 is used by Tor
15   versions 0.1.0.x; the protocol in this document only works with Tor
16   versions in the 0.1.1.x series and later.)
18       The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
19       NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",  "MAY", and
20       "OPTIONAL" in this document are to be interpreted as described in
21       RFC 2119.
23 1. Protocol outline
25   TC is a bidirectional message-based protocol.  It assumes an underlying
26   stream for communication between a controlling process (the "client"
27   or "controller") and a Tor process (or "server").  The stream may be
28   implemented via TCP, TLS-over-TCP, a Unix-domain socket, or so on,
29   but it must provide reliable in-order delivery.  For security, the
30   stream should not be accessible by untrusted parties.
32   In TC, the client and server send typed messages to each other over the
33   underlying stream.  The client sends "commands" and the server sends
34   "replies".
36   By default, all messages from the server are in response to messages from
37   the client.  Some client requests, however, will cause the server to send
38   messages to the client indefinitely far into the future.  Such
39   "asynchronous" replies are marked as such.
41   Servers respond to messages in the order messages are received.
43 1.1. Forward-compatibility
45   This is an evolving protocol; new client and server behavior will be
46   allowed in future versions.  To allow new backward-compatible client
47   on behalf of the client, we may add new commands and allow existing
48   commands to take new arguments in future versions.  To allow new
49   backward-compatible server behavior, we note various places below
50   where servers speaking a future versions of this protocol may insert
51   new data, and note that clients should/must "tolerate" unexpected
52   elements in these places.  There are two ways that we do this:
54   * Adding a new field to a message:
56     For example, we might say "This message has three space-separated
57     fields; clients MUST tolerate more fields."  This means that a
58     client MUST NOT crash or otherwise fail to parse the message or
59     other subsequent messages when there are more than three fields, and
60     that it SHOULD function at least as well when more fields are
61     provided as it does when it only gets the fields it accepts.  The
62     most obvious way to do this is by ignoring additional fields; the
63     next-most-obvious way is to report additional fields verbatim to the
64     user, perhaps as part of an expert UI.
66   * Adding a new possible value to a list of alternatives:
68     For example, we might say "This field will be OPEN, CLOSED, or
69     CONNECTED.  Clients MUST tolerate unexpected values."  This means
70     that a client MUST NOT crash or otherwise fail to parse the message
71     or other subsequent when there are unexpected values, and that the
72     client SHOULD try to handle the rest of the message as well as it
73     can.  The most obvious way to do this is by pretending that each
74     list of alternatives has an additional "unrecognized value" element,
75     and mapping any unrecognized values to that element; the
76     next-most-obvious way is to create a separate "unrecognized value"
77     element for each unrecognized value.
79     Clients SHOULD NOT "tolerate" unrecognized alternatives by
80     pretending that the message containing them is absent.  For example,
81     a stream closed for an unrecognized reason is nevertheless closed,
82     and should be reported as such.
84 2. Message format
86 2.1. Description format
88   The message formats listed below use ABNF as described in RFC 2234.
89   The protocol itself is loosely based on SMTP (see RFC 2821).
91   We use the following nonterminals from RFC 2822: atom, qcontent
93   We define the following general-use nonterminals:
95      String = DQUOTE *qcontent DQUOTE
97   There are explicitly no limits on line length.  All 8-bit characters are
98   permitted unless explicitly disallowed.
100   Wherever CRLF is specified to be accepted from the controller, Tor MAY also
101   accept LF.  Tor, however, MUST NOT generate LF instead of CRLF.
102   Controllers SHOULD always send CRLF.
104 2.2. Commands from controller to Tor
106     Command = Keyword OptArguments CRLF / "+" Keyword OptArguments CRLF CmdData
107     Keyword = 1*ALPHA
108     OptArguments = [ SP *(SP / VCHAR) ]
110   A command is either a single line containing a Keyword and arguments, or a
111   multiline command whose initial keyword begins with +, and whose data
112   section ends with a single "." on a line of its own.  (We use a special
113   character to distinguish multiline commands so that Tor can correctly parse
114   multi-line commands that it does not recognize.) Specific commands and
115   their arguments are described below in section 3.
117 2.3. Replies from Tor to the controller
119     Reply = SyncReply / AsyncReply
120     SyncReply = *(MidReplyLine / DataReplyLine) EndReplyLine
121     AsyncReply = *(MidReplyLine / DataReplyLine) EndReplyLine
123     MidReplyLine = StatusCode "-" ReplyLine
124     DataReplyLine = StatusCode "+" ReplyLine Data
125     EndReplyLine = StatusCode SP ReplyLine
126     ReplyLine = [ReplyText] CRLF
127     ReplyText = XXXX
128     StatusCode = 3DIGIT
130   Specific replies are mentioned below in section 3, and described more fully
131   in section 4.
133   [Compatibility note:  versions of Tor before 0.2.0.3-alpha sometimes
134   generate AsyncReplies of the form "*(MidReplyLine / DataReplyLine)".
135   This is incorrect, but controllers that need to work with these
136   versions of Tor should be prepared to get multi-line AsyncReplies with
137   the final line (usually "650 OK") omitted.]
139 2.4. General-use tokens
141   ; CRLF means, "the ASCII Carriage Return character (decimal value 13)
142   ; followed by the ASCII Linefeed character (decimal value 10)."
143   CRLF = CR LF
145   ; How a controller tells Tor about a particular OR.  There are four
146   ; possible formats:
147   ;    $Fingerprint -- The router whose identity key hashes to the fingerprint.
148   ;        This is the preferred way to refer to an OR.
149   ;    $Fingerprint~Nickname -- The router whose identity key hashes to the
150   ;        given fingerprint, but only if the router has the given nickname.
151   ;    $Fingerprint=Nickname -- The router whose identity key hashes to the
152   ;        given fingerprint, but only if the router is Named and has the given
153   ;        nickname.
154   ;    Nickname -- The Named router with the given nickname, or, if no such
155   ;        router exists, any router whose nickname matches the one given.
156   ;        This is not a safe way to refer to routers, since Named status
157   ;        could under some circumstances change over time.
158   ;
159   ; The tokens that implement the above follow:
161   ServerSpec = LongName / Nickname
162   LongName   = Fingerprint [ ( "=" / "~" ) Nickname ]
164   Fingerprint = "$" 40*HEXDIG
165   NicknameChar = "a"-"z" / "A"-"Z" / "0" - "9"
166   Nickname = 1*19 NicknameChar
168   ; What follows is an outdated way to refer to ORs.
169   ; Feature VERBOSE_NAMES replaces ServerID with LongName in events and
170   ; GETINFO results. VERBOSE_NAMES can be enabled starting in Tor version
171   ; 0.1.2.2-alpha and it is always-on in 0.2.2.1-alpha and later.
172   ServerID = Nickname / Fingerprint
175   ; Unique identifiers for streams or circuits.  Currently, Tor only
176   ; uses digits, but this may change
177   StreamID = 1*16 IDChar
178   CircuitID = 1*16 IDChar
179   IDChar = ALPHA / DIGIT
181   Address = ip4-address / ip6-address / hostname   (XXXX Define these)
183   ; A "CmdData" section is a sequence of octets concluded by the terminating
184   ; sequence CRLF "." CRLF.  The terminating sequence may not appear in the
185   ; body of the data.  Leading periods on lines in the data are escaped with
186   ; an additional leading period as in RFC 2821 section 4.5.2.
187   CmdData = *DataLine "." CRLF
188   DataLine = CRLF / "." 1*LineItem CRLF / NonDotItem *LineItem CRLF
189   LineItem = NonCR / 1*CR NonCRLF
190   NonDotItem = NonDotCR / 1*CR NonCRLF
192   ; ISOTime, ISOTime2, and ISOTime2Frac are time formats as specified in
193   ; ISO8601.
194   ;  example ISOTime:      "2012-01-11 12:15:33"
195   ;  example ISOTime2:     "2012-01-11T12:15:33"
196   ;  example ISOTime2Frac: "2012-01-11T12:15:33.51"
197   IsoDatePart = 4*DIGIT "-" 2*DIGIT "-" 2*DIGIT
198   IsoTimePart = 2*DIGIT ":" 2*DIGIT ":" 2*DIGIT
199   ISOTime  = IsoDatePart " " IsoTimePart
200   ISOTime2 = IsoDatePart "T" IsoTimePart
201   ISOTime2Frac = IsoTime2 [ "." 1*DIGIT ]
203 3. Commands
205   All commands are case-insensitive, but most keywords are case-sensitive.
207 3.1. SETCONF
209   Change the value of one or more configuration variables.  The syntax is:
211     "SETCONF" 1*(SP keyword ["=" value]) CRLF
212     value = String / QuotedString
214   Tor behaves as though it had just read each of the key-value pairs
215   from its configuration file.  Keywords with no corresponding values have
216   their configuration values reset to 0 or NULL (use RESETCONF if you want
217   to set it back to its default).  SETCONF is all-or-nothing: if there
218   is an error in any of the configuration settings, Tor sets none of them.
220   Tor responds with a "250 configuration values set" reply on success.
221   If some of the listed keywords can't be found, Tor replies with a
222   "552 Unrecognized option" message. Otherwise, Tor responds with a
223   "513 syntax error in configuration values" reply on syntax error, or a
224   "553 impossible configuration setting" reply on a semantic error.
226   Some configuration options (e.g. "Bridge") take multiple values. Also,
227   some configuration keys (e.g. for hidden services and for entry
228   guard lists) form a context-sensitive group where order matters (see
229   GETCONF below). In these cases, setting _any_ of the options in a
230   SETCONF command is taken to reset all of the others. For example,
231   if two ORListenAddress values are configured, and a SETCONF command
232   arrives containing a single ORListenAddress value, the new command's
233   value replaces the two old values.
235   Sometimes it is not possible to change configuration options solely by
236   issuing a series of SETCONF commands, because the value of one of the
237   configuration options depends on the value of another which has not yet
238   been set. Such situations can be overcome by setting multiple configuration
239   options with a single SETCONF command (e.g. SETCONF ORPort=443
240   ORListenAddress=9001).
242 3.2. RESETCONF
244   Remove all settings for a given configuration option entirely, assign
245   its default value (if any), and then assign the String provided.
246   Typically the String is left empty, to simply set an option back to
247   its default. The syntax is:
249     "RESETCONF" 1*(SP keyword ["=" String]) CRLF
251   Otherwise it behaves like SETCONF above.
253 3.3. GETCONF
255   Request the value of a configuration variable.  The syntax is:
257     "GETCONF" 1*(SP keyword) CRLF
259   If all of the listed keywords exist in the Tor configuration, Tor replies
260   with a series of reply lines of the form:
261       250 keyword=value
262   If any option is set to a 'default' value semantically different from an
263   empty string, Tor may reply with a reply line of the form:
264       250 keyword
266   Value may be a raw value or a quoted string.  Tor will try to use
267   unquoted values except when the value could be misinterpreted through
268   not being quoted.
270   If some of the listed keywords can't be found, Tor replies with a
271   "552 unknown configuration keyword" message.
273   If an option appears multiple times in the configuration, all of its
274   key-value pairs are returned in order.
276   Some options are context-sensitive, and depend on other options with
277   different keywords.  These cannot be fetched directly.  Currently there
278   is only one such option: clients should use the "HiddenServiceOptions"
279   virtual keyword to get all HiddenServiceDir, HiddenServicePort,
280   HiddenServiceVersion, and HiddenserviceAuthorizeClient option settings.
282 3.4. SETEVENTS
284   Request the server to inform the client about interesting events.  The
285   syntax is:
287      "SETEVENTS" [SP "EXTENDED"] *(SP EventCode) CRLF
289      EventCode = "CIRC" / "STREAM" / "ORCONN" / "BW" / "DEBUG" /
290          "INFO" / "NOTICE" / "WARN" / "ERR" / "NEWDESC" / "ADDRMAP" /
291          "AUTHDIR_NEWDESCS" / "DESCCHANGED" / "STATUS_GENERAL" /
292          "STATUS_CLIENT" / "STATUS_SERVER" / "GUARD" / "NS" / "STREAM_BW" /
293          "CLIENTS_SEEN" / "NEWCONSENSUS" / "BUILDTIMEOUT_SET" / "SIGNAL" /
294          "CONF_CHANGED" / "CIRC_MINOR"
296   Any events *not* listed in the SETEVENTS line are turned off; thus, sending
297   SETEVENTS with an empty body turns off all event reporting.
299   The server responds with a "250 OK" reply on success, and a "552
300   Unrecognized event" reply if one of the event codes isn't recognized.  (On
301   error, the list of active event codes isn't changed.)
303   If the flag string "EXTENDED" is provided, Tor may provide extra
304   information with events for this connection; see 4.1 for more information.
305   NOTE: All events on a given connection will be provided in extended format,
306   or none.
307   NOTE: "EXTENDED" was first supported in Tor 0.1.1.9-alpha; it is
308   always-on in Tor 0.2.2.1-alpha and later.
310   Each event is described in more detail in Section 4.1.
312 3.5. AUTHENTICATE
314   Sent from the client to the server.  The syntax is:
315      "AUTHENTICATE" [ SP 1*HEXDIG / QuotedString ] CRLF
317   The server responds with "250 OK" on success or "515 Bad authentication" if
318   the authentication cookie is incorrect.  Tor closes the connection on an
319   authentication failure.
321   The authentication token can be specified as either a quoted ASCII string,
322   or as an unquoted hexadecimal encoding of that same string (to avoid escaping
323   issues).
325   For information on how the implementation securely stores authentication
326   information on disk, see section 5.1.
328   Before the client has authenticated, no command other than
329   PROTOCOLINFO, AUTHCHALLENGE, AUTHENTICATE, or QUIT is valid.  If the
330   controller sends any other command, or sends a malformed command, or
331   sends an unsuccessful AUTHENTICATE command, or sends PROTOCOLINFO or
332   AUTHCHALLENGE more than once, Tor sends an error reply and closes
333   the connection.
335   To prevent some cross-protocol attacks, the AUTHENTICATE command is still
336   required even if all authentication methods in Tor are disabled.  In this
337   case, the controller should just send "AUTHENTICATE" CRLF.
339   (Versions of Tor before 0.1.2.16 and 0.2.0.4-alpha did not close the
340   connection after an authentication failure.)
342 3.6. SAVECONF
344   Sent from the client to the server.  The syntax is:
345      "SAVECONF" CRLF
347   Instructs the server to write out its config options into its torrc. Server
348   returns "250 OK" if successful, or "551 Unable to write configuration
349   to disk" if it can't write the file or some other error occurs.
351   See also the "getinfo config-text" command, if the controller wants
352   to write the torrc file itself.
354 3.7. SIGNAL
356   Sent from the client to the server. The syntax is:
358      "SIGNAL" SP Signal CRLF
360      Signal = "RELOAD" / "SHUTDOWN" / "DUMP" / "DEBUG" / "HALT" /
361               "HUP" / "INT" / "USR1" / "USR2" / "TERM" / "NEWNYM" /
362               "CLEARDNSCACHE"
364   The meaning of the signals are:
366       RELOAD    -- Reload: reload config items. (like HUP)
367       SHUTDOWN  -- Controlled shutdown: if server is an OP, exit immediately.
368                    If it's an OR, close listeners and exit after
369                    ShutdownWaitLength seconds. (like INT)
370       DUMP      -- Dump stats: log information about open connections and
371                    circuits. (like USR1)
372       DEBUG     -- Debug: switch all open logs to loglevel debug. (like USR2)
373       HALT      -- Immediate shutdown: clean up and exit now. (like TERM)
374       CLEARDNSCACHE -- Forget the client-side cached IPs for all hostnames.
375       NEWNYM    -- Switch to clean circuits, so new application requests
376                    don't share any circuits with old ones.  Also clears
377                    the client-side DNS cache.  (Tor MAY rate-limit its
378                    response to this signal.)
380   The server responds with "250 OK" if the signal is recognized (or simply
381   closes the socket if it was asked to close immediately), or "552
382   Unrecognized signal" if the signal is unrecognized.
384 3.8. MAPADDRESS
386   Sent from the client to the server.  The syntax is:
388     "MAPADDRESS" 1*(Address "=" Address SP) CRLF
390   The first address in each pair is an "original" address; the second is a
391   "replacement" address.  The client sends this message to the server in
392   order to tell it that future SOCKS requests for connections to the original
393   address should be replaced with connections to the specified replacement
394   address.  If the addresses are well-formed, and the server is able to
395   fulfill the request, the server replies with a 250 message:
396     250-OldAddress1=NewAddress1
397     250 OldAddress2=NewAddress2
399   containing the source and destination addresses.  If request is
400   malformed, the server replies with "512 syntax error in command
401   argument".  If the server can't fulfill the request, it replies with
402   "451 resource exhausted".
404   The client may decline to provide a body for the original address, and
405   instead send a special null address ("0.0.0.0" for IPv4, "::0" for IPv6, or
406   "." for hostname), signifying that the server should choose the original
407   address itself, and return that address in the reply.  The server
408   should ensure that it returns an element of address space that is unlikely
409   to be in actual use.  If there is already an address mapped to the
410   destination address, the server may reuse that mapping.
412   If the original address is already mapped to a different address, the old
413   mapping is removed.  If the original address and the destination address
414   are the same, the server removes any mapping in place for the original
415   address.
417   Example:
418     C: MAPADDRESS 0.0.0.0=torproject.org 1.2.3.4=tor.freehaven.net
419     S: 250-127.192.10.10=torproject.org
420     S: 250 1.2.3.4=tor.freehaven.net
422   {Note: This feature is designed to be used to help Tor-ify applications
423   that need to use SOCKS4 or hostname-less SOCKS5.  There are three
424   approaches to doing this:
425      1. Somehow make them use SOCKS4a or SOCKS5-with-hostnames instead.
426      2. Use tor-resolve (or another interface to Tor's resolve-over-SOCKS
427         feature) to resolve the hostname remotely.  This doesn't work
428         with special addresses like x.onion or x.y.exit.
429      3. Use MAPADDRESS to map an IP address to the desired hostname, and then
430         arrange to fool the application into thinking that the hostname
431         has resolved to that IP.
432   This functionality is designed to help implement the 3rd approach.}
434   Mappings set by the controller last until the Tor process exits:
435   they never expire. If the controller wants the mapping to last only
436   a certain time, then it must explicitly un-map the address when that
437   time has elapsed.
439 3.9. GETINFO
441   Sent from the client to the server.  The syntax is as for GETCONF:
442     "GETINFO" 1*(SP keyword) CRLF
443   one or more NL-terminated strings.  The server replies with an INFOVALUE
444   message, or a 551 or 552 error.
446   Unlike GETCONF, this message is used for data that are not stored in the Tor
447   configuration file, and that may be longer than a single line.  On success,
448   one ReplyLine is sent for each requested value, followed by a final 250 OK
449   ReplyLine.  If a value fits on a single line, the format is:
450       250-keyword=value
451   If a value must be split over multiple lines, the format is:
452       250+keyword=
453       value
454       .
455   Recognized keys and their values include:
457     "version" -- The version of the server's software, including the name
458       of the software. (example: "Tor 0.0.9.4")
460     "config-file" -- The location of Tor's configuration file ("torrc").
462     "config-text" -- The contents that Tor would write if you send it
463       a SAVECONF command, so the controller can write the file to
464       disk itself. [First implemented in 0.2.2.7-alpha.]
466     ["exit-policy/prepend" -- The default exit policy lines that Tor will
467       *prepend* to the ExitPolicy config option.
468      -- Never implemented. Useful?]
470     "exit-policy/default" -- The default exit policy lines that Tor will
471       *append* to the ExitPolicy config option.
473     "desc/id/<OR identity>" or "desc/name/<OR nickname>" -- the latest
474       server descriptor for a given OR.
476     "md/id/<OR identity>" or "md/name/<OR nickname>" -- the latest
477       microdescriptor for a given OR. [First implemented in
478       0.2.3.8-alpha.]
480     "dormant" -- A nonnegative integer: zero if Tor is currently active and
481       building circuits, and nonzero if Tor has gone idle due to lack of use
482       or some similar reason.  [First implemented in 0.2.3.16-alpha]
484     "desc-annotations/id/<OR identity>" -- outputs the annotations string
485       (source, timestamp of arrival, purpose, etc) for the corresponding
486       descriptor. [First implemented in 0.2.0.13-alpha.]
488     "extra-info/digest/<digest>"  -- the extrainfo document whose digest (in
489       hex) is <digest>.  Only available if we're downloading extra-info
490       documents.
492     "ns/id/<OR identity>" or "ns/name/<OR nickname>" -- the latest router
493       status info (v2 directory style) for a given OR.  Router status
494       info is as given in
495       dir-spec.txt, and reflects the current beliefs of this Tor about the
496       router in question. Like directory clients, controllers MUST
497       tolerate unrecognized flags and lines.  The published date and
498       descriptor digest are those believed to be best by this Tor,
499       not necessarily those for a descriptor that Tor currently has.
500       [First implemented in 0.1.2.3-alpha.]
502     "ns/all" -- Router status info (v2 directory style) for all ORs we
503       have an opinion about, joined by newlines. [First implemented
504       in 0.1.2.3-alpha.]
506     "ns/purpose/<purpose>" -- Router status info (v2 directory style)
507       for all ORs of this purpose. Mostly designed for /ns/purpose/bridge
508       queries. [First implemented in 0.2.0.13-alpha.]
510     "desc/all-recent" -- the latest server descriptor for every router that
511       Tor knows about.
513     "network-status" -- a space-separated list (v1 directory style)
514       of all known OR identities. This is in the same format as the
515       router-status line in v1 directories; see dir-spec-v1.txt section
516       3 for details.  (If VERBOSE_NAMES is enabled, the output will
517       not conform to dir-spec-v1.txt; instead, the result will be a
518       space-separated list of LongName, each preceded by a "!" if it is
519       believed to be not running.) This option is deprecated; use
520       "ns/all" instead.
522     "address-mappings/all"
523     "address-mappings/config"
524     "address-mappings/cache"
525     "address-mappings/control" -- a \r\n-separated list of address
526       mappings, each in the form of "from-address to-address expiry".
527       The 'config' key returns those address mappings set in the
528       configuration; the 'cache' key returns the mappings in the
529       client-side DNS cache; the 'control' key returns the mappings set
530       via the control interface; the 'all' target returns the mappings
531       set through any mechanism.
532       Expiry is formatted as with ADDRMAP events, except that "expiry" is
533       always a time in GMT or the string "NEVER"; see section 4.1.7.
534       First introduced in 0.2.0.3-alpha.
536     "addr-mappings/*" -- as for address-mappings/*, but without the
537       expiry portion of the value.  Use of this value is deprecated
538       since 0.2.0.3-alpha; use address-mappings instead.
540     "address" -- the best guess at our external IP address. If we
541       have no guess, return a 551 error. (Added in 0.1.2.2-alpha)
543     "fingerprint" -- the contents of the fingerprint file that Tor
544       writes as a relay, or a 551 if we're not a relay currently.
545       (Added in 0.1.2.3-alpha)
547     "circuit-status"
548       A series of lines as for a circuit status event. Each line is of
549       the form described in section 4.1.1, omitting the initial
550       "650 CIRC ".  Note that clients must be ready to accept additional
551       arguments as described in section 4.1.
553     "stream-status"
554       A series of lines as for a stream status event.  Each is of the form:
555          StreamID SP StreamStatus SP CircID SP Target CRLF
557     "orconn-status"
558       A series of lines as for an OR connection status event.  In Tor
559       0.1.2.2-alpha with feature VERBOSE_NAMES enabled and in Tor
560       0.2.2.1-alpha and later by default, each line is of the form:
561          LongName SP ORStatus CRLF
563      In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
564      VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, each line
565      is of the form:
566          ServerID SP ORStatus CRLF
568     "entry-guards"
569       A series of lines listing the currently chosen entry guards, if any.
570       In Tor 0.1.2.2-alpha with feature VERBOSE_NAMES enabled and in Tor
571       0.2.2.1-alpha and later by default, each line is of the form:
572          LongName SP Status [SP ISOTime] CRLF
574      In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
575      VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, each line
576      is of the form:
577          ServerID2 SP Status [SP ISOTime] CRLF
578          ServerID2 = Nickname / 40*HEXDIG
580       The definition of Status is the same for both:
581          Status = "up" / "never-connected" / "down" /
582                   "unusable" / "unlisted"
584       [From 0.1.1.4-alpha to 0.1.1.10-alpha, entry-guards was called
585        "helper-nodes". Tor still supports calling "helper-nodes", but it
586         is deprecated and should not be used.]
588       [Older versions of Tor (before 0.1.2.x-final) generated 'down' instead
589        of unlisted/unusable.  Current Tors never generate 'down'.]
591       [XXXX ServerID2 differs from ServerID in not prefixing fingerprints
592        with a $.  This is an implementation error.  It would be nice to add
593        the $ back in if we can do so without breaking compatibility.]
595     "traffic/read" -- Total bytes read (downloaded).
597     "traffic/written" -- Total bytes written (uploaded).
599     "accounting/enabled"
600     "accounting/hibernating"
601     "accounting/bytes"
602     "accounting/bytes-left"
603     "accounting/interval-start"
604     "accounting/interval-wake"
605     "accounting/interval-end"
606       Information about accounting status.  If accounting is enabled,
607       "enabled" is 1; otherwise it is 0.  The "hibernating" field is "hard"
608       if we are accepting no data; "soft" if we're accepting no new
609       connections, and "awake" if we're not hibernating at all.  The "bytes"
610       and "bytes-left" fields contain (read-bytes SP write-bytes), for the
611       start and the rest of the interval respectively.  The 'interval-start'
612       and 'interval-end' fields are the borders of the current interval; the
613       'interval-wake' field is the time within the current interval (if any)
614       where we plan[ned] to start being active. The times are GMT.
616     "config/names"
617       A series of lines listing the available configuration options. Each is
618       of the form:
619          OptionName SP OptionType [ SP Documentation ] CRLF
620          OptionName = Keyword
621          OptionType = "Integer" / "TimeInterval" / "TimeMsecInterval" /
622            "DataSize" / "Float" / "Boolean" / "Time" / "CommaList" /
623            "Dependant" / "Virtual" / "String" / "LineList"
624          Documentation = Text
626     "config/defaults"
627       A series of lines listing default values for each configuration
628       option. Options which don't have a valid default don't show up
629       in the list.  Introduced in Tor 0.2.4.1-alpha.
630          OptionName SP OptionValue CRLF
631          OptionName = Keyword
632          OptionValue = Text
634     "info/names"
635       A series of lines listing the available GETINFO options.  Each is of
636       one of these forms:
637          OptionName SP Documentation CRLF
638          OptionPrefix SP Documentation CRLF
639          OptionPrefix = OptionName "/*"
641     "events/names"
642       A space-separated list of all the events supported by this version of
643       Tor's SETEVENTS.
645     "features/names"
646       A space-separated list of all the events supported by this version of
647       Tor's USEFEATURE.
649     "ip-to-country/*"
650       Maps IP addresses to 2-letter country codes.  For example,
651       "GETINFO ip-to-country/18.0.0.1" should give "US".
653     "next-circuit/IP:port"
654       XXX todo.
656     "process/pid" -- Process id belonging to the main tor process.
657     "process/uid" -- User id running the tor process, -1 if unknown (this is
658      unimplemented on Windows, returning -1).
659     "process/user" -- Username under which the tor process is running,
660      providing an empty string if none exists (this is unimplemented on
661      Windows, returning an empty string).
662     "process/descriptor-limit" -- Upper bound on the file descriptor limit, -1
663      if unknown.
665     "dir/status-vote/current/consensus" [added in Tor 0.2.1.6-alpha]
666     "dir/status/authority"
667     "dir/status/fp/<F>"
668     "dir/status/fp/<F1>+<F2>+<F3>"
669     "dir/status/all"
670     "dir/server/fp/<F>"
671     "dir/server/fp/<F1>+<F2>+<F3>"
672     "dir/server/d/<D>"
673     "dir/server/d/<D1>+<D2>+<D3>"
674     "dir/server/authority"
675     "dir/server/all"
676       A series of lines listing directory contents, provided according to the
677       specification for the URLs listed in Section 4.4 of dir-spec.txt.  Note
678       that Tor MUST NOT provide private information, such as descriptors for
679       routers not marked as general-purpose.  When asked for 'authority'
680       information for which this Tor is not authoritative, Tor replies with
681       an empty string.
683     "status/circuit-established"
684     "status/enough-dir-info"
685     "status/good-server-descriptor"
686     "status/accepted-server-descriptor"
687     "status/..."
688       These provide the current internal Tor values for various Tor
689       states. See Section 4.1.10 for explanations. (Only a few of the
690       status events are available as getinfo's currently. Let us know if
691       you want more exposed.)
692     "status/reachability-succeeded/or"
693       0 or 1, depending on whether we've found our ORPort reachable.
694     "status/reachability-succeeded/dir"
695       0 or 1, depending on whether we've found our DirPort reachable.
696     "status/reachability-succeeded"
697       "OR=" ("0"/"1") SP "DIR=" ("0"/"1")
698       Combines status/reachability-succeeded/*; controllers MUST ignore
699       unrecognized elements in this entry.
700     "status/bootstrap-phase"
701       Returns the most recent bootstrap phase status event
702       sent. Specifically, it returns a string starting with either
703       "NOTICE BOOTSTRAP ..." or "WARN BOOTSTRAP ...". Controllers should
704       use this getinfo when they connect or attach to Tor to learn its
705       current bootstrap state.
706     "status/version/recommended"
707       List of currently recommended versions.
708     "status/version/current"
709       Status of the current version. One of: new, old, unrecommended,
710       recommended, new in series, obsolete, unknown.
711     "status/clients-seen"
712       A summary of which countries we've seen clients from recently,
713       formatted the same as the CLIENTS_SEEN status event described in
714       Section 4.1.14. This GETINFO option is currently available only
715       for bridge relays.
717     "net/listeners/or"
718     "net/listeners/dir"
719     "net/listeners/socks"
720     "net/listeners/trans"
721     "net/listeners/natd"
722     "net/listeners/dns"
723     "net/listeners/control"
724       A space-separated list of the addresses at which Tor is listening for
725       connections of each specified type.  [New in Tor 0.2.2.26-beta.]
727   Examples:
728      C: GETINFO version desc/name/moria1
729      S: 250+desc/name/moria=
730      S: [Descriptor for moria]
731      S: .
732      S: 250-version=Tor 0.1.1.0-alpha-cvs
733      S: 250 OK
735 3.10. EXTENDCIRCUIT
737   Sent from the client to the server.  The format is:
738       "EXTENDCIRCUIT" SP CircuitID
739                       [SP ServerSpec *("," ServerSpec)]
740                       [SP "purpose=" Purpose] CRLF
742   This request takes one of two forms: either the CircuitID is zero, in
743   which case it is a request for the server to build a new circuit,
744   or the CircuitID is nonzero, in which case it is a request for the
745   server to extend an existing circuit with that ID according to the
746   specified path.
748   If the CircuitID is 0, the controller has the option of providing
749   a path for Tor to use to build the circuit. If it does not provide
750   a path, Tor will select one automatically from high capacity nodes
751   according to path-spec.txt.
753   If CircuitID is 0 and "purpose=" is specified, then the circuit's
754   purpose is set. Two choices are recognized: "general" and
755   "controller". If not specified, circuits are created as "general".
757   If the request is successful, the server sends a reply containing a
758   message body consisting of the CircuitID of the (maybe newly created)
759   circuit. The syntax is "250" SP "EXTENDED" SP CircuitID CRLF.
761 3.11. SETCIRCUITPURPOSE
763   Sent from the client to the server.  The format is:
764       "SETCIRCUITPURPOSE" SP CircuitID SP Purpose CRLF
766   This changes the circuit's purpose. See EXTENDCIRCUIT above for details.
768 3.12. SETROUTERPURPOSE
770   Sent from the client to the server.  The format is:
771       "SETROUTERPURPOSE" SP NicknameOrKey SP Purpose CRLF
773   This changes the descriptor's purpose. See +POSTDESCRIPTOR below
774   for details.
776   NOTE: This command was disabled and made obsolete as of Tor
777   0.2.0.8-alpha. It doesn't exist anymore, and is listed here only for
778   historical interest.
780 3.13. ATTACHSTREAM
782   Sent from the client to the server.  The syntax is:
783      "ATTACHSTREAM" SP StreamID SP CircuitID [SP "HOP=" HopNum] CRLF
785   This message informs the server that the specified stream should be
786   associated with the specified circuit.  Each stream may be associated with
787   at most one circuit, and multiple streams may share the same circuit.
788   Streams can only be attached to completed circuits (that is, circuits that
789   have sent a circuit status 'BUILT' event or are listed as built in a
790   GETINFO circuit-status request).
792   If the circuit ID is 0, responsibility for attaching the given stream is
793   returned to Tor.
795   If HOP=HopNum is specified, Tor will choose the HopNumth hop in the
796   circuit as the exit node, rather than the last node in the circuit.
797   Hops are 1-indexed; generally, it is not permitted to attach to hop 1.
799   Tor responds with "250 OK" if it can attach the stream, 552 if the circuit
800   or stream didn't exist, or 551 if the stream couldn't be attached for
801   another reason.
803   {Implementation note: Tor will close unattached streams by itself,
804   roughly two minutes after they are born. Let the developers know if
805   that turns out to be a problem.}
807   {Implementation note: By default, Tor automatically attaches streams to
808   circuits itself, unless the configuration variable
809   "__LeaveStreamsUnattached" is set to "1".  Attempting to attach streams
810   via TC when "__LeaveStreamsUnattached" is false may cause a race between
811   Tor and the controller, as both attempt to attach streams to circuits.}
813   {Implementation note: You can try to attachstream to a stream that
814   has already sent a connect or resolve request but hasn't succeeded
815   yet, in which case Tor will detach the stream from its current circuit
816   before proceeding with the new attach request.}
818 3.14. POSTDESCRIPTOR
820   Sent from the client to the server. The syntax is:
821     "+POSTDESCRIPTOR" [SP "purpose=" Purpose] [SP "cache=" Cache]
822                       CRLF Descriptor CRLF "." CRLF
824   This message informs the server about a new descriptor. If Purpose is
825   specified, it must be either "general", "controller", or "bridge",
826   else we return a 552 error. The default is "general".
828   If Cache is specified, it must be either "no" or "yes", else we
829   return a 552 error. If Cache is not specified, Tor will decide for
830   itself whether it wants to cache the descriptor, and controllers
831   must not rely on its choice.
833   The descriptor, when parsed, must contain a number of well-specified
834   fields, including fields for its nickname and identity.
836   If there is an error in parsing the descriptor, the server must send a
837   "554 Invalid descriptor" reply. If the descriptor is well-formed but
838   the server chooses not to add it, it must reply with a 251 message
839   whose body explains why the server was not added. If the descriptor
840   is added, Tor replies with "250 OK".
842 3.15. REDIRECTSTREAM
844   Sent from the client to the server. The syntax is:
845     "REDIRECTSTREAM" SP StreamID SP Address [SP Port] CRLF
847   Tells the server to change the exit address on the specified stream.  If
848   Port is specified, changes the destination port as well.  No remapping
849   is performed on the new provided address.
851   To be sure that the modified address will be used, this event must be sent
852   after a new stream event is received, and before attaching this stream to
853   a circuit.
855   Tor replies with "250 OK" on success.
857 3.16. CLOSESTREAM
859   Sent from the client to the server.  The syntax is:
861     "CLOSESTREAM" SP StreamID SP Reason *(SP Flag) CRLF
863   Tells the server to close the specified stream.  The reason should be one
864   of the Tor RELAY_END reasons given in tor-spec.txt, as a decimal.  Flags is
865   not used currently; Tor servers SHOULD ignore unrecognized flags.  Tor may
866   hold the stream open for a while to flush any data that is pending.
868   Tor replies with "250 OK" on success, or a 512 if there aren't enough
869   arguments, or a 552 if it doesn't recognize the StreamID or reason.
871 3.17. CLOSECIRCUIT
873    The syntax is:
874      "CLOSECIRCUIT" SP CircuitID *(SP Flag) CRLF
875      Flag = "IfUnused"
877   Tells the server to close the specified circuit.   If "IfUnused" is
878   provided, do not close the circuit unless it is unused.
880   Other flags may be defined in the future; Tor SHOULD ignore unrecognized
881   flags.
883   Tor replies with "250 OK" on success, or a 512 if there aren't enough
884   arguments, or a 552 if it doesn't recognize the CircuitID.
886 3.18. QUIT
888   Tells the server to hang up on this controller connection. This command
889   can be used before authenticating.
891 3.19. USEFEATURE
893   Adding additional features to the control protocol sometimes will break
894   backwards compatibility. Initially such features are added into Tor and
895   disabled by default. USEFEATURE can enable these additional features.
897   The syntax is:
899     "USEFEATURE" *(SP FeatureName) CRLF
900     FeatureName = 1*(ALPHA / DIGIT / "_" / "-")
902   Feature names are case-insensitive.
904   Once enabled, a feature stays enabled for the duration of the connection
905   to the controller. A new connection to the controller must be opened to
906   disable an enabled feature.
908   Features are a forward-compatibility mechanism; each feature will eventually
909   become a standard part of the control protocol. Once a feature becomes part
910   of the protocol, it is always-on. Each feature documents the version it was
911   introduced as a feature and the version in which it became part of the
912   protocol.
914   Tor will ignore a request to use any feature that is always-on. Tor will give
915   a 552 error in response to an unrecognized feature.
917   EXTENDED_EVENTS
919      Same as passing 'EXTENDED' to SETEVENTS; this is the preferred way to
920      request the extended event syntax.
922      This feature was first introduced in 0.1.2.3-alpha.  It is always-on
923      and part of the protocol in Tor 0.2.2.1-alpha and later.
925   VERBOSE_NAMES
927      Replaces ServerID with LongName in events and GETINFO results. LongName
928      provides a Fingerprint for all routers, an indication of Named status,
929      and a Nickname if one is known. LongName is strictly more informative
930      than ServerID, which only provides either a Fingerprint or a Nickname.
932      This feature was first introduced in 0.1.2.2-alpha. It is always-on and
933      part of the protocol in Tor 0.2.2.1-alpha and later.
935 3.20. RESOLVE
937   The syntax is
938     "RESOLVE" *Option *Address CRLF
939     Option = "mode=reverse"
940     Address = a hostname or IPv4 address
942   This command launches a remote hostname lookup request for every specified
943   request (or reverse lookup if "mode=reverse" is specified).  Note that the
944   request is done in the background: to see the answers, your controller will
945   need to listen for ADDRMAP events; see 4.1.7 below.
947   [Added in Tor 0.2.0.3-alpha]
949 3.21. PROTOCOLINFO
951   The syntax is:
952     "PROTOCOLINFO" *(SP PIVERSION) CRLF
954   The server reply format is:
955     "250-PROTOCOLINFO" SP PIVERSION CRLF *InfoLine "250 OK" CRLF
957     InfoLine = AuthLine / VersionLine / OtherLine
959      AuthLine = "250-AUTH" SP "METHODS=" AuthMethod *("," AuthMethod)
960                        *(SP "COOKIEFILE=" AuthCookieFile) CRLF
961      VersionLine = "250-VERSION" SP "Tor=" TorVersion OptArguments CRLF
963      AuthMethod =
964       "NULL"           / ; No authentication is required
965       "HASHEDPASSWORD" / ; A controller must supply the original password
966       "COOKIE"         / ; A controller must supply the contents of a cookie
967       "SAFECOOKIE"       ; A controller must prove knowledge of a cookie
969      AuthCookieFile = QuotedString
970      TorVersion = QuotedString
972      OtherLine = "250-" Keyword OptArguments CRLF
974     PIVERSION: 1*DIGIT
976   Tor MAY give its InfoLines in any order; controllers MUST ignore InfoLines
977   with keywords they do not recognize.  Controllers MUST ignore extraneous
978   data on any InfoLine.
980   PIVERSION is there in case we drastically change the syntax one day. For
981   now it should always be "1".  Controllers MAY provide a list of the
982   protocolinfo versions they support; Tor MAY select a version that the
983   controller does not support.
985   AuthMethod is used to specify one or more control authentication
986   methods that Tor currently accepts.
988   AuthCookieFile specifies the absolute path and filename of the
989   authentication cookie that Tor is expecting and is provided iff the
990   METHODS field contains the method "COOKIE" and/or "SAFECOOKIE".
991   Controllers MUST handle escape sequences inside this string.
993   All authentication cookies are 32 bytes long.  Controllers MUST NOT
994   use the contents of a non-32-byte-long file as an authentication
995   cookie.
997   If the METHODS field contains the method "SAFECOOKIE", every
998   AuthCookieFile must contain the same authentication cookie.
1000   The COOKIE authentication method exposes the user running a
1001   controller to an unintended information disclosure attack whenever
1002   the controller has greater filesystem read access than the process
1003   that it has connected to.  (Note that a controller may connect to a
1004   process other than Tor.)  It is almost never safe to use, even if
1005   the controller's user has explicitly specified which filename to
1006   read an authentication cookie from.  For this reason, the COOKIE
1007   authentication method has been deprecated and will be removed from
1008   a future version of Tor.
1010   The VERSION line contains the Tor version.
1012   [Unlike other commands besides AUTHENTICATE, PROTOCOLINFO may be used (but
1013   only once!) before AUTHENTICATE.]
1015   [PROTOCOLINFO was not supported before Tor 0.2.0.5-alpha.]
1017 3.22. LOADCONF
1019   The syntax is:
1020     "+LOADCONF" CRLF ConfigText CRLF "." CRLF
1022   This command allows a controller to upload the text of a config file
1023   to Tor over the control port.  This config file is then loaded as if
1024   it had been read from disk.
1026   [LOADCONF was added in Tor 0.2.1.1-alpha.]
1028 3.23. TAKEOWNERSHIP
1030   The syntax is:
1031     "TAKEOWNERSHIP" CRLF
1033   This command instructs Tor to shut down (as if it had received
1034   SIGINT or a "SIGNAL INT" controller command) when this control
1035   connection is closed.  This command affects each control connection
1036   that sends it independently; if multiple control connections send
1037   the TAKEOWNERSHIP command to a Tor instance, Tor will shut down when
1038   any of those connections closes.
1040   This command is intended to be used with the
1041   __OwningControllerProcess configuration option.  A controller that
1042   starts a Tor process which the user cannot easily control or stop
1043   should 'own' that Tor process:
1045     * When starting Tor, the controller should specify its PID in an
1046       __OwningControllerProcess on Tor's command line.  This will
1047       cause Tor to poll for the existence of a process with that PID,
1048       and exit if it does not find such a process.  (This is not a
1049       completely reliable way to detect whether the 'owning
1050       controller' is still running, but it should work well enough in
1051       most cases.)
1053     * Once the controller has connected to Tor's control port, it
1054       should send the TAKEOWNERSHIP command along its control
1055       connection.  At this point, *both* the TAKEOWNERSHIP command and
1056       the __OwningControllerProcess option are in effect: Tor will
1057       exit when the control connection ends *and* Tor will exit if it
1058       detects that there is no process with the PID specified in the
1059       __OwningControllerProcess option.
1061     * After the controller has sent the TAKEOWNERSHIP command, it
1062       should send "RESETCONF __OwningControllerProcess" along its
1063       control connection.  This will cause Tor to stop polling for the
1064       existence of a process with its owning controller's PID; Tor
1065       will still exit when the control connection ends.
1067   [TAKEOWNERSHIP was added in Tor 0.2.2.28-beta.]
1069 3.24. AUTHCHALLENGE
1071   The syntax is:
1072     "AUTHCHALLENGE" SP "SAFECOOKIE"
1073                     SP ClientNonce
1074                     CRLF
1076     ClientNonce = 2*HEXDIG / QuotedString
1078   If the server accepts the command, the server reply format is:
1079     "250 AUTHCHALLENGE"
1080             SP "SERVERHASH=" ServerHash
1081             SP "SERVERNONCE=" ServerNonce
1082             CRLF
1084     ServerHash = 64*64HEXDIG
1085     ServerNonce = 64*64HEXDIG
1087   The ClientNonce, ServerHash, and ServerNonce values are
1088   encoded/decoded in the same way as the argument passed to the
1089   AUTHENTICATE command.  ServerNonce MUST be 32 bytes long.
1091   ServerHash is computed as:
1092     HMAC-SHA256("Tor safe cookie authentication server-to-controller hash",
1093                 CookieString | ClientNonce | ServerNonce)
1094   (with the HMAC key as its first argument)
1096   After a controller sends a successful AUTHCHALLENGE command, the
1097   next command sent on the connection must be an AUTHENTICATE command,
1098   and the only authentication string which that AUTHENTICATE command
1099   will accept is:
1100     HMAC-SHA256("Tor safe cookie authentication controller-to-server hash",
1101                 CookieString | ClientNonce | ServerNonce)
1103   [Unlike other commands besides AUTHENTICATE, AUTHCHALLENGE may be
1104   used (but only once!) before AUTHENTICATE.]
1106   [AUTHCHALLENGE was added in Tor FIXME.]
1108 4. Replies
1110   Reply codes follow the same 3-character format as used by SMTP, with the
1111   first character defining a status, the second character defining a
1112   subsystem, and the third designating fine-grained information.
1114   The TC protocol currently uses the following first characters:
1116     2yz   Positive Completion Reply
1117        The command was successful; a new request can be started.
1119     4yz   Temporary Negative Completion reply
1120        The command was unsuccessful but might be reattempted later.
1122     5yz   Permanent Negative Completion Reply
1123        The command was unsuccessful; the client should not try exactly
1124        that sequence of commands again.
1126     6yz   Asynchronous Reply
1127        Sent out-of-order in response to an earlier SETEVENTS command.
1129   The following second characters are used:
1131     x0z   Syntax
1132        Sent in response to ill-formed or nonsensical commands.
1134     x1z   Protocol
1135        Refers to operations of the Tor Control protocol.
1137     x5z   Tor
1138        Refers to actual operations of Tor system.
1140   The following codes are defined:
1142      250 OK
1143      251 Operation was unnecessary
1144          [Tor has declined to perform the operation, but no harm was done.]
1146      451 Resource exhausted
1148      500 Syntax error: protocol
1150      510 Unrecognized command
1151      511 Unimplemented command
1152      512 Syntax error in command argument
1153      513 Unrecognized command argument
1154      514 Authentication required
1155      515 Bad authentication
1157      550 Unspecified Tor error
1159      551 Internal error
1160                [Something went wrong inside Tor, so that the client's
1161                 request couldn't be fulfilled.]
1163      552 Unrecognized entity
1164                [A configuration key, a stream ID, circuit ID, event,
1165                 mentioned in the command did not actually exist.]
1167      553 Invalid configuration value
1168          [The client tried to set a configuration option to an
1169            incorrect, ill-formed, or impossible value.]
1171      554 Invalid descriptor
1173      555 Unmanaged entity
1175      650 Asynchronous event notification
1177   Unless specified to have specific contents, the human-readable messages
1178   in error replies should not be relied upon to match those in this document.
1180 4.1. Asynchronous events
1182   These replies can be sent after a corresponding SETEVENTS command has been
1183   received.  They will not be interleaved with other Reply elements, but they
1184   can appear between a command and its corresponding reply.  For example,
1185   this sequence is possible:
1187      C: SETEVENTS CIRC
1188      S: 250 OK
1189      C: GETCONF SOCKSPORT ORPORT
1190      S: 650 CIRC 1000 EXTENDED moria1,moria2
1191      S: 250-SOCKSPORT=9050
1192      S: 250 ORPORT=0
1194   But this sequence is disallowed:
1195      C: SETEVENTS CIRC
1196      S: 250 OK
1197      C: GETCONF SOCKSPORT ORPORT
1198      S: 250-SOCKSPORT=9050
1199      S: 650 CIRC 1000 EXTENDED moria1,moria2
1200      S: 250 ORPORT=0
1202   Clients MUST tolerate more arguments in an asynchronous reply than
1203   expected, and MUST tolerate more lines in an asynchronous reply than
1204   expected.  For instance, a client that expects a CIRC message like:
1205       650 CIRC 1000 EXTENDED moria1,moria2
1206   must tolerate:
1207       650-CIRC 1000 EXTENDED moria1,moria2 0xBEEF
1208       650-EXTRAMAGIC=99
1209       650 ANONYMITY=high
1211   If clients receives extended events (selected by USEFEATUERE
1212   EXTENDED_EVENTS in Tor 0.1.2.2-alpha..Tor-0.2.1.x, and always-on in
1213   Tor 0.2.2.x and later), then each event line as specified below may be
1214   followed by additional arguments and additional lines.  Additional
1215   lines will be of the form:
1216       "650" ("-"/" ") KEYWORD ["=" ARGUMENTS] CRLF
1217   Additional arguments will be of the form
1218       SP KEYWORD ["=" ( QuotedString / * NonSpDquote ) ]
1220   Clients MUST tolerate events with arguments and keywords they do not
1221   recognize, and SHOULD process those events as if any unrecognized
1222   arguments and keywords were not present.
1224   Clients SHOULD NOT depend on the order of keywords=value arguments,
1225   and SHOULD NOT depend on there being no new keyword=value arguments
1226   appearing between existing keyword=value arguments, though as of this
1227   writing (Jun 2011) some do.  Thus, extensions to this protocol should
1228   add new keywords only after the existing keywords, until all
1229   controllers have been fixed.  At some point this "SHOULD NOT" might
1230   become a "MUST NOT".
1232 4.1.1. Circuit status changed
1234    The syntax is:
1236      "650" SP "CIRC" SP CircuitID SP CircStatus [SP Path]
1237           [SP "BUILD_FLAGS=" BuildFlags] [SP "PURPOSE=" Purpose]
1238           [SP "HS_STATE=" HSState] [SP "REND_QUERY=" HSAddress]
1239           [SP "TIME_CREATED=" TimeCreated]
1240           [SP "REASON=" Reason [SP "REMOTE_REASON=" Reason]] CRLF
1242       CircStatus =
1243                "LAUNCHED" / ; circuit ID assigned to new circuit
1244                "BUILT"    / ; all hops finished, can now accept streams
1245                "EXTENDED" / ; one more hop has been completed
1246                "FAILED"   / ; circuit closed (was not built)
1247                "CLOSED"     ; circuit closed (was built)
1249       Path = LongName *("," LongName)
1250         ; In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
1251         ; VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, Path
1252         ; is as follows:
1253         ; Path = ServerID *("," ServerID)
1255       BuildFlags = BuildFlag *("," BuildFlag)
1256       BuildFlag = "ONEHOP_TUNNEL" / "IS_INTERNAL" /
1257                   "NEED_CAPACITY" / "NEED_UPTIME"
1259       Purpose = "GENERAL" / "HS_CLIENT_INTRO" / "HS_CLIENT_REND" /
1260                 "HS_SERVICE_INTRO" / "HS_SERVICE_REND" / "TESTING" /
1261                 "CONTROLLER"
1263       HSState = "HSCI_CONNECTING" / "HSCI_INTRO_SENT" / "HSCI_DONE" /
1264                 "HSCR_CONNECTING" / "HSCR_ESTABLISHED_IDLE" /
1265                 "HSCR_ESTABLISHED_WAITING" / "HSCR_JOINED" /
1266                 "HSSI_CONNECTING" / "HSSI_ESTABLISHED" /
1267                 "HSSR_CONNECTING" / "HSSR_JOINED"
1269       HSAddress = 16*Base32Character
1270       Base32Character = ALPHA / "2" / "3" / "4" / "5" / "6" / "7"
1272       TimeCreated = ISOTime2Frac
1273       Seconds = 1*DIGIT
1274       Microseconds = 1*DIGIT
1276       Reason = "NONE" / "TORPROTOCOL" / "INTERNAL" / "REQUESTED" /
1277                "HIBERNATING" / "RESOURCELIMIT" / "CONNECTFAILED" /
1278                "OR_IDENTITY" / "OR_CONN_CLOSED" / "TIMEOUT" /
1279                "FINISHED" / "DESTROYED" / "NOPATH" / "NOSUCHSERVICE" /
1280                "MEASUREMENT_EXPIRED"
1282    The path is provided only when the circuit has been extended at least one
1283    hop.
1285    The "BUILD_FLAGS" field is provided only in versions 0.2.3.11-alpha
1286    and later.  Clients MUST accept build flags not listed above.
1287    Build flags are defined as follows:
1289       ONEHOP_TUNNEL   (one-hop circuit, used for tunneled directory conns)
1290       IS_INTERNAL     (internal circuit, not to be used for exiting streams)
1291       NEED_CAPACITY   (this circuit must use only high-capacity nodes)
1292       NEED_UPTIME     (this circuit must use only high-uptime nodes)
1294    The "PURPOSE" field is provided only in versions 0.2.1.6-alpha and
1295    later, and only if extended events are enabled (see 3.19).  Clients
1296    MUST accept purposes not listed above.  Purposes are defined as
1297    follows:
1299       GENERAL         (circuit for AP and/or directory request streams)
1300       HS_CLIENT_INTRO (HS client-side introduction-point circuit)
1301       HS_CLIENT_REND  (HS client-side rendezvous circuit; carries AP streams)
1302       HS_SERVICE_INTRO (HS service-side introduction-point circuit)
1303       HS_SERVICE_REND (HS service-side rendezvous circuit)
1304       TESTING         (reachability-testing circuit; carries no traffic)
1305       CONTROLLER      (circuit built by a controller)
1307    The "HS_STATE" field is provided only for hidden-service circuits,
1308    and only in versions 0.2.3.11-alpha and later.  Clients MUST accept
1309    hidden-service circuit states not listed above.  Hidden-service
1310    circuit states are defined as follows:
1312       HSCI_*      (client-side introduction-point circuit states)
1313         HSCI_CONNECTING          (connecting to intro point)
1314         HSCI_INTRO_SENT          (sent INTRODUCE1; waiting for reply from IP)
1315         HSCI_DONE                (received reply from IP relay; closing)
1317       HSCR_*      (client-side rendezvous-point circuit states)
1318         HSCR_CONNECTING          (connecting to or waiting for reply from RP)
1319         HSCR_ESTABLISHED_IDLE    (established RP; waiting for introduction)
1320         HSCR_ESTABLISHED_WAITING (introduction sent to HS; waiting for rend)
1321         HSCR_JOINED              (connected to HS)
1323       HSSI_*      (service-side introduction-point circuit states)
1324         HSSI_CONNECTING          (connecting to intro point)
1325         HSSI_ESTABLISHED         (established intro point)
1327       HSSR_*      (service-side rendezvous-point circuit states)
1328         HSSR_CONNECTING          (connecting to client's rend point)
1329         HSSR_JOINED              (connected to client's RP circuit)
1331    The "REND_QUERY" field is provided only for hidden-service-related
1332    circuits, and only in versions 0.2.3.11-alpha and later.  Clients
1333    MUST accept hidden service addresses in formats other than that
1334    specified above.
1336    The "TIME_CREATED" field is provided only in versions 0.2.3.11-alpha and
1337    later.  TIME_CREATED is the time at which the circuit was created or
1338    cannibalized.
1340    The "REASON" field is provided only for FAILED and CLOSED events, and only
1341    if extended events are enabled (see 3.19).  Clients MUST accept reasons
1342    not listed above.  Reasons are as given in tor-spec.txt, except for:
1344       NOPATH          (Not enough nodes to make circuit)
1346    The "REMOTE_REASON" field is provided only when we receive a DESTROY or
1347    TRUNCATE cell, and only if extended events are enabled.  It contains the
1348    actual reason given by the remote OR for closing the circuit. Clients MUST
1349    accept reasons not listed above.  Reasons are as listed in tor-spec.txt.
1351 4.1.2. Stream status changed
1353     The syntax is:
1355       "650" SP "STREAM" SP StreamID SP StreamStatus SP CircID SP Target
1356           [SP "REASON=" Reason [ SP "REMOTE_REASON=" Reason ]]
1357           [SP "SOURCE=" Source] [ SP "SOURCE_ADDR=" Address ":" Port ]
1358           [SP "PURPOSE=" Purpose]
1359           CRLF
1361       StreamStatus =
1362                "NEW"          / ; New request to connect
1363                "NEWRESOLVE"   / ; New request to resolve an address
1364                "REMAP"        / ; Address re-mapped to another
1365                "SENTCONNECT"  / ; Sent a connect cell along a circuit
1366                "SENTRESOLVE"  / ; Sent a resolve cell along a circuit
1367                "SUCCEEDED"    / ; Received a reply; stream established
1368                "FAILED"       / ; Stream failed and not retriable
1369                "CLOSED"       / ; Stream closed
1370                "DETACHED"       ; Detached from circuit; still retriable
1372        Target = Address ":" Port
1374   The circuit ID designates which circuit this stream is attached to.  If
1375   the stream is unattached, the circuit ID "0" is given.
1377       Reason = "MISC" / "RESOLVEFAILED" / "CONNECTREFUSED" /
1378                "EXITPOLICY" / "DESTROY" / "DONE" / "TIMEOUT" /
1379                "NOROUTE" / "HIBERNATING" / "INTERNAL"/ "RESOURCELIMIT" /
1380                "CONNRESET" / "TORPROTOCOL" / "NOTDIRECTORY" / "END" /
1381                "PRIVATE_ADDR"
1383    The "REASON" field is provided only for FAILED, CLOSED, and DETACHED
1384    events, and only if extended events are enabled (see 3.19).  Clients MUST
1385    accept reasons not listed above.  Reasons are as given in tor-spec.txt,
1386    except for:
1388       END          (We received a RELAY_END cell from the other side of this
1389                     stream.)
1390       PRIVATE_ADDR (The client tried to connect to a private address like
1391                     127.0.0.1 or 10.0.0.1 over Tor.)
1392       [XXXX document more. -NM]
1394    The "REMOTE_REASON" field is provided only when we receive a RELAY_END
1395    cell, and only if extended events are enabled.  It contains the actual
1396    reason given by the remote OR for closing the stream. Clients MUST accept
1397    reasons not listed above.  Reasons are as listed in tor-spec.txt.
1399    "REMAP" events include a Source if extended events are enabled:
1400       Source = "CACHE" / "EXIT"
1401    Clients MUST accept sources not listed above.  "CACHE" is given if
1402    the Tor client decided to remap the address because of a cached
1403    answer, and "EXIT" is given if the remote node we queried gave us
1404    the new address as a response.
1406    The "SOURCE_ADDR" field is included with NEW and NEWRESOLVE events if
1407    extended events are enabled.  It indicates the address and port
1408    that requested the connection, and can be (e.g.) used to look up the
1409    requesting program.
1411       Purpose = "DIR_FETCH" / "UPLOAD_DESC" / "DNS_REQUEST" /
1412                 "USER" /  "DIRPORT_TEST"
1414    The "PURPOSE" field is provided only for NEW and NEWRESOLVE events, and
1415    only if extended events are enabled (see 3.19).  Clients MUST accept
1416    purposes not listed above.
1418 4.1.3. OR Connection status changed
1420   The syntax is:
1422     "650" SP "ORCONN" SP (LongName / Target) SP ORStatus [ SP "REASON="
1423              Reason ] [ SP "NCIRCS=" NumCircuits ] CRLF
1425     ORStatus = "NEW" / "LAUNCHED" / "CONNECTED" / "FAILED" / "CLOSED"
1427         ; In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
1428         ; VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, OR
1429         ; Connection is as follows:
1430         "650" SP "ORCONN" SP (ServerID / Target) SP ORStatus [ SP "REASON="
1431                  Reason ] [ SP "NCIRCS=" NumCircuits ] CRLF
1433   NEW is for incoming connections, and LAUNCHED is for outgoing
1434   connections. CONNECTED means the TLS handshake has finished (in
1435   either direction). FAILED means a connection is being closed that
1436   hasn't finished its handshake, and CLOSED is for connections that
1437   have handshaked.
1439   A LongName or ServerID is specified unless it's a NEW connection, in
1440   which case we don't know what server it is yet, so we use Address:Port.
1442   If extended events are enabled (see 3.19), optional reason and
1443   circuit counting information is provided for CLOSED and FAILED
1444   events.
1446       Reason = "MISC" / "DONE" / "CONNECTREFUSED" /
1447                "IDENTITY" / "CONNECTRESET" / "TIMEOUT" / "NOROUTE" /
1448                "IOERROR" / "RESOURCELIMIT"
1450   NumCircuits counts both established and pending circuits.
1452 4.1.4. Bandwidth used in the last second
1454   The syntax is:
1455      "650" SP "BW" SP BytesRead SP BytesWritten *(SP Type "=" Num) CRLF
1456      BytesRead = 1*DIGIT
1457      BytesWritten = 1*DIGIT
1458      Type = "DIR" / "OR" / "EXIT" / "APP" / ...
1459      Num = 1*DIGIT
1461   BytesRead and BytesWritten are the totals. [In a future Tor version,
1462   we may also include a breakdown of the connection types that used
1463   bandwidth this second (not implemented yet).]
1465 4.1.5. Log messages
1467   The syntax is:
1468      "650" SP Severity SP ReplyText CRLF
1469   or
1470      "650+" Severity CRLF Data 650 SP "OK" CRLF
1472      Severity = "DEBUG" / "INFO" / "NOTICE" / "WARN"/ "ERR"
1474 4.1.6. New descriptors available
1476   Syntax:
1477      "650" SP "NEWDESC" 1*(SP LongName) CRLF
1478         ; In Tor versions 0.1.2.2-alpha through 0.2.2.1-alpha with feature
1479         ; VERBOSE_NAMES turned off and before version 0.1.2.2-alpha, it
1480         ; is as follows:
1481         "650" SP "NEWDESC" 1*(SP ServerID) CRLF
1483 4.1.7. New Address mapping
1485   Syntax:
1486      "650" SP "ADDRMAP" SP Address SP NewAddress SP Expiry
1487        [SP Error] SP GMTExpiry CRLF
1489      NewAddress = Address / "<error>"
1490      Expiry = DQUOTE ISOTime DQUOTE / "NEVER"
1492      Error = "error=" ErrorCode
1493      ErrorCode = XXXX
1494      GMTExpiry = "EXPIRES=" DQUOTE IsoTime DQUOTE
1496   Error and GMTExpiry are only provided if extended events are enabled.
1498   Expiry is expressed as the local time (rather than GMT).  This is a bug,
1499   left in for backward compatibility; new code should look at GMTExpiry
1500   instead.
1502   These events are generated when a new address mapping is entered in the
1503   cache, or when the answer for a RESOLVE command is found.
1505 4.1.8. Descriptors uploaded to us in our role as authoritative dirserver
1507   Syntax:
1508      "650" "+" "AUTHDIR_NEWDESCS" CRLF Action CRLF Message CRLF
1509        Descriptor CRLF "." CRLF "650" SP "OK" CRLF
1510      Action = "ACCEPTED" / "DROPPED" / "REJECTED"
1511      Message = Text
1513 4.1.9. Our descriptor changed
1515   Syntax:
1516      "650" SP "DESCCHANGED" CRLF
1518   [First added in 0.1.2.2-alpha.]
1520 4.1.10. Status events
1522   Status events (STATUS_GENERAL, STATUS_CLIENT, and STATUS_SERVER) are sent
1523   based on occurrences in the Tor process pertaining to the general state of
1524   the program.  Generally, they correspond to log messages of severity Notice
1525   or higher.  They differ from log messages in that their format is a
1526   specified interface.
1528   Syntax:
1529      "650" SP StatusType SP StatusSeverity SP StatusAction
1530                                          [SP StatusArguments] CRLF
1532      StatusType = "STATUS_GENERAL" / "STATUS_CLIENT" / "STATUS_SERVER"
1533      StatusSeverity = "NOTICE" / "WARN" / "ERR"
1534      StatusAction = 1*ALPHA
1535      StatusArguments = StatusArgument *(SP StatusArgument)
1536      StatusArgument = StatusKeyword '=' StatusValue
1537      StatusKeyword = 1*(ALNUM / "_")
1538      StatusValue = 1*(ALNUM / '_')  / QuotedString
1540      StatusAction is a string, and StatusArguments is a series of
1541      keyword=value pairs on the same line.  Values may be space-terminated
1542      strings, or quoted strings.
1544      These events are always produced with EXTENDED_EVENTS and
1545      VERBOSE_NAMES; see the explanations in the USEFEATURE section
1546      for details.
1548      Controllers MUST tolerate unrecognized actions, MUST tolerate
1549      unrecognized arguments, MUST tolerate missing arguments, and MUST
1550      tolerate arguments that arrive in any order.
1552      Each event description below is accompanied by a recommendation for
1553      controllers.  These recommendations are suggestions only; no controller
1554      is required to implement them.
1556   Compatibility note: versions of Tor before 0.2.0.22-rc incorrectly
1557   generated "STATUS_SERVER" as "STATUS_SEVER".  To be compatible with those
1558   versions, tools should accept both.
1560   Actions for STATUS_GENERAL events can be as follows:
1562      CLOCK_JUMPED
1563      "TIME=NUM"
1564        Tor spent enough time without CPU cycles that it has closed all
1565        its circuits and will establish them anew. This typically
1566        happens when a laptop goes to sleep and then wakes up again. It
1567        also happens when the system is swapping so heavily that Tor is
1568        starving. The "time" argument specifies the number of seconds Tor
1569        thinks it was unconscious for (or alternatively, the number of
1570        seconds it went back in time).
1572        This status event is sent as NOTICE severity normally, but WARN
1573        severity if Tor is acting as a server currently.
1575        {Recommendation for controller: ignore it, since we don't really
1576        know what the user should do anyway. Hm.}
1578      DANGEROUS_VERSION
1579      "CURRENT=version"
1580      "REASON=NEW/OBSOLETE/UNRECOMMENDED"
1581      "RECOMMENDED=\"version, version, ...\""
1582        Tor has found that directory servers don't recommend its version of
1583        the Tor software.  RECOMMENDED is a comma-and-space-separated string
1584        of Tor versions that are recommended.  REASON is NEW if this version
1585        of Tor is newer than any recommended version, OBSOLETE if
1586        this version of Tor is older than any recommended version, and
1587        UNRECOMMENDED if some recommended versions of Tor are newer and
1588        some are older than this version. (The "OBSOLETE" reason was called
1589        "OLD" from Tor 0.1.2.3-alpha up to and including 0.2.0.12-alpha.)
1591        {Controllers may want to suggest that the user upgrade OLD or
1592        UNRECOMMENDED versions.  NEW versions may be known-insecure, or may
1593        simply be development versions.}
1595      TOO_MANY_CONNECTIONS
1596      "CURRENT=NUM"
1597        Tor has reached its ulimit -n or whatever the native limit is on file
1598        descriptors or sockets.  CURRENT is the number of sockets Tor
1599        currently has open.  The user should really do something about
1600        this. The "current" argument shows the number of connections currently
1601        open.
1603        {Controllers may recommend that the user increase the limit, or
1604        increase it for them.  Recommendations should be phrased in an
1605        OS-appropriate way and automated when possible.}
1607      BUG
1608      "REASON=STRING"
1609        Tor has encountered a situation that its developers never expected,
1610        and the developers would like to learn that it happened. Perhaps
1611        the controller can explain this to the user and encourage her to
1612        file a bug report?
1614        {Controllers should log bugs, but shouldn't annoy the user in case a
1615        bug appears frequently.}
1617      CLOCK_SKEW
1618        SKEW="+" / "-" SECONDS
1619        MIN_SKEW="+" / "-" SECONDS.
1620        SOURCE="DIRSERV:" IP ":" Port /
1621               "NETWORKSTATUS:" IP ":" Port /
1622               "OR:" IP ":" Port /
1623               "CONSENSUS"
1624          If "SKEW" is present, it's an estimate of how far we are from the
1625          time declared in the source.  (In other words, if we're an hour in
1626          the past, the value is -3600.)  "MIN_SKEW" is present, it's a lower
1627          bound.  If the source is a DIRSERV, we got the current time from a
1628          connection to a dirserver.  If the source is a NETWORKSTATUS, we
1629          decided we're skewed because we got a v2 networkstatus from far in
1630          the future.  If the source is OR, the skew comes from a NETINFO
1631          cell from a connection to another relay.  If the source is
1632          CONSENSUS, we decided we're skewed because we got a networkstatus
1633          consensus from the future.
1635          {Tor should send this message to controllers when it thinks the
1636          skew is so high that it will interfere with proper Tor operation.
1637          Controllers shouldn't blindly adjust the clock, since the more
1638          accurate source of skew info (DIRSERV) is currently
1639          unauthenticated.}
1641      BAD_LIBEVENT
1642      "METHOD=" libevent method
1643      "VERSION=" libevent version
1644      "BADNESS=" "BROKEN" / "BUGGY" / "SLOW"
1645      "RECOVERED=" "NO" / "YES"
1646         Tor knows about bugs in using the configured event method in this
1647         version of libevent.  "BROKEN" libevents won't work at all;
1648         "BUGGY" libevents might work okay; "SLOW" libevents will work
1649         fine, but not quickly.  If "RECOVERED" is YES, Tor managed to
1650         switch to a more reliable (but probably slower!) libevent method.
1652         {Controllers may want to warn the user if this event occurs, though
1653         generally it's the fault of whoever built the Tor binary and there's
1654         not much the user can do besides upgrade libevent or upgrade the
1655         binary.}
1657      DIR_ALL_UNREACHABLE
1658        Tor believes that none of the known directory servers are
1659        reachable -- this is most likely because the local network is
1660        down or otherwise not working, and might help to explain for the
1661        user why Tor appears to be broken.
1663        {Controllers may want to warn the user if this event occurs; further
1664        action is generally not possible.}
1666      CONSENSUS_ARRIVED
1667         Tor has received and validated a new consensus networkstatus.
1668         (This event can be delayed a little while after the consensus
1669         is received, if Tor needs to fetch certificates.)
1671   Actions for STATUS_CLIENT events can be as follows:
1673      BOOTSTRAP
1674      "PROGRESS=" num
1675      "TAG=" Keyword
1676      "SUMMARY=" String
1677      ["WARNING=" String
1678       "REASON=" Keyword
1679       "COUNT=" num
1680       "RECOMMENDATION=" Keyword
1681      ]
1683        Tor has made some progress at establishing a connection to the
1684        Tor network, fetching directory information, or making its first
1685        circuit; or it has encountered a problem while bootstrapping. This
1686        status event is especially useful for users with slow connections
1687        or with connectivity problems.
1689        "Progress" gives a number between 0 and 100 for how far through
1690        the bootstrapping process we are. "Summary" is a string that can
1691        be displayed to the user to describe the *next* task that Tor
1692        will tackle, i.e., the task it is working on after sending the
1693        status event. "Tag" is a string that controllers can use to
1694        recognize bootstrap phases, if they want to do something smarter
1695        than just blindly displaying the summary string; see Section 5
1696        for the current tags that Tor issues.
1698        The StatusSeverity describes whether this is a normal bootstrap
1699        phase (severity notice) or an indication of a bootstrapping
1700        problem (severity warn).
1702        For bootstrap problems, we include the same progress, tag, and
1703        summary values as we would for a normal bootstrap event, but we
1704        also include "warning", "reason", "count", and "recommendation"
1705        key/value combos. The "count" number tells how many bootstrap
1706        problems there have been so far at this phase. The "reason"
1707        string lists one of the reasons allowed in the ORCONN event. The
1708        "warning" argument string with any hints Tor has to offer about
1709        why it's having troubles bootstrapping.
1711        The "reason" values are long-term-stable controller-facing tags to
1712        identify particular issues in a bootstrapping step.  The warning
1713        strings, on the other hand, are human-readable. Controllers
1714        SHOULD NOT rely on the format of any warning string. Currently
1715        the possible values for "recommendation" are either "ignore" or
1716        "warn" -- if ignore, the controller can accumulate the string in
1717        a pile of problems to show the user if the user asks; if warn,
1718        the controller should alert the user that Tor is pretty sure
1719        there's a bootstrapping problem.
1721        Currently Tor uses recommendation=ignore for the first
1722        nine bootstrap problem reports for a given phase, and then
1723        uses recommendation=warn for subsequent problems at that
1724        phase. Hopefully this is a good balance between tolerating
1725        occasional errors and reporting serious problems quickly.
1727      ENOUGH_DIR_INFO
1728        Tor now knows enough network-status documents and enough server
1729        descriptors that it's going to start trying to build circuits now.
1731        {Controllers may want to use this event to decide when to indicate
1732        progress to their users, but should not interrupt the user's browsing
1733        to tell them so.}
1735      NOT_ENOUGH_DIR_INFO
1736        We discarded expired statuses and router descriptors to fall
1737        below the desired threshold of directory information. We won't
1738        try to build any circuits until ENOUGH_DIR_INFO occurs again.
1740        {Controllers may want to use this event to decide when to indicate
1741        progress to their users, but should not interrupt the user's browsing
1742        to tell them so.}
1744      CIRCUIT_ESTABLISHED
1745        Tor is able to establish circuits for client use. This event will
1746        only be sent if we just built a circuit that changed our mind --
1747        that is, prior to this event we didn't know whether we could
1748        establish circuits.
1750        {Suggested use: controllers can notify their users that Tor is
1751        ready for use as a client once they see this status event. [Perhaps
1752        controllers should also have a timeout if too much time passes and
1753        this event hasn't arrived, to give tips on how to troubleshoot.
1754        On the other hand, hopefully Tor will send further status events
1755        if it can identify the problem.]}
1757      CIRCUIT_NOT_ESTABLISHED
1758      "REASON=" "EXTERNAL_ADDRESS" / "DIR_ALL_UNREACHABLE" / "CLOCK_JUMPED"
1759        We are no longer confident that we can build circuits. The "reason"
1760        keyword provides an explanation: which other status event type caused
1761        our lack of confidence.
1763        {Controllers may want to use this event to decide when to indicate
1764        progress to their users, but should not interrupt the user's browsing
1765        to do so.}
1766        [Note: only REASON=CLOCK_JUMPED is implemented currently.]
1768      DANGEROUS_PORT
1769      "PORT=" port
1770      "RESULT=" "REJECT" / "WARN"
1771        A stream was initiated to a port that's commonly used for
1772        vulnerable-plaintext protocols. If the Result is "reject", we
1773        refused the connection; whereas if it's "warn", we allowed it.
1775        {Controllers should warn their users when this occurs, unless they
1776        happen to know that the application using Tor is in fact doing so
1777        correctly (e.g., because it is part of a distributed bundle). They
1778        might also want some sort of interface to let the user configure
1779        their RejectPlaintextPorts and WarnPlaintextPorts config options.}
1781      DANGEROUS_SOCKS
1782      "PROTOCOL=" "SOCKS4" / "SOCKS5"
1783      "ADDRESS=" IP:port
1784        A connection was made to Tor's SOCKS port using one of the SOCKS
1785        approaches that doesn't support hostnames -- only raw IP addresses.
1786        If the client application got this address from gethostbyname(),
1787        it may be leaking target addresses via DNS.
1789        {Controllers should warn their users when this occurs, unless they
1790        happen to know that the application using Tor is in fact doing so
1791        correctly (e.g., because it is part of a distributed bundle).}
1793      SOCKS_UNKNOWN_PROTOCOL
1794        "DATA=string"
1795        A connection was made to Tor's SOCKS port that tried to use it
1796        for something other than the SOCKS protocol. Perhaps the user is
1797        using Tor as an HTTP proxy?   The DATA is the first few characters
1798        sent to Tor on the SOCKS port.
1800        {Controllers may want to warn their users when this occurs: it
1801        indicates a misconfigured application.}
1803      SOCKS_BAD_HOSTNAME
1804       "HOSTNAME=QuotedString"
1805        Some application gave us a funny-looking hostname. Perhaps
1806        it is broken? In any case it won't work with Tor and the user
1807        should know.
1809        {Controllers may want to warn their users when this occurs: it
1810        usually indicates a misconfigured application.}
1812   Actions for STATUS_SERVER can be as follows:
1814      EXTERNAL_ADDRESS
1815      "ADDRESS=IP"
1816      "HOSTNAME=NAME"
1817      "METHOD=CONFIGURED/DIRSERV/RESOLVED/INTERFACE/GETHOSTNAME"
1818        Our best idea for our externally visible IP has changed to 'IP'.
1819        If 'HOSTNAME' is present, we got the new IP by resolving 'NAME'.  If the
1820        method is 'CONFIGURED', the IP was given verbatim as a configuration
1821        option.  If the method is 'RESOLVED', we resolved the Address
1822        configuration option to get the IP.  If the method is 'GETHOSTNAME',
1823        we resolved our hostname to get the IP.  If the method is 'INTERFACE',
1824        we got the address of one of our network interfaces to get the IP.  If
1825        the method is 'DIRSERV', a directory server told us a guess for what
1826        our IP might be.
1828        {Controllers may want to record this info and display it to the user.}
1830      CHECKING_REACHABILITY
1831      "ORADDRESS=IP:port"
1832      "DIRADDRESS=IP:port"
1833        We're going to start testing the reachability of our external OR port
1834        or directory port.
1836        {This event could affect the controller's idea of server status, but
1837        the controller should not interrupt the user to tell them so.}
1839      REACHABILITY_SUCCEEDED
1840      "ORADDRESS=IP:port"
1841      "DIRADDRESS=IP:port"
1842        We successfully verified the reachability of our external OR port or
1843        directory port (depending on which of ORADDRESS or DIRADDRESS is
1844        given.)
1846        {This event could affect the controller's idea of server status, but
1847        the controller should not interrupt the user to tell them so.}
1849      GOOD_SERVER_DESCRIPTOR
1850        We successfully uploaded our server descriptor to at least one
1851        of the directory authorities, with no complaints.
1853        {Originally, the goal of this event was to declare "every authority
1854        has accepted the descriptor, so there will be no complaints
1855        about it." But since some authorities might be offline, it's
1856        harder to get certainty than we had thought. As such, this event
1857        is equivalent to ACCEPTED_SERVER_DESCRIPTOR below. Controllers
1858        should just look at ACCEPTED_SERVER_DESCRIPTOR and should ignore
1859        this event for now.}
1861      SERVER_DESCRIPTOR_STATUS
1862      "STATUS=" "LISTED" / "UNLISTED"
1863        We just got a new networkstatus consensus, and whether we're in
1864        it or not in it has changed. Specifically, status is "listed"
1865        if we're listed in it but previous to this point we didn't know
1866        we were listed in a consensus; and status is "unlisted" if we
1867        thought we should have been listed in it (e.g. we were listed in
1868        the last one), but we're not.
1870        {Moving from listed to unlisted is not necessarily cause for
1871        alarm. The relay might have failed a few reachability tests,
1872        or the Internet might have had some routing problems. So this
1873        feature is mainly to let relay operators know when their relay
1874        has successfully been listed in the consensus.}
1876        [Not implemented yet. We should do this in 0.2.2.x. -RD]
1878      NAMESERVER_STATUS
1879      "NS=addr"
1880      "STATUS=" "UP" / "DOWN"
1881      "ERR=" message
1882         One of our nameservers has changed status.
1884         {This event could affect the controller's idea of server status, but
1885         the controller should not interrupt the user to tell them so.}
1887      NAMESERVER_ALL_DOWN
1888         All of our nameservers have gone down.
1890         {This is a problem; if it happens often without the nameservers
1891         coming up again, the user needs to configure more or better
1892         nameservers.}
1894      DNS_HIJACKED
1895         Our DNS provider is providing an address when it should be saying
1896         "NOTFOUND"; Tor will treat the address as a synonym for "NOTFOUND".
1898         {This is an annoyance; controllers may want to tell admins that their
1899         DNS provider is not to be trusted.}
1901      DNS_USELESS
1902         Our DNS provider is giving a hijacked address instead of well-known
1903         websites; Tor will not try to be an exit node.
1905         {Controllers could warn the admin if the relay is running as an
1906         exit node: the admin needs to configure a good DNS server.
1907         Alternatively, this happens a lot in some restrictive environments
1908         (hotels, universities, coffeeshops) when the user hasn't registered.}
1910      BAD_SERVER_DESCRIPTOR
1911      "DIRAUTH=addr:port"
1912      "REASON=string"
1913         A directory authority rejected our descriptor.  Possible reasons
1914         include malformed descriptors, incorrect keys, highly skewed clocks,
1915         and so on.
1917         {Controllers should warn the admin, and try to cope if they can.}
1919      ACCEPTED_SERVER_DESCRIPTOR
1920      "DIRAUTH=addr:port"
1921         A single directory authority accepted our descriptor.
1922         // actually notice
1924        {This event could affect the controller's idea of server status, but
1925        the controller should not interrupt the user to tell them so.}
1927      REACHABILITY_FAILED
1928      "ORADDRESS=IP:port"
1929      "DIRADDRESS=IP:port"
1930        We failed to connect to our external OR port or directory port
1931        successfully.
1933        {This event could affect the controller's idea of server status.  The
1934        controller should warn the admin and suggest reasonable steps to take.}
1936 4.1.11. Our set of guard nodes has changed
1938   Syntax:
1939      "650" SP "GUARD" SP Type SP Name SP Status ... CRLF
1940      Type = "ENTRY"
1941      Name = The (possibly verbose) nickname of the guard affected.
1942      Status = "NEW" | "UP" | "DOWN" | "BAD" | "GOOD" | "DROPPED"
1944   [explain states. XXX]
1946 4.1.12. Network status has changed
1948   Syntax:
1949      "650" "+" "NS" CRLF 1*NetworkStatus "." CRLF "650" SP "OK" CRLF
1951   The event is used whenever our local view of a relay status changes.
1952   This happens when we get a new v3 consensus (in which case the entries
1953   we see are a duplicate of what we see in the NEWCONSENSUS event,
1954   below), but it also happens when we decide to mark a relay as up or
1955   down in our local status, for example based on connection attempts.
1957   [First added in 0.1.2.3-alpha]
1959 4.1.13. Bandwidth used on an application stream
1961   The syntax is:
1962      "650" SP "STREAM_BW" SP StreamID SP BytesWritten SP BytesRead CRLF
1963      BytesWritten = 1*DIGIT
1964      BytesRead = 1*DIGIT
1966   BytesWritten and BytesRead are the number of bytes written and read
1967   by the application since the last STREAM_BW event on this stream.
1969   Note that from Tor's perspective, *reading* a byte on a stream means
1970   that the application *wrote* the byte. That's why the order of "written"
1971   vs "read" is opposite for stream_bw events compared to bw events.
1973   These events are generated about once per second per stream; no events
1974   are generated for streams that have not written or read. These events
1975   apply only to streams entering Tor (such as on a SOCKSPort, TransPort,
1976   or so on). They are not generated for exiting streams.
1978 4.1.14. Per-country client stats
1980   The syntax is:
1981      "650" SP "CLIENTS_SEEN" SP TimeStarted SP CountrySummary CRLF
1983   We just generated a new summary of which countries we've seen clients
1984   from recently. The controller could display this for the user, e.g.
1985   in their "relay" configuration window, to give them a sense that they
1986   are actually being useful.
1988   Currently only bridge relays will receive this event, but once we figure
1989   out how to sufficiently aggregate and sanitize the client counts on
1990   main relays, we might start sending these events in other cases too.
1992   TimeStarted is a quoted string indicating when the reported summary
1993   counts from (in GMT).
1995   The CountrySummary keyword has as its argument a comma-separated,
1996   possibly empty set of "countrycode=count" pairs. For example (without
1997   linebreak),
1998   650-CLIENTS_SEEN TimeStarted="2008-12-25 23:50:43"
1999   CountrySummary=us=16,de=8,uk=8
2001 4.1.15. New consensus networkstatus has arrived
2003   The syntax is:
2004      "650" "+" "NEWCONSENSUS" CRLF 1*NetworkStatus "." CRLF "650" SP
2005      "OK" CRLF
2007   A new consensus networkstatus has arrived. We include NS-style lines for
2008   every relay in the consensus. NEWCONSENSUS is a separate event from the
2009   NS event, because the list here represents every usable relay: so any
2010   relay *not* mentioned in this list is implicitly no longer recommended.
2012   [First added in 0.2.1.13-alpha]
2014 4.1.16. New circuit buildtime has been set
2016   The syntax is:
2017      "650" SP "BUILDTIMEOUT_SET" SP Type SP "TOTAL_TIMES=" Total SP
2018         "TIMEOUT_MS=" Timeout SP "XM=" Xm SP "ALPHA=" Alpha SP
2019         "CUTOFF_QUANTILE=" Quantile SP "TIMEOUT_RATE=" TimeoutRate SP
2020         "CLOSE_MS=" CloseTimeout SP "CLOSE_RATE=" CloseRate
2021         CRLF
2022      Type = "COMPUTED" / "RESET" / "SUSPENDED" / "DISCARD" / "RESUME"
2023      Total = Integer count of timeouts stored
2024      Timeout = Integer timeout in milliseconds
2025      Xm = Estimated integer Pareto parameter Xm in milliseconds
2026      Alpha = Estimated floating point Paredo paremter alpha
2027      Quantile = Floating point CDF quantile cutoff point for this timeout
2028      TimeoutRate = Floating point ratio of circuits that timeout
2029      CloseTimeout = How long to keep measurement circs in milliseconds
2030      CloseRate = Floating point ratio of measurement circuits that are closed
2032   A new circuit build timeout time has been set. If Type is "COMPUTED",
2033   Tor has computed the value based on historical data. If Type is "RESET",
2034   initialization or drastic network changes have caused Tor to reset
2035   the timeout back to the default, to relearn again. If Type is
2036   "SUSPENDED", Tor has detected a loss of network connectivity and has
2037   temporarily changed the timeout value to the default until the network
2038   recovers. If type is "DISCARD", Tor has decided to discard timeout
2039   values that likely happened while the network was down. If type is
2040   "RESUME", Tor has decided to resume timeout calculation.
2042   The Total value is the count of circuit build times Tor used in
2043   computing this value. It is capped internally at the maximum number
2044   of build times Tor stores (NCIRCUITS_TO_OBSERVE).
2046   The Timeout itself is provided in milliseconds. Internally, Tor rounds
2047   this value to the nearest second before using it.
2049   [First added in 0.2.2.7-alpha]
2051 4.1.17. Signal received
2053   The syntax is:
2054      "650" SP "SIGNAL" SP Signal CRLF
2056      Signal = "RELOAD" / "DUMP" / "DEBUG" / "NEWNYM" / "CLEARDNSCACHE"
2058   A signal has been received and actions taken by Tor. The meaning of each
2059   signal, and the mapping to Unix signals, is as defined in section 3.7.
2060   Future versions of Tor MAY generate signals other than those listed here;
2061   controllers MUST be able to accept them.
2063   If Tor chose to ignore a signal (such as NEWNYM), this event will not be
2064   sent.  Note that some options (like ReloadTorrcOnSIGHUP) may affect the
2065   semantics of the signals here.
2067   Note that the HALT (SIGTERM) and SHUTDOWN (SIGINT) signals do not currently
2068   generate any event.
2070   [First added in 0.2.3.1-alpha]
2072 4.1.18. Configuration changed
2074   The syntax is:
2075      StartReplyLine *(MidReplyLine) EndReplyLine
2077      StartReplyLine = "650-CONF_CHANGED" CRLF
2078      MidReplyLine = "650-" KEYWORD ["=" VALUE] CRLF
2079      EndReplyLine = "650 OK"
2081   Tor configuration options have changed (such as via a SETCONF or RELOAD
2082   signal). KEYWORD and VALUE specify the configuration option that was changed.
2083   Undefined configuration options contain only the KEYWORD.
2085 4.1.19. Circuit status changed slightly
2087   The syntax is:
2089     "650" SP "CIRC_MINOR" SP CircuitID SP CircEvent [SP Path]
2090           [SP "BUILD_FLAGS=" BuildFlags] [SP "PURPOSE=" Purpose]
2091           [SP "HS_STATE=" HSState] [SP "REND_QUERY=" HSAddress]
2092           [SP "TIME_CREATED=" TimeCreated]
2093           [SP "OLD_PURPOSE=" Purpose [SP "OLD_HS_STATE=" HSState]] CRLF
2095     CircEvent =
2096              "PURPOSE_CHANGED" / ; circuit purpose or HS-related state changed
2097              "CANNIBALIZED"      ; circuit cannibalized
2099   Clients MUST accept circuit events not listed above.
2101   The "OLD_PURPOSE" field is provided for both PURPOSE_CHANGED and
2102   CANNIBALIZED events.  The "OLD_HS_STATE" field is provided whenever
2103   the "OLD_PURPOSE" field is provided and is a hidden-service-related
2104   purpose.
2106   Other fields are as specified in section 4.1.1 above.
2108   [First added in 0.2.3.11-alpha]
2110 5. Implementation notes
2112 5.1. Authentication
2114   If the control port is open and no authentication operation is enabled, Tor
2115   trusts any local user that connects to the control port.  This is generally
2116   a poor idea.
2118   If the 'CookieAuthentication' option is true, Tor writes a "magic
2119   cookie" file named "control_auth_cookie" into its data directory (or
2120   to another file specified in the 'CookieAuthFile' option).  To
2121   authenticate, the controller must demonstrate that it can read the
2122   contents of the cookie file:
2124   * Current versions of Tor support cookie authentication
2125     using the "COOKIE" authentication method: the controller sends the
2126     contents of the cookie file, encoded in hexadecimal.  This
2127     authentication method exposes the user running a controller to an
2128     unintended information disclosure attack whenever the controller
2129     has greater filesystem read access than the process that it has
2130     connected to.  (Note that a controller may connect to a process
2131     other than Tor.)  It is almost never safe to use, even if the
2132     controller's user has explicitly specified which filename to read
2133     an authentication cookie from.  For this reason, the COOKIE
2134     authentication method has been deprecated and will be removed from
2135     Tor before some future version of Tor.
2137   * 0.2.2.x versions of Tor starting with 0.2.2.36, and all versions of
2138     Tor after 0.2.3.12-alpha, support cookie authentication using the
2139     "SAFECOOKIE" authentication method, which discloses much less
2140     information about the contents of the cookie file.
2142   If the 'HashedControlPassword' option is set, it must contain the salted
2143   hash of a secret password.  The salted hash is computed according to the
2144   S2K algorithm in RFC 2440 (OpenPGP), and prefixed with the s2k specifier.
2145   This is then encoded in hexadecimal, prefixed by the indicator sequence
2146   "16:".  Thus, for example, the password 'foo' could encode to:
2147      16:660537E3E1CD49996044A3BF558097A981F539FEA2F9DA662B4626C1C2
2148         ++++++++++++++++**^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2149            salt                       hashed value
2150                        indicator
2151   You can generate the salt of a password by calling
2152            'tor --hash-password <password>'
2153   or by using the example code in the Python and Java controller libraries.
2154   To authenticate under this scheme, the controller sends Tor the original
2155   secret that was used to generate the password, either as a quoted string
2156   or encoded in hexadecimal.
2158 5.2. Don't let the buffer get too big.
2160   If you ask for lots of events, and 16MB of them queue up on the buffer,
2161   the Tor process will close the socket.
2163 5.3. Backward compatibility with v0 control protocol.
2165   The 'version 0' control protocol was replaced in Tor 0.1.1.x. Support
2166   was removed in Tor 0.2.0.x. Every non-obsolete version of Tor now
2167   supports the version 1 control protocol.
2169   For backward compatibility with the "version 0" control protocol,
2170   Tor used to check whether the third octet of the first command is zero.
2171   (If it was, Tor assumed that version 0 is in use.)
2173   This compatibility was removed in Tor 0.1.2.16 and 0.2.0.4-alpha.
2175 5.4. Tor config options for use by controllers
2177   Tor provides a few special configuration options for use by controllers.
2178   These options can be set and examined by the SETCONF and GETCONF commands,
2179   but are not saved to disk by SAVECONF.
2181   Generally, these options make Tor unusable by disabling a portion of Tor's
2182   normal operations.  Unless a controller provides replacement functionality
2183   to fill this gap, Tor will not correctly handle user requests.
2185   __AllDirActionsPrivate
2187     If true, Tor will try to launch all directory operations through
2188     anonymous connections.  (Ordinarily, Tor only tries to anonymize
2189     requests related to hidden services.)  This option will slow down
2190     directory access, and may stop Tor from working entirely if it does not
2191     yet have enough directory information to build circuits.
2193     (Boolean. Default: "0".)
2195   __DisablePredictedCircuits
2197     If true, Tor will not launch preemptive "general-purpose" circuits for
2198     streams to attach to.  (It will still launch circuits for testing and
2199     for hidden services.)
2201     (Boolean. Default: "0".)
2203   __LeaveStreamsUnattached
2205     If true, Tor will not automatically attach new streams to circuits;
2206     instead, the controller must attach them with ATTACHSTREAM.  If the
2207     controller does not attach the streams, their data will never be routed.
2209     (Boolean. Default: "0".)
2211   __HashedControlSessionPassword
2213     As HashedControlPassword, but is not saved to the torrc file by
2214     SAVECONF.  Added in Tor 0.2.0.20-rc.
2216   __ReloadTorrcOnSIGHUP
2218     If this option is true (the default), we reload the torrc from disk
2219     every time we get a SIGHUP (from the controller or via a signal).
2220     Otherwise, we don't.  This option exists so that controllers can keep
2221     their options from getting overwritten when a user sends Tor a HUP for
2222     some other reason (for example, to rotate the logs).
2224     (Boolean.  Default: "1")
2226   __OwningControllerProcess
2228     If this option is set to a process ID, Tor will periodically check
2229     whether a process with the specified PID exists, and exit if one
2230     does not.  Added in Tor 0.2.2.28-beta.  This option's intended use
2231     is documented in section 3.23 with the related TAKEOWNERSHIP
2232     command.
2234     Note that this option can only specify a single process ID, unlike
2235     the TAKEOWNERSHIP command which can be sent along multiple control
2236     connections.
2238     (String.  Default: unset.)
2240 5.5. Phases from the Bootstrap status event.
2242   This section describes the various bootstrap phases currently reported
2243   by Tor. Controllers should not assume that the percentages and tags
2244   listed here will continue to match up, or even that the tags will stay
2245   in the same order. Some phases might also be skipped (not reported)
2246   if the associated bootstrap step is already complete, or if the phase
2247   no longer is necessary. Only "starting" and "done" are guaranteed to
2248   exist in all future versions.
2250   Current Tor versions enter these phases in order, monotonically.
2251   Future Tors MAY revisit earlier stages.
2253   Phase 0:
2254   tag=starting summary="Starting"
2256   Tor starts out in this phase.
2258   Phase 5:
2259   tag=conn_dir summary="Connecting to directory mirror"
2261   Tor sends this event as soon as Tor has chosen a directory mirror --
2262   e.g. one of the authorities if bootstrapping for the first time or
2263   after a long downtime, or one of the relays listed in its cached
2264   directory information otherwise.
2266   Tor will stay at this phase until it has successfully established
2267   a TCP connection with some directory mirror. Problems in this phase
2268   generally happen because Tor doesn't have a network connection, or
2269   because the local firewall is dropping SYN packets.
2271   Phase 10:
2272   tag=handshake_dir summary="Finishing handshake with directory mirror"
2274   This event occurs when Tor establishes a TCP connection with a relay used
2275   as a directory mirror (or its https proxy if it's using one). Tor remains
2276   in this phase until the TLS handshake with the relay is finished.
2278   Problems in this phase generally happen because Tor's firewall is
2279   doing more sophisticated MITM attacks on it, or doing packet-level
2280   keyword recognition of Tor's handshake.
2282   Phase 15:
2283   tag=onehop_create summary="Establishing one-hop circuit for dir info"
2285   Once TLS is finished with a relay, Tor will send a CREATE_FAST cell
2286   to establish a one-hop circuit for retrieving directory information.
2287   It will remain in this phase until it receives the CREATED_FAST cell
2288   back, indicating that the circuit is ready.
2290   Phase 20:
2291   tag=requesting_status summary="Asking for networkstatus consensus"
2293   Once we've finished our one-hop circuit, we will start a new stream
2294   for fetching the networkstatus consensus. We'll stay in this phase
2295   until we get the 'connected' relay cell back, indicating that we've
2296   established a directory connection.
2298   Phase 25:
2299   tag=loading_status summary="Loading networkstatus consensus"
2301   Once we've established a directory connection, we will start fetching
2302   the networkstatus consensus document. This could take a while; this
2303   phase is a good opportunity for using the "progress" keyword to indicate
2304   partial progress.
2306   This phase could stall if the directory mirror we picked doesn't
2307   have a copy of the networkstatus consensus so we have to ask another,
2308   or it does give us a copy but we don't find it valid.
2310   Phase 40:
2311   tag=loading_keys summary="Loading authority key certs"
2313   Sometimes when we've finished loading the networkstatus consensus,
2314   we find that we don't have all the authority key certificates for the
2315   keys that signed the consensus. At that point we put the consensus we
2316   fetched on hold and fetch the keys so we can verify the signatures.
2318   Phase 45
2319   tag=requesting_descriptors summary="Asking for relay descriptors"
2321   Once we have a valid networkstatus consensus and we've checked all
2322   its signatures, we start asking for relay descriptors. We stay in this
2323   phase until we have received a 'connected' relay cell in response to
2324   a request for descriptors.
2326   Phase 50:
2327   tag=loading_descriptors summary="Loading relay descriptors"
2329   We will ask for relay descriptors from several different locations,
2330   so this step will probably make up the bulk of the bootstrapping,
2331   especially for users with slow connections. We stay in this phase until
2332   we have descriptors for at least 1/4 of the usable relays listed in
2333   the networkstatus consensus. This phase is also a good opportunity to
2334   use the "progress" keyword to indicate partial steps.
2336   Phase 80:
2337   tag=conn_or summary="Connecting to entry guard"
2339   Once we have a valid consensus and enough relay descriptors, we choose
2340   some entry guards and start trying to build some circuits. This step
2341   is similar to the "conn_dir" phase above; the only difference is
2342   the context.
2344   If a Tor starts with enough recent cached directory information,
2345   its first bootstrap status event will be for the conn_or phase.
2347   Phase 85:
2348   tag=handshake_or summary="Finishing handshake with entry guard"
2350   This phase is similar to the "handshake_dir" phase, but it gets reached
2351   if we finish a TCP connection to a Tor relay and we have already reached
2352   the "conn_or" phase. We'll stay in this phase until we complete a TLS
2353   handshake with a Tor relay.
2355   Phase 90:
2356   tag=circuit_create summary="Establishing circuits"
2358   Once we've finished our TLS handshake with an entry guard, we will
2359   set about trying to make some 3-hop circuits in case we need them soon.
2361   Phase 100:
2362   tag=done summary="Done"
2364   A full 3-hop exit circuit has been established. Tor is ready to handle
2365   application connections now.