Transfer works in potentially two different ways:
- End-point based
In this mode: A transfer B to C by requesting (REFER) B to establish a new call to C. If Plivo is B, it needs to support REFER for this to work.
A B C
<=conversation=>
----REFER------>
<-202 Accepted--
----INVITE----->
<---200 OK------
----ACK-------->
<=conversation=>
<---NOTIFY-----
---- 200 OK--->
---BYE-------->
<--- 200 OK----
- Network based.
In this mode: A transfer B to C by sending a REFER (or perhaps other signal) to a network application server (e.g. TAS implementating supplementary services in IMS). The TAS (as B2BUA between A & B) will be the one handling the REFER:
A TAS B C
<=conversation=><=conversation=>
----REFER------>
<-202 Accepted--
----RE-INVITE--->
<---200 OK ------
----INVITE--------------------->
<---200 OK----------------------
----ACK--------->
------------ACK---------------->
<=conversation=>
<=conversation=================>
<---NOTIFY-----
---- 200 OK--->
---BYE-------->
<--- 200 OK----
In this case, B doesn't receive any REFER, it only needs to support to receive RE-INVITE (that will switch voice connection from A to C)
Which one is used, depends on your voice provider. In simple, PBX-like environment, you can probably see 1). In network, IMS-like environments, it is likely that you will see 2).
Network based works similarly to PSTN transfer (specially billing-wise) as the transfer-target leg is usually still associated to A (and will be billed for it) and B's connection is not really affected.
While in the end-point based transfer, B just does blindly A's request (and if that has some billing implications they will be B's responsibility).
Some references are: