| /* |
| * Conditions Of Use |
| * |
| * This software was developed by employees of the National Institute of |
| * Standards and Technology (NIST), an agency of the Federal Government. |
| * Pursuant to title 15 Untied States Code Section 105, works of NIST |
| * employees are not subject to copyright protection in the United States |
| * and are considered to be in the public domain. As a result, a formal |
| * license is not needed to use the software. |
| * |
| * This software is provided by NIST as a service and is expressly |
| * provided "AS IS." NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED |
| * OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF |
| * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT |
| * AND DATA ACCURACY. NIST does not warrant or make any representations |
| * regarding the use of the software or the results thereof, including but |
| * not limited to the correctness, accuracy, reliability or usefulness of |
| * the software. |
| * |
| * Permission to use this software is contingent upon your acceptance |
| * of the terms of this agreement |
| * |
| * . |
| * |
| */ |
| package gov.nist.javax.sip.parser; |
| |
| import gov.nist.core.*; |
| |
| import gov.nist.javax.sip.header.extensions.*; |
| |
| import gov.nist.javax.sip.header.ims.*; |
| |
| import javax.sip.header.*; |
| import java.util.Hashtable; |
| |
| /** |
| * Lexer class for the parser. |
| * |
| * @version 1.2 |
| * |
| * @author M. Ranganathan <br/> |
| * |
| * |
| */ |
| public class Lexer extends LexerCore { |
| /** |
| * get the header name of the line |
| * |
| * @return the header name (stuff before the :) bug fix submitted by |
| * zvali@dev.java.net |
| */ |
| public static String getHeaderName(String line) { |
| if (line == null) |
| return null; |
| String headerName = null; |
| try { |
| int begin = line.indexOf(":"); |
| headerName = null; |
| if (begin >= 1) |
| headerName = line.substring(0, begin).trim(); |
| } catch (IndexOutOfBoundsException e) { |
| return null; |
| } |
| return headerName; |
| } |
| |
| public Lexer(String lexerName, String buffer) { |
| super(lexerName, buffer); |
| this.selectLexer(lexerName); |
| } |
| |
| /** |
| * get the header value of the line |
| * |
| * @return String |
| */ |
| public static String getHeaderValue(String line) { |
| if (line == null) |
| return null; |
| String headerValue = null; |
| try { |
| int begin = line.indexOf(":"); |
| headerValue = line.substring(begin + 1); |
| } catch (IndexOutOfBoundsException e) { |
| return null; |
| } |
| return headerValue; |
| } |
| |
| public void selectLexer(String lexerName) { |
| synchronized (lexerTables) { |
| // Synchronization Bug fix by Robert Rosen. |
| currentLexer = (Hashtable) lexerTables.get(lexerName); |
| this.currentLexerName = lexerName; |
| if (currentLexer == null) { |
| addLexer(lexerName); |
| if (lexerName.equals("method_keywordLexer")) { |
| addKeyword(TokenNames.REGISTER, TokenTypes.REGISTER); |
| addKeyword(TokenNames.ACK, TokenTypes.ACK); |
| addKeyword(TokenNames.OPTIONS, TokenTypes.OPTIONS); |
| addKeyword(TokenNames.BYE, TokenTypes.BYE); |
| addKeyword(TokenNames.INVITE, TokenTypes.INVITE); |
| addKeyword(TokenNames.SIP.toUpperCase(), TokenTypes.SIP); |
| addKeyword(TokenNames.SIPS.toUpperCase(), TokenTypes.SIPS); |
| addKeyword(TokenNames.SUBSCRIBE, TokenTypes.SUBSCRIBE); |
| addKeyword(TokenNames.NOTIFY, TokenTypes.NOTIFY); |
| addKeyword(TokenNames.MESSAGE, TokenTypes.MESSAGE); |
| |
| // JvB: added to support RFC3903 |
| addKeyword(TokenNames.PUBLISH, TokenTypes.PUBLISH); |
| |
| } else if (lexerName.equals("command_keywordLexer")) { |
| addKeyword(ErrorInfoHeader.NAME.toUpperCase(), |
| TokenTypes.ERROR_INFO); |
| addKeyword(AllowEventsHeader.NAME.toUpperCase(), |
| TokenTypes.ALLOW_EVENTS); |
| addKeyword(AuthenticationInfoHeader.NAME.toUpperCase(), |
| TokenTypes.AUTHENTICATION_INFO); |
| addKeyword(EventHeader.NAME.toUpperCase(), TokenTypes.EVENT); |
| addKeyword(MinExpiresHeader.NAME.toUpperCase(), |
| TokenTypes.MIN_EXPIRES); |
| addKeyword(RSeqHeader.NAME.toUpperCase(), TokenTypes.RSEQ); |
| addKeyword(RAckHeader.NAME.toUpperCase(), TokenTypes.RACK); |
| addKeyword(ReasonHeader.NAME.toUpperCase(), |
| TokenTypes.REASON); |
| addKeyword(ReplyToHeader.NAME.toUpperCase(), |
| TokenTypes.REPLY_TO); |
| addKeyword(SubscriptionStateHeader.NAME.toUpperCase(), |
| TokenTypes.SUBSCRIPTION_STATE); |
| addKeyword(TimeStampHeader.NAME.toUpperCase(), |
| TokenTypes.TIMESTAMP); |
| addKeyword(InReplyToHeader.NAME.toUpperCase(), |
| TokenTypes.IN_REPLY_TO); |
| addKeyword(MimeVersionHeader.NAME.toUpperCase(), |
| TokenTypes.MIME_VERSION); |
| addKeyword(AlertInfoHeader.NAME.toUpperCase(), |
| TokenTypes.ALERT_INFO); |
| addKeyword(FromHeader.NAME.toUpperCase(), TokenTypes.FROM); |
| addKeyword(ToHeader.NAME.toUpperCase(), TokenTypes.TO); |
| addKeyword(ReferToHeader.NAME.toUpperCase(), |
| TokenTypes.REFER_TO); |
| addKeyword(ViaHeader.NAME.toUpperCase(), TokenTypes.VIA); |
| addKeyword(UserAgentHeader.NAME.toUpperCase(), |
| TokenTypes.USER_AGENT); |
| addKeyword(ServerHeader.NAME.toUpperCase(), |
| TokenTypes.SERVER); |
| addKeyword(AcceptEncodingHeader.NAME.toUpperCase(), |
| TokenTypes.ACCEPT_ENCODING); |
| addKeyword(AcceptHeader.NAME.toUpperCase(), |
| TokenTypes.ACCEPT); |
| addKeyword(AllowHeader.NAME.toUpperCase(), TokenTypes.ALLOW); |
| addKeyword(RouteHeader.NAME.toUpperCase(), TokenTypes.ROUTE); |
| addKeyword(AuthorizationHeader.NAME.toUpperCase(), |
| TokenTypes.AUTHORIZATION); |
| addKeyword(ProxyAuthorizationHeader.NAME.toUpperCase(), |
| TokenTypes.PROXY_AUTHORIZATION); |
| addKeyword(RetryAfterHeader.NAME.toUpperCase(), |
| TokenTypes.RETRY_AFTER); |
| addKeyword(ProxyRequireHeader.NAME.toUpperCase(), |
| TokenTypes.PROXY_REQUIRE); |
| addKeyword(ContentLanguageHeader.NAME.toUpperCase(), |
| TokenTypes.CONTENT_LANGUAGE); |
| addKeyword(UnsupportedHeader.NAME.toUpperCase(), |
| TokenTypes.UNSUPPORTED); |
| addKeyword(SupportedHeader.NAME.toUpperCase(), |
| TokenTypes.SUPPORTED); |
| addKeyword(WarningHeader.NAME.toUpperCase(), |
| TokenTypes.WARNING); |
| addKeyword(MaxForwardsHeader.NAME.toUpperCase(), |
| TokenTypes.MAX_FORWARDS); |
| addKeyword(DateHeader.NAME.toUpperCase(), TokenTypes.DATE); |
| addKeyword(PriorityHeader.NAME.toUpperCase(), |
| TokenTypes.PRIORITY); |
| addKeyword(ProxyAuthenticateHeader.NAME.toUpperCase(), |
| TokenTypes.PROXY_AUTHENTICATE); |
| addKeyword(ContentEncodingHeader.NAME.toUpperCase(), |
| TokenTypes.CONTENT_ENCODING); |
| addKeyword(ContentLengthHeader.NAME.toUpperCase(), |
| TokenTypes.CONTENT_LENGTH); |
| addKeyword(SubjectHeader.NAME.toUpperCase(), |
| TokenTypes.SUBJECT); |
| addKeyword(ContentTypeHeader.NAME.toUpperCase(), |
| TokenTypes.CONTENT_TYPE); |
| addKeyword(ContactHeader.NAME.toUpperCase(), |
| TokenTypes.CONTACT); |
| addKeyword(CallIdHeader.NAME.toUpperCase(), |
| TokenTypes.CALL_ID); |
| addKeyword(RequireHeader.NAME.toUpperCase(), |
| TokenTypes.REQUIRE); |
| addKeyword(ExpiresHeader.NAME.toUpperCase(), |
| TokenTypes.EXPIRES); |
| addKeyword(RecordRouteHeader.NAME.toUpperCase(), |
| TokenTypes.RECORD_ROUTE); |
| addKeyword(OrganizationHeader.NAME.toUpperCase(), |
| TokenTypes.ORGANIZATION); |
| addKeyword(CSeqHeader.NAME.toUpperCase(), TokenTypes.CSEQ); |
| addKeyword(AcceptLanguageHeader.NAME.toUpperCase(), |
| TokenTypes.ACCEPT_LANGUAGE); |
| addKeyword(WWWAuthenticateHeader.NAME.toUpperCase(), |
| TokenTypes.WWW_AUTHENTICATE); |
| addKeyword(CallInfoHeader.NAME.toUpperCase(), |
| TokenTypes.CALL_INFO); |
| addKeyword(ContentDispositionHeader.NAME.toUpperCase(), |
| TokenTypes.CONTENT_DISPOSITION); |
| // And now the dreaded short forms.... |
| addKeyword(TokenNames.K.toUpperCase(), TokenTypes.SUPPORTED); |
| addKeyword(TokenNames.C.toUpperCase(), |
| TokenTypes.CONTENT_TYPE); |
| addKeyword(TokenNames.E.toUpperCase(), |
| TokenTypes.CONTENT_ENCODING); |
| addKeyword(TokenNames.F.toUpperCase(), TokenTypes.FROM); |
| addKeyword(TokenNames.I.toUpperCase(), TokenTypes.CALL_ID); |
| addKeyword(TokenNames.M.toUpperCase(), TokenTypes.CONTACT); |
| addKeyword(TokenNames.L.toUpperCase(), |
| TokenTypes.CONTENT_LENGTH); |
| addKeyword(TokenNames.S.toUpperCase(), TokenTypes.SUBJECT); |
| addKeyword(TokenNames.T.toUpperCase(), TokenTypes.TO); |
| addKeyword(TokenNames.U.toUpperCase(), |
| TokenTypes.ALLOW_EVENTS); // JvB: added |
| addKeyword(TokenNames.V.toUpperCase(), TokenTypes.VIA); |
| addKeyword(TokenNames.R.toUpperCase(), TokenTypes.REFER_TO); |
| addKeyword(TokenNames.O.toUpperCase(), TokenTypes.EVENT); // Bug |
| // fix |
| // by |
| // Mario |
| // Mantak |
| addKeyword(TokenNames.X.toUpperCase(), TokenTypes.SESSIONEXPIRES_TO); // Bug fix by Jozef Saniga |
| |
| // JvB: added to support RFC3903 |
| addKeyword(SIPETagHeader.NAME.toUpperCase(), |
| TokenTypes.SIP_ETAG); |
| addKeyword(SIPIfMatchHeader.NAME.toUpperCase(), |
| TokenTypes.SIP_IF_MATCH); |
| |
| // pmusgrave: Add RFC4028 and ReferredBy |
| addKeyword(SessionExpiresHeader.NAME.toUpperCase(), |
| TokenTypes.SESSIONEXPIRES_TO); |
| addKeyword(MinSEHeader.NAME.toUpperCase(), |
| TokenTypes.MINSE_TO); |
| addKeyword(ReferredByHeader.NAME.toUpperCase(), |
| TokenTypes.REFERREDBY_TO); |
| |
| // pmusgrave RFC3891 |
| addKeyword(ReplacesHeader.NAME.toUpperCase(), |
| TokenTypes.REPLACES_TO); |
| //jean deruelle RFC3911 |
| addKeyword(JoinHeader.NAME.toUpperCase(), |
| TokenTypes.JOIN_TO); |
| |
| // IMS Headers |
| addKeyword(PathHeader.NAME.toUpperCase(), TokenTypes.PATH); |
| addKeyword(ServiceRouteHeader.NAME.toUpperCase(), |
| TokenTypes.SERVICE_ROUTE); |
| addKeyword(PAssertedIdentityHeader.NAME.toUpperCase(), |
| TokenTypes.P_ASSERTED_IDENTITY); |
| addKeyword(PPreferredIdentityHeader.NAME.toUpperCase(), |
| TokenTypes.P_PREFERRED_IDENTITY); |
| addKeyword(PrivacyHeader.NAME.toUpperCase(), |
| TokenTypes.PRIVACY); |
| |
| // issued by Miguel Freitas |
| addKeyword(PCalledPartyIDHeader.NAME.toUpperCase(), |
| TokenTypes.P_CALLED_PARTY_ID); |
| addKeyword(PAssociatedURIHeader.NAME.toUpperCase(), |
| TokenTypes.P_ASSOCIATED_URI); |
| addKeyword(PVisitedNetworkIDHeader.NAME.toUpperCase(), |
| TokenTypes.P_VISITED_NETWORK_ID); |
| addKeyword(PChargingFunctionAddressesHeader.NAME |
| .toUpperCase(), |
| TokenTypes.P_CHARGING_FUNCTION_ADDRESSES); |
| addKeyword(PChargingVectorHeader.NAME.toUpperCase(), |
| TokenTypes.P_VECTOR_CHARGING); |
| addKeyword(PAccessNetworkInfoHeader.NAME.toUpperCase(), |
| TokenTypes.P_ACCESS_NETWORK_INFO); |
| addKeyword(PMediaAuthorizationHeader.NAME.toUpperCase(), |
| TokenTypes.P_MEDIA_AUTHORIZATION); |
| |
| addKeyword(SecurityServerHeader.NAME.toUpperCase(), |
| TokenTypes.SECURITY_SERVER); |
| addKeyword(SecurityVerifyHeader.NAME.toUpperCase(), |
| TokenTypes.SECURITY_VERIFY); |
| addKeyword(SecurityClientHeader.NAME.toUpperCase(), |
| TokenTypes.SECURITY_CLIENT); |
| |
| // added by aayush@rancore |
| addKeyword(PUserDatabaseHeader.NAME.toUpperCase(), |
| TokenTypes.P_USER_DATABASE); |
| |
| // added by aayush@rancore |
| addKeyword(PProfileKeyHeader.NAME.toUpperCase(), |
| TokenTypes.P_PROFILE_KEY); |
| |
| // added by aayush@rancore |
| addKeyword(PServedUserHeader.NAME.toUpperCase(), |
| TokenTypes.P_SERVED_USER); |
| |
| // added by aayush@rancore |
| addKeyword(PPreferredServiceHeader.NAME.toUpperCase(), |
| TokenTypes.P_PREFERRED_SERVICE); |
| |
| // added by aayush@rancore |
| addKeyword(PAssertedServiceHeader.NAME.toUpperCase(), |
| TokenTypes.P_ASSERTED_SERVICE); |
| |
| // added References header |
| addKeyword(ReferencesHeader.NAME.toUpperCase(),TokenTypes.REFERENCES); |
| |
| // end // |
| |
| |
| } else if (lexerName.equals("status_lineLexer")) { |
| addKeyword(TokenNames.SIP.toUpperCase(), TokenTypes.SIP); |
| } else if (lexerName.equals("request_lineLexer")) { |
| addKeyword(TokenNames.SIP.toUpperCase(), TokenTypes.SIP); |
| } else if (lexerName.equals("sip_urlLexer")) { |
| addKeyword(TokenNames.TEL.toUpperCase(), TokenTypes.TEL); |
| addKeyword(TokenNames.SIP.toUpperCase(), TokenTypes.SIP); |
| addKeyword(TokenNames.SIPS.toUpperCase(), TokenTypes.SIPS); |
| } |
| } |
| } |
| } |
| } |