netwerk/socket/nsSOCKSSocketProvider.cpp

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/netwerk/socket/nsSOCKSSocketProvider.cpp	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,95 @@
     1.4 +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
     1.5 + *
     1.6 + * This Source Code Form is subject to the terms of the Mozilla Public
     1.7 + * License, v. 2.0. If a copy of the MPL was not distributed with this
     1.8 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
     1.9 +
    1.10 +#include "nsIServiceManager.h"
    1.11 +#include "nsSOCKSSocketProvider.h"
    1.12 +#include "nsSOCKSIOLayer.h"
    1.13 +#include "nsCOMPtr.h"
    1.14 +#include "nsError.h"
    1.15 +
    1.16 +//////////////////////////////////////////////////////////////////////////
    1.17 +
    1.18 +NS_IMPL_ISUPPORTS(nsSOCKSSocketProvider, nsISocketProvider)
    1.19 +
    1.20 +nsresult
    1.21 +nsSOCKSSocketProvider::CreateV4(nsISupports *aOuter, REFNSIID aIID, void **aResult)
    1.22 +{
    1.23 +    nsresult rv;
    1.24 +    nsCOMPtr<nsISocketProvider> inst =
    1.25 +            new nsSOCKSSocketProvider(NS_SOCKS_VERSION_4);
    1.26 +    if (!inst)
    1.27 +        rv = NS_ERROR_OUT_OF_MEMORY;
    1.28 +    else
    1.29 +        rv = inst->QueryInterface(aIID, aResult); 
    1.30 +    return rv;
    1.31 +}
    1.32 +
    1.33 +nsresult
    1.34 +nsSOCKSSocketProvider::CreateV5(nsISupports *aOuter, REFNSIID aIID, void **aResult)
    1.35 +{
    1.36 +    nsresult rv;
    1.37 +    nsCOMPtr<nsISocketProvider> inst =
    1.38 +            new nsSOCKSSocketProvider(NS_SOCKS_VERSION_5);
    1.39 +    if (!inst)
    1.40 +        rv = NS_ERROR_OUT_OF_MEMORY;
    1.41 +    else
    1.42 +        rv = inst->QueryInterface(aIID, aResult); 
    1.43 +    return rv;
    1.44 +}
    1.45 +
    1.46 +NS_IMETHODIMP
    1.47 +nsSOCKSSocketProvider::NewSocket(int32_t family,
    1.48 +                                 const char *host, 
    1.49 +                                 int32_t port,
    1.50 +                                 nsIProxyInfo *proxy,
    1.51 +                                 uint32_t flags,
    1.52 +                                 PRFileDesc **result,
    1.53 +                                 nsISupports **socksInfo)
    1.54 +{
    1.55 +    PRFileDesc *sock;
    1.56 +    
    1.57 +    sock = PR_OpenTCPSocket(family);
    1.58 +    if (!sock)
    1.59 +        return NS_ERROR_OUT_OF_MEMORY;
    1.60 +
    1.61 +    nsresult rv = nsSOCKSIOLayerAddToSocket(family,
    1.62 +                                            host, 
    1.63 +                                            port,
    1.64 +                                            proxy,
    1.65 +                                            mVersion,
    1.66 +                                            flags,
    1.67 +                                            sock, 
    1.68 +                                            socksInfo);
    1.69 +    if (NS_SUCCEEDED(rv)) {
    1.70 +        *result = sock;
    1.71 +        return NS_OK;
    1.72 +    }
    1.73 +
    1.74 +    return NS_ERROR_SOCKET_CREATE_FAILED;
    1.75 +}
    1.76 +
    1.77 +NS_IMETHODIMP
    1.78 +nsSOCKSSocketProvider::AddToSocket(int32_t family,
    1.79 +                                   const char *host,
    1.80 +                                   int32_t port,
    1.81 +                                   nsIProxyInfo *proxy,
    1.82 +                                   uint32_t flags,
    1.83 +                                   PRFileDesc *sock,
    1.84 +                                   nsISupports **socksInfo)
    1.85 +{
    1.86 +    nsresult rv = nsSOCKSIOLayerAddToSocket(family,
    1.87 +                                            host, 
    1.88 +                                            port,
    1.89 +                                            proxy,
    1.90 +                                            mVersion,
    1.91 +                                            flags,
    1.92 +                                            sock, 
    1.93 +                                            socksInfo);
    1.94 +    
    1.95 +    if (NS_FAILED(rv))
    1.96 +        rv = NS_ERROR_SOCKET_CREATE_FAILED;
    1.97 +    return rv;
    1.98 +}

mercurial