Convert SOCKS5 reply to an error message */
| 292 | |
| 293 | /** Convert SOCKS5 reply to an error message */ |
| 294 | static std::string Socks5ErrorString(uint8_t err) |
| 295 | { |
| 296 | switch(err) { |
| 297 | case SOCKS5Reply::GENFAILURE: |
| 298 | return "general failure"; |
| 299 | case SOCKS5Reply::NOTALLOWED: |
| 300 | return "connection not allowed"; |
| 301 | case SOCKS5Reply::NETUNREACHABLE: |
| 302 | return "network unreachable"; |
| 303 | case SOCKS5Reply::HOSTUNREACHABLE: |
| 304 | return "host unreachable"; |
| 305 | case SOCKS5Reply::CONNREFUSED: |
| 306 | return "connection refused"; |
| 307 | case SOCKS5Reply::TTLEXPIRED: |
| 308 | return "TTL expired"; |
| 309 | case SOCKS5Reply::CMDUNSUPPORTED: |
| 310 | return "protocol error"; |
| 311 | case SOCKS5Reply::ATYPEUNSUPPORTED: |
| 312 | return "address type not supported"; |
| 313 | default: |
| 314 | return "unknown"; |
| 315 | } |
| 316 | } |
| 317 | |
| 318 | /** Connect using SOCKS5 (as described in RFC1928) */ |
| 319 | static bool Socks5(const std::string& strDest, int port, const ProxyCredentials *auth, const SOCKET& hSocket) |