const DEFAULT_SOCKET_RECEIVE_TIMEOUT: u32 = 10_000;
#[cfg(feature = "ssl")]
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(Default, PartialEq, Debug, Clone, Copy)]
struct SslSockInfo {
pub cfg: u8,
pub data_offset: u16,
}
#[cfg_attr(feature = "defmt", derive(defmt::Format))]
#[derive(PartialEq, Debug, Clone, Copy)]
pub struct Socket {
pub v: u8, pub s: u16,
receive_timeout: u32,
#[cfg(feature = "ssl")]
ssl: SslSockInfo,
}
impl Socket {
pub fn new(v: u8, s: u16) -> Self {
Socket {
v,
s,
receive_timeout: DEFAULT_SOCKET_RECEIVE_TIMEOUT,
#[cfg(feature = "ssl")]
ssl: SslSockInfo::default(),
}
}
pub(crate) fn set_recv_timeout(&mut self, timeout: u32) {
self.receive_timeout = timeout;
}
pub(crate) fn get_recv_timeout(&self) -> u32 {
self.receive_timeout
}
#[cfg(feature = "ssl")]
pub(crate) fn set_ssl_cfg(&mut self, ssl_opt: u8, enable: bool) {
if enable {
self.ssl.cfg |= ssl_opt;
} else {
self.ssl.cfg &= !ssl_opt;
}
}
pub(crate) fn get_ssl_cfg(&self) -> u8 {
#[cfg(feature = "ssl")]
{
self.ssl.cfg
}
#[cfg(not(feature = "ssl"))]
{
0
}
}
#[cfg(feature = "ssl")]
pub(crate) fn set_ssl_data_offset(&mut self, offset: u16) {
self.ssl.data_offset = offset
}
#[cfg(feature = "ssl")]
pub(crate) fn get_ssl_data_offset(&self) -> u16 {
self.ssl.data_offset
}
}
impl From<(u8, u16)> for Socket {
fn from(val: (u8, u16)) -> Self {
Socket {
v: val.0,
s: val.1,
receive_timeout: DEFAULT_SOCKET_RECEIVE_TIMEOUT,
#[cfg(feature = "ssl")]
ssl: SslSockInfo::default(),
}
}
}
impl From<Socket> for (u8, u16) {
fn from(sock: Socket) -> Self {
(sock.v, sock.s)
}
}