/* * 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 serialVersionUID */ 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 cNonce * 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 nextNonce * 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 nonceCount * 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 * qop 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 response * 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); } }