Ivy quic mim

include order
include quic_infer
include file
include quic_shim
include quic_locale
include random_value

parameter mim_addr : ip.addr = 0x0a000002
parameter mim_port_in : ip.port  = 4440 # One socket for receving 4440
parameter mim_port_out : ip.port = 4439 # One socket for sending

parameter is_mim : bool = false
parameter is_mim_standalone : bool = false
parameter forward_packets : bool = true
parameter keep_coalesed : bool = true
parameter forward_packets_victim : bool = false
parameter modify_packets : bool = false
parameter replay_packets : bool = false


parameter save_packet : bool = false
parameter saved_packet_type : quic_packet_type = quic_packet_type.initial

var forged_packet_send : bool
instance mim_agent : quic_endpoint.mim_ep(mim_addr,mim_port_in,mim_port_out)

instance mim_server_target : quic_endpoint.server_ep(server_addr,server_port)
instance mim_client_target : quic_endpoint.client_ep(0,0)
instance fake_client : quic_endpoint.client_ep(0,0)
TODO update packet src port/dst port for invisible on network and host

An ip endpoint for the client to migrate to. TODO

a socket for the server

var sock_mim_server : net.socket
var sock_mim_client : net.socket
Open a server socket to listen on and create an instance of TLS. TODO: we should have one instance of TLS per connection

after init {
    forged_packet_send := false;
}
udp && (udp.srcport == 4443 || udp.dstport == 4443 || udp.srcport == 4440 || udp.dstport == 4440 )