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

android.javax.sip.TransactionState Maven / Gradle / Ivy

There is a newer version: 1.3.0-91
Show newest version
/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * 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     : TransactionState.java
 * Author        : Phelim O'Doherty
 *
 *  HISTORY
 *  Version   Date      Author              Comments
 *  1.1     08/10/2002  Phelim O'Doherty    Initial version
 *  1.2     19/05/2005  Phelim O'Doherty    Added equals and hashcode method
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */

package android.javax.sip;



import java.io.*;



/**

 * This class contains the enumerations that define the underlying state of an 
 * existing transaction. SIP defines four types of 

 * transactions, these are Invite Client transactions, Invite Server transactions,

 * Non-Invite Client transactions and Non-Invite Server transactions.

 *

 * There are six explicit states for the various transactions, namely:

 * 
    *
  • Calling: *
      *
    • Invite Client transaction: The initial state, "calling", MUST be entered * when the application initiates a new client transaction with an INVITE request. *
    *
  • Trying: *
      *
    • Non-Invite Client transaction: The initial state "Trying" is entered * when the application initiates a new client transaction with a request. *
    • Non-Invite Server transaction: The initial state "Trying" is entered * when the application is passed a request other than INVITE or ACK. *
    *
  • Proceeding: *
      *
    • Invite Client transaction: If the client transaction receives a * provisional response while in the "Calling" state, it transitions to the * "Proceeding" state. *
    • Non-Invite Client transaction: If a provisional response is received * while in the "Trying" state, the client transaction SHOULD move to the * "Proceeding" state. *
    • Invite Server transaction: When a server transaction is constructed for * a request, it enters the initial state "Proceeding". *
    • Non-Invite Server transaction: While in the "Trying" state, if the * application passes a provisional response to the server transaction, the * server transaction MUST enter the "Proceeding" state. *
    *
  • Completed: The "Completed" state exists to buffer any additional * response retransmissions that may be received, which is why the client * transaction remains there only for unreliable transports. *
      *
    • Invite Client transaction: When in either the "Calling" or "Proceeding" * states, reception of a response with status code from 300-699 MUST cause the * client transaction to transition to "Completed". *
    • Non-Invite Client transaction: If a final response (status codes * 200-699) is received while in the "Trying" or "Proceeding" state, the client * transaction MUST transition to the "Completed" state. *
    • Invite Server transaction: While in the "Proceeding" state, if the * application passes a response with status code from 300 to 699 to the server * transaction, the state machine MUST enter the "Completed" state. *
    • Non-Invite Server transaction: If the application passes a final response * (status codes 200-699) to the server while in the "Proceeding" state, the * transaction MUST enter the "Completed" state. *
    *
  • Confirmed: The purpose of the "Confirmed" state is to absorb any * additional ACK messages that arrive, triggered from retransmissions of the * final response. Once this time expires the server MUST transition to the * "Terminated" state. *
      *
    • Invite Server transaction: If an ACK is received while the server * transaction is in the "Completed" state, the server transaction MUST * transition to the "Confirmed" state. *
    *
  • Terminated: The transaction MUST be available for garbage collection * the instant it enters the "Terminated" state. *
      *
    • Invite Client transaction: When in either the "Calling" or "Proceeding" * states, reception of a 2xx response MUST cause the client transaction to * enter the "Terminated" state. If amount of time that the server transaction * can remain in the "Completed" state when unreliable transports are used * expires while the client transaction is in the "Completed" state, the client * transaction MUST move to the "Terminated" state. *
    • Non-Invite Client transaction: If the transaction times out while the * client transaction is still in the "Trying" or "Proceeding" state, the client * transaction SHOULD inform the application about the timeout, and then it * SHOULD enter the "Terminated" state. If the response retransmissions buffer * expires while in the "Completed" state, the client transaction MUST transition * to the "Terminated" state. *
    • Invite Server transaction: If in the "Proceeding" state, and the application * passes a 2xx response to the server transaction, the server transaction MUST * transition to the "Terminated" state. When the server transaction abandons * retransmitting the response while in the "Completed" state, it implies that * the ACK was never received. In this case, the server transaction MUST * transition to the "Terminated" state, and MUST indicate to the TU that a * transaction failure has occurred. *
    • Non-Invite Server transaction: If the request retransmissions buffer * expires while in the "Completed" state, the server transaction MUST transition * to the "Terminated" state. *
    *
* * For each specific transaction state machine, refer to * RFC3261. * * @author BEA Systems, NIST * @version 1.2 */ public final class TransactionState implements Serializable{ /** * Constructor for the TransactionState * * @param transactionState The integer value for the TransactionState */ private TransactionState(int transactionState) { m_transactionState = transactionState; m_transStateArray[m_transactionState] = this; } /** * This method returns the object value of the TransactionState * * @return The TransactionState Object * @param transactionState The integer value of the TransactionState */ public static TransactionState getObject(int transactionState){ if (transactionState >= 0 && transactionState < m_size) { return m_transStateArray[transactionState]; } else { throw new IllegalArgumentException("Invalid transactionState value"); } } /** * This method returns the integer value of the TransactionState * * @return The integer value of the TransactionState */ public int getValue() { return m_transactionState; } /** * Returns the designated type as an alternative object to be used when * writing an object to a stream. * * This method would be used when for example serializing TransactionState.EARLY * and deserializing it afterwards results again in TransactionState.EARLY. * If you do not implement readResolve(), you would not get * TransactionState.EARLY but an instance with similar content. * * @return the TransactionState * @exception ObjectStreamException */ private Object readResolve() throws ObjectStreamException { return m_transStateArray[m_transactionState]; } /** * Compare this transaction state for equality with another. * * @since 1.2 * @param obj the object to compare this with. * @return true if obj is an instance of this class * representing the same transaction state as this, false otherwise. */ public boolean equals(Object obj) { if (obj == this) return true; return (obj instanceof TransactionState) && ((TransactionState)obj).m_transactionState == m_transactionState; } /** * Get a hash code value for this transaction state. * * @since 1.2 * @return a hash code value. */ public int hashCode() { return m_transactionState; } /* * This method returns a string version of this class. * * @return The string version of the TransactionState */ public String toString() { String text = ""; switch (m_transactionState) { case _CALLING: text = "Calling Transaction"; break; case _TRYING: text = "Trying Transaction"; break; case _PROCEEDING: text = "Proceeding Transaction"; break; case _COMPLETED: text = "Completed Transaction"; break; case _CONFIRMED: text = "Confirmed Transaction"; break; case _TERMINATED: text = "Terminated Transaction"; break; default: text = "Error while printing Transaction State"; break; } return text; } // internal variables private int m_transactionState; private static int m_size = 6; private static TransactionState[] m_transStateArray = new TransactionState[m_size]; /** * This constant value indicates the internal value of the "Calling" constant. *
This constant has an integer value of 0. */ public static final int _CALLING = 0; /** * This constant value indicates that the transaction state is "Calling". */ public final static TransactionState CALLING = new TransactionState(_CALLING); /** * This constant value indicates the internal value of the "Trying" constant. * This constant has an integer value of 1. */ public static final int _TRYING = 1; /** * This constant value indicates that the transaction state is "Trying". */ public final static TransactionState TRYING = new TransactionState(_TRYING); /** * This constant value indicates the internal value of the "Proceeding" * constant. *
This constant has an integer value of 2. */ public static final int _PROCEEDING = 2; /** * This constant value indicates that the transaction state is "Proceeding". */ public final static TransactionState PROCEEDING = new TransactionState(_PROCEEDING); /** * This constant value indicates the internal value of the "Completed" * constant. *
This constant has an integer value of 3. */ public static final int _COMPLETED = 3; /** * This constant value indicates that the transaction state is "Completed". */ public final static TransactionState COMPLETED = new TransactionState(_COMPLETED); /** * This constant value indicates the internal value of the "Confirmed" * constant. *
This constant has an integer value of 4. */ public static final int _CONFIRMED = 4; /** * This constant value indicates that the transaction state is "Confirmed". */ public final static TransactionState CONFIRMED = new TransactionState(_CONFIRMED); /** * This constant value indicates the internal value of the "Terminated" * constant. *
This constant has an integer value of 5. */ public static final int _TERMINATED = 5; /** * This constant value indicates that the transaction state is "Terminated". */ public final static TransactionState TERMINATED = new TransactionState(_TERMINATED); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy