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 Wangpackage gov.nist.javax.sip.header;
25600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
26600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport gov.nist.core.*;
27600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangimport java.text.ParseException;
28600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
29600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang/**
30600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * Authentication info SIP Header.
31600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
32600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @author M. Ranganathan   NIST/ITL/ANTD
33600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @since 1.1
34600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang * @version 1.2 $Revision: 1.9 $ $Date: 2009/07/17 18:57:27 $
35600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
36600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang *
37600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang */
38600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wangpublic final class AuthenticationInfo
39600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    extends ParametersHeader
40600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    implements javax.sip.header.AuthenticationInfoHeader {
41600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
42600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
43600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Comment for <code>serialVersionUID</code>
44600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
45600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    private static final long serialVersionUID = -4371927900917127057L;
46600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
47600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Default contstructor.
48600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
49600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public AuthenticationInfo() {
50600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        super(NAME);
51600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        parameters.setSeparator(COMMA); // Odd ball.
52600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
53600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
54600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void add(NameValue nv) {
55600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        parameters.set(nv);
56600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
57600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
58600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Value of header encoded in canonical form.
59600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
60600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
61600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    protected String encodeBody() {
62600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return parameters.encode();
63600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
64600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
65600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
66600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Get the name value pair for a given authentication info parameter.
67600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
68600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *@param name is the name for which we want to retrieve the name value
69600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *  list.
70600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
71600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
72600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public NameValue getAuthInfo(String name) {
73600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return parameters.getNameValue(name);
74600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
75600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
76600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /**
77600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * Returns the AuthenticationInfo value of this AuthenticationInfoHeader.
78600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
79600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
80600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
81600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the String representing the AuthenticationInfo
82600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
83600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
84600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
85600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
86600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getAuthenticationInfo() {
87600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.encodeBody();
88600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
89600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
90600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns the CNonce value of this AuthenticationInfoHeader.
91600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
92600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the String representing the cNonce information, null if value is
93600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * not set.
94600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
95600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
96600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getCNonce() {
97600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.getParameter(ParameterNames.CNONCE);
98600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
99600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
100600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns the nextNonce value of this AuthenticationInfoHeader.
101600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
102600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the String representing the nextNonce
103600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * information, null if value is not set.
104600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
105600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
106600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getNextNonce() {
107600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.getParameter(ParameterNames.NEXT_NONCE);
108600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
109600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
110600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns the Nonce Count value of this AuthenticationInfoHeader.
111600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
112600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the integer representing the nonceCount information, -1 if value is
113600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * not set.
114600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
115600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
116600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public int getNonceCount() {
117600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.getParameterAsInt(ParameterNames.NONCE_COUNT);
118600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
119600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
120600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns the messageQop value of this AuthenticationInfoHeader.
121600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
122600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the string representing the messageQop information, null if the
123600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * value is not set.
124600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
125600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
126600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getQop() {
127600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.getParameter(ParameterNames.QOP);
128600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
129600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
130600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Returns the Response value of this AuthenticationInfoHeader.
131600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
132600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @return the String representing the Response information.
133600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
134600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
135600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public String getResponse() {
136600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        return this.getParameter(ParameterNames.RESPONSE_AUTH);
137600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
138600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
139600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Sets the CNonce of the AuthenticationInfoHeader to the <var>cNonce</var>
140600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * parameter value.
141600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
142600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param cNonce - the new cNonce String of this AuthenticationInfoHeader.
143600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws ParseException which signals that an error has been reached
144600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * unexpectedly while parsing the cNonce value.
145600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
146600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
147600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setCNonce(String cNonce) throws ParseException {
148600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.setParameter(ParameterNames.CNONCE, cNonce);
149600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
150600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
151600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Sets the NextNonce of the AuthenticationInfoHeader to the <var>nextNonce</var>
152600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * parameter value.
153600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
154600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param nextNonce - the new nextNonce String of this AuthenticationInfoHeader.
155600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws ParseException which signals that an error has been reached
156600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * unexpectedly while parsing the nextNonce value.
157600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
158600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
159600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setNextNonce(String nextNonce) throws ParseException {
160600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.setParameter(ParameterNames.NEXT_NONCE, nextNonce);
161600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
162600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
163600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Sets the Nonce Count of the AuthenticationInfoHeader to the <var>nonceCount</var>
164600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * parameter value.
165600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
166600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param nonceCount - the new nonceCount integer of this AuthenticationInfoHeader.
167600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws ParseException which signals that an error has been reached
168600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * unexpectedly while parsing the nonceCount value.
169600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
170600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
171600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setNonceCount(int nonceCount) throws ParseException {
172600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (nonceCount < 0)
173600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new ParseException("bad value", 0);
174600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String nc = Integer.toHexString(nonceCount);
175600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
176600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        String base = "00000000";
177600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        nc = base.substring(0, 8 - nc.length()) + nc;
178600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.setParameter(ParameterNames.NC, nc);
179600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
180600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
181600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Sets the Qop value of the AuthenticationInfoHeader to the new
182600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * <var>qop</var> parameter value.
183600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
184600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param qop - the new Qop string of this AuthenticationInfoHeader.
185600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws ParseException which signals that an error has been reached
186600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * unexpectedly while parsing the Qop value.
187600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
188600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
189600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setQop(String qop) throws ParseException {
190600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.setParameter(ParameterNames.QOP, qop);
191600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
192600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
193600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    /** Sets the Response of the
194600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * AuthenticationInfoHeader to the new <var>response</var>
195600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * parameter value.
196600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     *
197600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @param response - the new response String of this
198600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * AuthenticationInfoHeader.
199600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @throws ParseException which signals that an error has been reached
200600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * unexpectedly while parsing the Response.
201600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     * @since v1.1
202600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang     */
203600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setResponse(String response) throws ParseException {
204600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        this.setParameter(ParameterNames.RESPONSE_AUTH, response);
205600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
206600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang
207600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    public void setParameter(String name, String value) throws ParseException {
208600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (name == null)
209600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            throw new NullPointerException("null name");
210600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        NameValue nv = super.parameters.getNameValue(name.toLowerCase());
211600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        if (nv == null) {
212600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            nv = new NameValue(name, value);
213600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            if (name.equalsIgnoreCase(ParameterNames.QOP)
214600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.NEXT_NONCE)
215600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.REALM)
216600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.CNONCE)
217600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.NONCE)
218600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.OPAQUE)
219600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.USERNAME)
220600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.DOMAIN)
221600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.NEXT_NONCE)
222600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                || name.equalsIgnoreCase(ParameterNames.RESPONSE_AUTH)) {
223600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                if (value == null)
224600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    throw new NullPointerException("null value");
225600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                if (value.startsWith(Separators.DOUBLE_QUOTE))
226600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                    throw new ParseException(
227600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        value + " : Unexpected DOUBLE_QUOTE",
228600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                        0);
229600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang                nv.setQuotedValue();
230600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            }
231600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            super.setParameter(nv);
232600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang        } else
233600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang            nv.setValueAsObject(value);
234600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang    }
235600c7a4bbc7348167293eac928192e695b4ad5baChung-yih Wang}
236