@@ -58,6 +58,10 @@ const (
5858 IpMapper = x .IpMapper
5959 NoDNS = ""
6060
61+ // DNS request origin indicators
62+ OriginInternal = x .OriginInternal
63+ OriginTunnel = x .OriginTunnel
64+
6165 invalidQname = "invalid.query"
6266
6367 // preferred network to use with t.Query
@@ -463,22 +467,25 @@ func (r *resolver) IsDnsAddr(ipport netip.AddrPort) bool {
463467 return r .isDns (ipport )
464468}
465469
470+ // Lookup implements ResolverSelf.
466471func (r * resolver ) Lookup (q []byte , tids ... string ) ([]byte , string , error ) {
467472 if len (q ) <= 0 {
468473 return nil , NoDNS , errNoQuestion
469474 }
470475 // if len(tids) == 0, use transport from preferences
471- return r .forward (q , protect .UidSelf , tids ... )
476+ return r .forward (q , OriginInternal , protect .UidSelf , tids ... )
472477}
473478
479+ // LookupForSelf implements ResolverSelf.
474480func (r * resolver ) LookupFor (q []byte , uid string ) ([]byte , string , error ) {
475481 if len (q ) <= 0 {
476482 return nil , NoDNS , errNoQuestion
477483 }
478484
479- return r .forward (q , uid )
485+ return r .forward (q , OriginInternal , uid )
480486}
481487
488+ // LocalLookup implements ResovlerSelf.
482489func (r * resolver ) LocalLookup (q []byte ) ([]byte , string , error ) {
483490 if r .closed .Load () {
484491 return nil , NoDNS , errResolverClosed
@@ -496,13 +503,13 @@ func (r *resolver) LocalLookup(q []byte) ([]byte, string, error) {
496503 // msg may be nil
497504 if msg := xdns .AsMsg (ans ); err != nil || xdns .IsNXDomain (msg ) || ! xdns .HasRcodeSuccess (msg ) {
498505 log .I ("dns: nxdomain via Default (err? %v); attempting Goos for %s" , err , xdns .QName (msg ))
499- ans , tid , err = r .forward (q , protect .UidSelf , Goos ) // Goos is System; see: determineTransport
506+ ans , tid , err = r .forward (q , OriginInternal , protect .UidSelf , Goos ) // Goos is System; see: determineTransport
500507 } // else: rcode success and nil err; do not fallback on Goos/System
501508
502509 return ans , tid , err
503510}
504511
505- func (r * resolver ) forward (q []byte , uid string , chosenids ... string ) (res0 []byte , tid0 string , err0 error ) {
512+ func (r * resolver ) forward (q []byte , who , uid string , chosenids ... string ) (res0 []byte , tid0 string , err0 error ) {
506513 starttime := time .Now ()
507514 ogsmm := & x.DNSSummary {
508515 ID : NoDNS ,
@@ -538,7 +545,7 @@ func (r *resolver) forward(q []byte, uid string, chosenids ...string) (res0 []by
538545 }
539546
540547 pref , oqcompleted := core .Grx ("r.onQuery" , func (_ context.Context ) (* x.DNSOpts , error ) {
541- return r .listener .OnQuery (x .StrOf (uid ), x .StrOf (qname ), qtyp ), nil
548+ return r .listener .OnQuery (x .StrOf (who ), x . StrOf ( uid ), x .StrOf (qname ), qtyp ), nil
542549 }, listenerTimeout )
543550 if ! oqcompleted || pref == nil {
544551 log .W ("dns: fwd: for %s; no preferences (%t) for %s:%d" , uid , pref == nil , qname , qtyp )
@@ -806,7 +813,7 @@ func (r *resolver) determineTransport(id string) Transport {
806813
807814// dnstcp queries the transport and writes answers to w, prefixed by length.
808815func (r * resolver ) dnstcp (q []byte , w io.WriteCloser , uid string ) error {
809- ans , _ , err := r .forward (q , uid )
816+ ans , _ , err := r .forward (q , OriginTunnel , uid )
810817
811818 rlen := len (ans )
812819 if rlen <= 0 && err != nil {
@@ -826,7 +833,7 @@ func (r *resolver) dnstcp(q []byte, w io.WriteCloser, uid string) error {
826833
827834// dnsudp queries the transport and writes answers to w.
828835func (r * resolver ) dnsudp (q []byte , w io.WriteCloser , uid string ) error {
829- ans , _ , err := r .forward (q , uid )
836+ ans , _ , err := r .forward (q , OriginTunnel , uid )
830837
831838 rlen := len (ans )
832839 if rlen <= 0 && err != nil {
0 commit comments