public void addBridgeFilters(IoFilterChain bridgeFilterChain, WsebSession wsebSession) {
    bridgeFilterChain.addLast(CODEC_FILTER, codec);

    if (encoding != null) {
      bridgeFilterChain.addBefore(CODEC_FILTER, ENCODING_FILTER, encoding);
    }
  }
示例#2
0
        @Override
        protected void doSessionOpened(HttpSession readSession) throws Exception {
          IoFilterChain filterChain = readSession.getFilterChain();
          filterChain.addLast(CODEC_FILTER, new WsebFrameCodecFilter(0));

          ResourceAddress readAddress = readSession.getRemoteAddress();
          final WsebSession wsebSession = sessionMap.get(readAddress);
          assert (wsebSession != null);
          wsebSession.attachReader(readSession);

          if (wsebSession.getInactivityTimeout() > 0) {
            // Activate inactivity timeout only once read session is established
            currentSessionInactivityTracker.get().addSession(wsebSession);
          }

          readSession
              .getCloseFuture()
              .addListener(
                  new IoFutureListener<CloseFuture>() {
                    @Override
                    public void operationComplete(CloseFuture future) {
                      wsebSession.close(true);
                    }
                  });
        }
示例#3
0
  @Override
  protected void doSessionOpened(final HttpAcceptSession session) throws Exception {
    WsebSession wsebSession = getSession(session);
    if (wsebSession == null || wsebSession.isClosing()) {
      session.close(false);
      return;
    }

    IoFilterChain filterChain = session.getFilterChain();

    filterChain.addLast(CODEC_FILTER, codec);

    // only supported for non-binary upstream
    if (utf8 != null) {
      // Note: encoding filter needs to be closer to the network than the codec filter
      String contentType = session.getReadHeader(HEADER_CONTENT_TYPE);
      if (CONTENT_TYPE_TEXT_PLAIN_CHARSET_UTF_8.equalsIgnoreCase(contentType)) {
        filterChain.addBefore(CODEC_FILTER, UTF8_FILTER, utf8);
      }
    }

    final CloseFuture wsebCloseFuture = wsebSession.getCloseFuture();
    final IoFutureListener<CloseFuture> listener =
        new IoFutureListener<CloseFuture>() {
          @Override
          public void operationComplete(CloseFuture future) {
            // Note: this reference to HTTP session is pinned by listener
            //       and must be removed to avoid a memory leak (see below)
            session.close(false);
          }
        };
    // detect when emulated session is closed to force upstream to close
    wsebCloseFuture.addListener(listener);
    // detect when upstream is closed to remove upstream reference from emulated session
    session
        .getCloseFuture()
        .addListener(
            new IoFutureListener<CloseFuture>() {
              @Override
              public void operationComplete(CloseFuture future) {
                // Note: a reference to the HTTP upstream session is pinned by listener
                //       and must be removed to avoid a memory leak (see above)
                wsebCloseFuture.removeListener(listener);
              }
            });

    wsebSession.attachReader(session);
  }