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
3// found in the LICENSE file.
4
5#ifndef REMOTING_HOST_DNS_BLACKHOLE_CHECKER_H_
6#define REMOTING_HOST_DNS_BLACKHOLE_CHECKER_H_
7
8#include "net/url_request/url_fetcher_delegate.h"
9
10#include "base/callback.h"
11
12namespace net {
13class URLRequestContextGetter;
14}  // namespace net
15
16namespace remoting {
17
18// This is the default prefix that is prepended to the kTalkGadgetUrl to form
19// the complete talkgadget URL used by the host. Policy settings allow admins
20// to change the prefix that is used.
21extern const char kDefaultHostTalkGadgetPrefix[];
22
23class DnsBlackholeChecker : public net::URLFetcherDelegate {
24 public:
25  DnsBlackholeChecker(
26      scoped_refptr<net::URLRequestContextGetter> url_request_context_getter,
27      std::string talkgadget_prefix);
28  virtual ~DnsBlackholeChecker();
29
30  // net::URLFetcherDelegate interface.
31  virtual void OnURLFetchComplete(const net::URLFetcher* source) OVERRIDE;
32
33  // Initiates a check the verify that the host talkgadget has not been "DNS
34  // blackholed" to prevent connections. If this is called again before the
35  // callback has been called, then the second call is ignored.
36  void CheckForDnsBlackhole(const base::Callback<void(bool)>& callback);
37
38 private:
39  // URL request context getter to use to create the URL fetcher.
40  scoped_refptr<net::URLRequestContextGetter> url_request_context_getter_;
41
42  // URL fetcher used to verify access to the host talkgadget.
43  scoped_ptr<net::URLFetcher> url_fetcher_;
44
45  // The string pre-pended to '.talkgadget.google.com' to create the full
46  // talkgadget domain name for the host.
47  std::string talkgadget_prefix_;
48
49  // Called with the results of the connection check.
50  base::Callback<void(bool)> callback_;
51
52  DISALLOW_COPY_AND_ASSIGN(DnsBlackholeChecker);
53};
54
55}  // namespace remoting
56
57#endif  // REMOTING_HOST_DNS_BLACKHOLE_CHECKER_H_
58