Author: kkolinko Date: Thu Nov 10 05:53:21 2011 New Revision: 1200168 URL: http://svn.apache.org/viewvc?rev=1200168&view=rev Log: Merging revision 1187781 from tomcat/trunk: Whitespace removal from /java/org/apache/tomcat I won't merge all of it (as it spans bcel etc.), but only our code. Part 5.
Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioChannel.java tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java?rev=1200168&r1=1200167&r2=1200168&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioBlockingSelector.java Thu Nov 10 05:53:21 2011 @@ -38,18 +38,18 @@ import org.apache.tomcat.util.MutableInt import org.apache.tomcat.util.net.NioEndpoint.KeyAttachment; public class NioBlockingSelector { - + private static final Log log = LogFactory.getLog(NioBlockingSelector.class); - + private static int threadCounter = 0; - + protected Selector sharedSelector; - + protected BlockPoller poller; public NioBlockingSelector() { - + } - + public void open(Selector selector) { sharedSelector = selector; poller = new BlockPoller(); @@ -58,7 +58,7 @@ public class NioBlockingSelector { poller.setName("NioBlockingSelector.BlockPoller-"+(++threadCounter)); poller.start(); } - + public void close() { if (poller!=null) { poller.disable(); @@ -120,7 +120,7 @@ public class NioBlockingSelector { if (writeTimeout > 0 && (keycount == 0)) timedout = (System.currentTimeMillis() - time) >= writeTimeout; } //while - if (timedout) + if (timedout) throw new SocketTimeoutException(); } finally { poller.remove(att,SelectionKey.OP_WRITE); @@ -197,7 +197,7 @@ public class NioBlockingSelector { return read; } - + protected static class BlockPoller extends Thread { protected volatile boolean run = true; protected Selector selector = null; @@ -227,7 +227,7 @@ public class NioBlockingSelector { if (SelectionKey.OP_READ==(ops&SelectionKey.OP_READ))countDown(key.getReadLatch()); } } - + public void add(final KeyAttachment key, final int ops, final KeyReference ref) { Runnable r = new Runnable() { @Override @@ -257,7 +257,7 @@ public class NioBlockingSelector { events.offer(r); wakeup(); } - + public void remove(final KeyAttachment key, final int ops) { Runnable r = new Runnable() { @Override @@ -318,7 +318,7 @@ public class NioBlockingSelector { int keyCount = 0; try { int i = wakeupCounter.get(); - if (i>0) + if (i>0) keyCount = selector.selectNow(); else { wakeupCounter.set(-1); @@ -380,16 +380,16 @@ public class NioBlockingSelector { if (log.isDebugEnabled())log.debug("",ignore); } } - + public void countDown(CountDownLatch latch) { if ( latch == null ) return; latch.countDown(); } } - + public static class KeyReference { SelectionKey key = null; - + @Override public void finalize() { if (key!=null && key.isValid()) { Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioChannel.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioChannel.java?rev=1200168&r1=1200167&r2=1200168&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioChannel.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioChannel.java Thu Nov 10 05:53:21 2011 @@ -5,9 +5,9 @@ * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -30,11 +30,11 @@ import org.apache.tomcat.util.net.NioEnd import org.apache.tomcat.util.net.SecureNioChannel.ApplicationBufferHandler; /** - * + * * Base class for a SocketChannel wrapper used by the endpoint. * This way, logic for a SSL socket channel remains the same as for * a non SSL, making sure we don't need to code for any exception cases. - * + * * @author Filip Hanik * @version 1.0 */ @@ -47,7 +47,7 @@ public class NioChannel implements ByteC protected ApplicationBufferHandler bufHandler; protected Poller poller; - + protected boolean sendFile = false; public NioChannel(SocketChannel channel, ApplicationBufferHandler bufHandler) throws IOException { @@ -60,7 +60,7 @@ public class NioChannel implements ByteC bufHandler.getWriteBuffer().clear(); this.sendFile = false; } - + public int getBufferSize() { if ( bufHandler == null ) return 0; int size = 0; @@ -70,7 +70,7 @@ public class NioChannel implements ByteC } /** - * returns true if the network buffer has + * returns true if the network buffer has * been flushed out and is empty * @return boolean */ @@ -198,11 +198,11 @@ public class NioChannel implements ByteC public String toString() { return super.toString()+":"+this.sc.toString(); } - + public int getOutboundRemaining() { return 0; } - + /** * Return true if the buffer wrote data * @throws IOException @@ -210,14 +210,14 @@ public class NioChannel implements ByteC public boolean flushOutbound() throws IOException { return false; } - + public boolean isSendFile() { return sendFile; } - + public void setSendFile(boolean s) { this.sendFile = s; } - + } Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?rev=1200168&r1=1200167&r2=1200168&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Thu Nov 10 05:53:21 2011 @@ -80,48 +80,48 @@ public class NioEndpoint extends Abstrac public static final int OP_REGISTER = 0x100; //register interest op public static final int OP_CALLBACK = 0x200; //callback interest op - + // ----------------------------------------------------------------- Fields protected NioSelectorPool selectorPool = new NioSelectorPool(); - + /** * Server socket "pointer". */ protected ServerSocketChannel serverSock = null; - + /** * use send file */ protected boolean useSendfile = true; - + /** * The size of the OOM parachute. */ protected int oomParachute = 1024*1024; /** - * The oom parachute, when an OOM error happens, - * will release the data, giving the JVM instantly + * The oom parachute, when an OOM error happens, + * will release the data, giving the JVM instantly * a chunk of data to be able to recover with. */ protected byte[] oomParachuteData = null; - + /** * Make sure this string has already been allocated */ - protected static final String oomParachuteMsg = + protected static final String oomParachuteMsg = "SEVERE:Memory usage is low, parachute is non existent, your system may start failing."; - + /** * Keep track of OOM warning messages. */ long lastParachuteCheck = System.currentTimeMillis(); - + /** - * + * */ protected volatile CountDownLatch stopLatch = null; - + /** * Cache for SocketProcessor objects */ @@ -142,7 +142,7 @@ public class NioEndpoint extends Abstrac } else return false; } - + @Override public SocketProcessor poll() { SocketProcessor result = super.poll(); @@ -151,7 +151,7 @@ public class NioEndpoint extends Abstrac } return result; } - + @Override public void clear() { super.clear(); @@ -197,7 +197,7 @@ public class NioEndpoint extends Abstrac } }; - + /** * Cache for poller events */ @@ -258,7 +258,7 @@ public class NioEndpoint extends Abstrac } else return false; } - + @Override public NioChannel poll() { NioChannel result = super.poll(); @@ -268,7 +268,7 @@ public class NioEndpoint extends Abstrac } return result; } - + @Override public void clear() { super.clear(); @@ -290,7 +290,7 @@ public class NioEndpoint extends Abstrac try { if (name.startsWith(selectorPoolName)) { return IntrospectionUtils.setProperty(selectorPool, name.substring(selectorPoolName.length()), value); - } else { + } else { return super.setProperty(name, value); } }catch ( Exception x ) { @@ -401,7 +401,7 @@ public class NioEndpoint extends Abstrac protected SSLContext sslContext = null; public SSLContext getSSLContext() { return sslContext;} public void setSSLContext(SSLContext c) { sslContext = c;} - + // --------------------------------------------------------- OOM Parachute Methods protected void checkParachute() { @@ -416,22 +416,22 @@ public class NioEndpoint extends Abstrac lastParachuteCheck = System.currentTimeMillis(); } } - + protected boolean reclaimParachute(boolean force) { if ( oomParachuteData != null ) return true; - if ( oomParachute > 0 && ( force || (Runtime.getRuntime().freeMemory() > (oomParachute*2))) ) + if ( oomParachute > 0 && ( force || (Runtime.getRuntime().freeMemory() > (oomParachute*2))) ) oomParachuteData = new byte[oomParachute]; return oomParachuteData != null; } - + protected void releaseCaches() { this.keyCache.clear(); this.nioChannels.clear(); this.processorCache.clear(); if ( handler != null ) handler.recycle(); - + } - + // --------------------------------------------------------- Public Methods /** * Number of keepalive sockets. @@ -461,7 +461,7 @@ public class NioEndpoint extends Abstrac serverSock = ServerSocketChannel.open(); socketProperties.setProperties(serverSock.socket()); InetSocketAddress addr = (getAddress()!=null?new InetSocketAddress(getAddress(),getPort()):new InetSocketAddress(getPort())); - serverSock.socket().bind(addr,getBacklog()); + serverSock.socket().bind(addr,getBacklog()); serverSock.configureBlocking(true); //mimic APR behavior serverSock.socket().setSoTimeout(getSocketProperties().getSoTimeout()); @@ -490,11 +490,11 @@ public class NioEndpoint extends Abstrac sslUtil.configureSessionContext(sessionContext); } } - + if (oomParachute>0) reclaimParachute(true); selectorPool.open(); } - + public KeyManager[] wrap(KeyManager[] managers) { if (managers==null) return null; KeyManager[] result = new KeyManager[managers.length]; @@ -518,14 +518,14 @@ public class NioEndpoint extends Abstrac if (!running) { running = true; paused = false; - + // Create worker collection if ( getExecutor() == null ) { createExecutor(); } initializeConnectionLatch(); - + // Start poller threads pollers = new Poller[getPollerThreadCount()]; for (int i=0; i<pollers.length; i++) { @@ -574,7 +574,7 @@ public class NioEndpoint extends Abstrac nioChannels.clear(); processorCache.clear(); shutdownExecutor(); - + } @@ -660,7 +660,7 @@ public class NioEndpoint extends Abstrac channel = new NioChannel(socket, bufhandler); } - } else { + } else { channel.setIOChannel(socket); if ( channel instanceof SecureNioChannel ) { SSLEngine engine = createSSLEngine(); @@ -696,7 +696,7 @@ public class NioEndpoint extends Abstrac engine.setUseClientMode(false); if ( getCiphersArray().length > 0 ) engine.setEnabledCipherSuites(getCiphersArray()); if ( getSslEnabledProtocolsArray().length > 0 ) engine.setEnabledProtocols(getSslEnabledProtocolsArray()); - + return engine; } @@ -754,7 +754,7 @@ public class NioEndpoint extends Abstrac // Loop until we receive a shutdown command while (running) { - + // Loop if endpoint is paused while (paused && running) { try { @@ -770,7 +770,7 @@ public class NioEndpoint extends Abstrac try { //if we have reached max connections, wait countUpOrAwaitConnection(); - + SocketChannel socket = null; try { // Accept the next incoming connection from the server @@ -836,28 +836,28 @@ public class NioEndpoint extends Abstrac // ----------------------------------------------------- Poller Inner Classes /** - * + * * PollerEvent, cacheable object for poller events to avoid GC */ public static class PollerEvent implements Runnable { - + protected NioChannel socket; protected int interestOps; protected KeyAttachment key; public PollerEvent(NioChannel ch, KeyAttachment k, int intOps) { reset(ch, k, intOps); } - + public void reset(NioChannel ch, KeyAttachment k, int intOps) { socket = ch; interestOps = intOps; key = k; } - + public void reset() { reset(null, null, 0); } - + @Override public void run() { if ( interestOps == OP_REGISTER ) { @@ -899,13 +899,13 @@ public class NioEndpoint extends Abstrac } }//end if }//run - + @Override public String toString() { return super.toString()+"[intOps="+this.interestOps+"]"; } } - + /** * Poller class. */ @@ -913,12 +913,12 @@ public class NioEndpoint extends Abstrac protected Selector selector; protected ConcurrentLinkedQueue<Runnable> events = new ConcurrentLinkedQueue<Runnable>(); - + protected volatile boolean close = false; protected long nextExpiration = 0;//optimize expiration handling - + protected AtomicLong wakeupCounter = new AtomicLong(0l); - + protected volatile int keyCount = 0; public Poller() throws IOException { @@ -929,9 +929,9 @@ public class NioEndpoint extends Abstrac this.selector = Selector.open(); } } - + public int getKeyCount() { return keyCount; } - + public Selector getSelector() { return selector;} /** @@ -945,12 +945,12 @@ public class NioEndpoint extends Abstrac events.clear(); selector.wakeup(); } - + public void addEvent(Runnable event) { events.offer(event); if ( wakeupCounter.incrementAndGet() == 0 ) selector.wakeup(); } - + public void cometInterest(NioChannel socket) { KeyAttachment att = (KeyAttachment)socket.getAttachment(false); add(socket,att.getCometOps()); @@ -959,7 +959,7 @@ public class NioEndpoint extends Abstrac selector.wakeup(); } } - + /** * Add specified socket and associated pool to the poller. The socket will * be added to a temporary array, and polled first after a maximum amount @@ -971,7 +971,7 @@ public class NioEndpoint extends Abstrac public void add(final NioChannel socket) { add(socket,SelectionKey.OP_READ); } - + public void add(final NioChannel socket, final int interestOps) { PollerEvent r = eventCache.poll(); if ( r==null) r = new PollerEvent(socket,null,interestOps); @@ -981,7 +981,7 @@ public class NioEndpoint extends Abstrac /** * Processes events in the event queue of the Poller. - * + * * @return <code>true</code> if some events were processed, * <code>false</code> if queue was empty */ @@ -1004,7 +1004,7 @@ public class NioEndpoint extends Abstrac return result; } - + public void register(final NioChannel socket) { socket.setPoller(this); @@ -1032,7 +1032,7 @@ public class NioEndpoint extends Abstrac } } else { processSocket(ka.getChannel(), status, false); //don't dispatch if the lines below are cancelling the key - } + } } key.attach(null); if (ka!=null) handler.release(ka); @@ -1068,7 +1068,7 @@ public class NioEndpoint extends Abstrac } if (ka!=null) { ka.reset(); - countDownConnection(); + countDownConnection(); } } catch (Throwable e) { ExceptionUtils.handleThrowable(e); @@ -1113,8 +1113,8 @@ public class NioEndpoint extends Abstrac } if (close) { timeout(0, false); - selector.close(); - break; + selector.close(); + break; } } catch ( NullPointerException x ) { //sun bug 5076772 on windows JDK 1.5 @@ -1176,7 +1176,7 @@ public class NioEndpoint extends Abstrac stopLatch.countDown(); } - + protected boolean processKey(SelectionKey sk, KeyAttachment attachment) { boolean result = true; try { @@ -1220,7 +1220,7 @@ public class NioEndpoint extends Abstrac result = false; } } - } + } } else { //invalid key cancelledKey(sk, SocketStatus.ERROR,false); @@ -1233,7 +1233,7 @@ public class NioEndpoint extends Abstrac } return result; } - + public boolean processSendfile(SelectionKey sk, KeyAttachment attachment, boolean reg, boolean event) { NioChannel sc = null; try { @@ -1250,7 +1250,7 @@ public class NioEndpoint extends Abstrac sc = attachment.getChannel(); sc.setSendFile(true); WritableByteChannel wc = ((sc instanceof SecureNioChannel)?sc:sc.getIOChannel()); - + if (sc.getOutboundRemaining()>0) { if (sc.flushOutbound()) { attachment.access(); @@ -1325,9 +1325,9 @@ public class NioEndpoint extends Abstrac //this is a must, so that we don't have multiple threads messing with the socket reg(sk,attachment,sk.interestOps()& (~readyOps)); } - + protected void reg(SelectionKey sk, KeyAttachment attachment, int intops) { - sk.interestOps(intops); + sk.interestOps(intops); attachment.interestOps(intops); attachment.setCometOps(intops); } @@ -1365,11 +1365,11 @@ public class NioEndpoint extends Abstrac long timeout = ka.getTimeout(); boolean isTimedout = timeout > 0 && delta > timeout; if ( close ) { - key.interestOps(0); + key.interestOps(0); ka.interestOps(0); //avoid duplicate stop calls processKey(key,ka); } else if (isTimedout) { - key.interestOps(0); + key.interestOps(0); ka.interestOps(0); //avoid duplicate timeout calls cancelledKey(key, SocketStatus.TIMEOUT,true); } else if (timeout > -1) { @@ -1399,13 +1399,13 @@ public class NioEndpoint extends Abstrac } } -// ----------------------------------------------------- Key Attachment Class +// ----------------------------------------------------- Key Attachment Class public static class KeyAttachment extends SocketWrapper<NioChannel> { - + public KeyAttachment(NioChannel channel) { super(channel); } - + public void reset(Poller poller, NioChannel channel, long soTimeout) { this.socket = channel; this.poller = poller; @@ -1439,11 +1439,11 @@ public class NioEndpoint extends Abstrac keepAliveLeft = 100; async = false; } - + public void reset() { reset(null,null,-1); } - + public Poller getPoller() { return poller;} public void setPoller(Poller poller){this.poller = poller;} public void setComet(boolean comet) { this.comet = comet; } @@ -1466,8 +1466,8 @@ public class NioEndpoint extends Abstrac } public void resetReadLatch() { readLatch = resetLatch(readLatch); } public void resetWriteLatch() { writeLatch = resetLatch(writeLatch); } - - protected CountDownLatch startLatch(CountDownLatch latch, int cnt) { + + protected CountDownLatch startLatch(CountDownLatch latch, int cnt) { if ( latch == null || latch.getCount() == 0 ) { return new CountDownLatch(cnt); } @@ -1475,34 +1475,34 @@ public class NioEndpoint extends Abstrac } public void startReadLatch(int cnt) { readLatch = startLatch(readLatch,cnt);} public void startWriteLatch(int cnt) { writeLatch = startLatch(writeLatch,cnt);} - + protected void awaitLatch(CountDownLatch latch, long timeout, TimeUnit unit) throws InterruptedException { if ( latch == null ) throw new IllegalStateException("Latch cannot be null"); latch.await(timeout,unit); } public void awaitReadLatch(long timeout, TimeUnit unit) throws InterruptedException { awaitLatch(readLatch,timeout,unit);} public void awaitWriteLatch(long timeout, TimeUnit unit) throws InterruptedException { awaitLatch(writeLatch,timeout,unit);} - + public long getLastRegistered() { return lastRegistered; } public void setLastRegistered(long reg) { lastRegistered = reg; } - + public void setSendfileData(SendfileData sf) { this.sendfileData = sf;} public SendfileData getSendfileData() { return this.sendfileData;} - + protected boolean comet = false; protected int cometOps = SelectionKey.OP_READ; protected boolean cometNotify = false; protected CountDownLatch readLatch = null; protected CountDownLatch writeLatch = null; protected SendfileData sendfileData = null; - + } // ------------------------------------------------ Application Buffer Handler public static class NioBufferHandler implements ApplicationBufferHandler { protected ByteBuffer readbuf = null; protected ByteBuffer writebuf = null; - + public NioBufferHandler(int readsize, int writesize, boolean direct) { if ( direct ) { readbuf = ByteBuffer.allocateDirect(readsize); @@ -1512,7 +1512,7 @@ public class NioEndpoint extends Abstrac writebuf = ByteBuffer.allocate(writesize); } } - + @Override public ByteBuffer expand(ByteBuffer buffer, int remaining) {return buffer;} @Override @@ -1547,17 +1547,17 @@ public class NioEndpoint extends Abstrac protected class SocketProcessor implements Runnable { protected NioChannel socket = null; - protected SocketStatus status = null; + protected SocketStatus status = null; public SocketProcessor(NioChannel socket, SocketStatus status) { reset(socket,status); } - + public void reset(NioChannel socket, SocketStatus status) { this.socket = socket; this.status = status; } - + @Override public void run() { boolean launch = false; @@ -1566,7 +1566,7 @@ public class NioEndpoint extends Abstrac try { key = socket.getIOChannel().keyFor(socket.getPoller().getSelector()); int handshake = -1; - + try { if (key!=null) handshake = socket.handshake(key.isReadable(), key.isWritable()); }catch ( IOException x ) { @@ -1587,7 +1587,7 @@ public class NioEndpoint extends Abstrac (KeyAttachment) key.attachment(), status); } - + if (state == SocketState.CLOSED) { // Close socket and pool try { Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java?rev=1200168&r1=1200167&r2=1200168&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java Thu Nov 10 05:53:21 2011 @@ -39,19 +39,19 @@ import org.apache.tomcat.util.MutableInt */ public class NioSelectorPool { - + public NioSelectorPool() { } - + private static final Log log = LogFactory.getLog(NioSelectorPool.class); protected static final boolean SHARED = Boolean.valueOf(System.getProperty("org.apache.tomcat.util.net.NioSelectorShared", "true")).booleanValue(); - + protected NioBlockingSelector blockingSelector; - + protected volatile Selector SHARED_SELECTOR; - + protected int maxSelectors = 200; protected long sharedSelectorTimeout = 30000; protected int maxSpareSelectors = -1; @@ -168,8 +168,8 @@ public class NioSelectorPool { public int write(ByteBuffer buf, NioChannel socket, Selector selector, long writeTimeout) throws IOException { return write(buf,socket,selector,writeTimeout,true,null); } - - public int write(ByteBuffer buf, NioChannel socket, Selector selector, + + public int write(ByteBuffer buf, NioChannel socket, Selector selector, long writeTimeout, boolean block,MutableInteger lastWrite) throws IOException { if ( SHARED && block ) { return blockingSelector.write(buf,socket,writeTimeout,lastWrite); @@ -186,7 +186,7 @@ public class NioSelectorPool { cnt = socket.write(buf); //write the data if (lastWrite!=null) lastWrite.set(cnt); if (cnt == -1) throw new EOFException(); - + written += cnt; if (cnt > 0) { time = System.currentTimeMillis(); //reset our timeout timer @@ -229,7 +229,7 @@ public class NioSelectorPool { return read(buf,socket,selector,readTimeout,true); } /** - * Performs a read using the bytebuffer for data to be read and a selector to register for events should + * Performs a read using the bytebuffer for data to be read and a selector to register for events should * you have the block=true. * If the <code>selector</code> parameter is null, then it will perform a busy read that could * take up a lot of CPU cycles. @@ -261,7 +261,7 @@ public class NioSelectorPool { read += cnt; if (cnt > 0) continue; //read some more if (cnt==0 && (read>0 || (!block) ) ) break; //we are done reading - } + } if ( selector != null ) {//perform a blocking read //register OP_WRITE to the selector if (key==null) key = socket.getIOChannel().register(selector, SelectionKey.OP_READ); Modified: tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java URL: http://svn.apache.org/viewvc/tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java?rev=1200168&r1=1200167&r2=1200168&view=diff ============================================================================== --- tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java (original) +++ tomcat/tc7.0.x/trunk/java/org/apache/tomcat/util/net/SecureNioChannel.java Thu Nov 10 05:53:21 2011 @@ -32,28 +32,28 @@ import javax.net.ssl.SSLEngineResult.Sta import org.apache.tomcat.util.MutableInteger; /** - * + * * Implementation of a secure socket channel * @author Filip Hanik * @version 1.0 */ public class SecureNioChannel extends NioChannel { - + protected ByteBuffer netInBuffer; protected ByteBuffer netOutBuffer; - + protected SSLEngine sslEngine; - + protected boolean handshakeComplete = false; protected HandshakeStatus handshakeStatus; //gets set by handshake - + protected boolean closed = false; protected boolean closing = false; - + protected NioSelectorPool pool; - - public SecureNioChannel(SocketChannel channel, SSLEngine engine, + + public SecureNioChannel(SocketChannel channel, SSLEngine engine, ApplicationBufferHandler bufHandler, NioSelectorPool pool) throws IOException { super(channel,bufHandler); this.sslEngine = engine; @@ -62,17 +62,17 @@ public class SecureNioChannel extends Ni //allocate network buffers - TODO, add in optional direct non-direct buffers if ( netInBuffer == null ) netInBuffer = ByteBuffer.allocateDirect(netBufSize); if ( netOutBuffer == null ) netOutBuffer = ByteBuffer.allocateDirect(netBufSize); - + //selector pool for blocking operations this.pool = pool; - + //ensure that the application has a large enough read/write buffers //by doing this, we should not encounter any buffer overflow errors bufHandler.expand(bufHandler.getReadBuffer(), appBufSize); bufHandler.expand(bufHandler.getWriteBuffer(), appBufSize); reset(); } - + public void reset(SSLEngine engine) throws IOException { this.sslEngine = engine; reset(); @@ -91,7 +91,7 @@ public class SecureNioChannel extends Ni sslEngine.beginHandshake(); handshakeStatus = sslEngine.getHandshakeStatus(); } - + @Override public int getBufferSize() { int size = super.getBufferSize(); @@ -100,12 +100,12 @@ public class SecureNioChannel extends Ni return size; } - -//=========================================================================================== + +//=========================================================================================== // NIO SSL METHODS //=========================================================================================== /** - * returns true if the network buffer has + * returns true if the network buffer has * been flushed out and is empty * @return boolean */ @@ -118,7 +118,7 @@ public class SecureNioChannel extends Ni } return !netOutBuffer.hasRemaining(); } - + /** * Flushes the buffer to the network, non blocking * @param buf ByteBuffer @@ -134,7 +134,7 @@ public class SecureNioChannel extends Ni return true; } } - + /** * Performs SSL handshake, non blocking, but performs NEED_TASK on the same thread.<br> * Hence, you should never call this method using your Acceptor thread, as you would slow down @@ -149,11 +149,11 @@ public class SecureNioChannel extends Ni @Override public int handshake(boolean read, boolean write) throws IOException { if ( handshakeComplete ) return 0; //we have done our initial handshake - + if (!flush(netOutBuffer)) return SelectionKey.OP_WRITE; //we still have data to write - + SSLEngineResult handshake = null; - + while (!handshakeComplete) { switch ( handshakeStatus ) { case NOT_HANDSHAKING: { @@ -164,13 +164,13 @@ public class SecureNioChannel extends Ni //we are complete if we have delivered the last package handshakeComplete = !netOutBuffer.hasRemaining(); //return 0 if we are complete, otherwise we still have data to write - return handshakeComplete?0:SelectionKey.OP_WRITE; + return handshakeComplete?0:SelectionKey.OP_WRITE; } case NEED_WRAP: { //perform the wrap function handshake = handshakeWrap(write); if ( handshake.getStatus() == Status.OK ){ - if (handshakeStatus == HandshakeStatus.NEED_TASK) + if (handshakeStatus == HandshakeStatus.NEED_TASK) handshakeStatus = tasks(); } else { //wrap should always work with our buffers @@ -180,7 +180,7 @@ public class SecureNioChannel extends Ni //should actually return OP_READ if we have NEED_UNWRAP return SelectionKey.OP_WRITE; } - //fall down to NEED_UNWRAP on the same call, will result in a + //fall down to NEED_UNWRAP on the same call, will result in a //BUFFER_UNDERFLOW if it needs data } //$FALL-THROUGH$ @@ -188,7 +188,7 @@ public class SecureNioChannel extends Ni //perform the unwrap function handshake = handshakeUnwrap(read); if ( handshake.getStatus() == Status.OK ) { - if (handshakeStatus == HandshakeStatus.NEED_TASK) + if (handshakeStatus == HandshakeStatus.NEED_TASK) handshakeStatus = tasks(); } else if ( handshake.getStatus() == Status.BUFFER_UNDERFLOW ){ //read more data, reregister for OP_READ @@ -204,15 +204,15 @@ public class SecureNioChannel extends Ni } default: throw new IllegalStateException("Invalid handshake status:"+handshakeStatus); }//switch - }//while - //return 0 if we are complete, otherwise reregister for any activity that + }//while + //return 0 if we are complete, otherwise reregister for any activity that //would cause this method to be called again. return handshakeComplete?0:(SelectionKey.OP_WRITE|SelectionKey.OP_READ); } - + /** * Force a blocking handshake to take place for this key. - * This requires that both network and application buffers have been emptied out prior to this call taking place, or a + * This requires that both network and application buffers have been emptied out prior to this call taking place, or a * IOException will be thrown. * @param timeout - timeout in milliseconds for each socket operation * @throws IOException - if an IO exception occurs or if application or network buffers contain data @@ -268,9 +268,9 @@ public class SecureNioChannel extends Ni if (selector!=null) try {selector.close();} catch (Exception ignore) {} } } - - - + + + /** * Executes all the tasks needed on the same thread. * @return HandshakeStatus @@ -303,7 +303,7 @@ public class SecureNioChannel extends Ni if ( doWrite ) flush(netOutBuffer); return result; } - + /** * Perform handshake unwrap * @param doread boolean @@ -311,7 +311,7 @@ public class SecureNioChannel extends Ni * @throws IOException */ protected SSLEngineResult handshakeUnwrap(boolean doread) throws IOException { - + if (netInBuffer.position() == netInBuffer.limit()) { //clear the buffer if we have emptied it out on data netInBuffer.clear(); @@ -320,7 +320,7 @@ public class SecureNioChannel extends Ni //if we have data to read, read it int read = sc.read(netInBuffer); if (read == -1) throw new IOException("EOF encountered during handshake."); - } + } SSLEngineResult result; boolean cont = false; //loop while we can perform pure SSLEngine data @@ -344,7 +344,7 @@ public class SecureNioChannel extends Ni }while ( cont ); return result; } - + /** * Sends a SSL close message, will not physically close the connection here.<br> * To close the connection, you could do something like @@ -423,7 +423,7 @@ public class SecureNioChannel extends Ni int netread = sc.read(netInBuffer); //did we reach EOF? if so send EOF up one layer. if (netread == -1) return -1; - + //the data read int read = 0; //the SSL engine result @@ -435,7 +435,7 @@ public class SecureNioChannel extends Ni unwrap = sslEngine.unwrap(netInBuffer, dst); //compact the buffer netInBuffer.compact(); - + if ( unwrap.getStatus()==Status.OK || unwrap.getStatus()==Status.BUFFER_UNDERFLOW ) { //we did receive some data, add it to our total read += unwrap.bytesProduced(); @@ -444,7 +444,7 @@ public class SecureNioChannel extends Ni //if we need more network data, then bail out for now. if ( unwrap.getStatus() == Status.BUFFER_UNDERFLOW ) break; }else if ( unwrap.getStatus()==Status.BUFFER_OVERFLOW && read>0 ) { - //buffer overflow can happen, if we have read data, then + //buffer overflow can happen, if we have read data, then //empty out the dst buffer before we do another read break; }else { @@ -499,7 +499,7 @@ public class SecureNioChannel extends Ni if (result.getHandshakeStatus() == HandshakeStatus.NEED_TASK) tasks(); } else { throw new IOException("Unable to wrap data, invalid engine state: " +result.getStatus()); - } + } //force a flush flush(netOutBuffer); @@ -507,12 +507,12 @@ public class SecureNioChannel extends Ni return written; } } - + @Override public int getOutboundRemaining() { return netOutBuffer.remaining(); } - + @Override public boolean flushOutbound() throws IOException { int remaining = netOutBuffer.remaining(); @@ -521,7 +521,7 @@ public class SecureNioChannel extends Ni return remaining2 < remaining; } - + /** * Callback interface to be able to expand buffers * when buffer overflow exceptions happen @@ -558,7 +558,7 @@ public class SecureNioChannel extends Ni public void setBufHandler(ApplicationBufferHandler bufHandler) { this.bufHandler = bufHandler; } - + @Override public SocketChannel getIOChannel() { return sc; --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org