236 lines
7.9 KiB
Java
236 lines
7.9 KiB
Java
/*
|
|
* 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);
|
|
}
|
|
}
|