sing-box/dns/transport/local/local_resolv.go

47 lines
1.1 KiB
Go

//go:build darwin
package local
import (
"context"
"github.com/sagernet/sing-box/adapter"
C "github.com/sagernet/sing-box/constant"
"github.com/sagernet/sing-box/dns"
"github.com/sagernet/sing-box/log"
"github.com/sagernet/sing/common/logger"
mDNS "github.com/miekg/dns"
)
var _ adapter.DNSTransport = (*ResolvTransport)(nil)
type ResolvTransport struct {
dns.TransportAdapter
ctx context.Context
logger logger.ContextLogger
}
func NewResolvTransport(ctx context.Context, logger log.ContextLogger, tag string) (adapter.DNSTransport, error) {
return &ResolvTransport{
TransportAdapter: dns.NewTransportAdapter(C.DNSTypeLocal, tag, nil),
ctx: ctx,
logger: logger,
}, nil
}
func (t *ResolvTransport) Start(stage adapter.StartStage) error {
return nil
}
func (t *ResolvTransport) Close() error {
return nil
}
func (t *ResolvTransport) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, error) {
question := message.Question[0]
return doBlockingWithCtx(ctx, func() (*mDNS.Msg, error) {
return cgoResSearch(question.Name, int(question.Qtype), int(question.Qclass))
})
}