mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-08-18 16:17:36 +08:00
47 lines
1.1 KiB
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))
|
|
})
|
|
}
|