Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2014 Red Hat, Inc., and individual contributors
   * as indicated by the @author tags.
   *
   * Licensed 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.
  *  See the License for the specific language governing permissions and
  *  limitations under the License.
  */
 
 package io.undertow.channels;
 
 
Wrapper for read timeout. This should always be the first wrapper applied to the underlying channel.

Author(s):
Stuart Douglas
See also:
org.xnio.Options.READ_TIMEOUT
 
 
     private int readTimeout;
     private XnioExecutor.Key handle;
 
     private final Runnable timeoutCommand = new Runnable() {
         @Override
         public void run() {
             ..tracef("Timing out channel %s due to inactivity");
             try {
                 if (.isReadResumed()) {
                     ChannelListeners.invokeChannelListener(ReadTimeoutStreamSourceChannel.this.get());
                 }
             } finally {
                 IoUtils.safeClose();
             }
         }
     };

    

Parameters:
delegate The underlying channel
readTimeout The read timeout, in milliseconds
 
     public ReadTimeoutStreamSourceChannel(final StreamSourceChannel delegate) {
         super(delegate);
         try {
             Integer timeout = delegate.getOption(.);
             if (timeout != null) {
                 this. = timeout;
             } else {
                 this. = 0;
             }
         } catch (IOException e) {
             throw new RuntimeException(e);
         }
     }
 
     private void handleReadTimeout(final long ret) {
         if ( > 0) {
             if (ret == 0 &&  == null) {
             } else if (ret > 0 &&  != null) {
                 .remove();
             }
         }
     }
 
     @Override
     public long transferTo(final long positionfinal long countfinal FileChannel targetthrows IOException {
         long ret = .transferTo(positioncounttarget);
         handleReadTimeout(ret);
         return ret;
     }
 
     @Override
     public long transferTo(final long countfinal ByteBuffer throughBufferfinal StreamSinkChannel targetthrows IOException {
         long ret = .transferTo(countthroughBuffertarget);
         handleReadTimeout(ret);
         return ret;
    }
    @Override
    public long read(final ByteBuffer[] dstsfinal int offsetfinal int lengththrows IOException {
        long ret = .read(dstsoffsetlength);
        handleReadTimeout(ret);
        return ret;
    }
    @Override
    public long read(final ByteBuffer[] dststhrows IOException {
        long ret = .read(dsts);
        handleReadTimeout(ret);
        return ret;
    }
    @Override
    public int read(final ByteBuffer dstthrows IOException {
        int ret = .read(dst);
        handleReadTimeout(ret);
        return ret;
    }
    @Override
    public <T> T setOption(final Option<T> optionfinal T valuethrows IllegalArgumentExceptionIOException {
        T ret = super.setOption(optionvalue);
        if (option == .) {
             = (Integervalue;
            if ( != null) {
                .remove();
                if ( > 0) {
                    getReadThread().executeAfter(.);
                }
            }
        }
        return ret;
    }
New to GrepCode? Check out our FAQ X