@Override public void run() { try { byte[] buffer = new byte[bufferSize]; while (running) { DatagramPacket packet = new DatagramPacket(buffer, buffer.length); server.receive(packet); if (isFromClient(packet)) { datagramPacketHandler.decapsulate(packet); server.send(packet); } else { packet = datagramPacketHandler.encapsulate(packet, new InetSocketAddress(clientAddress, clientPort)); server.send(packet); } } } catch (IOException e) { if (e.getMessage().equalsIgnoreCase("Socket closed") && !running) { logger.debug("UDP relay server stopped"); } else { logger.error(e.getMessage(), e); } } }
@Override public void doUDPAssociate(Session session, CommandMessage commandMessage) throws SocksException, IOException { UDPRelayServer udpRelayServer = new UDPRelayServer(((InetSocketAddress) session.getClientAddress()).getAddress(), commandMessage.getPort()); InetSocketAddress socketAddress = (InetSocketAddress) udpRelayServer.start(); logger.info("Create UDP relay server at[{}] for {}", socketAddress, commandMessage .getSocketAddress()); session.write(new CommandResponseMessage(VERSION, ServerReply.SUCCEEDED, InetAddress .getLocalHost(), socketAddress.getPort())); while (udpRelayServer.isRunning()) { try { Thread.sleep(idleTime); } catch (InterruptedException e) { session.close(); logger.info("Session[{}] closed", session.getId()); } if (session.isClose()) { udpRelayServer.stop(); logger.debug("UDP relay server for session[{}] is closed", session.getId()); } } }
@Override public void doUDPAssociate(Session session, CommandMessage commandMessage) throws SocksException, IOException { UDPRelayServer udpRelayServer = new UDPRelayServer(((InetSocketAddress) session.getClientAddress()).getAddress(), commandMessage.getPort()); InetSocketAddress socketAddress = (InetSocketAddress) udpRelayServer.start(); logger.info("Create UDP relay server at[{}] for {}", socketAddress, commandMessage .getSocketAddress()); session.write(new CommandResponseMessage(VERSION, ServerReply.SUCCEEDED, InetAddress .getLocalHost(), socketAddress.getPort())); while (udpRelayServer.isRunning()) { try { Thread.sleep(idleTime); } catch (InterruptedException e) { session.close(); logger.info("Session[{}] closed", session.getId()); } if (session.isClose()) { udpRelayServer.stop(); logger.debug("UDP relay server for session[{}] is closed", session.getId()); } } }
@Override public void run() { try { byte[] buffer = new byte[bufferSize]; while (running) { DatagramPacket packet = new DatagramPacket(buffer, buffer.length); server.receive(packet); if (isFromClient(packet)) { datagramPacketHandler.decapsulate(packet); server.send(packet); } else { packet = datagramPacketHandler.encapsulate(packet, new InetSocketAddress(clientAddress, clientPort)); server.send(packet); } } } catch (IOException e) { if (e.getMessage().equalsIgnoreCase("Socket closed") && !running) { logger.debug("UDP relay server stopped"); } else { logger.error(e.getMessage(), e); } } }