commit 4c845fcf9e5b009a5e8d29f4c54eb7a98513e436 Author: rl1987 rl1987@sdf.lonestar.org Date: Wed May 23 14:38:13 2018 +0200
Rework socks_request_set_socks5_error() with trunnel --- src/or/proto_socks.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-)
diff --git a/src/or/proto_socks.c b/src/or/proto_socks.c index dab349bbe..9dbd688b7 100644 --- a/src/or/proto_socks.c +++ b/src/or/proto_socks.c @@ -858,12 +858,31 @@ static void socks_request_set_socks5_error(socks_request_t *req, socks5_reply_status_t reason) { - req->replylen = 10; - memset(req->reply,0,10); + socks5_server_reply_t *trunnel_resp = socks5_server_reply_new();
- req->reply[0] = 0x05; // VER field. - req->reply[1] = reason; // REP field. - req->reply[3] = 0x01; // ATYP field. + socks5_server_reply_set_version(trunnel_resp, 0x05); + socks5_server_reply_set_reply(trunnel_resp, reason); + socks5_server_reply_set_atype(trunnel_resp, 0x01); + + const char *errmsg = socks5_server_reply_check(trunnel_resp); + if (errmsg) { + log_warn(LD_APP, "socks5: reply validation failed: %s", + errmsg); + goto end; + } + + ssize_t encoded = socks5_server_reply_encode(req->reply, + sizeof(req->reply), + trunnel_resp); + if (encoded < 0) { + log_warn(LD_APP, "socks5: reply encoding failed: %d", + (int)encoded); + } else { + req->replylen = (size_t)encoded; + } + + end: + socks5_server_reply_free(trunnel_resp); }
static const char SOCKS_PROXY_IS_NOT_AN_HTTP_PROXY_MSG[] =
tor-commits@lists.torproject.org