glider/dnstun.go

41 lines
665 B
Go
Raw Normal View History

// https://tools.ietf.org/html/rfc1035
2017-07-13 21:55:41 +08:00
package main
// DNSTun .
2017-08-16 22:37:42 +08:00
type DNSTun struct {
*Forwarder // as client
sDialer Dialer // dialer for server
2017-07-13 21:55:41 +08:00
raddr string
udp *DNS
tcp *TCPTun
2017-07-13 21:55:41 +08:00
}
2017-08-16 22:37:42 +08:00
// NewDNSTun returns a dns forwarder.
func NewDNSTun(addr, raddr string, sDialer Dialer) (*DNSTun, error) {
2017-08-16 22:37:42 +08:00
s := &DNSTun{
Forwarder: NewForwarder(addr, nil),
sDialer: sDialer,
2017-07-13 21:55:41 +08:00
raddr: raddr,
}
s.udp, _ = NewDNS(addr, raddr, sDialer)
s.tcp, _ = NewTCPTun(addr, raddr, sDialer)
2017-07-13 21:55:41 +08:00
return s, nil
}
// ListenAndServe .
2017-08-16 22:37:42 +08:00
func (s *DNSTun) ListenAndServe() {
if s.udp != nil {
go s.udp.ListenAndServe()
2017-07-13 21:55:41 +08:00
}
if s.tcp != nil {
s.tcp.ListenAndServe()
}
}