1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_shell.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "rtl/ustrbuf.hxx"
28*b1cdbd2cSJim Jagielski 
29*b1cdbd2cSJim Jagielski #include "wininetbackend.hxx"
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #if defined _MSC_VER
32*b1cdbd2cSJim Jagielski #pragma warning(push, 1)
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski #include <windows.h>
35*b1cdbd2cSJim Jagielski #include <wininet.h>
36*b1cdbd2cSJim Jagielski #include <sal/alloca.h>
37*b1cdbd2cSJim Jagielski #if defined _MSC_VER
38*b1cdbd2cSJim Jagielski #pragma warning(pop)
39*b1cdbd2cSJim Jagielski #endif
40*b1cdbd2cSJim Jagielski 
41*b1cdbd2cSJim Jagielski #define WININET_DLL_NAME "wininet.dll"
42*b1cdbd2cSJim Jagielski #define EQUAL_SIGN '='
43*b1cdbd2cSJim Jagielski #define COLON      ':'
44*b1cdbd2cSJim Jagielski #define SPACE      ' '
45*b1cdbd2cSJim Jagielski #define SEMI_COLON ';'
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski namespace {
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski struct Library {
50*b1cdbd2cSJim Jagielski     HMODULE module;
51*b1cdbd2cSJim Jagielski 
Library__anonf700e40b0111::Library52*b1cdbd2cSJim Jagielski     Library(HMODULE theModule): module(theModule) {}
53*b1cdbd2cSJim Jagielski 
~Library__anonf700e40b0111::Library54*b1cdbd2cSJim Jagielski     ~Library() { if (module) FreeLibrary(module); }
55*b1cdbd2cSJim Jagielski };
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski }
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski typedef struct
60*b1cdbd2cSJim Jagielski {
61*b1cdbd2cSJim Jagielski     rtl::OUString Server;
62*b1cdbd2cSJim Jagielski     rtl::OUString Port;
63*b1cdbd2cSJim Jagielski } ProxyEntry;
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
66*b1cdbd2cSJim Jagielski // helper functions
67*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------
68*b1cdbd2cSJim Jagielski 
69*b1cdbd2cSJim Jagielski namespace // private
70*b1cdbd2cSJim Jagielski {
ReadProxyEntry(const rtl::OUString & aProxy,sal_Int32 & i)71*b1cdbd2cSJim Jagielski     ProxyEntry ReadProxyEntry(const rtl::OUString& aProxy, sal_Int32& i)
72*b1cdbd2cSJim Jagielski     {
73*b1cdbd2cSJim Jagielski         ProxyEntry aProxyEntry;
74*b1cdbd2cSJim Jagielski 
75*b1cdbd2cSJim Jagielski         aProxyEntry.Server = aProxy.getToken( 0, COLON, i );
76*b1cdbd2cSJim Jagielski         if ( i > -1 )
77*b1cdbd2cSJim Jagielski             aProxyEntry.Port = aProxy.getToken( 0, COLON, i );
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski         return aProxyEntry;
80*b1cdbd2cSJim Jagielski     }
81*b1cdbd2cSJim Jagielski 
FindProxyEntry(const rtl::OUString & aProxyList,const rtl::OUString & aType)82*b1cdbd2cSJim Jagielski     ProxyEntry FindProxyEntry(const rtl::OUString& aProxyList, const rtl::OUString& aType)
83*b1cdbd2cSJim Jagielski     {
84*b1cdbd2cSJim Jagielski         sal_Int32 nIndex = 0;
85*b1cdbd2cSJim Jagielski 
86*b1cdbd2cSJim Jagielski         do
87*b1cdbd2cSJim Jagielski         {
88*b1cdbd2cSJim Jagielski             // get the next token, e.g. ftp=server:port
89*b1cdbd2cSJim Jagielski             rtl::OUString nextToken = aProxyList.getToken( 0, SPACE, nIndex );
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski             // split the next token again into the parts separated
92*b1cdbd2cSJim Jagielski             // through '=', e.g. ftp=server:port -> ftp and server:port
93*b1cdbd2cSJim Jagielski             sal_Int32 i = 0;
94*b1cdbd2cSJim Jagielski             if( nextToken.indexOf( EQUAL_SIGN ) > -1 )
95*b1cdbd2cSJim Jagielski             {
96*b1cdbd2cSJim Jagielski                 if( aType.equals( nextToken.getToken( 0, EQUAL_SIGN, i ) ) )
97*b1cdbd2cSJim Jagielski                     return ReadProxyEntry(nextToken, i);
98*b1cdbd2cSJim Jagielski             }
99*b1cdbd2cSJim Jagielski             else if( aType.getLength() == 0)
100*b1cdbd2cSJim Jagielski                 return ReadProxyEntry(nextToken, i);
101*b1cdbd2cSJim Jagielski 
102*b1cdbd2cSJim Jagielski         } while ( nIndex >= 0 );
103*b1cdbd2cSJim Jagielski 
104*b1cdbd2cSJim Jagielski         return ProxyEntry();
105*b1cdbd2cSJim Jagielski     }
106*b1cdbd2cSJim Jagielski 
107*b1cdbd2cSJim Jagielski } // end private namespace
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
110*b1cdbd2cSJim Jagielski 
WinInetBackend()111*b1cdbd2cSJim Jagielski WinInetBackend::WinInetBackend()
112*b1cdbd2cSJim Jagielski {
113*b1cdbd2cSJim Jagielski     Library hWinInetDll( LoadLibrary( WININET_DLL_NAME ) );
114*b1cdbd2cSJim Jagielski     if( hWinInetDll.module )
115*b1cdbd2cSJim Jagielski     {
116*b1cdbd2cSJim Jagielski         typedef BOOL ( WINAPI *InternetQueryOption_Proc_T )( HINTERNET, DWORD, LPVOID, LPDWORD );
117*b1cdbd2cSJim Jagielski 
118*b1cdbd2cSJim Jagielski         InternetQueryOption_Proc_T lpfnInternetQueryOption =
119*b1cdbd2cSJim Jagielski             reinterpret_cast< InternetQueryOption_Proc_T >(
120*b1cdbd2cSJim Jagielski                 GetProcAddress( hWinInetDll.module, "InternetQueryOptionA" ) );
121*b1cdbd2cSJim Jagielski         if (lpfnInternetQueryOption)
122*b1cdbd2cSJim Jagielski         {
123*b1cdbd2cSJim Jagielski             LPINTERNET_PROXY_INFO lpi = NULL;
124*b1cdbd2cSJim Jagielski 
125*b1cdbd2cSJim Jagielski             // query for the neccessary space
126*b1cdbd2cSJim Jagielski             DWORD dwLength = 0;
127*b1cdbd2cSJim Jagielski             BOOL bRet = lpfnInternetQueryOption(
128*b1cdbd2cSJim Jagielski                 NULL,
129*b1cdbd2cSJim Jagielski                 INTERNET_OPTION_PROXY,
130*b1cdbd2cSJim Jagielski                 (LPVOID)lpi,
131*b1cdbd2cSJim Jagielski                 &dwLength );
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski             // allocate sufficient space on the heap
134*b1cdbd2cSJim Jagielski             // insufficient space on the heap results
135*b1cdbd2cSJim Jagielski             // in a stack overflow exception, we assume
136*b1cdbd2cSJim Jagielski             // this never happens, because of the relatively
137*b1cdbd2cSJim Jagielski             // small amount of memory we need
138*b1cdbd2cSJim Jagielski             // alloca is nice because it is fast and we don't
139*b1cdbd2cSJim Jagielski             // have to free the allocated memory, it will be
140*b1cdbd2cSJim Jagielski             // automatically done
141*b1cdbd2cSJim Jagielski             lpi = reinterpret_cast< LPINTERNET_PROXY_INFO >(
142*b1cdbd2cSJim Jagielski                 alloca( dwLength ) );
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski             bRet = lpfnInternetQueryOption(
145*b1cdbd2cSJim Jagielski                 NULL,
146*b1cdbd2cSJim Jagielski                 INTERNET_OPTION_PROXY,
147*b1cdbd2cSJim Jagielski                 (LPVOID)lpi,
148*b1cdbd2cSJim Jagielski                 &dwLength );
149*b1cdbd2cSJim Jagielski 
150*b1cdbd2cSJim Jagielski             // if a proxy is disabled, InternetQueryOption returns
151*b1cdbd2cSJim Jagielski             // an empty proxy list, so we don't have to check if
152*b1cdbd2cSJim Jagielski             // proxy is enabled or not
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski             rtl::OUString aProxyList       = rtl::OUString::createFromAscii( lpi->lpszProxy );
155*b1cdbd2cSJim Jagielski             rtl::OUString aProxyBypassList = rtl::OUString::createFromAscii( lpi->lpszProxyBypass );
156*b1cdbd2cSJim Jagielski 
157*b1cdbd2cSJim Jagielski             // override default for ProxyType, which is "0" meaning "No proxies".
158*b1cdbd2cSJim Jagielski             sal_Int32 nProperties = 1;
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski             valueProxyType_.IsPresent = true;
161*b1cdbd2cSJim Jagielski             valueProxyType_.Value <<= nProperties;
162*b1cdbd2cSJim Jagielski 
163*b1cdbd2cSJim Jagielski             // fill proxy bypass list
164*b1cdbd2cSJim Jagielski             if( aProxyBypassList.getLength() > 0 )
165*b1cdbd2cSJim Jagielski             {
166*b1cdbd2cSJim Jagielski                 rtl::OUStringBuffer aReverseList;
167*b1cdbd2cSJim Jagielski                 sal_Int32 nIndex = 0;
168*b1cdbd2cSJim Jagielski                 do
169*b1cdbd2cSJim Jagielski                 {
170*b1cdbd2cSJim Jagielski                     rtl::OUString aToken = aProxyBypassList.getToken( 0, SPACE, nIndex );
171*b1cdbd2cSJim Jagielski                     if ( aProxyList.indexOf( aToken ) == -1 )
172*b1cdbd2cSJim Jagielski                     {
173*b1cdbd2cSJim Jagielski                         if ( aReverseList.getLength() )
174*b1cdbd2cSJim Jagielski                         {
175*b1cdbd2cSJim Jagielski                             aReverseList.insert( 0, sal_Unicode( SEMI_COLON ) );
176*b1cdbd2cSJim Jagielski                             aReverseList.insert( 0, aToken );
177*b1cdbd2cSJim Jagielski                         }
178*b1cdbd2cSJim Jagielski                         else
179*b1cdbd2cSJim Jagielski                             aReverseList = aToken;
180*b1cdbd2cSJim Jagielski                     }
181*b1cdbd2cSJim Jagielski                 }
182*b1cdbd2cSJim Jagielski                 while ( nIndex >= 0 );
183*b1cdbd2cSJim Jagielski 
184*b1cdbd2cSJim Jagielski                 aProxyBypassList = aReverseList.makeStringAndClear();
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski                 valueNoProxy_.IsPresent = true;
187*b1cdbd2cSJim Jagielski                 valueNoProxy_.Value <<= aProxyBypassList.replace( SPACE, SEMI_COLON );
188*b1cdbd2cSJim Jagielski             }
189*b1cdbd2cSJim Jagielski 
190*b1cdbd2cSJim Jagielski             if( aProxyList.getLength() > 0 )
191*b1cdbd2cSJim Jagielski             {
192*b1cdbd2cSJim Jagielski                 //-------------------------------------------------
193*b1cdbd2cSJim Jagielski                 // this implementation follows the algorithm
194*b1cdbd2cSJim Jagielski                 // of the internet explorer
195*b1cdbd2cSJim Jagielski                 // if there are type-dependent proxy settings
196*b1cdbd2cSJim Jagielski                 // and type independent proxy settings in the
197*b1cdbd2cSJim Jagielski                 // registry the internet explorer chooses the
198*b1cdbd2cSJim Jagielski                 // type independent proxy for all settings
199*b1cdbd2cSJim Jagielski                 // e.g. imagine the following registry entry
200*b1cdbd2cSJim Jagielski                 // ftp=server:port;http=server:port;server:port
201*b1cdbd2cSJim Jagielski                 // the last token server:port is type independent
202*b1cdbd2cSJim Jagielski                 // so the ie chooses this proxy server
203*b1cdbd2cSJim Jagielski 
204*b1cdbd2cSJim Jagielski                 // if there is no port specified for a type independent
205*b1cdbd2cSJim Jagielski                 // server the ie uses the port of an http server if
206*b1cdbd2cSJim Jagielski                 // there is one and it has a port
207*b1cdbd2cSJim Jagielski                 //-------------------------------------------------
208*b1cdbd2cSJim Jagielski 
209*b1cdbd2cSJim Jagielski                 ProxyEntry aTypeIndepProxy = FindProxyEntry( aProxyList, rtl::OUString());
210*b1cdbd2cSJim Jagielski                 ProxyEntry aHttpProxy = FindProxyEntry( aProxyList, rtl::OUString(
211*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM( "http" ) ) );
212*b1cdbd2cSJim Jagielski                 ProxyEntry aHttpsProxy  = FindProxyEntry( aProxyList, rtl::OUString(
213*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM( "https" ) ) );
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski                 ProxyEntry aFtpProxy  = FindProxyEntry( aProxyList, rtl::OUString(
216*b1cdbd2cSJim Jagielski                     RTL_CONSTASCII_USTRINGPARAM( "ftp" ) ) );
217*b1cdbd2cSJim Jagielski 
218*b1cdbd2cSJim Jagielski                 if( aTypeIndepProxy.Server.getLength() )
219*b1cdbd2cSJim Jagielski                 {
220*b1cdbd2cSJim Jagielski                     aHttpProxy.Server = aTypeIndepProxy.Server;
221*b1cdbd2cSJim Jagielski                     aHttpsProxy.Server  = aTypeIndepProxy.Server;
222*b1cdbd2cSJim Jagielski                     aFtpProxy.Server  = aTypeIndepProxy.Server;
223*b1cdbd2cSJim Jagielski 
224*b1cdbd2cSJim Jagielski                     if( aTypeIndepProxy.Port.getLength() )
225*b1cdbd2cSJim Jagielski                     {
226*b1cdbd2cSJim Jagielski                         aHttpProxy.Port = aTypeIndepProxy.Port;
227*b1cdbd2cSJim Jagielski                         aHttpsProxy.Port  = aTypeIndepProxy.Port;
228*b1cdbd2cSJim Jagielski                         aFtpProxy.Port  = aTypeIndepProxy.Port;
229*b1cdbd2cSJim Jagielski                     }
230*b1cdbd2cSJim Jagielski                     else
231*b1cdbd2cSJim Jagielski                     {
232*b1cdbd2cSJim Jagielski                         aFtpProxy.Port  = aHttpProxy.Port;
233*b1cdbd2cSJim Jagielski                         aHttpsProxy.Port  = aHttpProxy.Port;
234*b1cdbd2cSJim Jagielski                     }
235*b1cdbd2cSJim Jagielski                 }
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski                 // http proxy name
238*b1cdbd2cSJim Jagielski                 if( aHttpProxy.Server.getLength() > 0 )
239*b1cdbd2cSJim Jagielski                 {
240*b1cdbd2cSJim Jagielski                     valueHttpProxyName_.IsPresent = true;
241*b1cdbd2cSJim Jagielski                     valueHttpProxyName_.Value <<= aHttpProxy.Server;
242*b1cdbd2cSJim Jagielski                 }
243*b1cdbd2cSJim Jagielski 
244*b1cdbd2cSJim Jagielski                 // http proxy port
245*b1cdbd2cSJim Jagielski                 if( aHttpProxy.Port.getLength() > 0 )
246*b1cdbd2cSJim Jagielski                 {
247*b1cdbd2cSJim Jagielski                     valueHttpProxyPort_.IsPresent = true;
248*b1cdbd2cSJim Jagielski                     valueHttpProxyPort_.Value <<= aHttpProxy.Port.toInt32();
249*b1cdbd2cSJim Jagielski                 }
250*b1cdbd2cSJim Jagielski 
251*b1cdbd2cSJim Jagielski                 // https proxy name
252*b1cdbd2cSJim Jagielski                 if( aHttpsProxy.Server.getLength() > 0 )
253*b1cdbd2cSJim Jagielski                 {
254*b1cdbd2cSJim Jagielski                     valueHttpsProxyName_.IsPresent = true;
255*b1cdbd2cSJim Jagielski                     valueHttpsProxyName_.Value <<= aHttpsProxy.Server;
256*b1cdbd2cSJim Jagielski                 }
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski                 // https proxy port
259*b1cdbd2cSJim Jagielski                 if( aHttpsProxy.Port.getLength() > 0 )
260*b1cdbd2cSJim Jagielski                 {
261*b1cdbd2cSJim Jagielski                     valueHttpsProxyPort_.IsPresent = true;
262*b1cdbd2cSJim Jagielski                     valueHttpsProxyPort_.Value <<= aHttpsProxy.Port.toInt32();
263*b1cdbd2cSJim Jagielski                 }
264*b1cdbd2cSJim Jagielski 
265*b1cdbd2cSJim Jagielski                 // ftp proxy name
266*b1cdbd2cSJim Jagielski                 if( aFtpProxy.Server.getLength() > 0 )
267*b1cdbd2cSJim Jagielski                 {
268*b1cdbd2cSJim Jagielski                     valueFtpProxyName_.IsPresent = true;
269*b1cdbd2cSJim Jagielski                     valueFtpProxyName_.Value <<= aFtpProxy.Server;
270*b1cdbd2cSJim Jagielski                 }
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski                 // ftp proxy port
273*b1cdbd2cSJim Jagielski                 if( aFtpProxy.Port.getLength() > 0 )
274*b1cdbd2cSJim Jagielski                 {
275*b1cdbd2cSJim Jagielski                     valueFtpProxyPort_.IsPresent = true;
276*b1cdbd2cSJim Jagielski                     valueFtpProxyPort_.Value <<= aFtpProxy.Port.toInt32();
277*b1cdbd2cSJim Jagielski                 }
278*b1cdbd2cSJim Jagielski             }
279*b1cdbd2cSJim Jagielski         }
280*b1cdbd2cSJim Jagielski     }
281*b1cdbd2cSJim Jagielski }
282*b1cdbd2cSJim Jagielski 
283*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
284*b1cdbd2cSJim Jagielski 
~WinInetBackend(void)285*b1cdbd2cSJim Jagielski WinInetBackend::~WinInetBackend(void)
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski }
288*b1cdbd2cSJim Jagielski 
289*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
290*b1cdbd2cSJim Jagielski 
createInstance()291*b1cdbd2cSJim Jagielski WinInetBackend* WinInetBackend::createInstance()
292*b1cdbd2cSJim Jagielski {
293*b1cdbd2cSJim Jagielski     return new WinInetBackend;
294*b1cdbd2cSJim Jagielski }
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski // ---------------------------------------------------------------------------------------
297*b1cdbd2cSJim Jagielski 
setPropertyValue(rtl::OUString const &,css::uno::Any const &)298*b1cdbd2cSJim Jagielski void WinInetBackend::setPropertyValue(
299*b1cdbd2cSJim Jagielski     rtl::OUString const &, css::uno::Any const &)
300*b1cdbd2cSJim Jagielski     throw (
301*b1cdbd2cSJim Jagielski         css::beans::UnknownPropertyException, css::beans::PropertyVetoException,
302*b1cdbd2cSJim Jagielski         css::lang::IllegalArgumentException, css::lang::WrappedTargetException,
303*b1cdbd2cSJim Jagielski         css::uno::RuntimeException)
304*b1cdbd2cSJim Jagielski {
305*b1cdbd2cSJim Jagielski     throw css::lang::IllegalArgumentException(
306*b1cdbd2cSJim Jagielski         rtl::OUString(
307*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_USTRINGPARAM("setPropertyValue not supported")),
308*b1cdbd2cSJim Jagielski         static_cast< cppu::OWeakObject * >(this), -1);
309*b1cdbd2cSJim Jagielski }
310*b1cdbd2cSJim Jagielski 
getPropertyValue(rtl::OUString const & PropertyName)311*b1cdbd2cSJim Jagielski css::uno::Any WinInetBackend::getPropertyValue(
312*b1cdbd2cSJim Jagielski     rtl::OUString const & PropertyName)
313*b1cdbd2cSJim Jagielski     throw (
314*b1cdbd2cSJim Jagielski         css::beans::UnknownPropertyException, css::lang::WrappedTargetException,
315*b1cdbd2cSJim Jagielski         css::uno::RuntimeException)
316*b1cdbd2cSJim Jagielski {
317*b1cdbd2cSJim Jagielski     if (PropertyName.equalsAsciiL(
318*b1cdbd2cSJim Jagielski             RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyName")))
319*b1cdbd2cSJim Jagielski     {
320*b1cdbd2cSJim Jagielski         return css::uno::makeAny(valueFtpProxyName_);
321*b1cdbd2cSJim Jagielski     } else if (PropertyName.equalsAsciiL(
322*b1cdbd2cSJim Jagielski                    RTL_CONSTASCII_STRINGPARAM("ooInetFTPProxyPort")))
323*b1cdbd2cSJim Jagielski     {
324*b1cdbd2cSJim Jagielski         return css::uno::makeAny(valueFtpProxyPort_);
325*b1cdbd2cSJim Jagielski     } else if (PropertyName.equalsAsciiL(
326*b1cdbd2cSJim Jagielski                    RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyName")))
327*b1cdbd2cSJim Jagielski     {
328*b1cdbd2cSJim Jagielski         return css::uno::makeAny(valueHttpProxyName_);
329*b1cdbd2cSJim Jagielski     } else if (PropertyName.equalsAsciiL(
330*b1cdbd2cSJim Jagielski                    RTL_CONSTASCII_STRINGPARAM("ooInetHTTPProxyPort")))
331*b1cdbd2cSJim Jagielski     {
332*b1cdbd2cSJim Jagielski         return css::uno::makeAny(valueHttpProxyPort_);
333*b1cdbd2cSJim Jagielski     } else if (PropertyName.equalsAsciiL(
334*b1cdbd2cSJim Jagielski                    RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyName")))
335*b1cdbd2cSJim Jagielski     {
336*b1cdbd2cSJim Jagielski         return css::uno::makeAny(valueHttpsProxyName_);
337*b1cdbd2cSJim Jagielski     } else if (PropertyName.equalsAsciiL(
338*b1cdbd2cSJim Jagielski                    RTL_CONSTASCII_STRINGPARAM("ooInetHTTPSProxyPort")))
339*b1cdbd2cSJim Jagielski     {
340*b1cdbd2cSJim Jagielski         return css::uno::makeAny(valueHttpsProxyPort_);
341*b1cdbd2cSJim Jagielski     } else if (PropertyName.equalsAsciiL(
342*b1cdbd2cSJim Jagielski                    RTL_CONSTASCII_STRINGPARAM("ooInetNoProxy")))
343*b1cdbd2cSJim Jagielski     {
344*b1cdbd2cSJim Jagielski         return css::uno::makeAny(valueNoProxy_);
345*b1cdbd2cSJim Jagielski     } else if (PropertyName.equalsAsciiL(
346*b1cdbd2cSJim Jagielski                    RTL_CONSTASCII_STRINGPARAM("ooInetProxyType")))
347*b1cdbd2cSJim Jagielski     {
348*b1cdbd2cSJim Jagielski         return css::uno::makeAny(valueProxyType_);
349*b1cdbd2cSJim Jagielski     } else {
350*b1cdbd2cSJim Jagielski         throw css::beans::UnknownPropertyException(
351*b1cdbd2cSJim Jagielski             PropertyName, static_cast< cppu::OWeakObject * >(this));
352*b1cdbd2cSJim Jagielski     }
353*b1cdbd2cSJim Jagielski }
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
356*b1cdbd2cSJim Jagielski 
getBackendName(void)357*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL WinInetBackend::getBackendName(void) {
358*b1cdbd2cSJim Jagielski 	return rtl::OUString::createFromAscii("com.sun.star.comp.configuration.backend.WinInetBackend") ;
359*b1cdbd2cSJim Jagielski }
360*b1cdbd2cSJim Jagielski 
361*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
362*b1cdbd2cSJim Jagielski 
getImplementationName(void)363*b1cdbd2cSJim Jagielski rtl::OUString SAL_CALL WinInetBackend::getImplementationName(void)
364*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski     return getBackendName() ;
367*b1cdbd2cSJim Jagielski }
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
370*b1cdbd2cSJim Jagielski 
getBackendServiceNames(void)371*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> SAL_CALL WinInetBackend::getBackendServiceNames(void)
372*b1cdbd2cSJim Jagielski {
373*b1cdbd2cSJim Jagielski     uno::Sequence<rtl::OUString> aServiceNameList(1);
374*b1cdbd2cSJim Jagielski     aServiceNameList[0] = rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.configuration.backend.WinInetBackend")) ;
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski     return aServiceNameList ;
377*b1cdbd2cSJim Jagielski }
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
380*b1cdbd2cSJim Jagielski 
supportsService(const rtl::OUString & aServiceName)381*b1cdbd2cSJim Jagielski sal_Bool SAL_CALL WinInetBackend::supportsService(const rtl::OUString& aServiceName)
382*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
383*b1cdbd2cSJim Jagielski {
384*b1cdbd2cSJim Jagielski     uno::Sequence< rtl::OUString > const svc = getBackendServiceNames();
385*b1cdbd2cSJim Jagielski 
386*b1cdbd2cSJim Jagielski     for(sal_Int32 i = 0; i < svc.getLength(); ++i )
387*b1cdbd2cSJim Jagielski         if(svc[i] == aServiceName)
388*b1cdbd2cSJim Jagielski             return true;
389*b1cdbd2cSJim Jagielski 
390*b1cdbd2cSJim Jagielski     return false;
391*b1cdbd2cSJim Jagielski }
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski //------------------------------------------------------------------------------
394*b1cdbd2cSJim Jagielski 
getSupportedServiceNames(void)395*b1cdbd2cSJim Jagielski uno::Sequence<rtl::OUString> SAL_CALL WinInetBackend::getSupportedServiceNames(void)
396*b1cdbd2cSJim Jagielski     throw (uno::RuntimeException)
397*b1cdbd2cSJim Jagielski {
398*b1cdbd2cSJim Jagielski     return getBackendServiceNames() ;
399*b1cdbd2cSJim Jagielski }
400