package gov.nist.javax.sip.parser.extensions; import gov.nist.javax.sip.header.*; import gov.nist.javax.sip.header.extensions.*; import gov.nist.javax.sip.parser.*; import java.text.ParseException; // Parser for Join Header (RFC3911) // Extension by jean deruelle // // Join = "Join" HCOLON callid *(SEMI join-param) // join-param = to-tag / from-tag / generic-param // to-tag = "to-tag" EQUAL token // from-tag = "from-tag" EQUAL token // // public class JoinParser extends ParametersParser { /** * Creates new CallIDParser * @param callID message to parse */ public JoinParser(String callID) { super(callID); } /** * Constructor * @param lexer Lexer to set */ protected JoinParser(Lexer lexer) { super(lexer); } /** * parse the String message * @return SIPHeader (CallID object) * @throws ParseException if the message does not respect the spec. */ public SIPHeader parse() throws ParseException { if (debug) dbg_enter("parse"); try { headerName(TokenTypes.JOIN_TO); Join join = new Join(); this.lexer.SPorHT(); String callId = lexer.byteStringNoSemicolon(); this.lexer.SPorHT(); super.parse(join); join.setCallId(callId); return join; } finally { if (debug) dbg_leave("parse"); } } public static void main(String args[]) throws ParseException { String to[] = { "Join: 12345th5z8z\n", "Join: 12345th5z8z;to-tag=tozght6-45;from-tag=fromzght789-337-2\n", }; for (int i = 0; i < to.length; i++) { JoinParser tp = new JoinParser(to[i]); Join t = (Join) tp.parse(); System.out.println("Parsing => " + to[i]); System.out.print("encoded = " + t.encode() + "==> "); System.out.println("callId " + t.getCallId() + " from-tag=" + t.getFromTag() + " to-tag=" + t.getToTag()) ; } } }