Class SubscriberB2buaFSM

  extended by org.echarts.Machine
      extended by org.echarts.StateMachine
          extended by org.echarts.TransitionMachine
              extended by org.echarts.servlet.sip.machines.SubscriberB2buaFSM
All Implemented Interfaces:

public class SubscriberB2buaFSM
extends TransitionMachine

Back-to-back User Agent machine to be used with Application Composition framework. A subscriber port is associated with the caller when the machine is invoked in the originating regsion, and with the callee when the machine is invoked in the terminating region. Receives INVITE on BoxPort. Uses optional RequestModifier object to change Request-URI for outgoing INVITE. In CONNECTED state, INFO messages are passed transparently between caller and callee. Similar to the RI/TCK sample B2BUA application (version 1.0.9), there are two unhandled protocol level race conditions: 1) CANCEL to callee and 200 OK to INVITE from callee crossed: (RFC3261 sec 15) Because the container has already sent 487 to caller, the application should send ACK then BYE to callee to terminate the callee side. 2) CANCEL from caller and 200 OK to INVITE to caller crossed: (JSR116 sec 7.2.3) In the case where container receives CANCEL before application tries to send 200 OK to INVITE to caller side, the send() will throw IllegalStateException. This exception should be caught, and the application sends ACK then BYE to callee side to terminate the callee side dialog. See TODO items in this file for places where additional handling should be added.

See Also:
Serialized Form

Field Summary
 SipServletRequest calleeInvite
Constructor Summary
SubscriberB2buaFSM(FeatureBox box, java.util.Properties servletProps, javax.servlet.ServletContext context)
          Used when this FSM is specified as machineClassName by servlet
SubscriberB2buaFSM(FeatureBox box, SipPort subscriber, SipPort farparty, RequestModifier reqModifier)
          Used when this FSM is invoked by a parent FSM.
Method Summary
 FinalResponse getFailureResponse()
 Bye getReceivedBye()
 SuccessResponse getSuccessResponse()
Methods inherited from class org.echarts.TransitionMachine
addMessagelessTransition, addMessageTransition, globalStateString, globalStateString, initializeMessagelessTransitions, initializeMessageTransitions, initializeRoot, localStateString, localStateString, removePort, run, run, runNoQueueing
Methods inherited from class org.echarts.StateMachine
setMachineDebugging, setMachineMonitor, setMachineMonitoring
Methods inherited from class org.echarts.Machine
getDefaultMachineDebugging, getDefaultMachineDebuggingGlobalStateOutput, getDefaultMachineMonitor, getDefaultMachineMonitorFilter, getDefaultMachineMonitoring, getMachineDebugging, getMachineDebuggingGlobalStateOutput, getMachineID, getMachineIndex, getMachineMonitor, getMachineMonitoring, getParentMachine, getRootMachine, getSystemDebugging, getSystemMonitoring, putEvent, setDebugging, setDefaultMachineDebugging, setDefaultMachineDebuggingGlobalStateOutput, setDefaultMachineMonitor, setDefaultMachineMonitorFilter, setDefaultMachineMonitoring, setMachineDebuggingGlobalStateOutput, setSystemDebugging, setSystemMonitoring, statePathString, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Field Detail


public SipServletRequest calleeInvite


public TransparentFSM CONNECTED
Constructor Detail


public SubscriberB2buaFSM(FeatureBox box,
                          SipPort subscriber,
                          SipPort farparty,
                          RequestModifier reqModifier)
                   throws java.lang.Exception
Used when this FSM is invoked by a parent FSM.



public SubscriberB2buaFSM(FeatureBox box,
                          java.util.Properties servletProps,
                          javax.servlet.ServletContext context)
                   throws java.lang.Exception
Used when this FSM is specified as machineClassName by servlet

Method Detail


public SuccessResponse getSuccessResponse()


public FinalResponse getFailureResponse()


public Bye getReceivedBye()