@Override public void messageReceived(final ChannelHandlerContext ctx, final HttpRequest request) throws Exception { final CorsMetadata metadata = extractCorsMetadata(request); if (isPreflightRequest(request)) { handlePreflight(ctx, metadata, request); } else { ctx.channel().attr(CORS).set(metadata); ctx.fireChannelRead(ReferenceCountUtil.retain(request)); } }
@Override protected void initChannel(final SocketChannel socketChannel) throws Exception { final ChannelPipeline pipeline = socketChannel.pipeline(); if (sockjsConfig.isTls()) { final SSLEngine engine = sslContext.createSSLEngine(); engine.setUseClientMode(false); pipeline.addLast(new SslHandler(engine)); } pipeline.addLast(new HttpServerCodec()); pipeline.addLast(new HttpObjectAggregator(65536)); final DefaultSimplePushServer simplePushServer = new DefaultSimplePushServer(datastore, simplePushConfig, privateKey); pipeline.addLast(new NotificationHandler(simplePushServer)); pipeline.addLast(new CorsInboundHandler()); pipeline.addLast(new SockJsHandler(new SimplePushServiceFactory(sockjsConfig, simplePushServer))); pipeline.addLast(backgroundGroup, new UserAgentReaperHandler(simplePushServer)); pipeline.addLast(new CorsOutboundHandler()); }
private static void handlePreflight(final ChannelHandlerContext ctx, final CorsMetadata md, final HttpRequest request) { final HttpResponse response = new DefaultHttpResponse(request.getProtocolVersion(), NO_CONTENT); final HttpHeaders headers = response.headers(); headers.set(CONTENT_TYPE, Transports.CONTENT_TYPE_PLAIN); headers.set(CACHE_CONTROL, "max-age=31536000, public"); headers.set(ACCESS_CONTROL_ALLOW_ORIGIN, md.origin()); headers.set(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.set(ACCESS_CONTROL_MAX_AGE, "31536000"); if (isPollingTransport(request.getUri())) { headers.set(ACCESS_CONTROL_ALLOW_METHODS, "OPTIONS, POST"); } else { headers.set(ACCESS_CONTROL_ALLOW_METHODS, "OPTIONS, GET"); } headers.set(ACCESS_CONTROL_ALLOW_HEADERS, "Content-Type"); headers.set(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.set(EXPIRES, "dummy"); headers.set(SET_COOKIE, Transports.DEFAULT_COOKIE); ctx.writeAndFlush(response); }
@Override protected void initChannel(final SocketChannel socketChannel) throws Exception { final ChannelPipeline pipeline = socketChannel.pipeline(); if (sockjsConfig.isTls()) { final SSLEngine engine = sslContext.createSSLEngine(); engine.setUseClientMode(false); pipeline.addLast(new SslHandler(engine)); } pipeline.addLast(new HttpServerCodec()); pipeline.addLast(new HttpObjectAggregator(65536)); final DefaultSimplePushServer simplePushServer = new DefaultSimplePushServer(datastore, simplePushConfig, privateKey); pipeline.addLast(new NotificationHandler(simplePushServer)); pipeline.addLast(new CorsInboundHandler()); pipeline.addLast(new SockJsHandler(new SimplePushServiceFactory(sockjsConfig, simplePushServer))); pipeline.addLast(backgroundGroup, new UserAgentReaperHandler(simplePushServer)); pipeline.addLast(new CorsOutboundHandler()); }
private static void handlePreflight(final ChannelHandlerContext ctx, final CorsMetadata md, final HttpRequest request) { final HttpResponse response = new DefaultHttpResponse(request.getProtocolVersion(), NO_CONTENT); final HttpHeaders headers = response.headers(); headers.set(CONTENT_TYPE, Transports.CONTENT_TYPE_PLAIN); headers.set(CACHE_CONTROL, "max-age=31536000, public"); headers.set(ACCESS_CONTROL_ALLOW_ORIGIN, md.origin()); headers.set(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.set(ACCESS_CONTROL_MAX_AGE, "31536000"); if (isPollingTransport(request.getUri())) { headers.set(ACCESS_CONTROL_ALLOW_METHODS, "OPTIONS, POST"); } else { headers.set(ACCESS_CONTROL_ALLOW_METHODS, "OPTIONS, GET"); } headers.set(ACCESS_CONTROL_ALLOW_HEADERS, "Content-Type"); headers.set(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true"); headers.set(EXPIRES, "dummy"); headers.set(SET_COOKIE, Transports.DEFAULT_COOKIE); ctx.writeAndFlush(response); }
@Override public void messageReceived(final ChannelHandlerContext ctx, final HttpRequest request) throws Exception { final CorsMetadata metadata = extractCorsMetadata(request); if (isPreflightRequest(request)) { handlePreflight(ctx, metadata, request); } else { ctx.channel().attr(CORS).set(metadata); ctx.fireChannelRead(ReferenceCountUtil.retain(request)); } }