| Index: net/dns/dns_response.h
 | 
| ===================================================================
 | 
| --- net/dns/dns_response.h	(revision 113383)
 | 
| +++ net/dns/dns_response.h	(working copy)
 | 
| @@ -6,109 +6,43 @@
 | 
|  #define NET_DNS_DNS_RESPONSE_H_
 | 
|  #pragma once
 | 
|  
 | 
| -#include <string>
 | 
| -
 | 
| -#include "base/basictypes.h"
 | 
|  #include "base/memory/ref_counted.h"
 | 
| -#include "base/string_piece.h"
 | 
|  #include "net/base/net_export.h"
 | 
|  #include "net/base/net_util.h"
 | 
|  
 | 
| -namespace net {
 | 
| +namespace net{
 | 
|  
 | 
|  class DnsQuery;
 | 
|  class IOBufferWithSize;
 | 
|  
 | 
| -namespace dns_protocol {
 | 
| -struct Header;
 | 
| -}
 | 
| -
 | 
| -// Parsed resource record.
 | 
| -struct NET_EXPORT_PRIVATE DnsResourceRecord {
 | 
| -  std::string name;  // in dotted form
 | 
| -  uint16 type;
 | 
| -  uint16 klass;
 | 
| -  uint32 ttl;
 | 
| -  base::StringPiece rdata;  // points to the original response buffer
 | 
| -};
 | 
| -
 | 
| -// Iterator to walk over resource records of the DNS response packet.
 | 
| -class NET_EXPORT_PRIVATE DnsRecordParser {
 | 
| - public:
 | 
| -  // Construct an uninitialized iterator.
 | 
| -  DnsRecordParser();
 | 
| -
 | 
| -  // Construct an iterator to process the |packet| of given |length|.
 | 
| -  // |offset| points to the beginning of the answer section.
 | 
| -  DnsRecordParser(const void* packet, size_t length, size_t offset);
 | 
| -
 | 
| -  // Returns |true| if initialized.
 | 
| -  bool IsValid() const { return packet_ != NULL; }
 | 
| -
 | 
| -  // Returns |true| if no more bytes remain in the packet.
 | 
| -  bool AtEnd() const { return cur_ == packet_ + length_; }
 | 
| -
 | 
| -  // Parses a (possibly compressed) DNS name from the packet starting at
 | 
| -  // |pos|. Stores output (even partial) in |out| unless |out| is NULL. |out|
 | 
| -  // is stored in the dotted form, e.g., "example.com". Returns number of bytes
 | 
| -  // consumed or 0 on failure.
 | 
| -  // This is exposed to allow parsing compressed names within RRDATA for TYPEs
 | 
| -  // such as NS, CNAME, PTR, MX, SOA.
 | 
| -  // See RFC 1035 section 4.1.4.
 | 
| -  int ParseName(const void* pos, std::string* out) const;
 | 
| -
 | 
| -  // Parses the next resource record. Returns true if succeeded.
 | 
| -  bool ParseRecord(DnsResourceRecord* record);
 | 
| -
 | 
| - private:
 | 
| -  const char* packet_;
 | 
| -  size_t length_;
 | 
| -  // Current offset within the packet.
 | 
| -  const char* cur_;
 | 
| -};
 | 
| -
 | 
| -// Buffer-holder for the DNS response allowing easy access to the header fields
 | 
| -// and resource records. After reading into |io_buffer| must call InitParse to
 | 
| -// position the RR parser.
 | 
| +// Represents on-the-wire DNS response as an object; allows extracting
 | 
| +// records.
 | 
|  class NET_EXPORT_PRIVATE DnsResponse {
 | 
|   public:
 | 
|    // Constructs an object with an IOBuffer large enough to read
 | 
|    // one byte more than largest possible response, to detect malformed
 | 
| -  // responses.
 | 
| -  DnsResponse();
 | 
| -  // Constructs response from |data|. Used for testing purposes only!
 | 
| -  DnsResponse(const void* data, size_t length, size_t answer_offset);
 | 
| +  // responses; |query| is a pointer to the DnsQuery for which |this|
 | 
| +  // is supposed to be a response.
 | 
| +  explicit DnsResponse(DnsQuery* query);
 | 
|    ~DnsResponse();
 | 
|  
 | 
|    // Internal buffer accessor into which actual bytes of response will be
 | 
|    // read.
 | 
|    IOBufferWithSize* io_buffer() { return io_buffer_.get(); }
 | 
|  
 | 
| -  // Returns false if the packet is shorter than the header or does not match
 | 
| -  // |query| id or question.
 | 
| -  bool InitParse(int nbytes, const DnsQuery& query);
 | 
| +  // Parses response of size nbytes and puts address into |ip_addresses|,
 | 
| +  // returns net_error code in case of failure.
 | 
| +  int Parse(int nbytes, IPAddressList* ip_addresses);
 | 
|  
 | 
| -  // Accessors for the header.
 | 
| -  uint8 flags0() const;  // first byte of flags
 | 
| -  uint8 flags1() const;  // second byte of flags excluding rcode
 | 
| -  uint8 rcode() const;
 | 
| -  int answer_count() const;
 | 
| -
 | 
| -  // Returns an iterator to the resource records in the answer section. Must be
 | 
| -  // called after InitParse. The iterator is valid only in the scope of the
 | 
| -  // DnsResponse.
 | 
| -  DnsRecordParser Parser() const;
 | 
| -
 | 
|   private:
 | 
| -  // Convenience for header access.
 | 
| -  const dns_protocol::Header* header() const;
 | 
| +  // The matching query; |this| is the response for |query_|.  We do not
 | 
| +  // own it, lifetime of |this| should be within the limits of lifetime of
 | 
| +  // |query_|.
 | 
| +  const DnsQuery* const query_;
 | 
|  
 | 
|    // Buffer into which response bytes are read.
 | 
|    scoped_refptr<IOBufferWithSize> io_buffer_;
 | 
|  
 | 
| -  // Iterator constructed after InitParse positioned at the answer section.
 | 
| -  DnsRecordParser parser_;
 | 
| -
 | 
|    DISALLOW_COPY_AND_ASSIGN(DnsResponse);
 | 
|  };
 | 
|  
 | 
| 
 |