public final static boolean firefoxWebSocketEnabled(HttpServletRequest request) { return webSocketEnabled(request) && request.getHeader(HeaderConfig.X_ATMO_PROTOCOL) != null && request.getHeader(HeaderConfig.X_ATMO_PROTOCOL).equals("true") && request.getHeader("User-Agent") != null && request.getHeader("User-Agent").toLowerCase().indexOf("firefox") != -1; }
@Override public Action inspect(AtmosphereResource r) { if (Utils.webSocketMessage(r)){ AtmosphereResourceImpl.class.cast(r).action().type(Action.TYPE.SUSPEND_MESSAGE); } return Action.CONTINUE; } }
public final static boolean webSocketEnabled(HttpServletRequest request) { if (closeMessage(request) || !webSocketQueryStringPresentOrNull(request)) return false; boolean allowWebSocketWithoutHeaders = request.getHeader(HeaderConfig.X_ATMO_WEBSOCKET_PROXY) != null ? true : false; if (allowWebSocketWithoutHeaders) return true; boolean webSocketEnabled = rawWebSocket(request); return webSocketEnabled; }
protected void register() { if (!Utils.pollableTransport(transport()) && !Utils.webSocketMessage(this)) { config.resourcesFactory().registerUuidForFindCandidate(this); } }
public static final void inject(AtmosphereResource r) throws IllegalAccessException { AtmosphereConfig config = r.getAtmosphereConfig(); // No Injectable supports Injection if (config.properties().get(NEED_RUNTIME_INJECTION) == null) { return; } AtmosphereObjectFactory injectableFactory = config.framework().objectFactory(); if (!InjectableObjectFactory.class.isAssignableFrom(injectableFactory.getClass())) { return; } Object injectIn = injectWith(r); if (injectIn != null) { inject(injectIn, injectIn.getClass(), r); } }
if (Utils.webSocketMessage(r)) return Action.CONTINUE; if (!(Utils.pollableTransport(r.transport()) || r.transport() == AtmosphereResource.TRANSPORT.UNDEFINED)) { super.inspect(r); if (!Utils.resumableTransport(r.transport()) && AtmosphereInterceptorWriter.class.isAssignableFrom(writer.getClass()) && request.getAttribute(INTERCEPTOR_ADDED) == null) {
@Override public Object call() throws Exception { synchronized (r) { if (AtmosphereResourceImpl.class.cast(r).isInScope() && r.isSuspended()) { try { logger.trace("Heartbeat for Resource {}", r); response.write(paddingBytes, false); if (Utils.resumableTransport(r.transport()) && resumeOnHeartbeat) { r.resume(); } else if (flushBuffer) { response.flushBuffer(); } } catch (Throwable t) { logger.trace("{}", r.uuid(), t); cancelF(request); } } else { cancelF(request); } } return null; } }, interval, TimeUnit.SECONDS));
@Override public Action inspect(final AtmosphereResource ar) { if (Utils.webSocketMessage(ar)) return Action.CONTINUE; if (!Utils.resumableTransport(r.transport())) { OnSuspend a = new OnSuspend() { @Override
if (!Utils.properProtocol(req)) { logger.debug("Invalid request state."); res.setStatus(501); if (Utils.webSocketEnabled(req) && !supportWebSocket()) { logger.warn("Websocket protocol not supported"); res.setStatus(501);
@Override public Action inspect(final AtmosphereResource r) { if (Utils.webSocketMessage(r)) return Action.CONTINUE; AtmosphereRequest request = AtmosphereResourceImpl.class.cast(r).getRequest(false); String uuid = r.uuid(); if (closeMessage(request)) { AtmosphereResource ss = config.resourcesFactory().find(uuid); if (ss == null) { logger.debug("No Suspended Connection found for {}. Using the AtmosphereResource associated with the close message", uuid); ss = r; } if (ss == null) { logger.debug("Was unable to execute onDisconnect on {}", r.uuid()); return Action.CONTINUE; } logger.debug("AtmosphereResource {} disconnected", uuid); // Block websocket closing detection AtmosphereResourceEventImpl.class.cast(ss.getAtmosphereResourceEvent()).isClosedByClient(true); p.completeLifecycle(ss, false); return Action.CANCELLED; } return Action.CONTINUE; }
/** * @param instance the requested object. * @param defaultType the type of the requested object * @param framework the {@link org.atmosphere.runtime.AtmosphereFramework} * @param <U> * @throws IllegalAccessException */ public <U> void injectInjectable(U instance, Class<? extends U> defaultType, AtmosphereFramework framework) throws IllegalAccessException { Set<Field> fields = getInheritedPrivateFields(defaultType); injectFields(fields, instance, framework, injectables); }
private WebSocketHandlerProxy webSocketHandlerForMessage(WebSocket webSocket) { AtmosphereResourceImpl impl = AtmosphereResourceImpl.class.cast(webSocket.resource()); if (impl != null) { impl.getRequest(false).setAttribute(FrameworkConfig.WEBSOCKET_MESSAGE, "true"); try { Utils.inject(impl); } catch (IllegalAccessException e) { logger.warn("", e); } } return WebSocketHandlerProxy.class.cast(webSocket.webSocketHandler()); }
public final static boolean requestScopedInjection(AtmosphereConfig config, AtmosphereHandler h) { AtmosphereObjectFactory injectableFactory = config.framework().objectFactory(); if (!InjectableObjectFactory.class.isAssignableFrom(injectableFactory.getClass())) { return false; } try { Object obj = injectWith(h); return obj == null ? false : InjectableObjectFactory.class.cast(config.framework().objectFactory()).needRequestScoped(obj.getClass()); } catch (Exception e) { LOGGER.error("", e); return false; } }
/** * Execute {@link InjectIntrospector#introspectMethod} * * @param instance the requested object. * @param defaultType the type of the requested object * @param <U> * @throws IllegalAccessException */ public <U> void applyMethods(U instance, Class<U> defaultType) throws IllegalAccessException { if (!pushBackInjection.contains(instance)) { Set<Method> methods = (getInheritedPrivateMethod(defaultType)); injectMethods(methods, instance); } }
request.setAttribute(SUSPENDED_ATMOSPHERE_RESOURCE_UUID, r.uuid()); if (Utils.firefoxWebSocketEnabled(request)) { request.setAttribute("firefox", "true");
@Override public Action inspect(final AtmosphereResource r) { if (Utils.webSocketMessage(r)) return Action.CONTINUE; final AtmosphereRequest request = AtmosphereResourceImpl.class.cast(r).getRequest(false); boolean connecting = request.getHeader(HeaderConfig.X_ATMOSPHERE_TRACKING_ID) != null && request.getHeader(HeaderConfig.X_ATMOSPHERE_TRACKING_ID).equals("0"); if (!connecting && !Utils.pollableTransport(r.transport())) { if (!trackedUUID.add(r.uuid())) { logger.trace("Blocking {} from suspend", r.uuid()); AtmosphereResourceImpl.class.cast(r).disableSuspendEvent(true); } r.addEventListener(new AtmosphereResourceEventListenerAdapter() { @Override public void onDisconnect(AtmosphereResourceEvent event) { logger.trace("Untracking {}", r.uuid()); trackedUUID.remove(r.uuid()); } @Override public void onClose(AtmosphereResourceEvent event) { onDisconnect(event); } }); } return Action.CONTINUE; }
synchronized (resources) { for (AtmosphereResource r : resources) { if (Utils.resumableTransport(r.transport())) try { r.resume();
public boolean needRequestScoped(Class defaultType) throws IllegalAccessException { Set<Field> fields = new HashSet<>(); fields.addAll(getInheritedPrivateFields(defaultType)); for (Field field : fields) { for (InjectIntrospector c : requestScopedIntrospectors) { if (c.supportedType(field.getType())) { return true; } } } return false; }
@Override public Action inspect(AtmosphereResource r) { AtmosphereFramework.AtmosphereHandlerWrapper w = null; try { w = (AtmosphereFramework.AtmosphereHandlerWrapper) r.getRequest().getAttribute(FrameworkConfig.ATMOSPHERE_HANDLER_WRAPPER); if (!w.wildcardMapping()) return Action.CONTINUE; mapAnnotatedService(r.getRequest(), w); return Action.CONTINUE; } finally { if (w != null && w.needRequestScopedInjection()) { try { Utils.inject(r); } catch (IllegalAccessException e) { logger.error("", e); } } } }
private static final Object injectWith(AtmosphereResource r) { // Check for null when disconnect happens. This happens when websocket are closed by both the client and the server // concurrently. if (r == null) { return null; } AtmosphereHandler h = r.getAtmosphereHandler(); if (r.getAtmosphereHandler() == null) { return null; } if (AtmosphereFramework.REFLECTOR_ATMOSPHEREHANDLER.getClass().isAssignableFrom(h.getClass())) { if (AtmosphereResourceImpl.class.cast(r).webSocket() == null || AtmosphereResourceImpl.class.cast(r).webSocket().webSocketHandler() == null) { return null; } return WebSocketProcessor.WebSocketHandlerProxy.class.cast(AtmosphereResourceImpl.class.cast(r).webSocket().webSocketHandler()).proxied(); } else { return injectWith(h); } }