control-spec.txt 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694
  1. $Id$
  2. TC: A Tor control protocol (Version 1)
  3. 0. Scope
  4. This document describes an implementation-specific protocol that is used
  5. for other programs (such as frontend user-interfaces) to communicate with a
  6. locally running Tor process. It is not part of the Tor onion routing
  7. protocol.
  8. This protocol replaces version 0 of TC, which is now deprecated. For
  9. reference, TC is described in "control-spec-v0.txt". Implementors are
  10. recommended to avoid using TC directly, but instead to use a library that
  11. can easily be updated to use the newer protocol.
  12. 1. Protocol outline
  13. TC is a bidirectional message-based protocol. It assumes an underlying
  14. stream for communication between a controlling process (the "client"
  15. or "controller") and a Tor process (or "server"). The stream may be
  16. implemented via TCP, TLS-over-TCP, a Unix-domain socket, or so on,
  17. but it must provide reliable in-order delivery. For security, the
  18. stream should not be accessible by untrusted parties.
  19. In TC, the client and server send typed messages to each other over the
  20. underlying stream. The client sends "commands" and the server sends
  21. "replies".
  22. By default, all messages from the server are in response to messages from
  23. the client. Some client requests, however, will cause the server to send
  24. messages to the client indefinitely far into the future. Such
  25. "asynchronous" replies are marked as such.
  26. Servers respond to messages in the order messages are received.
  27. 2. Message format
  28. 2.1. Description format
  29. The message formats listed below use ABNF as described in RFC2234.
  30. The protocol itself is loosely based on SMTP (see RFC 2821).
  31. We use the following nonterminals from RFC2822: atom, qcontent
  32. We define the following general-use nonterminals:
  33. String = DQUOTE *qcontent DQUOTE
  34. There are explicitly no limits on line length. All 8-bit characters are
  35. permitted unless explicitly disallowed.
  36. 2.2. Commands from controller to Tor
  37. Command = Keyword Arguments CRLF / "+" Keyword Arguments CRLF Data
  38. Keyword = 1*ALPHA
  39. Arguments = *(SP / VCHAR)
  40. Specific commands and their arguments are described below in section 3.
  41. 2.3. Replies from Tor to the controller
  42. Reply = *(MidReplyLine / DataReplyLine) EndReplyLine
  43. MidReplyLine = "-" ReplyLine
  44. DataReplyLine = "+" ReplyLine Data
  45. EndReplyLine = SP ReplyLine
  46. ReplyLine = StatusCode [ SP ReplyText ] CRLF
  47. ReplyText = XXXX
  48. StatusCode = XXXX
  49. Specific replies are mentioned below in section 3, and described more fully
  50. in section 4.
  51. 2.4. General-use tokens
  52. ; Identifiers for servers.
  53. ServerID = Nickname / Fingerprint
  54. Nickname = 1*19 NicknameChar
  55. NicknameChar = "a"-"z" / "A"-"Z" / "0" - "9"
  56. Fingerprint = "$" 40*HEXDIG
  57. ; Unique identifiers for streams or circuits. Currently, Tor only
  58. ; uses digits, but this may change
  59. StreamID = 1*16 IDChar
  60. CircuitID = 1*16 IDChar
  61. IDChar = ALPHA / DIGIT
  62. Address = ip4-address / ip6-address / hostname (XXXX Define these)
  63. ; A "Data" section is a sequence of octets concluded by the terminating
  64. ; sequence CRLF "." CRLF. The terminating sequence may not appear in the
  65. ; body of the data. Leading periods on lines in the data are escaped with
  66. ; an additional leading period as in RFC2821 section 4.5.2
  67. Data = *DataLine "." CRLF
  68. DataLine = CRLF / "." 1*LineItem CRLF / NonDotItem *LineItem CRLF
  69. LineItem = NonCR / 1*CR NonCRLF
  70. NonDotItem = NonDotCR / 1*CR NonCRLF
  71. 3. Commands
  72. All commands and other keywords are case-insensitive.
  73. 3.1. SETCONF
  74. Change the value of one or more configuration variables. The syntax is:
  75. "SETCONF" 1*(SP keyword ["=" String]) CRLF
  76. Tor behaves as though it had just read each of the key-value pairs
  77. from its configuration file. Keywords with no corresponding values have
  78. their configuration values reset to their defaults. SETCONF is
  79. all-or-nothing: if there is an error in any of the configuration settings,
  80. Tor sets none of them.
  81. Tor responds with a "250 configuration values set" reply on success.
  82. Tor responds with a "513 syntax error in configuration values" reply on
  83. syntax error, or a "553 impossible configuration setting" reply on a
  84. semantic error.
  85. When a configuration option takes multiple values, or when multiple
  86. configuration keys form a context-sensitive group (see GETCONF below), then
  87. setting _any_ of the options in a SETCONF command is taken to reset all of
  88. the others. For example, if two ORBindAddress values are configured, and a
  89. SETCONF command arrives containing a single ORBindAddress value, the new
  90. command's value replaces the two old values.
  91. 3.2. RESETCONF
  92. Remove all settings for a given configuration option entirely, and go
  93. back to its default value. The syntax is:
  94. "RESETCONF" 1*(SP keyword) CRLF
  95. Otherwise it behaves like SETCONF above.
  96. 3.3. GETCONF
  97. Request the value of a configuration variable. The syntax is:
  98. "GETCONF" 1*(SP keyword) CRLF
  99. If all of the listed keywords exist in the Tor configuration, Tor replies
  100. with a series of reply lines of the form:
  101. 250 keyword=value
  102. If any option is set to a 'default' value semantically different from an
  103. empty string, Tor may reply with a reply line of the form:
  104. 250 keyword
  105. If some of the listed keywords can't be found, Tor replies with a
  106. "552 unknown configuration keyword" message.
  107. If an option appears multiple times in the configuration, all of its
  108. key-value pairs are returned in order.
  109. Some options are context-sensitive, and depend on other options with
  110. different keywords. These cannot be fetched directly. Currently there
  111. is only one such option: clients should use the "HiddenServiceOptions"
  112. virtual keyword to get all HiddenServiceDir, HiddenServicePort,
  113. HiddenServiceNodes, and HiddenServiceExcludeNodes option settings.
  114. 3.4. SETEVENTS
  115. Request the server to inform the client about interesting events. The
  116. syntax is:
  117. "SETEVENTS" *(SP EventCode) CRLF
  118. EventCode = "CIRC" / "STREAM" / "ORCONN" / "BW" / "DEBUG" /
  119. "INFO" / "NOTICE" / "WARN" / "ERR" / "NEWDESC" / "ADDRMAP"
  120. Any events *not* listed in the SETEVENTS line are turned off; thus, sending
  121. SETEVENTS with an empty body turns off all event reporting.
  122. The server responds with a "250 OK" reply on success, and a "552
  123. Unrecognized event" reply if one of the event codes isn't recognized. (On
  124. error, the list of active event codes isn't changed.)
  125. 3.5. AUTHENTICATE
  126. Sent from the client to the server. The syntax is:
  127. "AUTHENTICATE" [ SP 1*HEXDIG / QuotedString ] CRLF
  128. The server responds with "250 OK" on success or "515 Bad authentication" if
  129. the authentication cookie is incorrect.
  130. The format of the 'cookie' is implementation-dependent; see 5.1 below for
  131. information on how the standard Tor implementation handles it.
  132. If Tor requires authentication and the controller has not yet sent an
  133. AUTHENTICATE message, Tor sends a "514 authentication required" reply to
  134. any other kind of message.
  135. 3.6. SAVECONF
  136. Sent from the client to the server. The syntax is:
  137. "SAVECONF" CRLF
  138. Instructs the server to write out its config options into its torrc. Server
  139. returns "250 OK" if successful, or "551 Unable to write configuration
  140. to disk" if it can't write the file or some other error occurs.
  141. 3.7. SIGNAL
  142. Sent from the client to the server. The syntax is:
  143. "SIGNAL" SP Signal CRLF
  144. Signal = "RELOAD" / "SHUTDOWN" / "DUMP" / "DEBUG" / "HALT" /
  145. "HUP" / "INT" / "USR1" / "USR2" / "TERM"
  146. The meaning of the signals are:
  147. RELOAD -- Reload: reload config items, refetch directory. (like HUP)
  148. SHUTDOWN -- Controlled shutdown: if server is an OP, exit immediately.
  149. If it's an OR, close listeners and exit after 30 seconds.
  150. (like INT)
  151. DUMP -- Dump stats: log information about open connections and
  152. circuits. (like USR1)
  153. DEBUG -- Debug: switch all open logs to loglevel debug. (like USR2)
  154. HALT -- Immediate shutdown: clean up and exit now. (like TERM)
  155. The server responds with "250 OK" if the signal is recognized (or simply
  156. closes the socket if it was asked to close immediately), or "552
  157. Unrecognized signal" if the signal is unrecognized.
  158. 3.8. MAPADDRESS
  159. Sent from the client to the server. The syntax is:
  160. "MAPADDRESS" 1*(Address "=" Address SP) CRLF
  161. The first address in each pair is an "original" address; the second is a
  162. "replacement" address. The client sends this message to the server in
  163. order to tell it that future SOCKS requests for connections to the original
  164. address should be replaced with connections to the specified replacement
  165. address. If the addresses are well-formed, and the server is able to
  166. fulfill the request, the server replies with a 250 message:
  167. 250-OldAddress1=NewAddress1
  168. 250 OldAddress2=NewAddress2
  169. containing the source and destination addresses. If request is malformed,
  170. the server replies with "512 syntax error in command argument". If the server
  171. can't fulfill the request, it replies with "451 resource exhausted."
  172. The client may decline to provide a body for the original address, and
  173. instead send a special null address ("0.0.0.0" for IPv4, "::0" for IPv6, or
  174. "." for hostname), signifying that the server should choose the original
  175. address itself, and return that address in the reply. The server
  176. should ensure that it returns an element of address space that is unlikely
  177. to be in actual use. If there is already an address mapped to the
  178. destination address, the server may reuse that mapping.
  179. If the original address is already mapped to a different address, the old
  180. mapping is removed. If the original address and the destination address
  181. are the same, the server removes any mapping in place for the original
  182. address.
  183. Example:
  184. C: MAPADDRESS 0.0.0.0=tor.eff.org 1.2.3.4=tor.freehaven.net
  185. S: 250-127.192.10.10=tor.eff.org
  186. S: 250 1.2.3.4=tor.freehaven.net
  187. {Note: This feature is designed to be used to help Tor-ify applications
  188. that need to use SOCKS4 or hostname-less SOCKS5. There are three
  189. approaches to doing this:
  190. 1. Somehow make them use SOCKS4a or SOCKS5-with-hostnames instead.
  191. 2. Use tor-resolve (or another interface to Tor's resolve-over-SOCKS
  192. feature) to resolve the hostname remotely. This doesn't work
  193. with special addresses like x.onion or x.y.exit.
  194. 3. Use MAPADDRESS to map an IP address to the desired hostname, and then
  195. arrange to fool the application into thinking that the hostname
  196. has resolved to that IP.
  197. This functionality is designed to help implement the 3rd approach.}
  198. Mappings set by the controller last until the Tor process exits:
  199. they never expire. If the controller wants the mapping to last only
  200. a certain time, then it must explicitly un-map the address when that
  201. time has elapsed.
  202. 3.9. GETINFO
  203. Sent from the client to the server. The syntax is as for GETCONF:
  204. "GETINFO" 1*(SP keyword) CRLF
  205. one or more NL-terminated strings. The server replies with an INFOVALUE
  206. message.
  207. Unlike GETCONF, this message is used for data that are not stored in the Tor
  208. configuration file, and that may be longer than a single line. On success,
  209. one ReplyLine is sent for each requested value, followed by a final 250 OK
  210. ReplyLine. If a value fits on a single line, the format is:
  211. 250-keyword=value
  212. If a value must be split over multiple lines, the format is:
  213. 250+keyword=
  214. value
  215. .
  216. Recognized keys and their values include:
  217. "version" -- The version of the server's software, including the name
  218. of the software. (example: "Tor 0.0.9.4")
  219. "config-file" -- The location of Tor's configuration file ("torrc").
  220. "desc/id/<OR identity>" or "desc/name/<OR nickname>" -- the latest server
  221. descriptor for a given OR, NUL-terminated. If no such OR is known, the
  222. corresponding value is an empty string.
  223. "network-status" -- a space-separated list of all known OR identities.
  224. This is in the same format as the router-status line in directories;
  225. see tor-spec.txt for details.
  226. "addr-mappings/all"
  227. "addr-mappings/config"
  228. "addr-mappings/cache"
  229. "addr-mappings/control" -- a space-separated list of address mappings, each
  230. in the form of "from-address=to-address". The 'config' key
  231. returns those address mappings set in the configuration; the 'cache'
  232. key returns the mappings in the client-side DNS cache; the 'control'
  233. key returns the mappings set via the control interface; the 'all'
  234. target returns the mappings set through any mechanism.
  235. "circuit-status"
  236. A series of lines as for a circuit status event. Each line is of the form:
  237. CircuitID SP CircStatus SP Path CRLF
  238. "stream-status"
  239. A series of lines as for a stream status event. Each is of the form:
  240. StreamID SP StreamStatus SP CircID SP Target CRLF
  241. "orconn-status"
  242. A series of lines as for an OR connection status event. Each is of the
  243. form:
  244. ServerID SP ORStatus CRLF
  245. "helper-nodes"
  246. A series of lines listing the currently chosen helper nodes, if any.
  247. Each is of the form:
  248. ServerID SP ((("down" / "unlisted") ISOTime) / "up") CRLF
  249. "accounting/enabled"
  250. "accounting/hibernating"
  251. "accounting/bytes"
  252. "accounting/bytes-left"
  253. "accounting/interval-start"
  254. "accounting/interval-wake"
  255. "accounting/interval-end"
  256. Information about accounting status. If accounting is enabled,
  257. "enabled" is 1; otherwise it is 0. The "hibernating" field is "hard"
  258. if we are accepting no data; "soft" if we're accepting no new
  259. connections, and "awake" if we're not hibernating at all. The "bytes"
  260. and "bytes-left" fields contain (read-bytes SP write-bytes), for the
  261. start and the rest of the interval respectively. The 'interval-start'
  262. and 'interval-end' fields are the borders of the current interval; the
  263. 'interval-wake' field is the time within the current interval (if any)
  264. where we plan[ned] to start being active.
  265. "config/names"
  266. A series of lines listing the available configuration options. Each is
  267. of the form:
  268. OptionName SP OptionType [ SP Documentation ] CRLF
  269. OptionName = Keyword
  270. OptionType = "Integer" / "TimeInterval" / "DataSize" / "Float" /
  271. "Boolean" / "Time" / "CommaList" / "Dependant" / "Virtual" /
  272. "String" / "LineList"
  273. Documentation = Text
  274. "info/names"
  275. A series of lines listing the available GETINFO options. Each is of
  276. one of these forms:
  277. OptionName SP Documentation CRLF
  278. OptionPrefix SP Documentation CRLF
  279. OptionPrefix = OptionName "/*"
  280. Examples:
  281. C: GETINFO version desc/name/moria1
  282. S: 250+desc/name/moria=
  283. S: [Descriptor for moria]
  284. S: .
  285. S: 250-version=Tor 0.1.1.0-alpha-cvs
  286. S: 250 OK
  287. 3.10. EXTENDCIRCUIT
  288. Sent from the client to the server. The format is:
  289. "EXTENDCIRCUIT" SP CircuitID SP ServerID *("," ServerID) CRLF
  290. This request takes one of two forms: either the Circuit ID is zero, in
  291. which case it is a request for the server to build a new circuit according
  292. to the specified path, or the Circuit ID is nonzero, in which case it is a
  293. request for the server to extend an existing circuit with that ID according
  294. to the specified path.
  295. If the request is successful, the server sends a reply containing a message
  296. body consisting of the Circuit ID of the (maybe newly created) circuit.
  297. The syntax is "250" SP "EXTENDED" SP CircuitID CRLF.
  298. 3.11. ATTACHSTREAM
  299. Sent from the client to the server. The syntax is:
  300. "ATTACHSTREAM" SP StreamID SP CircuitID CRLF
  301. This message informs the server that the specified stream should be
  302. associated with the specified circuit. Each stream may be associated with
  303. at most one circuit, and multiple streams may share the same circuit.
  304. Streams can only be attached to completed circuits (that is, circuits that
  305. have sent a circuit status 'BUILT' event or are listed as built in a
  306. GETINFO circuit-status request).
  307. If the circuit ID is 0, responsibility for attaching the given stream is
  308. returned to Tor.
  309. Tor responds with "250 OK" if it can attach the stream, 552 if the circuit
  310. or stream didn't exist, or 551 if the stream couldn't be attached for
  311. another reason.
  312. {Implementation note: By default, Tor automatically attaches streams to
  313. circuits itself, unless the configuration variable
  314. "__LeaveStreamsUnattached" is set to "1". Attempting to attach streams
  315. via TC when "__LeaveStreamsUnattached" is false may cause a race between
  316. Tor and the controller, as both attempt to attach streams to circuits.}
  317. 3.12. POSTDESCRIPTOR
  318. Sent from the client to the server. The syntax is:
  319. "+POSTDESCRIPTOR" CRLF Descriptor CRLF "." CRLF
  320. This message informs the server about a new descriptor.
  321. The descriptor, when parsed, must contain a number of well-specified
  322. fields, including fields for its nickname and identity.
  323. If there is an error in parsing the descriptor, the server must send a "554
  324. Invalid descriptor" reply. If the descriptor is well-formed but the server
  325. chooses not to add it, it must reply with a 251 message whose body explains
  326. why the server was not added. If the descriptor is added, Tor replies with
  327. "250 OK".
  328. 3.13. REDIRECTSTREAM
  329. Sent from the client to the server. The syntax is:
  330. "REDIRECTSTREAM" SP StreamID SP Address CRLF
  331. Tells the server to change the exit address on the specified stream. No
  332. remapping is performed on the new provided address.
  333. To be sure that the modified address will be used, this event must be sent
  334. after a new stream event is received, and before attaching this stream to
  335. a circuit.
  336. Tor replies with "250 OK" on success.
  337. 3.14. CLOSESTREAM
  338. Sent from the client to the server. The syntax is:
  339. "CLOSESTREAM" SP StreamID SP Reason *(SP Flag) CRLF
  340. Tells the server to close the specified stream. The reason should be one
  341. of the Tor RELAY_END reasons given in tor-spec.txt, as a decimal. Flags is
  342. not used currently; Tor servers SHOULD ignore unrecognized flags. Tor may
  343. hold the stream open for a while to flush any data that is pending.
  344. 3.15. CLOSECIRCUIT
  345. The syntax is:
  346. CLOSECIRCUIT SP CircuitID *(SP Flag) CRLF
  347. Flag = "IfUnused"
  348. Tells the server to close the specified circuit. If "IfUnused" is
  349. provided, do not close the circuit unless it is unused.
  350. Other flags may be defined in the future; Tor SHOULD ignore unrecognized
  351. flags.
  352. 3.16. QUIT
  353. Tells the server to hang up on this controller connection. This command
  354. can be used before authenticating.
  355. 4. Replies
  356. Reply codes follow the same 3-character format as used by SMTP, with the
  357. first character defining a status, the second character defining a
  358. subsystem, and the third designating fine-grained information.
  359. The TC protocol currently uses the following first characters:
  360. 2yz Positive Completion Reply
  361. The command was successful; a new request can be started.
  362. 4yz Temporary Negative Completion reply
  363. The command was unsuccessful but might be reattempted later.
  364. 5yz Permanent Negative Completion Reply
  365. The command was unsuccessful; the client should not try exactly
  366. that sequence of commands again.
  367. 6yz Asynchronous Reply
  368. Sent out-of-order in response to an earlier SETEVENTS command.
  369. The following second characters are used:
  370. x0z Syntax
  371. Sent in response to ill-formed or nonsensical commands.
  372. x1z Protocol
  373. Refers to operations of the Tor Control protocol.
  374. x5z Tor
  375. Refers to actual operations of Tor system.
  376. The following codes are defined:
  377. 250 OK
  378. 251 Operation was unnecessary
  379. [Tor has declined to perform the operation, but no harm was done.]
  380. 451 Resource exhausted
  381. 500 Syntax error: protocol
  382. 510 Unrecognized command
  383. 511 Unimplemented command
  384. 512 Syntax error in command argument
  385. 513 Unrecognized command argument
  386. 514 Authentication required
  387. 515 Bad authentication
  388. 550 Unspecified Tor error
  389. 551 Internal error
  390. [Something went wrong inside Tor, so that the client's
  391. request couldn't be fulfilled.]
  392. 552 Unrecognized entity
  393. [A configuration key, a stream ID, circuit ID, event,
  394. mentioned in the command did not actually exist.]
  395. 553 Invalid configuration value
  396. [The client tried to set a configuration option to an
  397. incorrect, ill-formed, or impossible value.]
  398. 554 Invalid descriptor
  399. 555 Unmanaged entity
  400. 650 Asynchronous event notification
  401. Unless specified to have specific contents, the human-readable messages
  402. in error replies should not be relied upon to match those in this document.
  403. 4.1. Asynchronous events
  404. These replies can be sent after a corresponding SETEVENTS command has been
  405. received. They will not be interleaved with other Reply elements, but they
  406. can appear between a command and its corresponding reply. For example,
  407. this sequence is possible:
  408. C: SETEVENTS CIRC
  409. S: 250 OK
  410. C: GETCONF SOCKSPORT ORPORT
  411. S: 650 CIRC 1000 EXTENDED moria1,moria2
  412. S: 250-SOCKSPORT=9050
  413. S: 250 ORPORT=0
  414. But this sequence is disallowed:
  415. C: SETEVENTS CIRC
  416. S: 250 OK
  417. C: GETCONF SOCKSPORT ORPORT
  418. S: 250-SOCKSPORT=9050
  419. S: 650 CIRC 1000 EXTENDED moria1,moria2
  420. S: 250 ORPORT=0
  421. Clients SHOULD tolerate more arguments in an asynchonous reply than
  422. expected, and SHOULD tolerate more lines in an asynchronous reply than
  423. expected. For instance, a client that expects a CIRC message like:
  424. 650 CIRC 1000 EXTENDED moria1,moria2
  425. should tolerate:
  426. 650+CIRC 1000 EXTENDED moria1,moria2 0xBEEF
  427. 650-EXTRAMAGIC=99
  428. 650 ANONYMITY=high
  429. 4.1.1. Circuit status changed
  430. The syntax is:
  431. "650" SP "CIRC" SP CircuitID SP CircStatus SP Path
  432. CircStatus =
  433. "LAUNCHED" / ; circuit ID assigned to new circuit
  434. "BUILT" / ; all hops finished, can now accept streams
  435. "EXTENDED" / ; one more hop has been completed
  436. "FAILED" / ; circuit closed (was not built)
  437. "CLOSED" ; circuit closed (was built)
  438. Path = ServerID *("," ServerID)
  439. 4.1.2. Stream status changed
  440. The syntax is:
  441. "650" SP "STREAM" SP StreamID SP StreamStatus SP CircID SP Target SP
  442. StreamStatus =
  443. "NEW" / ; New request to connect
  444. "NEWRESOLVE" / ; New request to resolve an address
  445. "SENTCONNECT" / ; Sent a connect cell along a circuit
  446. "SENTRESOLVE" / ; Sent a resolve cell along a circuit
  447. "SUCCEEDED" / ; Received a reply; stream established
  448. "FAILED" / ; Stream failed and not retriable.
  449. "CLOSED" / ; Stream closed
  450. "DETACHED" ; Detached from circuit; still retriable.
  451. Target = Address ":" Port
  452. The circuit ID designates which circuit this stream is attached to. If
  453. the stream is unattached, the circuit ID "0" is given.
  454. 4.1.3. OR Connection status changed
  455. The syntax is:
  456. "650" SP "ORCONN" SP ServerID SP ORStatus
  457. ORStatus = "LAUNCHED" / "CONNECTED" / "FAILED" / "CLOSED"
  458. 4.1.4. Bandwidth used in the last second
  459. The syntax is:
  460. "650" SP "BW" SP BytesRead SP BytesWritten
  461. BytesRead = 1*DIGIT
  462. BytesWritten = 1*DIGIT
  463. 4.1.5. Log message
  464. The syntax is:
  465. "650" SP Severity SP ReplyText
  466. or
  467. "650+" Severity CRLF Data
  468. Severity = "DEBUG" / "INFO" / "NOTICE" / "WARN"/ "ERR"
  469. 4.1.6. New descriptors available
  470. Syntax:
  471. "650" SP "NEWDESC" 1*(SP ServerID)
  472. 4.1.7. New Address mapping
  473. Syntax:
  474. "650" SP "ADDRMAP" SP Address SP Address SP Expiry
  475. Expiry = DQOUTE ISOTime DQUOTE / "NEVER"
  476. 5. Implementation notes
  477. 5.1. Authentication
  478. By default, the current Tor implementation trusts all local users.
  479. If the 'CookieAuthentication' option is true, Tor writes a "magic cookie"
  480. file named "control_auth_cookie" into its data directory. To authenticate,
  481. the controller must send the contents of this file.
  482. If the 'HashedControlPassword' option is set, it must contain the salted
  483. hash of a secret password. The salted hash is computed according to the
  484. S2K algorithm in RFC 2440 (OpenPGP), and prefixed with the s2k specifier.
  485. This is then encoded in hexadecimal, prefixed by the indicator sequence
  486. "16:". Thus, for example, the password 'foo' could encode to:
  487. 16:660537E3E1CD49996044A3BF558097A981F539FEA2F9DA662B4626C1C2
  488. ++++++++++++++++**^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  489. salt hashed value
  490. indicator
  491. You can generate the salt of a password by calling
  492. 'tor --hash-password <password>'
  493. or by using the example code in the Python and Java controller libraries.
  494. To authenticate under this scheme, the controller sends Tor the original
  495. secret that was used to generate the password.
  496. 5.2. Don't let the buffer get too big.
  497. If you ask for lots of events, and 16MB of them queue up on the buffer,
  498. the Tor process will close the socket.
  499. 5.3. Backward compatibility
  500. For backward compatibility with the "version 0" control protocol, Tor checks
  501. whether the third octet the first command is zero. If it is, Tor
  502. assumes that version 0 is in use. This feature is deprecated, and will be
  503. removed in the 0.1.2.x Tor development series.
  504. In order to detect which version of the protocol is supported controllers
  505. should send the sequence [00 00 0D 0A]. This is a valid and unrecognized
  506. command in both protocol versions, and implementations can detect which
  507. error they have received.