Home | History | Annotate | Download | only in header
      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 *******************************************************************************/
     29 package gov.nist.javax.sip.header;
     30 
     31 /**
     32  * The call identifer that goes into a callID header and a in-reply-to header.
     33  *
     34  * @author M. Ranganathan   <br/>
     35  * @version 1.2 $Revision: 1.7 $ $Date: 2009/12/16 02:38:35 $
     36  * @see CallID
     37  * @see InReplyTo
     38  * @since 1.1
     39  */
     40 public final class CallIdentifier extends SIPObject {
     41 
     42     /**
     43      * Comment for <code>serialVersionUID</code>
     44      */
     45     private static final long serialVersionUID = 7314773655675451377L;
     46 
     47     /**
     48      * localId field
     49      */
     50     protected String localId;
     51 
     52     /**
     53      * host field
     54      */
     55     protected String host;
     56 
     57     /**
     58      * Default constructor
     59      */
     60     public CallIdentifier() {
     61     }
     62 
     63     /**
     64      * Constructor
     65      * @param localId id is the local id.
     66      * @param host is the host.
     67      */
     68     public CallIdentifier(String localId, String host) {
     69         this.localId = localId;
     70         this.host = host;
     71     }
     72 
     73     /**
     74      * constructor
     75      * @param cid String to set
     76      * @throws IllegalArgumentException if cid is null or is not a token,
     77      * or token@token
     78      */
     79     public CallIdentifier(String cid) throws IllegalArgumentException {
     80         setCallID(cid);
     81     }
     82 
     83     /**
     84      * Get the encoded version of this id.
     85      * @return String to set
     86      */
     87     public String encode() {
     88         return encode(new StringBuffer()).toString();
     89     }
     90 
     91     public StringBuffer encode(StringBuffer buffer) {
     92         buffer.append(localId);
     93         if (host != null) {
     94             buffer.append(AT).append(host);
     95         }
     96         return buffer;
     97     }
     98 
     99     /**
    100      * Compare two call identifiers for equality.
    101      * @param other Object to set
    102      * @return true if the two call identifiers are equals, false
    103      * otherwise
    104      */
    105     public boolean equals(Object other) {
    106         if (other == null ) return false;
    107         if (!other.getClass().equals(this.getClass())) {
    108             return false;
    109         }
    110         CallIdentifier that = (CallIdentifier) other;
    111         if (this.localId.compareTo(that.localId) != 0) {
    112             return false;
    113         }
    114         if (this.host == that.host)
    115             return true;
    116         if ((this.host == null && that.host != null)
    117             || (this.host != null && that.host == null))
    118             return false;
    119         if (host.compareToIgnoreCase(that.host) != 0) {
    120             return false;
    121         }
    122         return true;
    123     }
    124 
    125     @Override
    126     public int hashCode() {
    127         if (this.localId  == null ) {
    128              throw new UnsupportedOperationException("Hash code called before id is set");
    129         }
    130         return this.localId.hashCode();
    131     }
    132 
    133     /** get the LocalId field
    134      * @return String
    135      */
    136     public String getLocalId() {
    137         return localId;
    138     }
    139 
    140     /** get the host field
    141      * @return host member String
    142      */
    143     public String getHost() {
    144         return host;
    145     }
    146 
    147     /**
    148      * Set the localId member
    149      * @param localId String to set
    150      */
    151     public void setLocalId(String localId) {
    152         this.localId = localId;
    153     }
    154 
    155     /** set the callId field
    156      * @param cid Strimg to set
    157      * @throws IllegalArgumentException if cid is null or is not a token or
    158      * token@token
    159      */
    160     public void setCallID(String cid) throws IllegalArgumentException {
    161         if (cid == null)
    162             throw new IllegalArgumentException("NULL!");
    163         int index = cid.indexOf('@');
    164         if (index == -1) {
    165             localId = cid;
    166             host = null;
    167         } else {
    168             localId = cid.substring(0, index);
    169             host = cid.substring(index + 1, cid.length());
    170             if (localId == null || host == null) {
    171                 throw new IllegalArgumentException("CallID  must be token@token or token");
    172             }
    173         }
    174     }
    175 
    176     /**
    177      * Set the host member
    178      * @param host String to set
    179      */
    180     public void setHost(String host) {
    181         this.host = host;
    182     }
    183 }
    184