Browse Source

Transports supported by server could be configured

master
Nikita 13 years ago
parent
commit
1a476180d2
  1. 13
      src/main/java/com/corundumstudio/socketio/AuthorizeHandler.java
  2. 44
      src/main/java/com/corundumstudio/socketio/Configuration.java
  3. 38
      src/main/java/com/corundumstudio/socketio/Transport.java

13
src/main/java/com/corundumstudio/socketio/AuthorizeHandler.java

@ -51,9 +51,6 @@ import com.corundumstudio.socketio.scheduler.CancelableScheduler;
import com.corundumstudio.socketio.scheduler.SchedulerKey;
import com.corundumstudio.socketio.scheduler.SchedulerKey.Type;
import com.corundumstudio.socketio.transport.BaseClient;
import com.corundumstudio.socketio.transport.FlashSocketTransport;
import com.corundumstudio.socketio.transport.WebSocketTransport;
import com.corundumstudio.socketio.transport.XHRPollingTransport;
@Sharable
public class AuthorizeHandler extends SimpleChannelUpstreamHandler implements Disconnectable {
@ -91,34 +88,34 @@ public class AuthorizeHandler extends SimpleChannelUpstreamHandler implements Di
return;
}
if (queryDecoder.getPath().equals(connectPath)) {
authorize(channel, req, queryDecoder.getParameters());
String origin = req.getHeader(HttpHeaders.Names.ORIGIN);
authorize(channel, origin, queryDecoder.getParameters());
return;
}
}
ctx.sendUpstream(e);
}
private void authorize(Channel channel, HttpRequest req, Map<String, List<String>> params)
private void authorize(Channel channel, String origin, Map<String, List<String>> params)
throws IOException {
final UUID sessionId = UUID.randomUUID();
authorizedSessionIds.add(sessionId);
scheduleDisconnect(channel, sessionId);
String transports = WebSocketTransport.NAME + "," + FlashSocketTransport.NAME + "," + XHRPollingTransport.NAME;
String heartbeatTimeoutVal = String.valueOf(configuration.getHeartbeatTimeout());
if (!configuration.isHeartbeatsEnabled()) {
heartbeatTimeoutVal = "";
}
String msg = sessionId + ":" + heartbeatTimeoutVal + ":" + configuration.getCloseTimeout() + ":" + transports;
String msg = sessionId + ":" + heartbeatTimeoutVal + ":" + configuration.getCloseTimeout() + ":" + configuration.getTransports();
List<String> jsonpParams = params.get("jsonp");
String jsonpParam = null;
if (jsonpParams != null) {
jsonpParam = jsonpParams.get(0);
}
String origin = req.getHeader(HttpHeaders.Names.ORIGIN);
channel.write(new AuthorizeMessage(msg, jsonpParam, origin, sessionId));
log.debug("New sessionId: {} authorized", sessionId);
}

44
src/main/java/com/corundumstudio/socketio/Configuration.java

@ -16,6 +16,8 @@
package com.corundumstudio.socketio;
import java.io.InputStream;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@ -27,6 +29,8 @@ public class Configuration {
private String jsonTypeFieldName = "@class";
private String context = "/socket.io";
private String transports = join(Arrays.asList(Transport.WEBSOCKET, Transport.FLASHSOCKET, Transport.XHRPOLLING));
private Executor bossExecutor = Executors.newCachedThreadPool();
private Executor workerExecutor = Executors.newCachedThreadPool();
@ -71,6 +75,17 @@ public class Configuration {
setJsonTypeFieldName(conf.getJsonTypeFieldName());
setKeyStorePassword(conf.getKeyStorePassword());
setKeyStore(conf.getKeyStore());
setTransports(conf.getTransports());
}
private String join(List<Transport> transports) {
StringBuilder result = new StringBuilder();
for (Transport transport : transports) {
result.append(transport.getValue());
result.append(",");
}
result.setLength(result.length()-1);
return result.toString();
}
public String getJsonTypeFieldName() {
@ -214,6 +229,11 @@ public class Configuration {
this.pollingDuration = pollingDuration;
}
/**
* SSL key store password
*
* @param keyStorePassword
*/
public void setKeyStorePassword(String keyStorePassword) {
this.keyStorePassword = keyStorePassword;
}
@ -221,6 +241,11 @@ public class Configuration {
return keyStorePassword;
}
/**
* SSL key store stream, maybe appointed to any source
*
* @param keyStore
*/
public void setKeyStore(InputStream keyStore) {
this.keyStore = keyStore;
}
@ -228,4 +253,23 @@ public class Configuration {
return keyStore;
}
/**
* Transports supported by server
*
* @param transports - list of transports
*/
public void setTransports(List<Transport> transports) {
if (transports.isEmpty()) {
throw new IllegalArgumentException("Transports list can't be empty");
}
this.transports = join(transports);
}
// used in cloning
private void setTransports(String transports) {
this.transports = transports;
}
public String getTransports() {
return transports;
}
}

38
src/main/java/com/corundumstudio/socketio/Transport.java

@ -0,0 +1,38 @@
/**
* Copyright 2012 Nikita Koksharov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.corundumstudio.socketio;
import com.corundumstudio.socketio.transport.FlashSocketTransport;
import com.corundumstudio.socketio.transport.WebSocketTransport;
import com.corundumstudio.socketio.transport.XHRPollingTransport;
public enum Transport {
WEBSOCKET(WebSocketTransport.NAME),
FLASHSOCKET(FlashSocketTransport.NAME),
XHRPOLLING(XHRPollingTransport.NAME);
private final String value;
Transport(String value) {
this.value = value;
}
public String getValue() {
return value;
}
}
Loading…
Cancel
Save