commit d9c15cebf1ace2bf4e14022f9711bfee275aca05 Author: George Kadianakis desnacked@gmail.com Date: Tue May 24 00:43:54 2011 +0200
* Fixed a small bug in socks5_send_reply() found by the unit tests. * de-staticed the socks4_* functions, so that they can be unit tested. * Changed the way socks4_send_reply() returns, to something I'm not sure I like or find useful; but that's how socks5_send_reply() was. --- src/socks.c | 15 +++++++++++---- src/socks.h | 5 ++++- 2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/src/socks.c b/src/socks.c index a1f794a..5a97b83 100644 --- a/src/socks.c +++ b/src/socks.c @@ -202,7 +202,7 @@ socks5_send_reply(struct evbuffer *reply_dest, socks_state_t *state, } else { addrlen = (state->parsereq.af == AF_INET) ? 4 : 16; p[3] = (state->parsereq.af == AF_INET) ? SOCKS5_ATYP_IPV4 : SOCKS5_ATYP_IPV6; - evutil_inet_pton(AF_INET, state->parsereq.addr, addr); + evutil_inet_pton(state->parsereq.af, state->parsereq.addr, addr); } port = htons(state->parsereq.port);
@@ -293,7 +293,8 @@ socks5_do_negotiation(struct evbuffer *dest, unsigned int neg_was_success) return 1; }
-static int +/* rename to socks4_handle_request or something. */ +int socks4_read_request(struct evbuffer *source, socks_state_t *state) { /* Format is: @@ -366,7 +367,7 @@ socks4_read_request(struct evbuffer *source, socks_state_t *state) return 1; }
-static int +int socks4_send_reply(struct evbuffer *dest, socks_state_t *state, int status) { uint16_t portnum; @@ -381,9 +382,15 @@ socks4_send_reply(struct evbuffer *dest, socks_state_t *state, int status) /* convert to socks4 status */ msg[1] = (status == SOCKS5_REP_SUCCESS) ? SOCKS4_SUCCESS : SOCKS4_FAILED; memcpy(msg+2, &portnum, 2); + /* ASN: What should we do here in the case of an FQDN request? */ memcpy(msg+4, &in.s_addr, 4); evbuffer_add(dest, msg, 8); - return 1; + + /* ASN: Do we actually like this return tactic? Check out why I do it. */ + if (status == SOCKS5_REP_SUCCESS) + return 1; + else + return -1; }
/** diff --git a/src/socks.h b/src/socks.h index 36a5a32..37c94cc 100644 --- a/src/socks.h +++ b/src/socks.h @@ -84,9 +84,12 @@ int socks5_handle_negotiation(struct evbuffer *source, struct evbuffer *dest, socks_state_t *state); int socks5_handle_request(struct evbuffer *source, struct parsereq *parsereq); - int socks5_send_reply(struct evbuffer *reply_dest, socks_state_t *state, int status); + +int socks4_read_request(struct evbuffer *source, socks_state_t *state); +int socks4_send_reply(struct evbuffer *dest, + socks_state_t *state, int status); #endif
#endif