Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 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:
  • 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 TRANSACTION. The default retransmission value can be changed per transaction using 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 SipStack. Therefore a Timeout of this type will not be passed to the application. The application will only get notified when the 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 RETRANSMIT events, however the application will get notified of 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 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.
  • 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 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 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 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 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(s):
BEA Systems, NIST
Version:
1.2
public final class Timeout implements Serializable{

    
Constructor for the Timeout

Parameters:
timeout the integer value for the Timeout
    private Timeout(int timeout) {
         = timeout;
        [] = this;
    }

    
This method returns the object value of the Timeout

Parameters:
timeout The integer value of the Timeout
Returns:
The Timeout Object
    public Timeout getObject(int timeout){
        if (timeout >= 0 && timeout < ) {
            return [timeout];
        } else {
            throw new IllegalArgumentException("Invalid timeout value");
        }
    }

    
This method returns the integer value of the Timeout

Returns:
The integer value of the Timeout
    public int getValue() {
        return ;
    }

    
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.

Returns:
the Timeout
Throws:
java.io.ObjectStreamException
    private Object readResolve() throws ObjectStreamException {
        return [];
    }

    
This method returns a string version of this class.

Returns:
The string version of the Timeout
    public String toString() {
        String text = "";
        switch () {
            case :
                text = "Retransmission Timeout";
                break;
           
            case :
                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[];    
    
    
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();

    
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();
   
    
New to GrepCode? Check out our FAQ X