All Downloads are FREE. Search and download functionalities are using the official Maven repository.

sip.header.CSeqHeader Maven / Gradle / Ivy

/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * Unpublished - rights reserved under the Copyright Laws of the United States.
 * Copyright ? 2003 Sun Microsystems, Inc. All rights reserved.
 * Copyright ? 2005 BEA Systems, Inc. All rights reserved.
 *
 * Use is subject to license terms.
 *
 * This distribution may include materials developed by third parties. 
 *
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 *
 * Module Name   : JSIP Specification
 * File Name     : CSeqHeader.java
 * Author        : Phelim O'Doherty
 *
 *  HISTORY
 *  Version   Date      Author              Comments
 *  1.1     08/10/2002  Phelim O'Doherty
 *  1.2     11/06/2006  Phelim O'Doherty    Changed Cseq to type long
 *    
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package javax.sip.header;

import javax.sip.InvalidArgumentException;
import java.text.ParseException;

/**
 * A CSeq header field in a request contains a single decimal sequence number
 * and the request method. The CSeq header field serves to identify and order
 * transactions within a dialog, to provide a means to uniquely identify
 * transactions, and to differentiate between new requests and request
 * retransmissions.  Two CSeq header fields are considered equal if the
 * sequence number and the request method are identical.
 * 
    *
  • Method - The method part of CSeq is case-sensitive and MUST match that * of the request. *
  • Sequence number - The sequence number is chosen by the requesting * client and is unique within a single value of Call-ID. The sequence number * MUST be expressible as a 32-bit unsigned integer and MUST be less than * 2**31. For non-REGISTER requests outside of a dialog, the sequence number * value is arbitrary. Consecutive Requests that differ in method, headers or * body, but have the same CallIdHeader must contain strictly monotonically * increasing and contiguous sequence numbers; sequence numbers do not wrap * around. Retransmissions of the same Request carry the same sequence number, * but an INVITE Request with a different message body or different headers * (a "re-invitation") acquires a new, higher sequence number. A server must * echo the CSeqHeader from the Request in its Response. If the method value is * missing in the received CSeqHeader, the server fills it in appropriately. * ACK and CANCEL Requests must contain the same CSeqHeader sequence number * (but not method) as the INVITE Request they refer to, while a BYE Request * cancelling an invitation must have a higher sequence number. An user agent * server must remember the highest sequence number for any INVITE Request * with the same CallIdHeader. The server must respond to, and then discard, * any INVITE Request with a lower sequence number. *
* As long as a client follows the above guidelines, it may use any mechanism * it would like to select CSeq header field values. *

* Forked Requests:
* Forked Requests must have the same CSeqHeader as there would be ambiguity * otherwise between these forked Requests and later BYE Requests issued by the * client user agent. *

* For Example:
* CSeq: 4711 INVITE * * @author BEA Systems, NIST * @version 1.2 * */ public interface CSeqHeader extends Header { /** * Sets the method of CSeqHeader * * @param method - the method of the Request of this CSeqHeader * @throws ParseException which signals that an error has been reached * unexpectedly while parsing the method value. */ public void setMethod(String method) throws ParseException; /** * Gets the method of CSeqHeader * * @return method of CSeqHeader */ public String getMethod(); /** * Sets the sequence number value of the CSeqHeader. The sequence number * MUST be expressible as a 32-bit unsigned integer and MUST be less than * 2**32 -1 * * @param sequenceNumber - the new sequence number of this CSeqHeader * @throws InvalidArgumentException if supplied value is less than zero. * @since v1.1 * * @deprecated This method is replaced with {@link #setSeqNumber(long)} with * type long. */ public void setSequenceNumber( int sequenceNumber) throws InvalidArgumentException; /** * Gets the sequence number of this CSeqHeader. * * @deprecated This method is replaced with {@link #getSeqNumber()} with * type long. * @return sequence number of the CSeqHeader * @since v1.1 */ public int getSequenceNumber(); /** * Sets the sequence number value of the CSeqHeader. * * @param sequenceNumber - the new sequence number of this CSeqHeader * @throws InvalidArgumentException if supplied value is less than zero. * @since v1.2 */ public void setSeqNumber(long sequenceNumber) throws InvalidArgumentException; /** * Gets the sequence number of this CSeqHeader. * * @return sequence number of the CSeqHeader * @since v1.2 */ public long getSeqNumber(); /** * Compare this CSeqHeader for equality with another. This method * overrides the equals method in javax.sip.Header. This method specifies * object equality as outlined by * RFC3261. * Two CSeq header fields are considered equal if the sequence number and * the request method are identical. When comparing header fields, field names * are always case-insensitive. Unless otherwise stated in the * definition of a particular header field, field values, parameter names, * and parameter values are case-insensitive. Tokens are always * case-insensitive. Unless specified otherwise, values expressed as quoted * strings are case-sensitive. * * @param obj the object to compare this CSeqHeader with. * @return true if obj is an instance of this class * representing the same CseqHeader as this, false otherwise. * @since v1.2 */ public boolean equals(Object obj); /** * Name of the CSeqHeader */ public final static String NAME = "CSeq"; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy