commit
6ddb9d4355
9 changed files with 167 additions and 0 deletions
@ -0,0 +1,2 @@ |
|||||
|
/target |
||||
|
**/*.rs.bk |
||||
@ -0,0 +1,16 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="CargoProjects"> |
||||
|
<cargoProject FILE="$PROJECT_DIR$/Cargo.toml" /> |
||||
|
</component> |
||||
|
<component name="JavaScriptSettings"> |
||||
|
<option name="languageLevel" value="ES6" /> |
||||
|
</component> |
||||
|
<component name="MacroExpansionManager"> |
||||
|
<option name="directoryName" value="zuWvPryl" /> |
||||
|
</component> |
||||
|
<component name="RustProjectSettings"> |
||||
|
<option name="toolchainHomeDirectory" value="/usr/bin" /> |
||||
|
<option name="version" value="2" /> |
||||
|
</component> |
||||
|
</project> |
||||
@ -0,0 +1,8 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="ProjectModuleManager"> |
||||
|
<modules> |
||||
|
<module fileurl="file://$PROJECT_DIR$/.idea/noobctf-server.iml" filepath="$PROJECT_DIR$/.idea/noobctf-server.iml" /> |
||||
|
</modules> |
||||
|
</component> |
||||
|
</project> |
||||
@ -0,0 +1,14 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<module type="CPP_MODULE" version="4"> |
||||
|
<component name="NewModuleRootManager"> |
||||
|
<content url="file://$MODULE_DIR$"> |
||||
|
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" /> |
||||
|
<sourceFolder url="file://$MODULE_DIR$/examples" isTestSource="false" /> |
||||
|
<sourceFolder url="file://$MODULE_DIR$/tests" isTestSource="true" /> |
||||
|
<sourceFolder url="file://$MODULE_DIR$/benches" isTestSource="true" /> |
||||
|
<excludeFolder url="file://$MODULE_DIR$/target" /> |
||||
|
</content> |
||||
|
<orderEntry type="inheritedJdk" /> |
||||
|
<orderEntry type="sourceFolder" forTests="false" /> |
||||
|
</component> |
||||
|
</module> |
||||
@ -0,0 +1,6 @@ |
|||||
|
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
<project version="4"> |
||||
|
<component name="VcsDirectoryMappings"> |
||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" /> |
||||
|
</component> |
||||
|
</project> |
||||
@ -0,0 +1,30 @@ |
|||||
|
[[package]] |
||||
|
name = "lazy_static" |
||||
|
version = "1.3.0" |
||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
|
|
||||
|
[[package]] |
||||
|
name = "libc" |
||||
|
version = "0.2.51" |
||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
|
|
||||
|
[[package]] |
||||
|
name = "noobctf-server" |
||||
|
version = "0.1.0" |
||||
|
dependencies = [ |
||||
|
"rppal 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)", |
||||
|
] |
||||
|
|
||||
|
[[package]] |
||||
|
name = "rppal" |
||||
|
version = "0.11.1" |
||||
|
source = "registry+https://github.com/rust-lang/crates.io-index" |
||||
|
dependencies = [ |
||||
|
"lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", |
||||
|
"libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)", |
||||
|
] |
||||
|
|
||||
|
[metadata] |
||||
|
"checksum lazy_static 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "bc5729f27f159ddd61f4df6228e827e86643d4d3e7c32183cb30a1c08f604a14" |
||||
|
"checksum libc 0.2.51 (registry+https://github.com/rust-lang/crates.io-index)" = "bedcc7a809076656486ffe045abeeac163da1b558e963a31e29fbfbeba916917" |
||||
|
"checksum rppal 0.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "47fa3e09d34f2992f47f3d4315f8ee8cfffc1fe1912d4d08258b66cc18dc3b00" |
||||
@ -0,0 +1,8 @@ |
|||||
|
[package] |
||||
|
name = "noobctf-server" |
||||
|
version = "0.1.0" |
||||
|
authors = ["Michael Preisach <michael@preisach.at>"] |
||||
|
edition = "2018" |
||||
|
|
||||
|
[dependencies] |
||||
|
rppal = "0.11.1" |
||||
@ -0,0 +1,35 @@ |
|||||
|
use std::net::{TcpStream, TcpListener}; |
||||
|
use std::io::prelude::*; |
||||
|
use std::io; |
||||
|
|
||||
|
mod protocol; |
||||
|
|
||||
|
|
||||
|
fn handle_connection(stream: TcpStream) -> io::Result<()> { |
||||
|
let mut outstream = stream.try_clone()?; |
||||
|
let mut reader = io::BufReader::new(stream); |
||||
|
let mut text = String::new(); |
||||
|
reader.read_line(&mut text)?; |
||||
|
println!("got '{}'", text.trim_right()); |
||||
|
outstream.write_all("hello from the server as well!".as_bytes())?; |
||||
|
Ok(()) |
||||
|
} |
||||
|
|
||||
|
fn main() { |
||||
|
let address = "127.0.0.1:8000"; |
||||
|
let listener = TcpListener::bind(address).expect("could not start server"); |
||||
|
|
||||
|
// accept connections and get a TcpStream
|
||||
|
for connection in listener.incoming() { |
||||
|
match connection { |
||||
|
Ok(stream) => { |
||||
|
stream.set_nonblocking(false); |
||||
|
if let Err(e) = handle_connection(stream) { |
||||
|
println!("error {:?}", e); |
||||
|
} |
||||
|
} |
||||
|
Err(e) => { println!("connection failed {}\n", e); } |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
@ -0,0 +1,48 @@ |
|||||
|
pub struct Protocol { |
||||
|
segments: Vec<bool>, |
||||
|
} |
||||
|
|
||||
|
impl Protocol { |
||||
|
pub fn new() -> Protocol { |
||||
|
Protocol { |
||||
|
segments: [false, false, false, false, false, false, false, false].to_vec(), |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
pub fn get_segment(&self, index: usize) -> Result<bool, &'static str> { |
||||
|
if index < 8 && index >= 0 { |
||||
|
Ok(self.segments[index]) |
||||
|
} else { |
||||
|
Err("get_segment: Index out of bounds") |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
pub fn move_state(&mut self, input : &str) -> Result<&'static str, &'static str> { |
||||
|
let arguments:Vec<&str> = input.split_whitespace().collect(); |
||||
|
if arguments.len() < 1 { |
||||
|
return Err("No argument found!"); |
||||
|
} |
||||
|
match arguments[0] { |
||||
|
"setsegment" => { |
||||
|
let index = arguments[1].parse::<usize>().unwrap(); |
||||
|
let value = match arguments[2] { |
||||
|
"on" => true, |
||||
|
"off" => false, |
||||
|
_ => self.segments[index], |
||||
|
}; |
||||
|
} |
||||
|
"display" => { |
||||
|
//show the saved state on the display
|
||||
|
println!("Showing state on display"); |
||||
|
} |
||||
|
"exit" => { |
||||
|
//close connection
|
||||
|
println!("Closing connection."); |
||||
|
} |
||||
|
"shutdown" => { |
||||
|
//exit program
|
||||
|
println!("Closing connection and shut down server"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue