/******************************************************************************* * Product of NIST/ITL Advanced Networking Technologies Division (ANTD). * *******************************************************************************/ package gov.nist.javax.sip.header.extensions; import java.text.ParseException; import gov.nist.javax.sip.header.*; import javax.sip.header.ExtensionHeader; /* * This code is in the public domain. */ /** * Replaces SIPHeader. * ToDo: add support for early-only flag. * * @author P, Musgrave <pmusgrave@mkcnetworks.com> <br/> * * @version JAIN-SIP-1.2 * * */ public class Replaces extends ParametersHeader implements ExtensionHeader, ReplacesHeader { // TODO: Need a unique UID private static final long serialVersionUID = 8765762413224043300L; // TODO: When the MinSEHeader is added to javax - move this there...pmusgrave public static final String NAME = "Replaces"; /** * callIdentifier field */ public CallIdentifier callIdentifier; public String callId; /** * Default constructor */ public Replaces() { super(NAME); } /** Constructor given the call Identifier. *@param callId string call identifier (should be localid@host) *@throws IllegalArgumentException if call identifier is bad. */ public Replaces(String callId) throws IllegalArgumentException { super(NAME); this.callIdentifier = new CallIdentifier(callId); } /** * Encode the body part of this header (i.e. leave out the hdrName). * @return String encoded body part of the header. */ public String encodeBody() { if (callId == null) return null; else { String retVal = callId; if (!parameters.isEmpty()) { retVal += SEMICOLON + parameters.encode(); } return retVal; } } /** * get the CallId field. This does the same thing as encodeBody * * @return String the encoded body part of the */ public String getCallId() { return callId; } /** * get the call Identifer member. * @return CallIdentifier */ public CallIdentifier getCallIdentifer() { return callIdentifier; } /** * set the CallId field * @param cid String to set. This is the body part of the Call-Id * header. It must have the form localId@host or localId. * @throws IllegalArgumentException if cid is null, not a token, or is * not a token@token. */ public void setCallId(String cid) { callId = cid; } /** * Set the callIdentifier member. * @param cid CallIdentifier to set (localId@host). */ public void setCallIdentifier(CallIdentifier cid) { callIdentifier = cid; } /** * Get the to-tag parameter from the address parm list. * @return tag field */ public String getToTag() { if (parameters == null) return null; return getParameter(ParameterNames.TO_TAG); } /** * Set the to-tag member * @param t tag to set. From tags are mandatory. */ public void setToTag(String t) throws ParseException { if (t == null) throw new NullPointerException("null tag "); else if (t.trim().equals("")) throw new ParseException("bad tag", 0); this.setParameter(ParameterNames.TO_TAG, t); } /** Boolean function * @return true if the Tag exist */ public boolean hasToTag() { return hasParameter(ParameterNames.TO_TAG); } /** remove Tag member */ public void removeToTag() { parameters.delete(ParameterNames.TO_TAG); } /** * Get the from-tag parameter from the address parm list. * @return tag field */ public String getFromTag() { if (parameters == null) return null; return getParameter(ParameterNames.FROM_TAG); } /** * Set the to-tag member * @param t tag to set. From tags are mandatory. */ public void setFromTag(String t) throws ParseException { if (t == null) throw new NullPointerException("null tag "); else if (t.trim().equals("")) throw new ParseException("bad tag", 0); this.setParameter(ParameterNames.FROM_TAG, t); } /** Boolean function * @return true if the Tag exist */ public boolean hasFromTag() { return hasParameter(ParameterNames.FROM_TAG); } /** remove Tag member */ public void removeFromTag() { parameters.delete(ParameterNames.FROM_TAG); } public void setValue(String value) throws ParseException { // not implemented. throw new ParseException(value,0); } // public Object clone() { // CallID retval = (CallID) super.clone(); // if (this.callIdentifier != null) // retval.setCallIdentifier( (CallIdentifier) this.callIdentifier.clone() ); // return retval; // } } /* * $Log: Replaces.java,v $ * Revision 1.3 2009/07/17 18:57:42 emcho * Converts indentation tabs to spaces so that we have a uniform indentation policy in the whole project. * * Revision 1.2 2006/10/27 20:58:31 mranga * Issue number: * Obtained from: * Submitted by: * Reviewed by: mranga * doc fixups * CVS: ---------------------------------------------------------------------- * CVS: Issue number: * CVS: If this change addresses one or more issues, * CVS: then enter the issue number(s) here. * CVS: Obtained from: * CVS: If this change has been taken from another system, * CVS: then name the system in this line, otherwise delete it. * CVS: Submitted by: * CVS: If this code has been contributed to the project by someone else; i.e., * CVS: they sent us a patch or a set of diffs, then include their name/email * CVS: address here. If this is your work then delete this line. * CVS: Reviewed by: * CVS: If we are doing pre-commit code reviews and someone else has * CVS: reviewed your changes, include their name(s) here. * CVS: If you have not had it reviewed then delete this line. * * Revision 1.1 2006/10/12 11:57:51 pmusgrave * Issue number: 79, 80 * Submitted by: pmusgrave@newheights.com * Reviewed by: mranga * * Revision 1.3 2006/07/19 15:05:20 pmusgrave * Modify encodeBody so it uses callId and not CallIdentifier * * Revision 1.2 2006/04/17 23:41:31 pmusgrave * Add Session Timer and Replaces headers * * Revision 1.1.1.1 2006/03/15 16:00:07 pmusgrave * Source with additions * * Revision 1.3 2005/04/16 20:38:48 dmuresan * Canonical clone() implementations for the GenericObject and GenericObjectList hierarchies * * Revision 1.2 2004/01/22 13:26:29 sverker * Issue number: * Obtained from: * Submitted by: sverker * Reviewed by: mranga * * Major reformat of code to conform with style guide. Resolved compiler and javadoc warnings. Added CVS tags. * * CVS: ---------------------------------------------------------------------- * CVS: Issue number: * CVS: If this change addresses one or more issues, * CVS: then enter the issue number(s) here. * CVS: Obtained from: * CVS: If this change has been taken from another system, * CVS: then name the system in this line, otherwise delete it. * CVS: Submitted by: * CVS: If this code has been contributed to the project by someone else; i.e., * CVS: they sent us a patch or a set of diffs, then include their name/email * CVS: address here. If this is your work then delete this line. * CVS: Reviewed by: * CVS: If we are doing pre-commit code reviews and someone else has * CVS: reviewed your changes, include their name(s) here. * CVS: If you have not had it reviewed then delete this line. * */