org.echarts.servlet.sip.machines
Class ThirdPartyCCFlow4FSM
java.lang.Object
org.echarts.Machine
org.echarts.StateMachine
org.echarts.TransitionMachine
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:
The required SDP manipulations from offer2 to offer2' and answer2' to answer2
are not implemented. In practice, most UAs do not check the origin line
in the SDP.
Error handling described in RFC 3725 sec 5 are not fully implemented.
For example, the re-INVITE glare error condition in Figure 5 is not
handled. In this glare condition, UA A sends re-INVITE after step (5),
this creating a re-INVITE glare with (6).
There is a problem with the recommendation that the
controller sends a 491 response. Proper handling of this case requires
more investigation.
See Also: Serialized Form
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.
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.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
TRANSPARENT
public TransparentFSM TRANSPARENT
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