diff --git a/doc/control-spec.txt b/doc/control-spec.txt index 75b6b219eb..86237f31fb 100644 --- a/doc/control-spec.txt +++ b/doc/control-spec.txt @@ -42,6 +42,13 @@ section 3 below. If the type is not recognized, servers respond with a "STAT" message (code UNRECOGNIZED; see 3.1 below), and clients simply ignore the message. +2.1. Types and encodings + + All numbers are given in big-endian (network) order. + + OR identities are given in hexadecimal, in the same format as identity key + fingerprints, but without spaces; see tor-spec.txt for more information. + 3. Message types 3.1. ERROR (Type 0x0000) @@ -134,10 +141,6 @@ the message. virtual keyword to get all HiddenServiceDir, HiddenServicePort, HiddenServiceNodes, and HiddenServiceExcludeNodes option settings. - As another exception, the controller can getconf the "version" string, - and Tor will return a string describing its version number. Setconf on - "version" will not work. - 3.5. CONFVALUE (Type 0x0004) Sent in response to a GETCONF message; contains a list of "Key Value\n" @@ -197,7 +200,7 @@ the message. 0x0006 -- New descriptors available OR List [NUL-terminated, comma-delimited list of - OR nickname/identity] + OR identity] 3.8. AUTHENTICATE (Type 0x0007) @@ -216,13 +219,13 @@ the message. Sent from the client to the server. The body contains one byte that indicates the action the client wishes the server to take. - 0x01 -- Reload: reload config items, refetch directory. - 0x02 -- Controlled shutdown: if server is an OP, exit immediately. - If it's an OR, close listeners and exit after 30 seconds. - 0x10 -- Dump stats: log information about open connections and - circuits. - 0x12 -- Debug: switch all open logs to loglevel debug. - 0x15 -- Immediate shutdown: clean up and exit now. + 1 (0x01) -- Reload: reload config items, refetch directory. + 2 (0x02) -- Controlled shutdown: if server is an OP, exit immediately. + If it's an OR, close listeners and exit after 30 seconds. + 10 (0x0A) -- Dump stats: log information about open connections and + circuits. + 12 (0x0C) -- Debug: switch all open logs to loglevel debug. + 15 (0x0F) -- Immediate shutdown: clean up and exit now. The server responds with DONE if the signal is recognized (or simply closes the socket if it was asked to close immediately), else ERROR. @@ -231,33 +234,28 @@ the message. [Proposal; not finalized] - Sent from the client to the server. The body contains: - Original address type [1 octet] - Original address [Variable length] - Replacement address type [1 octet] - Replacement address [Variable length] + Sent from the client to the server. The body contains a sequence of + address mappings, each consisting of the address to be mapped, a single + space, the replacement address, and a NL character. - Addresses types can be: - [0x01] for an IPv4 address (4 octets) - [0x02] for an IPv6 address (16 octets) - [0x03] for a hostname (variable-length, NUL-terminated) + Addresses may be IPv4 addresses, IPv6 addresses, or hostnames. The client sends this message to the server in order to tell it that future SOCKS requests for connections to the original address should be replaced with connections to the specified replacement address. If the addresses are well-formed, and the server is able to fulfill the request, the server - replies with a single ADDRESSMAPPED message containing the source and - destination addresses. If request is malformed, the server replies with - a syntax error message. The server can't fulfill the request, it replies - with an internal ERROR message. + replies with a single DONE message containing the source and destination + addresses. If request is malformed, the server replies with a syntax error + message. The server can't fulfill the request, it replies with an internal + ERROR message. The client may decline to provide a body for the original address, and - instead send a special null address (0.0.0.0 for IPv4, ::0 for IPv6, or - "." for hostname). This signifies that the server should choose the - original address itself, and return that address in the ADDRESSMAPPED - message. The server should ensure that an element of address space - that is unlikely to be in actual use. If there is already an address - mapped to the destination address, the server may reuse that mapping. + instead send a special null address (0.0.0.0 for IPv4, ::0 for IPv6, or "." + for hostname). This signifies that the server should choose the original + address itself, and return that address in the DONE message. The server + should ensure that an element of address space that is unlikely to be in + actual use. If there is already an address mapped to the destination + address, the server may reuse that mapping. If the original address is already mapped to a different address, the old mapping is removed. If the original address and the destination address @@ -279,22 +277,42 @@ the message. [XXXX When, if ever, can mappings expire? Should they expire?] [XXXX What addresses, if any, are safe to use?] -3.12 ADDRESSMAPPED (Type 0x000B) +3.12 GETINFO (Type 0x000B) [Proposal; not finalized] - Same format as MAPADDRESS. + Sent from the client to the server. The message body is as for GETCONF: + one or more NL-terminated strings. The server replies with an INFOVALUE + message. - This message is sent from the server to the client in response to a - MAPADDRESS or GETALLMAPPINGS message. + Unlike GETCONF, this message is used for data that are not stored in the + Tor configuration file, but instead. -3.13 GETALLMAPPINGS (Type 0x000C) + Recognized key and their values include: + + "version" -- The version of the server's software, including the name + of the software. (example: "Tor 0.0.9.4") + + "desc/id/" or "desc/name/" -- the latest server + descriptor for a given OR, NUL-terminated. If no such OR is known, the + corresponding value is an empty string. + + "desc/all-ids" -- a comma-separated list of all known OR identities. + + "addr-mappings" -- a NL-terminated list of address mappings, each in + the form of "from-address" SP "to-address". + +3.13 INFOVALUE (Type 0x000C) [Proposal; not finalized] - Sent from the client to the server. The server replies by sending an - ADDRESSMAPPED message for each current address mapping set by MAPADDRESS or - otherwise, followed by a DONE message. + Sent from the server to the client in response to a GETINFO message. + Contains one or more items of the format: + + Key [(NUL-terminated string)] + Value [(NUL-terminated string)] + + The keys match those given in the GETINFO message. 3.14 EXTENDCIRCUIT (Type 0x000D) @@ -306,7 +324,7 @@ the message. 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 - to the specified path, or the Circuit ID is nonzero, in which case it is a + to the specified path, or the Circuit ID is nonzero, in which case it is a request for the server to extend an existing circuit with that ID according to the specified path. @@ -326,29 +344,7 @@ the message. associated with the specified circuit. Each stream may be associated with at most one circuit, and multiple streams may share the same circuit. -3.16 GETDESCRIPTOR (Type 0x000F) - - [Proposal; not finalized] - - Sent from the client to the server. The message body contains one field: - OR nickname/identity [NUL-terminated] - - This message informs the server that it should send to the client a - complete descriptor corresponding to the specified router. If the router - field is non-empty, and the server has a descriptor for the router - specified, then the server should return the descriptor in the body of its - DONE message: - Descriptor [NUL-terminated string] - - (If the server does not have a descriptor for the router specified, then - it should return an error.) - - If the GETDESCRIPTOR message contains an empty body, then the server - should interpret the message as a request to send its list of descriptors. - The server then provides this list in the body of its DONE message: - OR List [NUL-terminated, comma-delimited list of OR nickname/identity] - -4.16 POSTDESCRIPTOR (Type 0x0010) +3.16 POSTDESCRIPTOR (Type 0x000F) [Proposal; not finalized] @@ -361,7 +357,7 @@ the message. fields, including fields for its nickname and identity. If there is an error in parsing the descriptor, or if the server rejects - the descriptor for any reason, the server should send an appropriate error + the descriptor for any reason, the server must send an appropriate error message. 4. Implementation notes