Files
freeswitch_chris/did_router/src/httapi.rs

91 lines
2.2 KiB
Rust
Raw Normal View History

2026-03-25 22:41:07 -04:00
use xml_builder::{XMLBuilder, XMLElement, XMLVersion};
use super::database as db;
use super::database::{DidTargetType, Did};
pub fn url(did: Did) -> XMLElement {
let mut work = XMLElement::new("work");
let mut bridge = XMLElement::new("execute");
let target = did.target.unwrap();
bridge.add_attribute("application", "bridge");
bridge.add_attribute("data", format!("sofia/internal/{}", target).as_str());
work.add_child(bridge).unwrap();
2026-03-25 22:41:07 -04:00
work
}
pub fn moh(_did: Did) -> XMLElement {
let work = XMLElement::new("work");
work
}
pub fn external_number(_did: Did) -> XMLElement {
let work = XMLElement::new("work");
work
}
pub fn no_service(_did: Did) -> XMLElement {
let mut work = XMLElement::new("work");
let mut playback = XMLElement::new("playback");
playback.add_attribute("name", "exten");
playback.add_attribute("file", "ivr/ivr-welcome_to_freeswitch.wav");
work.add_child(playback).unwrap();
work
}
pub fn night_mode(_did: Did) -> XMLElement {
let work = XMLElement::new("work");
work
}
pub fn custom_message(_did: Did) -> XMLElement {
let work = XMLElement::new("work");
work
}
pub fn route_call(did: String) -> Vec<u8> {
let d = db::get_did_by(&did).unwrap();
let mut xml = XMLBuilder::new()
.version(XMLVersion::XML1_1)
.encoding("UTF-8".into())
.build();
let mut doc = XMLElement::new("document");
doc.add_attribute("type", "xml/freeswitch-httapi");
let params = XMLElement::new("params");
let work = match d.target_type {
DidTargetType::Url => {
url(d)
},
DidTargetType::Moh => {
moh(d)
},
DidTargetType::ExternalNumber => {
external_number(d)
},
DidTargetType::NoService => {
no_service(d)
},
DidTargetType::NightMode => {
night_mode(d)
},
DidTargetType::CustomMessage => {
custom_message(d)
}
};
doc.add_child(params).unwrap();
doc.add_child(work).unwrap();
xml.set_root_element(doc);
let mut writer: Vec<u8> = Vec::new();
xml.generate(&mut writer).unwrap();
writer
}