示例#1
0
  /**
   * parse the String message
   *
   * @return SIPHeader (RequireList object)
   * @throws SIPParseException if the message does not respect the spec.
   */
  public SIPHeader parse() throws ParseException {
    RequireList requireList = new RequireList();
    if (debug) dbg_enter("RequireParser.parse");

    try {
      headerName(TokenTypes.REQUIRE);

      while (lexer.lookAhead(0) != '\n') {
        Require r = new Require();
        r.setHeaderName(SIPHeaderNames.REQUIRE);

        // Parsing the option tag
        this.lexer.match(TokenTypes.ID);
        Token token = lexer.getNextToken();
        r.setOptionTag(token.getTokenValue());
        this.lexer.SPorHT();

        requireList.add(r);

        while (lexer.lookAhead(0) == ',') {
          this.lexer.match(',');
          this.lexer.SPorHT();

          r = new Require();

          // Parsing the option tag
          this.lexer.match(TokenTypes.ID);
          token = lexer.getNextToken();
          r.setOptionTag(token.getTokenValue());
          this.lexer.SPorHT();

          requireList.add(r);
        }
      }
    } finally {
      if (debug) dbg_leave("RequireParser.parse");
    }

    return requireList;
  }