private void handleRequest(final ProxyMessage msg) throws IOException { if (!auth.checkRequest(msg)) { throw new SocksException(SocksProxyBase.SOCKS_FAILURE); } if (msg.ip == null) { if (msg instanceof Socks5Message) { msg.ip = dnsResolver.resolveByName(msg.host); } else { throw new SocksException(SocksProxyBase.SOCKS_FAILURE); } } log(msg); switch (msg.command) { case SocksProxyBase.SOCKS_CMD_CONNECT: onConnect(msg); break; case SocksProxyBase.SOCKS_CMD_BIND: onBind(msg); break; case SocksProxyBase.SOCKS_CMD_UDP_ASSOCIATE: onUDP(msg); break; default: throw new SocksException(SocksProxyBase.SOCKS_CMD_NOT_SUPPORTED); } }