# HG changeset patch # User Da Risk # Date 1236374425 -3600 # Node ID 1b063c2d10966c49d4e7655912f9e8bac3884c65 # Parent c2941cee732734d378965bb9d055ea16b101c8e2 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 diff -r c2941cee7327 -r 1b063c2d1096 src/com/beem/project/beem/jingle/Caller.java --- 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); } diff -r c2941cee7327 -r 1b063c2d1096 src/com/beem/project/beem/jingle/FileSender.java --- /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; + } + + +} diff -r c2941cee7327 -r 1b063c2d1096 src/com/beem/project/beem/jingle/Receiver.java --- 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 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 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(); - mediaManagers.add(new SenderMediaManager(new BasicTransportManager())); - JingleManager.setJingleServiceEnabled(); - jingleManager = new JingleManager(con, mediaManagers); - jingleManager.addJingleSessionRequestListener(new JingleSessionRequestListener() { - + private void initialize() + { + mediaManagers = new ArrayList(); + 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); + + } } diff -r c2941cee7327 -r 1b063c2d1096 src/com/beem/project/beem/jingle/SenderMediaManager.java --- 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 payloads; + public static final String MEDIA_NAME = "42Test"; + + private List 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 getPayloads() { - return payloads; - } + @Override + public List getPayloads() { + return payloads; + } - private void setupPayloads() { - payloads = new ArrayList(); - payloads.add(new PayloadType.Audio(42, "Test")); - } - - @Override - public String getName() { - return MEDIA_NAME; - } + private void setupPayloads() { + payloads = new ArrayList(); + payloads.add(new PayloadType.Audio(42, "Test")); + } + + @Override + public String getName() { + return MEDIA_NAME; + } } diff -r c2941cee7327 -r 1b063c2d1096 src/com/beem/project/beem/jingle/SenderMediaSession.java --- 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; + } - } + }