xref: /webrtc/dtls/src/application_data.rs (revision ffe74184)
1*ffe74184SMartin Algesten use std::io::{Read, Write};
2*ffe74184SMartin Algesten 
3*ffe74184SMartin Algesten use super::content::*;
4*ffe74184SMartin Algesten use crate::error::Result;
5*ffe74184SMartin Algesten 
6*ffe74184SMartin Algesten // Application data messages are carried by the record layer and are
7*ffe74184SMartin Algesten // fragmented, compressed, and encrypted based on the current connection
8*ffe74184SMartin Algesten // state.  The messages are treated as transparent data to the record
9*ffe74184SMartin Algesten // layer.
10*ffe74184SMartin Algesten // https://tools.ietf.org/html/rfc5246#section-10
11*ffe74184SMartin Algesten #[derive(Clone, PartialEq, Eq, Debug)]
12*ffe74184SMartin Algesten pub struct ApplicationData {
13*ffe74184SMartin Algesten     pub data: Vec<u8>,
14*ffe74184SMartin Algesten }
15*ffe74184SMartin Algesten 
16*ffe74184SMartin Algesten impl ApplicationData {
content_type(&self) -> ContentType17*ffe74184SMartin Algesten     pub fn content_type(&self) -> ContentType {
18*ffe74184SMartin Algesten         ContentType::ApplicationData
19*ffe74184SMartin Algesten     }
20*ffe74184SMartin Algesten 
size(&self) -> usize21*ffe74184SMartin Algesten     pub fn size(&self) -> usize {
22*ffe74184SMartin Algesten         self.data.len()
23*ffe74184SMartin Algesten     }
24*ffe74184SMartin Algesten 
marshal<W: Write>(&self, writer: &mut W) -> Result<()>25*ffe74184SMartin Algesten     pub fn marshal<W: Write>(&self, writer: &mut W) -> Result<()> {
26*ffe74184SMartin Algesten         writer.write_all(&self.data)?;
27*ffe74184SMartin Algesten 
28*ffe74184SMartin Algesten         Ok(writer.flush()?)
29*ffe74184SMartin Algesten     }
30*ffe74184SMartin Algesten 
unmarshal<R: Read>(reader: &mut R) -> Result<Self>31*ffe74184SMartin Algesten     pub fn unmarshal<R: Read>(reader: &mut R) -> Result<Self> {
32*ffe74184SMartin Algesten         let mut data: Vec<u8> = vec![];
33*ffe74184SMartin Algesten         reader.read_to_end(&mut data)?;
34*ffe74184SMartin Algesten 
35*ffe74184SMartin Algesten         Ok(ApplicationData { data })
36*ffe74184SMartin Algesten     }
37*ffe74184SMartin Algesten }
38