Add dns client

This commit is contained in:
世界
2022-07-06 23:11:48 +08:00
parent 651c4b539a
commit 8a761d7e3b
23 changed files with 582 additions and 145 deletions

View File

@@ -4,9 +4,7 @@ import (
"context"
"crypto/tls"
"encoding/binary"
"net/netip"
"os"
"sync"
"github.com/sagernet/sing/common"
"github.com/sagernet/sing/common/buf"
@@ -15,52 +13,30 @@ import (
N "github.com/sagernet/sing/common/network"
"github.com/sagernet/sing/common/task"
C "github.com/sagernet/sing-box/constant"
"github.com/sagernet/sing-box/adapter"
"github.com/sagernet/sing-box/log"
"golang.org/x/net/dns/dnsmessage"
)
var _ Transport = (*TLSTransport)(nil)
var _ adapter.DNSTransport = (*TLSTransport)(nil)
type TLSTransport struct {
ctx context.Context
dialer N.Dialer
logger log.Logger
destination M.Socksaddr
done chan struct{}
access sync.RWMutex
connection *dnsConnection
myTransportAdapter
}
func NewTLSTransport(ctx context.Context, dialer N.Dialer, logger log.Logger, destination M.Socksaddr) *TLSTransport {
return &TLSTransport{
ctx: ctx,
dialer: dialer,
logger: logger,
destination: destination,
done: make(chan struct{}),
myTransportAdapter{
ctx: ctx,
dialer: dialer,
logger: logger,
destination: destination,
done: make(chan struct{}),
},
}
}
func (t *TLSTransport) Start() error {
return nil
}
func (t *TLSTransport) Close() error {
select {
case <-t.done:
return os.ErrClosed
default:
}
close(t.done)
return nil
}
func (t *TLSTransport) Raw() bool {
return true
}
func (t *TLSTransport) offer(ctx context.Context) (*dnsConnection, error) {
t.access.RLock()
connection := t.connection
@@ -207,7 +183,3 @@ func (t *TLSTransport) Exchange(ctx context.Context, message *dnsmessage.Message
return nil, ctx.Err()
}
}
func (t *TLSTransport) Lookup(ctx context.Context, domain string, strategy C.DomainStrategy) ([]netip.Addr, error) {
return nil, os.ErrInvalid
}