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
use proto::frame::headers::Headers;
use proto::frame::data::Data;

use rustls::ServerSession;
use std::io::Write;
use hpack_codec::Encoder;

#[derive(Debug)]
pub struct Message {
    pub status: u32,
    pub data: Vec<u8>
}

impl Message {

    pub fn send(&self, session: &mut ServerSession, encoder: &mut Encoder, stream_id: &mut u32) {
        if *stream_id == 0 {
            *stream_id += 1;
        }
        println!("[SENDING] Status: {} Stream: {}", self.status, stream_id);
        if self.status == 200 || self.status == 404 {
            let mut headers = Headers::new(*stream_id);
            headers.end_headers();
            session.write_all(&headers.encode(encoder)).unwrap();
            let mut d = Data::new(*stream_id, self.data.clone());
            session.write_all(&d.as_bytes()).unwrap();
        }
    } 

    pub fn from(data: Vec<u8>) -> Message {
        Message { status: 200, data: data }
    }

    pub fn not_found() -> Message {
        Message { status: 404, data: String::from("<h1>PAGE NOT FOUND</h1>").as_bytes().to_vec() }
    }

}