Wed, 31 Dec 2014 06:55:46 +0100
Added tag TORBROWSER_REPLICA for changeset 6474c204b198
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
2 *
3 * This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "nsIServiceManager.h"
8 #include "nsSOCKSSocketProvider.h"
9 #include "nsSOCKSIOLayer.h"
10 #include "nsCOMPtr.h"
11 #include "nsError.h"
13 //////////////////////////////////////////////////////////////////////////
15 NS_IMPL_ISUPPORTS(nsSOCKSSocketProvider, nsISocketProvider)
17 nsresult
18 nsSOCKSSocketProvider::CreateV4(nsISupports *aOuter, REFNSIID aIID, void **aResult)
19 {
20 nsresult rv;
21 nsCOMPtr<nsISocketProvider> inst =
22 new nsSOCKSSocketProvider(NS_SOCKS_VERSION_4);
23 if (!inst)
24 rv = NS_ERROR_OUT_OF_MEMORY;
25 else
26 rv = inst->QueryInterface(aIID, aResult);
27 return rv;
28 }
30 nsresult
31 nsSOCKSSocketProvider::CreateV5(nsISupports *aOuter, REFNSIID aIID, void **aResult)
32 {
33 nsresult rv;
34 nsCOMPtr<nsISocketProvider> inst =
35 new nsSOCKSSocketProvider(NS_SOCKS_VERSION_5);
36 if (!inst)
37 rv = NS_ERROR_OUT_OF_MEMORY;
38 else
39 rv = inst->QueryInterface(aIID, aResult);
40 return rv;
41 }
43 NS_IMETHODIMP
44 nsSOCKSSocketProvider::NewSocket(int32_t family,
45 const char *host,
46 int32_t port,
47 nsIProxyInfo *proxy,
48 uint32_t flags,
49 PRFileDesc **result,
50 nsISupports **socksInfo)
51 {
52 PRFileDesc *sock;
54 sock = PR_OpenTCPSocket(family);
55 if (!sock)
56 return NS_ERROR_OUT_OF_MEMORY;
58 nsresult rv = nsSOCKSIOLayerAddToSocket(family,
59 host,
60 port,
61 proxy,
62 mVersion,
63 flags,
64 sock,
65 socksInfo);
66 if (NS_SUCCEEDED(rv)) {
67 *result = sock;
68 return NS_OK;
69 }
71 return NS_ERROR_SOCKET_CREATE_FAILED;
72 }
74 NS_IMETHODIMP
75 nsSOCKSSocketProvider::AddToSocket(int32_t family,
76 const char *host,
77 int32_t port,
78 nsIProxyInfo *proxy,
79 uint32_t flags,
80 PRFileDesc *sock,
81 nsISupports **socksInfo)
82 {
83 nsresult rv = nsSOCKSIOLayerAddToSocket(family,
84 host,
85 port,
86 proxy,
87 mVersion,
88 flags,
89 sock,
90 socksInfo);
92 if (NS_FAILED(rv))
93 rv = NS_ERROR_SOCKET_CREATE_FAILED;
94 return rv;
95 }