From: rl1987 Date: Wed, 23 May 2018 12:38:13 +0000 (+0200) Subject: Rework socks_request_set_socks5_error() with trunnel X-Git-Tag: tor-0.3.5.1-alpha~213^2~2^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4c845fcf9e5b009a5e8d29f4c54eb7a98513e436;p=thirdparty%2Ftor.git Rework socks_request_set_socks5_error() with trunnel --- diff --git a/src/or/proto_socks.c b/src/or/proto_socks.c index dab349bbea..9dbd688b75 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[] =