package gwlb
import (
"context"
"inet.af/netstack/tcpip"
"inet.af/netstack/tcpip/adapters/gonet"
"inet.af/netstack/tcpip/network/ipv4"
"net"
"net/http"
)
func DialContext(ctx context.Context, network, addr string) (net.Conn, error) {
intendedAddr := ctx.Value(http.LocalAddrContextKey).(*net.TCPAddr)
sourceAddr, _ := AddrsFromContext(ctx)
netstack := NetstackFromContext(ctx)
remote := tcpip.FullAddress{Addr: tcpip.Address(intendedAddr.IP.To4()), Port: uint16(intendedAddr.Port)}
local := tcpip.FullAddress{Addr: tcpip.Address(sourceAddr.IP), Port: uint16(sourceAddr.Port)}
return gonet.DialTCPWithBind(ctx, netstack, local, remote, ipv4.ProtocolNumber)
}