router.options("/chunking_test").handler(BaseTransport.createCORSOptionsHandler(options, "OPTIONS, POST")); router.get("/info").handler(BaseTransport.createInfoHandler(options)); router.options("/info").handler(BaseTransport.createCORSOptionsHandler(options, "OPTIONS, GET"));
@Override public MultiMap headers() { if (headers == null) { headers = BaseTransport.removeCookieHeaders(ws.headers()); } return headers; }
static Handler<RoutingContext> createCORSOptionsHandler(SockJSHandlerOptions options, String methods) { return rc -> { if (log.isTraceEnabled()) log.trace("In CORS options handler"); rc.response().putHeader("Cache-Control", "public,max-age=31536000"); long oneYearSeconds = 365 * 24 * 60 * 60; long oneYearms = oneYearSeconds * 1000; String expires = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").format(new Date(System.currentTimeMillis() + oneYearms)); rc.response().putHeader("Expires", expires) .putHeader("Access-Control-Allow-Methods", methods) .putHeader("Access-Control-Max-Age", String.valueOf(oneYearSeconds)); setCORS(rc); setJSESSIONID(options, rc); rc.response().setStatusCode(204); rc.response().end(); }; }
public void handle(RoutingContext rc) { if (log.isTraceEnabled()) log.trace("In Info handler"); rc.response().putHeader("Content-Type", "application/json; charset=UTF-8"); setNoCacheHeaders(rc); JsonObject json = new JsonObject(); json.put("websocket", websocket); json.put("cookie_needed", options.isInsertJSESSIONID()); json.put("origins", new JsonArray().add("*:*")); // Java ints are signed, so we need to use a long and add the offset so // the result is not negative json.put("entropy", RAND_OFFSET + new Random().nextInt()); setCORS(rc); rc.response().end(json.encode()); } };
public void sendFrame(String body) { if (log.isTraceEnabled()) log.trace("JsonP, sending frame"); if (!headersWritten) { rc.response() .setChunked(true) // protect against SWF JSONP exploit .putHeader("X-Content-Type-Options", "nosniff") .putHeader("Content-Type", "application/javascript; charset=UTF-8"); setNoCacheHeaders(rc); setJSESSIONID(options, rc); headersWritten = true; } body = escapeForJavaScript(body); // prepend comment to avoid SWF exploit https://github.com/sockjs/sockjs-node/issues/163 String sb = "/**/" + callback + "(\"" + body + "\");\r\n"; //End the response and close the HTTP connection rc.response().write(sb); close(); }
public void handle(RoutingContext rc) { rc.response().headers().set("Content-Type", "application/javascript; charset=UTF-8"); BaseTransport.setCORS(rc); rc.response().setChunked(true); Buffer h = buffer(2); h.appendString("h\n"); Buffer hs = buffer(2050); for (int i = 0; i < 2048; i++) { hs.appendByte((byte) ' '); } hs.appendString("h\n"); List<TimeoutInfo> timeouts = new ArrayList<>(); setTimeout(timeouts, 0, h); setTimeout(timeouts, 1, hs); setTimeout(timeouts, 5, h); setTimeout(timeouts, 25, h); setTimeout(timeouts, 125, h); setTimeout(timeouts, 625, h); setTimeout(timeouts, 3125, h); runTimeouts(timeouts, rc.response()); } };
public void sendFrame(String body) { if (log.isTraceEnabled()) log.trace("HtmlFile, sending frame"); if (!headersWritten) { String htmlFile = HTML_FILE_TEMPLATE.replace("{{ callback }}", callback); rc.response().putHeader("Content-Type", "text/html; charset=UTF-8"); setNoCacheHeaders(rc); rc.response().setChunked(true); setJSESSIONID(options, rc); rc.response().write(htmlFile); headersWritten = true; } body = escapeForJavaScript(body); String sb = "<script>\np(\"" + body + "\");\n</script>\r\n"; Buffer buff = buffer(sb); rc.response().write(buff); bytesSent += buff.length(); if (bytesSent >= maxBytesStreaming) { if (log.isTraceEnabled()) log.trace("More than maxBytes sent so closing connection"); // Reset and close the connection close(); } }
public void handle(RoutingContext rc) { if (log.isTraceEnabled()) log.trace("In Info handler"); rc.response().putHeader("Content-Type", "application/json; charset=UTF-8"); setNoCacheHeaders(rc); JsonObject json = new JsonObject(); json.put("websocket", websocket); json.put("cookie_needed", options.isInsertJSESSIONID()); json.put("origins", new JsonArray().add("*:*")); // Java ints are signed, so we need to use a long and add the offset so // the result is not negative json.put("entropy", RAND_OFFSET + new Random().nextInt()); setCORS(rc); rc.response().end(json.encode()); } };
public void handle(RoutingContext rc) { rc.response().headers().set("Content-Type", "application/javascript; charset=UTF-8"); BaseTransport.setCORS(rc); rc.response().setChunked(true); Buffer h = buffer(2); h.appendString("h\n"); Buffer hs = buffer(2050); for (int i = 0; i < 2048; i++) { hs.appendByte((byte) ' '); } hs.appendString("h\n"); List<TimeoutInfo> timeouts = new ArrayList<>(); setTimeout(timeouts, 0, h); setTimeout(timeouts, 1, hs); setTimeout(timeouts, 5, h); setTimeout(timeouts, 25, h); setTimeout(timeouts, 125, h); setTimeout(timeouts, 625, h); setTimeout(timeouts, 3125, h); runTimeouts(timeouts, rc.response()); } };
public void sendFrame(String body) { if (log.isTraceEnabled()) log.trace("EventSource, sending frame"); if (!headersWritten) { // event stream data is always UTF8 // https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format // no need to specify the character encoding rc.response().putHeader("Content-Type", "text/event-stream"); setNoCacheHeaders(rc); setJSESSIONID(options, rc); rc.response().setChunked(true).write("\r\n"); headersWritten = true; } String sb = "data: " + body + "\r\n\r\n"; Buffer buff = buffer(sb); rc.response().write(buff); bytesSent += buff.length(); if (bytesSent >= maxBytesStreaming) { if (log.isTraceEnabled()) log.trace("More than maxBytes sent so closing connection"); // Reset and close the connection close(); } }
public void sendFrame(String body) { if (log.isTraceEnabled()) log.trace("XHR sending frame"); if (!headersWritten) { HttpServerResponse resp = rc.response(); resp.putHeader("Content-Type", "application/javascript; charset=UTF-8"); setJSESSIONID(options, rc); setCORS(rc); if (rc.request().version() != HttpVersion.HTTP_1_0) { resp.setChunked(true); } // NOTE that this is streaming!!! // Client are not expecting to see Content-Length as we don't know it's value headersWritten = true; } }
router.options("/chunking_test").handler(BaseTransport.createCORSOptionsHandler(options, "OPTIONS, POST")); router.get("/info").handler(BaseTransport.createInfoHandler(options)); router.options("/info").handler(BaseTransport.createCORSOptionsHandler(options, "OPTIONS, GET"));
this.remoteAddress = req.remoteAddress(); this.uri = req.uri(); this.headers = BaseTransport.removeCookieHeaders(req.headers()); if (closed) {
public void sendFrame(String body) { if (log.isTraceEnabled()) log.trace("JsonP, sending frame"); if (!headersWritten) { rc.response() .setChunked(true) // protect against SWF JSONP exploit .putHeader("X-Content-Type-Options", "nosniff") .putHeader("Content-Type", "application/javascript; charset=UTF-8"); setNoCacheHeaders(rc); setJSESSIONID(options, rc); headersWritten = true; } body = escapeForJavaScript(body); // prepend comment to avoid SWF exploit https://github.com/sockjs/sockjs-node/issues/163 String sb = "/**/" + callback + "(\"" + body + "\");\r\n"; //End the response and close the HTTP connection rc.response().write(sb); close(); }
static Handler<RoutingContext> createCORSOptionsHandler(SockJSHandlerOptions options, String methods) { return rc -> { if (log.isTraceEnabled()) log.trace("In CORS options handler"); rc.response().putHeader("Cache-Control", "public,max-age=31536000"); long oneYearSeconds = 365 * 24 * 60 * 60; long oneYearms = oneYearSeconds * 1000; String expires = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz").format(new Date(System.currentTimeMillis() + oneYearms)); rc.response().putHeader("Expires", expires) .putHeader("Access-Control-Allow-Methods", methods) .putHeader("Access-Control-Max-Age", String.valueOf(oneYearSeconds)); setCORS(rc); setJSESSIONID(options, rc); rc.response().setStatusCode(204); rc.response().end(); }; }
@Override public MultiMap headers() { if (headers == null) { headers = BaseTransport.removeCookieHeaders(ws.headers()); } return headers; }
public void sendFrame(String body) { if (log.isTraceEnabled()) log.trace("HtmlFile, sending frame"); if (!headersWritten) { String htmlFile = HTML_FILE_TEMPLATE.replace("{{ callback }}", callback); rc.response().putHeader("Content-Type", "text/html; charset=UTF-8"); setNoCacheHeaders(rc); rc.response().setChunked(true); setJSESSIONID(options, rc); rc.response().write(htmlFile); headersWritten = true; } body = escapeForJavaScript(body); String sb = "<script>\np(\"" + body + "\");\n</script>\r\n"; Buffer buff = buffer(sb); rc.response().write(buff); bytesSent += buff.length(); if (bytesSent >= maxBytesStreaming) { if (log.isTraceEnabled()) log.trace("More than maxBytes sent so closing connection"); // Reset and close the connection close(); } }
public void sendFrame(String body) { if (log.isTraceEnabled()) log.trace("XHR sending frame"); if (!headersWritten) { HttpServerResponse resp = rc.response(); resp.putHeader("Content-Type", "application/javascript; charset=UTF-8"); setJSESSIONID(options, rc); setCORS(rc); if (rc.request().version() != HttpVersion.HTTP_1_0) { resp.setChunked(true); } // NOTE that this is streaming!!! // Client are not expecting to see Content-Length as we don't know it's value headersWritten = true; } }
this.remoteAddress = req.remoteAddress(); this.uri = req.uri(); this.headers = BaseTransport.removeCookieHeaders(req.headers()); if (closed) {
public void sendFrame(String body) { if (log.isTraceEnabled()) log.trace("EventSource, sending frame"); if (!headersWritten) { // event stream data is always UTF8 // https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format // no need to specify the character encoding rc.response().putHeader("Content-Type", "text/event-stream"); setNoCacheHeaders(rc); setJSESSIONID(options, rc); rc.response().setChunked(true).write("\r\n"); headersWritten = true; } String sb = "data: " + body + "\r\n\r\n"; Buffer buff = buffer(sb); rc.response().write(buff); bytesSent += buff.length(); if (bytesSent >= maxBytesStreaming) { if (log.isTraceEnabled()) log.trace("More than maxBytes sent so closing connection"); // Reset and close the connection close(); } }