org.echarts.servlet.sip.machines
Class ThirdPartyCCFlow4FSM

java.lang.Object
  extended by org.echarts.Machine
      extended by org.echarts.StateMachine
          extended by org.echarts.TransitionMachine
              extended by org.echarts.servlet.sip.machines.ThirdPartyCCFlow4FSM
All Implemented Interfaces:
java.io.Serializable


public class ThirdPartyCCFlow4FSM
extends TransitionMachine

Uses third-party call control to set up a call between two far parties, See constructor for parameters. Note that Cisco gateways do not appear to support this call flow acting as UA A. When tested with c3640-is-mz.123-14.T7 and c3825-advipservicesk9-mz.124-11.T2, the Cisco gateway responds with (1) INVITE offer1 no media with reponses with SDP answer that contains media. After Controller sends (3) ACK with no SDP, the gateway sends BYE. This fragment uses RFC 3725 Third Party Call Control (3pcc) call establishment flow IV to establish a call between two parties.

             A                 Controller                  B
             |(1) INVITE offer1     |                      |
             |no media              |                      |
             |<---------------------|                      |
             |(2) 200 answer1       |                      |
             |no media              |                      |
             |--------------------->|                      |
             |(3) ACK               |                      |
             |<---------------------|                      |
             |                      |(4) INVITE no SDP     |
             |                      |--------------------->|
             |                      |(5) 200 OK offer2     |
             |                      |<---------------------|
             |(6) INVITE offer2'    |                      |
             |<---------------------|                      |
             |(7) 200 answer2'      |                      |
             |--------------------->|                      |
             |                      |(8) ACK answer2       |
             |                      |--------------------->|
             |(9) ACK               |                      |
             |<---------------------|                      |
             |(10) RTP              |                      |
             |.............................................|
 
Note that there are several limitations in the implementation:

See Also:
Serialized Form

Nested Class Summary
 class ThirdPartyCCFlow4FSM.CALL_SECOND_PARTY
           
 
Field Summary
 TransparentFSM TRANSPARENT
           
 
Constructor Summary
ThirdPartyCCFlow4FSM(SipFactory factory, SipPort caller, SipPort callee, java.lang.String callerSipURI, java.lang.String calleeSipURI, int firstPartyTimeoutMsec, boolean isEarlyMedia, java.lang.String uid)
          First calls callerSipURI on caller SipPort, then call calleeSipURI on calleeSipPort.
ThirdPartyCCFlow4FSM(SipFactory factory, SipPort caller, SipPort callee, java.lang.String callerSipURI, java.lang.String fromUserForCaller, java.lang.String calleeSipURI, java.lang.String fromUserForCallee, int firstPartyTimeoutMsec, boolean isEarlyMedia, java.lang.String uid)
          First calls callerSipURI on caller SipPort, then call calleeSipURI on calleeSipPort.
 
Method Summary
 
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

TRANSPARENT

public TransparentFSM TRANSPARENT
Constructor Detail

ThirdPartyCCFlow4FSM

public ThirdPartyCCFlow4FSM(SipFactory factory,
                            SipPort caller,
                            SipPort callee,
                            java.lang.String callerSipURI,
                            java.lang.String calleeSipURI,
                            int firstPartyTimeoutMsec,
                            boolean isEarlyMedia,
                            java.lang.String uid)
                     throws java.lang.Exception
First calls callerSipURI on caller SipPort, then call calleeSipURI on calleeSipPort.

Parameters:
callerSipURI - SIP URI of first party. This will be put into Request-URI of INVITE sent out on caller SipPort.
calleeSipURI - SIP URI of second party. This will be put into Request-URI of INVITE sent out on callee SipPort.
firstPartyTimeoutMsec - Duration for first party to answer before abandoning call (-1 means no timeout)
isEarlyMedia - If true, early media on call to second party (i.e. SDP in provision response to the INVITE) causes re-INVITE to be sent to first party.
Throws:
java.lang.Exception

ThirdPartyCCFlow4FSM

public ThirdPartyCCFlow4FSM(SipFactory factory,
                            SipPort caller,
                            SipPort callee,
                            java.lang.String callerSipURI,
                            java.lang.String fromUserForCaller,
                            java.lang.String calleeSipURI,
                            java.lang.String fromUserForCallee,
                            int firstPartyTimeoutMsec,
                            boolean isEarlyMedia,
                            java.lang.String uid)
                     throws java.lang.Exception
First calls callerSipURI on caller SipPort, then call calleeSipURI on calleeSipPort.

Parameters:
callerSipURI - SIP URI of first party. This will be put into Request-URI of INVITE sent out on caller SipPort.
fromUserForCaller - user part of From address sent to first party. Can be used to affect Caller-ID.
calleeSipURI - SIP URI of second party. This will be put into Request-URI of INVITE sent out on callee SipPort.
fromUserForCallee - user part of From address sent to first party. Can be used to affect Caller-ID.
firstPartyTimeoutMsec - Duration for first party to answer before abandoning call (-1 means no timeout)
isEarlyMedia - If true, early media on call to second party (i.e. SDP in provision response to the INVITE) causes re-INVITE to be sent to first party.
Throws:
java.lang.Exception
Method Detail