diff options
| author | Shulhan <ms@kilabit.info> | 2018-09-24 23:53:15 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2018-09-25 08:28:09 +0700 |
| commit | d4e18e3891215309c722e3855575fd9599fe1402 (patch) | |
| tree | 60752a403a7b3c7fa79a01658e3ce302c7887742 | |
| parent | 9fd47e59d2e4bf74b5b1aea525a3b64c301e2aa7 (diff) | |
| download | pakakeh.go-d4e18e3891215309c722e3855575fd9599fe1402.tar.xz | |
lib/dns: add method Query and change RemoteAddr return type to string
| -rw-r--r-- | lib/dns/client.go | 3 | ||||
| -rw-r--r-- | lib/dns/tcpclient.go | 27 | ||||
| -rw-r--r-- | lib/dns/udpclient.go | 27 |
3 files changed, 41 insertions, 16 deletions
diff --git a/lib/dns/client.go b/lib/dns/client.go index 3f0b4b32..f5328380 100644 --- a/lib/dns/client.go +++ b/lib/dns/client.go @@ -13,7 +13,8 @@ import ( // type Client interface { Close() error - RemoteAddr() net.Addr + RemoteAddr() string + Query(req *Message, ns net.Addr) (*Message, error) Sender Receiver } diff --git a/lib/dns/tcpclient.go b/lib/dns/tcpclient.go index 34cb188b..23d77c69 100644 --- a/lib/dns/tcpclient.go +++ b/lib/dns/tcpclient.go @@ -47,8 +47,8 @@ func NewTCPClient(nameserver string) (*TCPClient, error) { // // RemoteAddr return client remote nameserver address. // -func (cl *TCPClient) RemoteAddr() net.Addr { - return cl.addr +func (cl *TCPClient) RemoteAddr() string { + return cl.addr.String() } // @@ -95,24 +95,37 @@ func (cl *TCPClient) Lookup(qtype uint16, qclass uint16, qname []byte) ( _, _ = msg.Pack() - _, err := cl.Send(msg, nil) + res, err := cl.Query(msg, nil) if err != nil { return nil, err } - resMsg := NewMessage() + return res, nil +} + +// +// Query send DNS query to name server. +// The addr parameter is unused. +// +func (cl *TCPClient) Query(msg *Message, ns net.Addr) (*Message, error) { + _, err := cl.Send(msg, ns) + if err != nil { + return nil, err + } + + res := NewMessage() - _, err = cl.Recv(resMsg) + _, err = cl.Recv(res) if err != nil { return nil, err } - err = resMsg.Unpack() + err = res.Unpack() if err != nil { return nil, err } - return resMsg, nil + return res, nil } // diff --git a/lib/dns/udpclient.go b/lib/dns/udpclient.go index d9cbea9f..4b67dd10 100644 --- a/lib/dns/udpclient.go +++ b/lib/dns/udpclient.go @@ -51,8 +51,8 @@ func NewUDPClient(nameserver string) (cl *UDPClient, err error) { // // RemoteAddr return client remote nameserver address. // -func (cl *UDPClient) RemoteAddr() net.Addr { - return cl.Addr +func (cl *UDPClient) RemoteAddr() string { + return cl.Addr.String() } // @@ -88,25 +88,36 @@ func (cl *UDPClient) Lookup(qtype uint16, qclass uint16, qname []byte) ( _, _ = msg.Pack() - _, err := cl.Send(msg, cl.Addr) + res, err := cl.Query(msg, cl.Addr) if err != nil { return nil, err } - resMsg := NewMessage() - resMsg.Reset() + return res, nil +} + +// +// Query send DNS query to name server "ns" and return the unpacked response. +// +func (cl *UDPClient) Query(msg *Message, ns net.Addr) (*Message, error) { + _, err := cl.Send(msg, ns) + if err != nil { + return nil, err + } + + res := NewMessage() - _, err = cl.Recv(resMsg) + _, err = cl.Recv(res) if err != nil { return nil, err } - err = resMsg.Unpack() + err = res.Unpack() if err != nil { return nil, err } - return resMsg, nil + return res, nil } // |
