From 2e953b44c8c986251c32ce2c9c4eb2455710e44f Mon Sep 17 00:00:00 2001
From: Guillaume Beraudo <guillaume.beraudo@linphone.org>
Date: Mon, 13 Dec 2010 14:51:12 +0100
Subject: [PATCH] Bind expires and getstate from proxyconfig. Update
 registration tutorial to manually unregister and re register.

---
 .../core/tutorials/TutorialRegistration.java  | 48 +++++++++++++------
 coreapi/linphonecore_jni.cc                   |  7 +++
 .../linphone/core/LinphoneProxyConfig.java    |  7 +++
 3 files changed, 47 insertions(+), 15 deletions(-)

diff --git a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java
index 08e3c4ea33..7ca24bbf02 100644
--- a/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java
+++ b/coreapi/help/java/org/linphone/core/tutorials/TutorialRegistration.java
@@ -65,9 +65,6 @@ public class TutorialRegistration implements LinphoneCoreListener {
 	 */
 	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) {}
@@ -127,36 +124,57 @@ public class TutorialRegistration implements LinphoneCoreListener {
 
 			// create proxy config
 			LinphoneProxyConfig proxyCfg = lcFactory.createProxyConfig(sipAddress, domain, null, true);
+			proxyCfg.setExpires(2000);
 			lc.addProxyConfig(proxyCfg); // add it to linphone
 			lc.setDefaultProxyConfig(proxyCfg);
 
-			
-			
+
 			
 			// main loop for receiving notifications and doing background linphonecore work
 			running = true;
 			while (running) {
 				lc.iterate(); // first iterate initiates registration 
-				try{
-					Thread.sleep(50);
-				} catch(InterruptedException ie) {
-					write("Interrupted!\nAborting");
-					return;
-				}
+				sleep(50);
+			}
+
+
+			// Unregister
+			lc.getDefaultProxyConfig().edit();
+			lc.getDefaultProxyConfig().enableRegister(false);
+			lc.getDefaultProxyConfig().done();
+			while(lc.getDefaultProxyConfig().getState() != RegistrationState.RegistrationCleared) {
+				lc.iterate();
+				sleep(50);
+			}
+
+			// Then register again
+			lc.getDefaultProxyConfig().edit();
+			lc.getDefaultProxyConfig().enableRegister(true);
+			lc.getDefaultProxyConfig().done();
+
+			while(lc.getDefaultProxyConfig().getState() != RegistrationState.RegistrationOk
+					&& lc.getDefaultProxyConfig().getState() != RegistrationState.RegistrationFailed) {
+				lc.iterate();
+				sleep(50);
 			}
 
 
 			// Automatic unregistration on exit
-			
-			
 		} finally {
-			write("Shutting down...");
+			write("Shutting down linphone...");
 			// You need to destroy the LinphoneCore object when no longer used
 			lc.destroy();
-			write("Exited");
 		}
 	}
 
+	private void sleep(int ms) {
+		try {
+			Thread.sleep(ms);
+		} catch(InterruptedException ie) {
+			write("Interrupted!\nAborting");
+			return;
+		}
+	}
 
 	public void stopMainLoop() {
 		running=false;
diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc
index d22edef617..3a9346999f 100644
--- a/coreapi/linphonecore_jni.cc
+++ b/coreapi/linphonecore_jni.cc
@@ -924,3 +924,10 @@ extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_sendMessage(JNIEnv*
 
 }
 
+extern "C" int Java_org_linphone_core_LinphoneProxyConfigImpl_getState(JNIEnv*  env,jobject thiz,jlong ptr) {
+	return (int) linphone_proxy_config_get_state((const LinphoneProxyConfig *) ptr);
+}
+extern "C" void Java_org_linphone_core_LinphoneProxyConfigImpl_setExpires(JNIEnv*  env,jobject thiz,jlong ptr,jint delay) {
+	linphone_proxy_config_expires((LinphoneProxyConfig *) ptr, (int) delay);
+}
+
diff --git a/java/common/org/linphone/core/LinphoneProxyConfig.java b/java/common/org/linphone/core/LinphoneProxyConfig.java
index 729fd249d5..3144482758 100644
--- a/java/common/org/linphone/core/LinphoneProxyConfig.java
+++ b/java/common/org/linphone/core/LinphoneProxyConfig.java
@@ -113,4 +113,11 @@ public interface LinphoneProxyConfig {
 	 */
 	public String getRoute();
 	
+	LinphoneCore.RegistrationState getState();
+	
+	/**
+	 * Sets the registration expiration time.
+	 * @param delay expiration time in seconds
+	 */
+	void setExpires(int delay);
 }
-- 
GitLab