hans-3.0.2: src/Hans/Nat.hs
module Hans.Nat where
import Hans.Addr (toAddr)
import qualified Hans.Nat.State as Nat
import Hans.Network (Network)
import Hans.Tcp.Packet (TcpPort)
import Hans.Types
import Hans.Udp.Packet (UdpPort)
-- | Add a TCP port-forwarding rule.
forwardTcpPort :: Network addr
=> NetworkStack
-> addr -- ^ Local address (can be wildcard)
-> TcpPort -- ^ Local port
-> addr -- ^ Remote address
-> TcpPort -- ^ Remote port
-> IO ()
forwardTcpPort ns src srcPort dest destPort =
Nat.addTcpPortForward ns
Nat.PortForward { pfSourceAddr = toAddr src
, pfSourcePort = srcPort
, pfDestAddr = toAddr dest
, pfDestPort = destPort }
-- | Remove a TCP port-forwarding rule.
removeTcpPortForward :: Network addr
=> NetworkStack
-> addr -- ^ Local address (can be wildcard)
-> TcpPort -- ^ Local port
-> IO ()
removeTcpPortForward ns src port = Nat.removeTcpPortForward ns (toAddr src) port
-- | Add a UDP port-forwarding rule.
forwardUdpPort :: Network addr
=> NetworkStack
-> addr -- ^ Local address (can be wildcard)
-> UdpPort -- ^ Local port
-> addr -- ^ Remote address
-> UdpPort -- ^ Remote port
-> IO ()
forwardUdpPort ns src srcPort dest destPort =
Nat.addUdpPortForward ns
Nat.PortForward { pfSourceAddr = toAddr src
, pfSourcePort = srcPort
, pfDestAddr = toAddr dest
, pfDestPort = destPort }
-- | Remove a UDP port-forwarding rule.
removeUdpPortForward :: Network addr
=> NetworkStack
-> addr -- ^ Local address (can be wildcard)
-> UdpPort -- ^ Local port
-> IO ()
removeUdpPortForward ns src port = Nat.removeUdpPortForward ns (toAddr src) port