[or-cvs] [tor/master 2/4] Introduce END_STREAM_REASON_NOROUTE
nickm at torproject.org
nickm at torproject.org
Mon Aug 16 01:28:47 UTC 2010
Author: Sebastian Hahn <sebastian at torproject.org>
Date: Tue, 3 Aug 2010 16:46:28 +0200
Subject: Introduce END_STREAM_REASON_NOROUTE
Commit: 150ed553dfce93c6dd32ee59b8df0422e04cd699
---
changes/misc-reason | 3 ++-
doc/spec/tor-spec.txt | 5 ++---
src/or/or.h | 2 +-
src/or/reasons.c | 7 ++++++-
4 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/changes/misc-reason b/changes/misc-reason
index 2559fe6..cd21718 100644
--- a/changes/misc-reason
+++ b/changes/misc-reason
@@ -1,3 +1,4 @@
o Minor bugfixes:
- Exit nodes didn't recognize EHOSTUNREACH as a stream ending reason
- and sent back misc. Bugfix on 0.1.0.1-rc; fixes bug 1793.
+ and sent back END_STREAM_REASON_NOROUTE. Also update the spec to
+ reflect this new reason. Bugfix on 0.1.0.1-rc; fixes bug 1793.
diff --git a/doc/spec/tor-spec.txt b/doc/spec/tor-spec.txt
index a321aa8..511f137 100644
--- a/doc/spec/tor-spec.txt
+++ b/doc/spec/tor-spec.txt
@@ -831,7 +831,8 @@ see tor-design.pdf.
6 -- REASON_DONE (Anonymized TCP connection was closed)
7 -- REASON_TIMEOUT (Connection timed out, or OR timed out
while connecting)
- 8 -- (unallocated) [**]
+ 8 -- REASON_NOROUTE (Routing error while attempting to
+ contact destination)
9 -- REASON_HIBERNATING (OR is temporarily hibernating)
10 -- REASON_INTERNAL (Internal error at the OR)
11 -- REASON_RESOURCELIMIT (OR has no resources to fulfill request)
@@ -853,8 +854,6 @@ see tor-design.pdf.
[*] Older versions of Tor also send this reason when connections are
reset.
- [**] Due to a bug in versions of Tor through 0095, error reason 8 must
- remain allocated until that version is obsolete.
--- [The rest of this section describes unimplemented functionality.]
diff --git a/src/or/or.h b/src/or/or.h
index a2a6d38..910e612 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -544,7 +544,7 @@ typedef enum {
#define END_STREAM_REASON_DESTROY 5
#define END_STREAM_REASON_DONE 6
#define END_STREAM_REASON_TIMEOUT 7
-/* 8 is unallocated for historical reasons. */
+#define END_STREAM_REASON_NOROUTE 8
#define END_STREAM_REASON_HIBERNATING 9
#define END_STREAM_REASON_INTERNAL 10
#define END_STREAM_REASON_RESOURCELIMIT 11
diff --git a/src/or/reasons.c b/src/or/reasons.c
index 27abb79..0679119 100644
--- a/src/or/reasons.c
+++ b/src/or/reasons.c
@@ -26,6 +26,7 @@ stream_end_reason_to_control_string(int reason)
case END_STREAM_REASON_DESTROY: return "DESTROY";
case END_STREAM_REASON_DONE: return "DONE";
case END_STREAM_REASON_TIMEOUT: return "TIMEOUT";
+ case END_STREAM_REASON_NOROUTE: "return "NOROUTE";
case END_STREAM_REASON_HIBERNATING: return "HIBERNATING";
case END_STREAM_REASON_INTERNAL: return "INTERNAL";
case END_STREAM_REASON_RESOURCELIMIT: return "RESOURCELIMIT";
@@ -60,6 +61,7 @@ stream_end_reason_to_string(int reason)
case END_STREAM_REASON_DESTROY: return "destroyed";
case END_STREAM_REASON_DONE: return "closed normally";
case END_STREAM_REASON_TIMEOUT: return "gave up (timeout)";
+ case END_STREAM_REASON_NOROUTE: return "no route to host";
case END_STREAM_REASON_HIBERNATING: return "server is hibernating";
case END_STREAM_REASON_INTERNAL: return "internal error at server";
case END_STREAM_REASON_RESOURCELIMIT: return "server out of resources";
@@ -102,6 +104,8 @@ stream_end_reason_to_socks5_response(int reason)
return SOCKS5_SUCCEEDED;
case END_STREAM_REASON_TIMEOUT:
return SOCKS5_TTL_EXPIRED;
+ case END_STREAM_REASON_NOROUTE:
+ return SOCKS5_HOST_UNREACHABLE;
case END_STREAM_REASON_RESOURCELIMIT:
return SOCKS5_GENERAL_ERROR;
case END_STREAM_REASON_HIBERNATING:
@@ -161,8 +165,9 @@ errno_to_stream_end_reason(int e)
E_CASE(EACCES):
S_CASE(ENOTCONN):
S_CASE(ENETUNREACH):
- E_CASE(EHOSTUNREACH):
return END_STREAM_REASON_INTERNAL;
+ E_CASE(EHOSTUNREACH):
+ return END_STREAM_REASON_NOROUTE;
S_CASE(ECONNREFUSED):
return END_STREAM_REASON_CONNECTREFUSED;
S_CASE(ECONNRESET):
--
1.7.1
More information about the tor-commits
mailing list