OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "net/dns/dns_transaction.h" | 5 #include "net/dns/dns_transaction.h" |
6 | 6 |
7 #include <deque> | 7 #include <deque> |
8 #include <memory> | 8 #include <memory> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
90 virtual int Start(const CompletionCallback& callback) = 0; | 90 virtual int Start(const CompletionCallback& callback) = 0; |
91 | 91 |
92 // Returns the query of this attempt. | 92 // Returns the query of this attempt. |
93 virtual const DnsQuery* GetQuery() const = 0; | 93 virtual const DnsQuery* GetQuery() const = 0; |
94 | 94 |
95 // Returns the response or NULL if has not received a matching response from | 95 // Returns the response or NULL if has not received a matching response from |
96 // the server. | 96 // the server. |
97 virtual const DnsResponse* GetResponse() const = 0; | 97 virtual const DnsResponse* GetResponse() const = 0; |
98 | 98 |
99 // Returns the net log bound to the source of the socket. | 99 // Returns the net log bound to the source of the socket. |
100 virtual const BoundNetLog& GetSocketNetLog() const = 0; | 100 virtual const NetLogWithSource& GetSocketNetLog() const = 0; |
101 | 101 |
102 // Returns the index of the destination server within DnsConfig::nameservers. | 102 // Returns the index of the destination server within DnsConfig::nameservers. |
103 unsigned server_index() const { return server_index_; } | 103 unsigned server_index() const { return server_index_; } |
104 | 104 |
105 // Returns a Value representing the received response, along with a reference | 105 // Returns a Value representing the received response, along with a reference |
106 // to the NetLog source source of the UDP socket used. The request must have | 106 // to the NetLog source source of the UDP socket used. The request must have |
107 // completed before this is called. | 107 // completed before this is called. |
108 std::unique_ptr<base::Value> NetLogResponseCallback( | 108 std::unique_ptr<base::Value> NetLogResponseCallback( |
109 NetLogCaptureMode capture_mode) const { | 109 NetLogCaptureMode capture_mode) const { |
110 DCHECK(GetResponse()->IsValid()); | 110 DCHECK(GetResponse()->IsValid()); |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
158 return DoLoop(OK); | 158 return DoLoop(OK); |
159 } | 159 } |
160 | 160 |
161 const DnsQuery* GetQuery() const override { return query_.get(); } | 161 const DnsQuery* GetQuery() const override { return query_.get(); } |
162 | 162 |
163 const DnsResponse* GetResponse() const override { | 163 const DnsResponse* GetResponse() const override { |
164 const DnsResponse* resp = response_.get(); | 164 const DnsResponse* resp = response_.get(); |
165 return (resp != NULL && resp->IsValid()) ? resp : NULL; | 165 return (resp != NULL && resp->IsValid()) ? resp : NULL; |
166 } | 166 } |
167 | 167 |
168 const BoundNetLog& GetSocketNetLog() const override { | 168 const NetLogWithSource& GetSocketNetLog() const override { |
169 return socket_lease_->socket()->NetLog(); | 169 return socket_lease_->socket()->NetLog(); |
170 } | 170 } |
171 | 171 |
172 private: | 172 private: |
173 enum State { | 173 enum State { |
174 STATE_SEND_QUERY, | 174 STATE_SEND_QUERY, |
175 STATE_SEND_QUERY_COMPLETE, | 175 STATE_SEND_QUERY_COMPLETE, |
176 STATE_READ_RESPONSE, | 176 STATE_READ_RESPONSE, |
177 STATE_READ_RESPONSE_COMPLETE, | 177 STATE_READ_RESPONSE_COMPLETE, |
178 STATE_NONE, | 178 STATE_NONE, |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
327 return DoLoop(rv); | 327 return DoLoop(rv); |
328 } | 328 } |
329 | 329 |
330 const DnsQuery* GetQuery() const override { return query_.get(); } | 330 const DnsQuery* GetQuery() const override { return query_.get(); } |
331 | 331 |
332 const DnsResponse* GetResponse() const override { | 332 const DnsResponse* GetResponse() const override { |
333 const DnsResponse* resp = response_.get(); | 333 const DnsResponse* resp = response_.get(); |
334 return (resp != NULL && resp->IsValid()) ? resp : NULL; | 334 return (resp != NULL && resp->IsValid()) ? resp : NULL; |
335 } | 335 } |
336 | 336 |
337 const BoundNetLog& GetSocketNetLog() const override { | 337 const NetLogWithSource& GetSocketNetLog() const override { |
338 return socket_->NetLog(); | 338 return socket_->NetLog(); |
339 } | 339 } |
340 | 340 |
341 private: | 341 private: |
342 enum State { | 342 enum State { |
343 STATE_CONNECT_COMPLETE, | 343 STATE_CONNECT_COMPLETE, |
344 STATE_SEND_LENGTH, | 344 STATE_SEND_LENGTH, |
345 STATE_SEND_QUERY, | 345 STATE_SEND_QUERY, |
346 STATE_READ_LENGTH, | 346 STATE_READ_LENGTH, |
347 STATE_READ_LENGTH_COMPLETE, | 347 STATE_READ_LENGTH_COMPLETE, |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
556 // DnsSession::NextFirstServerIndex, and the order is round-robin afterwards. | 556 // DnsSession::NextFirstServerIndex, and the order is round-robin afterwards. |
557 // Each server is attempted DnsConfig::attempts times. | 557 // Each server is attempted DnsConfig::attempts times. |
558 class DnsTransactionImpl : public DnsTransaction, | 558 class DnsTransactionImpl : public DnsTransaction, |
559 public base::NonThreadSafe, | 559 public base::NonThreadSafe, |
560 public base::SupportsWeakPtr<DnsTransactionImpl> { | 560 public base::SupportsWeakPtr<DnsTransactionImpl> { |
561 public: | 561 public: |
562 DnsTransactionImpl(DnsSession* session, | 562 DnsTransactionImpl(DnsSession* session, |
563 const std::string& hostname, | 563 const std::string& hostname, |
564 uint16_t qtype, | 564 uint16_t qtype, |
565 const DnsTransactionFactory::CallbackType& callback, | 565 const DnsTransactionFactory::CallbackType& callback, |
566 const BoundNetLog& net_log) | 566 const NetLogWithSource& net_log) |
567 : session_(session), | 567 : session_(session), |
568 hostname_(hostname), | 568 hostname_(hostname), |
569 qtype_(qtype), | 569 qtype_(qtype), |
570 callback_(callback), | 570 callback_(callback), |
571 net_log_(net_log), | 571 net_log_(net_log), |
572 qnames_initial_size_(0), | 572 qnames_initial_size_(0), |
573 attempts_count_(0), | 573 attempts_count_(0), |
574 had_tcp_attempt_(false), | 574 had_tcp_attempt_(false), |
575 first_server_index_(0) { | 575 first_server_index_(0) { |
576 DCHECK(session_.get()); | 576 DCHECK(session_.get()); |
(...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
943 if (result.rv != ERR_IO_PENDING) | 943 if (result.rv != ERR_IO_PENDING) |
944 DoCallback(result); | 944 DoCallback(result); |
945 } | 945 } |
946 | 946 |
947 scoped_refptr<DnsSession> session_; | 947 scoped_refptr<DnsSession> session_; |
948 std::string hostname_; | 948 std::string hostname_; |
949 uint16_t qtype_; | 949 uint16_t qtype_; |
950 // Cleared in DoCallback. | 950 // Cleared in DoCallback. |
951 DnsTransactionFactory::CallbackType callback_; | 951 DnsTransactionFactory::CallbackType callback_; |
952 | 952 |
953 BoundNetLog net_log_; | 953 NetLogWithSource net_log_; |
954 | 954 |
955 // Search list of fully-qualified DNS names to query next (in DNS format). | 955 // Search list of fully-qualified DNS names to query next (in DNS format). |
956 std::deque<std::string> qnames_; | 956 std::deque<std::string> qnames_; |
957 size_t qnames_initial_size_; | 957 size_t qnames_initial_size_; |
958 | 958 |
959 // List of attempts for the current name. | 959 // List of attempts for the current name. |
960 std::vector<std::unique_ptr<DnsAttempt>> attempts_; | 960 std::vector<std::unique_ptr<DnsAttempt>> attempts_; |
961 // Count of attempts, not reset when |attempts_| vector is cleared. | 961 // Count of attempts, not reset when |attempts_| vector is cleared. |
962 int attempts_count_; | 962 int attempts_count_; |
963 bool had_tcp_attempt_; | 963 bool had_tcp_attempt_; |
(...skipping 13 matching lines...) Expand all Loading... |
977 class DnsTransactionFactoryImpl : public DnsTransactionFactory { | 977 class DnsTransactionFactoryImpl : public DnsTransactionFactory { |
978 public: | 978 public: |
979 explicit DnsTransactionFactoryImpl(DnsSession* session) { | 979 explicit DnsTransactionFactoryImpl(DnsSession* session) { |
980 session_ = session; | 980 session_ = session; |
981 } | 981 } |
982 | 982 |
983 std::unique_ptr<DnsTransaction> CreateTransaction( | 983 std::unique_ptr<DnsTransaction> CreateTransaction( |
984 const std::string& hostname, | 984 const std::string& hostname, |
985 uint16_t qtype, | 985 uint16_t qtype, |
986 const CallbackType& callback, | 986 const CallbackType& callback, |
987 const BoundNetLog& net_log) override { | 987 const NetLogWithSource& net_log) override { |
988 return std::unique_ptr<DnsTransaction>(new DnsTransactionImpl( | 988 return std::unique_ptr<DnsTransaction>(new DnsTransactionImpl( |
989 session_.get(), hostname, qtype, callback, net_log)); | 989 session_.get(), hostname, qtype, callback, net_log)); |
990 } | 990 } |
991 | 991 |
992 private: | 992 private: |
993 scoped_refptr<DnsSession> session_; | 993 scoped_refptr<DnsSession> session_; |
994 }; | 994 }; |
995 | 995 |
996 } // namespace | 996 } // namespace |
997 | 997 |
998 // static | 998 // static |
999 std::unique_ptr<DnsTransactionFactory> DnsTransactionFactory::CreateFactory( | 999 std::unique_ptr<DnsTransactionFactory> DnsTransactionFactory::CreateFactory( |
1000 DnsSession* session) { | 1000 DnsSession* session) { |
1001 return std::unique_ptr<DnsTransactionFactory>( | 1001 return std::unique_ptr<DnsTransactionFactory>( |
1002 new DnsTransactionFactoryImpl(session)); | 1002 new DnsTransactionFactoryImpl(session)); |
1003 } | 1003 } |
1004 | 1004 |
1005 } // namespace net | 1005 } // namespace net |
OLD | NEW |