123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)// found in the LICENSE file.
423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#ifndef CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_
623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#define CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_
723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/local_discovery/privet_http.h"
923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/browser/local_discovery/privet_http_asynchronous_factory.h"
1023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "chrome/common/local_discovery/service_discovery_client.h"
1123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)namespace local_discovery {
1323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
1423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)class PrivetHTTPAsynchronousFactoryImpl : public PrivetHTTPAsynchronousFactory {
1523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) public:
1623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  PrivetHTTPAsynchronousFactoryImpl(
1723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      ServiceDiscoveryClient* service_discovery_client,
1823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      net::URLRequestContextGetter* request_context);
1923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual ~PrivetHTTPAsynchronousFactoryImpl();
2023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  virtual scoped_ptr<PrivetHTTPResolution> CreatePrivetHTTP(
2223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const std::string& name,
2323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const net::HostPortPair& address,
2423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      const ResultCallback& callback) OVERRIDE;
2523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
2623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles) private:
2723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  class ResolutionImpl : public PrivetHTTPResolution {
2823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)   public:
2923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ResolutionImpl(const std::string& name,
3023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                   const net::HostPortPair& address,
3123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                   const ResultCallback& callback,
3223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                   ServiceDiscoveryClient* service_discovery_client,
3323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                   net::URLRequestContextGetter* request_context);
3423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    virtual ~ResolutionImpl();
3523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    virtual void Start() OVERRIDE;
3723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    virtual const std::string& GetName() OVERRIDE;
3823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
3923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)   private:
4023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    void ResolveComplete(bool success,
4123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         const net::IPAddressNumber& address_ipv4,
4223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)                         const net::IPAddressNumber& address_ipv6);
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
4423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    std::string name_;
4523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    scoped_ptr<LocalDomainResolver> resolver_;
4623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    net::HostPortPair hostport_;
4723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    ResultCallback callback_;
4823730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    scoped_refptr<net::URLRequestContextGetter> request_context_;
4923730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  };
5023730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  ServiceDiscoveryClient* service_discovery_client_;
5223730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)  scoped_refptr<net::URLRequestContextGetter> request_context_;
5323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)};
5423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)}  // namespace local_discovery
5623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)
5723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#endif  // CHROME_BROWSER_LOCAL_DISCOVERY_PRIVET_HTTP_ASYNCHRONOUS_FACTORY_IMPL_H_
58