code: private final State onInitialLine(final Buffer buffer) {
          try {
              buffer.markReaderIndex();
              final Buffer part1 = buffer.readUntilSafe(config.getMaxAllowedInitialLineSize(), SipParser.SP);
              final Buffer part2 = buffer.readUntilSafe(config.getMaxAllowedInitialLineSize(), SipParser.SP);
              final Buffer part3 = buffer.readUntilSingleCRLF();
              if (part1 == null || part2 == null || part3 == null) {
                  buffer.resetReaderIndex();
                  return State.GET_INITIAL_LINE;
              }
              sipInitialLine = SipInitialLine.parse(part1, part2, part3);
          } catch (final IOException e) {
              throw new RuntimeException("Unable to read from stream due to IOException", e);
          }
  
          return State.GET_HEADER_NAME;
      }
docs: Since it is quite uncommon to not have enough data on the line
  to read the entire first line we are taking the simple approach
  of just resetting the entire effort and we'll retry later. This
  of course means that in the worst case scenario we will actually
  iterate over data we have already seen before. However, seemed
  like it is worth it instead of having the extra space for keeping
  track of the extra state.
  
  @param buffer
  @return