From 31e5db050cf59e8ca507de8c34088d847a241aaa Mon Sep 17 00:00:00 2001
From: Paul-Christian Volkmer <paul-christian.volkmer@mni.thm.de>
Date: Tue, 9 Oct 2012 12:17:40 +0200
Subject: [PATCH] Feature #3937: Create action providing socket url

---
 .../java/de/thm/arsnova/SessionController.java     | 11 +++++++++++
 .../thm/arsnova/socket/ARSnovaSocketIOServer.java  | 14 +++++++++++---
 src/main/webapp/WEB-INF/spring/spring-main.xml     |  2 +-
 src/main/webapp/arsnova.properties.example         |  5 ++++-
 4 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/src/main/java/de/thm/arsnova/SessionController.java b/src/main/java/de/thm/arsnova/SessionController.java
index edd5df3c..b617a3c9 100644
--- a/src/main/java/de/thm/arsnova/SessionController.java
+++ b/src/main/java/de/thm/arsnova/SessionController.java
@@ -90,4 +90,15 @@ public class SessionController {
 		response.setStatus(HttpStatus.SERVICE_UNAVAILABLE.value());
 		return null;
 	}
+	
+	@RequestMapping(value="/socketurl", method=RequestMethod.GET)
+	@ResponseBody
+	public String getSocketUrl() {
+		StringBuilder url = new StringBuilder();
+		
+		url.append(server.isUseSSL() ? "https://" : "http://");
+		url.append(server.getHostIp() + ":" + server.getPortNumber());
+		
+		return url.toString();
+	}
 }
diff --git a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
index d37b11ea..97259883 100644
--- a/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
+++ b/src/main/java/de/thm/arsnova/socket/ARSnovaSocketIOServer.java
@@ -37,13 +37,13 @@ public class ARSnovaSocketIOServer {
 	private final ConcurrentHashMap<UUID, User> socketid2user = new ConcurrentHashMap<UUID, User>();
 	
 	private int portNumber;
+	private String hostIp;
 	private boolean useSSL = false;
 	private String keystore;
 	private String storepass;
 	private final Configuration config;
 	private SocketIOServer server;
-
-
+	
 	public ARSnovaSocketIOServer() {
 		config = new Configuration();
 	}
@@ -55,7 +55,7 @@ public class ARSnovaSocketIOServer {
 		System.setProperty("java.net.preferIPv4Stack" , "true");
 		
 		config.setPort(portNumber);
-		config.setHostname("0.0.0.0");
+		config.setHostname(hostIp);
 		if(useSSL) {
 			try {
 				InputStream stream = new FileInputStream(keystore);
@@ -140,6 +140,14 @@ public class ARSnovaSocketIOServer {
 		this.portNumber = portNumber;
 	}
 
+	public String getHostIp() {
+		return hostIp;
+	}
+
+	public void setHostIp(String hostIp) {
+		this.hostIp = hostIp;
+	}
+	
 	public String getStorepass() {
 		return storepass;
 	}
diff --git a/src/main/webapp/WEB-INF/spring/spring-main.xml b/src/main/webapp/WEB-INF/spring/spring-main.xml
index 8f11efeb..dfd1f886 100644
--- a/src/main/webapp/WEB-INF/spring/spring-main.xml
+++ b/src/main/webapp/WEB-INF/spring/spring-main.xml
@@ -64,7 +64,7 @@
 
 	<bean id="socketServer" class="de.thm.arsnova.socket.ARSnovaSocketIOServer"
 		init-method="startServer" destroy-method="stopServer" scope="singleton"
-		p:portNumber="10443" p:useSSL="${security.ssl}" p:keystore="${security.keystore}"
+		p:portNumber="${socketio.port}" p:hostIp="${socketio.ip}" p:useSSL="${security.ssl}" p:keystore="${security.keystore}"
 		p:storepass="${security.storepass}" />
 
 </beans>
diff --git a/src/main/webapp/arsnova.properties.example b/src/main/webapp/arsnova.properties.example
index 9133b835..f62f81f0 100644
--- a/src/main/webapp/arsnova.properties.example
+++ b/src/main/webapp/arsnova.properties.example
@@ -19,4 +19,7 @@ feedback.cleanup=10
 
 couchdb.host=localhost
 couchdb.port=5984
-couchdb.name=arsnova
\ No newline at end of file
+couchdb.name=arsnova
+
+socketio.ip=0.0.0.0
+socketio.port=10443
\ No newline at end of file
-- 
GitLab