summaryrefslogtreecommitdiff
path: root/doc
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2005-06-18 01:34:28 +0000
committerRoger Dingledine <arma@torproject.org>2005-06-18 01:34:28 +0000
commitbc3c57857687af1a6679787f1470c15b0d8765be (patch)
treeebdf40cf3f97d6b91a7bec9452c667a959d24418 /doc
parent9b4aa8d2abbce71398e58188209a1b1d04885b96 (diff)
downloadtor-bc3c57857687af1a6679787f1470c15b0d8765be.tar.gz
tor-bc3c57857687af1a6679787f1470c15b0d8765be.zip
some fixes and questions on the control spec
svn:r4450
Diffstat (limited to 'doc')
-rw-r--r--doc/control-spec.txt65
1 files changed, 39 insertions, 26 deletions
diff --git a/doc/control-spec.txt b/doc/control-spec.txt
index e3637712c1..3426228d32 100644
--- a/doc/control-spec.txt
+++ b/doc/control-spec.txt
@@ -17,10 +17,10 @@ $Id$
1 Protocol outline
TC is a bidirectional message-based protocol. It assumes an underlying
- stream for communication between a controlling process (the "client" or
- "controller") and a Tor process (the "server" or "tor process"). The
- stream may be implemented via TCP, TLS-over-TCP, a Unix-domain socket, or
- so on, but it must provide reliable in-order delivery. For security, the
+ stream for communication between a controlling process (the "client"
+ or "controller") and a Tor process (or "server"). The stream may be
+ implemented via TCP, TLS-over-TCP, a Unix-domain socket, or so on,
+ but it must provide reliable in-order delivery. For security, the
stream should not be accessible by untrusted parties.
In TC, the client and server send typed messages to each other over the
@@ -30,15 +30,15 @@ $Id$
By default, all messages from the server are in response to messages from
the client. Some client requests, however, will cause the server to send
messages to the client indefinitely far into the future. Such
- "asynchronous" replies are marked to such.
+ "asynchronous" replies are marked as such.
Servers respond to messages in the order messages are received.
2 Message format
-2.1 Description format.
+2.1 Description format
- The message formates listed below use ABNF as described in RFC2234.
+ The message formats listed below use ABNF as described in RFC2234.
The protocol itself is loosely based on SMTP (see RFC 2821).
We use the following nonterminals from RFC2822: atom, qcontent
@@ -50,7 +50,7 @@ $Id$
There are explicitly no limits on line length. All 8-bit characters are
permitted unless explicitly disallowed.
-2.2 Commands from controller to Tor.
+2.2 Commands from controller to Tor
Command = Keyword Arguments CRLF / "+" Keyword Arguments CRLF Data
Keyword = 1*ALPHA
@@ -77,6 +77,7 @@ $Id$
; Identifiers for servers.
ServerID = Nickname / Fingerprint
Nickname = 1*NicknameChar
+[XXX perhaps this should be 1*19 NicknameChar ? -RD]
NicknameChar = "a"-"z" / "A"-"Z" / "0" - "9"
Fingerprint = "$" 40*HEXDIG
@@ -119,7 +120,7 @@ $Id$
syntax error, or a "553 impossible configuration setting" reply on a
semantic error.
- When a configuration options takes multiple values, or when multiple
+ When a configuration option takes multiple values, or when multiple
configuration keys form a context-sensitive group (see GETCONF below), then
setting _any_ of the options in a SETCONF command is taken to reset all of
the others. For example, if two ORBindAddress values are configured, and a
@@ -161,6 +162,9 @@ $Id$
EventCode = "CIRC" / "STREAM" / "ORCONN" / "BW" / "DEBUG" /
"INFO" / "NOTICE" / "WARN" / "ERR" / "NEWDESC"
+[XXX We should have an "ADDRESSMAP" event to hear when we learn
+about dns resolves, etc, so the controller can keep synced. -RD]
+
Any events *not* listed in the SETEVENTS line are turned off; thus, sending
SETEVENTS with an empty body turns off all event reporting.
@@ -189,8 +193,8 @@ $Id$
"SAVECONF" CRLF
Instructs the server to write out its config options into its torrc. Server
- returns "250 OK" if successful, or " if it can't write the file or some
- other error occurs.
+ returns "250 OK" if successful, or "551 Unable to write configuration
+ to disk" if it can't write the file or some other error occurs.
3.6 SIGNAL
@@ -202,14 +206,14 @@ $Id$
The meaning of the signals are:
- RELOAD -- Reload: reload config items, refetch directory. (as for HUP)
+ RELOAD -- Reload: reload config items, refetch directory. (like HUP)
SHUTDOWN -- Controlled shutdown: if server is an OP, exit immediately.
If it's an OR, close listeners and exit after 30 seconds.
- (as for INT)
+ (like INT)
DUMP -- Dump stats: log information about open connections and
- circuits. (as for USR1)
- DEBUG -- Debug: switch all open logs to loglevel debug. (as for USR2)
- TERM -- Immediate shutdown: clean up and exit now. (as for TERM)
+ circuits. (like USR1)
+ DEBUG -- Debug: switch all open logs to loglevel debug. (like USR2)
+ TERM -- Immediate shutdown: clean up and exit now. (like TERM)
The server responds with "250 OK" if the signal is recognized (or simply
closes the socket if it was asked to close immediately), or "552
@@ -264,7 +268,10 @@ $Id$
has resolved to that IP.
This functionality is designed to help implement the 3rd approach.}
- [XXXX When, if ever, can mappings expire? Should they expire?]
+ Mappings set by the controller last until the Tor process exits:
+ they never expire. If the controller wants the mapping to last only
+ a certain time, then it must explicitly un-map the address when that
+ time has elapsed.
3.8 GETINFO
@@ -314,7 +321,7 @@ $Id$
StreamID SP StreamStatus SP Target CRLF
"orconn-status"
- A series of lines as for a OR connection status event. Each is of the
+ A series of lines as for an OR connection status event. Each is of the
form:
ServerID SP ORStatus CRLF
@@ -329,7 +336,7 @@ $Id$
3.9 EXTENDCIRCUIT
Sent from the client to the server. The format is:
- "EXTENDCIRCUIT" SP CircuitID SP SeverID *("," ServerID) CRLF
+ "EXTENDCIRCUIT" SP CircuitID SP ServerID *("," ServerID) CRLF
This request takes one of two forms: either the Circuit ID is zero, in
which case it is a request for the server to build a new circuit according
@@ -338,8 +345,10 @@ $Id$
to the specified path.
If the request is successful, the server sends a "250 OK" message containing
- a message body consisting of the four-octet Circuit ID of the newly created
- circuit.
+ a message body consisting of the four-octet Circuit ID of the (maybe
+ newly created) circuit.
+
+[XXX four-octet? that sounds binary to me, yes? -RD]
3.10 ATTACHSTREAM
@@ -350,7 +359,8 @@ $Id$
associated with the specified circuit. Each stream may be associated with
at most one circuit, and multiple streams may share the same circuit.
Streams can only be attached to completed circuits (that is, circuits that
- have sent a circuit status 'built' event).
+ have sent a circuit status 'built' event or are listed as built in a
+ GETINFO circuit-status request).
If the circuit ID is 0, responsibility for attaching the given stream is
returned to Tor.
@@ -376,7 +386,9 @@ $Id$
fields, including fields for its nickname and identity.
If there is an error in parsing the descriptor, the server must send an
- appropriate error message. If the descriptor is well-formed but the server
+ appropriate error message.
+[XXX let's specify the status code here too -RD]
+ If the descriptor is well-formed but the server
chooses not to add it, it must reply with a 251 message whose body
explains why the server was not added.
@@ -421,7 +433,7 @@ $Id$
Reply codes follow the same 3-character format as used by SMTP, with the
first character defining a status, the second character defining a
- subsystem, and the third designates fine-grained information.
+ subsystem, and the third designating fine-grained information.
The TC protocol currently uses the following first characters:
@@ -446,7 +458,7 @@ $Id$
x1z Protocol
Refers to operations of the Tor Control protocol.
- x2z Tor
+ x5z Tor
Refers to actual operations of Tor system.
The following codes are defined:
@@ -482,7 +494,7 @@ $Id$
650 Asynchronous event notification
-4.1 Anynchronous events
+4.1 Asynchronous events
These replies can be sent after a corresponding SETEVENTS command has been
received. They will not be interleaved with other Reply elements, but they
@@ -602,3 +614,4 @@ $Id$
whether the third byte the first command is zero. If it is, Tor
assumes that version 0 is in use. This feature is deprecated, and will be
removed in the 0.1.2.x Tor development series.
+