Loading Cargo.lock +91 −3 Original line number Diff line number Diff line Loading @@ -77,6 +77,27 @@ dependencies = [ "trust-dns-resolver", ] [[package]] name = "actix-files" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "193b22cb1f7b4ff12a4eb2415d6d19e47e44ea93e05930b30d05375ea29d3529" dependencies = [ "actix-http", "actix-service", "actix-web", "bitflags", "bytes", "derive_more", "futures-core", "futures-util", "log", "mime", "mime_guess", "percent-encoding", "v_htmlescape", ] [[package]] name = "actix-http" version = "1.0.1" Loading Loading @@ -907,7 +928,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ "typenum", "version_check", "version_check 0.9.2", ] [[package]] Loading Loading @@ -1328,6 +1349,16 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" dependencies = [ "mime", "unicase", ] [[package]] name = "miniz_oxide" version = "0.4.1" Loading Loading @@ -1396,6 +1427,16 @@ dependencies = [ "winapi 0.3.9", ] [[package]] name = "nom" version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" dependencies = [ "memchr", "version_check 0.1.5", ] [[package]] name = "num-integer" version = "0.1.43" Loading Loading @@ -1612,7 +1653,7 @@ dependencies = [ "proc-macro2", "quote", "syn", "version_check", "version_check 0.9.2", ] [[package]] Loading @@ -1623,7 +1664,7 @@ checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", "version_check", "version_check 0.9.2", ] [[package]] Loading Loading @@ -2162,6 +2203,15 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" [[package]] name = "unicase" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ "version_check 0.9.2", ] [[package]] name = "unicode-bidi" version = "0.3.4" Loading Loading @@ -2215,6 +2265,37 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" [[package]] name = "v_escape" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "660b101c07b5d0863deb9e7fb3138777e858d6d2a79f9e6049a27d1cc77c6da6" dependencies = [ "v_escape_derive", ] [[package]] name = "v_escape_derive" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2ca2a14bc3fc5b64d188b087a7d3a927df87b152e941ccfbc66672e20c467ae" dependencies = [ "nom", "proc-macro2", "quote", "syn", ] [[package]] name = "v_htmlescape" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33e939c0d8cf047514fb6ba7d5aac78bc56677a6938b2ee67000b91f2e97e41" dependencies = [ "cfg-if", "v_escape", ] [[package]] name = "vcpkg" version = "0.2.10" Loading @@ -2233,6 +2314,12 @@ version = "0.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1" [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" version = "0.9.2" Loading Loading @@ -2278,6 +2365,7 @@ version = "0.1.0" name = "webrtc-audio-server" version = "0.1.0" dependencies = [ "actix-files", "actix-rt", "actix-service", "actix-tls 2.0.0", Loading server/Cargo.toml +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ actix-web = { version = "2", features = ["openssl"] } actix-web-actors = "2" actix-service = "1" actix-tls = { version = "2", features = ["openssl"] } actix-files = "0.2" openssl = "0.10" log = "0.4" env_logger = "0.7" Loading server/src/config.rs +4 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ pub struct Config { #[structopt(short, long, default_value = "8080")] pub port: u16, /// Directory with static HTML/CSS/JS files. #[structopt(short, long)] pub static_files: PathBuf, /// Use TLS. #[structopt(short = "t", long)] pub use_tls: bool, Loading server/src/main.rs +5 −37 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ // Licensed under the MIT license, see the LICENSE file or <http://opensource.org/licenses/MIT> mod config; mod server; use anyhow::Error; Loading @@ -10,41 +11,6 @@ use structopt::StructOpt; use config::Config; use actix_rt::System; use actix_web::{web, App, HttpResponse, HttpServer, Responder}; async fn index() -> impl Responder { HttpResponse::Ok().body("Hello world!") } async fn run(cfg: Config) -> Result<(), Error> { let server = HttpServer::new(|| App::new().route("/", web::get().to(index))); let server = if cfg.use_tls { use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod}; let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls())?; builder.set_private_key_file( cfg.key_file.as_ref().expect("No key file given"), SslFiletype::PEM, )?; builder.set_certificate_chain_file( cfg.certificate_file .as_ref() .expect("No certificate file given"), )?; server.bind_openssl(format!("0.0.0.0:{}", cfg.port), builder)? } else { server.bind(format!("0.0.0.0:{}", cfg.port))? }; server.run().await?; Ok(()) } fn main() -> Result<(), Error> { let cfg = Config::from_args(); Loading @@ -55,6 +21,8 @@ fn main() -> Result<(), Error> { .write_style("WEBRTC_AUDIO_SERVER_LOG_STYLE"); env_logger::init_from_env(env); let mut system = System::new("WebRTC Audio Server"); system.block_on(run(cfg)) let mut system = actix_rt::System::new("WebRTC Audio Server"); system.block_on(server::run(cfg))?; Ok(()) } server/src/server.rs 0 → 100644 +68 −0 Original line number Diff line number Diff line // Copyright (C) 2020 Sebastian Dröge <sebastian@centricular.com> // // Licensed under the MIT license, see the LICENSE file or <http://opensource.org/licenses/MIT> use crate::config::Config; use actix_files::NamedFile; use actix_web::{web, App, HttpRequest, HttpResponse, HttpServer, Responder}; async fn index(cfg: web::Data<Config>) -> Result<NamedFile, actix_web::Error> { let full_path = cfg.static_files.join("index.html"); let file = NamedFile::open(full_path)?; Ok(file.use_last_modified(true)) } async fn ws(_cfg: web::Data<Config>) -> impl Responder { HttpResponse::Ok().body("Hello world!") } async fn static_file( cfg: web::Data<Config>, req: HttpRequest, ) -> Result<NamedFile, actix_web::Error> { let path: std::path::PathBuf = req.match_info().query("filename").parse().unwrap(); let full_path = cfg.static_files.join(path); let file = NamedFile::open(full_path)?; Ok(file.use_last_modified(true)) } pub async fn run(cfg: Config) -> Result<(), anyhow::Error> { let cfg = web::Data::new(cfg); let cfg_clone = cfg.clone(); let server = HttpServer::new(move || { App::new() .app_data(cfg_clone.clone()) .route("/", web::get().to(index)) .route("/ws", web::get().to(ws)) .route("/static/{filename:.*}", web::get().to(static_file)) }); let server = if cfg.use_tls { use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod}; let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls())?; builder.set_private_key_file( cfg.key_file.as_ref().expect("No key file given"), SslFiletype::PEM, )?; builder.set_certificate_chain_file( cfg.certificate_file .as_ref() .expect("No certificate file given"), )?; server.bind_openssl(format!("0.0.0.0:{}", cfg.port), builder)? } else { server.bind(format!("0.0.0.0:{}", cfg.port))? }; server.run().await?; Ok(()) } Loading
Cargo.lock +91 −3 Original line number Diff line number Diff line Loading @@ -77,6 +77,27 @@ dependencies = [ "trust-dns-resolver", ] [[package]] name = "actix-files" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "193b22cb1f7b4ff12a4eb2415d6d19e47e44ea93e05930b30d05375ea29d3529" dependencies = [ "actix-http", "actix-service", "actix-web", "bitflags", "bytes", "derive_more", "futures-core", "futures-util", "log", "mime", "mime_guess", "percent-encoding", "v_htmlescape", ] [[package]] name = "actix-http" version = "1.0.1" Loading Loading @@ -907,7 +928,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "501466ecc8a30d1d3b7fc9229b122b2ce8ed6e9d9223f1138d4babb253e51817" dependencies = [ "typenum", "version_check", "version_check 0.9.2", ] [[package]] Loading Loading @@ -1328,6 +1349,16 @@ version = "0.3.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d" [[package]] name = "mime_guess" version = "2.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2684d4c2e97d99848d30b324b00c8fcc7e5c897b7cbb5819b09e7c90e8baf212" dependencies = [ "mime", "unicase", ] [[package]] name = "miniz_oxide" version = "0.4.1" Loading Loading @@ -1396,6 +1427,16 @@ dependencies = [ "winapi 0.3.9", ] [[package]] name = "nom" version = "4.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2ad2a91a8e869eeb30b9cb3119ae87773a8f4ae617f41b1eb9c154b2905f7bd6" dependencies = [ "memchr", "version_check 0.1.5", ] [[package]] name = "num-integer" version = "0.1.43" Loading Loading @@ -1612,7 +1653,7 @@ dependencies = [ "proc-macro2", "quote", "syn", "version_check", "version_check 0.9.2", ] [[package]] Loading @@ -1623,7 +1664,7 @@ checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" dependencies = [ "proc-macro2", "quote", "version_check", "version_check 0.9.2", ] [[package]] Loading Loading @@ -2162,6 +2203,15 @@ version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "373c8a200f9e67a0c95e62a4f52fbf80c23b4381c05a17845531982fa99e6b33" [[package]] name = "unicase" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "50f37be617794602aabbeee0be4f259dc1778fabe05e2d67ee8f79326d5cb4f6" dependencies = [ "version_check 0.9.2", ] [[package]] name = "unicode-bidi" version = "0.3.4" Loading Loading @@ -2215,6 +2265,37 @@ version = "0.7.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "05e42f7c18b8f902290b009cde6d651262f956c98bc51bca4cd1d511c9cd85c7" [[package]] name = "v_escape" version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "660b101c07b5d0863deb9e7fb3138777e858d6d2a79f9e6049a27d1cc77c6da6" dependencies = [ "v_escape_derive", ] [[package]] name = "v_escape_derive" version = "0.5.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2ca2a14bc3fc5b64d188b087a7d3a927df87b152e941ccfbc66672e20c467ae" dependencies = [ "nom", "proc-macro2", "quote", "syn", ] [[package]] name = "v_htmlescape" version = "0.4.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e33e939c0d8cf047514fb6ba7d5aac78bc56677a6938b2ee67000b91f2e97e41" dependencies = [ "cfg-if", "v_escape", ] [[package]] name = "vcpkg" version = "0.2.10" Loading @@ -2233,6 +2314,12 @@ version = "0.0.10" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d63556a25bae6ea31b52e640d7c41d1ab27faba4ccb600013837a3d0b3994ca1" [[package]] name = "version_check" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "914b1a6776c4c929a602fafd8bc742e06365d4bcbe48c30f9cca5824f70dc9dd" [[package]] name = "version_check" version = "0.9.2" Loading Loading @@ -2278,6 +2365,7 @@ version = "0.1.0" name = "webrtc-audio-server" version = "0.1.0" dependencies = [ "actix-files", "actix-rt", "actix-service", "actix-tls 2.0.0", Loading
server/Cargo.toml +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ actix-web = { version = "2", features = ["openssl"] } actix-web-actors = "2" actix-service = "1" actix-tls = { version = "2", features = ["openssl"] } actix-files = "0.2" openssl = "0.10" log = "0.4" env_logger = "0.7" Loading
server/src/config.rs +4 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,10 @@ pub struct Config { #[structopt(short, long, default_value = "8080")] pub port: u16, /// Directory with static HTML/CSS/JS files. #[structopt(short, long)] pub static_files: PathBuf, /// Use TLS. #[structopt(short = "t", long)] pub use_tls: bool, Loading
server/src/main.rs +5 −37 Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ // Licensed under the MIT license, see the LICENSE file or <http://opensource.org/licenses/MIT> mod config; mod server; use anyhow::Error; Loading @@ -10,41 +11,6 @@ use structopt::StructOpt; use config::Config; use actix_rt::System; use actix_web::{web, App, HttpResponse, HttpServer, Responder}; async fn index() -> impl Responder { HttpResponse::Ok().body("Hello world!") } async fn run(cfg: Config) -> Result<(), Error> { let server = HttpServer::new(|| App::new().route("/", web::get().to(index))); let server = if cfg.use_tls { use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod}; let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls())?; builder.set_private_key_file( cfg.key_file.as_ref().expect("No key file given"), SslFiletype::PEM, )?; builder.set_certificate_chain_file( cfg.certificate_file .as_ref() .expect("No certificate file given"), )?; server.bind_openssl(format!("0.0.0.0:{}", cfg.port), builder)? } else { server.bind(format!("0.0.0.0:{}", cfg.port))? }; server.run().await?; Ok(()) } fn main() -> Result<(), Error> { let cfg = Config::from_args(); Loading @@ -55,6 +21,8 @@ fn main() -> Result<(), Error> { .write_style("WEBRTC_AUDIO_SERVER_LOG_STYLE"); env_logger::init_from_env(env); let mut system = System::new("WebRTC Audio Server"); system.block_on(run(cfg)) let mut system = actix_rt::System::new("WebRTC Audio Server"); system.block_on(server::run(cfg))?; Ok(()) }
server/src/server.rs 0 → 100644 +68 −0 Original line number Diff line number Diff line // Copyright (C) 2020 Sebastian Dröge <sebastian@centricular.com> // // Licensed under the MIT license, see the LICENSE file or <http://opensource.org/licenses/MIT> use crate::config::Config; use actix_files::NamedFile; use actix_web::{web, App, HttpRequest, HttpResponse, HttpServer, Responder}; async fn index(cfg: web::Data<Config>) -> Result<NamedFile, actix_web::Error> { let full_path = cfg.static_files.join("index.html"); let file = NamedFile::open(full_path)?; Ok(file.use_last_modified(true)) } async fn ws(_cfg: web::Data<Config>) -> impl Responder { HttpResponse::Ok().body("Hello world!") } async fn static_file( cfg: web::Data<Config>, req: HttpRequest, ) -> Result<NamedFile, actix_web::Error> { let path: std::path::PathBuf = req.match_info().query("filename").parse().unwrap(); let full_path = cfg.static_files.join(path); let file = NamedFile::open(full_path)?; Ok(file.use_last_modified(true)) } pub async fn run(cfg: Config) -> Result<(), anyhow::Error> { let cfg = web::Data::new(cfg); let cfg_clone = cfg.clone(); let server = HttpServer::new(move || { App::new() .app_data(cfg_clone.clone()) .route("/", web::get().to(index)) .route("/ws", web::get().to(ws)) .route("/static/{filename:.*}", web::get().to(static_file)) }); let server = if cfg.use_tls { use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod}; let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls())?; builder.set_private_key_file( cfg.key_file.as_ref().expect("No key file given"), SslFiletype::PEM, )?; builder.set_certificate_chain_file( cfg.certificate_file .as_ref() .expect("No certificate file given"), )?; server.bind_openssl(format!("0.0.0.0:{}", cfg.port), builder)? } else { server.bind(format!("0.0.0.0:{}", cfg.port))? }; server.run().await?; Ok(()) }