use async_trait::async_trait;
use binrw::BinRead;
use serde::Serialize;
use std::sync::Arc;
use tokio::sync::RwLock;
use crate::client::prelude::*;
const MODULUS_LEN: usize = 128;
#[derive(Packet, BinRead, Serialize, FieldsMetadata)]
#[br(little)]
pub struct Incoming {
#[br(parse_with = binrw::helpers::until_eof)]
pub addons: Vec<AddonEntry>,
}
pub struct Handler;
#[async_trait]
impl PacketHandler for Handler {
async fn handle(
&mut self,
packet: &mut Packet,
_: Arc<RwLock<CtxMap>>,
) -> anyhow::Result<Vec<HandlerOutput>> {
let _ = Incoming::unpack(packet)?;
Ok(vec![])
}
}
#[derive(BinRead, Serialize, FieldsMetadata, Debug)]
#[br(little)]
pub struct AddonEntry {
pub entry_type: u8,
pub flags_or_fingerprint: u8,
#[br(if(flags_or_fingerprint != 0))]
pub has_modulus: Option<u8>,
#[br(if(has_modulus == Some(1)), count = MODULUS_LEN)]
pub modulus: Option<Vec<u8>>,
#[br(if(flags_or_fingerprint != 0))]
pub unknown: Option<u32>,
pub url_flag: u8,
}