summaryrefslogtreecommitdiff
path: root/doc/control-spec.txt
diff options
context:
space:
mode:
Diffstat (limited to 'doc/control-spec.txt')
-rw-r--r--doc/control-spec.txt76
1 files changed, 75 insertions, 1 deletions
diff --git a/doc/control-spec.txt b/doc/control-spec.txt
index c0f77382e6..0e793b9ac1 100644
--- a/doc/control-spec.txt
+++ b/doc/control-spec.txt
@@ -78,11 +78,16 @@ the message.
0x0007 Unauthorized.
[The client tried to send a command that requires
- authorization, but it hasn't sent a valid AUTHENTICATE message.]
+ authorization, but it hasn't sent a valid AUTHENTICATE
+ message.]
0x0008 Failed authentication attempt
[The client sent a well-formed authorization message.]
+ 0x0009 Resource exhausted
+ [The server didn't have enough of a given resource to
+ fulfill a given request.]
+
The rest of the body should be a human-readable description of the error.
In general, new error codes should only be added when they don't fall under
@@ -212,6 +217,75 @@ the message.
The server responds with DONE if the signal is recognized (or simply
closes the socket if it was asked to close immediately), else ERROR.
+3.11. MAPADDRESS (Type 0x000A)
+
+ [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]
+
+ 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)
+
+ 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.
+
+ 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 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
+ are the same, the server removes any mapping in place for the original
+ address.
+
+ {Note: This feature is designed to be used to help Tor-ify applications
+ that need to use SOCKS4 or hostname-less SOCKS5. There are three
+ approaches to doing this:
+ 1. Somehow make them use SOCKS4a or SOCKS5-with-hostnames instead.
+ 2. Use tor-resolve (or another interface to Tor's resolve-over-SOCKS
+ feature) to resolve the hostname remotely. This doesn't work
+ with special addresses like x.onion or x.y.exit.
+ 3. Use MAPADDRESS to map an IP address to the desired hostname, and then
+ arrange to fool the application into thinking that the hostname
+ 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?]
+ [XXXX What addresses, if any, are safe to use?]
+
+3.12 ADDRESSMAPPED (Type 0x000B)
+
+ [Proposal; not finalized]
+
+ Same format as MAPADDRESS.
+
+ This message is sent from the server to the client in response to a
+ MAPADDRESS or GETALLMAPPINGS message.
+
+3.13 GETALLMAPPINGS (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.
+
4. Implementation notes
4.1. There are four ways we could authenticate, for now: