@@ -9,14 +9,15 @@ import (
9
9
"strconv"
10
10
"sync"
11
11
"time"
12
+ _ "unsafe"
12
13
13
14
"github.com/metacubex/mihomo/adapter"
14
15
"github.com/metacubex/mihomo/adapter/inbound"
15
16
"github.com/metacubex/mihomo/adapter/outboundgroup"
16
17
"github.com/metacubex/mihomo/component/auth"
17
18
"github.com/metacubex/mihomo/component/ca"
18
19
"github.com/metacubex/mihomo/component/dialer"
19
- G "github.com/metacubex/mihomo/component/geodata"
20
+ "github.com/metacubex/mihomo/component/geodata"
20
21
mihomoHttp "github.com/metacubex/mihomo/component/http"
21
22
"github.com/metacubex/mihomo/component/iface"
22
23
"github.com/metacubex/mihomo/component/keepalive"
@@ -101,7 +102,7 @@ func ApplyConfig(cfg *config.Config, force bool) {
101
102
updateRules (cfg .Rules , cfg .SubRules , cfg .RuleProviders )
102
103
updateSniffer (cfg .Sniffer )
103
104
updateHosts (cfg .Hosts )
104
- updateGeneral (cfg .General )
105
+ updateGeneral (cfg .General , true )
105
106
updateNTP (cfg .NTP )
106
107
updateDNS (cfg .DNS , cfg .General .IPv6 )
107
108
updateListeners (cfg .General , cfg .Listeners , force )
@@ -161,16 +162,16 @@ func GetGeneral() *config.General {
161
162
Interface : dialer .DefaultInterface .Load (),
162
163
RoutingMark : int (dialer .DefaultRoutingMark .Load ()),
163
164
GeoXUrl : config.GeoXUrl {
164
- GeoIp : G .GeoIpUrl (),
165
- Mmdb : G .MmdbUrl (),
166
- ASN : G .ASNUrl (),
167
- GeoSite : G .GeoSiteUrl (),
165
+ GeoIp : geodata .GeoIpUrl (),
166
+ Mmdb : geodata .MmdbUrl (),
167
+ ASN : geodata .ASNUrl (),
168
+ GeoSite : geodata .GeoSiteUrl (),
168
169
},
169
170
GeoAutoUpdate : updater .GeoAutoUpdate (),
170
171
GeoUpdateInterval : updater .GeoUpdateInterval (),
171
- GeodataMode : G .GeodataMode (),
172
- GeodataLoader : G .LoaderName (),
173
- GeositeMatcher : G .SiteMatcherName (),
172
+ GeodataMode : geodata .GeodataMode (),
173
+ GeodataLoader : geodata .LoaderName (),
174
+ GeositeMatcher : geodata .SiteMatcherName (),
174
175
TCPConcurrent : dialer .GetTcpConcurrent (),
175
176
FindProcessMode : tunnel .FindProcessMode (),
176
177
Sniffing : tunnel .IsSniffing (),
@@ -408,13 +409,22 @@ func updateUpdater(cfg *config.Config) {
408
409
updater .DefaultUiUpdater .AutoDownloadUI ()
409
410
}
410
411
411
- func updateGeneral (general * config.General ) {
412
+ //go:linkname temporaryUpdateGeneral github.com/metacubex/mihomo/config.temporaryUpdateGeneral
413
+ func temporaryUpdateGeneral (general * config.General ) func () {
414
+ oldGeneral := GetGeneral ()
415
+ updateGeneral (general , false )
416
+ return func () {
417
+ updateGeneral (oldGeneral , false )
418
+ }
419
+ }
420
+
421
+ func updateGeneral (general * config.General , logging bool ) {
412
422
tunnel .SetMode (general .Mode )
413
423
tunnel .SetFindProcessMode (general .FindProcessMode )
414
424
resolver .DisableIPv6 = ! general .IPv6
415
425
416
- if general .TCPConcurrent {
417
- dialer . SetTcpConcurrent ( general .TCPConcurrent )
426
+ dialer . SetTcpConcurrent ( general .TCPConcurrent )
427
+ if logging && general .TCPConcurrent {
418
428
log .Infoln ("Use tcp concurrent" )
419
429
}
420
430
@@ -429,13 +439,23 @@ func updateGeneral(general *config.General) {
429
439
430
440
dialer .DefaultInterface .Store (general .Interface )
431
441
dialer .DefaultRoutingMark .Store (int32 (general .RoutingMark ))
432
- if general .RoutingMark > 0 {
442
+ if logging && general .RoutingMark > 0 {
433
443
log .Infoln ("Use routing mark: %#x" , general .RoutingMark )
434
444
}
435
445
436
446
iface .FlushCache ()
437
- G .SetLoader (general .GeodataLoader )
438
- G .SetSiteMatcher (general .GeositeMatcher )
447
+
448
+ geodata .SetGeodataMode (general .GeodataMode )
449
+ geodata .SetLoader (general .GeodataLoader )
450
+ geodata .SetSiteMatcher (general .GeositeMatcher )
451
+ geodata .SetGeoIpUrl (general .GeoXUrl .GeoIp )
452
+ geodata .SetGeoSiteUrl (general .GeoXUrl .GeoSite )
453
+ geodata .SetMmdbUrl (general .GeoXUrl .Mmdb )
454
+ geodata .SetASNUrl (general .GeoXUrl .ASN )
455
+ mihomoHttp .SetUA (general .GlobalUA )
456
+ resource .SetETag (general .ETagSupport )
457
+
458
+ tlsC .SetGlobalUtlsClient (general .GlobalClientFingerprint )
439
459
}
440
460
441
461
func updateUsers (users []auth.AuthUser ) {
0 commit comments