@@ -367,7 +367,7 @@ func (t *transport) httpClientFor(p ipn.Proxy) (c3, c *http.Client) {
367
367
// Independent of the query's success or failure, this function also returns the
368
368
// address of the server on a best-effort basis, or nil if the address could not
369
369
// be determined.
370
- func (t * transport ) doDoh (pid string , q * dns.Msg ) (response * dns.Msg , blocklists , region string , elapsed time.Duration , qerr * dnsx.QueryError ) {
370
+ func (t * transport ) doDoh (pid string , q * dns.Msg ) (response * dns.Msg , blocklists , region string , ech bool , elapsed time.Duration , qerr * dnsx.QueryError ) {
371
371
start := time .Now ()
372
372
padQuery (q )
373
373
@@ -383,7 +383,7 @@ func (t *transport) doDoh(pid string, q *dns.Msg) (response *dns.Msg, blocklists
383
383
return
384
384
}
385
385
386
- response , blocklists , region , elapsed , qerr = t .send (pid , req )
386
+ response , blocklists , region , ech , elapsed , qerr = t .send (pid , req )
387
387
388
388
// restore dns query id
389
389
q .Id = id
@@ -420,7 +420,8 @@ func (t *transport) fetch(pid string, req *http.Request) (*http.Response, error)
420
420
421
421
r , err := t .multifetch (req , c3 , c )
422
422
if err != nil {
423
- log .W ("doh: fetch: %s, err: %v" , ustr , err )
423
+ log .W ("doh: fetch: %s, mayech? %t, err: %v" ,
424
+ ustr , t .echconfig != nil , err )
424
425
return r , uerr (err )
425
426
}
426
427
return r , nil
@@ -500,13 +501,12 @@ func (t *transport) prepare(pid string) (c3, c *http.Client, err error) {
500
501
return
501
502
}
502
503
503
- func (t * transport ) do (pid string , req * http.Request ) (ans []byte , blocklists , region string , elapsed time.Duration , qerr * dnsx.QueryError ) {
504
+ func (t * transport ) do (pid string , req * http.Request ) (ans []byte , blocklists , region string , withech bool , elapsed time.Duration , qerr * dnsx.QueryError ) {
504
505
var server net.Addr
505
506
var conn net.Conn
506
507
start := time .Now ()
507
508
// either t.hostname or t.odohtargetname or t.odohproxy
508
509
hostname := req .URL .Hostname ()
509
- withech := false
510
510
511
511
// Error cleanup function. If the query fails, this function will close the
512
512
// underlying socket and disconfirm the server IP. Empirically, sockets often
@@ -608,10 +608,10 @@ func (t *transport) do(pid string, req *http.Request) (ans []byte, blocklists, r
608
608
return
609
609
}
610
610
611
- func (t * transport ) send (pid string , req * http.Request ) (msg * dns.Msg , blocklists , region string , elapsed time.Duration , qerr * dnsx.QueryError ) {
611
+ func (t * transport ) send (pid string , req * http.Request ) (msg * dns.Msg , blocklists , region string , ech bool , elapsed time.Duration , qerr * dnsx.QueryError ) {
612
612
var ans []byte
613
613
var err error
614
- ans , blocklists , region , elapsed , qerr = t .do (pid , req )
614
+ ans , blocklists , region , ech , elapsed , qerr = t .do (pid , req )
615
615
if qerr != nil {
616
616
return
617
617
}
@@ -671,19 +671,23 @@ func (t *transport) Type() string {
671
671
672
672
func (t * transport ) Query (network string , q * dns.Msg , smm * x.DNSSummary ) (r * dns.Msg , err error ) {
673
673
var blocklists , region string
674
+ var ech bool
674
675
var elapsed time.Duration
675
676
var qerr * dnsx.QueryError
676
677
677
678
_ , pid := xdns .Net2ProxyID (network )
678
679
if t .typ == dnsx .DOH {
679
- r , blocklists , region , elapsed , qerr = t .doDoh (pid , q )
680
- smm .Server = t .GetAddr ()
680
+ r , blocklists , region , ech , elapsed , qerr = t .doDoh (pid , q )
681
681
} else {
682
- r , elapsed , qerr = t .doOdoh (pid , q )
683
- smm .Server = t .GetAddr ()
682
+ r , ech , elapsed , qerr = t .doOdoh (pid , q )
684
683
smm .RelayServer = t .odohproxyname
685
684
}
686
685
686
+ smm .Server = t .GetAddr ()
687
+ if ech {
688
+ smm .Server = dnsx .EchPrefix + smm .Server
689
+ }
690
+
687
691
status := dnsx .Complete
688
692
689
693
if qerr != nil {
@@ -726,9 +730,7 @@ func (t *transport) GetAddr() string {
726
730
addr = t .odohtargetname
727
731
}
728
732
729
- if t .echconfig != nil {
730
- addr = dnsx .EchPrefix + addr
731
- } else if t .skipTLSVerify {
733
+ if t .skipTLSVerify {
732
734
addr = dnsx .NoPkiPrefix + addr
733
735
}
734
736
// doh transports could be "dnsx.Bootstrap"
0 commit comments