fully read port in socks connection

Daniel Gultsch created

incoming direct connections in receive mode wouldn’t clear the entire
destination from the input stream; thus adding a leading 0x00 to the file

fixes #3557

Change summary

src/main/java/eu/siacs/conversations/utils/SocksSocketFactory.java          | 2 
src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java | 5 
2 files changed, 4 insertions(+), 3 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/utils/SocksSocketFactory.java 🔗

@@ -52,7 +52,7 @@ public class SocksSocketFactory {
 		return false;
 	}
 
-	public static Socket createSocket(InetSocketAddress address, String destination, int port) throws IOException {
+	private static Socket createSocket(InetSocketAddress address, String destination, int port) throws IOException {
 		Socket socket = new Socket();
 		try {
 			socket.connect(address, Config.CONNECT_TIMEOUT * 1000);

src/main/java/eu/siacs/conversations/xmpp/jingle/JingleSocks5Transport.java 🔗

@@ -120,7 +120,8 @@ public class JingleSocks5Transport extends JingleTransport {
             int destinationCount = inputStream.read();
             final byte[] destination = new byte[destinationCount];
             inputStream.read(destination);
-            final int port = inputStream.read();
+            final byte[] port = new byte[2];
+            inputStream.read(port);
             final String receivedDestination = new String(destination);
             final ByteBuffer response = ByteBuffer.allocate(7 + destination.length);
             final byte[] responseHeader;
@@ -136,7 +137,7 @@ public class JingleSocks5Transport extends JingleTransport {
             response.put(responseHeader);
             response.put((byte) destination.length);
             response.put(destination);
-            response.putShort((short) port);
+            response.put(port);
             outputStream.write(response.array());
             outputStream.flush();
             if (success) {