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(); 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 { 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 = Vec::new(); xml.generate(&mut writer).unwrap(); writer }