+extern crate openssl;
+
+use std::io;
+use std::os;
+
+mod crypto;
+mod command;
+mod client;
+mod server;
+
+/*
+TODO
+ * Comment stocker les clefs? à quels critères doivent elle répondre?
+ *
+*/
+
+const PORT: u16 = 4221;
+
+fn print_usage() {
+ println!("{} <genkey> | ...", os::args()[0]);
+}
+
+fn main() {
+ let args = os::args();
+
+ if args.iter().any(|a| a.as_slice() == "--help" || a.as_slice() == "-h") {
+ print_usage();
+ } else if args.len() > 1 && args[1].as_slice() == "genkey" {
+ match crypto::generate_key(256 / 8) {
+ Ok(key) => println!("key: {}", key),
+ Err(e) => println!("Unable to generate a key. Error: {}", e)
+ }
+ } else {
+ match server::Server::new(PORT) {
+ Ok(mut server) => {
+ println!("Server started");
+
+ match client::Client::new("127.0.0.1", PORT) {
+ Ok(mut client) => {
+ client.start_tests();
+ client.close();
+ },
+ Err(e) => {
+ println!("Unable to create a client. Error: {}", e);
+ return
+ }
+ }
+
+ println!("Press any key to quit");
+ io::stdin().read_line().ok().expect("Failed to read line");
+ server.close().ok().expect("Failed to close the server");
+ },
+ Err(e) => println!("Unable to create a new server. Error: {}", e)
+ }
+ }
+}