cec395706daab70b756a49362d6e5b4f1fc81d3b
[crypto_lab1.git] / src / main.rs
1 #![feature(macro_rules)]
2
3 extern crate openssl;
4
5 use std::io;
6 use std::os;
7
8 mod crypto;
9 mod command;
10 mod client;
11 mod server;
12
13 /*
14 TODO
15 * Comment stocker les clefs? à quels critères doivent elle répondre?
16 *
17 */
18
19 const PORT: u16 = 4221;
20
21 fn print_usage() {
22 println!("{} <genkey> | ...", os::args()[0]);
23 }
24
25 fn main() {
26 let args = os::args();
27
28 if args.iter().any(|a| a.as_slice() == "--help" || a.as_slice() == "-h") {
29 print_usage();
30 } else if args.len() > 1 && args[1].as_slice() == "genkey" {
31 match crypto::generate_key(256 / 8) {
32 Ok(key) => println!("key: {}", key),
33 Err(e) => println!("Unable to generate a key. Error: {}", e)
34 }
35 } else {
36 match server::Server::new(PORT) {
37 Ok(mut server) => {
38 println!("Server started");
39
40 match client::Client::new("127.0.0.1", PORT) {
41 Ok(mut client) => {
42 client.start_tests();
43 client.close();
44 },
45 Err(e) => {
46 println!("Unable to create a client. Error: {}", e);
47 return
48 }
49 }
50
51 println!("Press any key to quit");
52 io::stdin().read_line().ok().expect("Failed to read line");
53 server.close().ok().expect("Failed to close the server");
54 },
55 Err(e) => println!("Unable to create a new server. Error: {}", e)
56 }
57 }
58 }