1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.parser.extensions; 2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.*; 4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.extensions.*; 5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.parser.*; 6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException; 8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Parser for Replaces Header (RFC3891) 10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Extension by pmusgrave 11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// 12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Replaces = "Replaces" HCOLON callid *(SEMI replaces-param) 13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// replaces-param = to-tag / from-tag / early-flag / generic-param 14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// to-tag = "to-tag" EQUAL token 15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// from-tag = "from-tag" EQUAL token 16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// early-flag = "early-only" 17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// 18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// TODO Should run a test case on early-only 19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// 20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class ReplacesParser extends ParametersParser { 22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates new CallIDParser 25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callID message to parse 26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public ReplacesParser(String callID) { 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super(callID); 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Constructor 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param lexer Lexer to set 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected ReplacesParser(Lexer lexer) { 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super(lexer); 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * parse the String message 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return SIPHeader (CallID object) 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException if the message does not respect the spec. 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public SIPHeader parse() throws ParseException { 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (debug) 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang dbg_enter("parse"); 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang try { 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang headerName(TokenTypes.REPLACES_TO); 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Replaces replaces = new Replaces(); 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.lexer.SPorHT(); 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String callId = lexer.byteStringNoSemicolon(); 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.lexer.SPorHT(); 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super.parse(replaces); 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang replaces.setCallId(callId); 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return replaces; 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } finally { 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (debug) 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang dbg_leave("parse"); 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static void main(String args[]) throws ParseException { 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String to[] = 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { "Replaces: 12345th5z8z\n", 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "Replaces: 12345th5z8z;to-tag=tozght6-45;from-tag=fromzght789-337-2\n", 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang }; 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang for (int i = 0; i < to.length; i++) { 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ReplacesParser tp = new ReplacesParser(to[i]); 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Replaces t = (Replaces) tp.parse(); 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.println("Parsing => " + to[i]); 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.print("encoded = " + t.encode() + "==> "); 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.println("callId " + t.getCallId() + " from-tag=" + t.getFromTag() 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + " to-tag=" + t.getToTag()) ; 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 81