/**
* Copyright (C) 2014 Red Hat, Inc, and individual contributors.
* Copyright (C) 2011-2012 VMware, Inc.
*/
package org.projectodd.sockjs;
/**
* Roughly correlates to sockjs-node's iframe.coffee
*/
public class IframeHandler {
private static final String IFRAME_TEMPLATE =
"<!DOCTYPE html>\n" +
"<html>\n" +
"<head>\n" +
" <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n" +
" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n" +
" <script>\n" +
" document.domain = document.domain;\n" +
" _sockjs_onload = function(){SockJS.bootstrap_iframe();};\n" +
" </script>\n" +
" <script src=\"{{ sockjs_url }}\"></script>\n" +
"</head>\n" +
"<body>\n" +
" <h2>Don't panic!</h2>\n" +
" <p>This is a SockJS hidden iframe. It's used for cross domain magic.</p>\n" +
"</body>\n" +
"</html>";
public DispatchFunction iframe = new DispatchFunction() {
@Override
public Object handle(SockJsRequest req, SockJsResponse res, Object data) throws SockJsException {
String content = IFRAME_TEMPLATE.replace("{{ sockjs_url }}", server.options.sockjsUrl);
String quotedMd5 = "\"" + Utils.md5Hex(content) + "\"";
if (quotedMd5.equals(req.getHeader("if-none-match"))) {
res.statusCode(304);
return "";
}
res.setHeader("Content-Type", "text/html; charset=UTF-8");
res.setHeader("ETag", quotedMd5);
return content;
}
};
public IframeHandler(SockJsServer server) {
this.server = server;
}
private SockJsServer server;
}