From 8a0b035bb1858cce84b7ffa634f66c953952c2d7 Mon Sep 17 00:00:00 2001 From: Erik Mackdanz Date: Tue, 24 Oct 2023 01:08:36 -0500 Subject: [PATCH] basic fastcgi --- .gitignore | 1 + Cargo.lock | 25 +++++++++++++++++++++++++ Cargo.toml | 9 +++++++++ src/main.rs | 25 +++++++++++++++++++++++++ 4 files changed, 60 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 src/main.rs diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..362d415 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,25 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "fastcgi" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4159a0f48bea0281602e508eb070d7d7ba1f6ac2480f9db1a60a39274aea1cc" +dependencies = [ + "libc", +] + +[[package]] +name = "fcgisrv" +version = "0.1.0" +dependencies = [ + "fastcgi", +] + +[[package]] +name = "libc" +version = "0.2.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..4aed1ca --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "fcgisrv" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +fastcgi = "1.0.0" diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..6412b90 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,25 @@ +extern crate fastcgi; +use std::error::Error; +use std::fs::remove_file; +use std::io::Write; +use std::os::unix::net::UnixListener; +use std::os::fd::AsRawFd; + +fn main() -> Result<(),Box> { + let socketpath = "/tmp/fcgisocket"; + + let _ = remove_file(socketpath); + + let listener = UnixListener::bind(socketpath).unwrap(); + fastcgi::run_raw(|mut req| { + for (k,v) in req.params() { + println!("key {} has value {}",k,v); + } + + if let Err(e) = write!(&mut req.stdout(), "Status: 404 Not Found\nContent-Type: text/plain\n\nHello, world!") { + println!("Error was {}",e); + } + + }, listener.as_raw_fd()); + Ok(()) +} -- 2.52.0