mirror of
https://github.com/miekg/dns.git
synced 2025-10-11 01:41:00 +02:00
Previously, the oob data was just stored and sent to WriteMsgUDP but it ignores the Src field when writing. Instead, now it is setting the Src to the original Dst and handling IPv4 IPs over IPv6 correctly.
31 lines
847 B
Go
31 lines
847 B
Go
// +build windows
|
|
|
|
package dns
|
|
|
|
import "net"
|
|
|
|
// SessionUDP holds the remote address
|
|
type SessionUDP struct {
|
|
raddr *net.UDPAddr
|
|
}
|
|
|
|
// RemoteAddr returns the remote network address.
|
|
func (s *SessionUDP) RemoteAddr() net.Addr { return s.raddr }
|
|
|
|
// ReadFromSessionUDP acts just like net.UDPConn.ReadFrom(), but returns a session object instead of a
|
|
// net.UDPAddr.
|
|
func ReadFromSessionUDP(conn *net.UDPConn, b []byte) (int, *SessionUDP, error) {
|
|
n, raddr, err := conn.ReadFrom(b)
|
|
if err != nil {
|
|
return n, nil, err
|
|
}
|
|
session := &SessionUDP{raddr.(*net.UDPAddr)}
|
|
return n, session, err
|
|
}
|
|
|
|
// WriteToSessionUDP acts just like net.UDPConn.WriteTo(), but uses a *SessionUDP instead of a net.Addr.
|
|
func WriteToSessionUDP(conn *net.UDPConn, b []byte, session *SessionUDP) (int, error) {
|
|
n, err := conn.WriteTo(b, session.raddr)
|
|
return n, err
|
|
}
|