protected void clientClose(final SelectionKey key) { log.traceNio(key,"clientClose()", "ENTER"); try { key.channel().close(); } catch (Exception ignore) { } NetCtx att = (NetCtx) key.attachment(); if (att != null) { synchronized (att) { if (att.getTlsContext() != null) att.getTlsContext().setSslState(CLOSING); } } }
log.error("at sslEncode(), BUFFER_OVERFLOW should not happen"); clientClose(key); tctx.setSslState(ERROR); break; case BUFFER_UNDERFLOW: log.error("at sslEncode(), BUFFER_UNDERFLOW should not happen"); clientClose(key); tctx.setSslState(ERROR); break; case CLOSED: clientClose(key); tctx.setSslState(CLOSED); break; default: log.error("at sslEncode(), illegal status:" + result.getStatus()); clientClose(key); tctx.setSslState(ERROR); break; log.error("at sslEncode()", e); clientClose(key); tctx.setSslState(ERROR);
private void forceClose(SelectionKey key, NetCtx atta, TlsContext tctx, SSLEngine engine) { try { if (!engine.isInboundDone()) { engine.closeInbound(); } if (!engine.isOutboundDone()) { engine.closeOutbound(); } atta.getInput().submit(key, false, NetCtx.CLOSE); } catch (Exception e) { log.debug("forcible close: " + e.getMessage()); } try { key.interestOps(0); key.channel().close(); } catch (Exception e) { log.debug("forcibly closing SSL connection: " + e.getMessage()); } tctx.setSslState(CLOSED); return; }
protected void accept(SelectionKey key) { ServerSocketChannel ch = (ServerSocketChannel) key.channel(); SocketChannel s; try { while ((s = ch.accept()) != null) { long t0 = evtAccepts.time(); s.configureBlocking(false); NetCtx atta = ctxFactory.create(s, null,this); s.register(selector, OP_READ, atta); log.traceNio(key, "accept()", "AFTER"); if (sslContext != null) { TlsContext tctx = new TlsContext(); tctx.setSslEngine(sslContext.createSSLEngine()); tctx.getSslEngine().setUseClientMode(false); tctx.getSslEngine().beginHandshake(); tctx.setSslState(HANDSHAKE); atta.setTlsContext(tctx); log.traceNio(key, "accept()", "SSL"); } evtAccepts.call(t0); } } catch (Exception e) { // eg: too many open files. do not quit log.error("accept incoming request", e); evtAccepts.error(); } }
log.error("at sslDataRead: BUFFER_OVERFLOW should not happen"); clientClose(key); tctx.setSslState(ERROR); return; case BUFFER_UNDERFLOW: case CLOSED: clientClose(key); tctx.setSslState(CLOSED); break; default: log.error("illegal state: " + result.getStatus()); clientClose(key); tctx.setSslState(ERROR); return;
tctx.setSslState(CLOSED); log.traceNio(key, "sslHandshake()->unwrap()", "CLOSED"); return; log.error("at sslHandshake", e); clientClose(key); tctx.setSslState(ERROR); log.traceNio(key, "sslHandshake()->unwrap()", "ERROR"); return; log.error("SSL engine unexpectedly closed."); clientClose(key); tctx.setSslState(ERROR); return; } else { log.error("at sslHandshake, BUFFER_UNDERFLOW or BUFFER_OVERFLOW should not happen at write"); clientClose(key); tctx.setSslState(ERROR); return; case CLOSED: log.error("Invalid SSL status: " + result.getStatus()); clientClose(key); tctx.setSslState(ERROR); return; clientClose(key); log.error("Error terror");