code: public void deframe(HttpData data, boolean endOfStream) {
          requireNonNull(data, "data");
          checkNotClosed();
          checkState(!this.endOfStream, "Past end of stream");
  
          startedDeframing = true;
  
          final int dataLength = data.length();
          if (dataLength != 0) {
              final ByteBuf buf;
              if (data instanceof ByteBufHolder) {
                  buf = ((ByteBufHolder) data).content();
              } else {
                  buf = Unpooled.wrappedBuffer(data.array(), data.offset(), dataLength);
              }
              assert unprocessed != null;
              unprocessed.add(buf);
              unprocessedBytes += dataLength;
          }
  
          // Indicate that all of the data for this stream has been received.
          this.endOfStream = endOfStream;
          deliver();
      }
docs: Adds the given data to this deframer and attempts delivery to the listener.
  
  @param data the raw data read from the remote endpoint. Must be non-null.
  @param endOfStream if {@code true}, indicates that {@code data} is the end of the stream from
  the remote endpoint.  End of stream should not be used in the event of a transport
  error, such as a stream reset.
  @throws IllegalStateException if {@link #close()} has been called previously or if
  this method has previously been called with {@code endOfStream=true}.