Skip to content

Commit 893ba09

Browse files
committed
fix 1.12 dns
1 parent e4d38ba commit 893ba09

File tree

9 files changed

+51
-43
lines changed

9 files changed

+51
-43
lines changed

app/src/main/java/io/nekohasekai/sagernet/bg/proto/BoxInstance.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import io.nekohasekai.sagernet.plugin.PluginManager
2121
import kotlinx.coroutines.*
2222
import libcore.BoxInstance
2323
import libcore.Libcore
24+
import moe.matsuri.nb4a.net.LocalResolverImpl
2425
import java.io.File
2526

2627
abstract class BoxInstance(
@@ -48,7 +49,7 @@ abstract class BoxInstance(
4849
}
4950

5051
protected open suspend fun loadConfig() {
51-
box = Libcore.newSingBoxInstance(config.config)
52+
box = Libcore.newSingBoxInstance(config.config, LocalResolverImpl)
5253
}
5354

5455
open suspend fun init() {

app/src/main/java/io/nekohasekai/sagernet/bg/proto/ProxyInstance.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import io.nekohasekai.sagernet.database.ProxyEntity
77
import io.nekohasekai.sagernet.ktx.Logs
88
import io.nekohasekai.sagernet.ktx.runOnDefaultDispatcher
99
import kotlinx.coroutines.runBlocking
10-
import libcore.Libcore
11-
import moe.matsuri.nb4a.net.LocalResolverImpl
1210
import moe.matsuri.nb4a.utils.JavaUtil
1311

1412
class ProxyInstance(profile: ProxyEntity, var service: BaseService.Interface? = null) :
@@ -45,7 +43,6 @@ class ProxyInstance(profile: ProxyEntity, var service: BaseService.Interface? =
4543
}
4644

4745
override suspend fun loadConfig() {
48-
Libcore.registerLocalDNSTransport(LocalResolverImpl)
4946
super.loadConfig()
5047
}
5148

@@ -59,7 +56,6 @@ class ProxyInstance(profile: ProxyEntity, var service: BaseService.Interface? =
5956
}
6057

6158
override fun close() {
62-
Libcore.registerLocalDNSTransport(null)
6359
super.close()
6460
runBlocking {
6561
looper?.stop()

app/src/main/java/io/nekohasekai/sagernet/bg/proto/TestInstance.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import io.nekohasekai.sagernet.ktx.tryResume
1010
import io.nekohasekai.sagernet.ktx.tryResumeWithException
1111
import kotlinx.coroutines.delay
1212
import libcore.Libcore
13+
import moe.matsuri.nb4a.net.LocalResolverImpl
1314
import kotlin.coroutines.suspendCoroutine
1415

1516
class TestInstance(profile: ProxyEntity, val link: String, private val timeout: Int) :
@@ -46,7 +47,7 @@ class TestInstance(profile: ProxyEntity, val link: String, private val timeout:
4647
override suspend fun loadConfig() {
4748
// don't call destroyAllJsi here
4849
if (BuildConfig.DEBUG) Logs.d(config.config)
49-
box = Libcore.newSingBoxInstance(config.config)
50+
box = Libcore.newSingBoxInstance(config.config, LocalResolverImpl)
5051
}
5152

5253
}

libcore/box.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,12 +79,15 @@ type BoxInstance struct {
7979
pauseManager pause.Manager
8080
}
8181

82-
func NewSingBoxInstance(config string) (b *BoxInstance, err error) {
82+
func NewSingBoxInstance(config string, localTransport LocalDNSTransport) (b *BoxInstance, err error) {
8383
defer device.DeferPanicToError("NewSingBoxInstance", func(err_ error) { err = err_ })
8484

8585
// create box context
8686
ctx, cancel := context.WithCancel(context.Background())
87-
ctx = box.Context(ctx, nekoboxAndroidInboundRegistry(), nekoboxAndroidOutboundRegistry(), nekoboxAndroidEndpointRegistry(), nekoboxAndroidDNSTransportRegistry(), nekoboxAndroidServiceRegistry())
87+
ctx = box.Context(ctx,
88+
nekoboxAndroidInboundRegistry(), nekoboxAndroidOutboundRegistry(), nekoboxAndroidEndpointRegistry(),
89+
nekoboxAndroidDNSTransportRegistry(localTransport), nekoboxAndroidServiceRegistry(),
90+
)
8891
ctx = service.ContextWithDefaultRegistry(ctx)
8992
service.MustRegister[platform.Interface](ctx, boxPlatformInterfaceInstance)
9093

libcore/box_include.go

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
package libcore
22

33
import (
4+
"context"
5+
6+
"github.com/sagernet/sing-box/adapter"
47
"github.com/sagernet/sing-box/adapter/endpoint"
58
"github.com/sagernet/sing-box/adapter/inbound"
69
"github.com/sagernet/sing-box/adapter/outbound"
@@ -11,6 +14,8 @@ import (
1114
"github.com/sagernet/sing-box/dns/transport/hosts"
1215
"github.com/sagernet/sing-box/dns/transport/local"
1316
"github.com/sagernet/sing-box/dns/transport/quic"
17+
"github.com/sagernet/sing-box/log"
18+
"github.com/sagernet/sing-box/option"
1419
"github.com/sagernet/sing-box/protocol/anytls"
1520
"github.com/sagernet/sing-box/protocol/block"
1621
"github.com/sagernet/sing-box/protocol/direct"
@@ -35,7 +40,6 @@ import (
3540

3641
_ "github.com/sagernet/sing-box/experimental/clashapi"
3742
_ "github.com/sagernet/sing-box/transport/v2rayquic"
38-
_ "github.com/sagernet/sing-dns/quic"
3943
)
4044

4145
func nekoboxAndroidInboundRegistry() *inbound.Registry {
@@ -92,20 +96,31 @@ func nekoboxAndroidEndpointRegistry() *endpoint.Registry {
9296
return registry
9397
}
9498

95-
func nekoboxAndroidDNSTransportRegistry() *dns.TransportRegistry {
99+
func nekoboxAndroidDNSTransportRegistry(localTransport LocalDNSTransport) *dns.TransportRegistry {
96100
registry := dns.NewTransportRegistry()
97101

98102
transport.RegisterTCP(registry)
99103
transport.RegisterUDP(registry)
100104
transport.RegisterTLS(registry)
101105
transport.RegisterHTTPS(registry)
102106
hosts.RegisterTransport(registry)
103-
local.RegisterTransport(registry)
107+
// local.RegisterTransport(registry)
104108
fakeip.RegisterTransport(registry)
105109

106110
quic.RegisterTransport(registry)
107111
quic.RegisterHTTP3Transport(registry)
108112

113+
if localTransport == nil {
114+
local.RegisterTransport(registry)
115+
} else {
116+
dns.RegisterTransport(registry, "local", func(ctx context.Context, logger log.ContextLogger, tag string, options option.LocalDNSServerOptions) (adapter.DNSTransport, error) {
117+
return &platformLocalDNSTransport{
118+
iif: localTransport,
119+
tag: tag,
120+
}, nil
121+
})
122+
}
123+
109124
return registry
110125
}
111126

libcore/dns_box.go

Lines changed: 23 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,9 @@ import (
88
"strings"
99
"syscall"
1010

11-
dns "github.com/sagernet/sing-dns"
11+
"github.com/sagernet/sing-box/adapter"
12+
"github.com/sagernet/sing-box/constant"
13+
"github.com/sagernet/sing-box/dns"
1214
"github.com/sagernet/sing/common"
1315
E "github.com/sagernet/sing/common/exceptions"
1416
M "github.com/sagernet/sing/common/metadata"
@@ -23,29 +25,12 @@ type LocalDNSTransport interface {
2325
Exchange(ctx *ExchangeContext, message []byte) error
2426
}
2527

26-
func RegisterLocalDNSTransport(transport LocalDNSTransport) {
27-
if transport == nil {
28-
dns.RegisterTransport([]string{"local"}, dns.CreateTransport)
29-
} else {
30-
dns.RegisterTransport([]string{"local"}, func(options dns.TransportOptions) (dns.Transport, error) {
31-
return &platformLocalDNSTransport{
32-
iif: transport,
33-
}, nil
34-
})
35-
}
36-
}
37-
38-
var _ dns.Transport = (*platformLocalDNSTransport)(nil)
39-
4028
type platformLocalDNSTransport struct {
4129
iif LocalDNSTransport
30+
tag string
4231
}
4332

44-
func (p *platformLocalDNSTransport) Name() string {
45-
return "local"
46-
}
47-
48-
func (p *platformLocalDNSTransport) Start() error {
33+
func (p *platformLocalDNSTransport) Start(adapter.StartStage) error {
4934
return nil
5035
}
5136

@@ -82,12 +67,12 @@ func (p *platformLocalDNSTransport) Exchange(ctx context.Context, message *mDNS.
8267
})
8368
}
8469

85-
func (p *platformLocalDNSTransport) Lookup(ctx context.Context, domain string, strategy dns.DomainStrategy) ([]netip.Addr, error) {
70+
func (p *platformLocalDNSTransport) Lookup(ctx context.Context, domain string, strategy constant.DomainStrategy) ([]netip.Addr, error) {
8671
var network string
8772
switch strategy {
88-
case dns.DomainStrategyUseIPv4:
73+
case constant.DomainStrategyIPv4Only:
8974
network = "ip4"
90-
case dns.DomainStrategyPreferIPv6:
75+
case constant.DomainStrategyPreferIPv6:
9176
network = "ip6"
9277
default:
9378
network = "ip"
@@ -105,11 +90,11 @@ func (p *platformLocalDNSTransport) Lookup(ctx context.Context, domain string, s
10590
return response.error
10691
}
10792
switch strategy {
108-
case dns.DomainStrategyUseIPv4:
93+
case constant.DomainStrategyIPv4Only:
10994
responseAddr = common.Filter(response.addresses, func(it netip.Addr) bool {
11095
return it.Is4()
11196
})
112-
case dns.DomainStrategyPreferIPv6:
97+
case constant.DomainStrategyPreferIPv6:
11398
responseAddr = common.Filter(response.addresses, func(it netip.Addr) bool {
11499
return it.Is6()
115100
})
@@ -123,6 +108,18 @@ func (p *platformLocalDNSTransport) Lookup(ctx context.Context, domain string, s
123108
})
124109
}
125110

111+
func (p *platformLocalDNSTransport) Tag() string {
112+
return p.tag
113+
}
114+
115+
func (p *platformLocalDNSTransport) Type() string {
116+
return "local"
117+
}
118+
119+
func (p *platformLocalDNSTransport) Dependencies() []string {
120+
return nil
121+
}
122+
126123
type Func interface {
127124
Invoke() error
128125
}
@@ -157,7 +154,7 @@ func (c *ExchangeContext) RawSuccess(result []byte) {
157154
}
158155

159156
func (c *ExchangeContext) ErrorCode(code int32) {
160-
c.error = dns.RCodeError(code)
157+
c.error = dns.RcodeError(code)
161158
}
162159

163160
func (c *ExchangeContext) ErrnoCode(code int32) {

libcore/go.mod

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ require (
1010
github.com/oschwald/maxminddb-golang v1.13.1
1111
github.com/sagernet/sing v0.7.6-0.20250825114712-2aeec120ce28
1212
github.com/sagernet/sing-box v1.0.0 // replaced
13-
github.com/sagernet/sing-dns v0.4.1
1413
github.com/sagernet/sing-tun v0.7.0-beta.1
1514
github.com/ulikunitz/xz v0.5.11
1615
golang.org/x/mobile v0.0.0-20231108233038-35478a0c49da
@@ -90,5 +89,3 @@ replace github.com/sagernet/sing-box => ../../sing-box
9089
// replace github.com/sagernet/sing-quic => ../../sing-quic
9190

9291
// replace github.com/sagernet/sing => ../../sing
93-
94-
// replace github.com/sagernet/sing-dns => ../../sing-dns

libcore/go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ github.com/sagernet/quic-go v0.52.0-beta.1/go.mod h1:OV+V5kEBb8kJS7k29MzDu6oj9Gy
9191
github.com/sagernet/sing v0.6.9/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
9292
github.com/sagernet/sing v0.7.6-0.20250825114712-2aeec120ce28 h1:C8Lnqd0Q+C15kwaMiDsfq5S45rhhaQMBG91TT+6oFVo=
9393
github.com/sagernet/sing v0.7.6-0.20250825114712-2aeec120ce28/go.mod h1:ARkL0gM13/Iv5VCZmci/NuoOlePoIsW0m7BWfln/Hak=
94-
github.com/sagernet/sing-dns v0.4.1 h1:nozS7iqpxZ7aV73oHbkD/8haOvf3XXDCgT//8NdYirk=
95-
github.com/sagernet/sing-dns v0.4.1/go.mod h1:dweQs54ng2YGzoJfz+F9dGuDNdP5pJ3PLeggnK5VWc8=
9694
github.com/sagernet/sing-mux v0.3.3 h1:YFgt9plMWzH994BMZLmyKL37PdIVaIilwP0Jg+EcLfw=
9795
github.com/sagernet/sing-mux v0.3.3/go.mod h1:pht8iFY4c9Xltj7rhVd208npkNaeCxzyXCgulDPLUDA=
9896
github.com/sagernet/sing-quic v0.5.0 h1:jNLIyVk24lFPvu8A4x+ZNEnZdI+Tg1rp7eCJ6v0Csak=

nb4a.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
PACKAGE_NAME=moe.nb4a
22
VERSION_NAME=1.3.9
3-
PRE_VERSION_NAME=pre-1.4.0-20250902-1
3+
PRE_VERSION_NAME=pre-1.4.0-20250902-2
44
VERSION_CODE=43

0 commit comments

Comments
 (0)