protected void processHeader(
      char[] header,
      SIPMessage message,
      ParseExceptionListener parseExceptionListener,
      byte[] msgBuffer)
      throws ParseException {
    if (header == null || header.length == 0) return;

    HeaderParser headerParser = null;
    try {
      headerParser = ParserFactory.createParser(header);
    } catch (ParseException ex) {
      parseExceptionListener.handleException(
          ex, message, null, String.valueOf(header), String.valueOf(msgBuffer));
      return;
    }

    try {
      SIPHeader sipHeader = headerParser.parse();
      message.attachHeader(sipHeader, false);
    } catch (ParseException ex) {
      if (parseExceptionListener != null) {
        String headerName = Lexer.getHeaderName(header);
        Class headerClass = NameMap.getClassFromName(headerName);
        if (headerClass == null) {
          headerClass = ExtensionHeaderImpl.class;
        }
        parseExceptionListener.handleException(
            ex, message, headerClass, String.valueOf(header), String.valueOf(msgBuffer));
      }
    }
  }