Skip to content

Commit adccb00

Browse files
committed
Fix tcptls and udp bug; Improve code
1 parent 4dc8303 commit adccb00

File tree

4 files changed

+34
-54
lines changed

4 files changed

+34
-54
lines changed

core/outbound/clients/resolver/base_resolver.go

+22-15
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,26 @@ type BaseResolver struct {
2525
dnsUpstream *common.DNSUpstream
2626
}
2727

28-
func (r *BaseResolver) Exchange(*dns.Msg) (*dns.Msg, error) {
29-
return nil, nil
30-
}
31-
32-
func (r *BaseResolver) ExchangeByBaseConn(q *dns.Msg) (*dns.Msg, error) {
28+
func (r *BaseResolver) Exchange(q *dns.Msg) (*dns.Msg, error) {
3329
conn, err := r.CreateBaseConn()
30+
defer conn.Close()
3431
if err != nil {
3532
return nil, err
3633
}
34+
return r.exchangeByConnWithoutClose(q, conn)
35+
}
36+
37+
func (r *BaseResolver) exchangeByConnWithoutClose(q *dns.Msg, conn net.Conn) (msg *dns.Msg, err error) {
38+
if conn == nil {
39+
log.Fatal("Conn not initialized for exchangeByDNSClient")
40+
return nil, err
41+
}
42+
3743
r.setTimeout(conn)
3844
dc := &dns.Conn{Conn: conn, UDPSize: 65535}
39-
defer dc.Close()
4045
err = dc.WriteMsg(q)
4146
if err != nil {
47+
log.Warnf("%s Fail: Send question message failed", r.dnsUpstream.Name)
4248
return nil, err
4349
}
4450
return dc.ReadMsg()
@@ -147,17 +153,18 @@ func (r *BaseResolver) createConnectionPool(connCreate func() (interface{}, erro
147153
return pool.NewChannelPool(poolConfig)
148154
}
149155

150-
func (r *BaseResolver) exchangeByDNSClient(q *dns.Msg, conn net.Conn) (msg *dns.Msg, err error) {
151-
if conn == nil {
152-
log.Fatal("Conn not initialized for exchangeByDNSClient")
156+
func (r *BaseResolver) exchangeByPool(q *dns.Msg, poolConn pool.Pool) (msg *dns.Msg, err error) {
157+
_conn, err := poolConn.Get()
158+
if err != nil {
153159
return nil, err
154160
}
155-
156-
dc := &dns.Conn{Conn: conn, UDPSize: 65535}
157-
err = dc.WriteMsg(q)
161+
conn := _conn.(net.Conn)
162+
ret, err := r.exchangeByConnWithoutClose(q, conn)
158163
if err != nil {
159-
log.Warnf("%s Fail: Send question message failed", r.dnsUpstream.Name)
160-
return nil, err
164+
poolConn.Close(conn)
165+
} else {
166+
r.setIdleTimeout(conn)
167+
poolConn.Put(conn)
161168
}
162-
return dc.ReadMsg()
169+
return ret, err
163170
}

core/outbound/clients/resolver/tcp_resolver.go

+3-16
Original file line numberDiff line numberDiff line change
@@ -14,24 +14,11 @@ type TCPResolver struct {
1414
}
1515

1616
func (r *TCPResolver) Exchange(q *dns.Msg) (*dns.Msg, error) {
17-
if !r.dnsUpstream.TCPPoolConfig.Enable {
18-
return r.ExchangeByBaseConn(q)
19-
}
20-
21-
_conn, err := r.poolConn.Get()
22-
if err != nil {
23-
return nil, err
24-
}
25-
conn := _conn.(net.Conn)
26-
r.setTimeout(conn)
27-
ret, err := r.exchangeByDNSClient(q, conn)
28-
if err != nil {
29-
r.poolConn.Close(conn)
17+
if r.dnsUpstream.TCPPoolConfig.Enable {
18+
return r.BaseResolver.exchangeByPool(q, r.poolConn)
3019
} else {
31-
r.setIdleTimeout(conn)
32-
r.poolConn.Put(conn)
20+
return r.BaseResolver.Exchange(q)
3321
}
34-
return ret, err
3522
}
3623

3724
func (r *TCPResolver) Init() error {

core/outbound/clients/resolver/tcptls_resolver.go

+8-15
Original file line numberDiff line numberDiff line change
@@ -15,23 +15,16 @@ type TCPTLSResolver struct {
1515
}
1616

1717
func (r *TCPTLSResolver) Exchange(q *dns.Msg) (*dns.Msg, error) {
18-
if !r.dnsUpstream.TCPPoolConfig.Enable {
19-
return r.ExchangeByBaseConn(q)
20-
}
21-
_conn, err := r.poolConn.Get()
22-
if err != nil {
23-
return nil, err
24-
}
25-
conn := _conn.(net.Conn)
26-
r.setTimeout(conn)
27-
ret, err := r.exchangeByDNSClient(q, conn)
28-
if err != nil {
29-
r.poolConn.Close(conn)
18+
if r.dnsUpstream.TCPPoolConfig.Enable {
19+
return r.BaseResolver.exchangeByPool(q, r.poolConn)
3020
} else {
31-
r.setIdleTimeout(conn)
32-
r.poolConn.Put(conn)
21+
conn, err := r.createTlsConn()
22+
if err != nil {
23+
return nil, err
24+
}
25+
defer conn.Close()
26+
return r.exchangeByConnWithoutClose(q, conn)
3327
}
34-
return ret, err
3528
}
3629

3730
func (r *TCPTLSResolver) createTlsConn() (conn net.Conn, err error) {

core/outbound/clients/resolver/udp_resolver.go

+1-8
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,7 @@ type UDPResolver struct {
99
}
1010

1111
func (r *UDPResolver) Exchange(q *dns.Msg) (*dns.Msg, error) {
12-
conn, err := r.CreateBaseConn()
13-
if err != nil {
14-
return nil, err
15-
}
16-
defer conn.Close()
17-
r.setTimeout(conn)
18-
ret, err := r.exchangeByDNSClient(q, conn)
19-
return ret, err
12+
return r.BaseResolver.Exchange(q)
2013
}
2114

2215
func (r *UDPResolver) Init() error {

0 commit comments

Comments
 (0)