/** * 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; }