@Override public SocksMethod doRequest(List<SocksMethod> acceptableMethods, Socket socket, int socksVersion) throws SocksException, IOException { InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); byte[] bufferSent = new byte[2 + acceptableMethods.size()]; bufferSent[0] = (byte) socksVersion; bufferSent[1] = (byte) acceptableMethods.size(); for (int i = 0; i < acceptableMethods.size(); i++) { bufferSent[2 + i] = (byte) acceptableMethods.get(i).getByte(); } outputStream.write(bufferSent); outputStream.flush(); logger.debug("{}", LogMessageBuilder.build(bufferSent, MsgType.SEND)); // Received data. byte[] receivedData = StreamUtil.read(inputStream, 2); logger.debug("{}", LogMessageBuilder.build(receivedData, MsgType.RECEIVE)); if (receivedData[0] != socksVersion) { throw new SocksException("Remote server don't support SOCKS5"); } return SocksMethodRegistry.getByByte(receivedData[1]); }
@Override public SocksMethod doRequest(List<SocksMethod> acceptableMethods, Socket socket, int socksVersion) throws SocksException, IOException { InputStream inputStream = socket.getInputStream(); OutputStream outputStream = socket.getOutputStream(); byte[] bufferSent = new byte[2 + acceptableMethods.size()]; bufferSent[0] = (byte) socksVersion; bufferSent[1] = (byte) acceptableMethods.size(); for (int i = 0; i < acceptableMethods.size(); i++) { bufferSent[2 + i] = (byte) acceptableMethods.get(i).getByte(); } outputStream.write(bufferSent); outputStream.flush(); logger.debug("{}", LogMessageBuilder.build(bufferSent, MsgType.SEND)); // Received data. byte[] receivedData = StreamUtil.read(inputStream, 2); logger.debug("{}", LogMessageBuilder.build(receivedData, MsgType.RECEIVE)); if (receivedData[0] != socksVersion) { throw new SocksException("Remote server don't support SOCKS5"); } return SocksMethodRegistry.getByByte(receivedData[1]); }