diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetBasicTelephonyJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetBasicTelephonyJabberImpl.java
index 292769d10..3362b4be0 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetBasicTelephonyJabberImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/OperationSetBasicTelephonyJabberImpl.java
@@ -329,8 +329,6 @@ public void shutdown()
*/
private void subscribeForJinglePackets()
{
- ProviderManager providerManager = ProviderManager.getInstance();
-
protocolProvider.getConnection().addPacketListener(
new JingleListener(), new PacketTypeFilter( JingleIQ.class));
}
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderServiceJabberImpl.java b/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderServiceJabberImpl.java
index e24f33561..b4b521362 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderServiceJabberImpl.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/ProtocolProviderServiceJabberImpl.java
@@ -57,7 +57,7 @@ public class ProtocolProviderServiceJabberImpl
* Jingle's Discovery Info URN for RTP support.
*/
public static final String URN_XMPP_JINGLE_RTP
- = "urn:xmpp:jingle:apps:rtp:1";
+ = RtpDescriptionPacketExtension.NAMESPACE;
/**
* Jingle's Discovery Info URN for RTP support with audio.
@@ -74,14 +74,14 @@ public class ProtocolProviderServiceJabberImpl
/**
* Jingle's Discovery Info URN for ICE_UDP transport support.
*/
- public static final String URN_XMPP_JINGLE_ICE_UDP_0
- = "urn:xmpp:jingle:transports:ice-udp:0";
+ public static final String URN_XMPP_JINGLE_RAW_UDP_0
+ = RawUdpTransportPacketExtension.NAMESPACE;
/**
* Jingle's Discovery Info URN for ICE_UDP transport support.
*/
public static final String URN_XMPP_JINGLE_ICE_UDP_1
- = "urn:xmpp:jingle:transports:ice-udp:1";
+ = IceUdpTransportPacketExtension.NAMESPACE;
/**
* Used to connect to a XMPP server.
@@ -911,7 +911,7 @@ protected void initialize(String screenname,
// Add Jingle features to supported features.
supportedFeatures.add(URN_XMPP_JINGLE);
supportedFeatures.add(URN_XMPP_JINGLE_RTP);
- supportedFeatures.add(URN_XMPP_JINGLE_ICE_UDP_0);
+ supportedFeatures.add(URN_XMPP_JINGLE_RAW_UDP_0);
supportedFeatures.add(URN_XMPP_JINGLE_ICE_UDP_1);
supportedFeatures.add(URN_XMPP_JINGLE_RTP_AUDIO);
supportedFeatures.add(URN_XMPP_JINGLE_RTP_VIDEO);
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/DefaultPacketExtensionProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/DefaultPacketExtensionProvider.java
index bd1013554..be08ca5f4 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/DefaultPacketExtensionProvider.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/DefaultPacketExtensionProvider.java
@@ -83,6 +83,11 @@ public C parseExtension(XmlPullParser parser) throws Exception
elementName = parser.getName();
namespace = parser.getNamespace();
+ if (logger.isLoggable(Level.FINEST))
+ logger.finest("Will parse " + elementName
+ + " ns=" + namespace
+ + " class=" + packetExtension.getClass().getSimpleName());
+
if (eventType == XmlPullParser.START_TAG)
{
PacketExtensionProvider provider
@@ -108,6 +113,9 @@ public C parseExtension(XmlPullParser parser) throws Exception
done = true;
}
}
+
+ if (logger.isLoggable(Level.FINEST))
+ logger.finest("Done parsing " + elementName);
}
return packetExtension;
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/CandidatePacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/CandidatePacketExtension.java
index f8a46fd4d..6ceff44d2 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/CandidatePacketExtension.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/CandidatePacketExtension.java
@@ -361,5 +361,4 @@ public CandidateType getType()
{
return CandidateType.valueOf(getAttributeAsString(TYPE_ATTR_NAME));
}
-
}
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java
index eb70e9f54..9c9f663e8 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/IceUdpTransportPacketExtension.java
@@ -24,6 +24,7 @@ public class IceUdpTransportPacketExtension extends AbstractPacketExtension
*/
public static final String NAMESPACE
= "urn:xmpp:jingle:transports:ice-udp:1";
+
/**
* The name of the "transport" element.
*/
@@ -63,6 +64,21 @@ public IceUdpTransportPacketExtension()
super(NAMESPACE, ELEMENT_NAME);
}
+ /**
+ * Creates a new {@link IceUdpTransportPacketExtension} instance with the
+ * specified namespace and elementName. The purpose of
+ * this method is to allow {@link RawUdpTransportPacketExtension} to
+ * extend this class.
+ *
+ * @param namespace the XML namespace that the instance should belong to.
+ * @param elementName the name of the element that we would be representing.
+ */
+ protected IceUdpTransportPacketExtension(String namespace,
+ String elementName)
+ {
+ super(namespace, elementName);
+ }
+
/**
* Sets the ICE defined password attribute.
*
@@ -111,15 +127,20 @@ public String getUfrag()
@Override
public List extends PacketExtension> getChildExtensions()
{
- if(candidateList.size() > 0)
- return candidateList;
- else if (remoteCandidate != null)
+ synchronized (candidateList)
{
- List list
- = new ArrayList();
- list.add(remoteCandidate);
-
- return list;
+ if(candidateList.size() > 0)
+ {
+ return candidateList;
+ }
+ else if (remoteCandidate != null)
+ {
+ List list
+ = new ArrayList();
+ list.add(remoteCandidate);
+
+ return list;
+ }
}
//there are apparently no child elements.
@@ -135,7 +156,10 @@ else if (remoteCandidate != null)
*/
public void addCandidate(CandidatePacketExtension candidate)
{
- this.candidateList.add(candidate);
+ synchronized(candidateList)
+ {
+ this.candidateList.add(candidate);
+ }
}
/**
@@ -174,4 +198,24 @@ public RemoteCandidatePacketExtension getRemoteCandidate()
return remoteCandidate;
}
+ /**
+ * Tries to determine whether childExtension is a {@link
+ * CandidatePacketExtension}, a {@link RemoteCandidatePacketExtension} or
+ * something else and then adds it as such.
+ *
+ * @param childExtension the extension we'd like to add here.
+ */
+ @Override
+ public void addChildExtension(PacketExtension childExtension)
+ {
+ //first check for RemoteCandidate because they extend Candidate.
+ if(childExtension instanceof RemoteCandidatePacketExtension)
+ setRemoteCandidate((RemoteCandidatePacketExtension) childExtension);
+
+ else if(childExtension instanceof CandidatePacketExtension)
+ addCandidate((CandidatePacketExtension) childExtension);
+ }
+
+
+
}
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQ.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQ.java
index 7522542b8..e15db6ffd 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQ.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQ.java
@@ -7,11 +7,10 @@
package net.java.sip.communicator.impl.protocol.jabber.extensions.jingle;
import java.util.*;
+import java.util.logging.*;
import org.jivesoftware.smack.packet.*;
-import net.java.sip.communicator.util.*;
-
/**
* A straightforward extension of the IQ. A JingleIQ object is created
* by smack via the {@link JingleIQProvider}. It contains all the information
@@ -22,10 +21,11 @@
public class JingleIQ extends IQ
{
/**
- * Logger for this class
+ * The Logger used by the JingleIQ
+ * class and its instances for logging output.
*/
- private static final Logger logger =
- Logger.getLogger(JingleIQ.class);
+ private static final Logger logger = Logger.getLogger(JingleIQ.class
+ .getName());
/**
* The name space that jingle belongs to.
@@ -105,7 +105,27 @@ public class JingleIQ extends IQ
@Override
public String getChildElementXML()
{
- StringBuilder bldr = new StringBuilder();
+ StringBuilder bldr = new StringBuilder("<" + ELEMENT_NAME);
+
+ bldr.append(" xmlns='" + NAMESPACE + "'");
+
+ bldr.append(" " + ACTION_ATTR_NAME + "='" + getAction() + "'");
+
+ if( initiator != null)
+ bldr.append(" " + INITIATOR_ATTR_NAME
+ + "='" + getInitiator() + "'");
+
+ if( responder != null)
+ bldr.append(" " + RESPONDER_ATTR_NAME
+ + "='" + getResponder() + "'");
+
+ bldr.append(" " + SID_ATTR_NAME
+ + "='" + getSID() + "'");
+
+ if (contentList.size() == 0 && reason == null)
+ bldr.append("/>");
+ else
+ bldr.append(">");//it is possible to have empty jingle elements
//content
for(ContentPacketExtension cpe : contentList)
@@ -117,6 +137,8 @@ public String getChildElementXML()
if (reason != null)
bldr.append(reason.toXML());
+ bldr.append("" + ELEMENT_NAME + ">");
+
return bldr.toString();
}
@@ -140,7 +162,7 @@ public void setSid(String sid)
*
* @return this element's session ID.
*/
- public String getSid()
+ public String getSID()
{
return sid;
}
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java
index 2f8ad716d..736cdde5e 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/JingleIQProvider.java
@@ -58,6 +58,41 @@ public JingleIQProvider()
RtpDescriptionPacketExtension.NAMESPACE,
new DefaultPacketExtensionProvider
(ParameterPacketExtension.class));
+
+ //ice-udp transport
+ providerManager.addExtensionProvider(
+ IceUdpTransportPacketExtension.ELEMENT_NAME,
+ IceUdpTransportPacketExtension.NAMESPACE,
+ new DefaultPacketExtensionProvider(
+ IceUdpTransportPacketExtension.class));
+
+ // provider
+ providerManager.addExtensionProvider(
+ RawUdpTransportPacketExtension.ELEMENT_NAME,
+ RawUdpTransportPacketExtension.NAMESPACE,
+ new DefaultPacketExtensionProvider(
+ RawUdpTransportPacketExtension.class));
+
+ //ice-udp provider
+ providerManager.addExtensionProvider(
+ CandidatePacketExtension.ELEMENT_NAME,
+ IceUdpTransportPacketExtension.NAMESPACE,
+ new DefaultPacketExtensionProvider(
+ CandidatePacketExtension.class));
+
+ //raw-udp provider
+ providerManager.addExtensionProvider(
+ CandidatePacketExtension.ELEMENT_NAME,
+ RawUdpTransportPacketExtension.NAMESPACE,
+ new DefaultPacketExtensionProvider(
+ CandidatePacketExtension.class));
+
+ //ice-udp provider
+ providerManager.addExtensionProvider(
+ RemoteCandidatePacketExtension.ELEMENT_NAME,
+ IceUdpTransportPacketExtension.NAMESPACE,
+ new DefaultPacketExtensionProvider(
+ RemoteCandidatePacketExtension.class));
}
/**
@@ -78,9 +113,9 @@ public JingleIQ parseIQ(XmlPullParser parser)
JingleAction action = JingleAction.parseString(parser
.getAttributeValue("", JingleIQ.ACTION_ATTR_NAME));
String initiator = parser
- .getAttributeValue("", JingleIQ.RESPONDER_ATTR_NAME);
+ .getAttributeValue("", JingleIQ.INITIATOR_ATTR_NAME);
String responder = parser
- .getAttributeValue("", JingleIQ.INITIATOR_ATTR_NAME);
+ .getAttributeValue("", JingleIQ.RESPONDER_ATTR_NAME);
String sid = parser
.getAttributeValue("", JingleIQ.SID_ATTR_NAME);
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RawUdpTransportPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RawUdpTransportPacketExtension.java
index ba286c5ba..9ffd35b28 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RawUdpTransportPacketExtension.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RawUdpTransportPacketExtension.java
@@ -17,7 +17,8 @@
*
* @author Emil Ivov
*/
-public class RawUdpTransportPacketExtension extends AbstractPacketExtension
+public class RawUdpTransportPacketExtension
+ extends IceUdpTransportPacketExtension
{
/**
* The name of the "transport" element.
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ReasonPacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ReasonPacketExtension.java
index f61cb94d0..1352a2a9a 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ReasonPacketExtension.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ReasonPacketExtension.java
@@ -37,7 +37,7 @@ public class ReasonPacketExtension
/**
* The reason that this packet extension is transporting.
*/
- private final String reason;
+ private final Reason reason;
/**
* The content of the text element (if any) providing human-readable
@@ -65,7 +65,7 @@ public class ReasonPacketExtension
* @param packetExtension any other element that MAY be providing further
* information or null if no such element has been specified.
*/
- public ReasonPacketExtension(String reason,
+ public ReasonPacketExtension(Reason reason,
String text,
PacketExtension packetExtension)
{
@@ -79,7 +79,7 @@ public ReasonPacketExtension(String reason,
*
* @return the reason string that this packet extension is transporting.
*/
- public String getReason()
+ public Reason getReason()
{
return reason;
}
@@ -141,7 +141,7 @@ public String toXML()
{
StringBuilder bldr = new StringBuilder("<" + getElementName() + ">");
- bldr.append("<" + getReason() + "/>");
+ bldr.append("<" + getReason().toString() + "/>");
//add reason "text" if we have it
if(getText() != null)
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ReasonProvider.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ReasonProvider.java
index e5c7fa796..6c3f1a91d 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ReasonProvider.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/ReasonProvider.java
@@ -6,6 +6,7 @@
*/
package net.java.sip.communicator.impl.protocol.jabber.extensions.jingle;
+import org.jivesoftware.smack.packet.*;
import org.jivesoftware.smack.provider.*;
import org.jivesoftware.smackx.packet.*;
import org.xmlpull.v1.*;
@@ -38,8 +39,6 @@ public ReasonPacketExtension parseExtension(XmlPullParser parser)
{
String text = null;
Reason reason = null;
- //ReasonPacketException reason
- // = new ReasonPacketExtension(reason, text, packetExtension);
boolean done = false;
@@ -63,9 +62,8 @@ public ReasonPacketExtension parseExtension(XmlPullParser parser)
else if (elementName.equals(
ReasonPacketExtension.TEXT_ELEMENT_NAME))
{
- text = parser.getText();
+ text = parseText(parser);
}
- //
else
{
//this is an element that we don't currently support.
@@ -73,15 +71,17 @@ else if (elementName.equals(
}
else if (eventType == XmlPullParser.END_TAG)
{
- if (parser.getName().equals(JingleIQ.ELEMENT_NAME))
+ if (parser.getName().equals(ReasonPacketExtension.ELEMENT_NAME))
{
done = true;
}
}
}
+ ReasonPacketExtension reasonExt
+ = new ReasonPacketExtension(reason, text, (PacketExtension)null);
+
+ return reasonExt;
- //return reason;
- return null;
}
/**
diff --git a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RemoteCandidatePacketExtension.java b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RemoteCandidatePacketExtension.java
index d2a0be499..8544870e5 100644
--- a/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RemoteCandidatePacketExtension.java
+++ b/src/net/java/sip/communicator/impl/protocol/jabber/extensions/jingle/RemoteCandidatePacketExtension.java
@@ -7,6 +7,8 @@
package net.java.sip.communicator.impl.protocol.jabber.extensions.jingle;
/**
+ * A representation of the remote-candidate ICE transport element.
+ *
* @author Emil Ivov
*/
public class RemoteCandidatePacketExtension extends CandidatePacketExtension