Package org.mortbay.io

Examples of org.mortbay.io.Buffer


    /* ------------------------------------------------------------ */
    public void sendCPong() throws IOException
    {

        Buffer buff = _buffers.getBuffer(AJP13_CPONG_RESPONSE.length);
        buff.put(AJP13_CPONG_RESPONSE);

        // flushing cpong response
        do
        {
            _endp.flush(buff);

        }
        while(buff.length() >0);
        _buffers.returnBuffer(buff);

        reset(true);

    }
View Full Code Here


                String ifms=request.getHeader(HttpHeaders.IF_MODIFIED_SINCE);
                if (ifms!=null)
                {
                    if (content!=null)
                    {
                        Buffer mdlm=content.getLastModified();
                        if (mdlm!=null)
                        {
                            if (ifms.equals(mdlm.toString()))
                            {
                                response.reset();
                                response.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
                                response.flushBuffer();
                                return false;
View Full Code Here

                throw new IllegalStateException("!empty");

            if (content instanceof HttpContent)
            {
                HttpContent c = (HttpContent)content;
                Buffer contentType = c.getContentType();
                if (contentType != null && !_responseFields.containsKey(HttpHeaders.CONTENT_TYPE_BUFFER))
                {
                    String enc = _response.getSetCharacterEncoding();
                    if(enc==null)
                        _responseFields.add(HttpHeaders.CONTENT_TYPE_BUFFER, contentType);
                    else
                    {
                        if(contentType instanceof CachedBuffer)
                        {
                            CachedBuffer content_type = ((CachedBuffer)contentType).getAssociate(enc);
                            if(content_type!=null)
                                _responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER, content_type);
                            else
                            {
                                _responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,
                                        contentType+";charset="+QuotedStringTokenizer.quote(enc,";= "));
                            }
                        }
                        else
                        {
                            _responseFields.put(HttpHeaders.CONTENT_TYPE_BUFFER,
                                    contentType+";charset="+QuotedStringTokenizer.quote(enc,";= "));
                        }
                    }
                }
                if (c.getContentLength() > 0)
                    _responseFields.putLongField(HttpHeaders.CONTENT_LENGTH_BUFFER,c.getContentLength());
                Buffer lm = c.getLastModified();
                long lml = c.getResource().lastModified();
                if (lm != null)
                    _responseFields.put(HttpHeaders.LAST_MODIFIED_BUFFER,lm,lml);
                else if (c.getResource() != null)
                {
                    if (lml != -1)
                        _responseFields.putDateField(HttpHeaders.LAST_MODIFIED_BUFFER,lml);
                }

                content = c.getBuffer();
                if (content == null)
                    content = c.getInputStream();
            }
            else if (content instanceof Resource)
            {
                resource = (Resource)content;
                _responseFields.putDateField(HttpHeaders.LAST_MODIFIED_BUFFER,resource.lastModified());
                content = resource.getInputStream();
            }

            if (content instanceof Buffer)
            {
                _generator.addContent((Buffer)content,HttpGenerator.LAST);
                commitResponse(HttpGenerator.LAST);
            }
            else if (content instanceof InputStream)
            {
                InputStream in = (InputStream)content;

                try
                {
                    int max = _generator.prepareUncheckedAddContent();
                    Buffer buffer = _generator.getUncheckedBuffer();

                    int len = buffer.readFrom(in,max);

                    while (len >= 0)
                    {
                        _generator.completeUncheckedAddContent();
                        _out.flush();

                        max = _generator.prepareUncheckedAddContent();
                        buffer = _generator.getUncheckedBuffer();
                        len = buffer.readFrom(in,max);
                    }
                    _generator.completeUncheckedAddContent();
                    _out.flush();
                }
                finally
View Full Code Here

    @Override
    protected Buffer newBuffer(int size)
    {
        if (_connectorType!=CONNECTOR_SOCKET)
        {
            Buffer buf=null;
            if (size==getHeaderBufferSize())
                buf=new IndirectNIOBuffer(size);
            else if (_useDirectBuffers)
                buf=new DirectNIOBuffer(size);
            else
View Full Code Here

     */
    private String inferMimeType(ServletRequest request) {
      String path = ((HttpServletRequest)request).getRequestURI();
      ContextHandler.SContext sContext = (ContextHandler.SContext)config.getServletContext();
      MimeTypes mimes = sContext.getContextHandler().getMimeTypes();
      Buffer mimeBuffer = mimes.getMimeByExtension(path);
      return (mimeBuffer == null) ? null : mimeBuffer.toString();
    }
View Full Code Here

        InputStream is = in.getBody(InputStream.class);
        if (is != null) {
            jettyExchange.setMethod(HttpMethods.POST);
            jettyExchange.setRequestContentSource(is);
        } else {
            Buffer buffer = in.getBody(Buffer.class);
            if (buffer != null) {
                jettyExchange.setMethod(HttpMethods.POST);
                jettyExchange.setRequestContent(buffer);
            } else {
                jettyExchange.setMethod(HttpMethods.GET);
View Full Code Here

     * @return MIME type matching the longest dot extension of the
     * file name.
     */
    public Buffer getMimeByExtension(String filename)
    {
        Buffer type=null;

        if (filename!=null)
        {
            int i=-1;
            while(type==null)
View Full Code Here

    }

    /* ------------------------------------------------------------ */
    private static synchronized Buffer normalizeMimeType(String type)
    {
        Buffer b =CACHE.get(type);
        if (b==null)
            b=CACHE.add(type,__index++);
        return b;
    }
View Full Code Here

                    {
                        // handler last header if any
                        if (_cached!=null || _tok0.length() > 0 || _tok1.length() > 0 || _multiLineValue != null)
                        {
                           
                            Buffer header=_cached!=null?_cached:HttpHeaders.CACHE.lookup(_tok0);
                            _cached=null;
                            Buffer value=_multiLineValue == null ? (Buffer) _tok1 : (Buffer) new ByteArrayBuffer(_multiLineValue);
                           
                            int ho=HttpHeaders.CACHE.getOrdinal(header);
                            if (ho >= 0)
                            {
                                int vo=-1;
                               
                                switch (ho)
                                {
                                    case HttpHeaders.CONTENT_LENGTH_ORDINAL:
                                        if (_contentLength != HttpTokens.CHUNKED_CONTENT)
                                        {
                                            _contentLength=BufferUtil.toLong(value);
                                            if (_contentLength <= 0)
                                                _contentLength=HttpTokens.NO_CONTENT;
                                        }
                                        break;
                                       
                                    case HttpHeaders.TRANSFER_ENCODING_ORDINAL:
                                        value=HttpHeaderValues.CACHE.lookup(value);
                                        vo=HttpHeaderValues.CACHE.getOrdinal(value);
                                        if (HttpHeaderValues.CHUNKED_ORDINAL == vo)
                                            _contentLength=HttpTokens.CHUNKED_CONTENT;
                                        else
                                        {
                                            String c=value.toString();
                                            if (c.endsWith(HttpHeaderValues.CHUNKED))
                                                _contentLength=HttpTokens.CHUNKED_CONTENT;
                                           
                                            else if (c.indexOf(HttpHeaderValues.CHUNKED) >= 0)
                                                throw new HttpException(400,null);
                                        }
                                        break;
                                }
                            }
                           
                            _handler.parsedHeader(header, value);
                            _tok0.setPutIndex(_tok0.getIndex());
                            _tok1.setPutIndex(_tok1.getIndex());
                            _multiLineValue=null;
                        }
                       
                       
                        // now handle ch
                        if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED)
                        {
                            // End of header

                            // work out the _content demarcation
                            if (_contentLength == HttpTokens.UNKNOWN_CONTENT)
          {
            if (_responseStatus == // request
        || _responseStatus == 304 // not-modified response
        || _responseStatus == 204 // no-content response
        || _responseStatus < 200) // 1xx response
                                    _contentLength=HttpTokens.NO_CONTENT;
        else
                                    _contentLength=HttpTokens.EOF_CONTENT;
          }

                            _contentPosition=0;
                            _eol=ch;
                            // We convert _contentLength to an int for this switch statement because
                            // we don't care about the amount of data available just whether there is some.
                            switch (_contentLength > Integer.MAX_VALUE ? Integer.MAX_VALUE : (int) _contentLength)
                            {
                                case HttpTokens.EOF_CONTENT:
                                    _state=STATE_EOF_CONTENT;
                                    if(_body==null && _buffers!=null)
                                        _body=_buffers.getBuffer(_contentBufferSize);
                                   
                                    _handler.headerComplete(); // May recurse here !
                                    break;
                                   
                                case HttpTokens.CHUNKED_CONTENT:
                                    _state=STATE_CHUNKED_CONTENT;
                                    if (_body==null && _buffers!=null)
                                        _body=_buffers.getBuffer(_contentBufferSize);
                                    _handler.headerComplete(); // May recurse here !
                                    break;
                                   
                                case HttpTokens.NO_CONTENT:
                                    _state=STATE_END;
                                    _handler.headerComplete();
                                    _handler.messageComplete(_contentPosition);
                                    break;
                                   
                                default:
                                    _state=STATE_CONTENT;
                                    if(_forceContentBuffer ||
                                      (_buffers!=null && _body==null && _buffer==_header && _contentLength>=(_header.capacity()-_header.getIndex())))
                                        _body=_buffers.getBuffer(_contentBufferSize);
                                    _handler.headerComplete(); // May recurse here !
                                    break;
                            }
                            return total_filled;
                        }
                        else
                        {
                            // New header
                            _length=1;
                            _buffer.mark();
                            _state=STATE_HEADER_NAME;
                           
                            // try cached name!
                            if (array!=null)
                            {
                                _cached=HttpHeaders.CACHE.getBest(array, _buffer.markIndex(), length+1);

                                if (_cached!=null)
                                {
                                    _length=_cached.length();
                                    _buffer.setGetIndex(_buffer.markIndex()+_length);
                                    length=_buffer.length();
                                }
                            }
                        }
                    }
                    break;

                case STATE_HEADER_NAME:
                    if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED)
                    {
                        if (_length > 0)
                                _tok0.update(_buffer.markIndex(), _buffer.markIndex() + _length);
                        _eol=ch;
                        _state=STATE_HEADER;
                    }
                    else if (ch == HttpTokens.COLON)
                    {
                        if (_length > 0 && _cached==null)
                                _tok0.update(_buffer.markIndex(), _buffer.markIndex() + _length);
                        _length=-1;
                        _state=STATE_HEADER_VALUE;
                    }
                    else if (ch != HttpTokens.SPACE && ch != HttpTokens.TAB)
                    {
                        // Drag the mark
                        _cached=null;
                        if (_length == -1) _buffer.mark();
                        _length=_buffer.getIndex() - _buffer.markIndex();
                    }
                    break;

                case STATE_HEADER_VALUE:
                    if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED)
                    {
                        if (_length > 0)
                        {
                            if (_tok1.length() == 0)
                                _tok1.update(_buffer.markIndex(), _buffer.markIndex() + _length);
                            else
                            {
                                // Continuation line!
                                if (_multiLineValue == null) _multiLineValue=_tok1.toString();
                                _tok1.update(_buffer.markIndex(), _buffer.markIndex() + _length);
                                _multiLineValue += " " + _tok1.toString();
                            }
                        }
                        _eol=ch;
                        _state=STATE_HEADER;
                    }
                    else if (ch != HttpTokens.SPACE && ch != HttpTokens.TAB)
                    {
                        if (_length == -1) _buffer.mark();
                        _length=_buffer.getIndex() - _buffer.markIndex();
                    }
                    break;
            }
        } // end of HEADER states loop
       
        // ==========================
       
        // Handle _content
        length=_buffer.length();
        if (_input!=null)
            _input._contentView=_contentView;
        Buffer chunk;
        while (_state > STATE_END && length > 0)
        {
            if (_eol == HttpTokens.CARRIAGE_RETURN && _buffer.peek() == HttpTokens.LINE_FEED)
            {
                _eol=_buffer.get();
                length=_buffer.length();
                continue;
            }
            _eol=0;
            switch (_state)
            {
                case STATE_EOF_CONTENT:
                    chunk=_buffer.get(_buffer.length());
                    _contentPosition += chunk.length();
                    _contentView.update(chunk);
                    _handler.content(chunk); // May recurse here
                    // TODO adjust the _buffer to keep unconsumed content
                    return total_filled;

                case STATE_CONTENT:
                {
                    long remaining=_contentLength - _contentPosition;
                    if (remaining == 0)
                    {
                        _state=STATE_END;
                        _handler.messageComplete(_contentPosition);
                        return total_filled;
                    }
                   
                    if (length > remaining)
                    {
                        // We can cast reamining to an int as we know that it is smaller than
                        // or equal to length which is already an int.
                        length=(int)remaining;
                    }
                   
                    chunk=_buffer.get(length);
                    _contentPosition += chunk.length();
                    _contentView.update(chunk);
                    _handler.content(chunk); // May recurse here
                   
                    // TODO adjust the _buffer to keep unconsumed content
                    return total_filled;
                }

                case STATE_CHUNKED_CONTENT:
                {
                    ch=_buffer.peek();
                    if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED)
                        _eol=_buffer.get();
                    else if (ch <= HttpTokens.SPACE)
                        _buffer.get();
                    else
                    {
                        _chunkLength=0;
                        _chunkPosition=0;
                        _state=STATE_CHUNK_SIZE;
                    }
                    break;
                }

                case STATE_CHUNK_SIZE:
                {
                    ch=_buffer.get();
                    if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED)
                    {
                        _eol=ch;
                        if (_chunkLength == 0)
                        {
                            _state=STATE_END;
                            _handler.messageComplete(_contentPosition);
                            return total_filled;
                        }
                        else
                            _state=STATE_CHUNK;
                    }
                    else if (ch <= HttpTokens.SPACE || ch == HttpTokens.SEMI_COLON)
                        _state=STATE_CHUNK_PARAMS;
                    else if (ch >= '0' && ch <= '9')
                        _chunkLength=_chunkLength * 16 + (ch - '0');
                    else if (ch >= 'a' && ch <= 'f')
                        _chunkLength=_chunkLength * 16 + (10 + ch - 'a');
                    else if (ch >= 'A' && ch <= 'F')
                        _chunkLength=_chunkLength * 16 + (10 + ch - 'A');
                    else
                        throw new IOException("bad chunk char: " + ch);
                    break;
                }

                case STATE_CHUNK_PARAMS:
                {
                    ch=_buffer.get();
                    if (ch == HttpTokens.CARRIAGE_RETURN || ch == HttpTokens.LINE_FEED)
                    {
                        _eol=ch;
                        if (_chunkLength == 0)
                        {
                            _state=STATE_END;
                            _handler.messageComplete(_contentPosition);
                            return total_filled;
                        }
                        else
                            _state=STATE_CHUNK;
                    }
                    break;
                }
               
                case STATE_CHUNK:
                {
                    int remaining=_chunkLength - _chunkPosition;
                    if (remaining == 0)
                    {
                        _state=STATE_CHUNKED_CONTENT;
                        break;
                    }
                    else if (length > remaining)
                        length=remaining;
                    chunk=_buffer.get(length);
                    _contentPosition += chunk.length();
                    _chunkPosition += chunk.length();
                    _contentView.update(chunk);
                    _handler.content(chunk); // May recurse here
                    // TODO adjust the _buffer to keep unconsumed content
                    return total_filled;
                }
View Full Code Here

            int length = poke(index,array,src.getIndex(),src.length());
            return length;
        }
        else
        {
            Buffer src_buf=src.buffer();
            if (src_buf instanceof NIOBuffer)
            {
                ByteBuffer src_bytebuf = ((NIOBuffer)src_buf)._buf;
                if (src_bytebuf==_buf)
                    src_bytebuf=_buf.duplicate();
View Full Code Here

TOP

Related Classes of org.mortbay.io.Buffer

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.