⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sslhttpchannelendpoint.java

📁 是离开的肌肤了卡机是离开的就富利卡及是了的开发及拉考试及的福利科技阿斯利康的肌肤莱卡及时的离开福建阿斯顿发
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            // h.append(_engine.getHandshakeStatus()).append('\n');                        switch(_engine.getHandshakeStatus())            {                case FINISHED:                case NOT_HANDSHAKING:                    if (_closing || available==0)                    {                        if (consumed==0)                            consumed= -1;                        break loop;                    }                                            int c=(header!=null && buffer!=null)?wrap(header,buffer):wrap(header);                    if (c>0)                    {                        consumed+=c;                        available-=c;                    }                    else if (c<0)                    {                        if (consumed==0)                            consumed=-1;                        break loop;                    }                                        break;                case NEED_UNWRAP:                    Buffer buf =_buffers.getBuffer(_engine.getSession().getApplicationBufferSize());                    try                    {                        ByteBuffer bbuf = ((NIOBuffer)buf).getByteBuffer();                        if (!unwrap(bbuf) && _engine.getHandshakeStatus()==HandshakeStatus.NEED_UNWRAP)                        {                            // h.append("break").append('\n');                            break loop;                        }                    }                    finally                    {                        _buffers.returnBuffer(buf);                    }                                        break;                case NEED_TASK:                {                    Runnable task;                    while ((task=_engine.getDelegatedTask())!=null)                    {                        // h.append("run task\n");                        task.run();                    }                    break;                }                case NEED_WRAP:                {                    synchronized(_outBuffer)                    {                        try                        {                            _outNIOBuffer.compact();                            int put=_outNIOBuffer.putIndex();                            _outBuffer.position();                            _result=null;                            _last="flush wrap";                            _result=_engine.wrap(__NO_BUFFERS,_outBuffer);                            switch(_result.getStatus())                            {                                case BUFFER_OVERFLOW:                                case BUFFER_UNDERFLOW:                                    Log.warn("wrap {}",_result);                                case CLOSED:                                    _closing=true;                            }                            // h.append("wrap=").append(result).append('\n');                            _outNIOBuffer.setPutIndex(put+_result.bytesProduced());                        }                        finally                        {                            _outBuffer.position(0);                        }                    }                    flush();                    break;                }            }        }                return consumed;    }            /* ------------------------------------------------------------ */    public void flush() throws IOException    {        while (_outNIOBuffer.length()>0)        {            int flushed=super.flush(_outNIOBuffer);            // h.append("flushed=").append(flushed).append(" of ").append(_outNIOBuffer.length()).append('\n');            if (flushed==0)            {                Thread.yield();                flushed=super.flush(_outNIOBuffer);                // h.append("flushed2=").append(flushed).append(" of ").append(_outNIOBuffer.length()).append('\n');            }        }    }    /* ------------------------------------------------------------ */    private ByteBuffer extractInputBuffer(Buffer buffer)    {        assert buffer instanceof NIOBuffer;        NIOBuffer nbuf=(NIOBuffer)buffer;        ByteBuffer bbuf=nbuf.getByteBuffer();        bbuf.position(buffer.putIndex());        return bbuf;    }    /* ------------------------------------------------------------ */    /**     * @return true if progress is made     */    private boolean unwrap(ByteBuffer buffer) throws IOException    {        if (_inNIOBuffer.hasContent())            _inNIOBuffer.compact();        else             _inNIOBuffer.clear();        int total_filled=0;        while (_inNIOBuffer.space()>0 && super.isOpen())        {            try            {                int filled=super.fill(_inNIOBuffer);                // h.append("fill=").append(filled).append('\n');                if (filled<=0)                    break;                total_filled+=filled;            }            catch(IOException e)            {                if (_inNIOBuffer.length()==0)                    throw e;                break;            }        }        // h.append("inNIOBuffer=").append(_inNIOBuffer.length()).append('\n');                if (_inNIOBuffer.length()==0)        {            if(!isOpen())                throw new org.mortbay.jetty.EofException();            return false;        }        try        {            _inBuffer.position(_inNIOBuffer.getIndex());            _inBuffer.limit(_inNIOBuffer.putIndex());            _result=null;            _last="unwrap";            _result=_engine.unwrap(_inBuffer,buffer);            // h.append("unwrap=").append(result).append('\n');            _inNIOBuffer.skip(_result.bytesConsumed());        }        finally        {            _inBuffer.position(0);            _inBuffer.limit(_inBuffer.capacity());        }                switch(_result.getStatus())        {            case BUFFER_OVERFLOW:            case BUFFER_UNDERFLOW:                if (Log.isDebugEnabled()) Log.debug("unwrap {}",_result);                return (total_filled > 0);                            case CLOSED:                _closing=true;            case OK:                boolean progress=total_filled>0 ||_result.bytesConsumed()>0 || _result.bytesProduced()>0;                    // h.append("progress=").append(progress).append('\n');                return progress;            default:                Log.warn("unwrap "+_result);            throw new IOException(_result.toString());        }    }        /* ------------------------------------------------------------ */    private ByteBuffer extractOutputBuffer(Buffer buffer,int n)    {        NIOBuffer nBuf=null;        if (buffer.buffer() instanceof NIOBuffer)        {            nBuf=(NIOBuffer)buffer.buffer();            return nBuf.getByteBuffer();        }        else        {            if (_reuseBuffer[n]==null)                _reuseBuffer[n] = (NIOBuffer)_buffers.getBuffer(_session.getApplicationBufferSize());            NIOBuffer buf = _reuseBuffer[n];            buf.clear();            buf.put(buffer);            return buf.getByteBuffer();        }    }    /* ------------------------------------------------------------ */    private int wrap(Buffer header, Buffer buffer) throws IOException    {        _gather[0]=extractOutputBuffer(header,0);        synchronized(_gather[0])        {            _gather[0].position(header.getIndex());            _gather[0].limit(header.putIndex());            _gather[1]=extractOutputBuffer(buffer,1);            synchronized(_gather[1])            {                _gather[1].position(buffer.getIndex());                _gather[1].limit(buffer.putIndex());                synchronized(_outBuffer)                {                    int consumed=0;                    try                    {                        _outNIOBuffer.clear();                        _outBuffer.position(0);                        _outBuffer.limit(_outBuffer.capacity());                        _result=null;                        _last="wrap wrap";                        _result=_engine.wrap(_gather,_outBuffer);                        // h.append("wrap2=").append(result).append('\n');                        _outNIOBuffer.setGetIndex(0);                        _outNIOBuffer.setPutIndex(_result.bytesProduced());                        consumed=_result.bytesConsumed();                    }                    finally                    {                        _outBuffer.position(0);                        if (consumed>0 && header!=null)                        {                            int len=consumed<header.length()?consumed:header.length();                            header.skip(len);                            consumed-=len;                            _gather[0].position(0);                            _gather[0].limit(_gather[0].capacity());                        }                        if (consumed>0 && buffer!=null)                        {                            int len=consumed<buffer.length()?consumed:buffer.length();                            buffer.skip(len);                            consumed-=len;                            _gather[1].position(0);                            _gather[1].limit(_gather[1].capacity());                        }                        assert consumed==0;                    }                }            }        }                switch(_result.getStatus())        {            case BUFFER_OVERFLOW:            case BUFFER_UNDERFLOW:                Log.warn("wrap {}",_result);                            case OK:                return _result.bytesConsumed();            case CLOSED:                _closing=true;                return _result.bytesConsumed()>0?_result.bytesConsumed():-1;            default:                Log.warn("wrap "+_result);            throw new IOException(_result.toString());        }    }    /* ------------------------------------------------------------ */    private int wrap(Buffer header) throws IOException    {        _gather[0]=extractOutputBuffer(header,0);        synchronized(_gather[0])        {            _gather[0].position(header.getIndex());            _gather[0].limit(header.putIndex());            int consumed=0;            synchronized(_outBuffer)            {                try                {                    _outNIOBuffer.clear();                    _outBuffer.position(0);                    _outBuffer.limit(_outBuffer.capacity());                    _result=null;                    _last="wrap wrap";                    _result=_engine.wrap(_gather[0],_outBuffer);                    // h.append("wrap1=").append(result).append('\n');                    _outNIOBuffer.setGetIndex(0);                    _outNIOBuffer.setPutIndex(_result.bytesProduced());                    consumed=_result.bytesConsumed();                }                finally                {                    _outBuffer.position(0);                    if (consumed>0 && header!=null)                    {                        int len=consumed<header.length()?consumed:header.length();                        header.skip(len);                        consumed-=len;                        _gather[0].position(0);                        _gather[0].limit(_gather[0].capacity());                    }                    assert consumed==0;                }            }        }        switch(_result.getStatus())        {            case BUFFER_OVERFLOW:            case BUFFER_UNDERFLOW:                Log.warn("wrap {}",_result);                            case OK:                return _result.bytesConsumed();            case CLOSED:                _closing=true;                return _result.bytesConsumed()>0?_result.bytesConsumed():-1;            default:                Log.warn("wrap "+_result);            throw new IOException(_result.toString());        }    }    /* ------------------------------------------------------------ */    public boolean isBufferingInput()    {        return _inNIOBuffer.hasContent();    }    /* ------------------------------------------------------------ */    public boolean isBufferingOutput()    {        return _outNIOBuffer.hasContent();    }    /* ------------------------------------------------------------ */    public boolean isBufferred()    {        return true;    }    /* ------------------------------------------------------------ */    public SSLEngine getSSLEngine()    {        return _engine;    }    /* ------------------------------------------------------------ */    public String toString()    {        return super.toString()+","+_engine.getHandshakeStatus()+", in/out="+_inNIOBuffer.length()+"/"+_outNIOBuffer.length()+" last "+_last+" "+_result;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -