public class JingleManager extends Object implements JingleSessionListener
To create a Jingle Session you need a Transport method and a Payload type.
A transport method is how it will transmit and receive network packets. Transport MUST have one or more candidates. A transport candidate is an IP Address with a defined port, that other party must send data to.
A supported payload type, is the data encoding format that the jmf will be transmitted. For instance an Audio Payload "GSM".
A Jingle session negotiates a payload type and a pair of transport candidates. Which means that when a Jingle Session is established you will have two defined transport candidates with addresses and a defined Payload type. In other words, you will have two IP address with their respective ports, and a Codec type defined.
The JingleManager is a facade built upon Jabber Jingle (XEP-166) to allow the use of Jingle. This implementation allows the user to simply use this class for setting the Jingle parameters, create and receive Jingle Sessions.
In order to use the Jingle, the user must provide a TransportManager that will handle the resolution of potential IP addresses that can be used to transport the streaming (jmf). This TransportManager can be initialized with several default resolvers, including a fixed solver that can be used when the address and port are know in advance. This API have ready to use Transport Managers, for instance: BasicTransportManager, STUNTransportManager, BridgedTransportManager.
You should also specify a JingleMediaManager if you want that JingleManager assume Media control Using a JingleMediaManager implementation is the easier way to implement a Jingle Application.
Otherwise before creating an outgoing connection, the user must create jingle session listeners that will be called when different events happen. The most important event is sessionEstablished(), that will be called when all the negotiations are finished, providing the payload type for the transmission as well as the remote and local addresses and ports for the communication. See JingleSessionListener for a complete list of events that can be observed.
This is an example of how to use the JingleManager: This example implements a Jingle VOIP Call between two users.To wait for an Incoming Jingle Session: try { // Connect to an XMPP Server XMPPConnection x1 = new XMPPTCPConnection("xmpp.com"); x1.connect(); x1.login("juliet", "juliet"); // Create a JingleManager using a BasicResolver final JingleManager jm1 = new JingleManager( x1, new BasicTransportManager()); // Create a JingleMediaManager. In this case using Jingle Audio Media API JingleMediaManager jingleMediaManager = new AudioMediaManager(); // Set the JingleMediaManager jm1.setMediaManager(jingleMediaManager); // Listen for incoming calls jm1.addJingleSessionRequestListener(new JingleSessionRequestListener() { public void sessionRequested(JingleSessionRequest request) { try { // Accept the call IncomingJingleSession session = request.accept(); // Start the call session.start(); } catch (XMPPException e) { LOGGER.log(Level.WARNING, "exception", e); } } }); Thread.sleep(15000); } catch (Exception e) { LOGGER.log(Level.WARNING, "exception", e); } To create an Outgoing Jingle Session: try { // Connect to an XMPP Server XMPPConnection x0 = new XMPPTCPConnection("xmpp.com"); x0.connect(); x0.login("romeo", "romeo"); // Create a JingleManager using a BasicResolver final JingleManager jm0 = new JingleManager( x0, new BasicTransportManager()); // Create a JingleMediaManager. In this case using Jingle Audio Media API JingleMediaManager jingleMediaManager = new AudioMediaManager(); // Using Jingle Media API // Set the JingleMediaManager jm0.setMediaManager(jingleMediaManager); // Create a new Jingle Call with a full JID OutgoingJingleSession js0 = jm0.createOutgoingJingleSession("juliet@xmpp.com/Smack"); // Start the call js0.start(); Thread.sleep(10000); js0.terminate(); Thread.sleep(3000); } catch (Exception e) { LOGGER.log(Level.WARNING, "exception", e); }
Constructor and Description |
---|
JingleManager(XMPPConnection connection,
List<JingleMediaManager> jingleMediaManagers)
Default constructor with a defined XMPPConnection, Transport Resolver and a Media Manager.
|
Modifier and Type | Method and Description |
---|---|
void |
addCreationListener(CreatedJingleSessionListener createdJingleSessionListener)
Adds a CreatedJingleSessionListener.
|
void |
addJingleSessionRequestListener(JingleSessionRequestListener jingleSessionRequestListener)
Add a Jingle session request listenerJingle to listen to incoming session
requests.
|
JingleSession |
createIncomingJingleSession(JingleSessionRequest request)
When the session request is acceptable, this method should be invoked.
|
JingleSession |
createOutgoingJingleSession(org.jxmpp.jid.EntityFullJid responder)
Creates an Jingle session to start a communication with another user.
|
void |
disconnectAllSessions()
Disconnect all Jingle Sessions.
|
List<JingleMediaManager> |
getMediaManagers()
Get the Media Managers of this Jingle Manager.
|
JingleSession |
getSession(String jid)
Get a session with the informed JID.
|
static boolean |
isServiceEnabled(XMPPConnection connection)
Returns true if the Jingle support is enabled for the given connection.
|
static boolean |
isServiceEnabled(XMPPConnection connection,
org.jxmpp.jid.Jid userID)
Returns true if the specified user handles Jingle messages.
|
void |
removeCreationListener(CreatedJingleSessionListener createdJingleSessionListener)
Removes a CreatedJingleSessionListener.
|
void |
removeJingleSessionRequestListener(JingleSessionRequestListener jingleSessionRequestListener)
Removes a Jingle session listenerJingle.
|
void |
sessionClosed(String reason,
JingleSession jingleSession)
Notification that the session was closed normally.
|
void |
sessionClosedOnError(XMPPException e,
JingleSession jingleSession)
Notification that the session was closed due to an exception.
|
void |
sessionDeclined(String reason,
JingleSession jingleSession)
Notification that the session was declined.
|
void |
sessionEstablished(PayloadType pt,
TransportCandidate rc,
TransportCandidate lc,
JingleSession jingleSession)
Notification that the session has been established.
|
void |
sessionMediaReceived(JingleSession jingleSession,
String participant)
Notification that the Media has arrived for this session.
|
void |
sessionRedirected(String redirection,
JingleSession jingleSession)
Notification that the session was redirected.
|
static void |
setJingleServiceEnabled()
Setup the jingle system to let the remote clients know we support Jingle.
|
void |
setMediaManagers(List<JingleMediaManager> jingleMediaManagers)
Set the Media Managers of this Jingle Manager.
|
static void |
setServiceEnabled(XMPPConnection connection,
boolean enabled)
Enables or disables the Jingle support on a given connection.
|
void |
triggerSessionCreated(JingleSession jingleSession)
Trigger CreatedJingleSessionListeners that a session was created.
|
public JingleManager(XMPPConnection connection, List<JingleMediaManager> jingleMediaManagers) throws XMPPException, SmackException
connection
- XMPP XMPPConnection to be usedjingleMediaManagers
- an implemented JingleMediaManager to be used.SmackException
XMPPException
public static void setJingleServiceEnabled()
public static void setServiceEnabled(XMPPConnection connection, boolean enabled)
Before starting any Jingle jmf session, check that the user can handle it. Enable the Jingle support to indicate that this client handles Jingle messages.
connection
- the connection where the service will be enabled or
disabledenabled
- indicates if the service will be enabled or disabledpublic static boolean isServiceEnabled(XMPPConnection connection)
connection
- the connection to look for Jingle supportpublic static boolean isServiceEnabled(XMPPConnection connection, org.jxmpp.jid.Jid userID) throws XMPPException, SmackException, InterruptedException
connection
- the connection to use to perform the service discoveryuserID
- the user to check. A fully qualified xmpp ID, e.g.
jdoe@example.comSmackException
- if there was no response from the server.XMPPException
InterruptedException
public List<JingleMediaManager> getMediaManagers()
public void setMediaManagers(List<JingleMediaManager> jingleMediaManagers)
jingleMediaManagers
- JingleMediaManager to be used for open, close, start and stop jmf streamingspublic void addJingleSessionRequestListener(JingleSessionRequestListener jingleSessionRequestListener)
jingleSessionRequestListener
- an implemented JingleSessionRequestListenerremoveJingleSessionRequestListener(JingleSessionRequestListener)
,
JingleListener
public void removeJingleSessionRequestListener(JingleSessionRequestListener jingleSessionRequestListener)
jingleSessionRequestListener
- The jingle session jingleSessionRequestListener to be removedaddJingleSessionRequestListener(JingleSessionRequestListener)
,
JingleListener
public void addCreationListener(CreatedJingleSessionListener createdJingleSessionListener)
createdJingleSessionListener
- public void removeCreationListener(CreatedJingleSessionListener createdJingleSessionListener)
createdJingleSessionListener
- public void triggerSessionCreated(JingleSession jingleSession)
jingleSession
- public void sessionEstablished(PayloadType pt, TransportCandidate rc, TransportCandidate lc, JingleSession jingleSession)
JingleSessionListener
sessionEstablished
in interface JingleSessionListener
pt
- the Payload tyep to userc
- the remote candidate to use for connecting to the remote
service.lc
- the local candidate where we must listen for connectionsjingleSession
- Session that called the methodpublic void sessionDeclined(String reason, JingleSession jingleSession)
JingleSessionListener
sessionDeclined
in interface JingleSessionListener
reason
- the reason (if any).jingleSession
- Session that called the methodpublic void sessionRedirected(String redirection, JingleSession jingleSession)
JingleSessionListener
sessionRedirected
in interface JingleSessionListener
jingleSession
- session that called the methodpublic void sessionClosed(String reason, JingleSession jingleSession)
JingleSessionListener
sessionClosed
in interface JingleSessionListener
reason
- the reason (if any).jingleSession
- Session that called the methodpublic void sessionClosedOnError(XMPPException e, JingleSession jingleSession)
JingleSessionListener
sessionClosedOnError
in interface JingleSessionListener
e
- the exception.jingleSession
- session that called the methodpublic void sessionMediaReceived(JingleSession jingleSession, String participant)
JingleSessionListener
sessionMediaReceived
in interface JingleSessionListener
jingleSession
- session that called the methodparticipant
- description of the participantpublic void disconnectAllSessions()
public JingleSession createOutgoingJingleSession(org.jxmpp.jid.EntityFullJid responder) throws XMPPException
responder
- the fully qualified jabber ID with resource of the other
user.XMPPException
public JingleSession createIncomingJingleSession(JingleSessionRequest request) throws XMPPException
request
- the remote request that is being accepted.XMPPException
public JingleSession getSession(String jid)
jid
-