feat: added more robust handling of actions

This commit is contained in:
Andrew Rioux 2023-09-21 13:39:02 -04:00
parent ed13defb07
commit 867464f673
Signed by: andrew.rioux
GPG Key ID: 9B8BAC47C17ABB94

View File

@ -1,6 +1,6 @@
use std::{
collections::VecDeque,
net::{Ipv4Addr, SocketAddr},
net::{Ipv4Addr, SocketAddr}, time::Duration,
};
use anyhow::anyhow;
@ -8,7 +8,7 @@ use anyhow::anyhow;
use log::{debug, info, trace};
use nl_sys::{netlink, route};
use packets::{self, EthernetPacket, IPv4Pkt, TCPPacket, TCPPkt};
use packets::{self, EthernetPacket, IPv4Pkt, TCPPacket, TCPPacketBuilder, TCPPkt};
use pcap_sys;
struct PeerInfo {
@ -30,6 +30,7 @@ struct TcpSocket {
local_rx_last_ack: Option<u32>,
state: TcpState,
peer_info: Option<PeerInfo>,
ack_timeout: Option<Duration>
}
#[derive(Default)]
@ -64,7 +65,7 @@ fn connect(
remote_addr: Ipv4Addr,
remote_port: u16,
local_addr: Ipv4Addr,
) -> anyhow::Result<TCPPacket> {
) -> TCPPacket {
socket.state = TcpState::SynSent;
let local_port: u16 = loop {
let port = rand::random();
@ -79,10 +80,22 @@ fn connect(
local_port,
});
Ok(())
socket.local_seq_no = rand::random();
TCPPacketBuilder::default()
.srcport(local_port)
.dstport(remote_port)
.
.syn(true)
.window(64240)
.seqnumber(socket.local_seq_no)
.build(local_addr, remote_addr, vec![], None)
}
fn process_packet(socket: &mut TcpSocket, packet: TCPPkt<'_>) -> anyhow::Result<Option<TCPPacket>> {
fn process_packet(
socket: &mut TcpSocket,
packet: TCPPkt<'_>,
) -> anyhow::Result<Option<(TCPPacketBuilder, Vec<u8>)>> {
match socket.state {
TcpState::SynSent if packet.ack() && packet.syn() => {}
_ => {}