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