Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2012 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.websockets.core.protocol.version07;
 
 

Author(s):
Norman Maurer
 
     private final ByteBuffer status = ByteBuffer.allocate(2);
     private boolean statusValidated;
     private final Masker masker;
     enum State {
         EOF,
         DONE,
         VALIDATE
     }
 
     WebSocket07CloseFrameSourceChannel(WebSocket07Channel wsChannellong payloadSizeint rsvMasker maskerPooled<ByteBufferpooledlong frameLength) {
         // no fragmentation allowed per spec
         super(wsChannel.payloadSizersvtruepooledframeLengthmaskernew UTF8Checker());
         this. = masker;
     }
 
     WebSocket07CloseFrameSourceChannel(WebSocket07Channel wsChannellong payloadSizeint rsvPooled<ByteBufferpooledlong frameLength) {
         // no fragmentation allowed per spec
         super(wsChannel.payloadSizersvtruepooledframeLengthnew UTF8Checker());
          = null;
     }
 
     @Override
     public int read(ByteBuffer dstthrows IOException {
         switch (validateStatus()) {
             case :
                 if (.hasRemaining()) {
                     int copied = 0;
                     while(dst.hasRemaining() && .hasRemaining()) {
                         dst.put(.get());
                         copied++;
                     }
                     return copied;
                 } else {
                     return super.read(dst);
                 }
             case :
                 return -1;
             default:
                 return 0;
         }
     }
 
     @Override
     public long read(ByteBuffer[] dstsint offsetint lengththrows IOException {
         switch (validateStatus()) {
             case :
                 if (.hasRemaining()) {
                     int copied = 0;
                     for (int i = offseti < lengthi++) {
                         ByteBuffer dst = dsts[i];
                         while(dst.hasRemaining() && .hasRemaining()) {
                             dst.put(.get());
                             copied++;
                         }
                         if (dst.hasRemaining()) {
                             return copied + super.read(dstsoffsetlength);
                         }
                     }
 
                     return copied;
                 } else {
                     return super.read(dstsoffsetlength);
                 }
             case :
                 return -1;
             default:
                 return 0;
         }
    }
    private State validateStatus() throws IOException{
        if () {
            return .;
        }
        for (;;) {
            int r = super.read();
            if (r == -1) {
                return .;
            }
            if (!.hasRemaining()) {
                 = true;
                .flip();
                // Must have 2 byte integer within the valid range
                int statusCode = .getShort(0);
                if (statusCode >= 0 && statusCode <= 999 || statusCode >= 1004 && statusCode <= 1006
                        || statusCode >= 1012 && statusCode <= 2999) {
                    IOException exception =  ..invalidCloseFrameStatusCode(statusCode);
                    ((WebSocket07Channel)getFramedChannel()).markReadsBroken(exception);
                    throw exception;
                }
                return .;
            }
            if (r == 0) {
                return .;
            }
        }
    }
    @Override
    protected void afterRead(ByteBuffer bufferint positionint lengththrows IOException {
        // not check for utf8 when read the status code
        if (!) {
            if ( != null) {
                .afterRead(bufferpositionlength);
            }
            return;
        }
        super.afterRead(bufferpositionlength);
    }
New to GrepCode? Check out our FAQ X