Begin work on FileSender class which will serve to send a file over Jingle
authorDa Risk <darisk972@gmail.com>
Fri, 06 Mar 2009 22:20:25 +0100
changeset 8 1b063c2d1096
parent 7 c2941cee7327
child 9 31fdf68dc4df
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
src/com/beem/project/beem/jingle/Caller.java
src/com/beem/project/beem/jingle/FileSender.java
src/com/beem/project/beem/jingle/Receiver.java
src/com/beem/project/beem/jingle/SenderMediaManager.java
src/com/beem/project/beem/jingle/SenderMediaSession.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);
     }
 
--- /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;
+    }
 
-	}
+
 
 }