2 TutorialRegistration.java
3 Copyright (C) 2010 Belledonne Communications SARL
5 This program is free software; you can redistribute it and/or
6 modify it under the terms of the GNU General Public License
7 as published by the Free Software Foundation; either version 2
8 of the License, or (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 GNU General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with this program; if not, write to the Free Software
17 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 package org.linphone.core.tutorials;
21 import org.linphone.core.LinphoneAddress;
22 import org.linphone.core.LinphoneCall;
23 import org.linphone.core.LinphoneChatMessage;
24 import org.linphone.core.LinphoneChatRoom;
25 import org.linphone.core.LinphoneCore;
26 import org.linphone.core.LinphoneCore.EcCalibratorStatus;
27 import org.linphone.core.LinphoneCoreException;
28 import org.linphone.core.LinphoneCoreFactory;
29 import org.linphone.core.LinphoneCoreListener;
30 import org.linphone.core.LinphoneFriend;
31 import org.linphone.core.LinphoneProxyConfig;
32 import org.linphone.core.LinphoneCall.State;
33 import org.linphone.core.LinphoneCore.GlobalState;
34 import org.linphone.core.LinphoneCore.RegistrationState;
38 * This program is a _very_ simple usage example of liblinphone.
39 * Demonstrating how to initiate a SIP registration from a sip uri identity
40 * passed from the command line.
42 * First argument must be like sip:jehan@sip.linphone.org, second must be password.
44 * ex registration sip:jehan@sip.linphone.org secret
46 * Ported from registration.c
48 * @author Guillaume Beraudo
51 public class TutorialRegistration implements LinphoneCoreListener {
52 private boolean running;
53 private TutorialNotifier TutorialNotifier;
56 public TutorialRegistration(TutorialNotifier TutorialNotifier) {
57 this.TutorialNotifier = TutorialNotifier;
60 public TutorialRegistration() {
61 this.TutorialNotifier = new TutorialNotifier();
66 * Registration state notification listener
68 public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg,RegistrationState cstate, String smessage) {
69 write(cfg.getIdentity() + " : "+smessage);
72 public void show(LinphoneCore lc) {}
73 public void byeReceived(LinphoneCore lc, String from) {}
74 public void authInfoRequested(LinphoneCore lc, String realm, String username) {}
75 public void displayStatus(LinphoneCore lc, String message) {}
76 public void displayMessage(LinphoneCore lc, String message) {}
77 public void displayWarning(LinphoneCore lc, String message) {}
78 public void globalState(LinphoneCore lc, GlobalState state, String message) {}
79 public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf,String url) {}
80 public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) {}
81 public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from, String message) {}
82 public void callState(LinphoneCore lc, LinphoneCall call, State cstate, String msg) {}
83 public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status,int delay_ms, Object data) {}
84 public void callEncryptionChanged(LinphoneCore lc, LinphoneCall call,boolean encrypted, String authenticationToken) {}
85 public void notifyReceived(LinphoneCore lc, LinphoneCall call, LinphoneAddress from, byte[] event){}
87 public static void main(String[] args) {
88 // Check tutorial was called with the right number of arguments
89 if (args.length != 2) {
90 throw new IllegalArgumentException("Bad number of arguments");
93 // Create tutorial object
94 TutorialRegistration tutorial = new TutorialRegistration();
96 // takes sip uri identity from the command line arguments
97 String userSipAddress = args[1];
98 // takes password from the command line arguments
99 String userSipPassword = args[2];
100 tutorial.launchTutorial(userSipAddress, userSipPassword);
101 } catch (Exception e) {
108 public void launchTutorial(String sipAddress, String password) throws LinphoneCoreException {
109 final LinphoneCoreFactory lcFactory = LinphoneCoreFactory.instance();
111 // First instantiate the core Linphone object given only a listener.
112 // The listener will react to events in Linphone core.
113 LinphoneCore lc = lcFactory.createLinphoneCore(this);
119 LinphoneAddress address = lcFactory.createLinphoneAddress(sipAddress);
120 String username = address.getUserName();
121 String domain = address.getDomain();
124 if (password != null) {
125 // create authentication structure from identity and add to linphone
126 lc.addAuthInfo(lcFactory.createAuthInfo(username, password, null));
129 // create proxy config
130 LinphoneProxyConfig proxyCfg = lcFactory.createProxyConfig(sipAddress, domain, null, true);
131 proxyCfg.setExpires(2000);
132 lc.addProxyConfig(proxyCfg); // add it to linphone
133 lc.setDefaultProxyConfig(proxyCfg);
137 // main loop for receiving notifications and doing background linphonecore work
140 lc.iterate(); // first iterate initiates registration
146 lc.getDefaultProxyConfig().edit();
147 lc.getDefaultProxyConfig().enableRegister(false);
148 lc.getDefaultProxyConfig().done();
149 while(lc.getDefaultProxyConfig().getState() != RegistrationState.RegistrationCleared) {
154 // Then register again
155 lc.getDefaultProxyConfig().edit();
156 lc.getDefaultProxyConfig().enableRegister(true);
157 lc.getDefaultProxyConfig().done();
159 while(lc.getDefaultProxyConfig().getState() != RegistrationState.RegistrationOk
160 && lc.getDefaultProxyConfig().getState() != RegistrationState.RegistrationFailed) {
165 // Automatic unregistration on exit
167 write("Shutting down linphone...");
168 // You need to destroy the LinphoneCore object when no longer used
173 private void sleep(int ms) {
176 } catch(InterruptedException ie) {
177 write("Interrupted!\nAborting");
182 public void stopMainLoop() {
187 private void write(String s) {
188 TutorialNotifier.notify(s);
192 public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr,
193 LinphoneChatMessage message) {
194 // TODO Auto-generated method stub