e5afd54ce0
* Basic storage stub * New models for new node status api * Route handling * Mounting new routes * Missing selective commit * Moved network monitor related files to separate package * Starting to see some sqlx action * Schema updates * Log statement upon finished migration * Removed old diesel related imports * Converted mixnode cache initialisation into a fairing * Moved cache related functionalities to separate package Also defined staging there * Created run method for validator cache + removed unwrap * Removed old node-status-api types and left bunch of todo placeholders in their place * Fixed managing validatorcache * Status reports are starting to get constructed * Submitting some dummy results to the database * Removing duplicate code for generating reports * Removed statuses older than 48h * Initial attempt at trying to obtain reports for all active nodes * Removed duplicates from the full report * Grabbing uptime history * Updating historical uptimes of active nodes * Updated sqlx-data.json * Removed all placeholder foomp owner values * Changed Layer serde behaviour for easier usage * Extended validator api config * Initial (seems working !) integration with network monitor * Added database path configuration to config * Using ValidatorCache in NetworkMonitor * Flag indicating whether validator cache has been initialised * Introduced a locla-only route for reward script to perform daily chores * Flag to save config to a file * Moved spawning of receiving future to run method rather than new * Removed arguments that dont make sense to be configured via CLI * Removed dead code from config file * More dead code removal * Added validator API to CI * Corrected manifest-path arguments * Constructing network monitor by passing config * Combined validator API CI with the main CI file * Using query_as for NodeStatus * Checking if historical uptimes were already calculated on particular day * Making id field NOT NULL * More query_as! action * Updated sqlx-data.json * Removed unused chrono feature * Renamed the migration file * Changed default validator endpoint to point to local validator * Removing unnecessary clone * More appropriate naming * Removed dead code * Lock file updates * Updated network monitor address in contract code * Don't stage node status api if network monitor is disabled * cargo fmt * Updated all license notices to SPDX
84 lines
2.7 KiB
Rust
84 lines
2.7 KiB
Rust
// Copyright 2021 - Nym Technologies SA <contact@nymtech.net>
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
|
|
use crate::FRAG_ID_LEN;
|
|
use nymsphinx_types::header::HEADER_SIZE;
|
|
use nymsphinx_types::PAYLOAD_OVERHEAD_SIZE;
|
|
use std::convert::TryFrom;
|
|
|
|
// it's up to the smart people to figure those values out : )
|
|
const REGULAR_PACKET_SIZE: usize = HEADER_SIZE + PAYLOAD_OVERHEAD_SIZE + 2 * 1024;
|
|
// TODO: even though we have 16B IV, is having just 5B (FRAG_ID_LEN) of the ID possibly insecure?
|
|
|
|
// TODO: I'm not entirely sure if we can easily extract `<AckEncryptionAlgorithm as NewStreamCipher>::NonceSize`
|
|
// into a const usize before relevant stuff is stabilised in rust...
|
|
const ACK_IV_SIZE: usize = 16;
|
|
|
|
const ACK_PACKET_SIZE: usize = HEADER_SIZE + PAYLOAD_OVERHEAD_SIZE + ACK_IV_SIZE + FRAG_ID_LEN;
|
|
const EXTENDED_PACKET_SIZE: usize = HEADER_SIZE + PAYLOAD_OVERHEAD_SIZE + 32 * 1024;
|
|
|
|
#[derive(Debug)]
|
|
pub struct InvalidPacketSize;
|
|
|
|
#[repr(u8)]
|
|
#[derive(Clone, Copy, Debug, PartialEq)]
|
|
pub enum PacketSize {
|
|
// for example instant messaging use case
|
|
RegularPacket = 1,
|
|
|
|
// for sending SURB-ACKs
|
|
AckPacket = 2,
|
|
|
|
// for example for streaming fast and furious in uncompressed 10bit 4K HDR quality
|
|
ExtendedPacket = 3,
|
|
}
|
|
|
|
impl TryFrom<u8> for PacketSize {
|
|
type Error = InvalidPacketSize;
|
|
|
|
fn try_from(value: u8) -> std::result::Result<Self, Self::Error> {
|
|
match value {
|
|
_ if value == (PacketSize::RegularPacket as u8) => Ok(Self::RegularPacket),
|
|
_ if value == (PacketSize::AckPacket as u8) => Ok(Self::AckPacket),
|
|
_ if value == (PacketSize::ExtendedPacket as u8) => Ok(Self::ExtendedPacket),
|
|
_ => Err(InvalidPacketSize),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl PacketSize {
|
|
pub fn size(self) -> usize {
|
|
match self {
|
|
PacketSize::RegularPacket => REGULAR_PACKET_SIZE,
|
|
PacketSize::AckPacket => ACK_PACKET_SIZE,
|
|
PacketSize::ExtendedPacket => EXTENDED_PACKET_SIZE,
|
|
}
|
|
}
|
|
|
|
pub fn plaintext_size(self) -> usize {
|
|
self.size() - HEADER_SIZE - PAYLOAD_OVERHEAD_SIZE
|
|
}
|
|
|
|
pub fn payload_size(self) -> usize {
|
|
self.size() - HEADER_SIZE
|
|
}
|
|
|
|
pub fn get_type(size: usize) -> std::result::Result<Self, InvalidPacketSize> {
|
|
if PacketSize::RegularPacket.size() == size {
|
|
Ok(PacketSize::RegularPacket)
|
|
} else if PacketSize::AckPacket.size() == size {
|
|
Ok(PacketSize::AckPacket)
|
|
} else if PacketSize::ExtendedPacket.size() == size {
|
|
Ok(PacketSize::ExtendedPacket)
|
|
} else {
|
|
Err(InvalidPacketSize)
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Default for PacketSize {
|
|
fn default() -> Self {
|
|
PacketSize::RegularPacket
|
|
}
|
|
}
|