Skip to content

Commit

Permalink
Configuration.crossDomainPolicy param added. #116, #133
Browse files Browse the repository at this point in the history
  • Loading branch information
Nikita committed Jul 30, 2014
1 parent 13cb68b commit 13c954f
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 11 deletions.
21 changes: 18 additions & 3 deletions src/main/java/com/corundumstudio/socketio/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,8 @@ public class Configuration {
private String hostname;
private int port = -1;

private InputStream crossDomainPolicy;

private String keyStoreFormat = "JKS";
private InputStream keyStore;
private String keyStorePassword;
Expand All @@ -69,7 +71,7 @@ public class Configuration {
private JsonSupport jsonSupport = new JacksonJsonSupport(this);

private AuthorizationListener authorizationListener = new SuccessAuthorizationListener();

private String origin;

private AckMode ackMode = AckMode.AUTO_SUCCESS_ONLY;
Expand Down Expand Up @@ -119,6 +121,7 @@ public Configuration() {
setAckMode(conf.getAckMode());
setMaxFramePayloadLength(conf.getMaxFramePayloadLength());
setOrigin(conf.getOrigin());
setCrossDomainPolicy(conf.getCrossDomainPolicy());
}

private String join(Transport[] transports) {
Expand Down Expand Up @@ -480,9 +483,9 @@ public int getMaxFramePayloadLength() {
/**
* Set <b>Access-Control-Allow-Origin</b> header value for http each response.
* Default is {@code null}.
*
*
* If value is {@code null} then request {@code ORIGIN} header value used.
*
*
* @param origin
*/
public void setOrigin(String origin) {
Expand All @@ -492,4 +495,16 @@ public String getOrigin() {
return origin;
}

/**
* crossdomain.xml file stream used for flash-socket transport
*
* @param crossDomainPolicy
*/
public void setCrossDomainPolicy(InputStream crossDomainPolicy) {
this.crossDomainPolicy = crossDomainPolicy;
}
public InputStream getCrossDomainPolicy() {
return crossDomainPolicy;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public class SocketIOChannelInitializer extends ChannelInitializer<Channel> impl
private XHRPollingTransport xhrPollingTransport;
private WebSocketTransport webSocketTransport;
private FlashSocketTransport flashSocketTransport;
private final FlashPolicyHandler flashPolicyHandler = new FlashPolicyHandler();
private FlashPolicyHandler flashPolicyHandler;
private ResourceHandler resourceHandler;
private EncoderHandler encoderHandler;
private WrongUrlHandler wrongUrlHandler;
Expand Down Expand Up @@ -124,6 +124,7 @@ public void start(Configuration configuration, NamespacesHub namespacesHub) {
}
}

flashPolicyHandler = new FlashPolicyHandler(configuration);
packetHandler = new PacketHandler(packetListener, decoder, namespacesHub, configuration.getExceptionListener());
authorizeHandler = new AuthorizeHandler(connectPath, scheduler, configuration, namespacesHub);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,18 +24,49 @@
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.util.CharsetUtil;

import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.nio.ByteBuffer;
import java.nio.channels.Channels;
import java.nio.channels.ReadableByteChannel;

import com.corundumstudio.socketio.Configuration;

@Sharable
public class FlashPolicyHandler extends ChannelInboundHandlerAdapter {

private final ByteBuf requestBuffer = Unpooled.copiedBuffer( "<policy-file-request/>", CharsetUtil.UTF_8);
private ByteBuf responseBuffer;

public FlashPolicyHandler(Configuration configuration) {
try {
if (configuration.getCrossDomainPolicy() == null) {
URL resUrl = getClass().getResource("/static/flashsocket/crossdomain.xml");
URLConnection urlConnection = resUrl.openConnection();

InputStream stream = urlConnection.getInputStream();
try {
readFile(stream);
} finally {
stream.close();
}
} else {
readFile(configuration.getCrossDomainPolicy());
}
} catch (IOException e) {
throw new IllegalStateException(e);
}
}

private final ByteBuf responseBuffer = Unpooled.copiedBuffer(
"<?xml version=\"1.0\"?>"
+ "<!DOCTYPE cross-domain-policy SYSTEM \"/xml/dtds/cross-domain-policy.dtd\">"
+ "<cross-domain-policy> "
+ " <site-control permitted-cross-domain-policies=\"master-only\"/>"
+ " <allow-access-from domain=\"*\" to-ports=\"*\" />"
+ "</cross-domain-policy>", CharsetUtil.UTF_8);
private void readFile(InputStream stream) throws IOException {
ReadableByteChannel channel = Channels.newChannel(stream);
ByteBuffer buffer = ByteBuffer.allocate(5*1024);
channel.read(buffer);
buffer.flip();
responseBuffer = Unpooled.copiedBuffer(buffer);
}

@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
Expand Down
6 changes: 6 additions & 0 deletions src/main/resources/static/flashsocket/crossdomain.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<site-control permitted-cross-domain-policies="master-only"/>
<allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

0 comments on commit 13c954f

Please sign in to comment.