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