// Copyright (c) 2010 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 CHROME_BROWSER_NET_SERVICE_PROVIDERS_WIN_H_
#define CHROME_BROWSER_NET_SERVICE_PROVIDERS_WIN_H_

#include <vector>

struct WinsockNamespaceProvider {
  std::wstring name;
  int version;
  bool active;
  int type;
};
typedef std::vector<WinsockNamespaceProvider> WinsockNamespaceProviderList;

struct WinsockLayeredServiceProvider {
  std::wstring name;
  std::wstring path;
  int version;
  int chain_length;
  int socket_type;
  int socket_protocol;
};
typedef std::vector<WinsockLayeredServiceProvider>
    WinsockLayeredServiceProviderList;

// Returns all the Winsock namespace providers.
void GetWinsockNamespaceProviders(
    WinsockNamespaceProviderList* namespace_list);

// Returns all the Winsock layered service providers and their paths.
void GetWinsockLayeredServiceProviders(
    WinsockLayeredServiceProviderList* service_list);

#endif  // CHROME_BROWSER_NET_SERVICE_PROVIDERS_WIN_H_
