code: @Override
      @SuppressWarnings("unused")
      protected boolean readUntilEnd(boolean async) throws IllegalHttpBodyException, BodyCompleteException {
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "Called readUntilEnd");
          }
  
          if (!isReadDataAvailable()) {
              // attempt to read whatever data is available
              try {
                  if (fillABuffer(1, async, false)) {
                      return true;
                  }
              } catch (IOException ioe) {
                  // no FFDC required as this should not be thrown
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "Unexpected exception: " + ioe);
                  }
                  return false;
              }
              if (isBodyComplete()) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                      Tr.debug(tc, "End of body found in new buffer");
                  }
                  return false;
              }
          }
  
          int position = getReadBuffer().position();
          int limit = getReadBuffer().limit();
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
              Tr.debug(tc, "Current body buffer " + getReadBuffer());
          }
  
          if (0 == position && limit == getReadBuffer().capacity()) {
              // this is a full buff we can return
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Return a full buffer");
              }
              storeTempBuffer(returnLastBuffer());
              setReadBuffer(null);
          } else {
              // slice up a return
              if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) {
                  Tr.debug(tc, "Slice the return buffer");
              }
              // slice from the position set above
              storeTempBuffer(getReadBuffer().slice());
              getReadBuffer().position(limit);
          }
          return false;
      }
docs: /*
  @see
  com.ibm.ws.http.channel.internal.HttpServiceContextImpl#readUntilEnd(boolean
  )