1/*
2* Conditions Of Use
3*
4* This software was developed by employees of the National Institute of
5* Standards and Technology (NIST), an agency of the Federal Government.
6* Pursuant to title 15 Untied States Code Section 105, works of NIST
7* employees are not subject to copyright protection in the United States
8* and are considered to be in the public domain.  As a result, a formal
9* license is not needed to use the software.
10*
11* This software is provided by NIST as a service and is expressly
12* provided "AS IS."  NIST MAKES NO WARRANTY OF ANY KIND, EXPRESS, IMPLIED
13* OR STATUTORY, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTY OF
14* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT
15* AND DATA ACCURACY.  NIST does not warrant or make any representations
16* regarding the use of the software or the results thereof, including but
17* not limited to the correctness, accuracy, reliability or usefulness of
18* the software.
19*
20* Permission to use this software is contingent upon your acceptance
21* of the terms of this agreement
22*
23* .
24*
25*/
26/*******************************************************************************
27* Product of NIST/ITL Advanced Networking Technologies Division (ANTD).        *
28*******************************************************************************/
29package gov.nist.javax.sip.header;
30
31import gov.nist.core.*;
32
33/**
34 * Challenge part of the Auth header. This is only used by the parser interface
35 *
36 * @author M. Ranganathan    <br/>
37 * @version 1.2 $Revision: 1.7 $ $Date: 2009/07/17 18:57:28 $
38 * @since 1.1
39 *
40*/
41public class Challenge extends SIPObject {
42
43    /**
44     * Comment for <code>serialVersionUID</code>
45     */
46    private static final long serialVersionUID = 5944455875924336L;
47
48    private static String DOMAIN = ParameterNames.DOMAIN;
49    private static String REALM = ParameterNames.REALM;
50    private static String OPAQUE = ParameterNames.OPAQUE;
51    private static String ALGORITHM = ParameterNames.ALGORITHM;
52    private static String QOP = ParameterNames.QOP;
53    private static String STALE = ParameterNames.STALE;
54    private static String SIGNATURE = ParameterNames.SIGNATURE;
55    private static String RESPONSE = ParameterNames.RESPONSE;
56    private static String SIGNED_BY = ParameterNames.SIGNED_BY;
57    private static String URI = ParameterNames.URI;
58
59    /**
60     * scheme field
61     */
62    protected String scheme;
63
64    /**
65     * authParms list
66     */
67    protected NameValueList authParams;
68
69    /**
70     * Default constructor
71     */
72    public Challenge() {
73        authParams = new NameValueList();
74        authParams.setSeparator(COMMA);
75    }
76
77    /**
78     * Encode the challenge in canonical form.
79     * @return String
80     */
81    public String encode() {
82        return new StringBuffer(scheme)
83            .append(SP)
84            .append(authParams.encode())
85            .toString();
86    }
87
88    /**
89     * get the scheme field
90     * @return String
91     */
92    public String getScheme() {
93        return scheme;
94    }
95
96    /**
97     * get AuthParms list.
98     * @return NameValueList
99     */
100    public NameValueList getAuthParams() {
101        return authParams;
102    }
103
104    /**
105     * get the domain
106     * @return String
107     */
108    public String getDomain() {
109        return (String) authParams.getValue(DOMAIN);
110    }
111
112    /**
113     * get the URI field
114     * @return String
115     */
116    public String getURI() {
117        return (String) authParams.getValue(URI);
118    }
119
120    /**
121     * get the Opaque field
122     * @return String
123     */
124    public String getOpaque() {
125        return (String) authParams.getValue(OPAQUE);
126    }
127
128    /**
129     * get QOP value
130     * @return String
131     */
132    public String getQOP() {
133        return (String) authParams.getValue(QOP);
134    }
135
136    /**
137     * get the Algorithm value.
138     * @return String
139     */
140    public String getAlgorithm() {
141        return (String) authParams.getValue(ALGORITHM);
142    }
143
144    /**
145     * get the State value.
146     * @return String
147     */
148    public String getStale() {
149        return (String) authParams.getValue(STALE);
150    }
151
152    /**
153     * get the Signature value.
154     * @return String
155     */
156    public String getSignature() {
157        return (String) authParams.getValue(SIGNATURE);
158    }
159
160    /**
161     * get the signedBy value.
162     * @return String
163     */
164    public String getSignedBy() {
165        return (String) authParams.getValue(SIGNED_BY);
166    }
167
168    /**
169     * get the Response value.
170     * @return String
171     */
172    public String getResponse() {
173        return (String) authParams.getValue(RESPONSE);
174    }
175
176    /**
177     * get the realm value.
178     * @return String.
179     */
180    public String getRealm() {
181        return (String) authParams.getValue(REALM);
182    }
183
184    /**
185     * get the specified parameter
186     * @param name String to set
187     * @return String to set
188     */
189    public String getParameter(String name) {
190        return (String) authParams.getValue(name);
191    }
192
193    /**
194     * boolean function
195     * @param name String to set
196     * @return true if this header has the specified parameter, false otherwise.
197     */
198    public boolean hasParameter(String name) {
199        return authParams.getNameValue(name) != null;
200    }
201
202    /**
203     * Boolean function
204     * @return true if this header has some parameters.
205     */
206    public boolean hasParameters() {
207        return authParams.size() != 0;
208    }
209
210    /**
211     * delete the specified parameter
212     * @param name String
213     * @return true if the specified parameter has been removed, false
214     * otherwise.
215     */
216    public boolean removeParameter(String name) {
217        return authParams.delete(name);
218    }
219
220    /**
221     * remove all parameters
222     */
223    public void removeParameters() {
224        authParams = new NameValueList();
225    }
226
227    /**
228     * set the specified parameter
229     * @param nv NameValue to set
230     */
231    public void setParameter(NameValue nv) {
232        authParams.set(nv);
233    }
234
235    /**
236     * Set the scheme member
237     * @param s String to set
238     */
239    public void setScheme(String s) {
240        scheme = s;
241    }
242
243    /**
244     * Set the authParams member
245     * @param a NameValueList to set
246     */
247    public void setAuthParams(NameValueList a) {
248        authParams = a;
249    }
250
251    public Object clone() {
252        Challenge retval = (Challenge) super.clone();
253        if (this.authParams != null)
254            retval.authParams = (NameValueList) this.authParams.clone();
255        return retval;
256    }
257}
258