/*
 * DO NOT EDIT.  THIS FILE IS GENERATED FROM nsISocketProvider.idl
 */

#ifndef __gen_nsISocketProvider_h__
#define __gen_nsISocketProvider_h__


#ifndef __gen_nsISupports_h__
#include "nsISupports.h"
#endif

/* For IDL files that don't want to include root IDL files. */
#ifndef NS_NO_VTABLE
#define NS_NO_VTABLE
#endif

/* starting interface:    nsISocketProvider */
#define NS_ISOCKETPROVIDER_IID_STR "00b3df92-e830-11d8-d48e-0004e22243f8"

#define NS_ISOCKETPROVIDER_IID \
  {0x00b3df92, 0xe830, 0x11d8, \
    { 0xd4, 0x8e, 0x00, 0x04, 0xe2, 0x22, 0x43, 0xf8 }}

/**
 * nsISocketProvider
 */
class NS_NO_VTABLE nsISocketProvider : public nsISupports {
 public: 

  NS_DEFINE_STATIC_IID_ACCESSOR(NS_ISOCKETPROVIDER_IID)

  /**
     * newSocket
     *
     * @param aFamily
     *        The address family for this socket (PR_AF_INET or PR_AF_INET6).
     * @param aHost
     *        The hostname for this connection.
     * @param aPort
     *        The port for this connection.
     * @param aProxyHost
     *        If non-null, the proxy hostname for this connection.
     * @param aProxyPort
     *        The proxy port for this connection.
     * @param aFlags
     *        Control flags that govern this connection (see below.)
     * @param aFileDesc
     *        The resulting PRFileDesc.
     * @param aSecurityInfo
     *        Any security info that should be associated with aFileDesc.  This
     *        object typically implements nsITransportSecurityInfo.
     */
  /* void newSocket (in long aFamily, in string aHost, in long aPort, in string aProxyHost, in long aProxyPort, in unsigned long aFlags, out nsFileDescStar aFileDesc, out nsISupports aSecurityInfo); */
  NS_IMETHOD NewSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * *aFileDesc, nsISupports **aSecurityInfo) = 0;

  /**
     * addToSocket
     *
     * This function is called to allow the socket provider to layer a
     * PRFileDesc on top of another PRFileDesc.  For example, SSL via a SOCKS
     * proxy.
     *
     * Parameters are the same as newSocket with the exception of aFileDesc,
     * which is an in-param instead.
     */
  /* void addToSocket (in long aFamily, in string aHost, in long aPort, in string aProxyHost, in long aProxyPort, in unsigned long aFlags, in nsFileDescStar aFileDesc, out nsISupports aSecurityInfo); */
  NS_IMETHOD AddToSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * aFileDesc, nsISupports **aSecurityInfo) = 0;

  /**
     * PROXY_RESOLVES_HOST
     *
     * This flag is set if the proxy is to perform hostname resolution instead
     * of the client.  When set, the hostname parameter passed when in this
     * interface will be used instead of the address structure passed for a
     * later connect et al. request.
     */
  enum { PROXY_RESOLVES_HOST = 1 };

};

/* Use this macro when declaring classes that implement this interface. */
#define NS_DECL_NSISOCKETPROVIDER \
  NS_IMETHOD NewSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * *aFileDesc, nsISupports **aSecurityInfo); \
  NS_IMETHOD AddToSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * aFileDesc, nsISupports **aSecurityInfo); \

/* Use this macro to declare functions that forward the behavior of this interface to another object. */
#define NS_FORWARD_NSISOCKETPROVIDER(_to) \
  NS_IMETHOD NewSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * *aFileDesc, nsISupports **aSecurityInfo) { return _to NewSocket(aFamily, aHost, aPort, aProxyHost, aProxyPort, aFlags, aFileDesc, aSecurityInfo); } \
  NS_IMETHOD AddToSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * aFileDesc, nsISupports **aSecurityInfo) { return _to AddToSocket(aFamily, aHost, aPort, aProxyHost, aProxyPort, aFlags, aFileDesc, aSecurityInfo); } \

/* Use this macro to declare functions that forward the behavior of this interface to another object in a safe way. */
#define NS_FORWARD_SAFE_NSISOCKETPROVIDER(_to) \
  NS_IMETHOD NewSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * *aFileDesc, nsISupports **aSecurityInfo) { return !_to ? NS_ERROR_NULL_POINTER : _to->NewSocket(aFamily, aHost, aPort, aProxyHost, aProxyPort, aFlags, aFileDesc, aSecurityInfo); } \
  NS_IMETHOD AddToSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * aFileDesc, nsISupports **aSecurityInfo) { return !_to ? NS_ERROR_NULL_POINTER : _to->AddToSocket(aFamily, aHost, aPort, aProxyHost, aProxyPort, aFlags, aFileDesc, aSecurityInfo); } \

#if 0
/* Use the code below as a template for the implementation class for this interface. */

/* Header file */
class nsSocketProvider : public nsISocketProvider
{
public:
  NS_DECL_ISUPPORTS
  NS_DECL_NSISOCKETPROVIDER

  nsSocketProvider();

private:
  ~nsSocketProvider();

protected:
  /* additional members */
};

/* Implementation file */
NS_IMPL_ISUPPORTS1(nsSocketProvider, nsISocketProvider)

nsSocketProvider::nsSocketProvider()
{
  /* member initializers and constructor code */
}

nsSocketProvider::~nsSocketProvider()
{
  /* destructor code */
}

/* void newSocket (in long aFamily, in string aHost, in long aPort, in string aProxyHost, in long aProxyPort, in unsigned long aFlags, out nsFileDescStar aFileDesc, out nsISupports aSecurityInfo); */
NS_IMETHODIMP nsSocketProvider::NewSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * *aFileDesc, nsISupports **aSecurityInfo)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* void addToSocket (in long aFamily, in string aHost, in long aPort, in string aProxyHost, in long aProxyPort, in unsigned long aFlags, in nsFileDescStar aFileDesc, out nsISupports aSecurityInfo); */
NS_IMETHODIMP nsSocketProvider::AddToSocket(PRInt32 aFamily, const char *aHost, PRInt32 aPort, const char *aProxyHost, PRInt32 aProxyPort, PRUint32 aFlags, struct PRFileDesc * aFileDesc, nsISupports **aSecurityInfo)
{
    return NS_ERROR_NOT_IMPLEMENTED;
}

/* End of implementation class template. */
#endif

/**
 * nsISocketProvider implementations should be registered with XPCOM under a
 * contract ID of the form: "@mozilla.org/network/socket;2?type=foo"
 */
#define NS_NETWORK_SOCKET_CONTRACTID_PREFIX \
    "@mozilla.org/network/socket;2?type="

#endif /* __gen_nsISocketProvider_h__ */
