Actual environment topology diagram:
In general, FreeSWITCH uses the SOA pattern by default, and in some cases the non-SOA model.
Non-SOA model, what can cause problems. will result in a SDP address error, resulting in a voice single pass.
Through the topology map can be seen, FreeSWITCH is a dual network card server, the actual environment, the intranet IP phone call, two-way voice normal, both sides can hear each other speech.
But in the case of phone calls (mobile phone calls in), bridge or transfer to the intranet IP phone, the mobile phone does not hear the voice of the IP phone. Which means the voice stream of the IP phone is not sent out.
FreeSWITCH on the bag, only from the SBC direction from the RTP package, no intranet to the SBC RTP, so will cause the mobile phone can not hear the voice of the IP phone (Dantong).
From the IP phone grab packet, you can find that the IP Phone RTP voice packet sent to the SBC IP address, but the intranet and SBC is not, so the IP phone RTP voice released.
IP Phone RTP target address, is in the FreeSWITCH to the IP telephone to send invite, in the SDP carry IP address, grab bag can be found, at this time the SDP in the IP address is SBC address. So to change this address, the SBC's address will be changed to FreeSWITCH intranet address.
By tracking the source code of the Mod_sofia module, FreeSWITCH uses a non-SOA model.
In the configuration file, use the <param name= "Enable-soa" value= "true"/> Force the use of the SOA model
In the SOFIA_GLUE.C source code
Sofia_glue_do_invite function:
if (Sofia_use_soa (TECH_PVT)) {
//soa mode invite
}else{
//Non-SOA schema invite Will directly copy the SDP package on the extranet and then send invite
}
In a configuration file, after you configure Enable-soa=true, you can modify the source code to refer to the following:
To modify the source code: