aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2018-09-24 23:53:15 +0700
committerShulhan <ms@kilabit.info>2018-09-25 08:28:09 +0700
commitd4e18e3891215309c722e3855575fd9599fe1402 (patch)
tree60752a403a7b3c7fa79a01658e3ce302c7887742
parent9fd47e59d2e4bf74b5b1aea525a3b64c301e2aa7 (diff)
downloadpakakeh.go-d4e18e3891215309c722e3855575fd9599fe1402.tar.xz
lib/dns: add method Query and change RemoteAddr return type to string
-rw-r--r--lib/dns/client.go3
-rw-r--r--lib/dns/tcpclient.go27
-rw-r--r--lib/dns/udpclient.go27
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
}
//