From 2a5ae8ce59acf068383dcb08736f910b9ac55c6f Mon Sep 17 00:00:00 2001 From: paweldomas Date: Fri, 16 May 2014 14:29:46 +0200 Subject: [PATCH] Passively listens for incoming SCTP connection from WebRTC which fixes native crash caused by "out of the blue" packets received in case of simultaneous connect(still to be fixed). Adds debug IDs to logged SCTP packets. --- lib/libjitsi.jar | Bin 6316967 -> 6306322 bytes src/org/jitsi/videobridge/SctpConnection.java | 50 +++++++++++++++--- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/lib/libjitsi.jar b/lib/libjitsi.jar index 7fb42a37ebd1996908a9acbfb6f7e0344c21984c..aede2a17e098ae71a2e57b5b9fce63f73426da56 100644 GIT binary patch delta 30697 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 z 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 IDG#jrKh2#b5dZ)H diff --git a/src/org/jitsi/videobridge/SctpConnection.java b/src/org/jitsi/videobridge/SctpConnection.java index e1a2007d0..bbc5178a4 100644 --- a/src/org/jitsi/videobridge/SctpConnection.java +++ b/src/org/jitsi/videobridge/SctpConnection.java @@ -133,6 +133,16 @@ public class SctpConnection private HashMap channels = new HashMap(); + /** + * Generator used to track debug IDs. + */ + private static int debugIdGen = -1; + + /** + * Debug ID used to distinguish SCTP sockets in packet logs. + */ + private final int debugId; + /** * Initializes new SctpConnection instance. * @@ -154,6 +164,14 @@ public class SctpConnection this.remoteSctpPort = remoteSctpPort; this.dtlsLayer = new DtlsLayer(); + + this.debugId = generateDebugId(); + } + + private static synchronized int generateDebugId() + { + debugIdGen += 2; + return debugIdGen; } /** @@ -228,7 +246,7 @@ public class SctpConnection { super.describe(iq); - describeSrtpControl((ColibriConferenceIQ.SctpConnection)iq); + describeSrtpControl((ColibriConferenceIQ.SctpConnection) iq); } /** @@ -353,9 +371,9 @@ public class SctpConnection if(LOG_SCTP_PACKETS) LibJitsi.getPacketLoggingService().logPacket( PacketLoggingService.ProtocolName.ICE4J, - new byte[]{0,0,0,1}, + new byte[]{0,0,0, (byte) debugId}, 5000, - new byte[]{0,0,0,2}, + new byte[]{0,0,0, (byte) (debugId +1)}, remoteSctpPort, PacketLoggingService.TransportName.UDP, true, @@ -371,7 +389,27 @@ public class SctpConnection sctpSocket.setNotificationListener(this); - sctpSocket.connect(remoteSctpPort); + sctpSocket.listen(); + + // FIXME: manage threads + new Thread(new Runnable() + { + @Override + public void run() + { + try + { + while (!sctpSocket.accept()) + { + Thread.sleep(100); + } + } + catch (Exception e) + { + logger.error("Error accepting SCTP connection", e); + } + } + }, "SctpAcceptThread").start(); // Notify that from now on SCTP connection is considered functional sctpSocket.setDataCallback(this); @@ -392,9 +430,9 @@ public class SctpConnection if(LOG_SCTP_PACKETS) LibJitsi.getPacketLoggingService().logPacket( PacketLoggingService.ProtocolName.ICE4J, - new byte[]{0,0,0,2}, + new byte[]{0,0,0, (byte) (debugId +1)}, remoteSctpPort, - new byte[]{0,0,0,1}, + new byte[]{0,0,0, (byte) debugId}, 5000, PacketLoggingService.TransportName.UDP, false,