Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(32)

Side by Side Diff: libcurl_http_fetcher.h

Issue 3010009: AU: When server dies, don't retry forever (Closed) Base URL: ssh://git@chromiumos-git/update_engine.git
Patch Set: fixes for review, cleanup some LOG messages Created 10 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_LIBCURL_HTTP_FETCHER_H__ 5 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_LIBCURL_HTTP_FETCHER_H__
6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_LIBCURL_HTTP_FETCHER_H__ 6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_LIBCURL_HTTP_FETCHER_H__
7 7
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <curl/curl.h> 10 #include <curl/curl.h>
11 #include <glib.h> 11 #include <glib.h>
12 #include "base/basictypes.h" 12 #include "base/basictypes.h"
13 #include "chromeos/obsolete_logging.h" 13 #include "chromeos/obsolete_logging.h"
14 #include "update_engine/http_fetcher.h" 14 #include "update_engine/http_fetcher.h"
15 15
16 // This is a concrete implementation of HttpFetcher that uses libcurl to do the 16 // This is a concrete implementation of HttpFetcher that uses libcurl to do the
17 // http work. 17 // http work.
18 18
19 namespace chromeos_update_engine { 19 namespace chromeos_update_engine {
20 20
21 class LibcurlHttpFetcher : public HttpFetcher { 21 class LibcurlHttpFetcher : public HttpFetcher {
22 public: 22 public:
23 LibcurlHttpFetcher() 23 LibcurlHttpFetcher()
24 : curl_multi_handle_(NULL), curl_handle_(NULL), 24 : curl_multi_handle_(NULL), curl_handle_(NULL),
25 timeout_source_(NULL), transfer_in_progress_(false), 25 timeout_source_(NULL), transfer_in_progress_(false),
26 idle_ms_(1000) {} 26 retry_count_(0), idle_ms_(1000) {}
27 27
28 // Cleans up all internal state. Does not notify delegate 28 // Cleans up all internal state. Does not notify delegate
29 ~LibcurlHttpFetcher(); 29 ~LibcurlHttpFetcher();
30 30
31 // Begins the transfer if it hasn't already begun. 31 // Begins the transfer if it hasn't already begun.
32 virtual void BeginTransfer(const std::string& url); 32 virtual void BeginTransfer(const std::string& url);
33 33
34 // If the transfer is in progress, aborts the transfer early. 34 // If the transfer is in progress, aborts the transfer early.
35 // The transfer cannot be resumed. 35 // The transfer cannot be resumed.
36 virtual void TerminateTransfer(); 36 virtual void TerminateTransfer();
(...skipping 29 matching lines...) Expand all
66 static gboolean StaticFDCallback(GIOChannel *source, 66 static gboolean StaticFDCallback(GIOChannel *source,
67 GIOCondition condition, 67 GIOCondition condition,
68 gpointer data) { 68 gpointer data) {
69 return reinterpret_cast<LibcurlHttpFetcher*>(data)->FDCallback(source, 69 return reinterpret_cast<LibcurlHttpFetcher*>(data)->FDCallback(source,
70 condition); 70 condition);
71 } 71 }
72 gboolean TimeoutCallback(); 72 gboolean TimeoutCallback();
73 static gboolean StaticTimeoutCallback(gpointer data) { 73 static gboolean StaticTimeoutCallback(gpointer data) {
74 return reinterpret_cast<LibcurlHttpFetcher*>(data)->TimeoutCallback(); 74 return reinterpret_cast<LibcurlHttpFetcher*>(data)->TimeoutCallback();
75 } 75 }
76
77 gboolean RetryTimeoutCallback();
78 static gboolean StaticRetryTimeoutCallback(void* arg) {
79 return static_cast<LibcurlHttpFetcher*>(arg)->RetryTimeoutCallback();
80 }
76 81
77 // Calls into curl_multi_perform to let libcurl do its work. Returns after 82 // Calls into curl_multi_perform to let libcurl do its work. Returns after
78 // curl_multi_perform is finished, which may actually be after more than 83 // curl_multi_perform is finished, which may actually be after more than
79 // one call to curl_multi_perform. This method will set up the glib run 84 // one call to curl_multi_perform. This method will set up the glib run
80 // loop with sources for future work that libcurl will do. 85 // loop with sources for future work that libcurl will do.
81 // This method will not block. 86 // This method will not block.
82 // Returns true if we should resume immediately after this call. 87 // Returns true if we should resume immediately after this call.
83 bool CurlPerformOnce(); 88 bool CurlPerformOnce();
84 89
85 // Sets up glib main loop sources as needed by libcurl. This is generally 90 // Sets up glib main loop sources as needed by libcurl. This is generally
(...skipping 30 matching lines...) Expand all
116 121
117 // The transfer size. -1 if not known. 122 // The transfer size. -1 if not known.
118 off_t transfer_size_; 123 off_t transfer_size_;
119 124
120 // How many bytes have been downloaded and sent to the delegate. 125 // How many bytes have been downloaded and sent to the delegate.
121 off_t bytes_downloaded_; 126 off_t bytes_downloaded_;
122 127
123 // If we resumed an earlier transfer, data offset that we used for the 128 // If we resumed an earlier transfer, data offset that we used for the
124 // new connection. 0 otherwise. 129 // new connection. 0 otherwise.
125 off_t resume_offset_; 130 off_t resume_offset_;
131
132 // Number of resumes performed.
133 int retry_count_;
126 134
127 long idle_ms_; 135 long idle_ms_;
128 DISALLOW_COPY_AND_ASSIGN(LibcurlHttpFetcher); 136 DISALLOW_COPY_AND_ASSIGN(LibcurlHttpFetcher);
129 }; 137 };
130 138
131 } // namespace chromeos_update_engine 139 } // namespace chromeos_update_engine
132 140
133 #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_LIBCURL_HTTP_FETCHER_H__ 141 #endif // CHROMEOS_PLATFORM_UPDATE_ENGINE_LIBCURL_HTTP_FETCHER_H__
OLDNEW
« no previous file with comments | « http_fetcher_unittest.cc ('k') | libcurl_http_fetcher.cc » ('j') | libcurl_http_fetcher.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698