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 Wangimport gov.nist.javax.sip.parser.ims.*; 28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.ims.*; 29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.util.Hashtable; 30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.lang.reflect.*; 31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport javax.sip.header.*; 32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException; 33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.*; 34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.extensions.*; 35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.header.SIPHeaderNamesCache; 36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.javax.sip.parser.extensions.*; 37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/** 39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * A factory class that does a name lookup on a registered parser and 40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * returns a header parser for the given name. 41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.17 $ $Date: 2010/01/12 00:05:25 $ 43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan <br/> 45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic class ParserFactory { 50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static Hashtable<String,Class<? extends HeaderParser>> parserTable; 52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static Class[] constructorArgs; 53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang private static Hashtable parserConstructorCache; 54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang static { 56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable = new Hashtable<String,Class<? extends HeaderParser>>(); 57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserConstructorCache = new Hashtable(); 58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang constructorArgs = new Class[1]; 59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang constructorArgs[0] = String.class; 60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ReplyToHeader.NAME.toLowerCase(), ReplyToParser.class); 61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang InReplyToHeader.NAME.toLowerCase(), 64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang InReplyToParser.class); 65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AcceptEncodingHeader.NAME.toLowerCase(), 68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AcceptEncodingParser.class); 69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AcceptLanguageHeader.NAME.toLowerCase(), 72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AcceptLanguageParser.class); 73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("t", ToParser.class); 75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ToHeader.NAME.toLowerCase(), ToParser.class); 76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(FromHeader.NAME.toLowerCase(), FromParser.class); 78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("f", FromParser.class); 79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(CSeqHeader.NAME.toLowerCase(), CSeqParser.class); 81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ViaHeader.NAME.toLowerCase(), ViaParser.class); 83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("v", ViaParser.class); 84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ContactHeader.NAME.toLowerCase(), ContactParser.class); 86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("m", ContactParser.class); 87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentTypeHeader.NAME.toLowerCase(), 90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentTypeParser.class); 91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("c", ContentTypeParser.class); 92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentLengthHeader.NAME.toLowerCase(), 95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentLengthParser.class); 96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("l", ContentLengthParser.class); 97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AuthorizationHeader.NAME.toLowerCase(), 100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AuthorizationParser.class); 101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang WWWAuthenticateHeader.NAME.toLowerCase(), 104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang WWWAuthenticateParser.class); 105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(CallIdHeader.NAME.toLowerCase(), CallIDParser.class); 107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("i", CallIDParser.class); 108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(RouteHeader.NAME.toLowerCase(), RouteParser.class); 110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang RecordRouteHeader.NAME.toLowerCase(), 113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang RecordRouteParser.class); 114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(DateHeader.NAME.toLowerCase(), DateParser.class); 116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ProxyAuthorizationHeader.NAME.toLowerCase(), 119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ProxyAuthorizationParser.class); 120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ProxyAuthenticateHeader.NAME.toLowerCase(), 123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ProxyAuthenticateParser.class); 124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang RetryAfterHeader.NAME.toLowerCase(), 127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang RetryAfterParser.class); 128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(RequireHeader.NAME.toLowerCase(), RequireParser.class); 130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ProxyRequireHeader.NAME.toLowerCase(), 133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ProxyRequireParser.class); 134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang TimeStampHeader.NAME.toLowerCase(), 137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang TimeStampParser.class); 138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang UnsupportedHeader.NAME.toLowerCase(), 141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang UnsupportedParser.class); 142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang UserAgentHeader.NAME.toLowerCase(), 145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang UserAgentParser.class); 146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SupportedHeader.NAME.toLowerCase(), 149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SupportedParser.class); 150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // bug fix by Steve Crosley 151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("k", SupportedParser.class); 152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ServerHeader.NAME.toLowerCase(), ServerParser.class); 154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(SubjectHeader.NAME.toLowerCase(), SubjectParser.class); 156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( "s", SubjectParser.class); // JvB: added 157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SubscriptionStateHeader.NAME.toLowerCase(), 160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang SubscriptionStateParser.class); 161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsHeader.NAME.toLowerCase(), 164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MaxForwardsParser.class); 165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MimeVersionHeader.NAME.toLowerCase(), 168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MimeVersionParser.class); 169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MinExpiresHeader.NAME.toLowerCase(), 172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang MinExpiresParser.class); 173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang OrganizationHeader.NAME.toLowerCase(), 176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang OrganizationParser.class); 177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang PriorityHeader.NAME.toLowerCase(), 180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang PriorityParser.class); 181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(RAckHeader.NAME.toLowerCase(), RAckParser.class); 183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(RSeqHeader.NAME.toLowerCase(), RSeqParser.class); 185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ReasonHeader.NAME.toLowerCase(), ReasonParser.class); 187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(WarningHeader.NAME.toLowerCase(), WarningParser.class); 189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ExpiresHeader.NAME.toLowerCase(), ExpiresParser.class); 191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(EventHeader.NAME.toLowerCase(), EventParser.class); 193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("o", EventParser.class); 194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ErrorInfoHeader.NAME.toLowerCase(), 197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ErrorInfoParser.class); 198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentLanguageHeader.NAME.toLowerCase(), 201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentLanguageParser.class); 202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentEncodingHeader.NAME.toLowerCase(), 205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentEncodingParser.class); 206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("e", ContentEncodingParser.class); 207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentDispositionHeader.NAME.toLowerCase(), 210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang ContentDispositionParser.class); 211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CallInfoHeader.NAME.toLowerCase(), 214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang CallInfoParser.class); 215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AuthenticationInfoHeader.NAME.toLowerCase(), 218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AuthenticationInfoParser.class); 219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(AllowHeader.NAME.toLowerCase(), AllowParser.class); 221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AllowEventsHeader.NAME.toLowerCase(), 224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AllowEventsParser.class); 225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("u", AllowEventsParser.class); 226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put( 228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AlertInfoHeader.NAME.toLowerCase(), 229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang AlertInfoParser.class); 230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(AcceptHeader.NAME.toLowerCase(), AcceptParser.class); 232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ReferToHeader.NAME.toLowerCase(), ReferToParser.class); 234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Was missing (bug noticed by Steve Crossley) 235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("r", ReferToParser.class); 236600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 237600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // JvB: added to support RFC3903 PUBLISH 238600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(SIPETagHeader.NAME.toLowerCase(), SIPETagParser.class); 239600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(SIPIfMatchHeader.NAME.toLowerCase(), SIPIfMatchParser.class); 240600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 241600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang //IMS headers 242600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PAccessNetworkInfoHeader.NAME.toLowerCase(), PAccessNetworkInfoParser.class); 243600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PAssertedIdentityHeader.NAME.toLowerCase(), PAssertedIdentityParser.class); 244600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PPreferredIdentityHeader.NAME.toLowerCase(), PPreferredIdentityParser.class); 245600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PChargingVectorHeader.NAME.toLowerCase(), PChargingVectorParser.class); 246600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PChargingFunctionAddressesHeader.NAME.toLowerCase(), PChargingFunctionAddressesParser.class); 247600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PMediaAuthorizationHeader.NAME.toLowerCase(), PMediaAuthorizationParser.class); 248600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PathHeader.NAME.toLowerCase(), PathParser.class); 249600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PrivacyHeader.NAME.toLowerCase(), PrivacyParser.class); 250600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ServiceRouteHeader.NAME.toLowerCase(), ServiceRouteParser.class); 251600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PVisitedNetworkIDHeader.NAME.toLowerCase(), PVisitedNetworkIDParser.class); 252600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 253600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PAssociatedURIHeader.NAME.toLowerCase(), PAssociatedURIParser.class); 254600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(PCalledPartyIDHeader.NAME.toLowerCase(), PCalledPartyIDParser.class); 255600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 256600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(SecurityServerHeader.NAME.toLowerCase(), SecurityServerParser.class); 257600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(SecurityClientHeader.NAME.toLowerCase(), SecurityClientParser.class); 258600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(SecurityVerifyHeader.NAME.toLowerCase(), SecurityVerifyParser.class); 259600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 260600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 261600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Per RFC 3892 (pmusgrave) 262600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(ReferredBy.NAME.toLowerCase(), ReferredByParser.class); 263600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("b", ReferToParser.class); 264600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 265600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Per RFC4028 Session Timers (pmusgrave) 266600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(SessionExpires.NAME.toLowerCase(), SessionExpiresParser.class); 267600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put("x", SessionExpiresParser.class); 268600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(MinSE.NAME.toLowerCase(), MinSEParser.class); 269600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // (RFC4028 does not give a short form header for MinSE) 270600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 271600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Per RFC3891 (pmusgrave) 272600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(Replaces.NAME.toLowerCase(), ReplacesParser.class); 273600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 274600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Per RFC3911 (jean deruelle) 275600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(Join.NAME.toLowerCase(), JoinParser.class); 276600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 277600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang //http://tools.ietf.org/html/draft-worley-references-05 278600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserTable.put(References.NAME.toLowerCase(), ReferencesParser.class); 279600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 280600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 281600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang /** 282600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * create a parser for a header. This is the parser factory. 283600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 284600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang public static HeaderParser createParser(String line) 285600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throws ParseException { 286600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String headerName = Lexer.getHeaderName(line); 287600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang String headerValue = Lexer.getHeaderValue(line); 288600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (headerName == null || headerValue == null) 289600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang throw new ParseException("The header name or value is null", 0); 290600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 291600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Class parserClass = (Class) parserTable.get(SIPHeaderNamesCache.toLowerCase(headerName)); 292600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (parserClass != null) { 293600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang try { 294600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Constructor cons = (Constructor) parserConstructorCache.get(parserClass); 295600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang if (cons == null) { 296600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang cons = parserClass.getConstructor(constructorArgs); 297600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang parserConstructorCache.put(parserClass, cons); 298600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 299600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang Object[] args = new Object[1]; 300600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang args[0] = line; 301600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang HeaderParser retval = (HeaderParser) cons.newInstance(args); 302600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return retval; 303600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 304600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } catch (Exception ex) { 305600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang InternalErrorHandler.handleException(ex); 306600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return null; // to placate the compiler. 307600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 308600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang 309600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } else { 310600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // Just generate a generic SIPHeader. We define 311600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang // parsers only for the above. 312600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang return new HeaderParser(line); 313600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 314600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang } 315600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang} 316600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/* 317600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * $Log: ParserFactory.java,v $ 318600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.17 2010/01/12 00:05:25 mranga 319600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Add support for References header draft-worley-references-05 320600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 321600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.16 2009/07/17 18:58:01 emcho 322600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Converts indentation tabs to spaces so that we have a uniform indentation policy in the whole project. 323600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 324600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.15 2009/01/22 19:33:48 deruelle_jean 325600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Add support for JOIN (RFC 3911) 326600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 186 327600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 328600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: Jean Deruelle 329600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: Ranga, The high priest and grand poobah of Jain-SIP 330600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 331600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.14 2007/03/07 14:29:46 belangery 332600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Yet another bunch of improvements in the parsing code. 333600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 334600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.13 2007/02/23 14:56:06 belangery 335600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Added performance improvement around header name lowercase conversion. 336600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 337600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.12 2007/01/08 19:24:21 mranga 338600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 339600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 340600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: Miguel Freitas 341600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: mranga 342600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 343600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Miguel -- please implement a deep clone method for the IMS headers. 344600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 345600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: ---------------------------------------------------------------------- 346600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Issue number: 347600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change addresses one or more issues, 348600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then enter the issue number(s) here. 349600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Obtained from: 350600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change has been taken from another system, 351600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then name the system in this line, otherwise delete it. 352600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Submitted by: 353600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this code has been contributed to the project by someone else; i.e., 354600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: they sent us a patch or a set of diffs, then include their name/email 355600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: address here. If this is your work then delete this line. 356600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Reviewed by: 357600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If we are doing pre-commit code reviews and someone else has 358600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: reviewed your changes, include their name(s) here. 359600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If you have not had it reviewed then delete this line. 360600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 361600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.11 2006/10/12 11:57:54 pmusgrave 362600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 79, 80 363600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: pmusgrave@newheights.com 364600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: mranga 365600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 366600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.10 2006/09/29 19:40:50 jbemmel 367600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * fixed missing IMS header parsing plumbing 368600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 369600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.9 2006/09/11 18:41:32 mranga 370600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 371600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 372600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: mranga 373600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: 374600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Tighter integration of IMS headers. 375600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: ---------------------------------------------------------------------- 376600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Issue number: 377600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change addresses one or more issues, 378600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then enter the issue number(s) here. 379600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Obtained from: 380600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change has been taken from another system, 381600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then name the system in this line, otherwise delete it. 382600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Submitted by: 383600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this code has been contributed to the project by someone else; i.e., 384600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: they sent us a patch or a set of diffs, then include their name/email 385600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: address here. If this is your work then delete this line. 386600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Reviewed by: 387600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If we are doing pre-commit code reviews and someone else has 388600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: reviewed your changes, include their name(s) here. 389600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If you have not had it reviewed then delete this line. 390600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 391600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.8 2006/08/15 21:44:50 mranga 392600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 393600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 394600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: mranga 395600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: mranga 396600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Incorporating the latest API changes from Phelim 397600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: ---------------------------------------------------------------------- 398600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Issue number: 399600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change addresses one or more issues, 400600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then enter the issue number(s) here. 401600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Obtained from: 402600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change has been taken from another system, 403600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then name the system in this line, otherwise delete it. 404600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Submitted by: 405600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this code has been contributed to the project by someone else; i.e., 406600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: they sent us a patch or a set of diffs, then include their name/email 407600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: address here. If this is your work then delete this line. 408600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Reviewed by: 409600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If we are doing pre-commit code reviews and someone else has 410600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: reviewed your changes, include their name(s) here. 411600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If you have not had it reviewed then delete this line. 412600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 413600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.7 2006/07/13 09:02:06 mranga 414600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 415600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 416600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: jeroen van bemmel 417600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: mranga 418600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Moved some changes from jain-sip-1.2 to java.net 419600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 420600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: ---------------------------------------------------------------------- 421600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Issue number: 422600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change addresses one or more issues, 423600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then enter the issue number(s) here. 424600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Obtained from: 425600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change has been taken from another system, 426600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then name the system in this line, otherwise delete it. 427600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Submitted by: 428600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this code has been contributed to the project by someone else; i.e., 429600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: they sent us a patch or a set of diffs, then include their name/email 430600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: address here. If this is your work then delete this line. 431600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Reviewed by: 432600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If we are doing pre-commit code reviews and someone else has 433600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: reviewed your changes, include their name(s) here. 434600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If you have not had it reviewed then delete this line. 435600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 436600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.5 2006/06/19 06:47:27 mranga 437600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * javadoc fixups 438600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 439600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.4 2006/06/16 15:26:28 mranga 440600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Added NIST disclaimer to all public domain files. Clean up some javadoc. Fixed a leak 441600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 442600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.3 2005/10/27 20:49:00 jeroen 443600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * added support for RFC3903 PUBLISH 444600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 445600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.2 2005/10/14 19:59:00 jeroen 446600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * bugfix: missing parser for shortform of Subject (s) 447600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 448600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.1.1.1 2005/10/04 17:12:35 mranga 449600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 450600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Import 451600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 452600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 453600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.4 2005/04/04 09:29:03 dmuresan 454600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Replaced new String().getClass() with String.class. 455600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 456600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Revision 1.3 2004/01/22 13:26:31 sverker 457600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Issue number: 458600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Obtained from: 459600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Submitted by: sverker 460600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Reviewed by: mranga 461600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 462600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Major reformat of code to conform with style guide. Resolved compiler and javadoc warnings. Added CVS tags. 463600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 464600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: ---------------------------------------------------------------------- 465600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Issue number: 466600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change addresses one or more issues, 467600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then enter the issue number(s) here. 468600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Obtained from: 469600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this change has been taken from another system, 470600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: then name the system in this line, otherwise delete it. 471600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Submitted by: 472600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If this code has been contributed to the project by someone else; i.e., 473600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: they sent us a patch or a set of diffs, then include their name/email 474600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: address here. If this is your work then delete this line. 475600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: Reviewed by: 476600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If we are doing pre-commit code reviews and someone else has 477600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: reviewed your changes, include their name(s) here. 478600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * CVS: If you have not had it reviewed then delete this line. 479600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * 480600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */ 481