{
        private boolean blockForContent() throws IOException        {            if (_content.length()>0)            {                return true;            }            if (_parser.isState(Ajp13Parser.STATE_END))            {                return false;            }            // Handle simple end points.            if (_endp==null)            {                _parser.parseNext();            }            // Handle blocking end points            else if (_endp.isBlocking())            {                long filled=_parser.parseNext();                // parse until some progress is made (or                // IOException thrown for timeout)                while (_content.length()==0&&filled!=0&&!_parser.isState(Ajp13Parser.STATE_END))                {                    // Try to get more _parser._content                    filled=_parser.parseNext();                }            }            // Handle non-blocking end point            else            {                long filled=_parser.parseNext();                boolean blocked=false;                // parse until some progress is made (or                // IOException thrown for timeout)                while (_content.length()==0&&!_parser.isState(Ajp13Parser.STATE_END))                {                    // if fill called, but no bytes read,                    // then block                    if (filled>0)                        blocked=false;                    else if (filled==0)                    {                        if (blocked)                            throw new InterruptedIOException("timeout");                        blocked=true;                        _endp.blockReadable(_maxIdleTime);                    }                    // Try to get more _parser._content                    filled=_parser.parseNext();                }            }            return _content.length()>0;        }