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.javax.sip.message.SIPRequest;
     32 
     33 import javax.sip.InvalidArgumentException;
     34 import javax.sip.header.CSeqHeader;
     35 import java.text.ParseException;
     36 
     37 /**
     38  *  CSeq SIP Header.
     39  *
     40  * @author M. Ranganathan    <br/>
     41  * @version 1.2 $Revision: 1.10 $ $Date: 2009/10/18 13:46:33 $
     42  * @since 1.1
     43  *
     44  */
     45 
     46 public class CSeq extends SIPHeader implements javax.sip.header.CSeqHeader {
     47 
     48     /**
     49      * Comment for <code>serialVersionUID</code>
     50      */
     51     private static final long serialVersionUID = -5405798080040422910L;
     52 
     53     /**
     54      * seqno field
     55      */
     56     protected Long seqno;
     57 
     58     /**
     59      * method field
     60      */
     61     protected String method;
     62 
     63     /**
     64      * Constructor.
     65      */
     66     public CSeq() {
     67         super(CSEQ);
     68     }
     69 
     70     /**
     71      * Constructor given the sequence number and method.
     72      *
     73      * @param seqno is the sequence number to assign.
     74      * @param method is the method string.
     75      */
     76     public CSeq(long seqno, String method) {
     77         this();
     78         this.seqno = Long.valueOf(seqno);
     79         this.method = SIPRequest.getCannonicalName(method);
     80     }
     81 
     82     /**
     83      * Compare two cseq headers for equality.
     84      * @param other Object to compare against.
     85      * @return true if the two cseq headers are equals, false
     86      * otherwise.
     87      */
     88     public boolean equals(Object other) {
     89 
     90         if (other instanceof CSeqHeader) {
     91             final CSeqHeader o = (CSeqHeader) other;
     92             return this.getSeqNumber() == o.getSeqNumber()
     93                 && this.getMethod().equals( o.getMethod() );
     94         }
     95         return false;
     96     }
     97 
     98     /**
     99      * Return canonical encoded header.
    100      * @return String with canonical encoded header.
    101      */
    102     public String encode() {
    103         return headerName + COLON + SP + encodeBody() + NEWLINE;
    104     }
    105 
    106     /**
    107      * Return canonical header content. (encoded header except headerName:)
    108      *
    109      * @return encoded string.
    110      */
    111     public String encodeBody() {
    112         return encodeBody(new StringBuffer()).toString();
    113     }
    114 
    115     protected StringBuffer encodeBody(StringBuffer buffer) {
    116         return buffer.append(seqno).append(SP).append(method.toUpperCase());
    117     }
    118 
    119     /**
    120      * Get the method.
    121      * @return String the method.
    122      */
    123     public String getMethod() {
    124         return method;
    125     }
    126 
    127     /*
    128      * (non-Javadoc)
    129      * @see javax.sip.header.CSeqHeader#setSequenceNumber(long)
    130      */
    131     public void setSeqNumber(long sequenceNumber)
    132         throws InvalidArgumentException {
    133         if (sequenceNumber < 0 )
    134             throw new InvalidArgumentException(
    135                 "JAIN-SIP Exception, CSeq, setSequenceNumber(), "
    136                     + "the sequence number parameter is < 0 : " + sequenceNumber);
    137         else if ( sequenceNumber >  ((long)1)<<32 - 1)
    138             throw new InvalidArgumentException(
    139                     "JAIN-SIP Exception, CSeq, setSequenceNumber(), "
    140                         + "the sequence number parameter is too large : " + sequenceNumber);
    141 
    142         seqno = Long.valueOf(sequenceNumber);
    143     }
    144 
    145     /**
    146      * For backwards compatibility
    147      */
    148     public void setSequenceNumber(int sequenceNumber) throws InvalidArgumentException {
    149         this.setSeqNumber( (long) sequenceNumber );
    150     }
    151 
    152     /*
    153      * (non-Javadoc)
    154      * @see javax.sip.header.CSeqHeader#setMethod(java.lang.String)
    155      */
    156     public void setMethod(String meth) throws ParseException {
    157         if (meth == null)
    158             throw new NullPointerException(
    159                 "JAIN-SIP Exception, CSeq"
    160                     + ", setMethod(), the meth parameter is null");
    161         this.method = SIPRequest.getCannonicalName(meth);
    162     }
    163 
    164     /*
    165      * (non-Javadoc)
    166      * @see javax.sip.header.CSeqHeader#getSequenceNumber()
    167      */
    168     public int getSequenceNumber() {
    169         if (this.seqno == null)
    170             return 0;
    171         else
    172             return this.seqno.intValue();
    173     }
    174 
    175 
    176 
    177 
    178     public long getSeqNumber() {
    179         return this.seqno.longValue();
    180     }
    181 
    182 
    183 }
    184 
    185