Support multi trunks

This commit is contained in:
2026-04-01 22:17:59 -04:00
parent e6a7a40ea3
commit 75aa6129b6
9 changed files with 304 additions and 43 deletions

View File

@@ -30,10 +30,11 @@ pub fn moh(_did: Did) -> XMLElement {
pub fn external_number(did: Did) -> XMLElement {
let mut work = XMLElement::new("work");
let mut bridge = XMLElement::new("execute");
let target = did.target.unwrap();
let callee_number = did.target.unwrap();
let ds = build_dial_string(&callee_number, &did.did_number);
bridge.add_attribute("application", "bridge");
bridge.add_attribute("data", format!("sofia/gateway/powernet_1/{}", target).as_str());
bridge.add_attribute("data", &ds);
work.add_child(bridge).unwrap();
@@ -68,12 +69,36 @@ pub fn custom_message(_did: Did) -> XMLElement {
work
}
pub fn outbound(d: &str) -> XMLElement {
fn build_dial_string(callee_number: &str, caller_number: &str) -> String {
let ds = match db::get_did_by(&caller_number) {
Ok(d) => {
if d.trunk == "3229" || d.trunk == "3401" {
format!("{{origination_caller_id_number={} }}sofia/gateway/powernet_1/{}",
caller_number,
callee_number)
} else {
format!("{{origination_caller_id_number={} }}sofia/gateway/powernet_2/{}",
caller_number,
callee_number)
}
},
Err(..) =>{
format!("{{origination_caller_id_number={} }}sofia/gateway/powernet_1/{}",
caller_number,
callee_number)
}
};
ds
}
pub fn outbound(did: &str, caller_number: &str) -> XMLElement {
let mut work = XMLElement::new("work");
let mut bridge = XMLElement::new("execute");
let ds = build_dial_string(did, caller_number);
bridge.add_attribute("application", "bridge");
bridge.add_attribute("data", format!("sofia/gateway/powernet_1/{}", d).as_str());
bridge.add_attribute("data", &ds);
work.add_child(bridge).unwrap();
@@ -90,9 +115,9 @@ pub fn add_playback_element(work: &mut XMLElement ,file_path: &str) {
work.add_child(playback).unwrap();
}
pub fn build_work_element(did: &str, caller_ipaddr: &str) -> XMLElement {
pub fn build_work_element(did: &str, caller_number: &str, caller_ipaddr: &str) -> XMLElement {
if db::from_pbx(&caller_ipaddr).unwrap() == true {
outbound(did)
outbound(did, caller_number)
} else {
let d = db::get_did_by(&did).unwrap();
let work = match d.target_type {
@@ -120,7 +145,7 @@ pub fn build_work_element(did: &str, caller_ipaddr: &str) -> XMLElement {
}
}
pub fn route_call(did: String, caller_ipaddr: String) -> Vec<u8> {
pub fn route_call(did: String, caller_number: String,caller_ipaddr: String) -> Vec<u8> {
let mut xml = XMLBuilder::new()
.version(XMLVersion::XML1_1)
.encoding("UTF-8".into())
@@ -130,7 +155,7 @@ pub fn route_call(did: String, caller_ipaddr: String) -> Vec<u8> {
doc.add_attribute("type", "xml/freeswitch-httapi");
let params = XMLElement::new("params");
let mut work = build_work_element(&did, &caller_ipaddr);
let mut work = build_work_element(&did, &caller_number, &caller_ipaddr);
let mut hangup = XMLElement::new("execute");
hangup.add_attribute("application", "hangup");