src/com/beem/project/beem/jingle/Caller.java
author nikita@nikita-lab
Sat, 16 May 2009 22:59:02 +0200
changeset 186 7aec70b9ca79
parent 57 c91278dda166
child 212 bbc0b169cdf0
permissions -rw-r--r--
IssueID #100 warnings en moins et debut de resolution du bug sur le chat qui est pas notifier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
     1
package com.beem.project.beem.jingle;
8
1b063c2d1096 Begin work on FileSender class which will serve to send a file over Jingle
Da Risk <darisk972@gmail.com>
parents: 7
diff changeset
     2
12
c9ff263c29ad Now the exchange of data work some times.
Da Risk <darisk972@gmail.com>
parents: 8
diff changeset
     3
import java.net.UnknownHostException;
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
     4
import java.util.ArrayList;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
     5
import java.util.List;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
     6
import org.jivesoftware.smack.ConnectionConfiguration;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
     7
import org.jivesoftware.smack.XMPPConnection;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
     8
import org.jivesoftware.smack.XMPPException;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
     9
import org.jivesoftware.smackx.jingle.JingleManager;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    10
import org.jivesoftware.smackx.jingle.JingleSession;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    11
import org.jivesoftware.smackx.jingle.listeners.JingleSessionListener;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    12
import org.jivesoftware.smackx.jingle.media.JingleMediaManager;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    13
import org.jivesoftware.smackx.jingle.media.PayloadType;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    14
import org.jivesoftware.smackx.jingle.nat.BasicTransportManager;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    15
import org.jivesoftware.smackx.jingle.nat.TransportCandidate;
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    16
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    17
/**
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    18
 * @author darisk
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    19
 * 
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    20
 */
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    21
public class Caller {
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    22
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    23
	private XMPPConnection con;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    24
	private String login;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    25
	private String password;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    26
	private JingleManager jingleManager;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    27
	private List<JingleMediaManager> mediaManagers;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    28
	private JingleSession out;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    29
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    30
	public Caller(final String login, final String pass, String server) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    31
		if (server == null || server.equals(""))
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    32
			server = "localhost";
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    33
		//XMPPConnection.DEBUG_ENABLED = true;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    34
		this.login = login;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    35
		this.password = pass;
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    36
		ConnectionConfiguration conf = new ConnectionConfiguration(server);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    37
		conf.setRosterLoadedAtLogin(false);
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    38
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    39
		con = new XMPPConnection(conf);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    40
		try {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    41
			con.connect();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    42
			con.login(this.login, this.password, "Caller");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    43
			initialize();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    44
		} catch (XMPPException e) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    45
			// TODO Auto-generated catch block
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    46
			System.err.println("Echec de la connexion au serveru");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    47
			e.printStackTrace();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    48
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    49
	}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    50
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    51
	public void call(final String destinataire) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    52
		try {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    53
			out = jingleManager.createOutgoingJingleSession(destinataire);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    54
			// TODO configure out avec addMediaSession et addNegociator
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    55
			out.addListener(new JingleSessionListener() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    56
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    57
				@Override
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    58
				public void sessionRedirected(final String redirection,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    59
						final JingleSession jingleSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    60
					// TODO Auto-generated method stub
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    61
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    62
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    63
				@Override
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    64
				public void sessionMediaReceived(
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    65
						final JingleSession jingleSession,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    66
						final String participant) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    67
					// TODO Auto-generated method stub
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    68
					System.out.println("Session Media received from "
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    69
							+ participant);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    70
				}
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
    71
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    72
				@Override
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    73
				public void sessionEstablished(final PayloadType pt,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    74
						final TransportCandidate remoteCandidate,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    75
						final TransportCandidate localCandidate,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    76
						final JingleSession jingleSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    77
					System.out.println("Session established");
186
7aec70b9ca79 IssueID #100
nikita@nikita-lab
parents: 57
diff changeset
    78
					//String name = localCandidate.getName();
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    79
					String ip = localCandidate.getIp();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    80
					int port = localCandidate.getPort();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    81
					System.out
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    82
							.println("Session established waiting connection on "
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    83
									+ ip + ":" + port);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    84
					try {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    85
						try {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    86
							FileSender fs = new FileSender(ip, port,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    87
									"/tmp/img.jpeg");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    88
							fs.start();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    89
							fs.join();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    90
							System.out.println("End of transfer");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    91
						} finally {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    92
							jingleSession.terminate();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    93
						}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    94
					} catch (UnknownHostException e) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    95
						System.err.println("Can't create server");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    96
					} catch (InterruptedException e) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    97
					} catch (XMPPException e) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    98
						System.err.println("Probably lost the connection");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
    99
						e.printStackTrace();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   100
					}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   101
				}
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   102
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   103
				@Override
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   104
				public void sessionDeclined(final String reason,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   105
						final JingleSession jingleSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   106
					System.out.println("Session "
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   107
							+ jingleSession.getResponder()
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   108
							+ "declined because " + reason);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   109
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   110
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   111
				@Override
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   112
				public void sessionClosedOnError(final XMPPException e,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   113
						final JingleSession jingleSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   114
					System.out
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   115
							.println("Session " + jingleSession.getResponder()
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   116
									+ " closed on error");
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   117
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   118
				}
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   119
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   120
				@Override
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   121
				public void sessionClosed(final String reason,
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   122
						final JingleSession jingleSession) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   123
					System.out.println("Session "
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   124
							+ jingleSession.getResponder() + "closed because "
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   125
							+ reason);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   126
				}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   127
			});
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   128
			out.startOutgoing();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   129
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   130
		} catch (XMPPException e) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   131
			// TODO Auto-generated catch block
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   132
			e.printStackTrace();
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   133
		}
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   134
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   135
	}
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   136
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   137
	private void initialize() {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   138
		mediaManagers = new ArrayList<JingleMediaManager>();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   139
		mediaManagers.add(new SenderMediaManager(new BasicTransportManager()));
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   140
		JingleManager.setJingleServiceEnabled();
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   141
		jingleManager = new JingleManager(con, mediaManagers);
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   142
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   143
	}
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   144
13
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   145
	/**
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   146
	 * @param args
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   147
	 *            Program args
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   148
	 * @throws InterruptedException
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   149
	 *             exception
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   150
	 */
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   151
	public static void main(final String[] args) throws InterruptedException {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   152
		if (args.length < 3) {
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   153
			System.err.println("Not enough parameters");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   154
			System.err.println("Usage : Caller user password server jidtocall");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   155
		}
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   156
		Caller test = new Caller(args[0], args[1], args[2]);
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   157
		test.call("test2@nikita-rack/TEST");
e684f11070d5 ajout de jlibrtp
nikita@nikita-rack
parents: 12
diff changeset
   158
		Thread.sleep(60000);
7
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   159
	}
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   160
c2941cee7327 Ajout de programme qui peuvent s'echanger des donnees jingle et negocier une
Da Risk <darisk972@gmail.com>
parents:
diff changeset
   161
}