aboutsummaryrefslogtreecommitdiffstats
path: root/protocols/jabber/s5bytestream.c
diff options
context:
space:
mode:
authorulim <a.sporto+bee@gmail.com>2008-06-02 14:49:33 +0200
committerulim <a.sporto+bee@gmail.com>2008-06-02 14:49:33 +0200
commitcce0450184b4358ef06d91cca985fa3ca389fcd6 (patch)
tree5224376fbe9e2248999e3eea3b841e9a6635181c /protocols/jabber/s5bytestream.c
parentb5cfc2bdad8a68011bf9215c63293299e4e8dc5c (diff)
Added textual SOCKS5 error messages.
Diffstat (limited to 'protocols/jabber/s5bytestream.c')
-rw-r--r--protocols/jabber/s5bytestream.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/protocols/jabber/s5bytestream.c b/protocols/jabber/s5bytestream.c
index 996d1f24..41bae40a 100644
--- a/protocols/jabber/s5bytestream.c
+++ b/protocols/jabber/s5bytestream.c
@@ -71,6 +71,18 @@ struct socks5_message
in_port_t port;
} __attribute__ ((packed));
+char *socks5_reply_code[] = {
+ "succeeded",
+ "general SOCKS server failure",
+ "connection not allowed by ruleset",
+ "Network unreachable",
+ "Host unreachable",
+ "Connection refused",
+ "TTL expired",
+ "Command not supported",
+ "Address type not supported",
+ "unassigned"};
+
/* connect() timeout in seconds. */
#define JABBER_BS_CONTIMEOUT 15
/* listen timeout */
@@ -476,12 +488,19 @@ gboolean jabber_bs_recv_handshake( gpointer data, gint fd, b_input_condition con
}
if( !( socks5_reply.ver == 5 ) ||
- !( socks5_reply.cmdrep.rep == 0 ) )
- return jabber_bs_abort( bt, "SOCKS5 CONNECT failed (reply: ver=%d, rep=%d, atyp=%d, addrlen=%d",
+ !( socks5_reply.cmdrep.rep == 0 ) ) {
+ char errstr[128] = "";
+ if( ( socks5_reply.ver == 5 ) && ( socks5_reply.cmdrep.rep <
+ ( sizeof( socks5_reply_code ) / sizeof( socks5_reply_code[0] ) ) ) ) {
+ sprintf( errstr, "with \"%s\" ", socks5_reply_code[ socks5_reply.cmdrep.rep ] );
+ }
+ return jabber_bs_abort( bt, "SOCKS5 CONNECT failed %s(reply: ver=%d, rep=%d, atyp=%d, addrlen=%d)",
+ errstr,
socks5_reply.ver,
socks5_reply.cmdrep.rep,
socks5_reply.atyp,
socks5_reply.addrlen);
+ }
/* usually a proxy sends back the 40 bytes address but I encountered at least one (of jabber.cz)
* that sends atyp=0 addrlen=0 and only 6 bytes (one less than one would expect).