OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
9 #include "base/values.h" | 9 #include "base/values.h" |
10 #include "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
92 const base::StringPiece& qname, | 92 const base::StringPiece& qname, |
93 uint16 qtype, | 93 uint16 qtype, |
94 const ResultCallback& callback, | 94 const ResultCallback& callback, |
95 const BoundNetLog& source_net_log) | 95 const BoundNetLog& source_net_log) |
96 : session_(session), | 96 : session_(session), |
97 dns_server_(session->NextServer()), | 97 dns_server_(session->NextServer()), |
98 query_(new DnsQuery(session->NextId(), qname, qtype)), | 98 query_(new DnsQuery(session->NextId(), qname, qtype)), |
99 callback_(callback), | 99 callback_(callback), |
100 attempts_(0), | 100 attempts_(0), |
101 next_state_(STATE_NONE), | 101 next_state_(STATE_NONE), |
102 ALLOW_THIS_IN_INITIALIZER_LIST( | |
103 io_callback_(this, &DnsTransaction::OnIOComplete)), | |
104 net_log_(BoundNetLog::Make(session->net_log(), | 102 net_log_(BoundNetLog::Make(session->net_log(), |
105 NetLog::SOURCE_DNS_TRANSACTION)) { | 103 NetLog::SOURCE_DNS_TRANSACTION)) { |
106 net_log_.BeginEvent( | 104 net_log_.BeginEvent( |
107 NetLog::TYPE_DNS_TRANSACTION, | 105 NetLog::TYPE_DNS_TRANSACTION, |
108 make_scoped_refptr( | 106 make_scoped_refptr( |
109 new DnsTransactionStartParameters(dns_server_, | 107 new DnsTransactionStartParameters(dns_server_, |
110 qname, | 108 qname, |
111 qtype, | 109 qtype, |
112 source_net_log.source()))); | 110 source_net_log.source()))); |
113 } | 111 } |
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 if (rv < 0) | 197 if (rv < 0) |
200 return rv; | 198 return rv; |
201 next_state_ = STATE_SEND_QUERY; | 199 next_state_ = STATE_SEND_QUERY; |
202 return OK; | 200 return OK; |
203 } | 201 } |
204 | 202 |
205 int DnsTransaction::DoSendQuery() { | 203 int DnsTransaction::DoSendQuery() { |
206 next_state_ = STATE_SEND_QUERY_COMPLETE; | 204 next_state_ = STATE_SEND_QUERY_COMPLETE; |
207 return socket_->Write(query_->io_buffer(), | 205 return socket_->Write(query_->io_buffer(), |
208 query_->io_buffer()->size(), | 206 query_->io_buffer()->size(), |
209 &io_callback_); | 207 base::Bind(&DnsTransaction::OnIOComplete, |
| 208 base::Unretained(this))); |
210 } | 209 } |
211 | 210 |
212 int DnsTransaction::DoSendQueryComplete(int rv) { | 211 int DnsTransaction::DoSendQueryComplete(int rv) { |
213 if (rv < 0) | 212 if (rv < 0) |
214 return rv; | 213 return rv; |
215 | 214 |
216 // Writing to UDP should not result in a partial datagram. | 215 // Writing to UDP should not result in a partial datagram. |
217 if (rv != query_->io_buffer()->size()) | 216 if (rv != query_->io_buffer()->size()) |
218 return ERR_MSG_TOO_BIG; | 217 return ERR_MSG_TOO_BIG; |
219 | 218 |
220 next_state_ = STATE_READ_RESPONSE; | 219 next_state_ = STATE_READ_RESPONSE; |
221 return OK; | 220 return OK; |
222 } | 221 } |
223 | 222 |
224 int DnsTransaction::DoReadResponse() { | 223 int DnsTransaction::DoReadResponse() { |
225 next_state_ = STATE_READ_RESPONSE_COMPLETE; | 224 next_state_ = STATE_READ_RESPONSE_COMPLETE; |
226 response_.reset(new DnsResponse()); | 225 response_.reset(new DnsResponse()); |
227 return socket_->Read(response_->io_buffer(), | 226 return socket_->Read(response_->io_buffer(), |
228 response_->io_buffer()->size(), | 227 response_->io_buffer()->size(), |
229 &io_callback_); | 228 base::Bind(&DnsTransaction::OnIOComplete, |
| 229 base::Unretained(this))); |
230 } | 230 } |
231 | 231 |
232 int DnsTransaction::DoReadResponseComplete(int rv) { | 232 int DnsTransaction::DoReadResponseComplete(int rv) { |
233 DCHECK_NE(ERR_IO_PENDING, rv); | 233 DCHECK_NE(ERR_IO_PENDING, rv); |
234 RevokeTimer(); | 234 RevokeTimer(); |
235 if (rv < 0) | 235 if (rv < 0) |
236 return rv; | 236 return rv; |
237 | 237 |
238 DCHECK(rv); | 238 DCHECK(rv); |
239 if (!response_->InitParse(rv, *query_)) | 239 if (!response_->InitParse(rv, *query_)) |
(...skipping 29 matching lines...) Expand all Loading... |
269 return; | 269 return; |
270 } | 270 } |
271 next_state_ = STATE_CONNECT; | 271 next_state_ = STATE_CONNECT; |
272 query_.reset(query_->CloneWithNewId(session_->NextId())); | 272 query_.reset(query_->CloneWithNewId(session_->NextId())); |
273 int rv = DoLoop(OK); | 273 int rv = DoLoop(OK); |
274 if (rv != ERR_IO_PENDING) | 274 if (rv != ERR_IO_PENDING) |
275 DoCallback(rv); | 275 DoCallback(rv); |
276 } | 276 } |
277 | 277 |
278 } // namespace net | 278 } // namespace net |
OLD | NEW |