blob: 9e1e0aca38e038237ed389b73fa7bc8499a11ba6 [file] [log] [blame]
Andrew de los Reyes45168102010-11-22 11:13:50 -08001// 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
3// found in the LICENSE file.
4
5#include "update_engine/http_fetcher.h"
6
Andrew de los Reyesf3ed8e72011-02-16 10:35:46 -08007using google::protobuf::Closure;
Andrew de los Reyes45168102010-11-22 11:13:50 -08008using std::deque;
9using std::string;
10
11namespace chromeos_update_engine {
12
Andrew de los Reyesf3ed8e72011-02-16 10:35:46 -080013HttpFetcher::~HttpFetcher() {
14 if (no_resolver_idle_id_) {
15 g_source_remove(no_resolver_idle_id_);
16 no_resolver_idle_id_ = 0;
17 }
18}
19
Andrew de los Reyes45168102010-11-22 11:13:50 -080020void HttpFetcher::SetPostData(const void* data, size_t size) {
21 post_data_set_ = true;
22 post_data_.clear();
23 const char *char_data = reinterpret_cast<const char*>(data);
24 post_data_.insert(post_data_.end(), char_data, char_data + size);
25}
26
27// Proxy methods to set the proxies, then to pop them off.
Andrew de los Reyesf3ed8e72011-02-16 10:35:46 -080028bool HttpFetcher::ResolveProxiesForUrl(const string& url, Closure* callback) {
Andrew de los Reyes45168102010-11-22 11:13:50 -080029 if (!proxy_resolver_) {
30 LOG(INFO) << "Not resolving proxies (no proxy resolver).";
Andrew de los Reyesf3ed8e72011-02-16 10:35:46 -080031 no_resolver_idle_id_ = g_idle_add(utils::GlibRunClosure, callback);
32 return true;
Andrew de los Reyes45168102010-11-22 11:13:50 -080033 }
Andrew de los Reyesffcb6d12011-04-04 09:57:38 -070034 CHECK_EQ(reinterpret_cast<Closure*>(NULL), callback_);
Andrew de los Reyesf3ed8e72011-02-16 10:35:46 -080035 callback_ = callback;
36 return proxy_resolver_->GetProxiesForUrl(url,
37 &HttpFetcher::StaticProxiesResolved,
38 this);
39}
40
41void HttpFetcher::ProxiesResolved(const std::deque<std::string>& proxies) {
42 no_resolver_idle_id_ = 0;
43 if (!proxies.empty())
Andrew de los Reyes45168102010-11-22 11:13:50 -080044 SetProxies(proxies);
Andrew de los Reyesffcb6d12011-04-04 09:57:38 -070045 CHECK_NE(reinterpret_cast<Closure*>(NULL), callback_);
46 Closure* callback = callback_;
Andrew de los Reyesf3ed8e72011-02-16 10:35:46 -080047 callback_ = NULL;
Andrew de los Reyesffcb6d12011-04-04 09:57:38 -070048 // This may indirectly call back into ResolveProxiesForUrl():
49 callback->Run();
Andrew de los Reyes45168102010-11-22 11:13:50 -080050}
51
52} // namespace chromeos_update_engine