diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java
new file mode 100644
index 000000000..f85cf88f8
--- /dev/null
+++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialBuddyStatus.java
@@ -0,0 +1,185 @@
+/*
+linphone
+Copyright (C) 2010 Belledonne Communications SARL
+ (simon.morlat@linphone.org)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+package org.linphone.core.tutorials;
+
+import org.linphone.core.LinphoneAddress;
+import org.linphone.core.LinphoneCall;
+import org.linphone.core.LinphoneChatRoom;
+import org.linphone.core.LinphoneCore;
+import org.linphone.core.LinphoneCoreException;
+import org.linphone.core.LinphoneCoreFactory;
+import org.linphone.core.LinphoneCoreListener;
+import org.linphone.core.LinphoneFriend;
+import org.linphone.core.LinphoneProxyConfig;
+import org.linphone.core.OnlineStatus;
+import org.linphone.core.LinphoneCall.State;
+import org.linphone.core.LinphoneCore.GlobalState;
+import org.linphone.core.LinphoneCore.RegistrationState;
+import org.linphone.core.LinphoneFriend.SubscribePolicy;
+
+/**
+ *
+ * This program is a _very_ simple usage example of liblinphone,
+ * demonstrating how to initiate SIP subscriptions and receive notifications
+ * from a sip uri identity passed from the command line.
+ *
Argument must be like sip:jehan@sip.linphone.org .
+ * ex budy_list sip:jehan@sip.linphone.org
+ *
Subscription is cleared on SIGINT
+ *
+ * Ported from buddy_status.c
+ *
+ * @author Guillaume Beraudo
+ *
+ */
+public class TutorialBuddyStatus implements LinphoneCoreListener {
+
+ private boolean running;
+ private TutorialNotifier TutorialNotifier;
+
+
+ public TutorialBuddyStatus(TutorialNotifier TutorialNotifier) {
+ this.TutorialNotifier = TutorialNotifier;
+ }
+
+ public TutorialBuddyStatus() {
+ this.TutorialNotifier = new TutorialNotifier();
+ }
+
+
+
+ public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf,String url) {
+ write("["+lf.getAddress().getUserName()+"] wants to see your status, accepting");
+ lf.edit();
+ lf.setIncSubscribePolicy(SubscribePolicy.SPAccept);
+ lf.done();
+ try {
+ lc.addFriend(lf);
+ } catch (LinphoneCoreException e) {
+ write("Error while adding friend [" + lf.getAddress().getUserName() + "] to linphone in the callback");
+ }
+ }
+
+ public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) {
+ write("New state [" + lf.getStatus() +"] for user id ["+lf.getAddress().getUserName()+"]");
+ }
+
+
+ public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg,RegistrationState cstate, String smessage) {}
+ public void show(LinphoneCore lc) {}
+ public void byeReceived(LinphoneCore lc, String from) {}
+ public void authInfoRequested(LinphoneCore lc, String realm, String username) {}
+ public void displayStatus(LinphoneCore lc, String message) {}
+ public void displayMessage(LinphoneCore lc, String message) {}
+ public void displayWarning(LinphoneCore lc, String message) {}
+ public void globalState(LinphoneCore lc, GlobalState state, String message) {}
+ public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from, String message) {}
+ public void callState(LinphoneCore lc, LinphoneCall call, State cstate, String msg) {}
+
+
+
+
+ public static void main(String[] args) {
+ // Check tutorial was called with the right number of arguments
+ if (args.length != 1) {
+ throw new IllegalArgumentException("Bad number of arguments");
+ }
+
+ // Create tutorial object
+ TutorialBuddyStatus tutorial = new TutorialBuddyStatus();
+ try {
+ String userSipAddress = args[1];
+ tutorial.launchTutorial(userSipAddress);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+
+ public void launchTutorial(String sipAddress) throws LinphoneCoreException {
+ final LinphoneCoreFactory lcFactory = LinphoneCoreFactory.instance();
+
+ // First instantiate the core Linphone object given only a listener.
+ // The listener will react to events in Linphone core.
+ LinphoneCore lc = lcFactory.createLinphoneCore(this);
+
+
+ try {
+
+ // Create friend address
+ LinphoneFriend lf = lcFactory.createLinphoneFriend(sipAddress);
+ if (lf == null) {
+ write("Could not create friend; weird SIP address?");
+ return;
+ }
+
+ lf.enableSubscribes(true);
+ lf.setIncSubscribePolicy(SubscribePolicy.SPAccept);
+ try {
+ lc.addFriend(lf);
+ } catch (LinphoneCoreException e) {
+ write("Error while adding friend " + lf.getAddress().getUserName() + " to linphone");
+ }
+
+
+ lc.setPresenceInfo(0, null, OnlineStatus.Online);
+
+
+ // main loop for receiving notifications and doing background linphonecore work
+ running = true;
+ while (running) {
+ lc.iterate();
+ try{
+ Thread.sleep(50);
+ } catch(InterruptedException ie) {
+ write("Interrupted!\nAborting");
+ return;
+ }
+ }
+
+
+ lc.setPresenceInfo(0, null, OnlineStatus.Offline);
+ lc.iterate();
+
+ lf.edit();
+ lf.enableSubscribes(false);
+ lf.done();
+ lc.iterate();
+
+
+ } finally {
+ write("Shutting down...");
+ // You need to destroy the LinphoneCore object when no longer used
+ lc.destroy();
+ write("Exited");
+ }
+ }
+
+
+ public void stopMainLoop() {
+ running=false;
+ }
+
+
+ private void write(String s) {
+ TutorialNotifier.notify(s);
+ }
+
+}
diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java
new file mode 100644
index 000000000..ff6787439
--- /dev/null
+++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialChatRoom.java
@@ -0,0 +1,144 @@
+/*
+linphone
+Copyright (C) 2010 Belledonne Communications SARL
+ (simon.morlat@linphone.org)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+package org.linphone.core.tutorials;
+
+import org.linphone.core.LinphoneAddress;
+import org.linphone.core.LinphoneCall;
+import org.linphone.core.LinphoneChatRoom;
+import org.linphone.core.LinphoneCore;
+import org.linphone.core.LinphoneCoreException;
+import org.linphone.core.LinphoneCoreFactory;
+import org.linphone.core.LinphoneCoreListener;
+import org.linphone.core.LinphoneFriend;
+import org.linphone.core.LinphoneProxyConfig;
+import org.linphone.core.LinphoneCall.State;
+import org.linphone.core.LinphoneCore.GlobalState;
+import org.linphone.core.LinphoneCore.RegistrationState;
+
+
+/**
+ * This program is a _very_ simple usage example of liblinphone.
+ * It demonstrates how to send/receive SIP MESSAGE from a sip uri identity
+ * passed from the command line.
+ *
+ * Argument must be like sip:jehan@sip.linphone.org .
+ *
+ * ex chatroom sip:jehan@sip.linphone.org
+ * just takes a sip-uri as first argument and attempts to call it.
+ *
+ * Ported from chatroom.c
+ *
+ * @author Guillaume Beraudo
+ *
+ */
+public class TutorialChatRoom implements LinphoneCoreListener {
+ private boolean running;
+ private TutorialNotifier TutorialNotifier;
+
+
+ public TutorialChatRoom(TutorialNotifier TutorialNotifier) {
+ this.TutorialNotifier = TutorialNotifier;
+ }
+
+ public TutorialChatRoom() {
+ this.TutorialNotifier = new TutorialNotifier();
+ }
+
+
+
+ public void show(LinphoneCore lc) {}
+ public void byeReceived(LinphoneCore lc, String from) {}
+ public void authInfoRequested(LinphoneCore lc, String realm, String username) {}
+ public void displayStatus(LinphoneCore lc, String message) {}
+ public void displayMessage(LinphoneCore lc, String message) {}
+ public void displayWarning(LinphoneCore lc, String message) {}
+ public void globalState(LinphoneCore lc, GlobalState state, String message) {}
+ public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg,RegistrationState cstate, String smessage) {}
+ public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf,String url) {}
+ public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) {}
+ public void callState(LinphoneCore lc, LinphoneCall call, State cstate, String msg){}
+
+
+
+ public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from, String message) {
+ write("Message ["+message+"] received from ["+from.asString()+"]");
+ }
+
+
+
+ public static void main(String[] args) {
+ // Check tutorial was called with the right number of arguments
+ if (args.length != 1) {
+ throw new IllegalArgumentException("Bad number of arguments");
+ }
+
+ // Create tutorial object
+ TutorialChatRoom tutorial = new TutorialChatRoom();
+ try {
+ String destinationSipAddress = args[1];
+ tutorial.launchTutorial(destinationSipAddress);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+
+ public void launchTutorial(String destinationSipAddress) throws LinphoneCoreException {
+
+ // First instantiate the core Linphone object given only a listener.
+ // The listener will react to events in Linphone core.
+ LinphoneCore lc = LinphoneCoreFactory.instance().createLinphoneCore(this);
+
+ try {
+ LinphoneChatRoom chatRoom = lc.createChatRoom(destinationSipAddress);
+ chatRoom.sendMessage("Hello world");
+
+ // main loop for receiving notifications and doing background linphonecore work
+ running = true;
+ while (running) {
+ lc.iterate();
+ try{
+ Thread.sleep(50);
+ } catch(InterruptedException ie) {
+ write("Interrupted!\nAborting");
+ return;
+ }
+ }
+
+ } finally {
+ write("Shutting down...");
+ // You need to destroy the LinphoneCore object when no longer used
+ lc.destroy();
+ write("Exited");
+ }
+ }
+
+
+ public void stopMainLoop() {
+ running=false;
+ }
+
+
+ private void write(String s) {
+ TutorialNotifier.notify(s);
+ }
+
+}
diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java
new file mode 100644
index 000000000..e116c3523
--- /dev/null
+++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialHelloWorld.java
@@ -0,0 +1,157 @@
+/*
+linphone
+Copyright (C) 2010 Belledonne Communications SARL
+ (simon.morlat@linphone.org)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+package org.linphone.core.tutorials;
+
+import org.linphone.core.LinphoneAddress;
+import org.linphone.core.LinphoneCall;
+import org.linphone.core.LinphoneChatRoom;
+import org.linphone.core.LinphoneCore;
+import org.linphone.core.LinphoneCoreException;
+import org.linphone.core.LinphoneCoreFactory;
+import org.linphone.core.LinphoneCoreListener;
+import org.linphone.core.LinphoneFriend;
+import org.linphone.core.LinphoneProxyConfig;
+import org.linphone.core.LinphoneCall.State;
+import org.linphone.core.LinphoneCore.GlobalState;
+import org.linphone.core.LinphoneCore.RegistrationState;
+
+
+/**
+ * This program is a _very_ simple usage example of liblinphone.
+ * It just takes a sip-uri as first argument and attempts to call it.
+ *
+ * Ported from helloworld.c
+ *
+ * @author Guillaume Beraudo
+ *
+ */
+public class TutorialHelloWorld implements LinphoneCoreListener {
+ private boolean running;
+ private TutorialNotifier TutorialNotifier;
+
+
+ public TutorialHelloWorld(TutorialNotifier TutorialNotifier) {
+ this.TutorialNotifier = TutorialNotifier;
+ }
+
+ public TutorialHelloWorld() {
+ this.TutorialNotifier = new TutorialNotifier();
+ }
+
+
+
+ public void show(LinphoneCore lc) {}
+ public void byeReceived(LinphoneCore lc, String from) {}
+ public void authInfoRequested(LinphoneCore lc, String realm, String username) {}
+ public void displayStatus(LinphoneCore lc, String message) {}
+ public void displayMessage(LinphoneCore lc, String message) {}
+ public void displayWarning(LinphoneCore lc, String message) {}
+ public void globalState(LinphoneCore lc, GlobalState state, String message) {}
+ public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg,RegistrationState cstate, String smessage) {}
+ public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf,String url) {}
+ public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) {}
+ public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from, String message) {}
+
+ /*
+ * Call state notification listener
+ */
+ public void callState(LinphoneCore lc, LinphoneCall call, State cstate, String msg){
+ write("State: " + msg);
+
+ if (State.CallEnd.equals(cstate))
+ running = false;
+ }
+
+
+ public static void main(String[] args) {
+ // Check tutorial was called with the right number of arguments
+ if (args.length != 1) {
+ throw new IllegalArgumentException("Bad number of arguments");
+ }
+
+ // Create tutorial object
+ TutorialHelloWorld helloWorld = new TutorialHelloWorld();
+ try {
+ String destinationSipAddress = args[1];
+ helloWorld.launchTutorial(destinationSipAddress);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+
+ public void launchTutorial(String destinationSipAddress) throws LinphoneCoreException {
+
+ // First instantiate the core Linphone object given only a listener.
+ // The listener will react to events in Linphone core.
+ LinphoneCore lc = LinphoneCoreFactory.instance().createLinphoneCore(this);
+
+
+
+ try {
+ // Send the INVITE message to destination SIP address
+ LinphoneCall call = lc.invite(destinationSipAddress);
+ if (call == null) {
+ write("Could not place call to " + destinationSipAddress);
+ write("Aborting");
+ return;
+ }
+ write("Call to " + destinationSipAddress + " is in progress...");
+
+
+
+ // main loop for receiving notifications and doing background linphonecore work
+ running = true;
+ while (running) {
+ lc.iterate();
+ try{
+ Thread.sleep(50);
+ } catch(InterruptedException ie) {
+ write("Interrupted!\nAborting");
+ return;
+ }
+ }
+
+
+
+ if (!State.CallEnd.equals(call.getState())) {
+ write("Terminating the call");
+ lc.terminateCall(call);
+ }
+ } finally {
+ write("Shutting down...");
+ // You need to destroy the LinphoneCore object when no longer used
+ lc.destroy();
+ write("Exited");
+ }
+ }
+
+
+ public void stopMainLoop() {
+ running=false;
+ }
+
+
+ private void write(String s) {
+ TutorialNotifier.notify(s);
+ }
+
+}
diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialNotifier.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialNotifier.java
new file mode 100644
index 000000000..c8138214c
--- /dev/null
+++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialNotifier.java
@@ -0,0 +1,8 @@
+package org.linphone.core.tutorials;
+
+public class TutorialNotifier {
+
+ public void notify(String s) {
+ System.out.println(s);
+ }
+}
diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java
new file mode 100644
index 000000000..0f72594f8
--- /dev/null
+++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java
@@ -0,0 +1,164 @@
+/*
+linphone
+Copyright (C) 2010 Belledonne Communications SARL
+ (simon.morlat@linphone.org)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+package org.linphone.core.tutorials;
+
+import org.linphone.core.LinphoneAddress;
+import org.linphone.core.LinphoneCall;
+import org.linphone.core.LinphoneChatRoom;
+import org.linphone.core.LinphoneCore;
+import org.linphone.core.LinphoneCoreException;
+import org.linphone.core.LinphoneCoreFactory;
+import org.linphone.core.LinphoneCoreListener;
+import org.linphone.core.LinphoneFriend;
+import org.linphone.core.LinphoneProxyConfig;
+import org.linphone.core.LinphoneCall.State;
+import org.linphone.core.LinphoneCore.GlobalState;
+import org.linphone.core.LinphoneCore.RegistrationState;
+
+
+/**
+ * This program is a _very_ simple usage example of liblinphone.
+ * Demonstrating how to initiate a SIP registration from a sip uri identity
+ * passed from the command line.
+ *
+ * First argument must be like sip:jehan@sip.linphone.org, second must be password.
+ *
+ * ex registration sip:jehan@sip.linphone.org secret
+ *
+ * Ported from registration.c
+ *
+ * @author Guillaume Beraudo
+ *
+ */
+public class TutorialRegistration implements LinphoneCoreListener {
+ private boolean running;
+ private TutorialNotifier TutorialNotifier;
+
+
+ public TutorialRegistration(TutorialNotifier TutorialNotifier) {
+ this.TutorialNotifier = TutorialNotifier;
+ }
+
+ public TutorialRegistration() {
+ this.TutorialNotifier = new TutorialNotifier();
+ }
+
+
+ /*
+ * Registration state notification listener
+ */
+ public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg,RegistrationState cstate, String smessage) {
+ write(cfg.getIdentity() + " : "+smessage+"\n");
+
+ if (RegistrationState.RegistrationOk.equals(cstate))
+ running = false;
+ }
+
+ public void show(LinphoneCore lc) {}
+ public void byeReceived(LinphoneCore lc, String from) {}
+ public void authInfoRequested(LinphoneCore lc, String realm, String username) {}
+ public void displayStatus(LinphoneCore lc, String message) {}
+ public void displayMessage(LinphoneCore lc, String message) {}
+ public void displayWarning(LinphoneCore lc, String message) {}
+ public void globalState(LinphoneCore lc, GlobalState state, String message) {}
+ public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf,String url) {}
+ public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) {}
+ public void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from, String message) {}
+ public void callState(LinphoneCore lc, LinphoneCall call, State cstate, String msg) {}
+
+
+ public static void main(String[] args) {
+ // Check tutorial was called with the right number of arguments
+ if (args.length != 2) {
+ throw new IllegalArgumentException("Bad number of arguments");
+ }
+
+ // Create tutorial object
+ TutorialRegistration tutorial = new TutorialRegistration();
+ try {
+ String userSipAddress = args[1];
+ String userSipPassword = args[2];
+ tutorial.launchTutorial(userSipAddress, userSipPassword);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+
+ public void launchTutorial(String sipAddress, String password) throws LinphoneCoreException {
+ final LinphoneCoreFactory lcFactory = LinphoneCoreFactory.instance();
+
+ // First instantiate the core Linphone object given only a listener.
+ // The listener will react to events in Linphone core.
+ LinphoneCore lc = lcFactory.createLinphoneCore(this);
+
+
+ try {
+
+ LinphoneAddress address = lcFactory.createLinphoneAddress(sipAddress);
+ String username = address.getUserName();
+ String domain = address.getDomain();
+
+ if (password != null) {
+ lc.addAuthInfo(lcFactory.createAuthInfo(username, password, null));
+ }
+
+ LinphoneProxyConfig proxyCfg = lcFactory.createProxyConfig(sipAddress, domain, null, true);
+ lc.addProxyConfig(proxyCfg);
+ lc.setDefaultProxyConfig(proxyCfg);
+
+
+
+
+ // main loop for receiving notifications and doing background linphonecore work
+ running = true;
+ while (running) {
+ lc.iterate();
+ try{
+ Thread.sleep(50);
+ } catch(InterruptedException ie) {
+ write("Interrupted!\nAborting");
+ return;
+ }
+ }
+
+
+
+
+ } finally {
+ write("Shutting down...");
+ // You need to destroy the LinphoneCore object when no longer used
+ lc.destroy();
+ write("Exited");
+ }
+ }
+
+
+ public void stopMainLoop() {
+ running=false;
+ }
+
+
+ private void write(String s) {
+ TutorialNotifier.notify(s);
+ }
+
+}
diff --git a/java/common/org/linphone/core/LinphoneCoreFactory.java b/java/common/org/linphone/core/LinphoneCoreFactory.java
index 4089ca1fb..6629c3dc3 100644
--- a/java/common/org/linphone/core/LinphoneCoreFactory.java
+++ b/java/common/org/linphone/core/LinphoneCoreFactory.java
@@ -21,6 +21,7 @@ package org.linphone.core;
+
abstract public class LinphoneCoreFactory {
private static String factoryName = "org.linphone.core.LinphoneCoreFactoryImpl";
@@ -49,6 +50,8 @@ abstract public class LinphoneCoreFactory {
abstract public LinphoneAuthInfo createAuthInfo(String username,String password, String realm);
abstract public LinphoneCore createLinphoneCore(LinphoneCoreListener listener, String userConfig,String factoryConfig,Object userdata) throws LinphoneCoreException;
+ abstract public LinphoneCore createLinphoneCore(LinphoneCoreListener listener) throws LinphoneCoreException;
+
/**
* Constructs a LinphoneAddress object
* @param username
@@ -77,12 +80,12 @@ abstract public class LinphoneCoreFactory {
* @param friendUri a buddy address, must be a sip uri like sip:joe@sip.linphone.org
* @return a new LinphoneFriend with address initialized
*/
- abstract LinphoneFriend createLinphoneFriend(String friendUri);
+ abstract public LinphoneFriend createLinphoneFriend(String friendUri);
/**
* Create a new LinphoneFriend
* @return
*/
- abstract LinphoneFriend createLinphoneFriend();
+ abstract public LinphoneFriend createLinphoneFriend();
}