Completes jingle packet parsing (I actually believe it does ;) ). Off to the jingle handling now

cusax-fix
Emil Ivov 16 years ago
parent e381921580
commit 471ea1e503

@ -329,8 +329,6 @@ public void shutdown()
*/
private void subscribeForJinglePackets()
{
ProviderManager providerManager = ProviderManager.getInstance();
protocolProvider.getConnection().addPacketListener(
new JingleListener(), new PacketTypeFilter( JingleIQ.class));
}

@ -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);

@ -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;

@ -361,5 +361,4 @@ public CandidateType getType()
{
return CandidateType.valueOf(getAttributeAsString(TYPE_ATTR_NAME));
}
}

@ -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 <tt>namespace</tt> and <tt>elementName</tt>. 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<RemoteCandidatePacketExtension> list
= new ArrayList<RemoteCandidatePacketExtension>();
list.add(remoteCandidate);
return list;
if(candidateList.size() > 0)
{
return candidateList;
}
else if (remoteCandidate != null)
{
List<RemoteCandidatePacketExtension> list
= new ArrayList<RemoteCandidatePacketExtension>();
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 <tt>childExtension</tt> 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);
}
}

@ -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 <tt>JingleIQ</tt> 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 <tt>Logger</tt> used by the <tt>JingleIQ</tt>
* 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;
}

@ -58,6 +58,41 @@ public JingleIQProvider()
RtpDescriptionPacketExtension.NAMESPACE,
new DefaultPacketExtensionProvider
<ParameterPacketExtension>(ParameterPacketExtension.class));
//ice-udp transport
providerManager.addExtensionProvider(
IceUdpTransportPacketExtension.ELEMENT_NAME,
IceUdpTransportPacketExtension.NAMESPACE,
new DefaultPacketExtensionProvider<IceUdpTransportPacketExtension>(
IceUdpTransportPacketExtension.class));
//<raw-udp/> provider
providerManager.addExtensionProvider(
RawUdpTransportPacketExtension.ELEMENT_NAME,
RawUdpTransportPacketExtension.NAMESPACE,
new DefaultPacketExtensionProvider<RawUdpTransportPacketExtension>(
RawUdpTransportPacketExtension.class));
//ice-udp <candidate/> provider
providerManager.addExtensionProvider(
CandidatePacketExtension.ELEMENT_NAME,
IceUdpTransportPacketExtension.NAMESPACE,
new DefaultPacketExtensionProvider<CandidatePacketExtension>(
CandidatePacketExtension.class));
//raw-udp <candidate/> provider
providerManager.addExtensionProvider(
CandidatePacketExtension.ELEMENT_NAME,
RawUdpTransportPacketExtension.NAMESPACE,
new DefaultPacketExtensionProvider<CandidatePacketExtension>(
CandidatePacketExtension.class));
//ice-udp <remote-candidate/> provider
providerManager.addExtensionProvider(
RemoteCandidatePacketExtension.ELEMENT_NAME,
IceUdpTransportPacketExtension.NAMESPACE,
new DefaultPacketExtensionProvider<RemoteCandidatePacketExtension>(
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);

@ -17,7 +17,8 @@
*
* @author Emil Ivov
*/
public class RawUdpTransportPacketExtension extends AbstractPacketExtension
public class RawUdpTransportPacketExtension
extends IceUdpTransportPacketExtension
{
/**
* The name of the "transport" element.

@ -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 <tt>null</tt> 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)

@ -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);
}
// <reason/>
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;
}
/**

@ -7,6 +7,8 @@
package net.java.sip.communicator.impl.protocol.jabber.extensions.jingle;
/**
* A representation of the <tt>remote-candidate</tt> ICE transport element.
*
* @author Emil Ivov
*/
public class RemoteCandidatePacketExtension extends CandidatePacketExtension

Loading…
Cancel
Save