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

sip.Timeout 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     : Timeout.java
 * Author        : Phelim O'Doherty
 *
 *  HISTORY
 *  Version   Date      Author              Comments
 *  1.1     08/10/2002  Phelim O'Doherty    Initial version
 *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package javax.sip;

import java.io.*;

/**
 * This class contains the enumerations that define whether a timeout has 
 * occured in the underlying implementation. The application gets
 * informed on whether a retransmission or transaction timer has expired.
 *
 * There are two types of Timeout, namely:
 * 
    *
  • {@link Timeout#RETRANSMIT} - This type is used to alert an application that * the underlying retransmit timer has expired so an application can * resend the message specific to a transaction. This timer is defaulted to * 500ms and is doubled each time it is fired until the transaction expires * {@link Timeout#TRANSACTION}. The default retransmission value can be changed * per transaction using {@link Transaction#setRetransmitTimer(int)}. The * RETRANSMIT type is exposed to the following applications as follows: *
      *
    • User Agent - Retransmissions on Invite transactions are the * responsibility of the application. This is due to the three way handshake * for an INVITE Request. All other retransmissions are handled by the underlying * implementation. Therefore the application will only receive this Timeout type * specific to Invite transactions. *
    • User Agent with No Retransmission - an application can configure an * implementation to handle all retransmissions using property characteristics * of the {@link SipStack}. Therefore a Timeout * of this type will not be passed to the application. The application * will only get notified when the {@link Timeout#TRANSACTION} occurs. *
    • Stateful Proxy - a stateful proxy remembers transaction state about * each incoming request and any requests it sends as a result of * processing the incoming request. The underlying implementation * will handle the retransmissions of all messages it sends and the application * will not receive {@link Timeout#RETRANSMIT} events, however the application * will get notified of {@link Timeout#TRANSACTION} events. As an Invite * transaction is end to end a stateful proxy will not handle the * retransmissions of messages on an Invite transaction, unless it decides to * respond to the Invite transaction, in essence becoming an User Agent Server * and as such should behave as described by the User Agent semantics above * bearing in mind the retranmission property of the underlying implementation. *
    • Stateless Proxy - as a stateless proxy acts as a simple forwarding * agent, i.e. it simply forwards every message it receives upstream, it * keeps no transaction state for messages. The implementation does not retransmit * messages, therefore an application will not receive {@link Timeout#RETRANSMIT} * events on a message handled statelessly. If retransmission semantics are * required by an application using a stateless method, it is the responsibility * of the application to provide this feature, not the underlying implementation. *
    *
  • {@link Timeout#TRANSACTION} - This type is used to alert an application * that the underlying transaction has expired. A transaction timeout typically * occurs at a time 64*T1 were T1 is the initial value of the * {@link Timeout#RETRANSMIT}, usually defaulted to 500ms. The * TRANSACTION type is exposed to the following applications as follows: *
      *
    • User Agent - All retransmissions except retransmissions on Invite * transactions are the responsibility of the underlying implementation, i.e. * Invite transactions are the responsibility of the application. Therefore the * application will only recieve TRANSACTION Timeout events on transactions that * are not Invite transactions. *
    • User Agent with No Retransmission - an application can configure an * implementation to handle all retransmissions using property characteristics * of the {@link SipStack}. Therefore a TRANSACTION Timeout will be fired to * the application on any transaction that expires including an Invite * transaction. *
    • Stateful Proxy - a stateful proxy remembers transaction state about * each incoming request and any requests it sends as a result of * processing the incoming request. The underlying implementation handles * the retransmissions of all messages it sends and will notify the application * of {@link Timeout#TRANSACTION} events on any of its transactions. As an Invite * transaction is end to end a stateful proxy will not handle transaction * timeouts on an Invite transaction, unless it decides to respond to the Invite * transaction, in essence becoming an User Agent Server and as such should * behave as described by the User Agent semantics above bearing in mind * the retransmission property of the underlying implementation. *
    • Stateless Proxy - as a stateless proxy acts as a simple forwarding * agent, i.e. it simply forwards every message it receives upstream, it * keeps no transaction state of the messages. The implementation does not * maintain transaction state, therefore an application will not receive * {@link Timeout#TRANSACTION} events on a message handled statelessly. * If transaction timeout semantics are required by an application using a * stateless method, it the responsibility of the application to provide this * feature, not the underlying implementation. *
    *
* * @author BEA Systems, NIST * @version 1.2 */ public final class Timeout implements Serializable{ /** * Constructor for the Timeout * * @param timeout the integer value for the Timeout */ private Timeout(int timeout) { m_timeout = timeout; m_timeoutArray[m_timeout] = this; } /** * This method returns the object value of the Timeout * * @return The Timeout Object * @param timeout The integer value of the Timeout */ public Timeout getObject(int timeout){ if (timeout >= 0 && timeout < m_size) { return m_timeoutArray[timeout]; } else { throw new IllegalArgumentException("Invalid timeout value"); } } /** * This method returns the integer value of the Timeout * * @return The integer value of the Timeout */ public int getValue() { return m_timeout; } /** * 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 Timeout.RETRANSMIT * and deserializing it afterwards results again in Timeout.RETRANSMIT. * If you do not implement readResolve(), you would not get * Timeout.RETRANSMIT but an instance with similar content. * * @return the Timeout * @exception ObjectStreamException */ private Object readResolve() throws ObjectStreamException { return m_timeoutArray[m_timeout]; } /** * This method returns a string version of this class. * * @return The string version of the Timeout */ public String toString() { String text = ""; switch (m_timeout) { case _RETRANSMIT: text = "Retransmission Timeout"; break; case _TRANSACTION: text = "Transaction Timeout"; break; default: text = "Error while printing Timeout"; break; } return text; } // internal variables private int m_timeout; private static int m_size = 2; private static Timeout[] m_timeoutArray = new Timeout[m_size]; /** * This constant value indicates the internal value of the Retransmit * timeout. *
This constant has an integer value of 0. */ public final static int _RETRANSMIT = 0; /** * This constant value indicates the "Retransmit" timeout. */ public final static Timeout RETRANSMIT = new Timeout(_RETRANSMIT); /** * This constant value indicates the internal value of the Transaction * timeout. *
This constant has an integer value of 1. */ public final static int _TRANSACTION = 1; /** * This constant value indicates the "Transaction" timeout. */ public final static Timeout TRANSACTION = new Timeout(_TRANSACTION); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy