/*
* 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.header;
import gov.nist.core.*;
import java.text.ParseException;
/**
* Authentication info SIP Header.
*
* @author M. Ranganathan NIST/ITL/ANTD
* @since 1.1
* @version 1.2 $Revision: 1.9 $ $Date: 2009/07/17 18:57:27 $
*
*
*/
public final class AuthenticationInfo
extends ParametersHeader
implements javax.sip.header.AuthenticationInfoHeader {
/**
* Comment for <code>serialVersionUID</code>
*/
private static final long serialVersionUID = -4371927900917127057L;
/** Default contstructor.
*/
public AuthenticationInfo() {
super(NAME);
parameters.setSeparator(COMMA); // Odd ball.
}
public void add(NameValue nv) {
parameters.set(nv);
}
/** Value of header encoded in canonical form.
*/
protected String encodeBody() {
return parameters.encode();
}
/** Get the name value pair for a given authentication info parameter.
*
*@param name is the name for which we want to retrieve the name value
* list.
*/
public NameValue getAuthInfo(String name) {
return parameters.getNameValue(name);
}
/**
* Returns the AuthenticationInfo value of this AuthenticationInfoHeader.
*
*
*
* @return the String representing the AuthenticationInfo
*
*
*
*/
public String getAuthenticationInfo() {
return this.encodeBody();
}
/** Returns the CNonce value of this AuthenticationInfoHeader.
*
* @return the String representing the cNonce information, null if value is
* not set.
* @since v1.1
*/
public String getCNonce() {
return this.getParameter(ParameterNames.CNONCE);
}
/** Returns the nextNonce value of this AuthenticationInfoHeader.
*
* @return the String representing the nextNonce
* information, null if value is not set.
* @since v1.1
*/
public String getNextNonce() {
return this.getParameter(ParameterNames.NEXT_NONCE);
}
/** Returns the Nonce Count value of this AuthenticationInfoHeader.
*
* @return the integer representing the nonceCount information, -1 if value is
* not set.
* @since v1.1
*/
public int getNonceCount() {
return this.getParameterAsInt(ParameterNames.NONCE_COUNT);
}
/** Returns the messageQop value of this AuthenticationInfoHeader.
*
* @return the string representing the messageQop information, null if the
* value is not set.
* @since v1.1
*/
public String getQop() {
return this.getParameter(ParameterNames.QOP);
}
/** Returns the Response value of this AuthenticationInfoHeader.
*
* @return the String representing the Response information.
* @since v1.1
*/
public String getResponse() {
return this.getParameter(ParameterNames.RESPONSE_AUTH);
}
/** Sets the CNonce of the AuthenticationInfoHeader to the <var>cNonce</var>
* parameter value.
*
* @param cNonce - the new cNonce String of this AuthenticationInfoHeader.
* @throws ParseException which signals that an error has been reached
* unexpectedly while parsing the cNonce value.
* @since v1.1
*/
public void setCNonce(String cNonce) throws ParseException {
this.setParameter(ParameterNames.CNONCE, cNonce);
}
/** Sets the NextNonce of the AuthenticationInfoHeader to the <var>nextNonce</var>
* parameter value.
*
* @param nextNonce - the new nextNonce String of this AuthenticationInfoHeader.
* @throws ParseException which signals that an error has been reached
* unexpectedly while parsing the nextNonce value.
* @since v1.1
*/
public void setNextNonce(String nextNonce) throws ParseException {
this.setParameter(ParameterNames.NEXT_NONCE, nextNonce);
}
/** Sets the Nonce Count of the AuthenticationInfoHeader to the <var>nonceCount</var>
* parameter value.
*
* @param nonceCount - the new nonceCount integer of this AuthenticationInfoHeader.
* @throws ParseException which signals that an error has been reached
* unexpectedly while parsing the nonceCount value.
* @since v1.1
*/
public void setNonceCount(int nonceCount) throws ParseException {
if (nonceCount < 0)
throw new ParseException("bad value", 0);
String nc = Integer.toHexString(nonceCount);
String base = "00000000";
nc = base.substring(0, 8 - nc.length()) + nc;
this.setParameter(ParameterNames.NC, nc);
}
/** Sets the Qop value of the AuthenticationInfoHeader to the new
* <var>qop</var> parameter value.
*
* @param qop - the new Qop string of this AuthenticationInfoHeader.
* @throws ParseException which signals that an error has been reached
* unexpectedly while parsing the Qop value.
* @since v1.1
*/
public void setQop(String qop) throws ParseException {
this.setParameter(ParameterNames.QOP, qop);
}
/** Sets the Response of the
* AuthenticationInfoHeader to the new <var>response</var>
* parameter value.
*
* @param response - the new response String of this
* AuthenticationInfoHeader.
* @throws ParseException which signals that an error has been reached
* unexpectedly while parsing the Response.
* @since v1.1
*/
public void setResponse(String response) throws ParseException {
this.setParameter(ParameterNames.RESPONSE_AUTH, response);
}
public void setParameter(String name, String value) throws ParseException {
if (name == null)
throw new NullPointerException("null name");
NameValue nv = super.parameters.getNameValue(name.toLowerCase());
if (nv == null) {
nv = new NameValue(name, value);
if (name.equalsIgnoreCase(ParameterNames.QOP)
|| name.equalsIgnoreCase(ParameterNames.NEXT_NONCE)
|| name.equalsIgnoreCase(ParameterNames.REALM)
|| name.equalsIgnoreCase(ParameterNames.CNONCE)
|| name.equalsIgnoreCase(ParameterNames.NONCE)
|| name.equalsIgnoreCase(ParameterNames.OPAQUE)
|| name.equalsIgnoreCase(ParameterNames.USERNAME)
|| name.equalsIgnoreCase(ParameterNames.DOMAIN)
|| name.equalsIgnoreCase(ParameterNames.NEXT_NONCE)
|| name.equalsIgnoreCase(ParameterNames.RESPONSE_AUTH)) {
if (value == null)
throw new NullPointerException("null value");
if (value.startsWith(Separators.DOUBLE_QUOTE))
throw new ParseException(
value + " : Unexpected DOUBLE_QUOTE",
0);
nv.setQuotedValue();
}
super.setParameter(nv);
} else
nv.setValueAsObject(value);
}
}