2 new revisions:
Revision: 311436a1114d
Author: vralev <vralev@8e71dc83-d81e-6649-80f2-80b843a9b2be>
Date: Thu Nov 8 03:20:16 2012
Log: Update Issue JSIP-437...
http://code.google.com/p/jain-sip/source/detail?r=311436a1114d
Revision: e454ff7be813
Author: vralev <vralev@8e71dc83-d81e-6649-80f2-80b843a9b2be>
Date: Thu Nov 8 08:56:17 2012
Log: Update Issue JSIP-437...
http://code.google.com/p/jain-sip/source/detail?r=e454ff7be813
==============================================================================
Revision: 311436a1114d
Author: vralev <vralev@8e71dc83-d81e-6649-80f2-80b843a9b2be>
Date: Thu Nov 8 03:20:16 2012
Log: Update Issue JSIP-437
Optimize NIO TLS buffers and hide some logging.
Backport from NIO branch
git-svn-id:
https://svn.java.net/svn/jsip~svn/branches/JAIN-SIP-NIO-year-2012@2181
8e71dc83-d81e-6649-80f2-80b843a9b2be
(cherry picked from commit 90cc810cb14fb24a024c015c154b9e819458d6aa)
Conflicts:
src/gov/nist/javax/sip/stack/NioTcpMessageChannel.java
src/gov/nist/javax/sip/stack/NioTlsWebSocketMessageChannel.java
http://code.google.com/p/jain-sip/source/detail?r=311436a1114d
Modified:
/src/gov/nist/javax/sip/stack/NioTcpMessageChannel.java
/src/gov/nist/javax/sip/stack/NioTcpMessageProcessor.java
/src/gov/nist/javax/sip/stack/NioTlsMessageChannel.java
=======================================
--- /src/gov/nist/javax/sip/stack/NioTcpMessageChannel.java Fri Nov 23
08:22:14 2012
+++ /src/gov/nist/javax/sip/stack/NioTcpMessageChannel.java Thu Nov 8
03:20:16 2012
@@ -77,10 +77,12 @@
}
// This prevents us from getting stuck in a selector thread spinloop
when socket is constantly ready for reading but there are no bytes.
- if(nbytes == 0) throw new IOException("The socket is giving us empty
TCP packets. " +
+ if(nbytes == 0)
+ throw new IOException("The socket is giving us empty
TCP packets. " +
"This is usually an indication we are stuck and it is better to
disconnect.");
- if(streamError) throw new IOException("Stream error msg len
= -1 " +
+ if(streamError)
+ throw new IOException("Stream error msg len = -1
" +
"This is usually an indication we are stuck and it is better to
disconnect.");
// Otherwise just add the bytes to queue
@@ -101,6 +103,7 @@
try {
if
(logger.isLoggingEnabled(LogWriter.TRACE_DEBUG))
logger.logDebug("IOException closing sock " + ex
+ "myAddress:myport " + myAddress + ":" + myPort + ",
remoteAddress:remotePort " + peerAddress + ":" + peerPort);
+ }
close(true, false);
=======================================
--- /src/gov/nist/javax/sip/stack/NioTcpMessageProcessor.java Wed Oct 17
13:56:21 2012
+++ /src/gov/nist/javax/sip/stack/NioTcpMessageProcessor.java Thu Nov 8
03:20:16 2012
@@ -304,6 +304,7 @@
logger.logDebug("Read " +
selectionKey);
}
read(selectionKey);
+
} else if (selectionKey.isWritable()) {
if
(logger.isLoggingEnabled(LogWriter.TRACE_DEBUG)) {
logger.logDebug("Write " +
selectionKey);
@@ -327,7 +328,7 @@
}
return;
} catch (Exception ex) {
- logger.logError("Error", ex);
+ logger.logError("Problem in the selector loop",
ex);
}
}
}
=======================================
--- /src/gov/nist/javax/sip/stack/NioTlsMessageChannel.java Fri Aug 17
06:14:48 2012
+++ /src/gov/nist/javax/sip/stack/NioTlsMessageChannel.java Thu Nov 8
03:20:16 2012
@@ -48,8 +48,8 @@
SSLStateMachine sslStateMachine;
- private ByteBuffer appFrameBuffer;
- private ByteBuffer encryptedFrameBuffer;
+ private int appBufferMax;
+ private int netBufferMax;
public static NioTcpMessageChannel create(
NioTcpMessageProcessor nioTcpMessageProcessor,
@@ -110,13 +110,11 @@
}
public ByteBuffer prepareEncryptedDataBuffer() {
- encryptedFrameBuffer.clear();
- return encryptedFrameBuffer;
+ return
ByteBufferFactory.getInstance().allocateDirect(netBufferMax);
}
public ByteBuffer prepareAppDataBuffer() {
- appFrameBuffer.clear();
- return appFrameBuffer;
+ return
ByteBufferFactory.getInstance().allocateDirect(appBufferMax);
}
public static class SSLReconnectedException extends IOException {
@@ -131,7 +129,7 @@
ByteBuffer b = ByteBuffer.wrap(msg);
try {
- sslStateMachine.wrap(b, encryptedFrameBuffer, new MessageSendCallback()
{
+ sslStateMachine.wrap(b,
ByteBufferFactory.getInstance().allocateDirect(netBufferMax), new
MessageSendCallback() {
@Override
public void doSend(byte[] bytes) throws
IOException {
@@ -172,7 +170,7 @@
ByteBuffer b = ByteBuffer.wrap(message);
try {
- sslStateMachine.wrap(b, encryptedFrameBuffer, new MessageSendCallback()
{
+ sslStateMachine.wrap(b,
ByteBufferFactory.getInstance().allocateDirect(netBufferMax), new
MessageSendCallback() {
@Override
public void doSend(byte[] bytes) throws
IOException {
@@ -188,15 +186,12 @@
private void createBuffers() {
SSLSession session = sslStateMachine.sslEngine.getSession();
- int appBufferMax = session.getApplicationBufferSize();
- int netBufferMax = session.getPacketBufferSize();
+ appBufferMax = session.getApplicationBufferSize();
+ netBufferMax = session.getPacketBufferSize();
if(logger.isLoggingEnabled(LogWriter.TRACE_DEBUG)) {
logger.logDebug("appBufferMax=" + appBufferMax + "
netBufferMax=" + netBufferMax);
}
- appFrameBuffer =
ByteBufferFactory.getInstance().allocateDirect(2*appBufferMax + 50);
-
- encryptedFrameBuffer =
ByteBufferFactory.getInstance().allocateDirect(netBufferMax);
}
public NioTlsMessageChannel(InetAddress inetAddress, int port,
==============================================================================
Revision: e454ff7be813
Author: vralev <vralev@8e71dc83-d81e-6649-80f2-80b843a9b2be>
Date: Thu Nov 8 08:56:17 2012
Log: Update Issue JSIP-437
Optimize NIO TLS buffers and fix regressions.
Backport from NIO Branch
git-svn-id:
https://svn.java.net/svn/jsip~svn/branches/JAIN-SIP-NIO-year-2012@2182
8e71dc83-d81e-6649-80f2-80b843a9b2be
(cherry picked from commit fc278e7b64e59b41857f68848d4ca82c0b86ec98)
http://code.google.com/p/jain-sip/source/detail?r=e454ff7be813
Modified:
/src/gov/nist/javax/sip/stack/SIPTransaction.java
=======================================
--- /src/gov/nist/javax/sip/stack/SIPTransaction.java Wed Aug 8 12:20:08
2012
+++ /src/gov/nist/javax/sip/stack/SIPTransaction.java Thu Nov 8 08:56:17
2012
@@ -1395,12 +1395,22 @@
else return ((TLSMessageChannel)
this.getMessageChannel()).getHandshakeCompletedListener().getHandshakeCompletedEvent().getCipherSuite();
} else if(this.getMessageChannel() instanceof
NioTlsMessageChannel) {
SSLEngine sslEngine = ((NioTlsMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine;
-
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED)) {
+
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED) ||
+
sslEngine.getHandshakeStatus().equals(HandshakeStatus.NOT_HANDSHAKING)) {
String[] cs = sslEngine.getEnabledCipherSuites();
return cs[0];
} else {
return null;
}
+ } else if(this.getMessageChannel() instanceof
NioTlsWebSocketMessageChannel) {
+ SSLEngine sslEngine = ((NioTlsWebSocketMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine;
+
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED) ||
+
sslEngine.getHandshakeStatus().equals(HandshakeStatus.NOT_HANDSHAKING)) {
+ String[] cs = sslEngine.getEnabledCipherSuites();
+ return cs[0];
+ } else {
+ return null;
+ }
} else throw new UnsupportedOperationException("Not a TLS
channel");
}
@@ -1415,11 +1425,20 @@
else return ((TLSMessageChannel)
this.getMessageChannel()).getHandshakeCompletedListener().getHandshakeCompletedEvent().getLocalCertificates();
} else if (this.getMessageChannel() instanceof
NioTlsMessageChannel) {
SSLEngine sslEngine = ((NioTlsMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine;
-
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED)) {
+
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED) ||
+
sslEngine.getHandshakeStatus().equals(HandshakeStatus.NOT_HANDSHAKING)) {
return ((NioTlsMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine.getSession().getLocalCertificates();
} else {
return null;
}
+ } else if (this.getMessageChannel() instanceof
NioTlsMessageChannel) {
+ SSLEngine sslEngine = ((NioTlsWebSocketMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine;
+
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED) ||
+
sslEngine.getHandshakeStatus().equals(HandshakeStatus.NOT_HANDSHAKING)) {
+ return ((NioTlsWebSocketMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine.getSession().getLocalCertificates();
+ } else {
+ return null;
+ }
} else throw new UnsupportedOperationException("Not a TLS
channel");
}
@@ -1433,11 +1452,20 @@
else return ((TLSMessageChannel)
this.getMessageChannel()).getHandshakeCompletedListener().getHandshakeCompletedEvent().getPeerCertificates();
} else if(this.getMessageChannel() instanceof
NioTlsMessageChannel) {
SSLEngine sslEngine = ((NioTlsMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine;
-
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED)) {
+
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED) ||
+
sslEngine.getHandshakeStatus().equals(HandshakeStatus.NOT_HANDSHAKING)) {
return ((NioTlsMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine.getSession().getPeerCertificates();
} else {
return null;
}
+ } else if(this.getMessageChannel() instanceof
NioTlsWebSocketMessageChannel) {
+ SSLEngine sslEngine = ((NioTlsWebSocketMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine;
+
if(sslEngine.getHandshakeStatus().equals(HandshakeStatus.FINISHED) ||
+
sslEngine.getHandshakeStatus().equals(HandshakeStatus.NOT_HANDSHAKING)) {
+ return ((NioTlsWebSocketMessageChannel)
this.getMessageChannel()).sslStateMachine.sslEngine.getSession().getPeerCertificates();
+ } else {
+ return null;
+ }
}
else
throw new UnsupportedOperationException("Not a TLS channel");