From 6059fb7b8211729c74ce49d2691183cebb1a22b4 Mon Sep 17 00:00:00 2001 From: Thiago Camargo Date: Tue, 27 Mar 2007 04:24:18 +0000 Subject: [PATCH] Fixes in Negotiations git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@7720 b35dd754-fafc-0310-a699-88a17e54d16e --- .../smackx/jingle/IncomingJingleSession.java | 35 ++-- .../smackx/jingle/JingleSession.java | 11 +- .../jivesoftware/smackx/jingle/nat/STUN.java | 2 + .../smackx/jingle/JingleMediaTest.java | 33 ++-- .../jivesoftware/smack/PacketReaderTest.java | 162 ++++++++++-------- .../smack/test/SmackTestCase.java | 1 + 6 files changed, 145 insertions(+), 99 deletions(-) diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/IncomingJingleSession.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/IncomingJingleSession.java index 790e061e4..c3d8ad796 100644 --- a/jingle/extension/source/org/jivesoftware/smackx/jingle/IncomingJingleSession.java +++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/IncomingJingleSession.java @@ -136,18 +136,6 @@ public class IncomingJingleSession extends JingleSession { updatePacketListener(); - Jingle packet = initialJingleSessionRequest.getJingle(); - if (packet != null) { - - // Initialize the session information - setSid(packet.getSid()); - - respond(packet); - } - else { - throw new XMPPException( - "Session request with null Jingle packet."); - } } @@ -173,6 +161,20 @@ public class IncomingJingleSession extends JingleSession { * @throws XMPPException */ public void start(JingleSessionRequest initialJingleSessionRequest) throws XMPPException { + Jingle packet = initialJingleSessionRequest.getJingle(); + if (packet != null) { + + // Initialize the session information + setSid(packet.getSid()); + + sendAck(packet); + } + else { + throw new XMPPException( + "Session request with null Jingle packet."); + } + // Set the new session state + setState(pending); } /** @@ -181,15 +183,16 @@ public class IncomingJingleSession extends JingleSession { * @throws XMPPException */ public void start() throws XMPPException { - + start(this.getInitialSessionRequest()); } /** * Force a call acceptance. Used to accept a hooked call. + * * @deprecated Avoid to use this method. Not compliance. */ - public void accept(){ - setState(active); + public void accept() { + setState(active); } /** @@ -230,8 +233,6 @@ public class IncomingJingleSession extends JingleSession { * @throws XMPPException */ public Jingle eventInitiate(Jingle inJingle) throws XMPPException { - // Set the new session state - setState(pending); return super.eventInitiate(inJingle); } diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java index e868657d1..1e5042333 100644 --- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java +++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java @@ -202,6 +202,7 @@ public abstract class JingleSession extends JingleNegotiator { /** * Get the JingleMediaSession of this Jingle Session + * * @return the JingleMediaSession */ public JingleMediaSession getJingleMediaSession() { @@ -428,8 +429,7 @@ public abstract class JingleSession extends JingleNegotiator { jout = getState().eventInfo(jin); } else if (action.equals(Jingle.Action.SESSIONINITIATE)) { - if (getState() != null) - jout = getState().eventInitiate(jin); + jout = getState().eventInitiate(jin); } else if (action.equals(Jingle.Action.SESSIONREDIRECT)) { jout = getState().eventRedirect(jin); @@ -493,7 +493,8 @@ public abstract class JingleSession extends JingleNegotiator { } // Acknowledge the IQ reception - sendAck(iq); + if (!(getState() instanceof IncomingJingleSession.Accepting)) + sendAck(iq); // ... and send all these parts in a Jingle response. response = sendJingleParts(iq, (Jingle) sessionResponse, @@ -502,6 +503,7 @@ public abstract class JingleSession extends JingleNegotiator { } catch (JingleException e) { // Send an error message, if present + System.out.println("E:" + iq); JingleError error = e.getError(); if (error != null) { sendFormattedError(iq, error); @@ -511,6 +513,9 @@ public abstract class JingleSession extends JingleNegotiator { triggerSessionClosedOnError(e); } } + else { + System.out.println("K:" + iq); + } return response; } diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUN.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUN.java index ff6418a59..23806668b 100644 --- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUN.java +++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUN.java @@ -244,6 +244,8 @@ public class STUN extends IQ { return true; } + System.out.println(item.getName()+"-"+info.getType()); + } } catch (XMPPException e) { diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleMediaTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleMediaTest.java index 989d6b9d7..bceff9db2 100644 --- a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleMediaTest.java +++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleMediaTest.java @@ -83,7 +83,7 @@ public class JingleMediaTest extends SmackTestCase { session.addStateListener(new JingleSessionStateListener() { public void beforeChange(JingleNegotiator.State old, JingleNegotiator.State newOne) throws JingleNegotiator.JingleException { if (newOne instanceof IncomingJingleSession.Active) { - throw new JingleNegotiator.JingleException(); + throw new JingleNegotiator.JingleException(); } } @@ -134,7 +134,6 @@ public class JingleMediaTest extends SmackTestCase { XMPPConnection x0 = getConnection(0); XMPPConnection x1 = getConnection(1); - ICETransportManager icetm0 = new ICETransportManager(x0, "jivesoftware.com", 3478); ICETransportManager icetm1 = new ICETransportManager(x1, "jivesoftware.com", 3478); @@ -170,7 +169,7 @@ public class JingleMediaTest extends SmackTestCase { try { IncomingJingleSession session = request.accept(jm1.getMediaManager().getPayloads()); - session.start(request); + //session.start(request); } catch (XMPPException e) { e.printStackTrace(); @@ -179,17 +178,31 @@ public class JingleMediaTest extends SmackTestCase { } }); - OutgoingJingleSession js0 = jm0.createOutgoingJingleSession(x1.getUser()); + for (int i = 0; i < 10; i++) { - js0.start(); + OutgoingJingleSession js0 = jm0.createOutgoingJingleSession(x1.getUser()); - Thread.sleep(60000); - js0.terminate(); + js0.addStateListener(new JingleSessionStateListener() { - Thread.sleep(6000); + public void beforeChange(JingleNegotiator.State old, JingleNegotiator.State newOne) throws JingleNegotiator.JingleException { + } - x0.disconnect(); - x1.disconnect(); + public void afterChanged(JingleNegotiator.State old, JingleNegotiator.State newOne) { + if (newOne != null) { + System.out.println(newOne.getClass().getCanonicalName()); + assertFalse(newOne instanceof OutgoingJingleSession.Active); + } + } + }); + + js0.start(); + + Thread.sleep(5000); + js0.terminate(); + + Thread.sleep(1500); + + } } catch (Exception e) { diff --git a/test/org/jivesoftware/smack/PacketReaderTest.java b/test/org/jivesoftware/smack/PacketReaderTest.java index 2652bf040..2445b392c 100644 --- a/test/org/jivesoftware/smack/PacketReaderTest.java +++ b/test/org/jivesoftware/smack/PacketReaderTest.java @@ -98,7 +98,7 @@ public class PacketReaderTest extends SmackTestCase { val = counter; } return val; - } + } /** * Verify that when Smack receives a "not implemented IQ" answers with an IQ packet @@ -134,28 +134,28 @@ public class PacketReaderTest extends SmackTestCase { */ public void testRemoveListener() { - PacketListener listener = new PacketListener() { - public void processPacket(Packet packet) { - // Do nothing - } - }; - // Keep number of current listeners - int listenersSize = getConnection(0).packetReader.listeners.size(); - // Add a new listener - getConnection(0).addPacketListener(listener, new MockPacketFilter(true)); - // Check that the listener was added - assertEquals("Listener was not added", listenersSize + 1, - getConnection(0).packetReader.listeners.size()); + PacketListener listener = new PacketListener() { + public void processPacket(Packet packet) { + // Do nothing + } + }; + // Keep number of current listeners + int listenersSize = getConnection(0).packetReader.listeners.size(); + // Add a new listener + getConnection(0).addPacketListener(listener, new MockPacketFilter(true)); + // Check that the listener was added + assertEquals("Listener was not added", listenersSize + 1, + getConnection(0).packetReader.listeners.size()); - Message msg = new Message(getConnection(0).getUser(), Message.Type.normal); + Message msg = new Message(getConnection(0).getUser(), Message.Type.normal); - getConnection(1).sendPacket(msg); + getConnection(1).sendPacket(msg); - // Remove the listener - getConnection(0).removePacketListener(listener); - // Check that the number of listeners is correct (i.e. the listener was removed) - assertEquals("Listener was not removed", listenersSize, - getConnection(0).packetReader.listeners.size()); + // Remove the listener + getConnection(0).removePacketListener(listener); + // Check that the number of listeners is correct (i.e. the listener was removed) + assertEquals("Listener was not removed", listenersSize, + getConnection(0).packetReader.listeners.size()); } /** @@ -200,67 +200,91 @@ public class PacketReaderTest extends SmackTestCase { } /** - * Tests that PacketReader adds new listeners and also removes them correctly. - */ - public void testFiltersRemotion() { + * Tests that PacketReader adds new listeners and also removes them correctly. + */ + public void testFiltersRemotion() { - resetCounter(); + resetCounter(); - int repeat=10; + int repeat = 10; - for (int j = 0; j < repeat; j++) { + for (int j = 0; j < repeat; j++) { - PacketListener listener = new PacketListener() { - public void processPacket(Packet packet) { - System.out.println("Packet Captured"); - incCounter(); - } - }; - PacketFilter pf = new PacketFilter() { - public boolean accept(Packet packet) { - System.out.println("Packet Filtered"); - incCounter(); - return true; - } - }; + PacketListener listener0 = new PacketListener() { + public void processPacket(Packet packet) { + System.out.println("Packet Captured"); + incCounter(); + } + }; + PacketFilter pf0 = new PacketFilter() { + public boolean accept(Packet packet) { + System.out.println("Packet Filtered"); + incCounter(); + return true; + } + }; - getConnection(0).addPacketListener(listener,pf); - // Check that the listener was added + PacketListener listener1 = new PacketListener() { + public void processPacket(Packet packet) { + System.out.println("Packet Captured"); + incCounter(); + } + }; + PacketFilter pf1 = new PacketFilter() { + public boolean accept(Packet packet) { + System.out.println("Packet Filtered"); + incCounter(); + return true; + } + }; - Message msg = new Message(getConnection(0).getUser(), Message.Type.normal); + getConnection(0).addPacketListener(listener0, pf0); + getConnection(1).addPacketListener(listener1, pf1); - getConnection(1).sendPacket(msg); + // Check that the listener was added - try { - Thread.sleep(100); - } - catch (InterruptedException e) { - e.printStackTrace(); - } + Message msg0 = new Message(getConnection(0).getUser(), Message.Type.normal); + Message msg1 = new Message(getConnection(1).getUser(), Message.Type.normal); - // Remove the listener - getConnection(0).removePacketListener(listener); - try { - Thread.sleep(200); - } - catch (InterruptedException e) { - e.printStackTrace(); - } + for (int i = 0; i < 5; i++) { + getConnection(1).sendPacket(msg0); + getConnection(0).sendPacket(msg1); + } - for (int i = 0; i < 10; i++) - getConnection(1).sendPacket(msg); + try { + Thread.sleep(100); + } + catch (InterruptedException e) { + e.printStackTrace(); + } - try { - Thread.sleep(100); - } - catch (InterruptedException e) { - e.printStackTrace(); - } - } - System.out.println(valCounter()); - assertEquals(valCounter(),repeat*2); - } + // Remove the listener + getConnection(0).removePacketListener(listener0); + getConnection(1).removePacketListener(listener1); + + try { + Thread.sleep(300); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + + for (int i = 0; i < 10; i++) { + getConnection(0).sendPacket(msg1); + getConnection(1).sendPacket(msg0); + } + + try { + Thread.sleep(100); + } + catch (InterruptedException e) { + e.printStackTrace(); + } + } + System.out.println(valCounter()); + assertEquals(valCounter(), repeat * 2 * 10); + } protected int getMaxConnections() { return 2; diff --git a/test/org/jivesoftware/smack/test/SmackTestCase.java b/test/org/jivesoftware/smack/test/SmackTestCase.java index d570ba2d9..b70770dd0 100644 --- a/test/org/jivesoftware/smack/test/SmackTestCase.java +++ b/test/org/jivesoftware/smack/test/SmackTestCase.java @@ -65,6 +65,7 @@ public abstract class SmackTestCase extends TestCase { */ public SmackTestCase(String arg0) { super(arg0); + XMPPConnection.DEBUG_ENABLED=true; } /**