diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/media/JingleMediaManager.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/media/JingleMediaManager.java
index c53ab1f1b..ac80f39a6 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/media/JingleMediaManager.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/media/JingleMediaManager.java
@@ -27,15 +27,15 @@ import java.util.List;
/**
* This class provides necessary Jingle Session jmf methods and behavior.
- *
+ *
* The goal of this class is to provide a flexible way to make JingleManager control jmf streaming APIs without implement them.
* For instance you can implement a file transfer using java sockets or a VOIP Media Manager using JMF.
- * You can implement many JingleMediaManager according to you necessity.
+ * You can implement many JingleMediaManager according to you necessity.
*
* @author Thiago Camargo
*/
public abstract class JingleMediaManager {
-
+
/**
* Return all supported Payloads for this Manager
*
@@ -43,6 +43,15 @@ public abstract class JingleMediaManager {
*/
public abstract List getPayloads();
+ /**
+ * Returns the Preferred PayloadType of the Media Manager
+ *
+ * @return The PayloadType
+ */
+ public PayloadType getPreferredPayloadType() {
+ return getPayloads().size() > 0 ? getPayloads().get(0) : null;
+ }
+
/**
* Create a Media Session Implementation
*
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 d82d9d875..e16f11235 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/media/MediaNegotiator.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/media/MediaNegotiator.java
@@ -211,27 +211,34 @@ public class MediaNegotiator extends JingleNegotiator {
if (!commonAudioPtsHere.isEmpty() && !commonAudioPtsThere.isEmpty()) {
- PayloadType.Audio bestPtHere = null;
-
+ if (session.getInitiator().equals(session.getConnection().getUser())) {
+ PayloadType.Audio bestPtHere = null;
- if (bestPtHere == null)
- for (PayloadType payloadType : commonAudioPtsHere)
+ PayloadType payload = this.session.getMediaManager().getPreferredPayloadType();
+
+ if (payload != null && payload instanceof PayloadType.Audio)
+ if (commonAudioPtsHere.contains(payload))
+ bestPtHere = (PayloadType.Audio) payload;
+
+ if (bestPtHere == null)
+ for (PayloadType payloadType : commonAudioPtsHere)
+ if (payloadType instanceof PayloadType.Audio) {
+ bestPtHere = (PayloadType.Audio) payloadType;
+ break;
+ }
+
+ result = bestPtHere;
+ }
+ else {
+ PayloadType.Audio bestPtThere = null;
+ for (PayloadType payloadType : commonAudioPtsThere)
if (payloadType instanceof PayloadType.Audio) {
- bestPtHere = (PayloadType.Audio) payloadType;
+ bestPtThere = (PayloadType.Audio) payloadType;
break;
}
- PayloadType.Audio bestPtThere = null;
- for (PayloadType payloadType : commonAudioPtsThere)
- if (payloadType instanceof PayloadType.Audio) {
- bestPtThere = (PayloadType.Audio) payloadType;
- break;
- }
-
- if (session.getInitiator().equals(session.getConnection().getUser()))
- result = bestPtHere;
- else
result = bestPtThere;
+ }
}
}
diff --git a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/multi/MultiMediaManager.java b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/multi/MultiMediaManager.java
index 929306cc1..c0f29fcc7 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/multi/MultiMediaManager.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/mediaimpl/multi/MultiMediaManager.java
@@ -38,6 +38,8 @@ public class MultiMediaManager extends JingleMediaManager {
private List managers = new ArrayList();
+ private PayloadType preferredPayloadType = null;
+
public MultiMediaManager() {
}
@@ -56,9 +58,10 @@ public class MultiMediaManager extends JingleMediaManager {
*/
public List getPayloads() {
List list = new ArrayList();
+ if (preferredPayloadType != null) list.add(preferredPayloadType);
for (JingleMediaManager manager : managers) {
for (PayloadType payloadType : manager.getPayloads()) {
- if (!list.contains(payloadType))
+ if (!list.contains(payloadType) && !payloadType.equals(preferredPayloadType))
list.add(payloadType);
}
}
@@ -69,8 +72,8 @@ public class MultiMediaManager extends JingleMediaManager {
* Returns a new JingleMediaSession
*
* @param payloadType payloadType
- * @param remote remote Candidate
- * @param local local Candidate
+ * @param remote remote Candidate
+ * @param local local Candidate
* @return JingleMediaSession JingleMediaSession
*/
public JingleMediaSession createMediaSession(PayloadType payloadType, final TransportCandidate remote, final TransportCandidate local) {
@@ -81,4 +84,14 @@ public class MultiMediaManager extends JingleMediaManager {
}
return null;
}
+
+ public PayloadType getPreferredPayloadType() {
+ if (preferredPayloadType != null) return preferredPayloadType;
+ return super.getPreferredPayloadType();
+ }
+
+ public void setPreferredPayloadType(PayloadType preferredPayloadType) {
+ this.preferredPayloadType = preferredPayloadType;
+ }
+
}
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 3089d9e42..0db2bd80c 100644
--- a/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java
+++ b/jingle/extension/source/org/jivesoftware/smackx/jingle/nat/TransportCandidate.java
@@ -259,14 +259,11 @@ public abstract class TransportCandidate {
public boolean isNull() {
if (ip == null) {
return true;
- }
- else if (ip.length() == 0) {
+ } else if (ip.length() == 0) {
return true;
- }
- else if (port < 0) {
+ } else if (port < 0) {
return true;
- }
- else {
+ } else {
return false;
}
}
@@ -349,8 +346,7 @@ public abstract class TransportCandidate {
if (other.getIp() != null) {
return false;
}
- }
- else if (!getIp().equals(other.getIp())) {
+ } else if (!getIp().equals(other.getIp())) {
return false;
}
@@ -362,8 +358,7 @@ public abstract class TransportCandidate {
if (other.getName() != null) {
return false;
}
- }
- else if (!getName().equals(other.getName())) {
+ } else if (!getName().equals(other.getName())) {
return false;
}
if (getPort() != other.getPort()) {
@@ -507,20 +502,15 @@ public abstract class TransportCandidate {
value = value.toLowerCase();
if (value.equals("udp")) {
return UDP;
- }
- else if (value.equals("tcp")) {
+ } else if (value.equals("tcp")) {
return TCP;
- }
- else if (value.equals("tcp-act")) {
+ } else if (value.equals("tcp-act")) {
return TCPACT;
- }
- else if (value.equals("tcp-pass")) {
+ } else if (value.equals("tcp-pass")) {
return TCPPASS;
- }
- else if (value.equals("ssltcp")) {
+ } else if (value.equals("ssltcp")) {
return SSLTCP;
- }
- else {
+ } else {
return UDP;
}
}
@@ -545,8 +535,7 @@ public abstract class TransportCandidate {
if (other.value != null) {
return false;
}
- }
- else if (!value.equals(other.value)) {
+ } else if (!value.equals(other.value)) {
return false;
}
return true;
@@ -560,11 +549,9 @@ public abstract class TransportCandidate {
public boolean isNull() {
if (value == null) {
return true;
- }
- else if (value.length() == 0) {
+ } else if (value.length() == 0) {
return true;
- }
- else {
+ } else {
return false;
}
}
@@ -599,11 +586,9 @@ public abstract class TransportCandidate {
value = value.toLowerCase();
if (value.equals("myrtpvoice")) {
return MYRTPVOICE;
- }
- else if (value.equals("tcp")) {
+ } else if (value.equals("tcp")) {
return MYRTCPVOICE;
- }
- else {
+ } else {
return MYRTPVOICE;
}
}
@@ -628,8 +613,7 @@ public abstract class TransportCandidate {
if (other.value != null) {
return false;
}
- }
- else if (!value.equals(other.value)) {
+ } else if (!value.equals(other.value)) {
return false;
}
return true;
@@ -643,11 +627,9 @@ public abstract class TransportCandidate {
public boolean isNull() {
if (value == null) {
return true;
- }
- else if (value.length() == 0) {
+ } else if (value.length() == 0) {
return true;
- }
- else {
+ } else {
return false;
}
}
@@ -687,8 +669,7 @@ public abstract class TransportCandidate {
this.send = local.getBytes("UTF-8");
this.receive = remote.getBytes("UTF-8");
- }
- else {
+ } else {
this.receive = local.getBytes("UTF-8");
this.send = remote.getBytes("UTF-8");
}
@@ -798,6 +779,7 @@ public abstract class TransportCandidate {
public boolean datagramReceived(DatagramPacket datagramPacket) {
try {
+ System.out.println("Content Received: " + new String(datagramPacket.getData(), "UTF-8"));
String str[] = new String(datagramPacket.getData(), "UTF-8").split(";");
String pass = str[0];
String addr[] = str[1].split(":");
diff --git a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleMediaTest.java b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleMediaTest.java
index 70f7d414b..3144b6787 100644
--- a/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleMediaTest.java
+++ b/jingle/extension/test/org/jivesoftware/smackx/jingle/JingleMediaTest.java
@@ -56,57 +56,57 @@ public class JingleMediaTest extends SmackTestCase {
XMPPConnection x0 = getConnection(0);
XMPPConnection x1 = getConnection(1);
- for(int i=0;i<3;i++)
- try {
+ for (int i = 0; i < 3; i++)
+ try {
- ICETransportManager icetm0 = new ICETransportManager(x0, "jivesoftware.com", 3478);
- ICETransportManager icetm1 = new ICETransportManager(x1, "jivesoftware.com", 3478);
+ ICETransportManager icetm0 = new ICETransportManager(x0, "jivesoftware.com", 3478);
+ ICETransportManager icetm1 = new ICETransportManager(x1, "jivesoftware.com", 3478);
- final JingleManager jm0 = new JingleManager(
- x0, icetm0);
- final JingleManager jm1 = new JingleManager(
- x1, icetm1);
+ final JingleManager jm0 = new JingleManager(
+ x0, icetm0);
+ final JingleManager jm1 = new JingleManager(
+ x1, icetm1);
- jm0.addCreationListener(icetm0);
- jm1.addCreationListener(icetm1);
+ jm0.addCreationListener(icetm0);
+ jm1.addCreationListener(icetm1);
- JingleMediaManager jingleMediaManager0 = new JmfMediaManager();
- JingleMediaManager jingleMediaManager1 = new JmfMediaManager();
+ JingleMediaManager jingleMediaManager0 = new JmfMediaManager();
+ JingleMediaManager jingleMediaManager1 = new JmfMediaManager();
- jm0.setMediaManager(jingleMediaManager0);
- jm1.setMediaManager(jingleMediaManager1);
+ jm0.setMediaManager(jingleMediaManager0);
+ jm1.setMediaManager(jingleMediaManager1);
- JingleSessionRequestListener jingleSessionRequestListener = new JingleSessionRequestListener() {
- public void sessionRequested(final JingleSessionRequest request) {
+ JingleSessionRequestListener jingleSessionRequestListener = new JingleSessionRequestListener() {
+ public void sessionRequested(final JingleSessionRequest request) {
+
+ try {
+ IncomingJingleSession session = request.accept(jm1.getMediaManager().getPayloads());
+ session.start(request);
+ }
+ catch (XMPPException e) {
+ e.printStackTrace();
+ }
- try {
- IncomingJingleSession session = request.accept(jm1.getMediaManager().getPayloads());
- session.start(request);
- }
- catch (XMPPException e) {
- e.printStackTrace();
}
+ };
- }
- };
+ jm1.addJingleSessionRequestListener(jingleSessionRequestListener);
- jm1.addJingleSessionRequestListener(jingleSessionRequestListener);
+ OutgoingJingleSession js0 = jm0.createOutgoingJingleSession(x1.getUser());
- OutgoingJingleSession js0 = jm0.createOutgoingJingleSession(x1.getUser());
+ js0.start();
- js0.start();
+ Thread.sleep(50000);
+ js0.terminate();
- Thread.sleep(50000);
- js0.terminate();
+ jm1.removeJingleSessionRequestListener(jingleSessionRequestListener);
- jm1.removeJingleSessionRequestListener(jingleSessionRequestListener);
+ Thread.sleep(6000);
- Thread.sleep(6000);
-
- }
- catch (Exception e) {
- e.printStackTrace();
- }
+ }
+ catch (Exception e) {
+ e.printStackTrace();
+ }
}
@@ -128,19 +128,21 @@ public class JingleMediaTest extends SmackTestCase {
jm0.addCreationListener(icetm0);
jm1.addCreationListener(icetm1);
-/*
- final JingleManager jm0 = new JingleManager(
- x0, new BasicTransportManager());
- final JingleManager jm1 = new JingleManager(
- x1, new BasicTransportManager());
- */
+/*
+ final JingleManager jm0 = new JingleManager(
+ x0, new BasicTransportManager());
+ final JingleManager jm1 = new JingleManager(
+ x1, new BasicTransportManager());
+*/
+
MultiMediaManager jingleMediaManager0 = new MultiMediaManager();
- jingleMediaManager0.addMediaManager(new SpeexMediaManager());
jingleMediaManager0.addMediaManager(new JmfMediaManager());
+ jingleMediaManager0.addMediaManager(new SpeexMediaManager());
MultiMediaManager jingleMediaManager1 = new MultiMediaManager();
jingleMediaManager1.addMediaManager(new JmfMediaManager());
jingleMediaManager1.addMediaManager(new SpeexMediaManager());
+ jingleMediaManager1.setPreferredPayloadType(jingleMediaManager1.getPayloads().get(2));
jm0.setMediaManager(jingleMediaManager0);
jm1.setMediaManager(jingleMediaManager1);