diff --git a/conf/autoload_configs/httapi.conf.xml b/conf/autoload_configs/httapi.conf.xml
index c4102e0..b412a74 100644
--- a/conf/autoload_configs/httapi.conf.xml
+++ b/conf/autoload_configs/httapi.conf.xml
@@ -49,10 +49,12 @@
-
+
-
+
diff --git a/conf/dialplan/default.xml b/conf/dialplan/default.xml
index 5dbbed1..91741bb 100644
--- a/conf/dialplan/default.xml
+++ b/conf/dialplan/default.xml
@@ -46,7 +46,7 @@
-
+
diff --git a/did_router/src/database.rs b/did_router/src/database.rs
index f200fb1..0f07c7e 100644
--- a/did_router/src/database.rs
+++ b/did_router/src/database.rs
@@ -25,7 +25,7 @@ pub enum DidTargetType {
CustomMessage
}
-#[derive(Queryable, Selectable, Serialize, AsChangeset)]
+#[derive(Debug, Queryable, Selectable, Serialize, AsChangeset)]
#[diesel(table_name = crate::schema::dids)]
#[diesel(check_for_backend(diesel::pg::Pg))]
pub struct Did {
@@ -62,6 +62,16 @@ pub fn get_did(a_id :i32) -> Result {
Ok(result)
}
+pub fn get_did_by(did: &str) -> Result {
+ use crate::schema::dids::dsl::*;
+ let mut conn = connect();
+
+ let d = dids.filter(did_number.eq(did))
+ .first::(&mut conn)?;
+
+ Ok(d)
+}
+
pub fn delete_did(i: i32) -> Result<(), Error> {
use crate::schema::dids;
use crate::schema::dids::columns::id;
diff --git a/did_router/src/httapi.rs b/did_router/src/httapi.rs
new file mode 100644
index 0000000..4179e33
--- /dev/null
+++ b/did_router/src/httapi.rs
@@ -0,0 +1,82 @@
+use xml_builder::{XMLBuilder, XMLElement, XMLVersion};
+use super::database as db;
+use super::database::{DidTargetType, Did};
+
+pub fn url(_did: Did) -> XMLElement {
+ let work = XMLElement::new("work");
+ 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
+
+}
diff --git a/did_router/src/main.rs b/did_router/src/main.rs
index 15b6da8..bce2a7a 100644
--- a/did_router/src/main.rs
+++ b/did_router/src/main.rs
@@ -1,9 +1,9 @@
pub mod database;
+pub mod httapi;
pub mod schema;
use std::ops::Deref;
use std::str::FromStr;
-use xml_builder::{XMLBuilder, XMLElement, XMLVersion};
use actix_web::{web, App,
HttpResponse,
HttpServer,
@@ -29,34 +29,11 @@ struct JsonDid {
}
async fn route_did(data: web::Form) -> impl Responder {
- let _dest_did = data.dest_did.clone();
- 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 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();
-
- 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();
-
+ let did = data.dest_did.clone();
+ let xml = httapi::route_call(did);
HttpResponse::Ok()
.content_type(ContentType::xml())
- .body(writer)
+ .body(xml)
}
async fn did_post(d: web::Json) -> impl Responder {