Commit 150ed553 authored by Sebastian Hahn's avatar Sebastian Hahn
Browse files

Introduce END_STREAM_REASON_NOROUTE

parent b8aa14a3
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
  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.
+2 −3
Original line number Diff line number Diff line
@@ -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.]

+1 −1
Original line number Diff line number Diff line
@@ -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
+6 −1
Original line number Diff line number Diff line
@@ -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):