1600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/*
2600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Conditions Of Use
3600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
4600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This software was developed by employees of the National Institute of
5600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Standards and Technology (NIST), an agency of the Federal Government.
6600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Pursuant to title 15 Untied States Code Section 105, works of NIST
7600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * employees are not subject to copyright protection in the United States
8600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * and are considered to be in the public domain.  As a result, a formal
9600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * license is not needed to use the software.
10600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
11600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * This software is provided by NIST as a service and is expressly
12600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * AND DATA ACCURACY.  NIST does not warrant or make any representations
16600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * regarding the use of the software or the results thereof, including but
17600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * not limited to the correctness, accuracy, reliability or usefulness of
18600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * the software.
19600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
20600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Permission to use this software is contingent upon your acceptance
21600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * of the terms of this agreement
22600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
23600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * .
24600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpackage gov.nist.javax.sip.parser;
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.*;
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.extensions.*;
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.ims.*;
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.*;
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.Hashtable;
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Lexer class for the parser.
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan <br/>
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class Lexer extends LexerCore {
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * get the header name of the line
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the header name (stuff before the :) bug fix submitted by
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *         zvali@dev.java.net
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static String getHeaderName(String line) {
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (line == null)
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String headerName = null;
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        try {
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            int begin = line.indexOf(":");
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            headerName = null;
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (begin >= 1)
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                headerName = line.substring(0, begin).trim();
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } catch (IndexOutOfBoundsException e) {
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return headerName;
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public Lexer(String lexerName, String buffer) {
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(lexerName, buffer);
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.selectLexer(lexerName);
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * get the header value of the line
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return String
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public static String getHeaderValue(String line) {
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (line == null)
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String headerValue = null;
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        try {
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            int begin = line.indexOf(":");
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            headerValue = line.substring(begin + 1);
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } catch (IndexOutOfBoundsException e) {
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            return null;
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return headerValue;
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void selectLexer(String lexerName) {
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        synchronized (lexerTables) {
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            // Synchronization Bug fix by Robert Rosen.
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            currentLexer = (Hashtable) lexerTables.get(lexerName);
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            this.currentLexerName = lexerName;
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (currentLexer == null) {
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                addLexer(lexerName);
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                if (lexerName.equals("method_keywordLexer")) {
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.REGISTER, TokenTypes.REGISTER);
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.ACK, TokenTypes.ACK);
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.OPTIONS, TokenTypes.OPTIONS);
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.BYE, TokenTypes.BYE);
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.INVITE, TokenTypes.INVITE);
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.SIP.toUpperCase(), TokenTypes.SIP);
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.SIPS.toUpperCase(), TokenTypes.SIPS);
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.SUBSCRIBE, TokenTypes.SUBSCRIBE);
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.NOTIFY, TokenTypes.NOTIFY);
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.MESSAGE, TokenTypes.MESSAGE);
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // JvB: added to support RFC3903
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.PUBLISH, TokenTypes.PUBLISH);
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } else if (lexerName.equals("command_keywordLexer")) {
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ErrorInfoHeader.NAME.toUpperCase(),
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.ERROR_INFO);
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(AllowEventsHeader.NAME.toUpperCase(),
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.ALLOW_EVENTS);
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(AuthenticationInfoHeader.NAME.toUpperCase(),
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.AUTHENTICATION_INFO);
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(EventHeader.NAME.toUpperCase(), TokenTypes.EVENT);
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(MinExpiresHeader.NAME.toUpperCase(),
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.MIN_EXPIRES);
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(RSeqHeader.NAME.toUpperCase(), TokenTypes.RSEQ);
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(RAckHeader.NAME.toUpperCase(), TokenTypes.RACK);
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ReasonHeader.NAME.toUpperCase(),
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.REASON);
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ReplyToHeader.NAME.toUpperCase(),
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.REPLY_TO);
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SubscriptionStateHeader.NAME.toUpperCase(),
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SUBSCRIPTION_STATE);
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TimeStampHeader.NAME.toUpperCase(),
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.TIMESTAMP);
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(InReplyToHeader.NAME.toUpperCase(),
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.IN_REPLY_TO);
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(MimeVersionHeader.NAME.toUpperCase(),
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.MIME_VERSION);
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(AlertInfoHeader.NAME.toUpperCase(),
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.ALERT_INFO);
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(FromHeader.NAME.toUpperCase(), TokenTypes.FROM);
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ToHeader.NAME.toUpperCase(), TokenTypes.TO);
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ReferToHeader.NAME.toUpperCase(),
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.REFER_TO);
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ViaHeader.NAME.toUpperCase(), TokenTypes.VIA);
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(UserAgentHeader.NAME.toUpperCase(),
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.USER_AGENT);
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ServerHeader.NAME.toUpperCase(),
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SERVER);
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(AcceptEncodingHeader.NAME.toUpperCase(),
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.ACCEPT_ENCODING);
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(AcceptHeader.NAME.toUpperCase(),
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.ACCEPT);
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(AllowHeader.NAME.toUpperCase(), TokenTypes.ALLOW);
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(RouteHeader.NAME.toUpperCase(), TokenTypes.ROUTE);
154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(AuthorizationHeader.NAME.toUpperCase(),
155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.AUTHORIZATION);
156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ProxyAuthorizationHeader.NAME.toUpperCase(),
157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.PROXY_AUTHORIZATION);
158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(RetryAfterHeader.NAME.toUpperCase(),
159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.RETRY_AFTER);
160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ProxyRequireHeader.NAME.toUpperCase(),
161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.PROXY_REQUIRE);
162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ContentLanguageHeader.NAME.toUpperCase(),
163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTENT_LANGUAGE);
164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(UnsupportedHeader.NAME.toUpperCase(),
165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.UNSUPPORTED);
166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SupportedHeader.NAME.toUpperCase(),
167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SUPPORTED);
168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(WarningHeader.NAME.toUpperCase(),
169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.WARNING);
170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(MaxForwardsHeader.NAME.toUpperCase(),
171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.MAX_FORWARDS);
172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(DateHeader.NAME.toUpperCase(), TokenTypes.DATE);
173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PriorityHeader.NAME.toUpperCase(),
174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.PRIORITY);
175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ProxyAuthenticateHeader.NAME.toUpperCase(),
176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.PROXY_AUTHENTICATE);
177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ContentEncodingHeader.NAME.toUpperCase(),
178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTENT_ENCODING);
179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ContentLengthHeader.NAME.toUpperCase(),
180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTENT_LENGTH);
181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SubjectHeader.NAME.toUpperCase(),
182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SUBJECT);
183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ContentTypeHeader.NAME.toUpperCase(),
184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTENT_TYPE);
185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ContactHeader.NAME.toUpperCase(),
186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTACT);
187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(CallIdHeader.NAME.toUpperCase(),
188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CALL_ID);
189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(RequireHeader.NAME.toUpperCase(),
190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.REQUIRE);
191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ExpiresHeader.NAME.toUpperCase(),
192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.EXPIRES);
193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(RecordRouteHeader.NAME.toUpperCase(),
194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.RECORD_ROUTE);
195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(OrganizationHeader.NAME.toUpperCase(),
196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.ORGANIZATION);
197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(CSeqHeader.NAME.toUpperCase(), TokenTypes.CSEQ);
198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(AcceptLanguageHeader.NAME.toUpperCase(),
199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.ACCEPT_LANGUAGE);
200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(WWWAuthenticateHeader.NAME.toUpperCase(),
201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.WWW_AUTHENTICATE);
202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(CallInfoHeader.NAME.toUpperCase(),
203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CALL_INFO);
204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ContentDispositionHeader.NAME.toUpperCase(),
205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTENT_DISPOSITION);
206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // And now the dreaded short forms....
207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.K.toUpperCase(), TokenTypes.SUPPORTED);
208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.C.toUpperCase(),
209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTENT_TYPE);
210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.E.toUpperCase(),
211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTENT_ENCODING);
212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.F.toUpperCase(), TokenTypes.FROM);
213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.I.toUpperCase(), TokenTypes.CALL_ID);
214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.M.toUpperCase(), TokenTypes.CONTACT);
215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.L.toUpperCase(),
216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.CONTENT_LENGTH);
217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.S.toUpperCase(), TokenTypes.SUBJECT);
218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.T.toUpperCase(), TokenTypes.TO);
219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.U.toUpperCase(),
220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.ALLOW_EVENTS); // JvB: added
221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.V.toUpperCase(), TokenTypes.VIA);
222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.R.toUpperCase(), TokenTypes.REFER_TO);
223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.O.toUpperCase(), TokenTypes.EVENT); // Bug
224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                                                // fix
225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                                                // by
226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                                                // Mario
227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                                                                                // Mantak
228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.X.toUpperCase(), TokenTypes.SESSIONEXPIRES_TO); // Bug fix by Jozef Saniga
229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // JvB: added to support RFC3903
231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SIPETagHeader.NAME.toUpperCase(),
232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SIP_ETAG);
233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SIPIfMatchHeader.NAME.toUpperCase(),
234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SIP_IF_MATCH);
235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // pmusgrave: Add RFC4028 and ReferredBy
237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SessionExpiresHeader.NAME.toUpperCase(),
238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SESSIONEXPIRES_TO);
239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(MinSEHeader.NAME.toUpperCase(),
240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.MINSE_TO);
241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ReferredByHeader.NAME.toUpperCase(),
242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.REFERREDBY_TO);
243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // pmusgrave RFC3891
245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ReplacesHeader.NAME.toUpperCase(),
246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.REPLACES_TO);
247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    //jean deruelle RFC3911
248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(JoinHeader.NAME.toUpperCase(),
249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.JOIN_TO);
250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // IMS Headers
252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PathHeader.NAME.toUpperCase(), TokenTypes.PATH);
253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ServiceRouteHeader.NAME.toUpperCase(),
254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SERVICE_ROUTE);
255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PAssertedIdentityHeader.NAME.toUpperCase(),
256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_ASSERTED_IDENTITY);
257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PPreferredIdentityHeader.NAME.toUpperCase(),
258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_PREFERRED_IDENTITY);
259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PrivacyHeader.NAME.toUpperCase(),
260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.PRIVACY);
261600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
262600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // issued by Miguel Freitas
263600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PCalledPartyIDHeader.NAME.toUpperCase(),
264600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_CALLED_PARTY_ID);
265600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PAssociatedURIHeader.NAME.toUpperCase(),
266600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_ASSOCIATED_URI);
267600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PVisitedNetworkIDHeader.NAME.toUpperCase(),
268600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_VISITED_NETWORK_ID);
269600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PChargingFunctionAddressesHeader.NAME
270600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            .toUpperCase(),
271600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_CHARGING_FUNCTION_ADDRESSES);
272600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PChargingVectorHeader.NAME.toUpperCase(),
273600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_VECTOR_CHARGING);
274600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PAccessNetworkInfoHeader.NAME.toUpperCase(),
275600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_ACCESS_NETWORK_INFO);
276600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PMediaAuthorizationHeader.NAME.toUpperCase(),
277600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_MEDIA_AUTHORIZATION);
278600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
279600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SecurityServerHeader.NAME.toUpperCase(),
280600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SECURITY_SERVER);
281600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SecurityVerifyHeader.NAME.toUpperCase(),
282600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SECURITY_VERIFY);
283600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(SecurityClientHeader.NAME.toUpperCase(),
284600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.SECURITY_CLIENT);
285600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
286600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // added by aayush@rancore
287600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PUserDatabaseHeader.NAME.toUpperCase(),
288600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_USER_DATABASE);
289600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
290600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // added by aayush@rancore
291600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PProfileKeyHeader.NAME.toUpperCase(),
292600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_PROFILE_KEY);
293600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
294600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // added by aayush@rancore
295600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PServedUserHeader.NAME.toUpperCase(),
296600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_SERVED_USER);
297600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
298600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // added by aayush@rancore
299600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PPreferredServiceHeader.NAME.toUpperCase(),
300600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_PREFERRED_SERVICE);
301600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
302600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // added by aayush@rancore
303600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(PAssertedServiceHeader.NAME.toUpperCase(),
304600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                            TokenTypes.P_ASSERTED_SERVICE);
305600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
306600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // added References header
307600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(ReferencesHeader.NAME.toUpperCase(),TokenTypes.REFERENCES);
308600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
309600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    // end //
310600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
311600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
312600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } else if (lexerName.equals("status_lineLexer")) {
313600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.SIP.toUpperCase(), TokenTypes.SIP);
314600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } else if (lexerName.equals("request_lineLexer")) {
315600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.SIP.toUpperCase(), TokenTypes.SIP);
316600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                } else if (lexerName.equals("sip_urlLexer")) {
317600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.TEL.toUpperCase(), TokenTypes.TEL);
318600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.SIP.toUpperCase(), TokenTypes.SIP);
319600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    addKeyword(TokenNames.SIPS.toUpperCase(), TokenTypes.SIPS);
320600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                }
321600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
322600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        }
323600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
324600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
325