2 * Copyright (C) 2006 Apple Computer, Inc. All rights reserved.
3 * Copyright (C) 2006 Michael Emmel mike.emmel@gmail.com
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
15 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
16 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
19 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
20 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
21 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
22 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
23 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 #ifndef ResourceHandleManager_h
29 #define ResourceHandleManager_h
32 #include "PlatformString.h"
34 #include "ResourceHandleClient.h"
41 #include <curl/curl.h>
42 #include <wtf/Vector.h>
43 #include <wtf/text/CString.h>
47 class ResourceHandleManager {
50 HTTP = CURLPROXY_HTTP,
51 Socks4 = CURLPROXY_SOCKS4,
52 Socks4A = CURLPROXY_SOCKS4A,
53 Socks5 = CURLPROXY_SOCKS5,
54 Socks5Hostname = CURLPROXY_SOCKS5_HOSTNAME
56 static ResourceHandleManager* sharedInstance();
57 void add(ResourceHandle*);
58 void cancel(ResourceHandle*);
59 void setCookieJarFileName(const char* cookieJarFileName);
61 void dispatchSynchronousJob(ResourceHandle*);
63 void setupPOST(ResourceHandle*, struct curl_slist**);
64 void setupPUT(ResourceHandle*, struct curl_slist**);
66 void setProxyInfo(const String& host = "",
67 unsigned long port = 0,
68 ProxyType type = HTTP,
69 const String& username = "",
70 const String& password = "");
73 ResourceHandleManager();
74 ~ResourceHandleManager();
75 void downloadTimerCallback(Timer<ResourceHandleManager>*);
76 void removeFromCurl(ResourceHandle*);
77 bool removeScheduledJob(ResourceHandle*);
78 void startJob(ResourceHandle*);
79 bool startScheduledJobs();
81 void initializeHandle(ResourceHandle*);
83 Timer<ResourceHandleManager> m_downloadTimer;
84 CURLM* m_curlMultiHandle;
85 CURLSH* m_curlShareHandle;
86 char* m_cookieJarFileName;
87 char m_curlErrorBuffer[CURL_ERROR_SIZE];
88 Vector<ResourceHandle*> m_resourceHandleList;
89 const CString m_certificatePath;
93 ProxyType m_proxyType;