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 Join Header (RFC3911) 10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Extension by jean deruelle 11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// 12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// Join = "Join" HCOLON callid *(SEMI join-param) 13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// join-param = to-tag / from-tag / generic-param 14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// to-tag = "to-tag" EQUAL token 15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// from-tag = "from-tag" EQUAL token 16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// 17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang// 18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class JoinParser extends ParametersParser { 20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Creates new CallIDParser 23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param callID message to parse 24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public JoinParser(String callID) { 26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super(callID); 27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Constructor 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param lexer Lexer to set 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected JoinParser(Lexer lexer) { 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super(lexer); 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * parse the String message 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @return SIPHeader (CallID object) 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @throws ParseException if the message does not respect the spec. 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public SIPHeader parse() throws ParseException { 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (debug) 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang dbg_enter("parse"); 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang try { 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang headerName(TokenTypes.JOIN_TO); 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Join join = new Join(); 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.lexer.SPorHT(); 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String callId = lexer.byteStringNoSemicolon(); 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.lexer.SPorHT(); 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super.parse(join); 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang join.setCallId(callId); 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return join; 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } finally { 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (debug) 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang dbg_leave("parse"); 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static void main(String args[]) throws ParseException { 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String to[] = 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { "Join: 12345th5z8z\n", 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "Join: 12345th5z8z;to-tag=tozght6-45;from-tag=fromzght789-337-2\n", 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang }; 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang for (int i = 0; i < to.length; i++) { 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang JoinParser tp = new JoinParser(to[i]); 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Join t = (Join) tp.parse(); 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.println("Parsing => " + to[i]); 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.print("encoded = " + t.encode() + "==> "); 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.println("callId " + t.getCallId() + " from-tag=" + t.getFromTag() 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang + " to-tag=" + t.getToTag()) ; 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 79