refactor(proto): centralize packet envelope handling
This commit is contained in:
5 files changed
+273
-120
No files matched your search
@@ -1,6 +1,8 @@
|
||||
use crate::{
|
||||
flags::{FLAG_CLOSE, FLAG_HMAC},
|
||||
hmac, write_header, Result, HMAC_SIZE,
|
||||
envelope::{self, FlagRule},
|
||||
flags::{FLAG_CLOSE, FLAG_OPEN, FLAG_REPLY},
|
||||
layout::PacketLayout,
|
||||
Result,
|
||||
};
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
@@ -9,27 +11,24 @@ pub struct CloseRequest {
|
||||
}
|
||||
|
||||
pub fn encode_close_request(request: &CloseRequest, hmac_key: Option<&[u8]>) -> Result<Vec<u8>> {
|
||||
let mut flags = FLAG_CLOSE;
|
||||
if hmac_key.is_some() {
|
||||
flags |= FLAG_HMAC;
|
||||
}
|
||||
|
||||
let mut out = Vec::new();
|
||||
write_header(&mut out, flags);
|
||||
if hmac_key.is_some() {
|
||||
out.extend_from_slice(&[0; HMAC_SIZE]);
|
||||
}
|
||||
let mut out = envelope::begin(
|
||||
FLAG_CLOSE,
|
||||
hmac_key,
|
||||
&[
|
||||
FlagRule::Require(FLAG_CLOSE),
|
||||
FlagRule::Reject(FLAG_OPEN),
|
||||
FlagRule::Reject(FLAG_REPLY),
|
||||
],
|
||||
PacketLayout::close_request(hmac_key.is_some()).header_len(),
|
||||
)?;
|
||||
out.extend_from_slice(&request.token.to_le_bytes());
|
||||
if let Some(key) = hmac_key {
|
||||
hmac::compute_hmac_in_place(key, &mut out, hmac::hmac_offset())?;
|
||||
}
|
||||
Ok(out)
|
||||
envelope::finish(out, hmac_key)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crate::{hmac, FLAG_HMAC};
|
||||
use crate::{hmac, FLAG_HMAC, HMAC_SIZE};
|
||||
|
||||
#[test]
|
||||
fn hmac_close_request_places_token_after_hmac() {
|
||||
|
||||
Reference in new issue
Block a user