From 3ea848e882e19f5261633fd18552b2d126229b6d Mon Sep 17 00:00:00 2001 From: Daniel Trick Date: Tue, 7 Feb 2023 17:42:12 +0100 Subject: [PATCH] Added README file. --- Cargo.toml | 2 +- LICENSE | 27 +++++++++++++++++++++++++++ README.md | 36 ++++++++++++++++++++++++++++++++++++ src/main.rs | 3 ++- 4 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 LICENSE create mode 100644 README.md diff --git a/Cargo.toml b/Cargo.toml index 1e6cdad..3b9e757 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] edition = "2021" name = "rusty_httpd" -version = "0.1.0" +version = "1.0.0" [dependencies] case_insensitive_hashmap = "1.0.0" diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..53e74bc --- /dev/null +++ b/LICENSE @@ -0,0 +1,27 @@ +The Unlicense +------------- + +This is free and unencumbered software released into the public domain. + +Anyone is free to copy, modify, publish, use, compile, sell, or +distribute this software, either in source code form or as a compiled +binary, for any purpose, commercial or non-commercial, and by any +means. + +In jurisdictions that recognize copyright laws, the author or authors +of this software dedicate any and all copyright interest in the +software to the public domain. We make this dedication for the benefit +of the public at large and to the detriment of our heirs and +successors. We intend this dedication to be an overt act of +relinquishment in perpetuity of all present and future rights to this +software under copyright law. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + +For more information, please refer to diff --git a/README.md b/README.md new file mode 100644 index 0000000..7157b49 --- /dev/null +++ b/README.md @@ -0,0 +1,36 @@ +# Rusty HTTP Server + +Simple and scalable HTTP server implemented purely in Rust. + +Heavily based on: [**mtcp-rs**](https://crates.io/crates/mtcp-rs) + +## Environment Variables + +The following environment variables can be used to configure the server: + +- **`HTTP_PUBLIC_PATH`:** The path to serve files from (default: `/public`) +- **`HTTP_BIND_ADDRESS`:** The local IP address where to listen for incoming connections (default: `0.0.0.0`) +- **`HTTP_PORT_NUMBER`:** The port number to listen for incoming connections (default: `8080`) +- **`HTTP_THREADS`:** The number of worker threads (default: detect automatically, one thread per CPU core) +- **`RUST_LOG`:** Controls the log level (see [`env_logger`](https://docs.rs/env_logger/latest/env_logger/) for details!) + +## Supported Platforms + +The following platforms are officially supported: + +- Microsoft Windows +- Linux +- FreeBSD + +These platforms should work too, but are *not* tested extensively: + +- OpenBSD +- NetBSD +- DragonFly BSD +- macOS + +## License + +This is free and unencumbered software released into the public domain. + +See [`LICENSE`](LICENSE) file for details! diff --git a/src/main.rs b/src/main.rs index b0bbf4e..170929f 100644 --- a/src/main.rs +++ b/src/main.rs @@ -25,6 +25,7 @@ fn main() { let public_path = env::var("HTTP_PUBLIC_PATH").ok().map(PathBuf::from).unwrap_or_else(default_public_path); let address = env::var("HTTP_BIND_ADDRESS").ok().map(|str| IpAddr::from_str(&str).expect("Failed to parse bind address!")).unwrap_or(IpAddr::V4(Ipv4Addr::UNSPECIFIED)); let port_number = env::var("HTTP_PORT_NUMBER").ok().map(|str| str.parse().expect("Failed to parse port number!")).unwrap_or(8080); + let thread_count = env::var("HTTP_THREADS").ok().map(|str| str.parse().expect("Failed to parse number of threads!")); if !public_path.is_dir() { error!("Public path {:?} does not exist, is not a directory, or is inaccessible!", public_path); @@ -32,7 +33,7 @@ fn main() { } let handler = WebHandler::new(&public_path).expect("Failed to create web-handler instance!"); - let mut server = Server::bind(address, port_number, None, None).expect("Failed to create the server!"); + let mut server = Server::bind(address, port_number, None, thread_count).expect("Failed to create the server!"); let canceller = server.canceller().expect("Failed to create canceller!"); drop(ctrlc::set_handler(move || {