package org.mconf.bbb.api;
import java.io.ByteArrayInputStream;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
public class JoinServiceProxy {
private static final Logger log = LoggerFactory.getLogger(JoinServiceProxy.class);
private String serverVersion = null, serverUrl = null;
private JoinServiceBase joinService = null;
public void setServer(String serverUrl) {
if (serverUrl == null)
return;
serverUrl = serverUrl.toLowerCase();
if (!serverUrl.matches("http://(.*)"))
serverUrl = "http://" + serverUrl;
if (this.serverUrl != null
&& this.serverUrl.equals(serverUrl))
return;
joinService = null;
if (isBigBlueButtonServer(serverUrl)) {
if (serverVersion.equals(new JoinService0Dot7().getVersion()))
joinService = new JoinService0Dot7();
else if (serverVersion.equals(new JoinService0Dot8().getVersion()))
joinService = new JoinService0Dot8();
else
log.debug("Unknown server version {}", serverVersion);
if (joinService != null)
joinService.setServer(serverUrl);
}
}
public void setServer(String serverUrl, String salt) {
setServer(serverUrl);
if (joinService != null
&& joinService.getClass() == JoinService0Dot8.class)
((JoinService0Dot8) joinService).setSalt(salt);
}
public JoinServiceBase getJoinService() {
return joinService;
}
public String getServerVersion() {
return serverVersion;
}
public boolean isBigBlueButtonServer(String serverUrl) {
if (this.serverUrl != null && this.serverUrl.equals(serverUrl))
return serverVersion == null;
serverVersion = getBigBlueButtonVersion(serverUrl);
if (serverVersion != null) {
this.serverUrl = serverUrl;
return true;
} else {
return false;
}
}
public static String getBigBlueButtonVersion(String serverUrl) {
try {
HttpClient client = new DefaultHttpClient();
HttpGet method = new HttpGet(serverUrl + "/bigbluebutton/api");
HttpResponse httpResponse = client.execute(method);
if (httpResponse.getStatusLine().getStatusCode() != 200)
return null;
String response = EntityUtils.toString(httpResponse.getEntity());
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new ByteArrayInputStream(response.getBytes("UTF-8")));
doc.getDocumentElement().normalize();
Element nodeResponse = (Element) doc.getElementsByTagName("response").item(0);
String returncode = ParserUtils.getNodeValue(nodeResponse, "returncode");
if (!returncode.equals("SUCCESS"))
return null;
//return ParserUtils.getNodeValue(nodeResponse, "version");
return "0.8";
} catch (Exception e) {
return null;
}
}
public void resetJoinedMeeting() {
if (joinService != null)
joinService.resetJoinedMeeting();
}
}