/** * parse the CallInfo String header * * @return SIPHeader (CallInfoList object) * @throws SIPParseException if the message does not respect the spec. */ public SIPHeader parse() throws ParseException { if (debug) dbg_enter("CallInfoParser.parse"); CallInfoList list = new CallInfoList(); try { headerName(TokenTypes.CALL_INFO); while (lexer.lookAhead(0) != '\n') { CallInfo callInfo = new CallInfo(); callInfo.setHeaderName(SIPHeaderNames.CALL_INFO); this.lexer.SPorHT(); this.lexer.match('<'); URLParser urlParser = new URLParser((Lexer) this.lexer); GenericURI uri = urlParser.uriReference(true); callInfo.setInfo(uri); this.lexer.match('>'); this.lexer.SPorHT(); super.parse(callInfo); list.add(callInfo); while (lexer.lookAhead(0) == ',') { this.lexer.match(','); this.lexer.SPorHT(); callInfo = new CallInfo(); this.lexer.SPorHT(); this.lexer.match('<'); urlParser = new URLParser((Lexer) this.lexer); uri = urlParser.uriReference(true); callInfo.setInfo(uri); this.lexer.match('>'); this.lexer.SPorHT(); super.parse(callInfo); list.add(callInfo); } } return list; } finally { if (debug) dbg_leave("CallInfoParser.parse"); } }