1 package gov.nist.javax.sip.parser.extensions; 2 3 import gov.nist.javax.sip.header.*; 4 import gov.nist.javax.sip.header.extensions.*; 5 import gov.nist.javax.sip.parser.*; 6 7 import java.text.ParseException; 8 9 // Parser for Replaces Header (RFC3891) 10 // Extension by pmusgrave 11 // 12 // Replaces = "Replaces" HCOLON callid *(SEMI replaces-param) 13 // replaces-param = to-tag / from-tag / early-flag / generic-param 14 // to-tag = "to-tag" EQUAL token 15 // from-tag = "from-tag" EQUAL token 16 // early-flag = "early-only" 17 // 18 // TODO Should run a test case on early-only 19 // 20 21 public class ReplacesParser extends ParametersParser { 22 23 /** 24 * Creates new CallIDParser 25 * @param callID message to parse 26 */ ReplacesParser(String callID)27 public ReplacesParser(String callID) { 28 super(callID); 29 } 30 31 /** 32 * Constructor 33 * @param lexer Lexer to set 34 */ ReplacesParser(Lexer lexer)35 protected ReplacesParser(Lexer lexer) { 36 super(lexer); 37 } 38 39 /** 40 * parse the String message 41 * @return SIPHeader (CallID object) 42 * @throws ParseException if the message does not respect the spec. 43 */ parse()44 public SIPHeader parse() throws ParseException { 45 if (debug) 46 dbg_enter("parse"); 47 try { 48 headerName(TokenTypes.REPLACES_TO); 49 50 Replaces replaces = new Replaces(); 51 this.lexer.SPorHT(); 52 String callId = lexer.byteStringNoSemicolon(); 53 this.lexer.SPorHT(); 54 super.parse(replaces); 55 replaces.setCallId(callId); 56 return replaces; 57 } finally { 58 if (debug) 59 dbg_leave("parse"); 60 } 61 } 62 main(String args[])63 public static void main(String args[]) throws ParseException { 64 String to[] = 65 { "Replaces: 12345th5z8z\n", 66 "Replaces: 12345th5z8z;to-tag=tozght6-45;from-tag=fromzght789-337-2\n", 67 }; 68 69 for (int i = 0; i < to.length; i++) { 70 ReplacesParser tp = new ReplacesParser(to[i]); 71 Replaces t = (Replaces) tp.parse(); 72 System.out.println("Parsing => " + to[i]); 73 System.out.print("encoded = " + t.encode() + "==> "); 74 System.out.println("callId " + t.getCallId() + " from-tag=" + t.getFromTag() 75 + " to-tag=" + t.getToTag()) ; 76 77 } 78 } 79 80 } 81