Index: src/or/control.c =================================================================== --- src/or/control.c (revision 10933) +++ src/or/control.c (working copy) @@ -3096,7 +3096,7 @@ if (expires < 3 || expires == TIME_MAX) send_control_event_extended(EVENT_ADDRMAP, ALL_NAMES, "650 ADDRMAP %s %s NEVER@%s\r\n", from, to, - error); + error?error:""); else { char buf[ISO_TIME_LEN+1]; char buf2[ISO_TIME_LEN+1]; @@ -3106,7 +3106,7 @@ "650 ADDRMAP %s %s \"%s\"" "@%s%sEXPIRES=\"%s\"\r\n", from, to, buf, - error, error?" ":"", + error?error:"", error?" ":"", buf2); } Index: doc/spec/control-spec.txt =================================================================== --- doc/spec/control-spec.txt (revision 10933) +++ doc/spec/control-spec.txt (working copy) @@ -512,8 +512,8 @@ Sent from the client to the server. The format is: "EXTENDCIRCUIT" SP CircuitID SP - ServerSpec *("," ServerSpec) SP - ("purpose=" Purpose) CRLF + ServerSpec *("," ServerSpec) + [SP "purpose=" Purpose] CRLF This request takes one of two forms: either the CircuitID is zero, in which case it is a request for the server to build a new circuit according @@ -585,7 +585,7 @@ 3.14. POSTDESCRIPTOR Sent from the client to the server. The syntax is: - "+POSTDESCRIPTOR" ("purpose=" Purpose) CRLF Descriptor CRLF "." CRLF + "+POSTDESCRIPTOR" [SP "purpose=" Purpose] CRLF Descriptor CRLF "." CRLF This message informs the server about a new descriptor. If Purpose is specified, it must be either "general" or "controller", else we @@ -603,7 +603,7 @@ 3.15. REDIRECTSTREAM Sent from the client to the server. The syntax is: - "REDIRECTSTREAM" SP StreamID SP Address (SP Port) CRLF + "REDIRECTSTREAM" SP StreamID SP Address [SP Port] CRLF Tells the server to change the exit address on the specified stream. If Port is specified, changes the destination port as well. No remapping @@ -913,7 +913,7 @@ The syntax is: "650" SP "ORCONN" SP (ServerID / Target) SP ORStatus [ SP "REASON=" - Reason ] [ SP "NCIRCS=" NumCircuits ] + Reason ] [ SP "NCIRCS=" NumCircuits ] CRLF ORStatus = "NEW" / "LAUNCHED" / "CONNECTED" / "FAILED" / "CLOSED" @@ -939,7 +939,7 @@ 4.1.4. Bandwidth used in the last second The syntax is: - "650" SP "BW" SP BytesRead SP BytesWritten *(SP Type "=" Num) + "650" SP "BW" SP BytesRead SP BytesWritten *(SP Type "=" Num) CRLF BytesRead = 1*DIGIT BytesWritten = 1*DIGIT Type = "DIR" / "OR" / "EXIT" / "APP" / ... @@ -952,7 +952,7 @@ 4.1.5. Log messages The syntax is: - "650" SP Severity SP ReplyText + "650" SP Severity SP ReplyText CRLF or "650+" Severity CRLF Data @@ -961,15 +961,18 @@ 4.1.6. New descriptors available Syntax: - "650" SP "NEWDESC" 1*(SP ServerID) + "650" SP "NEWDESC" 1*(SP ServerID) CRLF 4.1.7. New Address mapping Syntax: - "650" SP "ADDRMAP" SP Address SP Address SP Expiry SP Error SP GMTExpiry + "650" SP "ADDRMAP" SP Address SP NewAddress SP Expiry + [SP Error] SP GMTExpiry CRLF + + NewAddress = Address / "" Expiry = DQUOTE ISOTime DQUOTE / "NEVER" - Error = / "error=" ErrorCode + Error = "error=" ErrorCode GMTExpiry = "EXPIRES=" DQUOTE IsoTime DQUOTE Error and GMTExpiry are only provided if extended events are enabled. @@ -992,7 +995,7 @@ 4.1.9. Our descriptor changed Syntax: - "650" SP "DESCCHANGED" + "650" SP "DESCCHANGED" CRLF [First added in 0.1.2.2-alpha.] @@ -1323,7 +1326,7 @@ 4.1.13. Bandwidth used on an application stream The syntax is: - "650" SP "STREAM_BW" SP StreamID SP BytesRead SP BytesWritten + "650" SP "STREAM_BW" SP StreamID SP BytesRead SP BytesWritten CRLF BytesRead = 1*DIGIT BytesWritten = 1*DIGIT