001: /**
002: * Copyright 1990-2007 Sun Microsystems, Inc. All Rights Reserved.
003: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER
004: *
005: * This program is free software; you can redistribute it and/or
006: * modify it under the terms of the GNU General Public License version
007: * 2 only, as published by the Free Software Foundation.
008: *
009: * This program is distributed in the hope that it will be useful, but
010: * WITHOUT ANY WARRANTY; without even the implied warranty of
011: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
012: * General Public License version 2 for more details (a copy is
013: * included at /legal/license.txt).
014: *
015: * You should have received a copy of the GNU General Public License
016: * version 2 along with this work; if not, write to the Free Software
017: * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
018: * 02110-1301 USA
019: *
020: * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
021: * Clara, CA 95054 or visit www.sun.com if you need additional
022: * information or have any questions.
023: *
024: *
025: * Module Name : JAIN SIP Specification
026: * File Name : TimeoutEvent.java
027: *
028: * HISTORY
029: *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
030: */package gov.nist.siplite;
031:
032: import gov.nist.siplite.stack.*;
033:
034: /**
035: * This class represents an Timeout event that is passed from a SipProvider to
036: * its SipListener. A specific message may need retransmitted on a specific
037: * transaction numerous times before it is acknowledged by the receiver. If the
038: * message is not acknowledged after a specified period in the underlying
039: * implementation the transaction will expire, this occurs usually
040: * after seven retransmissions. The mechanism to alert an application that a
041: * message for a an underlying transaction needs retransmitted (i.e. 200OK) or
042: * an underlying transaction has expired is a Timeout Event.
043: * <p>
044: * A Timeout Event can be of two different types, namely:
045: * <ul>
046: * <li>{@link Timeout#RETRANSMIT}
047: * <li>{@link Timeout#TRANSACTION}
048: * </ul>
049: * A TimeoutEvent contains the following information:
050: * <ul>
051: * <li>source - the SipProvider that sent the TimeoutEvent.
052: * <li>transaction - the transaction that this Timeout applies to.
053: * <li>isServerTransaction - boolean indicating whether the
054: * transaction refers to
055: * a client or server transaction.
056: * <li>timeout - indicates what type of {@link Timeout} occurred.
057: * </ul>
058: *
059: * @see Timeout
060: *
061: * @since v1.1
062: */
063: public class TimeoutEvent extends SipEvent {
064:
065: /**
066: * Constructs a TimeoutEvent to indicate a server retransmission
067: * or transaction timeout.
068: *
069: * @param source - the source of TimeoutEvent.
070: * @param serverTransaction - the server transaction that timed out.
071: */
072: public TimeoutEvent(Object source,
073: ServerTransaction serverTransaction) {
074: super (source);
075: m_serverTransaction = serverTransaction;
076: m_isServerTransaction = true;
077: }
078:
079: /**
080: * Constructs a TimeoutEvent to indicate a
081: * client retransmission or transaction
082: * timeout.
083: *
084: * @param source - source of TimeoutEvent.
085: * @param clientTransaction - the client transaction that timed out.
086: */
087: public TimeoutEvent(Object source,
088: ClientTransaction clientTransaction) {
089: super (source);
090: m_clientTransaction = clientTransaction;
091: m_isServerTransaction = false;
092: }
093:
094: /**
095: * Constructs a TimeoutEvent to indicate a client
096: * retransmission or transaction timeout.
097: *
098: * @param source - source of TimeoutEvent.
099: * @param clientTransaction - the client transaction that timed out.
100: * @param timeout - indicates if this is a retranmission or transaction
101: * timeout event.
102: */
103: public TimeoutEvent(Object source,
104: ClientTransaction clientTransaction, Timeout timeout) {
105: super (source);
106: m_clientTransaction = clientTransaction;
107: m_isServerTransaction = false;
108: m_timeout = timeout;
109: }
110:
111: /**
112: * Gets the server transaction associated with this TimeoutEvent.
113: *
114: * @return server transaction associated with this TimeoutEvent,
115: * or null if this event is specific to a client transaction.
116: */
117: public ServerTransaction getServerTransaction() {
118: return m_serverTransaction;
119: }
120:
121: /**
122: * Gets the client transaction associated with this TimeoutEvent.
123: *
124: * @return client transaction associated with this TimeoutEvent, or null if
125: * this event is specific to a server transaction.
126: */
127: public ClientTransaction getClientTransaction() {
128: return m_clientTransaction;
129: }
130:
131: /**
132: * Indicates if the transaction associated with this TimeoutEvent
133: * is a server transaction.
134: *
135: * @return returns true if a server transaction or false if a client
136: * transaction.
137: */
138: public boolean isServerTransaction() {
139: return m_isServerTransaction;
140: }
141:
142: /** Flag indicating server transaction. */
143: private boolean m_isServerTransaction;
144: /** Current server transaction. */
145: private ServerTransaction m_serverTransaction = null;
146: /** Current client transaction. */
147: private ClientTransaction m_clientTransaction = null;
148: /** Current transaction timeout. */
149: private Timeout m_timeout;
150:
151: }
|