// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef JINGLE_GLUE_RESOLVING_CLIENT_SOCKET_FACTORY_H_
#define JINGLE_GLUE_RESOLVING_CLIENT_SOCKET_FACTORY_H_

#include "base/memory/scoped_ptr.h"

namespace net {
class ClientSocketHandle;
class HostPortPair;
class SSLClientSocket;
class StreamSocket;
}  // namespace net

// TODO(sanjeevr): Move this to net/

namespace jingle_glue {

// Interface for a ClientSocketFactory that creates ClientSockets that can
// resolve host names and tunnel through proxies.
class ResolvingClientSocketFactory {
 public:
  virtual ~ResolvingClientSocketFactory() { }
  // Method to create a transport socket using a HostPortPair.
  virtual scoped_ptr<net::StreamSocket> CreateTransportClientSocket(
      const net::HostPortPair& host_and_port) = 0;

  virtual scoped_ptr<net::SSLClientSocket> CreateSSLClientSocket(
      scoped_ptr<net::ClientSocketHandle> transport_socket,
      const net::HostPortPair& host_and_port) = 0;
};

}  // namespace jingle_glue

#endif  // JINGLE_GLUE_RESOLVING_CLIENT_SOCKET_FACTORY_H_
