@Override protected IoProcessorEx<DefaultHttpSession> initProcessor() { return new HttpAcceptProcessor(); }
@Override public CommitFuture commit() { if (committing.compareAndSet(false, true)) { IoProcessor<DefaultHttpSession> processor = getProcessor(); // for now handle this with an instance check. It could require an abstract processor // with commit as a no-op for the connector for now if (processor instanceof HttpAcceptProcessor) { HttpAcceptProcessor acceptProcessor = (HttpAcceptProcessor)processor; acceptProcessor.commit(this); } } return commitFuture; }
@Override protected void filterWriteHttpResponse(NextFilter nextFilter, IoSession session, WriteRequest writeRequest, HttpResponseMessage httpResponse) throws Exception { // GL.debug("http", getClass().getSimpleName() + " response write."); Set<HttpInjectableHeader> injectableHeaders = httpResponse.getInjectableHeaders(); if (injectableHeaders.contains(SERVER)) { HttpAcceptProcessor.setServerHeader(session, httpResponse); } if (injectableHeaders.contains(DATE) && !httpResponse.hasHeader(HttpHeaders.HEADER_DATE)) { HttpAcceptProcessor.setDateHeader(session, httpResponse); } super.filterWriteHttpResponse(nextFilter, session, writeRequest, httpResponse); } }
writeNonPersistentResponse(session, parent, commitFuture, httpResponse); writePersistentResponse(parent, commitFuture, httpResponse); writeNonPersistentResponse(session, parent, commitFuture, httpResponse); break; default:
public static void setServerHeader(IoSession session, HttpResponseMessage response) { DefaultHttpSession httpSession = HttpAcceptor.SESSION_KEY.get(session); setServerHeader(httpSession, response); }
@Override protected void doMessageSent(IoSessionEx session, Object message) throws Exception { // KG-9201: thread re-alignment is complete if (message == IoSessionEx.REGISTERED_EVENT) { DefaultHttpSession httpSession = SESSION_KEY.get(session); if (httpSession != null) { // propagate any deferred content to the HTTP session on this new I/O thread HttpAcceptProcessor processor = (HttpAcceptProcessor) httpSession.getProcessor(); processor.consume(httpSession); } } }
@Override protected void removeInternal(final DefaultHttpSession session) { CommitFuture future = session.commit(); if (future.isCommitted()) { removeInternal0(session); } else { future.addListener(new IoFutureListener<CommitFuture>() { @Override public void operationComplete(CommitFuture future) { if (future.isCommitted()) { removeInternal0(session); } } }); } }
return flushNowInternal(parent, httpMessage, httpBuffer, filterChain, request); return flushNowInternal(parent, new HttpContentMessage(buf, false, isChunked, isGzipped), buf, filterChain, request);
httpResponse.setVersion(HttpVersion.HTTP_1_1); httpResponse.setStatus(HttpStatus.SERVER_INTERNAL_ERROR); HttpAcceptProcessor.setServerHeader(httpSession, httpResponse); httpResponse.setHeader("Date", HttpUtils.formatDateHeader(System.currentTimeMillis())); session.write(httpResponse); httpResponse.setVersion(HttpVersion.HTTP_1_1); httpResponse.setStatus(((HttpProtocolDecoderException)cause).getHttpStatus()); HttpAcceptProcessor.setServerHeader(httpSession, httpResponse); httpResponse.setHeader("Date", HttpUtils.formatDateHeader(System.currentTimeMillis())); session.write(httpResponse);