fbffa21d79e9e3c2eebea12faa0554368fb846d7
[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 packet;
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> | <tests> | ...", 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 println!("Starting server.., Press any key to quit");
37
38 match server::Server::new(PORT) {
39 Ok(mut server) => {
40 println!("Server started");
41
42 match client::Client::new("127.0.0.1", PORT) {
43 Ok(mut client) => {
44 client.start_tests();
45 let _ = client.close();
46 },
47 Err(e) => {
48 println!("Unable to create a client. Error: {}", e);
49 return
50 }
51 }
52
53 io::stdin().read_line().ok().expect("Failed to read line");
54 server.close().ok().expect("Failed to close the server");
55 },
56 Err(e) => println!("Unable to create a new server. Error: {}", e)
57 }
58 }
59 }