(c net.Conn, id uint16, query dnsmessage.Question, b []byte)
| 620 | } |
| 621 | |
| 622 | func dnsStreamRoundTrip(c net.Conn, id uint16, query dnsmessage.Question, b []byte) (dnsmessage.Parser, dnsmessage.Header, error) { |
| 623 | if _, err := c.Write(b); err != nil { |
| 624 | return dnsmessage.Parser{}, dnsmessage.Header{}, err |
| 625 | } |
| 626 | b = make([]byte, 1280) |
| 627 | if _, err := io.ReadFull(c, b[:2]); err != nil { |
| 628 | return dnsmessage.Parser{}, dnsmessage.Header{}, err |
| 629 | } |
| 630 | l := int(b[0])<<8 | int(b[1]) |
| 631 | if l > len(b) { |
| 632 | b = make([]byte, l) |
| 633 | } |
| 634 | n, err := io.ReadFull(c, b[:l]) |
| 635 | if err != nil { |
| 636 | return dnsmessage.Parser{}, dnsmessage.Header{}, err |
| 637 | } |
| 638 | var p dnsmessage.Parser |
| 639 | h, err := p.Start(b[:n]) |
| 640 | if err != nil { |
| 641 | return dnsmessage.Parser{}, dnsmessage.Header{}, errCannotUnmarshalDNSMessage |
| 642 | } |
| 643 | q, err := p.Question() |
| 644 | if err != nil { |
| 645 | return dnsmessage.Parser{}, dnsmessage.Header{}, errCannotUnmarshalDNSMessage |
| 646 | } |
| 647 | if !checkResponse(id, query, h, q) { |
| 648 | return dnsmessage.Parser{}, dnsmessage.Header{}, errInvalidDNSResponse |
| 649 | } |
| 650 | return p, h, nil |
| 651 | } |
| 652 | |
| 653 | func (tnet *Net) exchange(ctx context.Context, server netip.Addr, q dnsmessage.Question, timeout time.Duration) (dnsmessage.Parser, dnsmessage.Header, error) { |
| 654 | q.Class = dnsmessage.ClassINET |
no test coverage detected