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 import gov.nist.core.HostPort;
     32 import gov.nist.javax.sip.address.AddressImpl;
     33 import gov.nist.javax.sip.parser.Parser;
     34 
     35 import javax.sip.header.ToHeader;
     36 import java.text.ParseException;
     37 
     38 /**
     39  * To SIP Header.
     40  *
     41  * @version 1.2 $Revision: 1.11 $ $Date: 2009/07/17 18:57:39 $
     42  *
     43  * @author M. Ranganathan <br/>
     44  * @author Olivier Deruelle <br/>
     45  *
     46  *
     47  *
     48  */
     49 
     50 public final class To extends AddressParametersHeader implements
     51         javax.sip.header.ToHeader {
     52 
     53     /**
     54      * Comment for <code>serialVersionUID</code>
     55      */
     56     private static final long serialVersionUID = -4057413800584586316L;
     57 
     58     /**
     59      * default Constructor.
     60      */
     61     public To() {
     62         super(TO,true);
     63     }
     64 
     65     /**
     66      * Generate a TO header from a FROM header
     67      */
     68     public To(From from) {
     69         super(TO);
     70         setAddress(from.address);
     71         setParameters(from.parameters);
     72     }
     73 
     74     /**
     75      * Encode the header into a String.
     76      *
     77      * @since 1.0
     78      * @return String
     79      */
     80     public String encode() {
     81         return headerName + COLON + SP + encodeBody() + NEWLINE;
     82     }
     83 
     84     /**
     85      * Encode the header content into a String.
     86      *
     87      * @return String
     88      */
     89     protected String encodeBody() {
     90         return encodeBody(new StringBuffer()).toString();
     91     }
     92 
     93     protected StringBuffer encodeBody(StringBuffer buffer) {
     94         if (address != null) {
     95             if (address.getAddressType() == AddressImpl.ADDRESS_SPEC) {
     96                 buffer.append(LESS_THAN);
     97             }
     98             address.encode(buffer);
     99             if (address.getAddressType() == AddressImpl.ADDRESS_SPEC) {
    100                 buffer.append(GREATER_THAN);
    101             }
    102 
    103             if (!parameters.isEmpty()) {
    104                 buffer.append(SEMICOLON);
    105                 parameters.encode(buffer);
    106             }
    107         }
    108         return buffer;
    109     }
    110 
    111     /**
    112      * Conveniance accessor function to get the hostPort field from the address.
    113      * Warning -- this assumes that the embedded URI is a SipURL.
    114      *
    115      * @return hostport field
    116      */
    117     public HostPort getHostPort() {
    118         if (address == null)
    119             return null;
    120         return address.getHostPort();
    121     }
    122 
    123     /**
    124      * Get the display name from the address.
    125      *
    126      * @return Display name
    127      */
    128     public String getDisplayName() {
    129         if (address == null)
    130             return null;
    131         return address.getDisplayName();
    132     }
    133 
    134     /**
    135      * Get the tag parameter from the address parm list.
    136      *
    137      * @return tag field
    138      */
    139     public String getTag() {
    140         if (parameters == null)
    141             return null;
    142         return getParameter(ParameterNames.TAG);
    143 
    144     }
    145 
    146     /**
    147      * Boolean function
    148      *
    149      * @return true if the Tag exist
    150      */
    151     public boolean hasTag() {
    152         if (parameters == null)
    153             return false;
    154         return hasParameter(ParameterNames.TAG);
    155 
    156     }
    157 
    158     /**
    159      * remove Tag member
    160      */
    161     public void removeTag() {
    162             if (parameters != null)
    163                 parameters.delete(ParameterNames.TAG);
    164 
    165     }
    166 
    167     /**
    168      * Set the tag member. This should remain empty for the initial request in
    169      * a dialog.
    170      *
    171      * @param t - tag String to set.
    172      */
    173     public void setTag(String t) throws ParseException {
    174         // JvB: check that it is a valid token
    175         Parser.checkToken(t);
    176         this.setParameter(ParameterNames.TAG, t);
    177     }
    178 
    179     /**
    180      * Get the user@host port string.
    181      */
    182     public String getUserAtHostPort() {
    183         if (address == null)
    184             return null;
    185         return address.getUserAtHostPort();
    186     }
    187 
    188     public boolean equals(Object other) {
    189         return (other instanceof ToHeader) && super.equals(other);
    190     }
    191 }
    192