diff --git a/build/build.xml b/build/build.xml
index fd44fa384..d0bad0552 100644
--- a/build/build.xml
+++ b/build/build.xml
@@ -199,7 +199,7 @@
-
+
diff --git a/jingle/extension/build/build.xml b/jingle/extension/build/build.xml
index f7e950a54..c6539e935 100644
--- a/jingle/extension/build/build.xml
+++ b/jingle/extension/build/build.xml
@@ -85,7 +85,7 @@
-
+
diff --git a/jingle/extension/build/merge/jstun-0.7.2.jar b/jingle/extension/build/merge/jstun-0.7.2.jar
new file mode 100644
index 000000000..df7e883fd
Binary files /dev/null and b/jingle/extension/build/merge/jstun-0.7.2.jar differ
diff --git a/jingle/extension/build/merge/jstun.jar b/jingle/extension/build/merge/jstun.jar
deleted file mode 100644
index 1b8ac7519..000000000
Binary files a/jingle/extension/build/merge/jstun.jar and /dev/null differ
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleManager.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleManager.java
index 724580d89..7ff46a719 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleManager.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleManager.java
@@ -20,7 +20,15 @@
package org.jivesoftware.smackx.jingle;
-import org.jivesoftware.smack.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.jivesoftware.smack.ConnectionCreationListener;
+import org.jivesoftware.smack.PacketListener;
+import org.jivesoftware.smack.RosterListener;
+import org.jivesoftware.smack.XMPPConnection;
+import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.filter.PacketFilter;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.packet.Packet;
@@ -34,16 +42,13 @@ import org.jivesoftware.smackx.jingle.listeners.JingleSessionListener;
import org.jivesoftware.smackx.jingle.listeners.JingleSessionRequestListener;
import org.jivesoftware.smackx.jingle.media.JingleMediaManager;
import org.jivesoftware.smackx.jingle.media.PayloadType;
+import org.jivesoftware.smackx.jingle.nat.BasicTransportManager;
import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
import org.jivesoftware.smackx.jingle.nat.TransportResolver;
import org.jivesoftware.smackx.packet.DiscoverInfo;
import org.jivesoftware.smackx.packet.Jingle;
import org.jivesoftware.smackx.provider.JingleProvider;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-
/**
* Jingle is a session establishment protocol defined in (XEP-0166).
* It defines a framework for negotiating and managing out-of-band ( data that is send and receive through other connection than XMPP connection) data sessions over XMPP.
@@ -179,7 +184,9 @@ import java.util.List;
*/
public class JingleManager implements JingleSessionListener {
- // non-static
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(JingleManager.class);
+
+ // non-static
final List jingleSessions = new ArrayList();
@@ -195,21 +202,7 @@ public class JingleManager implements JingleSessionListener {
// The Media Managers
private List jingleMediaManagers;
- static {
- ProviderManager providerManager = ProviderManager.getInstance();
- providerManager.addIQProvider("jingle", "http://www.xmpp.org/extensions/xep-0166.html#ns", new JingleProvider());
-
- // Enable the Jingle support on every established connection
- // The ServiceDiscoveryManager class should have been already
- // initialized
- XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {
- public void connectionCreated(XMPPConnection connection) {
- JingleManager.setServiceEnabled(connection, true);
- }
- });
- }
-
- /**
+ /**
* Default constructor with a defined XMPPConnection, Transport Resolver and a Media Manager
* If a fully implemented JingleMediaSession is entered, JingleManager manage Jingle signalling and jmf
*
@@ -252,32 +245,28 @@ public class JingleManager implements JingleSessionListener {
}
+
/**
- * Default constructor with a defined XMPPConnection.
- * A default JingleTransportmanager based on BasicResolver will be used in this JingleManager transport.
- *
- * @param connection XMPP Connection to be used
- */
- // public JingleManager(XMPPConnection connection) {
- // this(connection, new JingleTransportManager() {
- // protected TransportResolver createResolver(JingleSession session) {
- // return new BasicResolver();
- // }
- // });
- // }
- /**
- * Default constructor with a defined XMPPConnection and a defined Resolver.
- * A default JingleTransportmanager based on BasicResolver will be used in this JingleManager transport.
- *
- * @param connection XMPP Connection to be used
+ * Setup the jingle system to let the remote clients know we support Jingle.
+ * (This used to be a static part of construction. The problem is a remote client might
+ * attempt a Jingle connection to us after we've created an XMPPConnection, but before we've
+ * setup an instance of a JingleManager. We will appear to not support Jingle. With the new
+ * method you just call it once and all new connections will report Jingle support.)
*/
- // public JingleManager(XMPPConnection connection, final TransportResolver resolver) {
- // this(connection, new JingleTransportManager() {
- // protected TransportResolver createResolver(JingleSession session) {
- // return resolver;
- // }
- // });
- // }
+ public static void setJingleServiceEnabled() {
+ ProviderManager providerManager = ProviderManager.getInstance();
+ providerManager.addIQProvider("jingle", "urn:xmpp:tmp:jingle", new JingleProvider());
+
+ // Enable the Jingle support on every established connection
+ // The ServiceDiscoveryManager class should have been already
+ // initialized
+ XMPPConnection.addConnectionCreationListener(new ConnectionCreationListener() {
+ public void connectionCreated(XMPPConnection connection) {
+ JingleManager.setServiceEnabled(connection, true);
+ }
+ });
+ }
+
/**
* Enables or disables the Jingle support on a given connection.
*
@@ -429,7 +418,7 @@ public class JingleManager implements JingleSessionListener {
jingleSession.removeListener(this);
jingleSessions.remove(jingleSession);
jingleSession.close();
- System.err.println("Declined:" + reason);
+ LOGGER.error("Declined:" + reason);
}
public void sessionRedirected(String redirection, JingleSession jingleSession) {
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleNegotiator.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleNegotiator.java
index 88f020227..ee8c98cb1 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleNegotiator.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleNegotiator.java
@@ -19,14 +19,14 @@
*/
package org.jivesoftware.smackx.jingle;
+import java.util.ArrayList;
+import java.util.List;
+
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smackx.jingle.listeners.JingleListener;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* Basic Jingle negotiator.
*
@@ -43,7 +43,9 @@ import java.util.List;
*/
public abstract class JingleNegotiator {
- //private XMPPConnection connection; // The connection associated
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(JingleNegotiator.class);
+
+ //private XMPPConnection connection; // The connection associated
protected JingleSession session;
@@ -78,7 +80,7 @@ public abstract class JingleNegotiator {
JingleNegotiatorState stateWas = state;
- System.out.println("Negotiator state change: " + stateWas + "->" + stateIs + "(" + this.getClass().getSimpleName() + ")");
+ LOGGER.debug("Negotiator state change: " + stateWas + "->" + stateIs + "(" + this.getClass().getSimpleName() + ")");
switch (stateIs) {
case PENDING:
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java
index 9bbeb158b..5efae61e5 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSession.java
@@ -52,6 +52,12 @@
package org.jivesoftware.smackx.jingle;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Random;
+
import org.jivesoftware.smack.ConnectionListener;
import org.jivesoftware.smack.PacketListener;
import org.jivesoftware.smack.XMPPConnection;
@@ -65,7 +71,11 @@ import org.jivesoftware.smackx.jingle.listeners.JingleListener;
import org.jivesoftware.smackx.jingle.listeners.JingleMediaListener;
import org.jivesoftware.smackx.jingle.listeners.JingleSessionListener;
import org.jivesoftware.smackx.jingle.listeners.JingleTransportListener;
-import org.jivesoftware.smackx.jingle.media.*;
+import org.jivesoftware.smackx.jingle.media.JingleMediaManager;
+import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
+import org.jivesoftware.smackx.jingle.media.MediaNegotiator;
+import org.jivesoftware.smackx.jingle.media.MediaReceivedListener;
+import org.jivesoftware.smackx.jingle.media.PayloadType;
import org.jivesoftware.smackx.jingle.nat.JingleTransportManager;
import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
import org.jivesoftware.smackx.jingle.nat.TransportNegotiator;
@@ -73,8 +83,6 @@ import org.jivesoftware.smackx.jingle.nat.TransportResolver;
import org.jivesoftware.smackx.packet.Jingle;
import org.jivesoftware.smackx.packet.JingleError;
-import java.util.*;
-
/**
* An abstract Jingle session. This class contains some basic properties of
* every Jingle session. However, the concrete implementation can be found in
@@ -85,7 +93,9 @@ import java.util.*;
*/
public class JingleSession extends JingleNegotiator implements MediaReceivedListener {
- // static
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(JingleSession.class);
+
+ // static
private static final HashMap sessions = new HashMap();
private static final Random randomGenerator = new Random();
@@ -98,6 +108,8 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
private String sid; // A unique id that identifies this session
+ ConnectionListener connectionListener;
+
PacketListener packetListener;
PacketFilter packetFilter;
@@ -264,7 +276,7 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
public void setSessionState(JingleSessionState stateIs) {
- System.out.println("Session state change: " + sessionState + "->" + stateIs);
+ LOGGER.debug("Session state change: " + sessionState + "->" + stateIs);
stateIs.enter();
sessionState = stateIs;
}
@@ -307,7 +319,7 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
String responseId = null;
- System.out.println("Packet: " + iq.toXML());
+ LOGGER.debug("Packet: " + iq.toXML());
try {
@@ -505,7 +517,8 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
}
// The the packet.
- getConnection().sendPacket(jout);
+ if ((getConnection() != null) && (getConnection().isConnected()))
+ getConnection().sendPacket(jout);
}
return jout;
}
@@ -689,7 +702,7 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
*/
private void installConnectionListeners(final XMPPConnection connection) {
if (connection != null) {
- connection.addConnectionListener(new ConnectionListener() {
+ connectionListener = new ConnectionListener() {
public void connectionClosed() {
unregisterInstanceFor(connection);
}
@@ -706,9 +719,18 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
public void reconnectionFailed(Exception exception) {
}
- });
+ };
+ connection.addConnectionListener(connectionListener);
}
}
+
+ private void removeConnectionListener() {
+ if (connectionListener != null) {
+ getConnection().removeConnectionListener(connectionListener);
+
+ LOGGER.debug("JINGLE SESSION: REMOVE CONNECTION LISTENER");
+ }
+ }
/**
* Remove the packet listener used for processing packet.
@@ -717,7 +739,7 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
if (packetListener != null) {
getConnection().removePacketListener(packetListener);
- System.out.println("REMOVE PACKET LISTENER");
+ LOGGER.debug("JINGLE SESSION: REMOVE PACKET LISTENER");
}
}
@@ -728,7 +750,7 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
protected void updatePacketListener() {
removePacketListener();
- System.out.println("UpdatePacketListener");
+ LOGGER.debug("UpdatePacketListener");
packetListener = new PacketListener() {
public void processPacket(Packet packet) {
@@ -763,21 +785,21 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
String sid = jin.getSid();
if (sid == null || !sid.equals(getSid())) {
- System.out.println("Ignored Jingle(SID) " + sid + "|" + getSid() + " :" + iq.toXML());
+ LOGGER.debug("Ignored Jingle(SID) " + sid + "|" + getSid() + " :" + iq.toXML());
return false;
}
String ini = jin.getInitiator();
if (!ini.equals(getInitiator())) {
- System.out.println("Ignored Jingle(INI): " + iq.toXML());
+ LOGGER.debug("Ignored Jingle(INI): " + iq.toXML());
return false;
}
} else {
// We accept some non-Jingle IQ packets: ERRORs and ACKs
if (iq.getType().equals(IQ.Type.SET)) {
- System.out.println("Ignored Jingle(TYPE): " + iq.toXML());
+ LOGGER.debug("Ignored Jingle(TYPE): " + iq.toXML());
return false;
} else if (iq.getType().equals(IQ.Type.GET)) {
- System.out.println("Ignored Jingle(TYPE): " + iq.toXML());
+ LOGGER.debug("Ignored Jingle(TYPE): " + iq.toXML());
return false;
}
}
@@ -882,12 +904,17 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
public void transportEstablished(TransportCandidate local, TransportCandidate remote) {
if (isFullyEstablished()) {
- for (ContentNegotiator contentNegotiator : contentNegotiators) {
+
+ // Indicate that this session is active.
+ setSessionState(JingleSessionStateActive.getInstance());
+
+ for (ContentNegotiator contentNegotiator : contentNegotiators) {
if (contentNegotiator.getNegotiatorState() == JingleNegotiatorState.SUCCEEDED)
contentNegotiator.triggerContentEstablished();
}
if (getSessionState().equals(JingleSessionStatePending.getInstance())) {
+
Jingle jout = new Jingle(JingleActionEnum.SESSION_ACCEPT);
// Build up a response packet from each media manager.
@@ -1028,7 +1055,7 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
public void terminate(String reason) throws XMPPException {
if (isClosed())
return;
- System.out.println("Terminate " + reason);
+ LOGGER.debug("Terminate " + reason);
Jingle jout = new Jingle(JingleActionEnum.SESSION_TERMINATE);
jout.setType(IQ.Type.SET);
sendPacket(jout);
@@ -1055,7 +1082,9 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
contentNegotiator.close();
}
removePacketListener();
- System.out.println("Negotiation Closed: " + getConnection().getUser() + " " + sid);
+ removeConnectionListener();
+ getConnection().removeConnectionListener(connectionListener);
+ LOGGER.debug("Negotiation Closed: " + getConnection().getUser() + " " + sid);
super.close();
}
@@ -1114,7 +1143,7 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
IQ iqError = createIQ(ID, to, from, IQ.Type.ERROR);
iqError.setError(error);
- System.out.println("Created Error Packet:" + iqError.toXML());
+ LOGGER.debug("Created Error Packet:" + iqError.toXML());
return iqError;
}
@@ -1145,7 +1174,7 @@ public class JingleSession extends JingleNegotiator implements MediaReceivedList
// NO! Let the normal state machinery do all of the sending.
// getConnection().sendPacket(perror);
- System.err.println("Error sent: " + errorPacket.toXML());
+ LOGGER.error("Error sent: " + errorPacket.toXML());
}
return errorPacket;
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateEnded.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateEnded.java
index 0c34b13c2..3fd1f0850 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateEnded.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/JingleSessionStateEnded.java
@@ -9,7 +9,10 @@ import org.jivesoftware.smackx.packet.JingleError;
* @see JingleSessionState
*/
public class JingleSessionStateEnded extends JingleSessionState {
- private static JingleSessionStateEnded INSTANCE = null;
+
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(JingleSessionStateEnded.class);
+
+ private static JingleSessionStateEnded INSTANCE = null;
protected JingleSessionStateEnded() {
// Prevent instantiation of the class.
@@ -28,8 +31,8 @@ public class JingleSessionStateEnded extends JingleSessionState {
}
public void enter() {
- System.out.println("Session Ended");
- System.out.println("-------------------------------------------------------------------");
+ LOGGER.debug("Session Ended");
+ LOGGER.debug("-------------------------------------------------------------------");
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/SmackLogger.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/SmackLogger.java
new file mode 100644
index 000000000..4ef16946f
--- /dev/null
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/SmackLogger.java
@@ -0,0 +1,192 @@
+/**
+ * $RCSfile$
+ * $Revision: 7071 $
+ * $Date: 2007-02-11 16:59:05 -0800 (Sun, 11 Feb 2007) $
+ *
+ * Copyright 2003-2007 Jive Software.
+ *
+ * All rights reserved. Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jivesoftware.smackx.jingle;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import org.apache.commons.logging.Log;
+
+// --------------------------------------------------------------------------
+/**
+ * SmackLogger attempts to use Apache commons-logging if it's available.
+ *
+ * When you request an instance of SmackLogger we make an attempt to create an instance of org.apache.commons.logging.Log.
+ * If we are able to make an instance of Log then we dispatch all log requests to commons-logging.
+ * If we are not able to make an instance of Log then we dispatch all log requests to System.out/err.
+ *
+ * @author jeffw
+ */
+public class SmackLogger {
+
+ private Log commonsLogger;
+
+ // --------------------------------------------------------------------------
+ /**
+ * This static method is the only way to get an instance of a SmackLogger.
+ * @param classToLog This is the class that wants to log. (This gives commons-logging a means to control log-level by class.)
+ * @return An instance of a SmackLogger for the class that wants logging.
+ */
+ public static SmackLogger getLogger(Class classToLog) {
+ return new SmackLogger(classToLog);
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * This is private to make it impossible to instantiate a new SmackLogger outside of the getLogger() static method.
+ * @param classToLog This is the class that wants to log. (This gives commons-logging a means to control log-level by class.)
+ */
+ public SmackLogger(Class classToLog) {
+ setupSmackLogger(classToLog);
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * The actual attempt to create an instance of commons-logging Log.
+ * @param classToLog
+ * @return
+ */
+ private void setupSmackLogger(Class classToLog) {
+ try {
+ Class logFactoryClass = SmackLogger.class.getClassLoader().loadClass("org.apache.commons.logging.LogFactory");
+ Method method = logFactoryClass.getMethod("getLog", Class.class);
+ //Constructor constructor = Log.class.getConstructor(new Class[] { Object.class });
+ commonsLogger = (Log) method.invoke(null, classToLog);
+
+ // We don't care to do anything about exceptions.
+ // If we can't create a commons-logger then just use our simple one.
+ } catch (ClassNotFoundException e) {
+ } catch (SecurityException e) {
+ } catch (NoSuchMethodException e) {
+ } catch (IllegalArgumentException e) {
+ } catch (IllegalAccessException e) {
+ } catch (InvocationTargetException e) {
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * Wrapper for commons-logging error(Object msg, Exception exception)
+ * @param inDebugMsg
+ */
+ public void error(String inErrorMsg, Exception inException) {
+ if (commonsLogger != null) {
+ commonsLogger.error(inErrorMsg, inException);
+ } else {
+ System.err.println(inErrorMsg);
+ inException.printStackTrace(System.err);
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * Wrapper for commons-logging error(Object msg)
+ * @param inDebugMsg
+ */
+ public void error(String inErrorMsg) {
+ if (commonsLogger != null) {
+ commonsLogger.error(inErrorMsg);
+ } else {
+ System.err.println(inErrorMsg);
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * Wrapper for commons-logging debug(Object msg)
+ * @param inDebugMsg
+ */
+ public void debug(String inDebugMsg, Exception inException) {
+ if (commonsLogger != null) {
+ commonsLogger.debug(inDebugMsg, inException);
+ } else {
+ System.out.println(inDebugMsg);
+ inException.printStackTrace(System.out);
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * Wrapper for commons-logging debug(Object msg)
+ * @param inDebugMsg
+ */
+ public void debug(String inDebugMsg) {
+ if (commonsLogger != null) {
+ commonsLogger.debug(inDebugMsg);
+ } else {
+ System.out.println(inDebugMsg);
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * Wrapper for commons-logging warn(Object msg)
+ * @param inDebugMsg
+ */
+ public void warn(String inDebugMsg, Exception inException) {
+ if (commonsLogger != null) {
+ commonsLogger.warn(inDebugMsg, inException);
+ } else {
+ System.out.println(inDebugMsg);
+ inException.printStackTrace(System.out);
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * Wrapper for commons-logging warn(Object msg)
+ * @param inDebugMsg
+ */
+ public void warn(String inDebugMsg) {
+ if (commonsLogger != null) {
+ commonsLogger.warn(inDebugMsg);
+ } else {
+ System.out.println(inDebugMsg);
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * Wrapper for commons-logging info(Object msg)
+ * @param inDebugMsg
+ */
+ public void info(String inDebugMsg, Exception inException) {
+ if (commonsLogger != null) {
+ commonsLogger.info(inDebugMsg, inException);
+ } else {
+ System.out.println(inDebugMsg);
+ inException.printStackTrace(System.out);
+ }
+ }
+
+ // --------------------------------------------------------------------------
+ /**
+ * Wrapper for commons-logging info(Object msg)
+ * @param inDebugMsg
+ */
+ public void info(String inDebugMsg) {
+ if (commonsLogger != null) {
+ commonsLogger.info(inDebugMsg);
+ } else {
+ System.out.println(inDebugMsg);
+ }
+ }
+
+}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/media/MediaNegotiator.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/media/MediaNegotiator.java
index e4bed6e98..7bcbb50b2 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/media/MediaNegotiator.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/media/MediaNegotiator.java
@@ -19,9 +19,18 @@
*/
package org.jivesoftware.smackx.jingle.media;
+import java.util.ArrayList;
+import java.util.List;
+
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.IQ;
-import org.jivesoftware.smackx.jingle.*;
+import org.jivesoftware.smackx.jingle.ContentNegotiator;
+import org.jivesoftware.smackx.jingle.JingleActionEnum;
+import org.jivesoftware.smackx.jingle.JingleException;
+import org.jivesoftware.smackx.jingle.JingleNegotiator;
+import org.jivesoftware.smackx.jingle.JingleNegotiatorState;
+import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
import org.jivesoftware.smackx.jingle.listeners.JingleListener;
import org.jivesoftware.smackx.jingle.listeners.JingleMediaListener;
import org.jivesoftware.smackx.packet.Jingle;
@@ -29,9 +38,6 @@ import org.jivesoftware.smackx.packet.JingleContent;
import org.jivesoftware.smackx.packet.JingleDescription;
import org.jivesoftware.smackx.packet.JingleError;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* Manager for jmf descriptor negotiation. This class is responsible
* for managing the descriptor negotiation process, handling all the xmpp
@@ -42,7 +48,9 @@ import java.util.List;
*/
public class MediaNegotiator extends JingleNegotiator {
- //private JingleSession session; // The session this negotiation
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(MediaNegotiator.class);
+
+ //private JingleSession session; // The session this negotiation
private final JingleMediaManager mediaManager;
@@ -211,7 +219,7 @@ public class MediaNegotiator extends JingleNegotiator {
setNegotiatorState(JingleNegotiatorState.SUCCEEDED);
triggerMediaEstablished(getBestCommonAudioPt());
- System.err.println("Media choice:" + getBestCommonAudioPt().getName());
+ LOGGER.error("Media choice:" + getBestCommonAudioPt().getName());
response = session.createAck(jingle);
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/JMFInit.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/JMFInit.java
index bdc3545fa..5a7571af3 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/JMFInit.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/JMFInit.java
@@ -1,18 +1,25 @@
package org.jivesoftware.smackx.jingle.mediaimpl;
-import com.sun.media.util.Registry;
-import com.sun.media.ExclusiveUse;
-
-import javax.media.format.AudioFormat;
-import javax.media.Renderer;
-import javax.media.PlugInManager;
-import javax.media.Format;
-import java.awt.*;
+import java.awt.Frame;
+import java.awt.TextArea;
+import java.awt.Toolkit;
import java.util.Vector;
+import javax.media.Format;
+import javax.media.PlugInManager;
+import javax.media.Renderer;
+import javax.media.format.AudioFormat;
+
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
+import com.sun.media.ExclusiveUse;
+import com.sun.media.util.Registry;
+
public class JMFInit extends Frame implements Runnable {
- private String tempDir = "/tmp";
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(JMFInit.class);
+
+ private String tempDir = "/tmp";
private boolean done = false;
@@ -248,7 +255,7 @@ public class JMFInit extends Frame implements Runnable {
}
private void message(String mesg) {
- System.out.println(mesg);
+ LOGGER.debug(mesg);
}
private void createGUI() {
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioChannel.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioChannel.java
index 963e39ddb..74ca63ede 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioChannel.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioChannel.java
@@ -19,9 +19,22 @@
*/
package org.jivesoftware.smackx.jingle.mediaimpl.jmf;
-import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
+import java.io.IOException;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.List;
-import javax.media.*;
+import javax.media.Codec;
+import javax.media.Controller;
+import javax.media.ControllerClosedEvent;
+import javax.media.ControllerEvent;
+import javax.media.ControllerListener;
+import javax.media.Format;
+import javax.media.MediaLocator;
+import javax.media.NoProcessorException;
+import javax.media.Processor;
+import javax.media.UnsupportedPlugInException;
import javax.media.control.BufferControl;
import javax.media.control.PacketSizeControl;
import javax.media.control.TrackControl;
@@ -34,11 +47,9 @@ import javax.media.rtp.InvalidSessionAddressException;
import javax.media.rtp.RTPManager;
import javax.media.rtp.SendStream;
import javax.media.rtp.SessionAddress;
-import java.io.IOException;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.util.ArrayList;
-import java.util.List;
+
+import org.jivesoftware.smackx.jingle.SmackLogger;
+import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
/**
* An Easy to use Audio Channel implemented using JMF.
@@ -60,7 +71,9 @@ import java.util.List;
*/
public class AudioChannel {
- private MediaLocator locator;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(AudioChannel.class);
+
+ private MediaLocator locator;
private String localIpAddress;
private String remoteIpAddress;
private int localPort;
@@ -239,8 +252,8 @@ public class AudioChannel {
}
if (chosen != null) {
tracks[i].setFormat(chosen);
- System.err.println("Track " + i + " is set to transmit as:");
- System.err.println(" " + chosen);
+ LOGGER.error("Track " + i + " is set to transmit as:");
+ LOGGER.error(" " + chosen);
if (tracks[i].getFormat() instanceof AudioFormat) {
int packetRate = 20;
@@ -375,7 +388,7 @@ public class AudioChannel {
rtpMgrs[i].addTarget(destAddr);
- System.err.println("Created RTP session at " + localPort + " to: " + remoteIpAddress + " " + port);
+ LOGGER.error("Created RTP session at " + localPort + " to: " + remoteIpAddress + " " + port);
sendStream = rtpMgrs[i].createSendStream(dataOutput, i);
@@ -404,11 +417,11 @@ public class AudioChannel {
try {
if (active) {
sendStream.start();
- System.out.println("START");
+ LOGGER.debug("START");
}
else {
sendStream.stop();
- System.out.println("STOP");
+ LOGGER.debug("STOP");
}
}
catch (IOException e) {
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioMediaSession.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioMediaSession.java
index 5238f51ec..33453b735 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioMediaSession.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioMediaSession.java
@@ -20,15 +20,17 @@
package org.jivesoftware.smackx.jingle.mediaimpl.jmf;
+import java.io.IOException;
+import java.net.ServerSocket;
+
+import javax.media.MediaLocator;
+
import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
import org.jivesoftware.smackx.jingle.media.PayloadType;
import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
-import javax.media.MediaLocator;
-import java.io.IOException;
-import java.net.ServerSocket;
-
/**
* This Class implements a complete JingleMediaSession.
* It sould be used to transmit and receive audio captured from the Mic.
@@ -41,7 +43,9 @@ import java.net.ServerSocket;
*/
public class AudioMediaSession extends JingleMediaSession {
- private AudioChannel audioChannel;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(AudioMediaSession.class);
+
+ private AudioChannel audioChannel;
/**
* Creates a org.jivesoftware.jingleaudio.jmf.AudioMediaSession with defined payload type, remote and local candidates
@@ -73,7 +77,7 @@ public class AudioMediaSession extends JingleMediaSession {
localPort = getFreePort();
remotePort = this.getLocal().getSymmetric().getPort();
- System.out.println(this.getLocal().getConnection() + " " + ip + ": " + localPort + "->" + remotePort);
+ LOGGER.debug(this.getLocal().getConnection() + " " + ip + ": " + localPort + "->" + remotePort);
}
else {
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioReceiver.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioReceiver.java
index b8b7c0618..e62455b7c 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioReceiver.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/AudioReceiver.java
@@ -20,12 +20,27 @@
package org.jivesoftware.smackx.jingle.mediaimpl.jmf;
-import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
-
-import javax.media.*;
+import javax.media.ControllerErrorEvent;
+import javax.media.ControllerEvent;
+import javax.media.ControllerListener;
+import javax.media.Player;
+import javax.media.RealizeCompleteEvent;
import javax.media.protocol.DataSource;
-import javax.media.rtp.*;
-import javax.media.rtp.event.*;
+import javax.media.rtp.Participant;
+import javax.media.rtp.RTPControl;
+import javax.media.rtp.ReceiveStream;
+import javax.media.rtp.ReceiveStreamListener;
+import javax.media.rtp.SessionListener;
+import javax.media.rtp.event.ByeEvent;
+import javax.media.rtp.event.NewParticipantEvent;
+import javax.media.rtp.event.NewReceiveStreamEvent;
+import javax.media.rtp.event.ReceiveStreamEvent;
+import javax.media.rtp.event.RemotePayloadChangeEvent;
+import javax.media.rtp.event.SessionEvent;
+import javax.media.rtp.event.StreamMappedEvent;
+
+import org.jivesoftware.smackx.jingle.SmackLogger;
+import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
/**
* This class implements receive methods and listeners to be used in AudioChannel
@@ -35,7 +50,9 @@ import javax.media.rtp.event.*;
public class AudioReceiver implements ReceiveStreamListener, SessionListener,
ControllerListener {
- boolean dataReceived = false;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(AudioReceiver.class);
+
+ boolean dataReceived = false;
Object dataSync;
JingleMediaSession jingleMediaSession;
@@ -51,7 +68,7 @@ public class AudioReceiver implements ReceiveStreamListener, SessionListener,
public synchronized void update(SessionEvent evt) {
if (evt instanceof NewParticipantEvent) {
Participant p = ((NewParticipantEvent) evt).getParticipant();
- System.err.println(" - A new participant had just joined: " + p.getCNAME());
+ LOGGER.error(" - A new participant had just joined: " + p.getCNAME());
}
}
@@ -64,8 +81,8 @@ public class AudioReceiver implements ReceiveStreamListener, SessionListener,
ReceiveStream stream = evt.getReceiveStream(); // could be null.
if (evt instanceof RemotePayloadChangeEvent) {
- System.err.println(" - Received an RTP PayloadChangeEvent.");
- System.err.println("Sorry, cannot handle payload change.");
+ LOGGER.error(" - Received an RTP PayloadChangeEvent.");
+ LOGGER.error("Sorry, cannot handle payload change.");
}
else if (evt instanceof NewReceiveStreamEvent) {
@@ -77,15 +94,15 @@ public class AudioReceiver implements ReceiveStreamListener, SessionListener,
// Find out the formats.
RTPControl ctl = (RTPControl) ds.getControl("javax.jmf.rtp.RTPControl");
if (ctl != null) {
- System.err.println(" - Recevied new RTP stream: " + ctl.getFormat());
+ LOGGER.error(" - Recevied new RTP stream: " + ctl.getFormat());
}
else
- System.err.println(" - Recevied new RTP stream");
+ LOGGER.error(" - Recevied new RTP stream");
if (participant == null)
- System.err.println(" The sender of this stream had yet to be identified.");
+ LOGGER.error(" The sender of this stream had yet to be identified.");
else {
- System.err.println(" The stream comes from: " + participant.getCNAME());
+ LOGGER.error(" The stream comes from: " + participant.getCNAME());
}
// create a player by passing datasource to the Media Manager
@@ -105,7 +122,7 @@ public class AudioReceiver implements ReceiveStreamListener, SessionListener,
}
catch (Exception e) {
- System.err.println("NewReceiveStreamEvent exception " + e.getMessage());
+ LOGGER.error("NewReceiveStreamEvent exception " + e.getMessage());
return;
}
@@ -116,15 +133,15 @@ public class AudioReceiver implements ReceiveStreamListener, SessionListener,
DataSource ds = stream.getDataSource();
// Find out the formats.
RTPControl ctl = (RTPControl) ds.getControl("javax.jmf.rtp.RTPControl");
- System.err.println(" - The previously unidentified stream ");
+ LOGGER.error(" - The previously unidentified stream ");
if (ctl != null)
- System.err.println(" " + ctl.getFormat());
- System.err.println(" had now been identified as sent by: " + participant.getCNAME());
+ LOGGER.error(" " + ctl.getFormat());
+ LOGGER.error(" had now been identified as sent by: " + participant.getCNAME());
}
}
else if (evt instanceof ByeEvent) {
- System.err.println(" - Got \"bye\" from: " + participant.getCNAME());
+ LOGGER.error(" - Got \"bye\" from: " + participant.getCNAME());
}
@@ -147,7 +164,7 @@ public class AudioReceiver implements ReceiveStreamListener, SessionListener,
if (ce instanceof ControllerErrorEvent) {
p.removeControllerListener(this);
- System.err.println("Receiver internal error: " + ce);
+ LOGGER.error("Receiver internal error: " + ce);
}
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/JmfMediaManager.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/JmfMediaManager.java
index 762c17ea5..38f1ce60b 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/JmfMediaManager.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf/JmfMediaManager.java
@@ -20,7 +20,13 @@
package org.jivesoftware.smackx.jingle.mediaimpl.jmf;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
import org.jivesoftware.smackx.jingle.media.JingleMediaManager;
import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
import org.jivesoftware.smackx.jingle.media.PayloadType;
@@ -28,11 +34,6 @@ import org.jivesoftware.smackx.jingle.mediaimpl.JMFInit;
import org.jivesoftware.smackx.jingle.nat.JingleTransportManager;
import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* Implements a jingleMediaManager using JMF based API.
* It supports GSM and G723 codecs.
@@ -42,7 +43,9 @@ import java.util.List;
*/
public class JmfMediaManager extends JingleMediaManager {
- public static final String MEDIA_NAME = "JMF";
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(JmfMediaManager.class);
+
+ public static final String MEDIA_NAME = "JMF";
private List payloads = new ArrayList();
@@ -142,7 +145,7 @@ public class JmfMediaManager extends JingleMediaManager {
jmfProperties.createNewFile();
}
catch (IOException ex) {
- System.out.println("Failed to create jmf.properties");
+ LOGGER.debug("Failed to create jmf.properties");
ex.printStackTrace();
}
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jspeex/AudioMediaSession.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jspeex/AudioMediaSession.java
index 28e43ca9c..af4fe7092 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jspeex/AudioMediaSession.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jspeex/AudioMediaSession.java
@@ -20,25 +20,28 @@
package org.jivesoftware.smackx.jingle.mediaimpl.jspeex;
-import mil.jfcom.cie.media.session.MediaSession;
-import mil.jfcom.cie.media.session.MediaSessionListener;
-import mil.jfcom.cie.media.session.StreamPlayer;
-import mil.jfcom.cie.media.srtp.packetizer.SpeexFormat;
-import org.jivesoftware.smackx.jingle.JingleSession;
-import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
-import org.jivesoftware.smackx.jingle.media.PayloadType;
-import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
-
-import javax.media.NoProcessorException;
-import javax.media.format.UnsupportedFormatException;
-import javax.media.rtp.rtcp.SenderReport;
-import javax.media.rtp.rtcp.SourceDescription;
import java.io.IOException;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.security.GeneralSecurityException;
+import javax.media.NoProcessorException;
+import javax.media.format.UnsupportedFormatException;
+import javax.media.rtp.rtcp.SenderReport;
+import javax.media.rtp.rtcp.SourceDescription;
+
+import mil.jfcom.cie.media.session.MediaSession;
+import mil.jfcom.cie.media.session.MediaSessionListener;
+import mil.jfcom.cie.media.session.StreamPlayer;
+import mil.jfcom.cie.media.srtp.packetizer.SpeexFormat;
+
+import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
+import org.jivesoftware.smackx.jingle.media.PayloadType;
+import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
+
/**
* This Class implements a complete JingleMediaSession.
* It sould be used to transmit and receive audio captured from the Mic.
@@ -52,7 +55,9 @@ import java.security.GeneralSecurityException;
public class AudioMediaSession extends JingleMediaSession implements MediaSessionListener {
- private MediaSession mediaSession;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(AudioMediaSession.class);
+
+ private MediaSession mediaSession;
/**
* Create a Session using Speex Codec
@@ -123,7 +128,7 @@ public class AudioMediaSession extends JingleMediaSession implements MediaSessio
localPort = getFreePort();
remotePort = this.getLocal().getSymmetric().getPort();
- System.out.println(this.getLocal().getConnection() + " " + ip + ": " + localPort + "->" + remotePort);
+ LOGGER.debug(this.getLocal().getConnection() + " " + ip + ": " + localPort + "->" + remotePort);
}
else {
@@ -155,7 +160,7 @@ public class AudioMediaSession extends JingleMediaSession implements MediaSessio
*/
public void startTrasmit() {
try {
- System.out.println("start");
+ LOGGER.debug("start");
mediaSession.start(true);
this.mediaReceived("");
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jspeex/SpeexMediaManager.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jspeex/SpeexMediaManager.java
index 527cbf750..49b3a3abf 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jspeex/SpeexMediaManager.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/jspeex/SpeexMediaManager.java
@@ -19,7 +19,13 @@
*/
package org.jivesoftware.smackx.jingle.mediaimpl.jspeex;
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
import org.jivesoftware.smackx.jingle.media.JingleMediaManager;
import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
import org.jivesoftware.smackx.jingle.media.PayloadType;
@@ -27,11 +33,6 @@ import org.jivesoftware.smackx.jingle.mediaimpl.JMFInit;
import org.jivesoftware.smackx.jingle.nat.JingleTransportManager;
import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
/**
* Implements a jingleMediaManager using JMF based API and JSpeex.
* It supports Speex codec.
@@ -41,7 +42,9 @@ import java.util.List;
*/
public class SpeexMediaManager extends JingleMediaManager {
- public static final String MEDIA_NAME = "Speex";
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(SpeexMediaManager.class);
+
+ public static final String MEDIA_NAME = "Speex";
private List payloads = new ArrayList();
@@ -106,7 +109,7 @@ public class SpeexMediaManager extends JingleMediaManager {
jmfProperties.createNewFile();
}
catch (IOException ex) {
- System.out.println("Failed to create jmf.properties");
+ LOGGER.debug("Failed to create jmf.properties");
ex.printStackTrace();
}
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/ScreenShareSession.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/ScreenShareSession.java
index 7fadac11c..3b253c842 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/ScreenShareSession.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/ScreenShareSession.java
@@ -19,17 +19,7 @@
*/
package org.jivesoftware.smackx.jingle.mediaimpl.sshare;
-import org.jivesoftware.smackx.jingle.JingleSession;
-import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
-import org.jivesoftware.smackx.jingle.media.PayloadType;
-import org.jivesoftware.smackx.jingle.mediaimpl.sshare.api.ImageDecoder;
-import org.jivesoftware.smackx.jingle.mediaimpl.sshare.api.ImageEncoder;
-import org.jivesoftware.smackx.jingle.mediaimpl.sshare.api.ImageReceiver;
-import org.jivesoftware.smackx.jingle.mediaimpl.sshare.api.ImageTransmitter;
-import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
-
-import javax.swing.*;
-import java.awt.*;
+import java.awt.Rectangle;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
@@ -38,6 +28,19 @@ import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.UnknownHostException;
+import javax.swing.JFrame;
+import javax.swing.JPanel;
+
+import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
+import org.jivesoftware.smackx.jingle.media.PayloadType;
+import org.jivesoftware.smackx.jingle.mediaimpl.sshare.api.ImageDecoder;
+import org.jivesoftware.smackx.jingle.mediaimpl.sshare.api.ImageEncoder;
+import org.jivesoftware.smackx.jingle.mediaimpl.sshare.api.ImageReceiver;
+import org.jivesoftware.smackx.jingle.mediaimpl.sshare.api.ImageTransmitter;
+import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
+
/**
* This Class implements a complete JingleMediaSession.
* It sould be used to transmit and receive captured images from the Display.
@@ -49,7 +52,9 @@ import java.net.UnknownHostException;
*/
public class ScreenShareSession extends JingleMediaSession {
- private ImageTransmitter transmitter = null;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(ScreenShareSession.class);
+
+ private ImageTransmitter transmitter = null;
private ImageReceiver receiver = null;
private int width = 600;
private int height = 600;
@@ -102,7 +107,7 @@ public class ScreenShareSession extends JingleMediaSession {
try {
receiver = new ImageReceiver(InetAddress.getByName("0.0.0.0"), getRemote().getPort(), getLocal().getPort(), width,
height);
- System.out.println("Receiving on:" + receiver.getLocalPort());
+ LOGGER.debug("Receiving on:" + receiver.getLocalPort());
} catch (UnknownHostException e) {
e.printStackTrace();
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageTransmitter.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageTransmitter.java
index b7884a58e..a4cf8374f 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageTransmitter.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/ImageTransmitter.java
@@ -1,6 +1,8 @@
package org.jivesoftware.smackx.jingle.mediaimpl.sshare.api;
-import java.awt.*;
+import java.awt.AWTException;
+import java.awt.Rectangle;
+import java.awt.Robot;
import java.awt.image.BufferedImage;
import java.awt.image.PixelGrabber;
import java.io.ByteArrayOutputStream;
@@ -10,6 +12,8 @@ import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Arrays;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
/**
* UDP Image Receiver.
* It uses PNG Tiles into UDP packets.
@@ -18,7 +22,9 @@ import java.util.Arrays;
*/
public class ImageTransmitter implements Runnable {
- private Robot robot;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(ImageTransmitter.class);
+
+ private Robot robot;
private InetAddress localHost;
private InetAddress remoteHost;
private int localPort;
@@ -80,7 +86,7 @@ public class ImageTransmitter implements Runnable {
if (++keyframe > KEYFRAME) {
keyframe = 0;
}
- System.out.println("KEYFRAME:" + keyframe);
+ LOGGER.debug("KEYFRAME:" + keyframe);
for (int i = 0; i < maxI; i++) {
for (int j = 0; j < maxJ; j++) {
@@ -110,7 +116,7 @@ public class ImageTransmitter implements Runnable {
byte[] bytesOut = baos.toByteArray();
if (bytesOut.length > 1000)
- System.err.println(bytesOut.length);
+ LOGGER.error("Bytes out > 1000. Equals " + bytesOut.length);
p.setData(bytesOut);
p.setAddress(remoteHost);
@@ -142,7 +148,7 @@ public class ImageTransmitter implements Runnable {
}
trace = (System.currentTimeMillis() - trace);
- System.out.println("Loop Time:" + trace);
+ LOGGER.debug("Loop Time:" + trace);
if (trace < 500) {
try {
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/OctTreeQuantizer.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/OctTreeQuantizer.java
index 9d33eb187..1b8fa9d3c 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/OctTreeQuantizer.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/sshare/api/OctTreeQuantizer.java
@@ -19,6 +19,8 @@ package org.jivesoftware.smackx.jingle.mediaimpl.sshare.api;
import java.io.PrintStream;
import java.util.Vector;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
/**
* An image Quantizer based on the Octree algorithm. This is a very basic implementation
* at present and could be much improved by picking the nodes to reduce more carefully
@@ -26,6 +28,8 @@ import java.util.Vector;
*/
public class OctTreeQuantizer implements Quantizer {
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(OctTreeQuantizer.class);
+
/**
* The greatest depth the tree is allowed to reach
*/
@@ -50,12 +54,13 @@ public class OctTreeQuantizer implements Quantizer {
* A debugging method which prints the tree out.
*/
public void list(PrintStream s, int level) {
+ String indentStr = "";
for (int i = 0; i < level; i++)
- System.out.print(' ');
+ indentStr += " ";
if (count == 0)
- System.out.println(index+": count="+count);
+ LOGGER.debug(indentStr + index + ": count=" + count);
else
- System.out.println(index+": count="+count+" red="+(totalRed/count)+" green="+(totalGreen/count)+" blue="+(totalBlue/count));
+ LOGGER.debug(indentStr + index + ": count=" + count + " red=" + (totalRed/count) + " green=" + (totalGreen / count) + " blue=" + (totalBlue / count));
for (int i = 0; i < 8; i++)
if (leaf[i] != null)
leaf[i].list(s, level+2);
@@ -133,7 +138,7 @@ public class OctTreeQuantizer implements Quantizer {
else
node = child;
}
- System.out.println("getIndexForColor failed");
+ LOGGER.debug("getIndexForColor failed");
return 0;
}
@@ -144,7 +149,7 @@ public class OctTreeQuantizer implements Quantizer {
OctTreeNode node = root;
-// System.out.println("insertColor="+Integer.toHexString(rgb));
+// LOGGER.debug("insertColor="+Integer.toHexString(rgb));
for (int level = 0; level <= MAX_LEVEL; level++) {
OctTreeNode child;
int bit = 0x80 >> level;
@@ -190,7 +195,7 @@ public class OctTreeQuantizer implements Quantizer {
} else
node = child;
}
- System.out.println("insertColor failed");
+ LOGGER.debug("insertColor failed");
}
private void reduceTree(int numColors) {
@@ -204,7 +209,7 @@ public class OctTreeQuantizer implements Quantizer {
OctTreeNode child = node.leaf[i];
if (child != null) {
if (!child.isLeaf)
- System.out.println("not a leaf!");
+ LOGGER.debug("not a leaf!");
node.count += child.count;
node.totalRed += child.totalRed;
node.totalGreen += child.totalGreen;
@@ -225,7 +230,7 @@ public class OctTreeQuantizer implements Quantizer {
}
}
- System.out.println("Unable to reduce the OctTree");
+ LOGGER.debug("Unable to reduce the OctTree");
}
/**
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/HttpServer.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/HttpServer.java
index 24b1f785c..4d57a7c9d 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/HttpServer.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/HttpServer.java
@@ -52,28 +52,36 @@
package org.jivesoftware.smackx.jingle.nat;
-import java.io.*;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.StringTokenizer;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
/**
* A very Simple HTTP Server
*/
public class HttpServer {
- public HttpServer(int port) {
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(HttpServer.class);
+
+ public HttpServer(int port) {
ServerSocket server_socket;
try {
server_socket = new ServerSocket(port);
- System.out.println("httpServer running on port " +
+ LOGGER.debug("httpServer running on port " +
server_socket.getLocalPort());
while (true) {
Socket socket = server_socket.accept();
- System.out.println("New connection accepted " +
+ LOGGER.debug("New connection accepted " +
socket.getInetAddress() +
":" + socket.getPort());
@@ -86,13 +94,13 @@ public class HttpServer {
thread.start();
}
catch (Exception e) {
- System.out.println(e);
+ LOGGER.debug("", e);
}
}
}
catch (IOException e) {
- System.out.println(e);
+ LOGGER.debug("", e);
}
}
@@ -129,7 +137,7 @@ public class HttpServer {
while (true) {
String headerLine = br.readLine();
- System.out.println(headerLine);
+ LOGGER.debug(headerLine);
if (headerLine.equals(CRLF) || headerLine.equals("")) break;
StringTokenizer s = new StringTokenizer(headerLine);
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICECandidate.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICECandidate.java
index d916f58b4..432fe00d5 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICECandidate.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICECandidate.java
@@ -55,6 +55,8 @@ import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
/**
* ICE Transport candidate.
*
@@ -65,7 +67,9 @@ import java.util.List;
*/
public class ICECandidate extends TransportCandidate implements Comparable {
- private String id; // An identification
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(ICECandidate.class);
+
+ private String id; // An identification
private String username;
@@ -273,7 +277,7 @@ public class ICECandidate extends TransportCandidate implements Comparable {
public void testFinished(TestResult testResult, TransportCandidate candidate) {
if (testResult.isReachable() && checkingCandidate.equals(candidate)) {
result.setResult(true);
- System.out.println("RESULT>>>OK:" + candidate.getIp() + ":" + candidate.getPort());
+ LOGGER.debug("Candidate reachable: " + candidate.getIp() + ":" + candidate.getPort() + " from " + getIp() +":" + getPort());
}
}
};
@@ -299,7 +303,7 @@ public class ICECandidate extends TransportCandidate implements Comparable {
for (int i = 0; i < 10 && !result.isReachable(); i++)
try {
- System.err.println("ICE Candidate retry #" + i);
+ LOGGER.error("ICE Candidate retry #" + i);
Thread.sleep(400);
}
catch (InterruptedException e) {
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICEResolver.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICEResolver.java
index a08fcbca6..2624e7173 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICEResolver.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/ICEResolver.java
@@ -20,20 +20,24 @@
package org.jivesoftware.smackx.jingle.nat;
-import de.javawi.jstun.test.demo.ice.Candidate;
-import de.javawi.jstun.test.demo.ice.ICENegociator;
-import de.javawi.jstun.util.UtilityException;
-import org.jivesoftware.smack.XMPPConnection;
-import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smackx.jingle.JingleSession;
-
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Random;
+import org.jivesoftware.smack.XMPPConnection;
+import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
+import de.javawi.jstun.test.demo.ice.Candidate;
+import de.javawi.jstun.test.demo.ice.ICENegociator;
+import de.javawi.jstun.util.UtilityException;
+
/**
* ICE Resolver for Jingle transport method that results in sending data between two entities using the Interactive Connectivity Establishment (ICE) methodology. (XEP-0176)
* The goal of this resolver is to make possible to establish and manage out-of-band connections between two XMPP entities, even if they are behind Network Address Translators (NATs) or firewalls.
@@ -43,12 +47,15 @@ import java.util.Random;
*/
public class ICEResolver extends TransportResolver {
- XMPPConnection connection;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(ICEResolver.class);
+
+ XMPPConnection connection;
Random random = new Random();
long sid;
- String server = "stun.xten.net";
- int port = 3478;
- ICENegociator iceNegociator = null;
+ String server;
+ int port;
+ static Map negociatorsMap = new HashMap();
+ //ICENegociator iceNegociator = null;
public ICEResolver(XMPPConnection connection, String server, int port) {
super();
@@ -60,13 +67,21 @@ public class ICEResolver extends TransportResolver {
public void initialize() throws XMPPException {
if (!isResolving() && !isResolved()) {
- System.out.println("Initialized");
+ LOGGER.debug("Initialized");
- iceNegociator = new ICENegociator((short) 1, server, port);
- // gather candidates
- iceNegociator.gatherCandidateAddresses();
- // priorize candidates
- iceNegociator.prioritizeCandidates();
+ // Negotiation with a STUN server for a set of interfaces is quite slow, but the results
+ // never change over then instance of a JVM. To increase connection performance considerably
+ // we now cache established/initialized negotiators for each STUN server, so that subsequent uses
+ // of the STUN server are much, much faster.
+ if (negociatorsMap.get(server) == null) {
+ ICENegociator iceNegociator = new ICENegociator(server, port, (short) 1);
+ negociatorsMap.put(server, iceNegociator);
+
+ // gather candidates
+ iceNegociator.gatherCandidateAddresses();
+ // priorize candidates
+ iceNegociator.prioritizeCandidates();
+ }
}
this.setInitialized();
@@ -91,6 +106,8 @@ public class ICEResolver extends TransportResolver {
this.clear();
+ // Create a transport candidate for each ICE negotiator candidate we have.
+ ICENegociator iceNegociator = negociatorsMap.get(server);
for (Candidate candidate : iceNegociator.getSortedCandidates())
try {
Candidate.CandidateType type = candidate.getCandidateType();
@@ -104,7 +121,26 @@ public class ICEResolver extends TransportResolver {
else
iceType = ICECandidate.Type.host;
- TransportCandidate transportCandidate = new ICECandidate(candidate.getAddress().getInetAddress().getHostAddress(), 1, candidate.getNetwork(), String.valueOf(Math.abs(random.nextLong())), candidate.getPort(), "1", candidate.getPriority(), iceType);
+ // JBW/GW - 17JUL08: Figure out the zero-based NIC number for this candidate.
+ short nicNum = 0;
+ try {
+ Enumeration nics = NetworkInterface.getNetworkInterfaces();
+ short i = 0;
+ NetworkInterface nic = NetworkInterface.getByInetAddress(candidate.getAddress().getInetAddress());
+ while(nics.hasMoreElements()) {
+ NetworkInterface checkNIC = nics.nextElement();
+ if (checkNIC.equals(nic)) {
+ nicNum = i;
+ break;
+ }
+ i++;
+ }
+ } catch (SocketException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
+ TransportCandidate transportCandidate = new ICECandidate(candidate.getAddress().getInetAddress().getHostAddress(), 1, nicNum, String.valueOf(Math.abs(random.nextLong())), candidate.getPort(), "1", candidate.getPriority(), iceType);
transportCandidate.setLocalIp(candidate.getBase().getAddress().getInetAddress().getHostAddress());
transportCandidate.setPort(getFreePort());
try {
@@ -115,7 +151,7 @@ public class ICEResolver extends TransportResolver {
}
this.addCandidate(transportCandidate);
- System.out.println("C: " + candidate.getAddress().getInetAddress() + "|" + candidate.getBase().getAddress().getInetAddress() + " p:" + candidate.getPriority());
+ LOGGER.debug("Candidate addr: " + candidate.getAddress().getInetAddress() + "|" + candidate.getBase().getAddress().getInetAddress() + " Priority:" + candidate.getPriority());
}
catch (UtilityException e) {
@@ -128,16 +164,19 @@ public class ICEResolver extends TransportResolver {
// Get a Relay Candidate from XMPP Server
if (RTPBridge.serviceAvailable(connection)) {
- try {
+// try {
String localIp;
int network;
-
- if (iceNegociator.getPublicCandidate() != null) {
- localIp = iceNegociator.getPublicCandidate().getBase().getAddress().getInetAddress().getHostAddress();
- network = iceNegociator.getPublicCandidate().getNetwork();
- }
- else {
+
+
+ // JBW/GW - 17JUL08: ICENegotiator.getPublicCandidate() always returned null in JSTUN 1.7.0, and now the API doesn't exist in JSTUN 1.7.1
+// if (iceNegociator.getPublicCandidate() != null) {
+// localIp = iceNegociator.getPublicCandidate().getBase().getAddress().getInetAddress().getHostAddress();
+// network = iceNegociator.getPublicCandidate().getNetwork();
+// }
+// else {
+ {
localIp = BridgedResolver.getLocalHost();
network = 0;
}
@@ -168,17 +207,19 @@ public class ICEResolver extends TransportResolver {
addCandidate(localCandidate);
- }
- catch (UtilityException e) {
- e.printStackTrace();
- }
- catch (UnknownHostException e) {
- e.printStackTrace();
- }
+// }
+// catch (UtilityException e) {
+// e.printStackTrace();
+// }
+// catch (UnknownHostException e) {
+// e.printStackTrace();
+// }
// Get Public Candidate From XMPP Server
- if (iceNegociator.getPublicCandidate() == null) {
+ // JBW/GW - 17JUL08 - ICENegotiator.getPublicCandidate() always returned null in JSTUN 1.7.0, and now it doesn't exist in JSTUN 1.7.1
+ // if (iceNegociator.getPublicCandidate() == null) {
+ if (true) {
String publicIp = RTPBridge.getPublicIP(connection);
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/RTPBridge.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/RTPBridge.java
index 144a54551..8edd3abf7 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/RTPBridge.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/RTPBridge.java
@@ -20,6 +20,12 @@
package org.jivesoftware.smackx.jingle.nat;
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
+import java.util.Enumeration;
+import java.util.Iterator;
+
import org.jivesoftware.smack.PacketCollector;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
@@ -29,15 +35,10 @@ import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
-import org.jivesoftware.smackx.packet.DiscoverItems;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+import org.jivesoftware.smackx.packet.DiscoverInfo;
import org.xmlpull.v1.XmlPullParser;
-import java.net.InetAddress;
-import java.net.NetworkInterface;
-import java.net.SocketException;
-import java.util.Enumeration;
-import java.util.Iterator;
-
/**
* RTPBridge IQ Packet used to request and retrieve a RTPBridge Candidates that can be used for a Jingle Media Transmission between two parties that are behind NAT.
* This Jingle Bridge has all the needed information to establish a full UDP Channel (Send and Receive) between two parties.
@@ -51,7 +52,9 @@ import java.util.Iterator;
*/
public class RTPBridge extends IQ {
- private String sid;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(RTPBridge.class);
+
+ private String sid;
private String pass;
private String ip;
private String name;
@@ -424,20 +427,29 @@ public class RTPBridge extends IQ {
return false;
}
- System.out.println("Service listing");
+ LOGGER.debug("Service listing");
ServiceDiscoveryManager disco = ServiceDiscoveryManager
.getInstanceFor(xmppConnection);
try {
- DiscoverItems items = disco.discoverItems(xmppConnection.getServiceName());
- Iterator iter = items.getItems();
+// DiscoverItems items = disco.discoverItems(xmppConnection.getServiceName());
+// Iterator iter = items.getItems();
+// while (iter.hasNext()) {
+// DiscoverItems.Item item = (DiscoverItems.Item) iter.next();
+// if (item.getEntityID().startsWith("rtpbridge.")) {
+// return true;
+// }
+// }
+
+ DiscoverInfo discoInfo = disco.discoverInfo(xmppConnection.getServiceName());
+ Iterator iter = discoInfo.getIdentities();
while (iter.hasNext()) {
- DiscoverItems.Item item = (DiscoverItems.Item) iter.next();
- if (item.getEntityID().startsWith("rtpbridge.")) {
- return true;
- }
+ DiscoverInfo.Identity identity = (DiscoverInfo.Identity) iter.next();
+ if ((identity.getName() != null) && (identity.getName().startsWith("rtpbridge"))) {
+ return true;
+ }
}
- }
+ }
catch (XMPPException e) {
e.printStackTrace();
}
@@ -467,7 +479,7 @@ public class RTPBridge extends IQ {
rtpPacket.setHostA(localCandidate.getIp());
rtpPacket.setHostB(proxyCandidate.getIp());
- // System.out.println("Relayed to: " + candidate.getIp() + ":" + candidate.getPort());
+ // LOGGER.debug("Relayed to: " + candidate.getIp() + ":" + candidate.getPort());
PacketCollector collector = xmppConnection
.createPacketCollector(new PacketIDFilter(rtpPacket.getPacketID()));
@@ -499,7 +511,7 @@ public class RTPBridge extends IQ {
rtpPacket.setTo(RTPBridge.NAME + "." + xmppConnection.getServiceName());
rtpPacket.setType(Type.SET);
- // System.out.println("Relayed to: " + candidate.getIp() + ":" + candidate.getPort());
+ // LOGGER.debug("Relayed to: " + candidate.getIp() + ":" + candidate.getPort());
PacketCollector collector = xmppConnection
.createPacketCollector(new PacketIDFilter(rtpPacket.getPacketID()));
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 caab19c1a..e0d24a70c 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUN.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUN.java
@@ -19,6 +19,10 @@
*/
package org.jivesoftware.smackx.jingle.nat;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
import org.jivesoftware.smack.PacketCollector;
import org.jivesoftware.smack.SmackConfiguration;
import org.jivesoftware.smack.XMPPConnection;
@@ -28,14 +32,11 @@ import org.jivesoftware.smack.packet.IQ;
import org.jivesoftware.smack.provider.IQProvider;
import org.jivesoftware.smack.provider.ProviderManager;
import org.jivesoftware.smackx.ServiceDiscoveryManager;
+import org.jivesoftware.smackx.jingle.SmackLogger;
import org.jivesoftware.smackx.packet.DiscoverInfo;
import org.jivesoftware.smackx.packet.DiscoverItems;
import org.xmlpull.v1.XmlPullParser;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-
/**
* STUN IQ Packet used to request and retrieve a STUN server and port to make p2p connections easier. STUN is usually used by Jingle Media Transmission between two parties that are behind NAT.
*
@@ -47,7 +48,9 @@ import java.util.List;
*/
public class STUN extends IQ {
- private List servers = new ArrayList();
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(STUN.class);
+
+ private List servers = new ArrayList();
private String publicIp = null;
@@ -220,7 +223,7 @@ public class STUN extends IQ {
return false;
}
- System.out.println("Service listing");
+ LOGGER.debug("Service listing");
ServiceDiscoveryManager disco = ServiceDiscoveryManager
.getInstanceFor(xmppConnection);
@@ -240,7 +243,7 @@ public class STUN extends IQ {
return true;
}
- System.out.println(item.getName()+"-"+info.getType());
+ LOGGER.debug(item.getName()+"-"+info.getType());
}
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUNResolver.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUNResolver.java
index f4e4d90a2..a3d2c24b7 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUNResolver.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/STUNResolver.java
@@ -19,15 +19,6 @@
*/
package org.jivesoftware.smackx.jingle.nat;
-import de.javawi.jstun.test.BindingLifetimeTest;
-import de.javawi.jstun.test.DiscoveryInfo;
-import de.javawi.jstun.test.DiscoveryTest;
-import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smackx.jingle.JingleSession;
-import org.xmlpull.mxp1.MXParser;
-import org.xmlpull.v1.XmlPullParser;
-import org.xmlpull.v1.XmlPullParserException;
-
import java.io.IOException;
import java.net.InetAddress;
import java.net.NetworkInterface;
@@ -36,6 +27,17 @@ import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
+import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+import org.xmlpull.mxp1.MXParser;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import de.javawi.jstun.test.BindingLifetimeTest;
+import de.javawi.jstun.test.DiscoveryInfo;
+import de.javawi.jstun.test.DiscoveryTest;
+
/**
* Transport resolver using the JSTUN library, to discover public IP and use it as a candidate.
*
@@ -45,7 +47,9 @@ import java.util.Enumeration;
*/
public class STUNResolver extends TransportResolver {
- // The filename where the STUN servers are stored.
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(STUNResolver.class);
+
+ // The filename where the STUN servers are stored.
public final static String STUNSERVERS_FILENAME = "META-INF/stun-config.xml";
// Fallback values when we don't have any STUN server to use...
@@ -282,7 +286,7 @@ public class STUNResolver extends TransportResolver {
resolvedPublicIP, getFreePort());
candidate.setLocalIp(resolvedLocalIP);
- System.out.println("RESOLVING : " + resolvedPublicIP + ":" + candidate.getPort());
+ LOGGER.debug("RESOLVING : " + resolvedPublicIP + ":" + candidate.getPort());
addCandidate(candidate);
@@ -296,7 +300,7 @@ public class STUNResolver extends TransportResolver {
* @throws XMPPException
*/
public void initialize() throws XMPPException {
- System.out.println("Initialized");
+ LOGGER.debug("Initialized");
if (!isResolving()&&!isResolved()) {
// Get the best STUN server available
if (currentServer.isNull()) {
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeClient.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeClient.java
index 0ede283c2..85576f423 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeClient.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeClient.java
@@ -59,6 +59,8 @@ import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
/**
* A Simple and Experimental Bridge.
* It Creates a TCP Socket That Connects to another TCP Socket Listener and forwards every packets received to an UDP Listener.
@@ -66,7 +68,9 @@ import java.net.Socket;
*/
public class TcpUdpBridgeClient {
- private String remoteTcpHost = null;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(TcpUdpBridgeClient.class);
+
+ private String remoteTcpHost = null;
private String remoteUdpHost = null;
private int remoteTcpPort = -1;
private int remoteUdpPort = -1;
@@ -85,7 +89,7 @@ public class TcpUdpBridgeClient {
localTcpSocket = new Socket(remoteTcpHost, remoteTcpPort);
localUdpSocket = new DatagramSocket(0);
localUdpPort = localUdpSocket.getLocalPort();
- System.out.println("UDP: " + localUdpSocket.getLocalPort());
+ LOGGER.debug("UDP: " + localUdpSocket.getLocalPort());
}
catch (IOException e) {
e.printStackTrace();
@@ -110,11 +114,11 @@ public class TcpUdpBridgeClient {
localUdpSocket.receive(p);
if (p.getLength() == 0) continue;
- System.out.println("UDP Client Received and Sending to TCP Server:"+new String(p.getData(),0,p.getLength(),"UTF-8"));
+ LOGGER.debug("UDP Client Received and Sending to TCP Server:"+new String(p.getData(),0,p.getLength(),"UTF-8"));
out.write(p.getData(), 0, p.getLength());
out.flush();
- System.out.println("Client Flush");
+ LOGGER.debug("Client Flush");
}
@@ -141,7 +145,7 @@ public class TcpUdpBridgeClient {
int s = in.read(b);
//if (s == -1) continue;
- System.out.println("TCP Client:" +new String(b,0,s,"UTF-8"));
+ LOGGER.debug("TCP Client:" +new String(b,0,s,"UTF-8"));
DatagramPacket udpPacket = new DatagramPacket(b, s);
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeServer.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeServer.java
index 3f32b6fce..651208be8 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeServer.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TcpUdpBridgeServer.java
@@ -1,9 +1,15 @@
package org.jivesoftware.smackx.jingle.nat;
-import java.net.*;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+import org.jivesoftware.smackx.jingle.SmackLogger;
/**
* A Simple and Experimental Bridge.
@@ -12,7 +18,9 @@ import java.io.OutputStream;
*/
public class TcpUdpBridgeServer {
- private String remoteTcpHost = null;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(TcpUdpBridgeServer.class);
+
+ private String remoteTcpHost = null;
private String remoteUdpHost = null;
private int remoteTcpPort = -1;
private int remoteUdpPort = -1;
@@ -32,7 +40,7 @@ public class TcpUdpBridgeServer {
serverTcpSocket = new ServerSocket(remoteTcpPort);
localUdpSocket = new DatagramSocket(0);
localUdpPort = localUdpSocket.getLocalPort();
- System.out.println("UDP: " + localUdpSocket.getLocalPort());
+ LOGGER.debug("UDP: " + localUdpSocket.getLocalPort());
}
catch (IOException e) {
e.printStackTrace();
@@ -56,11 +64,11 @@ public class TcpUdpBridgeServer {
localUdpSocket.receive(p);
if (p.getLength() == 0) continue;
- System.out.println("UDP Server Received and Sending to TCP Client:" + new String(p.getData(), 0, p.getLength(), "UTF-8"));
+ LOGGER.debug("UDP Server Received and Sending to TCP Client:" + new String(p.getData(), 0, p.getLength(), "UTF-8"));
out.write(p.getData(), 0, p.getLength());
out.flush();
- System.out.println("Server Flush");
+ LOGGER.debug("Server Flush");
}
}
@@ -87,7 +95,7 @@ public class TcpUdpBridgeServer {
int s = in.read(b);
//if (s == -1) continue;
- System.out.println("TCP Server:" + new String(b, 0, s, "UTF-8"));
+ LOGGER.debug("TCP Server:" + new String(b, 0, s, "UTF-8"));
DatagramPacket udpPacket = new DatagramPacket(b, s);
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java
index 352da084e..ffefed860 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java
@@ -52,16 +52,21 @@
package org.jivesoftware.smackx.jingle.nat;
-import org.jivesoftware.smack.XMPPConnection;
-import org.jivesoftware.smackx.jingle.JingleSession;
-
import java.io.IOException;
import java.io.UnsupportedEncodingException;
-import java.net.*;
+import java.net.DatagramPacket;
+import java.net.DatagramSocket;
+import java.net.InetAddress;
+import java.net.SocketException;
+import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.List;
+import org.jivesoftware.smack.XMPPConnection;
+import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
/**
* Transport candidate.
*
@@ -73,7 +78,9 @@ import java.util.List;
*/
public abstract class TransportCandidate {
- private String name;
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(TransportCandidate.class);
+
+ private String name;
private String ip; // IP address
@@ -680,14 +687,14 @@ public abstract class TransportCandidate {
public void run() {
try {
- System.out.println("Listening for ECHO: " + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort());
+ LOGGER.debug("Listening for ECHO: " + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort());
while (true) {
DatagramPacket packet = new DatagramPacket(new byte[150], 150);
socket.receive(packet);
- //System.out.println("ECHO Packet Received in: " + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort() + " From: " + packet.getAddress().getHostAddress() + ":" + packet.getPort());
+ //LOGGER.debug("ECHO Packet Received in: " + socket.getLocalAddress().getHostAddress() + ":" + socket.getLocalPort() + " From: " + packet.getAddress().getHostAddress() + ":" + packet.getPort());
boolean accept = false;
@@ -766,7 +773,7 @@ public abstract class TransportCandidate {
resultListener.testFinished(testResult, candidate);
}
- public void testASync(final TransportCandidate candidate, final String password) {
+ public void testASync(final TransportCandidate transportCandidate, final String password) {
Thread thread = new Thread(new Runnable() {
@@ -776,19 +783,21 @@ public abstract class TransportCandidate {
public boolean datagramReceived(DatagramPacket datagramPacket) {
try {
- System.out.println("Content Received: " + new String(datagramPacket.getData(), "UTF-8"));
+ LOGGER.debug("ECHO Received to: " + candidate.getIp() + ":" + candidate.getPort() + " data: " + new String(datagramPacket.getData(), "UTF-8"));
String str[] = new String(datagramPacket.getData(), "UTF-8").split(";");
String pass = str[0];
String addr[] = str[1].split(":");
String ip = addr[0];
String pt = addr[1];
- if (pass.equals(password) && candidate.getIp().indexOf(ip) != -1 && candidate.getPort() == Integer.parseInt(pt)) {
- System.out.println("Result OK:" + candidate.getIp() + ":" + candidate.getPort());
+ if (pass.equals(password)
+ && transportCandidate.getIp().indexOf(ip) != -1
+ && transportCandidate.getPort() == Integer.parseInt(pt)) {
+ LOGGER.debug("ECHO OK: " + candidate.getIp() + ":" + candidate.getPort() + " <-> " + transportCandidate.getIp() + ":" + transportCandidate.getPort());
TestResult testResult = new TestResult();
testResult.setResult(true);
ended = true;
- fireTestResult(testResult, candidate);
+ fireTestResult(testResult, transportCandidate);
return true;
}
@@ -797,7 +806,7 @@ public abstract class TransportCandidate {
e.printStackTrace();
}
- System.out.println("Result Wrong Data:" + datagramPacket.getAddress().getHostAddress() + ":" + datagramPacket.getPort());
+ LOGGER.debug("ECHO Wrong Data: " + datagramPacket.getAddress().getHostAddress() + ":" + datagramPacket.getPort());
return false;
}
};
@@ -815,12 +824,12 @@ public abstract class TransportCandidate {
DatagramPacket packet = new DatagramPacket(content, content.length);
try {
- packet.setAddress(InetAddress.getByName(candidate.getIp()));
+ packet.setAddress(InetAddress.getByName(transportCandidate.getIp()));
}
catch (UnknownHostException e) {
e.printStackTrace();
}
- packet.setPort(candidate.getPort());
+ packet.setPort(transportCandidate.getPort());
long delay = 200;
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportNegotiator.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportNegotiator.java
index 03cf90b2c..25c207d43 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportNegotiator.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportNegotiator.java
@@ -20,9 +20,20 @@
package org.jivesoftware.smackx.jingle.nat;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
import org.jivesoftware.smack.XMPPException;
import org.jivesoftware.smack.packet.IQ;
-import org.jivesoftware.smackx.jingle.*;
+import org.jivesoftware.smackx.jingle.ContentNegotiator;
+import org.jivesoftware.smackx.jingle.JingleActionEnum;
+import org.jivesoftware.smackx.jingle.JingleException;
+import org.jivesoftware.smackx.jingle.JingleNegotiator;
+import org.jivesoftware.smackx.jingle.JingleNegotiatorState;
+import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
import org.jivesoftware.smackx.jingle.listeners.JingleListener;
import org.jivesoftware.smackx.jingle.listeners.JingleTransportListener;
import org.jivesoftware.smackx.packet.Jingle;
@@ -30,11 +41,6 @@ import org.jivesoftware.smackx.packet.JingleContent;
import org.jivesoftware.smackx.packet.JingleTransport;
import org.jivesoftware.smackx.packet.JingleTransport.JingleTransportCandidate;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
-
/**
* Transport negotiator.
*
@@ -46,7 +52,9 @@ import java.util.List;
*/
public abstract class TransportNegotiator extends JingleNegotiator {
- // The time we give to the candidates check before we accept or decline the
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(TransportNegotiator.class);
+
+ // The time we give to the candidates check before we accept or decline the
// transport (in milliseconds)
public final static int CANDIDATES_ACCEPT_PERIOD = 4000;
@@ -134,7 +142,7 @@ public abstract class TransportNegotiator extends JingleNegotiator {
return;
}
}
- //System.out.println("BEST: " + bestLocalCandidate.getIp());
+ //LOGGER.debug("BEST: " + bestLocalCandidate.getIp());
throw new XMPPException("Local transport candidate has not be offered.");
}
@@ -434,7 +442,7 @@ public abstract class TransportNegotiator extends JingleNegotiator {
// Add the candidate to the list
if (remoteCandidate != null) {
synchronized (validRemoteCandidates) {
- System.out.println("ADDED Valid Cand: " + remoteCandidate.getIp() + ":" + remoteCandidate.getPort());
+ LOGGER.debug("Added valid candidate: " + remoteCandidate.getIp() + ":" + remoteCandidate.getPort());
validRemoteCandidates.add(remoteCandidate);
}
}
@@ -562,7 +570,7 @@ public abstract class TransportNegotiator extends JingleNegotiator {
if (!(resolver.isResolving() || resolver.isResolved())) {
// Resolve our IP and port
- System.out.println("RESOLVER CALLED");
+ LOGGER.debug("RESOLVER CALLED");
resolver.resolve(session);
}
}
@@ -727,14 +735,14 @@ public abstract class TransportNegotiator extends JingleNegotiator {
if (!accepted.isEmpty()) {
for (TransportCandidate cand : accepted) {
- System.out.println("Cand: " + cand.getIp());
+ LOGGER.debug("Remote acccepted candidate addr: " + cand.getIp());
}
TransportCandidate cand = (TransportCandidate) accepted.get(0);
setAcceptedLocalCandidate(cand);
if (isEstablished()) {
- System.out.println("SET ACTIVE");
+ LOGGER.debug(cand.getIp() + " is set active");
//setNegotiatorState(JingleNegotiatorState.SUCCEEDED);
}
}
@@ -748,7 +756,7 @@ public abstract class TransportNegotiator extends JingleNegotiator {
private IQ receiveSessionAcceptAction(Jingle jingle) {
IQ response = null;
- System.out.println("Transport stabilished");
+ LOGGER.debug("Transport stabilished");
//triggerTransportEstablished(getAcceptedLocalCandidate(), getBestRemoteCandidate());
//setNegotiatorState(JingleNegotiatorState.SUCCEEDED);
@@ -767,7 +775,7 @@ public abstract class TransportNegotiator extends JingleNegotiator {
for (JingleListener li : listeners) {
if (li instanceof JingleTransportListener) {
JingleTransportListener mli = (JingleTransportListener) li;
- System.out.println("triggerTransportEstablished " + local.getLocalIp() + ":" + local.getPort() + "|"
+ LOGGER.debug("triggerTransportEstablished " + local.getLocalIp() + ":" + local.getPort() + " <-> "
+ remote.getIp() + ":" + remote.getPort());
mli.transportEstablished(local, remote);
}
@@ -827,10 +835,10 @@ public abstract class TransportNegotiator extends JingleNegotiator {
// Hopefully, we only have one validRemoteCandidate
ArrayList cands = getValidRemoteCandidatesList();
if (!cands.isEmpty()) {
- System.out.println("RAW CAND");
+ LOGGER.debug("RAW CAND");
return (TransportCandidate) cands.get(0);
} else {
- System.out.println("No Remote Candidate");
+ LOGGER.debug("No Remote Candidate");
return null;
}
}
@@ -893,7 +901,7 @@ public abstract class TransportNegotiator extends JingleNegotiator {
}
if (result != null && result.getType().equals("relay"))
- System.out.println("Relay Type");
+ LOGGER.debug("Relay Type");
return result;
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportResolver.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportResolver.java
index 6937bcb6f..747675a9b 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportResolver.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportResolver.java
@@ -52,9 +52,6 @@
package org.jivesoftware.smackx.jingle.nat;
-import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smackx.jingle.JingleSession;
-
import java.io.IOException;
import java.net.ServerSocket;
import java.util.ArrayList;
@@ -62,6 +59,10 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import org.jivesoftware.smack.XMPPException;
+import org.jivesoftware.smackx.jingle.JingleSession;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+
/**
* A TransportResolver is used for obtaining a list of valid transport
* candidates. A transport candidate is composed by an IP address and a port number.
@@ -72,7 +73,9 @@ import java.util.List;
*/
public abstract class TransportResolver {
- public enum Type {
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(TransportResolver.class);
+
+ public enum Type {
rawupd, ice
}
@@ -247,7 +250,7 @@ public abstract class TransportResolver {
TransportResolverListener trl = (TransportResolverListener) iter.next();
if (trl instanceof TransportResolverListener.Resolver) {
TransportResolverListener.Resolver li = (TransportResolverListener.Resolver) trl;
- System.out.println("triggerCandidateAdded : " + cand.getLocalIp());
+ LOGGER.debug("triggerCandidateAdded : " + cand.getLocalIp());
li.candidateAdded(cand);
}
}
@@ -331,7 +334,7 @@ public abstract class TransportResolver {
Collections.sort(cands);
// Return the last candidate
result = (TransportCandidate) cands.get(cands.size() - 1);
- System.out.println("Result: " + result.getIp());
+ LOGGER.debug("Result: " + result.getIp());
}
return result;
@@ -383,12 +386,12 @@ public abstract class TransportResolver {
public void initializeAndWait() throws XMPPException {
this.initialize();
try {
- System.out.print("Initializing...");
+ LOGGER.debug("Initializing transport resolver...");
while (!this.isInitialized()) {
- System.out.print(".");
+ LOGGER.debug("Resolver init still pending");
Thread.sleep(1000);
}
- System.out.print("Resolved\n");
+ LOGGER.debug("Transport resolved\n");
}
catch (Exception e) {
e.printStackTrace();
diff --git a/jingle/extension/source/org/jivesoftware/smackx/packet/Jingle.java b/jingle/extension/source/org/jivesoftware/smackx/packet/Jingle.java
index d731847ca..b20fcaa8b 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/packet/Jingle.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/packet/Jingle.java
@@ -44,7 +44,7 @@ public class Jingle extends IQ {
// static
- public static final String NAMESPACE = "http://www.xmpp.org/extensions/xep-0166.html#ns";
+ public static final String NAMESPACE = "urn:xmpp:tmp:jingle";
public static final String NODENAME = "jingle";
@@ -190,8 +190,6 @@ public class Jingle extends IQ {
/**
* Returns the XML namespace of the extension sub-packet root element.
- * According the specification the namespace is always
- * "http://www.xmpp.org/extensions/xep-0166.html#ns"
*
* @return the XML namespace of the packet extension.
*/
diff --git a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleContentDescription.java b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleContentDescription.java
index 86020117c..5c58f9cb5 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleContentDescription.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleContentDescription.java
@@ -172,7 +172,7 @@ public abstract class JingleContentDescription implements PacketExtension {
*/
public static class Audio extends JingleContentDescription {
- public static final String NAMESPACE = "http://jabber.org/protocol/jingle/description/audio";
+ public static final String NAMESPACE = "urn:xmpp:tmp:jingle:apps:rtp";
public Audio() {
super();
diff --git a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleContentInfo.java b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleContentInfo.java
index 60ca87660..af3241d38 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleContentInfo.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleContentInfo.java
@@ -96,7 +96,7 @@ public class JingleContentInfo implements PacketExtension {
*/
public static class Audio extends JingleContentInfo {
- public static final String NAMESPACE = "http://www.xmpp.org/extensions/xep-0167.html#ns-info";
+ public static final String NAMESPACE = "urn:xmpp:tmp:jingle:apps:rtp";
public Audio(final ContentInfo mi) {
super(mi);
diff --git a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleDescription.java b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleDescription.java
index 5c82d9480..212cd503d 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleDescription.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleDescription.java
@@ -19,14 +19,15 @@
*/
package org.jivesoftware.smackx.packet;
-import org.jivesoftware.smack.packet.PacketExtension;
-import org.jivesoftware.smackx.jingle.media.PayloadType;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
+import org.jivesoftware.smack.packet.PacketExtension;
+import org.jivesoftware.smackx.jingle.SmackLogger;
+import org.jivesoftware.smackx.jingle.media.PayloadType;
+
/**
* Jingle content description.
*
@@ -34,7 +35,9 @@ import java.util.List;
*/
public abstract class JingleDescription implements PacketExtension {
- // static
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(JingleDescription.class);
+
+ // static
public static final String NODENAME = "description";
@@ -73,7 +76,7 @@ public abstract class JingleDescription implements PacketExtension {
public void addPayloadType(final PayloadType pt) {
synchronized (payloads) {
if (pt == null) {
- System.err.println("Null payload type");
+ LOGGER.error("Null payload type");
} else {
payloads.add(pt);
}
@@ -176,7 +179,7 @@ public abstract class JingleDescription implements PacketExtension {
*/
public static class Audio extends JingleDescription {
- public static final String NAMESPACE = "http://www.xmpp.org/extensions/xep-0167.html#ns";
+ public static final String NAMESPACE = "urn:xmpp:tmp:jingle:apps:rtp";
public Audio() {
super();
diff --git a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleError.java b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleError.java
index 9067a7ea5..79ab27d59 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleError.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleError.java
@@ -27,7 +27,7 @@ import org.xmlpull.v1.XmlPullParser;
public class JingleError implements PacketExtension {
- public static String NAMESPACE = "http://www.xmpp.org/extensions/xep-0166.html#ns-errors";
+ public static String NAMESPACE = "urn:xmpp:tmp:jingle:errors";
public static final JingleError OUT_OF_ORDER = new JingleError("out-of-order");
diff --git a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleTransport.java b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleTransport.java
index f80d1f83f..38eca2b94 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/packet/JingleTransport.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/packet/JingleTransport.java
@@ -270,7 +270,7 @@ public class JingleTransport implements PacketExtension {
* RTP-ICE profile
*/
public static class Ice extends JingleTransport {
- public static final String NAMESPACE = "http://www.xmpp.org/extensions/xep-0176.html#ns-udp";
+ public static final String NAMESPACE = "urn:xmpp:tmp:jingle:transports:ice-udp";
public Ice() {
super();
diff --git a/jingle/extension/source/org/jivesoftware/smackx/provider/JingleTransportProvider.java b/jingle/extension/source/org/jivesoftware/smackx/provider/JingleTransportProvider.java
index 52029eda9..ea1048f7f 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/provider/JingleTransportProvider.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/provider/JingleTransportProvider.java
@@ -234,7 +234,7 @@ public abstract class JingleTransportProvider implements PacketExtensionProvider
String name = parser.getAttributeValue("", "name");
String port = parser.getAttributeValue("", "port");
- //System.out.println();
+ //LOGGER.debug();
if (generation != null) {
try {
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/STUNResolverTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/STUNResolverTest.java
index 72f95b03c..65e7c7331 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/STUNResolverTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/nat/STUNResolverTest.java
@@ -14,8 +14,11 @@ import org.jivesoftware.smackx.jingle.media.JingleMediaManager;
import org.jivesoftware.smackx.jingle.media.PayloadType;
import org.jivesoftware.smackx.jingle.mediaimpl.test.TestMediaManager;
+import java.net.NetworkInterface;
+import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
+import java.util.Enumeration;
import java.util.List;
/**
@@ -129,10 +132,28 @@ public class STUNResolverTest extends SmackTestCase {
cc.prioritizeCandidates();
// get SortedCandidates
- for (Candidate candidate : cc.getSortedCandidates())
+ for (Candidate candidate : cc.getSortedCandidates()) {
+ short nicNum = 0;
+ try {
+ Enumeration nics = NetworkInterface.getNetworkInterfaces();
+ short tempNic = 0;
+ NetworkInterface nic = NetworkInterface.getByInetAddress(candidate.getAddress().getInetAddress());
+ while(nics.hasMoreElements()) {
+ NetworkInterface checkNIC = nics.nextElement();
+ if (checkNIC.equals(nic)) {
+ nicNum = tempNic;
+ break;
+ }
+ i++;
+ }
+ } catch (SocketException e1) {
+ // TODO Auto-generated catch block
+ e1.printStackTrace();
+ }
+
try {
TransportCandidate transportCandidate = new ICECandidate(candidate.getAddress().getInetAddress()
- .getHostAddress(), 1, candidate.getNetwork(), "1", candidate.getPort(), "1", candidate.getPriority(),
+ .getHostAddress(), 1, nicNum, "1", candidate.getPort(), "1", candidate.getPriority(),
ICECandidate.Type.prflx);
transportCandidate.setLocalIp(candidate.getBase().getAddress().getInetAddress().getHostAddress());
System.out.println("C: " + candidate.getAddress().getInetAddress() + "|"
@@ -142,6 +163,7 @@ public class STUNResolverTest extends SmackTestCase {
} catch (UnknownHostException e) {
e.printStackTrace();
}
+ }
Candidate candidate = cc.getSortedCandidates().get(0);
String temp = "C: " + candidate.getAddress().getInetAddress() + "|" + candidate.getBase().getAddress().getInetAddress()
+ " p:" + candidate.getPriority();
diff --git a/jingle/extension/test/org/jivesoftware/smackx/provider/JingleProviderTest.java b/jingle/extension/test/org/jivesoftware/smackx/provider/JingleProviderTest.java
index a54732410..64a7267dc 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/provider/JingleProviderTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/provider/JingleProviderTest.java
@@ -36,11 +36,11 @@ public class JingleProviderTest extends SmackTestCase {
// Create a dummy packet for testing...
IQfake iqSent = new IQfake (
- " " +
- " " +
+ " " +
"