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 Wangimport javax.sip.*; 9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/** 11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Parser for SIP MinSE Parser. 12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Min-SE = "Min-SE" HCOLON delta-seconds *(SEMI generic-param) 14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author P. Musgrave <pmusgrave@newheights.com> 16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * <a href="{@docRoot}/uncopyright.html">This code is in the public domain.</a> 18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class MinSEParser extends ParametersParser { 20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * protected constructor. 23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param text is the text of the header to parse 24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public MinSEParser(String text) { 26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super(text); 27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * constructor. 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @param lexer is the lexer passed in from the enclosing parser. 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang protected MinSEParser(Lexer lexer) { 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super(lexer); 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Parse the header. 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public SIPHeader parse() throws ParseException { 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MinSE minse = new MinSE(); 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (debug) 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang dbg_enter("parse"); 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang try { 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang headerName(TokenTypes.MINSE_TO); 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String nextId = lexer.getNextId(); 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang try { 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang int delta = Integer.parseInt(nextId); 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang minse.setExpires(delta); 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } catch (NumberFormatException ex) { 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw createParseException("bad integer format"); 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } catch (InvalidArgumentException ex) { 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw createParseException(ex.getMessage()); 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang this.lexer.SPorHT(); 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang super.parse(minse); 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return minse; 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } finally { 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (debug) 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang dbg_leave("parse"); 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static void main(String args[]) throws ParseException { 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String to[] = 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang { "Min-SE: 30\n", 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang "Min-SE: 45;some-param=somevalue\n", 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang }; 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang for (int i = 0; i < to.length; i++) { 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MinSEParser tp = new MinSEParser(to[i]); 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MinSE t = (MinSE) tp.parse(); 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.println("encoded = " + t.encode()); 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.println("\ntime=" + t.getExpires() ); 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if ( t.getParameter("some-param") != null) 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang System.out.println("some-param=" + t.getParameter("some-param") ); 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 88