comparison src/org/eclipse/jetty/io/nio/SslConnection.java @ 1048:2b769da7f67d

remove Buffer
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 07 Nov 2016 23:15:42 -0700
parents a8c92b0a08ed
children 4afdf0f0c5bc
comparison
equal deleted inserted replaced
1047:1accf965d51a 1048:2b769da7f67d
28 import javax.net.ssl.SSLException; 28 import javax.net.ssl.SSLException;
29 import javax.net.ssl.SSLSession; 29 import javax.net.ssl.SSLSession;
30 30
31 import org.eclipse.jetty.io.AbstractConnection; 31 import org.eclipse.jetty.io.AbstractConnection;
32 import org.eclipse.jetty.io.AsyncEndPoint; 32 import org.eclipse.jetty.io.AsyncEndPoint;
33 import org.eclipse.jetty.io.Buffer; 33 import org.eclipse.jetty.io.JBuffer;
34 import org.eclipse.jetty.io.BufferUtil; 34 import org.eclipse.jetty.io.BufferUtil;
35 import org.eclipse.jetty.io.EndPoint; 35 import org.eclipse.jetty.io.EndPoint;
36 import org.eclipse.jetty.server.AsyncHttpConnection; 36 import org.eclipse.jetty.server.AsyncHttpConnection;
37 import org.slf4j.Logger; 37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory; 38 import org.slf4j.LoggerFactory;
49 */ 49 */
50 public final class SslConnection extends AbstractConnection implements AsyncConnection 50 public final class SslConnection extends AbstractConnection implements AsyncConnection
51 { 51 {
52 private final Logger _logger = LoggerFactory.getLogger("org.eclipse.jetty.io.nio.ssl"); 52 private final Logger _logger = LoggerFactory.getLogger("org.eclipse.jetty.io.nio.ssl");
53 53
54 private static final NIOBuffer __ZERO_BUFFER = BufferUtil.EMPTY_BUFFER; 54 private static final JBuffer __ZERO_BUFFER = BufferUtil.EMPTY_BUFFER;
55 55
56 private static final ThreadLocal<SslBuffers> __buffers = new ThreadLocal<SslBuffers>(); 56 private static final ThreadLocal<SslBuffers> __buffers = new ThreadLocal<SslBuffers>();
57 private final SSLEngine _engine; 57 private final SSLEngine _engine;
58 private final SSLSession _session; 58 private final SSLSession _session;
59 private AsyncHttpConnection _connection; 59 private AsyncHttpConnection _connection;
60 private final SslEndPoint _sslEndPoint; 60 private final SslEndPoint _sslEndPoint;
61 private int _allocations; 61 private int _allocations;
62 private SslBuffers _buffers; 62 private SslBuffers _buffers;
63 private NIOBuffer _inbound; 63 private JBuffer _inbound;
64 private NIOBuffer _unwrapBuf; 64 private JBuffer _unwrapBuf;
65 private NIOBuffer _outbound; 65 private JBuffer _outbound;
66 private final AsyncEndPoint _aEndp; 66 private final AsyncEndPoint _aEndp;
67 private boolean _allowRenegotiate = true; 67 private boolean _allowRenegotiate = true;
68 private boolean _handshook; 68 private boolean _handshook;
69 private boolean _ishut; 69 private boolean _ishut;
70 private boolean _oshut; 70 private boolean _oshut;
73 /* ------------------------------------------------------------ */ 73 /* ------------------------------------------------------------ */
74 /* this is a half baked buffer pool 74 /* this is a half baked buffer pool
75 */ 75 */
76 private static class SslBuffers 76 private static class SslBuffers
77 { 77 {
78 final NIOBuffer _in; 78 final JBuffer _in;
79 final NIOBuffer _out; 79 final JBuffer _out;
80 final NIOBuffer _unwrap; 80 final JBuffer _unwrap;
81 81
82 SslBuffers(int packetSize, int appSize) 82 SslBuffers(int packetSize, int appSize)
83 { 83 {
84 _in = BufferUtil.newBuffer(packetSize); 84 _in = BufferUtil.newBuffer(packetSize);
85 _out = BufferUtil.newBuffer(packetSize); 85 _out = BufferUtil.newBuffer(packetSize);
207 @Override 207 @Override
208 public void onInputShutdown() throws IOException 208 public void onInputShutdown() throws IOException
209 { 209 {
210 } 210 }
211 211
212 private synchronized boolean process(Buffer toFill, Buffer toFlush) throws IOException 212 private synchronized boolean process(JBuffer toFill, JBuffer toFlush) throws IOException
213 { 213 {
214 boolean some_progress=false; 214 boolean some_progress=false;
215 try 215 try
216 { 216 {
217 // We need buffers to progress 217 // We need buffers to progress
374 { 374 {
375 _logger.debug("",x); 375 _logger.debug("",x);
376 } 376 }
377 } 377 }
378 378
379 private synchronized boolean wrap(final Buffer buffer) throws IOException 379 private synchronized boolean wrap(final JBuffer buffer) throws IOException
380 { 380 {
381 ByteBuffer bbuf=extractByteBuffer(buffer); 381 ByteBuffer bbuf=extractByteBuffer(buffer);
382 final SSLEngineResult result; 382 final SSLEngineResult result;
383 383
384 synchronized(bbuf) 384 synchronized(bbuf)
447 } 447 }
448 448
449 return result.bytesConsumed()>0 || result.bytesProduced()>0; 449 return result.bytesConsumed()>0 || result.bytesProduced()>0;
450 } 450 }
451 451
452 private synchronized boolean unwrap(final Buffer buffer) throws IOException 452 private synchronized boolean unwrap(final JBuffer buffer) throws IOException
453 { 453 {
454 if (!_inbound.hasRemaining()) 454 if (!_inbound.hasRemaining())
455 return false; 455 return false;
456 456
457 ByteBuffer bbuf=extractByteBuffer(buffer); 457 ByteBuffer bbuf=extractByteBuffer(buffer);
530 530
531 return result.bytesConsumed()>0 || result.bytesProduced()>0; 531 return result.bytesConsumed()>0 || result.bytesProduced()>0;
532 } 532 }
533 533
534 534
535 private ByteBuffer extractByteBuffer(Buffer buffer) 535 private ByteBuffer extractByteBuffer(JBuffer buffer)
536 { 536 {
537 if (buffer.buffer() instanceof NIOBuffer) 537 return buffer.getByteBuffer();
538 return ((NIOBuffer)buffer.buffer()).getByteBuffer();
539 return ByteBuffer.wrap(buffer.array());
540 } 538 }
541 539
542 public SslEndPoint getSslEndPoint() 540 public SslEndPoint getSslEndPoint()
543 { 541 {
544 return _sslEndPoint; 542 return _sslEndPoint;
602 { 600 {
603 _logger.debug("{} ssl endp.close",_session); 601 _logger.debug("{} ssl endp.close",_session);
604 _endp.close(); 602 _endp.close();
605 } 603 }
606 604
607 public int fill(Buffer buffer) throws IOException 605 public int fill(JBuffer buffer) throws IOException
608 { 606 {
609 int size=buffer.remaining(); 607 int size=buffer.remaining();
610 process(buffer, null); 608 process(buffer, null);
611 609
612 int filled=buffer.remaining()-size; 610 int filled=buffer.remaining()-size;
614 if (filled==0 && isInputShutdown()) 612 if (filled==0 && isInputShutdown())
615 return -1; 613 return -1;
616 return filled; 614 return filled;
617 } 615 }
618 616
619 public int flush(Buffer buffer) throws IOException 617 public int flush(JBuffer buffer) throws IOException
620 { 618 {
621 int size = buffer.remaining(); 619 int size = buffer.remaining();
622 process(null, buffer); 620 process(null, buffer);
623 return size-buffer.remaining(); 621 return size-buffer.remaining();
624 } 622 }
625 623
626 public int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException 624 public int flush(JBuffer header, JBuffer buffer, JBuffer trailer) throws IOException
627 { 625 {
628 if (header!=null && header.hasRemaining()) 626 if (header!=null && header.hasRemaining())
629 return flush(header); 627 return flush(header);
630 if (buffer!=null && buffer.hasRemaining()) 628 if (buffer!=null && buffer.hasRemaining())
631 return flush(buffer); 629 return flush(buffer);
733 public String toString() 731 public String toString()
734 { 732 {
735 // Do NOT use synchronized (SslConnection.this) 733 // Do NOT use synchronized (SslConnection.this)
736 // because it's very easy to deadlock when debugging is enabled. 734 // because it's very easy to deadlock when debugging is enabled.
737 // We do a best effort to print the right toString() and that's it. 735 // We do a best effort to print the right toString() and that's it.
738 Buffer inbound = _inbound; 736 JBuffer inbound = _inbound;
739 Buffer outbound = _outbound; 737 JBuffer outbound = _outbound;
740 Buffer unwrap = _unwrapBuf; 738 JBuffer unwrap = _unwrapBuf;
741 int i = inbound == null? -1 : inbound.remaining(); 739 int i = inbound == null? -1 : inbound.remaining();
742 int o = outbound == null ? -1 : outbound.remaining(); 740 int o = outbound == null ? -1 : outbound.remaining();
743 int u = unwrap == null ? -1 : unwrap.remaining(); 741 int u = unwrap == null ? -1 : unwrap.remaining();
744 return String.format("SSL %s i/o/u=%d/%d/%d ishut=%b oshut=%b {%s}", 742 return String.format("SSL %s i/o/u=%d/%d/%d ishut=%b oshut=%b {%s}",
745 _engine.getHandshakeStatus(), 743 _engine.getHandshakeStatus(),