Author: remm
Date: Fri Apr 4 10:10:28 2014
New Revision: 1584593
URL: http://svn.apache.org/r1584593
Log:
Code cleanups and i18n in NIO2.
Modified:
tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java
tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java
tomcat/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties
tomcat/trunk/webapps/docs/changelog.xml
Modified: tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java?rev=1584593&r1=1584592&r2=1584593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/Http11Nio2Processor.java Fri Apr
4 10:10:28 2014
@@ -455,7 +455,7 @@ public class Http11Nio2Processor extends
.getSslImplementation().getSSLSupport(
engine.getSession());
} catch (IOException ioe) {
-
log.warn(sm.getString("http11processor.socket.sslreneg",ioe));
+
log.warn(sm.getString("http11processor.socket.sslreneg"), ioe);
}
}
Modified:
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java?rev=1584593&r1=1584592&r2=1584593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNio2InputBuffer.java Fri
Apr 4 10:10:28 2014
@@ -755,11 +755,11 @@ public class InternalNio2InputBuffer ext
synchronized (completionHandler) {
if (nBytes.intValue() < 0) {
failed(new
EOFException(sm.getString("iib.eof.error")), attachment);
- return;
- }
- readPending = false;
- if (!Nio2Endpoint.isInline()) {
- notify = true;
+ } else {
+ readPending = false;
+ if (!Nio2Endpoint.isInline()) {
+ notify = true;
+ }
}
}
if (notify) {
Modified:
tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java?rev=1584593&r1=1584592&r2=1584593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
(original)
+++ tomcat/trunk/java/org/apache/coyote/http11/InternalNio2OutputBuffer.java
Fri Apr 4 10:10:28 2014
@@ -118,7 +118,6 @@ public class InternalNio2OutputBuffer ex
synchronized (completionHandler) {
if (nBytes.intValue() < 0) {
failed(new
EOFException(sm.getString("iob.failedwrite")), attachment);
- return;
} else if (bufferedWrites.size() > 0) {
// Continue writing data using a gathering write
ArrayList<ByteBuffer> arrayList = new ArrayList<>();
@@ -172,7 +171,6 @@ public class InternalNio2OutputBuffer ex
synchronized (completionHandler) {
if (nBytes.longValue() < 0) {
failed(new
EOFException(sm.getString("iob.failedwrite")), attachment);
- return;
} else if (bufferedWrites.size() > 0 ||
arrayHasData(attachment)) {
// Continue writing data
ArrayList<ByteBuffer> arrayList = new ArrayList<>();
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java?rev=1584593&r1=1584592&r2=1584593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Channel.java Fri Apr 4
10:10:28 2014
@@ -39,13 +39,9 @@ public class Nio2Channel implements Asyn
protected AsynchronousSocketChannel sc = null;
protected SocketWrapper<Nio2Channel> socket = null;
-
protected ApplicationBufferHandler bufHandler;
- protected boolean sendFile = false;
-
- public Nio2Channel(AsynchronousSocketChannel channel,
ApplicationBufferHandler bufHandler) {
- this.sc = channel;
+ public Nio2Channel(ApplicationBufferHandler bufHandler) {
this.bufHandler = bufHandler;
}
@@ -54,15 +50,12 @@ public class Nio2Channel implements Asyn
*
* @throws IOException If a problem was encountered resetting the channel
*/
- public void reset() throws IOException {
+ public void reset(AsynchronousSocketChannel channel,
SocketWrapper<Nio2Channel> socket)
+ throws IOException {
+ this.sc = channel;
+ this.socket = socket;
bufHandler.getReadBuffer().clear();
bufHandler.getWriteBuffer().clear();
- sendFile = false;
- socket = null;
- }
-
- void setSocket(SocketWrapper<Nio2Channel> socket) {
- this.socket = socket;
}
public SocketWrapper<Nio2Channel> getSocket() {
@@ -130,23 +123,11 @@ public class Nio2Channel implements Asyn
return 0;
}
- public void setIOChannel(AsynchronousSocketChannel IOChannel) {
- this.sc = IOChannel;
- }
-
@Override
public String toString() {
return super.toString()+":"+this.sc.toString();
}
- public boolean isSendFile() {
- return sendFile;
- }
-
- public void setSendFile(boolean s) {
- this.sendFile = s;
- }
-
@Override
public Future<Integer> read(ByteBuffer dst) {
return sc.read(dst);
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java?rev=1584593&r1=1584592&r2=1584593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/Nio2Endpoint.java Fri Apr 4
10:10:28 2014
@@ -415,9 +415,6 @@ public class Nio2Endpoint extends Abstra
*/
@Override
public void unbind() throws Exception {
- if (log.isDebugEnabled()) {
- log.debug("Destroy initiated for "+new
InetSocketAddress(getAddress(),getPort()));
- }
if (running) {
stop();
}
@@ -428,9 +425,6 @@ public class Nio2Endpoint extends Abstra
// Unlike other connectors, the thread pool is tied to the server
socket
shutdownExecutor();
releaseCaches();
- if (log.isDebugEnabled()) {
- log.debug("Destroy completed for "+new
InetSocketAddress(getAddress(),getPort()));
- }
}
@@ -505,34 +499,32 @@ public class Nio2Endpoint extends Abstra
if (sslContext != null) {
SSLEngine engine = createSSLEngine();
int appBufferSize =
engine.getSession().getApplicationBufferSize();
- NioBufferHandler bufhandler = new
NioBufferHandler(Math.max(appBufferSize, socketProperties.getAppReadBufSize()),
+ NioBufferHandler bufhandler = new NioBufferHandler(
+ Math.max(appBufferSize,
socketProperties.getAppReadBufSize()),
Math.max(appBufferSize,
socketProperties.getAppWriteBufSize()),
socketProperties.getDirectBuffer());
- channel = new SecureNio2Channel(socket, engine,
bufhandler, this);
+ channel = new SecureNio2Channel(engine, bufhandler, this);
} else {
- // normal tcp setup
- NioBufferHandler bufhandler = new
NioBufferHandler(socketProperties.getAppReadBufSize(),
-
socketProperties.getAppWriteBufSize(),
-
socketProperties.getDirectBuffer());
-
- channel = new Nio2Channel(socket, bufhandler);
+ NioBufferHandler bufhandler = new NioBufferHandler(
+ socketProperties.getAppReadBufSize(),
+ socketProperties.getAppWriteBufSize(),
+ socketProperties.getDirectBuffer());
+ channel = new Nio2Channel(bufhandler);
}
} else {
- channel.setIOChannel(socket);
- if (channel instanceof SecureNio2Channel) {
+ if (sslContext != null) {
SSLEngine engine = createSSLEngine();
((SecureNio2Channel) channel).setSSLEngine(engine);
}
- channel.reset();
}
Nio2SocketWrapper socketWrapper = (useCaches) ?
socketWrapperCache.pop() : null;
if (socketWrapper == null) {
socketWrapper = new Nio2SocketWrapper(channel);
}
+ channel.reset(socket, socketWrapper);
socketWrapper.reset(channel, getSocketProperties().getSoTimeout());
socketWrapper.setKeepAliveLeft(Nio2Endpoint.this.getMaxKeepAliveRequests());
socketWrapper.setSecure(isSSLEnabled());
- channel.setSocket(socketWrapper);
if (sslContext != null) {
// Use the regular processing, as the first handshake needs to
be done there
processSocket(socketWrapper, SocketStatus.OPEN_READ, true);
@@ -983,7 +975,6 @@ public class Nio2Endpoint extends Abstra
}
if (nr >= 0) {
- socket.getSocket().setSendFile(true);
buffer.flip();
socket.getSocket().write(buffer, data, new
CompletionHandler<Integer, SendfileData>() {
@@ -1010,7 +1001,6 @@ public class Nio2Endpoint extends Abstra
// Ignore
}
if (attachment.keepAlive) {
- socket.getSocket().setSendFile(false);
awaitBytes(socket);
} else {
closeSocket(socket, SocketStatus.DISCONNECT);
@@ -1036,7 +1026,10 @@ public class Nio2Endpoint extends Abstra
ok = false;
}
} catch (Throwable th) {
- if ( log.isDebugEnabled() ) log.debug("Unable to
complete sendfile request:", th);
+ ExceptionUtils.handleThrowable(th);
+ if (log.isDebugEnabled()) {
+
log.debug(sm.getString("endpoint.sendfile.error"), th);
+ }
ok = false;
}
}
@@ -1132,7 +1125,9 @@ public class Nio2Endpoint extends Abstra
}
} catch (IOException x) {
handshake = -1;
- if (log.isDebugEnabled()) log.debug("Error during SSL
handshake",x);
+ if (log.isDebugEnabled()) {
+ log.debug(sm.getString("endpoint.err.handshake"), x);
+ }
}
if (handshake == 0) {
SocketState state = SocketState.OPEN;
@@ -1144,17 +1139,13 @@ public class Nio2Endpoint extends Abstra
}
if (state == SocketState.CLOSED) {
// Close socket and pool
- try {
- socket.setComet(false);
- closeSocket(socket, SocketStatus.ERROR);
- if (useCaches && running && !paused) {
- nioChannels.push(socket.getSocket());
- }
- if (useCaches && running && !paused && socket !=
null) {
- socketWrapperCache.push((Nio2SocketWrapper)
socket);
- }
- } catch (Exception x) {
- log.error("",x);
+ socket.setComet(false);
+ closeSocket(socket, SocketStatus.ERROR);
+ if (useCaches && running && !paused) {
+ nioChannels.push(socket.getSocket());
+ }
+ if (useCaches && running && !paused && socket != null)
{
+ socketWrapperCache.push((Nio2SocketWrapper)
socket);
}
} else if (state == SocketState.UPGRADING) {
socket.setKeptAlive(true);
@@ -1191,7 +1182,7 @@ public class Nio2Endpoint extends Abstra
} catch (VirtualMachineError vme) {
ExceptionUtils.handleThrowable(vme);
} catch (Throwable t) {
- log.error("", t);
+ log.error(sm.getString("endpoint.processing.fail"), t);
if (socket != null) {
closeSocket(socket, SocketStatus.ERROR);
}
Modified: tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java?rev=1584593&r1=1584592&r2=1584593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/SecureNio2Channel.java Fri Apr
4 10:10:28 2014
@@ -34,31 +34,35 @@ import javax.net.ssl.SSLEngineResult.Han
import javax.net.ssl.SSLEngineResult.Status;
import javax.net.ssl.SSLException;
+import org.apache.tomcat.util.res.StringManager;
+
/**
* Implementation of a secure socket channel for NIO2.
*/
public class SecureNio2Channel extends Nio2Channel {
+ protected static final StringManager sm =
StringManager.getManager("org.apache.tomcat.util.net.res");
+
protected ByteBuffer netInBuffer;
protected ByteBuffer netOutBuffer;
protected SSLEngine sslEngine;
protected final Nio2Endpoint endpoint;
- protected boolean handshakeComplete = false;
+ protected boolean handshakeComplete;
protected HandshakeStatus handshakeStatus; //gets set by handshake
- protected boolean closed = false;
- protected boolean closing = false;
- protected volatile boolean readPending = false;
- protected volatile boolean writePending = false;
+ protected boolean closed;
+ protected boolean closing;
+ protected volatile boolean readPending;
+ protected volatile boolean writePending;
private CompletionHandler<Integer, SocketWrapper<Nio2Channel>>
handshakeReadCompletionHandler;
private CompletionHandler<Integer, SocketWrapper<Nio2Channel>>
handshakeWriteCompletionHandler;
- public SecureNio2Channel(AsynchronousSocketChannel channel, SSLEngine
engine,
- ApplicationBufferHandler bufHandler, Nio2Endpoint endpoint0)
throws IOException {
- super(channel, bufHandler);
+ public SecureNio2Channel(SSLEngine engine, ApplicationBufferHandler
bufHandler,
+ Nio2Endpoint endpoint0) throws IOException {
+ super(bufHandler);
sslEngine = engine;
endpoint = endpoint0;
int netBufSize = sslEngine.getSession().getPacketBufferSize();
@@ -97,7 +101,6 @@ public class SecureNio2Channel extends N
endpoint.closeSocket(attachment, SocketStatus.ERROR);
}
};
- reset();
}
public void setSSLEngine(SSLEngine engine) {
@@ -105,8 +108,9 @@ public class SecureNio2Channel extends N
}
@Override
- public void reset() throws IOException {
- super.reset();
+ public void reset(AsynchronousSocketChannel channel,
SocketWrapper<Nio2Channel> socket)
+ throws IOException {
+ super.reset(channel, socket);
netOutBuffer.position(0);
netOutBuffer.limit(0);
netInBuffer.position(0);
@@ -210,7 +214,7 @@ public class SecureNio2Channel extends N
switch (handshakeStatus) {
case NOT_HANDSHAKING: {
//should never happen
- throw new IOException("NOT_HANDSHAKING during handshake");
+ throw new
IOException(sm.getString("channel.nio.ssl.notHandshaking"));
}
case FINISHED: {
//we are complete if we have delivered the last package
@@ -225,7 +229,7 @@ public class SecureNio2Channel extends N
try {
sc.write(netOutBuffer).get(endpoint.getSoTimeout(), TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException
| TimeoutException e) {
- throw new IOException("Handshake error");
+ throw new
IOException(sm.getString("channel.nio.ssl.handhakeError"));
}
}
return 1;
@@ -239,7 +243,7 @@ public class SecureNio2Channel extends N
handshakeStatus = tasks();
} else {
//wrap should always work with our buffers
- throw new IOException("Unexpected status:" +
handshake.getStatus() + " during handshake WRAP.");
+ throw new
IOException(sm.getString("channel.nio.ssl.unexpectedStatusDuringWrap",
handshake.getStatus()));
}
if (handshakeStatus != HandshakeStatus.NEED_UNWRAP ||
netOutBuffer.remaining() > 0) {
//should actually return OP_READ if we have NEED_UNWRAP
@@ -249,7 +253,7 @@ public class SecureNio2Channel extends N
try {
sc.write(netOutBuffer).get(endpoint.getSoTimeout(), TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException
| TimeoutException e) {
- throw new IOException("Handshake error");
+ throw new
IOException(sm.getString("channel.nio.ssl.handhakeError"));
}
}
return 1;
@@ -272,12 +276,12 @@ public class SecureNio2Channel extends N
try {
sc.read(netInBuffer).get(endpoint.getSoTimeout(), TimeUnit.MILLISECONDS);
} catch (InterruptedException | ExecutionException
| TimeoutException e) {
- throw new IOException("Handshake error");
+ throw new
IOException(sm.getString("channel.nio.ssl.handhakeError"));
}
}
return 1;
} else {
- throw new IOException("Invalid handshake
status:"+handshakeStatus+" during handshake UNWRAP.");
+ throw new
IOException(sm.getString("channel.nio.ssl.unexpectedStatusDuringUnwrap",
handshakeStatus));
}
break;
}
@@ -285,7 +289,7 @@ public class SecureNio2Channel extends N
handshakeStatus = tasks();
break;
}
- default: throw new IllegalStateException("Invalid handshake
status:"+handshakeStatus);
+ default: throw new
IllegalStateException(sm.getString("channel.nio.ssl.invalidStatus",
handshakeStatus));
}
}
//return 0 if we are complete, otherwise recurse to process the task
@@ -301,17 +305,31 @@ public class SecureNio2Channel extends N
*/
public void rehandshake() throws IOException {
//validate the network buffers are empty
- if (netInBuffer.position() > 0 &&
netInBuffer.position()<netInBuffer.limit()) throw new IOException("Network
input buffer still contains data. Handshake will fail.");
- if (netOutBuffer.position() > 0 &&
netOutBuffer.position()<netOutBuffer.limit()) throw new IOException("Network
output buffer still contains data. Handshake will fail.");
- if (getBufHandler().getReadBuffer().position()>0 &&
getBufHandler().getReadBuffer().position()<getBufHandler().getReadBuffer().limit())
throw new IOException("Application input buffer still contains data. Data
would have been lost.");
- if (getBufHandler().getWriteBuffer().position()>0 &&
getBufHandler().getWriteBuffer().position()<getBufHandler().getWriteBuffer().limit())
throw new IOException("Application output buffer still contains data. Data
would have been lost.");
- reset();
+ if (netInBuffer.position() > 0 && netInBuffer.position() <
netInBuffer.limit()) throw new
IOException(sm.getString("channel.nio.ssl.netInputNotEmpty"));
+ if (netOutBuffer.position() > 0 && netOutBuffer.position() <
netOutBuffer.limit()) throw new
IOException(sm.getString("channel.nio.ssl.netOutputNotEmpty"));
+ ByteBuffer readBuffer = getBufHandler().getReadBuffer();
+ ByteBuffer writeBuffer = getBufHandler().getWriteBuffer();
+ if (readBuffer.position() > 0 && readBuffer.position() <
readBuffer.limit()) throw new
IOException(sm.getString("channel.nio.ssl.appInputNotEmpty"));
+ if (writeBuffer.position() > 0 && writeBuffer.position() <
writeBuffer.limit()) throw new
IOException(sm.getString("channel.nio.ssl.appOutputNotEmpty"));
+
+ netOutBuffer.position(0);
+ netOutBuffer.limit(0);
+ netInBuffer.position(0);
+ netInBuffer.limit(0);
+ readBuffer.clear();
+ writeBuffer.clear();
+
+ handshakeComplete = false;
+ //initiate handshake
+ sslEngine.beginHandshake();
+ handshakeStatus = sslEngine.getHandshakeStatus();
+
boolean handshaking = true;
try {
while (handshaking) {
int hsStatus = handshakeInternal(false);
switch (hsStatus) {
- case -1 : throw new EOFException("EOF during handshake.");
+ case -1 : throw new
EOFException(sm.getString("channel.nio.ssl.eofDuringHandshake"));
case 0 : handshaking = false; break;
default : // Some blocking IO occurred, so iterate
}
@@ -325,7 +343,6 @@ public class SecureNio2Channel extends N
}
-
/**
* Executes all the tasks needed on the same thread.
* @return HandshakeStatus
@@ -410,12 +427,12 @@ public class SecureNio2Channel extends N
try {
if (!flush().get(endpoint.getSoTimeout(),
TimeUnit.MILLISECONDS).booleanValue()) {
- throw new IOException("Remaining data in the network buffer,
can't send SSL close message, force a close with close(true) instead");
+ throw new
IOException(sm.getString("channel.nio.ssl.remainingDataDuringClose"));
}
} catch (InterruptedException | ExecutionException | TimeoutException
e) {
- throw new IOException("Remaining data in the network buffer, can't
send SSL close message, force a close with close(true) instead", e);
+ throw new
IOException(sm.getString("channel.nio.ssl.remainingDataDuringClose"), e);
} catch (WritePendingException e) {
- throw new IOException("Pending write, so remaining data in the
network buffer, can't send SSL close message, force a close with close(true)
instead", e);
+ throw new
IOException(sm.getString("channel.nio.ssl.pendingWriteDuringClose"), e);
}
//prep the buffer for the close message
netOutBuffer.clear();
@@ -423,19 +440,19 @@ public class SecureNio2Channel extends N
SSLEngineResult handshake = sslEngine.wrap(getEmptyBuf(),
netOutBuffer);
//we should be in a close state
if (handshake.getStatus() != SSLEngineResult.Status.CLOSED) {
- throw new IOException("Invalid close state, will not send network
data.");
+ throw new
IOException(sm.getString("channel.nio.ssl.invalidCloseState"));
}
//prepare the buffer for writing
netOutBuffer.flip();
//if there is data to be written
try {
if (!flush().get(endpoint.getSoTimeout(),
TimeUnit.MILLISECONDS).booleanValue()) {
- throw new IOException("Remaining data in the network buffer,
can't send SSL close message, force a close with close(true) instead");
+ throw new
IOException(sm.getString("channel.nio.ssl.remainingDataDuringClose"));
}
} catch (InterruptedException | ExecutionException | TimeoutException
e) {
- throw new IOException("Remaining data in the network buffer, can't
send SSL close message, force a close with close(true) instead", e);
+ throw new
IOException(sm.getString("channel.nio.ssl.remainingDataDuringClose"), e);
} catch (WritePendingException e) {
- throw new IOException("Pending write, so remaining data in the
network buffer, can't send SSL close message, force a close with close(true)
instead", e);
+ throw new
IOException(sm.getString("channel.nio.ssl.pendingWriteDuringClose"), e);
}
//is the channel closed?
@@ -533,7 +550,7 @@ public class SecureNio2Channel extends N
//here we should trap BUFFER_OVERFLOW and call expand on
the buffer
//for now, throw an exception, as we initialized the
buffers
//in the constructor
- throw new ExecutionException(new IOException("Unable to
unwrap data, invalid status: " + unwrap.getStatus()));
+ throw new ExecutionException(new
IOException(sm.getString("channel.nio.ssl.unwrapFail", unwrap.getStatus())));
}
} while ((netInBuffer.position() != 0)); //continue to unwrapping
as long as the input buffer has stuff
return Integer.valueOf(read);
@@ -596,7 +613,7 @@ public class SecureNio2Channel extends N
}
//did we finish our handshake?
if (!handshakeComplete)
- throw new IllegalStateException("Handshake incomplete, you must
complete handshake before reading data.");
+ throw new
IllegalStateException(sm.getString("channel.nio.ssl.incompleteHandshake"));
if (netInBuffer.position() > 0) {
return new FutureRead(dst);
} else {
@@ -612,7 +629,7 @@ public class SecureNio2Channel extends N
protected FutureWrite(ByteBuffer src) {
//are we closing or closed?
if (closing || closed) {
- t = new IOException("Channel is in closing state.");
+ t = new IOException(sm.getString("channel.nio.ssl.closing"));
return;
}
this.src = src;
@@ -673,7 +690,7 @@ public class SecureNio2Channel extends N
if (result.getHandshakeStatus() ==
HandshakeStatus.NEED_TASK)
tasks();
} else {
- t = new IOException("Unable to wrap data, invalid engine
state: " +result.getStatus());
+ t = new
IOException(sm.getString("channel.nio.ssl.wrapFail", result.getStatus()));
}
integer = sc.write(netOutBuffer);
} catch (SSLException e) {
@@ -742,7 +759,7 @@ public class SecureNio2Channel extends N
//here we should trap BUFFER_OVERFLOW and call expand
on the buffer
//for now, throw an exception, as we initialized the
buffers
//in the constructor
- throw new IOException("Unable to unwrap data, invalid
status: " + unwrap.getStatus());
+ throw new
IOException(sm.getString("channel.nio.ssl.unwrapFail", unwrap.getStatus()));
}
} while ((netInBuffer.position() != 0)); //continue to
unwrapping as long as the input buffer has stuff
// If everything is OK, so complete
@@ -777,7 +794,7 @@ public class SecureNio2Channel extends N
}
//did we finish our handshake?
if (!handshakeComplete)
- throw new IllegalStateException("Handshake incomplete, you must
complete handshake before reading data.");
+ throw new
IllegalStateException(sm.getString("channel.nio.ssl.incompleteHandshake"));
ReadCompletionHandler<A> readCompletionHandler = new
ReadCompletionHandler<>(dst, handler);
if (netInBuffer.position() > 0 ) {
readCompletionHandler.completed(Integer.valueOf(netInBuffer.position()),
attachment);
@@ -791,7 +808,7 @@ public class SecureNio2Channel extends N
final A attachment, final CompletionHandler<Integer, ? super A>
handler) {
//are we closing or closed?
if (closing || closed) {
- handler.failed(new IOException("Channel is in closing state."),
attachment);
+ handler.failed(new
IOException(sm.getString("channel.nio.ssl.closing")), attachment);
return;
}
if (writePending) {
@@ -812,7 +829,7 @@ public class SecureNio2Channel extends N
tasks();
} else {
writePending = false;
- handler.failed(new IOException("Unable to wrap data, invalid
engine state: " +result.getStatus()), attachment);
+ handler.failed(new
IOException(sm.getString("channel.nio.ssl.wrapFail", result.getStatus())),
attachment);
return;
}
// Write data to the channel
@@ -896,7 +913,7 @@ public class SecureNio2Channel extends N
if (result.getHandshakeStatus() ==
HandshakeStatus.NEED_TASK)
tasks();
} else {
- failed(new IOException("Unable to wrap data, invalid
engine state: " +result.getStatus()), attachment);
+ failed(new
IOException(sm.getString("channel.nio.ssl.wrapFail", result.getStatus())),
attachment);
return;
}
if (written > 0) {
@@ -925,7 +942,7 @@ public class SecureNio2Channel extends N
}
//are we closing or closed?
if (closing || closed) {
- handler.failed(new IOException("Channel is in closing state."),
attachment);
+ handler.failed(new
IOException(sm.getString("channel.nio.ssl.closing")), attachment);
return;
}
if (writePending) {
@@ -947,7 +964,7 @@ public class SecureNio2Channel extends N
tasks();
} else {
writePending = false;
- handler.failed(new IOException("Unable to wrap data, invalid
engine state: " +result.getStatus()), attachment);
+ handler.failed(new
IOException(sm.getString("channel.nio.ssl.wrapFail", result.getStatus())),
attachment);
return;
}
// Write data to the channel
Modified:
tomcat/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties?rev=1584593&r1=1584592&r2=1584593&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/net/res/LocalStrings.properties
Fri Apr 4 10:10:28 2014
@@ -46,6 +46,7 @@ endpoint.poll.initfail=Poller creation f
endpoint.poll.fail=Critical poller failure (restarting poller): [{0}] {1}
endpoint.poll.error=Unexpected poller error
endpoint.process.fail=Error allocating socket processor
+endpoint.processing.fail=Error running socket processor
endpoint.sendfile.error=Unexpected sendfile error
endpoint.sendfile.addfail=Sendfile failure: [{0}] {1}
endpoint.setAttribute=Set [{0}] to [{1}]
@@ -59,4 +60,22 @@ endpoint.apr.pollError=Poller failed wit
endpoint.apr.pollUnknownEvent=A socket was returned from the poller with an
unrecognized event [{0}]
endpoint.apr.remoteport=APR socket [{0}] opened with remote port [{1}]
endpoint.nio.selectorCloseFail=Failed to close selector when closing the poller
-endpoint.nio2.exclusiveExecutor=The NIO2 connector requires an exclusive
executor to operate properly
+endpoint.nio2.exclusiveExecutor=The NIO2 connector requires an exclusive
executor to operate properly on shutdown
+
+channel.nio.ssl.notHandshaking=NOT_HANDSHAKING during handshake
+channel.nio.ssl.handhakeError=Handshake error
+channel.nio.ssl.unexpectedStatusDuringWrap=Unexpected status [{0}] during
handshake WRAP.
+channel.nio.ssl.unexpectedStatusDuringUnwrap=Unexpected status [{0}] during
handshake UNWRAP.
+channel.nio.ssl.invalidStatus=Unexpected status [{0}].
+channel.nio.ssl.netInputNotEmpty=Network input buffer still contains data.
Handshake will fail.
+channel.nio.ssl.netOutputNotEmpty=Network output buffer still contains data.
Handshake will fail.
+channel.nio.ssl.appInputNotEmpty=Application input buffer still contains data.
Data would have been lost.
+channel.nio.ssl.appOutputNotEmpty=Application output buffer still contains
data. Data would have been lost.
+channel.nio.ssl.eofDuringHandshake=EOF during handshake.
+channel.nio.ssl.remainingDataDuringClose=Remaining data in the network buffer,
can't send SSL close message, force a close with close(true) instead
+channel.nio.ssl.pendingWriteDuringClose=Pending write, so remaining data in
the network buffer, can't send SSL close message, force a close with
close(true) instead
+channel.nio.ssl.invalidCloseState=Invalid close state, will not send network
data.
+channel.nio.ssl.unwrapFail=Unable to unwrap data, invalid status [{0}]
+channel.nio.ssl.wrapFail=Unable to wrap data, invalid status [{0}]
+channel.nio.ssl.incompleteHandshake=Handshake incomplete, you must complete
handshake before reading data.
+channel.nio.ssl.closing=Channel is in closing state.
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1584593&r1=1584592&r2=1584593&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Fri Apr 4 10:10:28 2014
@@ -83,6 +83,9 @@
<fix>
Handle incomplete writes in NIO2, just in case. (remm)
</fix>
+ <fix>
+ Code cleanups and i18n in NIO2. (remm)
+ </fix>
</changelog>
</subsection>
<subsection name="Cluster">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]