Begin work on FileSender class which will serve to send a file over Jingle
Debut d'une classe pour envoyer un fichier par jingle
C'est surtout un commit pour manu. je le partagerais sur le bug tracker
--- a/src/com/beem/project/beem/jingle/Caller.java Sat Feb 28 02:55:32 2009 +0100
+++ b/src/com/beem/project/beem/jingle/Caller.java Fri Mar 06 22:20:25 2009 +0100
@@ -1,4 +1,5 @@
package com.beem.project.beem.jingle;
+
import java.util.ArrayList;
import java.util.List;
import org.jivesoftware.smack.ConnectionConfiguration;
@@ -28,7 +29,7 @@
public Caller(final String login, final String pass, String server) {
if (server == null || server.equals(""))
server = "localhost";
- XMPPConnection.DEBUG_ENABLED = true;
+// XMPPConnection.DEBUG_ENABLED = true;
this.login = login;
this.password = pass;
ConnectionConfiguration conf = new ConnectionConfiguration(server);
@@ -41,6 +42,7 @@
initialize();
} catch (XMPPException e) {
// TODO Auto-generated catch block
+ System.err.println("Echec de la connexion au serveru");
e.printStackTrace();
}
}
@@ -57,35 +59,41 @@
// TODO Auto-generated method stub
}
- @Override
+ @Override
public void sessionMediaReceived(final JingleSession jingleSession,
final String participant) {
// TODO Auto-generated method stub
+ System.out.println("Session Media received from " + participant);
}
- @Override
+ @Override
public void sessionEstablished(final PayloadType pt,
final TransportCandidate remoteCandidate,
final TransportCandidate localCandidate,
final JingleSession jingleSession) {
System.out.println("Session established");
+ String name = remoteCandidate.getName();
+ String ip = remoteCandidate.getIp();
+ int port = remoteCandidate.getPort();
+ System.out.println("Session established avec "+name+" sur "+ ip + ":" +port);
+
}
- @Override
+ @Override
public void sessionDeclined(final String reason,
final JingleSession jingleSession) {
System.out.println("Session " + jingleSession.getResponder()
+ "declined because " + reason);
}
- @Override
+ @Override
public void sessionClosedOnError(final XMPPException e,
final JingleSession jingleSession) {
System.out.println("Session " + jingleSession.getResponder() + " closed on error");
}
- @Override
+ @Override
public void sessionClosed(final String reason,
final JingleSession jingleSession) {
System.out.println("Session " + jingleSession.getResponder()
@@ -119,9 +127,8 @@
System.err.println("Not enough parameters");
System.err.println("Usage : Caller user password server jidtocall");
}
- // String dest ="test2@nowhere/Receiver";
- Caller test = new Caller(args[1], args[2], args[3]);
- test.call(args[4]);
+ Caller test = new Caller(args[0], args[1], args[2]);
+ test.call(args[3]);
Thread.sleep(60000);
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/com/beem/project/beem/jingle/FileSender.java Fri Mar 06 22:20:25 2009 +0100
@@ -0,0 +1,59 @@
+package com.beem.project.beem.jingle;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.Socket;
+
+public class FileSender extends Thread {
+ private String dest;
+ private int port;
+ private boolean started = false;
+ private String filename;
+
+ public FileSender(String dest, int port, String file){
+ this.dest = dest;
+ this.port = port;
+ this.filename = file;
+ }
+
+ public void run(){
+ try {
+ InputStream in = new BufferedInputStream(new FileInputStream(filename));
+ Socket sock = new Socket(dest, port);
+ OutputStream out = new BufferedOutputStream(sock.getOutputStream());
+
+ try {
+ started = true;
+ byte buf[] = new byte[1024];
+ int nbbytes = 1;
+ while (started && nbbytes != -1){
+ nbbytes = in.read(buf, 0, 1024);
+ out.write(buf, 0, 1024);
+ }
+ started = false;
+ } finally {
+ if (in != null)
+ in.close();
+ if (out != null)
+ out.close();
+ if (sock != null)
+ sock.close();
+ }
+ } catch (FileNotFoundException e){
+ System.err.println("Impossible d'ouvrir " + filename +" " + e.getLocalizedMessage());
+ } catch (IOException e) {
+ System.err.println("Imposible de se connecter a " + dest + " " + e.getLocalizedMessage());
+ }
+ }
+
+ public void setStarted(){
+ started = false;
+ }
+
+
+}
--- a/src/com/beem/project/beem/jingle/Receiver.java Sat Feb 28 02:55:32 2009 +0100
+++ b/src/com/beem/project/beem/jingle/Receiver.java Fri Mar 06 22:20:25 2009 +0100
@@ -1,8 +1,11 @@
package com.beem.project.beem.jingle;
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.ServerSocket;
+import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
-
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
@@ -19,107 +22,135 @@
public class Receiver {
- private XMPPConnection con;
- private JingleManager jingleManager;
- private List<JingleMediaManager> mediaManagers;
- private JingleSession in;
-
- public Receiver(String username, String pass) {
-// XMPPConnection.DEBUG_ENABLED = true;
- ConnectionConfiguration conf = new ConnectionConfiguration("localhost");
- conf.setRosterLoadedAtLogin(false);
- con = new XMPPConnection(conf);
- try {
- con.connect();
- con.login(username, pass, "Receiver");
- initialize();
+ private XMPPConnection con;
+ private JingleManager jingleManager;
+ private List<JingleMediaManager> mediaManagers;
+ private JingleSession in;
+
+ public Receiver(String username, String pass) {
+ // XMPPConnection.DEBUG_ENABLED = true;
+ ConnectionConfiguration conf = new ConnectionConfiguration("localhost");
+ conf.setRosterLoadedAtLogin(false);
+ con = new XMPPConnection(conf);
+ try {
+ con.connect();
+ con.login(username, pass, "Receiver");
+ initialize();
+
+ } catch (XMPPException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
- } catch (XMPPException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
-
- private void initialize()
- {
- mediaManagers = new ArrayList<JingleMediaManager>();
- mediaManagers.add(new SenderMediaManager(new BasicTransportManager()));
- JingleManager.setJingleServiceEnabled();
- jingleManager = new JingleManager(con, mediaManagers);
- jingleManager.addJingleSessionRequestListener(new JingleSessionRequestListener() {
-
+ private void initialize()
+ {
+ mediaManagers = new ArrayList<JingleMediaManager>();
+ mediaManagers.add(new SenderMediaManager(new BasicTransportManager()));
+ JingleManager.setJingleServiceEnabled();
+ jingleManager = new JingleManager(con, mediaManagers);
+ jingleManager.addJingleSessionRequestListener(new JingleSessionRequestListener() {
+
+ @Override
+ public void sessionRequested(JingleSessionRequest request) {
+ System.out.println("Jingle Session request from "+request.getFrom());
+ try {
+ in = request.accept();
+ // TODO configure in
+ in.addListener(new JingleSessionListener() {
+
+ @Override
+ public void sessionRedirected(String redirection,
+ JingleSession jingleSession) {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ public void sessionMediaReceived(JingleSession jingleSession,
+ String participant) {
+ // TODO Auto-generated method stub
+ System.out.println("Session Media received from " + participant);
+ }
+
@Override
- public void sessionRequested(JingleSessionRequest request) {
- System.out.println("Jingle Session request from "+request.getFrom());
- try {
- in = request.accept();
- // TODO configure in
- in.addListener(new JingleSessionListener() {
-
- @Override
- public void sessionRedirected(String redirection,
- JingleSession jingleSession) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void sessionMediaReceived(JingleSession jingleSession,
- String participant) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void sessionEstablished(PayloadType pt,
- TransportCandidate remoteCandidate,
- TransportCandidate localCandidate, JingleSession jingleSession) {
- // TODO Auto-generated method stub
- System.out.println("Session established");
- }
-
- @Override
- public void sessionDeclined(String reason, JingleSession jingleSession) {
- // TODO Auto-generated method stub
- System.out.println("Session "+ jingleSession.getResponder() +"declined because "+ reason);
- }
-
- @Override
- public void sessionClosedOnError(XMPPException e,
- JingleSession jingleSession) {
- // TODO Auto-generated method stub
- System.out.println("Session "+ jingleSession.getResponder() + " closed");
-
- }
-
- @Override
- public void sessionClosed(String reason, JingleSession jingleSession) {
- // TODO Auto-generated method stub
- System.out.println("Session "+ jingleSession.getResponder() +"closedd because "+ reason);
- }
- });
- in.startIncoming();
- } catch (XMPPException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
+ public void sessionEstablished(PayloadType pt,
+ TransportCandidate remoteCandidate,
+ TransportCandidate localCandidate, JingleSession jingleSession) {
+ // TODO Auto-generated method stub
+ System.out.println("Session established");
+ try{
+ System.out.println("Je recois sur " + localCandidate.getIp() + ":" + localCandidate.getPort() );
+ receiveData(localCandidate.getIp(), localCandidate.getPort());
+ } catch (IOException e){
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void sessionDeclined(String reason, JingleSession jingleSession) {
+ // TODO Auto-generated method stub
+ System.out.println("Session "+ jingleSession.getResponder() +"declined because "+ reason);
+ }
+
+ @Override
+ public void sessionClosedOnError(XMPPException e,
+ JingleSession jingleSession) {
+ // TODO Auto-generated method stub
+ System.out.println("Session "+ jingleSession.getResponder() + " closed");
+
+ }
+
+ @Override
+ public void sessionClosed(String reason, JingleSession jingleSession) {
+ // TODO Auto-generated method stub
+ System.out.println("Session "+ jingleSession.getResponder() +"closedd because "+ reason);
}
- });
-
+ });
+ in.startIncoming();
+ } catch (XMPPException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ });
+
+ }
+
+
+ private void receiveData(String ip, int port) throws IOException {
+ ServerSocket serv = null;
+ Socket s = null;
+ try {
+ serv = new ServerSocket(port);
+ System.out.println("Waiting data");
+ s = serv.accept();
+ InputStream in = s.getInputStream();
+ int a;
+ while ( (a = in.read()) != -1) {
+ System.out.println("Received " + a);
+ }
+ System.out.println("End receiving data");
+ } finally {
+ if (serv != null)
+ serv.close();
+ if (s != null)
+ s.close();
}
-
- /**
- * @param args
- * @throws InterruptedException
- * @throws InterruptedException
- */
- public static void main(String[] args) throws InterruptedException {
- // TODO Auto-generated method stub
- Receiver rec = new Receiver("test2", "test2");
- System.out.println("Receiver initialized");
-
- Thread.sleep(60000);
-
- }
+ }
+
+ /**
+ * @param args
+ * @throws InterruptedException
+ * @throws InterruptedException
+ */
+ public static void main(String[] args) throws InterruptedException {
+ // TODO Auto-generated method stub
+ Receiver rec = new Receiver("test2", "test2");
+ System.out.println("Receiver initialized");
+
+ Thread.sleep(60000);
+
+ }
}
--- a/src/com/beem/project/beem/jingle/SenderMediaManager.java Sat Feb 28 02:55:32 2009 +0100
+++ b/src/com/beem/project/beem/jingle/SenderMediaManager.java Fri Mar 06 22:20:25 2009 +0100
@@ -2,7 +2,6 @@
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;
@@ -12,40 +11,40 @@
import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
public class SenderMediaManager extends JingleMediaManager {
-
- private static final SmackLogger LOGGER = SmackLogger.getLogger(SenderMediaManager.class);
+
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(SenderMediaManager.class);
- public static final String MEDIA_NAME = "42Test";
-
- private List<PayloadType> payloads;
+ public static final String MEDIA_NAME = "42Test";
+
+ private List<PayloadType> payloads;
- public SenderMediaManager(JingleTransportManager transportManager) {
- super(transportManager);
- // TODO Auto-generated constructor stub
- setupPayloads();
- LOGGER.info("A TestMedia Manager is created");
- }
+ public SenderMediaManager(JingleTransportManager transportManager) {
+ super(transportManager);
+ // TODO Auto-generated constructor stub
+ setupPayloads();
+ LOGGER.info("A TestMedia Manager is created");
+ }
- @Override
- public JingleMediaSession createMediaSession(PayloadType payloadType,
- TransportCandidate remote, TransportCandidate local,
- JingleSession jingleSession) {
- // TODO Auto-generated method stub
- return new SenderMediaSession(payloadType, remote, local, null, jingleSession);
- }
+ @Override
+ public JingleMediaSession createMediaSession(PayloadType payloadType,
+ TransportCandidate remote, TransportCandidate local,
+ JingleSession jingleSession) {
+ // TODO Auto-generated method stub
+ return new SenderMediaSession(payloadType, remote, local, null, jingleSession);
+ }
- @Override
- public List<PayloadType> getPayloads() {
- return payloads;
- }
+ @Override
+ public List<PayloadType> getPayloads() {
+ return payloads;
+ }
- private void setupPayloads() {
- payloads = new ArrayList<PayloadType>();
- payloads.add(new PayloadType.Audio(42, "Test"));
- }
-
- @Override
- public String getName() {
- return MEDIA_NAME;
- }
+ private void setupPayloads() {
+ payloads = new ArrayList<PayloadType>();
+ payloads.add(new PayloadType.Audio(42, "Test"));
+ }
+
+ @Override
+ public String getName() {
+ return MEDIA_NAME;
+ }
}
--- a/src/com/beem/project/beem/jingle/SenderMediaSession.java Sat Feb 28 02:55:32 2009 +0100
+++ b/src/com/beem/project/beem/jingle/SenderMediaSession.java Fri Mar 06 22:20:25 2009 +0100
@@ -1,13 +1,8 @@
/**
- *
+ *
*/
package com.beem.project.beem.jingle;
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.InputStream;
-
import org.jivesoftware.smackx.jingle.JingleSession;
import org.jivesoftware.smackx.jingle.SmackLogger;
import org.jivesoftware.smackx.jingle.media.JingleMediaSession;
@@ -20,82 +15,79 @@
*/
public class SenderMediaSession extends JingleMediaSession {
- private static final SmackLogger LOGGER = SmackLogger.getLogger(SenderMediaSession.class);
- private InputStream is;
- private static final String filename = "/tmp/test.jpg";
-
- /**
- * @param payloadType
- * @param remote
- * @param local
- * @param mediaLocator
- * @param jingleSession
- */
- public SenderMediaSession(PayloadType payloadType, TransportCandidate remote,
- TransportCandidate local, String mediaLocator,
- JingleSession jingleSession) {
- super(payloadType, remote, local, mediaLocator, jingleSession);
- initialize();
- LOGGER.info("Demarrage d'une session avec local: "+ local +" #remote: "+remote );
- }
+ private static final SmackLogger LOGGER = SmackLogger.getLogger(SenderMediaSession.class);
+ private static final String filename = "/tmp/test.jpg";
+ private boolean active = false;
+ private boolean started = false;
+ private FileSender fileSender;
- /* (non-Javadoc)
- * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#initialize()
- */
- @Override
- public void initialize() {
- // TODO Auto-generated method stub
- try {
- is = new BufferedInputStream(new FileInputStream(filename));
- } catch (FileNotFoundException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
+ /**
+ * @param payloadType
+ * @param remote
+ * @param local
+ * @param mediaLocator
+ * @param jingleSession
+ */
+ public SenderMediaSession(PayloadType payloadType, TransportCandidate remote,
+ TransportCandidate local, String mediaLocator,
+ JingleSession jingleSession) {
+ super(payloadType, remote, local, mediaLocator, jingleSession);
+ initialize();
+ LOGGER.info("Demarrage d'une session avec local: "+ local +" #remote: "+remote );
+ }
+
+ /* (non-Javadoc)
+ * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#initialize()
+ */
+ @Override
+ public void initialize() {
+ fileSender = new FileSender(this.getRemote().getIp(), getRemote().getPort(), filename);
+ }
- /* (non-Javadoc)
- * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#setTrasmit(boolean)
- */
- @Override
- public void setTrasmit(boolean active) {
- // TODO Auto-generated method stub
-
- }
+ /* (non-Javadoc)
+ * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#setTrasmit(boolean)
+ */
+ @Override
+ public void setTrasmit(boolean active) {
+ // TODO Auto-generated method stub
+ this.active = active;
+ }
- /* (non-Javadoc)
- * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#startReceive()
- */
- @Override
- public void startReceive() {
- // TODO Auto-generated method stub
+ /* (non-Javadoc)
+ * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#startReceive()
+ */
+ @Override
+ public void startReceive() {
+ // TODO Auto-generated method stub
- }
+ }
- /* (non-Javadoc)
- * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#startTrasmit()
- */
- @Override
- public void startTrasmit() {
- // TODO Auto-generated method stub
-
- }
+ /* (non-Javadoc)
+ * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#startTrasmit()
+ */
+ @Override
+ public void startTrasmit() {
+ fileSender.start();
+ }
- /* (non-Javadoc)
- * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#stopReceive()
- */
- @Override
- public void stopReceive() {
- // TODO Auto-generated method stub
+ /* (non-Javadoc)
+ * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#stopReceive()
+ */
+ @Override
+ public void stopReceive() {
+ // TODO Auto-generated method stub
- }
+ }
- /* (non-Javadoc)
- * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#stopTrasmit()
- */
- @Override
- public void stopTrasmit() {
- // TODO Auto-generated method stub
+ /* (non-Javadoc)
+ * @see org.jivesoftware.smackx.jingle.media.JingleMediaSession#stopTrasmit()
+ */
+ @Override
+ public void stopTrasmit() {
+ // TODO Auto-generated method stub
+ started = false;
+ }
- }
+
}