@Override public void onSuspend(AtmosphereResourceEvent event) { final String srid = (String)event.getResource().getRequest() .getAttribute(ApplicationConfig.SUSPENDED_ATMOSPHERE_RESOURCE_UUID); LOG.log(Level.FINE, "Registrering suspended resource: {}", srid); suspendedResponses.put(srid, event.getResource().getResponse()); AsyncIOWriter writer = event.getResource().getResponse().getAsyncIOWriter(); if (writer instanceof AtmosphereInterceptorWriter) { ((AtmosphereInterceptorWriter)writer).interceptor(interceptor); } }
String uuid(AtmosphereResource r) { String s = (String) r.getRequest().getAttribute(SUSPENDED_ATMOSPHERE_RESOURCE_UUID); if (s != null) { return s; } s = r.getRequest().getHeader(HeaderConfig.X_ATMOSPHERE_TRACKING_ID); if (s != null && s != "0") { return s; } else { return r.uuid(); } }
@Override public void onRequest(AtmosphereResource resource) { if (pushHandler == null) { getLogger().warning( "AtmosphereHandler.onRequest called before PushHandler has been set. This should really not happen"); return; } AtmosphereRequest req = resource.getRequest(); if (req.getMethod().equalsIgnoreCase("GET")) { onConnect(resource); } else if (req.getMethod().equalsIgnoreCase("POST")) { onMessage(resource); } }
private void reInject(AtmosphereRequest request, AtmosphereResponse response, String body) throws IOException, ServletException { request.setAttribute("sockjs.skipInterceptor", Boolean.TRUE); framework.doCometSupport(request.body(body), response); request.setAttribute("sockjs.skipInterceptor", null); }
public RemoteEndpointImpl(AtmosphereRequest request, String body) { this.request = request; this.body = body; this.path = (String) request.getAttribute(FrameworkConfig.MAPPED_PATH); this.pathSegments = path.split("/"); this.resource = request.resource(); }
private String determineIdentifierFromRequest(AtmosphereRequest request) { // request.getPathInfo() is said to be unreliable in several containers String contextPath = request.getContextPath(); String servletPath = request.getServletPath() + "/"; return request.getRequestURI().substring((contextPath + servletPath).length()); }
.getAttribute(ApplicationConfig.SUSPENDED_ATMOSPHERE_RESOURCE_UUID); final AtmosphereResponse suspendedResponse = suspendedResponses.get(saruuid); LOG.fine("Attaching a proxy writer to suspended response"); r.getResponse().asyncIOWriter(new AtmosphereInterceptorWriter() { @Override public AsyncIOWriter write(AtmosphereResponse r, String data) throws IOException { if (request.getAttribute(REQUEST_DISPATCHED) == null) { AtmosphereResponse response = null; AtmosphereFramework framework = r.getAtmosphereConfig().framework(); try { byte[] data = WebSocketUtils.readBody(request.getInputStream()); ar.localAttributes().put(REQUEST_DISPATCHED, "true"); String refid = ar.getHeader(WebSocketConstants.DEFAULT_REQUEST_ID_KEY); if (refid != null) { ar.localAttributes().put(WebSocketConstants.DEFAULT_REQUEST_ID_KEY, refid); request.removeAttribute(FrameworkConfig.INJECTED_ATMOSPHERE_RESOURCE); response.request(ar); attachWriter(r); Action action = framework.doCometSupport(ar, response); if (action.type() == Action.TYPE.SUSPEND) { ar.destroyable(false); request.destroyable(false);
final AtmosphereRequest request = r.getRequest(); if (request.getHeader("SwaggerSocket") != null && request.getAttribute(SWAGGER_SOCKET_DISPATCHED) == null && r.transport() != AtmosphereResource.TRANSPORT.WEBSOCKET) { if (request.getMethod() == "GET") { BlockingQueue<AtmosphereResource> queue = (BlockingQueue<AtmosphereResource>) request.getSession().getAttribute("PendingResource"); if (queue == null) { queue = new LinkedBlockingQueue<AtmosphereResource>(); request.getSession().setAttribute("PendingResource", queue); InputStreamReader isr = new InputStreamReader(request.getInputStream()); BufferedReader bufReader = new BufferedReader(isr); char[] charBuffer = new char[8192]; List<AtmosphereRequest> list = new ArrayList<AtmosphereRequest>(); if (handshakeTx.replaceAll(" ", "").startsWith("{\"handshake\"")) { request.getSession().invalidate(); HandshakeMessage handshakeMessage = mapper.readValue(data, HandshakeMessage.class); request.getSession().setAttribute("swaggersocket.identity", identity); request.setAttribute("swaggersocket.handshake", identity); String identity = (String) request.getSession().getAttribute("swaggersocket.identity"); request.setAttribute("swaggersocket.identity", identity); request.setAttribute("ResponseCountNumber", new AtomicInteger(list.size())); for (AtmosphereRequest ar : list) { try {
if (request.getHeader("SwaggerSocket") != null) { ok = true; if (ok && request.attributes().get(SWAGGER_SOCKET_DISPATCHED) == null) { logger.debug("Method {} Transport {}", request.getMethod(), r.transport()); if (request.getMethod() == "GET" && r.transport().equals(AtmosphereResource.TRANSPORT.LONG_POLLING)) { if (queue == null) { queue = new LinkedBlockingQueue<AtmosphereResource>(); request.getSession().setAttribute(SUSPENDED_RESPONSE, queue); AtmosphereFramework framework = r.getAtmosphereConfig().framework(); StringBuilder d = new StringBuilder(); try { InputStreamReader isr = new InputStreamReader(request.getInputStream()); BufferedReader bufReader = new BufferedReader(isr); char[] charBuffer = new char[8192]; logger.debug("Client disconnected {}, cleaning session {}", identity); try { Enumeration<String> e = request.getSession().getAttributeNames(); while (e.hasMoreElements()) { request.getSession().removeAttribute(e.nextElement()); request.getSession().invalidate(); } catch (Exception ex) { logger.warn("", ex);
@Override public void onStateChange(AtmosphereResourceEvent event) throws IOException { if (event.getMessage() == null || event.isCancelled() || event.isResuming() || event.isResumedOnTimeout()) { return; } AtmosphereResource resource = event.getResource(); AtmosphereRequest req = resource.getRequest(); AtmosphereResponse res = resource.getResponse(); PrintWriter writer = res.getWriter(); writer.print((String) event.getMessage()); writer.flush(); if (req.getParameter("transport").startsWith("longpoll")) { req.setAttribute("used", true); resource.resume(); } }
if (!jersey && r.getRequest().getAttribute(X_WEBSOCKET_GWT) != null) { r.getRequest().contentType(Constants.GWT_RPC_MEDIA_TYPE); if (r.getRequest().getContentType() == null || !r.getRequest().getContentType().contains("x-gwt-rpc") || jersey) { return Action.CONTINUE; logger.debug("Found GWT-RPC Atmosphere request. method: " + r.getRequest().getMethod()); if (r.getRequest().getMethod().equals("GET")) { if (r.transport().equals(AtmosphereResource.TRANSPORT.WEBSOCKET)) { r.getRequest().setAttribute(X_WEBSOCKET_GWT, Boolean.TRUE); String contentType = r.getRequest().getContentType(); String charEncoding = r.getRequest().getCharacterEncoding(); if (charEncoding == null) { charEncoding = "UTF-8"; } else if (r.getRequest().getMethod().equals("POST")) { try { String data = GwtRpcUtil.readerToString(r.getRequest().getReader()); if (logger.isDebugEnabled()) { logger.debug("Received message from client: " + data); r.getRequest().setAttribute(Constants.MESSAGE_OBJECT, GwtRpcUtil.deserialize(data)); } catch (IOException ex) { logger.error("Failed to read request data", ex);
public final static void broadcast(final AtmosphereResource r, final AtmosphereResourceEvent e, final Broadcaster broadcaster) { AtmosphereRequest request = r.getRequest(); ContainerResponse cr = null; cr = (ContainerResponse) request.getAttribute(FrameworkConfig.CONTAINER_RESPONSE); DefaultBroadcaster.class.cast(broadcaster).cacheLostMessage(r, true); AtmosphereResourceImpl.class.cast(r)._destroy(); return; if (request.getAttribute(FrameworkConfig.EXPECTED_CONTENT_TYPE) != null) { m = (String) request.getAttribute(FrameworkConfig.EXPECTED_CONTENT_TYPE); m = r.getAtmosphereConfig().getInitParameter(ApplicationConfig.SSE_CONTENT_TYPE); if (m == null) { m = "text/plain"; Boolean resumeOnBroadcast = (Boolean) request.getAttribute(ApplicationConfig.RESUME_ON_BROADCAST); if (resumeOnBroadcast != null && resumeOnBroadcast) { String uuid = (String) request.getAttribute(AtmosphereFilter.RESUME_UUID); if (uuid != null) { if (request.getAttribute(AtmosphereFilter.RESUME_CANDIDATES) != null) { ((ConcurrentHashMap<String, AtmosphereResource>) request.getAttribute(AtmosphereFilter.RESUME_CANDIDATES)).remove(uuid); r.getRequest().setAttribute(FrameworkConfig.CONTAINER_RESPONSE, null); r.resume();
@Override public void onPreSuspend(AtmosphereResourceEvent event) { AtmosphereResponse response = event.getResource().getResponse(); AtmosphereRequest request = event.getResource().getRequest(); String callback = request.getParameter("c"); // TODO: Configurable response.setContentType("text/html; charset=UTF-8"); response.write(IFrameUtils.generateHtmlFile(callback)).write(padding); try { response.write(("<script>\n" + "p(\"o\")" + "\n</script>\n").getBytes()).flushBuffer(); } catch (IOException e) { logger.trace("", e); } }
@Override public void onRequest(AtmosphereResource resource) throws IOException { AtmosphereRequest req = resource.getRequest(); AtmosphereResponse res = resource.getResponse(); req.setCharacterEncoding("utf-8"); res.setCharacterEncoding("utf-8"); for (Entry<String, String> entry : AbstractSocketFactory.noCacheHeader().entrySet()) { res.setHeader(entry.getKey(), entry.getValue()); } for (Entry<String, String> entry : AbstractSocketFactory.corsHeader(req.getHeader("Origin")).entrySet()) { res.setHeader(entry.getKey(), entry.getValue()); } if (req.getMethod().equalsIgnoreCase("GET")) { String when = req.getParameter("when"); if (when.equals("open") || when.equals("poll")) { socketFactory.open(resource); } else if (when.equals("abort")) { socketFactory.abort(req.getParameter("id")); } } else if (req.getMethod().equalsIgnoreCase("POST")) { String raw = read(req.getReader()); socketFactory.fire(raw.startsWith("data=") ? raw.substring("data=".length()) : raw); } }
getLogger().log(Level.FINER, "New push connection for resource {0} with transport {1}", new Object[] { resource.uuid(), resource.transport() }); resource.getResponse().setContentType("text/plain; charset=UTF-8"); resource.getResponse().addHeader("Connection", "close"); String requestToken = resource.getRequest() .getParameter(ApplicationConstants.CSRF_TOKEN_PARAMETER); if (!VaadinService.isCsrfTokenValid(session, requestToken)) { getLogger().log(Level.WARNING, "Invalid CSRF token in new connection received from {0}", resource.getRequest().getRemoteHost());
request.setAttribute(KEEP_ALIVE, ka); AtmosphereRequestImpl.Body b = request.body(); if (!aggregateBodyInMemory && !hrequest.getMethod().equals(GET) request = State.class.cast(ctx.attr(ATTACHMENT).get()).request; boolean isLast = HttpChunkedInput.class.cast(messageEvent).isEndOfInput(); Boolean ka = (Boolean) request.getAttribute(KEEP_ALIVE); method = request.getMethod(); ByteBuf internalBuffer = HttpChunkedInput.class.cast(messageEvent).readChunk(ctx).content(); request.body(internalBuffer.array()); } else { logger.trace("Unable to read in memory the request's bytes. Using stream"); request.body(new ByteBufInputStream(internalBuffer)); String transport = (String) request.getAttribute(FrameworkConfig.TRANSPORT_IN_USE); if (transport == null) { transport = request.getHeader(X_ATMOSPHERE_TRANSPORT); final Action action = (Action) request.getAttribute(NettyCometSupport.SUSPEND); final State state = new State(request, action == null ? Action.CONTINUE : action); request.destroy(); response.destroy(); framework.notify(Action.TYPE.DESTROYED, request, response);
if (event.isResuming() || event.isResumedOnTimeout()) { return; AtmosphereRequest request = event.getResource().getRequest(); logger.trace("onStateChange on SessionID=" + request.getAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_ID) + " Method=" + request.getMethod()); SocketIOSessionOutbound outbound = (org.atmosphere.socketio.SocketIOSessionOutbound) request.getAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_OUTBOUND); if (outbound != null && event.getMessage() != null) {
@Override public Action handle(AtmosphereRequest request, final AtmosphereResponse response, SocketIOSession session) throws IOException { logger.trace("Session id[" + session.getSessionId() + "] method=" + request.getMethod() + " response HashCode=" + response.hashCode()); AtmosphereResourceImpl resource = (AtmosphereResourceImpl) request.getAttribute(ApplicationConfig.ATMOSPHERE_RESOURCE); if ("GET".equals(request.getMethod())) { synchronized (this) { if (!is_open) { response.sendError(AtmosphereResponse.SC_NOT_FOUND); } else { if (!isStreamingConnection) { if (resource != null) { resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_ID, session.getSessionId()); resource.getRequest().setAttribute(SocketIOAtmosphereHandler.SOCKETIO_SESSION_OUTBOUND, session.getTransportHandler()); session.setAtmosphereResourceImpl(resource); request.setAttribute(SESSION_KEY, session); boolean resume = false; } else if ("POST".equals(request.getMethod())) { if (is_open) { int size = request.getContentLength(); if (size == 0) { response.sendError(AtmosphereResponse.SC_BAD_REQUEST); } else { String data = (String) request.getAttribute(POST_MESSAGE_RECEIVED); if (data == null) { data = decodePostData(request.getContentType(), extractString(request.getReader()));
ensureInitialized(resource); CurrentUser.setUserInLogMappedDiagnosticContexts(resource.getRequest()); try { Counter requestsCounter = requestsCounters.get(resource.transport()); if (requestsCounter == null) { LOGGER.error("unexpected transport: " + resource.transport()); } else { requestsCounter.inc(); AtmosphereRequest request = resource.getRequest(); BufferedReader reader = request.getReader(); String requestData = org.apache.commons.io.IOUtils.toString(reader); try { if (request.getMethod().equalsIgnoreCase("GET")) { onOpen(resource); resource.suspend(); } else if (request.getMethod().equalsIgnoreCase("POST")) { LOGGER.debug("onRequest() POST: %s", requestData); resource.getBroadcaster().broadcast(requestData);
static void writeResponse(AtmosphereResource resource, Object message) throws IOException { try { RPCRequest rpcRequest = (RPCRequest) resource.getRequest().getAttribute(AtmospherePollService.GWT_REQUEST); String response = encodeResponse(rpcRequest, message); writeResponse(resource.getRequest(), resource.getResponse(), resource.getAtmosphereConfig().getServletContext(), response); } catch (IncompatibleRemoteServiceException ex) { try { String error = RPC.encodeResponseForFailure(null, ex); writeResponse(resource.getRequest(), resource.getResponse(), resource.getAtmosphereConfig().getServletContext(), error); } catch (SerializationException ex2) { throw new IOException(ex2); } } catch (SerializationException ex) { throw new IOException(ex); } }