summaryrefslogtreecommitdiff
path: root/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.rs')
-rw-r--r--src/main.rs44
1 files changed, 30 insertions, 14 deletions
diff --git a/src/main.rs b/src/main.rs
index c891d50..679e87b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,19 +1,34 @@
-use std::{time::{UNIX_EPOCH, SystemTime}, env, net::IpAddr};
+use std::time::{SystemTime, UNIX_EPOCH};
use config::Config;
-use server::server::Server;
-use tracing::metadata::LevelFilter;
+use database::Database;
+use dotenv::dotenv;
+use dns::server::DnsServer;
+use tracing::{error, metadata::LevelFilter};
use tracing_subscriber::{
filter::filter_fn, prelude::__tracing_subscriber_SubscriberExt, util::SubscriberInitExt, Layer,
};
+use web::WebServer;
mod config;
-mod packet;
-mod server;
+mod database;
+mod dns;
+mod web;
+
+type Error = Box<dyn std::error::Error>;
+pub type Result<T> = std::result::Result<T, Error>;
#[tokio::main]
async fn main() {
+ if let Err(err) = run().await {
+ error!("{err}")
+ };
+}
+
+async fn run() -> Result<()> {
+ dotenv().ok();
+
tracing_subscriber::registry()
.with(
tracing_subscriber::fmt::layer()
@@ -24,19 +39,20 @@ async fn main() {
)
.init();
- let mut config = Config::new();
+ let config = Config::new();
+ let database = Database::new(config.clone()).await?;
- if let Ok(port) = env::var("PORT").unwrap_or(String::new()).parse::<u16>() {
- config.set_port(port);
- }
+ let dns_server = DnsServer::new(config.clone(), database.clone()).await?;
+ let (udp, tcp) = dns_server.run().await?;
- if let Ok(fallback) = env::var("FALLBACK_DNS").unwrap_or(String::new()).parse::<IpAddr>() {
- config.set_fallback_ns(&fallback);
- }
+ let web_server = WebServer::new(config, database).await?;
+ let web = web_server.run().await?;
- let server = Server::new(config).await.expect("Failed to bind server");
+ tokio::join!(udp).0?;
+ tokio::join!(tcp).0?;
+ tokio::join!(web).0?;
- server.run().await.unwrap();
+ Ok(())
}
pub fn get_time() -> u64 {