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 Session Expires Header.
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class SessionExpiresParser extends ParametersParser {
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * protected constructor.
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param text is the text of the header to parse
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public SessionExpiresParser(String text) {
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(text);
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * constructor.
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param lexer is the lexer passed in from the enclosing parser.
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected SessionExpiresParser(Lexer lexer) {
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(lexer);
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Parse the header.
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public SIPHeader parse() throws ParseException {
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        SessionExpires se = new SessionExpires();
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (debug)
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            dbg_enter("parse");
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        try {
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            headerName(TokenTypes.SESSIONEXPIRES_TO);
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            String nextId = lexer.getNextId();
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            try {
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                int delta = Integer.parseInt(nextId);
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                se.setExpires(delta);
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            } catch (NumberFormatException ex) {
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                throw createParseException("bad integer format");
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            } catch (InvalidArgumentException ex) {
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                throw createParseException(ex.getMessage());
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            // May have parameters...
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            this.lexer.SPorHT();
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            super.parse(se);
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return se;
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } finally {
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (debug)
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                dbg_leave("parse");
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static void main(String args[]) throws ParseException {
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String to[] =
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            {   "Session-Expires: 30\n",
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                "Session-Expires: 45;refresher=uac\n",
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            };
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        for (int i = 0; i < to.length; i++) {
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            SessionExpiresParser tp = new SessionExpiresParser(to[i]);
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            SessionExpires t = (SessionExpires) tp.parse();
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            System.out.println("encoded = " + t.encode());
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            System.out.println("\ntime=" + t.getExpires() );
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if ( t.getParameter("refresher") != null)
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                System.out.println("refresher=" + t.getParameter("refresher") );
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
85