https://bz.apache.org/bugzilla/show_bug.cgi?id=69182
--- Comment #2 from xiezhaokun <1016340...@qq.com> --- SSLEngineImpl#closeInbound ``` @Override public synchronized void closeInbound() throws SSLException { if (isInboundDone()) { return; } if (SSLLogger.isOn && SSLLogger.isOn("ssl")) { SSLLogger.finest("Closing inbound of SSLEngine"); } // Is it ready to close inbound? // // No need to throw exception if the initial handshake is not started. if (!conContext.isInputCloseNotified && (conContext.isNegotiated || conContext.handshakeContext != null)) { throw conContext.fatal(Alert.INTERNAL_ERROR, "closing inbound before receiving peer's close_notify"); } conContext.closeInbound(); } ``` TransportContext#closeInbound ``` // Close inbound, no more data should be delivered to the underlying // transportation connection. void closeInbound() throws SSLException { if (isInboundClosed()) { return; } try { // Important note: check if the initial handshake is started at // first so that the passiveInboundClose() implementation need not // to consider the case any more. if (!isInputCloseNotified) { // the initial handshake is not started initiateInboundClose(); } else { passiveInboundClose(); } } catch (IOException ioe) { if (SSLLogger.isOn && SSLLogger.isOn("ssl")) { SSLLogger.warning("inbound closure failed", ioe); } } } // Initiate a inbound close when the handshake is not started. private void initiateInboundClose() throws IOException { if (!isInboundClosed()) { inputRecord.close(); } } // Close the connection passively. The closure could be kickoff by // receiving a close_notify alert or reaching end_of_file of the socket. // // Note that this method is called only if the initial handshake has // started or completed. private void passiveInboundClose() throws IOException { if (!isInboundClosed()) { inputRecord.close(); } // For TLS 1.2 and prior version, it is required to respond with // a close_notify alert of its own and close down the connection // immediately, discarding any pending writes. if (!isOutboundClosed()) { boolean needCloseNotify = SSLConfiguration.acknowledgeCloseNotify; if (!needCloseNotify) { if (isNegotiated) { if (!protocolVersion.useTLS13PlusSpec()) { needCloseNotify = true; } } else if (handshakeContext != null) { // initial handshake ProtocolVersion pv = handshakeContext.negotiatedProtocol; if (pv == null || (!pv.useTLS13PlusSpec())) { needCloseNotify = true; } } } if (needCloseNotify) { synchronized (outputRecord) { try { // send a close_notify alert warning(Alert.CLOSE_NOTIFY); } finally { outputRecord.close(); } } } } } ``` InputRecord#close ``` @Override public synchronized void close() throws IOException { if (!isClosed) { isClosed = true; readCipher.dispose(); } } ``` -- You are receiving this mail because: You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org