blob: 7d9297a5048938fc8b2e6e11b9cc15fcde14e6a9 [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 Reyesf3ed8e72011-02-16 10:35:46 -080034 callback_ = callback;
35 return proxy_resolver_->GetProxiesForUrl(url,
36 &HttpFetcher::StaticProxiesResolved,
37 this);
38}
39
40void HttpFetcher::ProxiesResolved(const std::deque<std::string>& proxies) {
41 no_resolver_idle_id_ = 0;
42 if (!proxies.empty())
Andrew de los Reyes45168102010-11-22 11:13:50 -080043 SetProxies(proxies);
Andrew de los Reyesf3ed8e72011-02-16 10:35:46 -080044 callback_->Run();
45 callback_ = NULL;
Andrew de los Reyes45168102010-11-22 11:13:50 -080046}
47
48} // namespace chromeos_update_engine