MCPcopy
hub / github.com/WireGuard/wireguard-go / tryOneName

Method tryOneName

tun/netstack/tun.go:746–811  ·  view source on GitHub ↗
(ctx context.Context, name string, qtype dnsmessage.Type)

Source from the content-addressed store, hash-verified

744}
745
746func (tnet *Net) tryOneName(ctx context.Context, name string, qtype dnsmessage.Type) (dnsmessage.Parser, string, error) {
747 var lastErr error
748
749 n, err := dnsmessage.NewName(name)
750 if err != nil {
751 return dnsmessage.Parser{}, "", errCannotMarshalDNSMessage
752 }
753 q := dnsmessage.Question{
754 Name: n,
755 Type: qtype,
756 Class: dnsmessage.ClassINET,
757 }
758
759 for i := 0; i < 2; i++ {
760 for _, server := range tnet.dnsServers {
761 p, h, err := tnet.exchange(ctx, server, q, time.Second*5)
762 if err != nil {
763 dnsErr := &net.DNSError{
764 Err: err.Error(),
765 Name: name,
766 Server: server.String(),
767 }
768 if nerr, ok := err.(net.Error); ok && nerr.Timeout() {
769 dnsErr.IsTimeout = true
770 }
771 if _, ok := err.(*net.OpError); ok {
772 dnsErr.IsTemporary = true
773 }
774 lastErr = dnsErr
775 continue
776 }
777
778 if err := checkHeader(&p, h); err != nil {
779 dnsErr := &net.DNSError{
780 Err: err.Error(),
781 Name: name,
782 Server: server.String(),
783 }
784 if err == errServerTemporarilyMisbehaving {
785 dnsErr.IsTemporary = true
786 }
787 if err == errNoSuchHost {
788 dnsErr.IsNotFound = true
789 return p, server.String(), dnsErr
790 }
791 lastErr = dnsErr
792 continue
793 }
794
795 err = skipToAnswer(&p, qtype)
796 if err == nil {
797 return p, server.String(), nil
798 }
799 lastErr = &net.DNSError{
800 Err: err.Error(),
801 Name: name,
802 Server: server.String(),
803 }

Callers 1

LookupContextHostMethod · 0.95

Calls 5

exchangeMethod · 0.95
checkHeaderFunction · 0.85
skipToAnswerFunction · 0.85
ErrorMethod · 0.45
StringMethod · 0.45

Tested by

no test coverage detected