File: server.rs

package info (click to toggle)
rust-nbd 0.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 152 kB
  • sloc: makefile: 2
file content (42 lines) | stat: -rw-r--r-- 1,179 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
extern crate nbd;

use std::io::{Cursor, Result};
use std::net::{TcpListener, TcpStream};

use nbd::server::{handshake, transmission, Export};

fn handle_client(mut stream: TcpStream) -> Result<()> {
    let data = handshake(&mut stream, |name| {
        println!("requested export: {name}");
        let mut data = vec![0; 1_474_560];
        let signature = format!("Name of the export requested by client: `{}`.", name).into_bytes();
        data[0..signature.len()].copy_from_slice(&signature);
        Ok(Export {
            size: data.len() as u64,
            data,
            readonly: false,
            ..Default::default()
        })
    })?;
    let pseudofile = Cursor::new(data);
    transmission(&mut stream, pseudofile)?;
    Ok(())
}

fn main() {
    let listener = TcpListener::bind("127.0.0.1:10809").unwrap();

    for stream in listener.incoming() {
        match stream {
            Ok(stream) => match handle_client(stream) {
                Ok(_) => {}
                Err(e) => {
                    eprintln!("error: {}", e);
                }
            },
            Err(_) => {
                println!("Error");
            }
        }
    }
}