| OLD | NEW | 
|   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_HTTP_FETCHER_H__ |   5 #ifndef CHROMEOS_PLATFORM_UPDATE_ENGINE_HTTP_FETCHER_H__ | 
|   6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_HTTP_FETCHER_H__ |   6 #define CHROMEOS_PLATFORM_UPDATE_ENGINE_HTTP_FETCHER_H__ | 
|   7  |   7  | 
|   8 #include <string> |   8 #include <string> | 
|   9 #include <vector> |   9 #include <vector> | 
|  10 #include <glib.h> |  10 #include <glib.h> | 
|  11 #include "base/basictypes.h" |  11 #include "base/basictypes.h" | 
|  12  |  12  | 
|  13 // This class is a simple wrapper around an HTTP library (libcurl). We can |  13 // This class is a simple wrapper around an HTTP library (libcurl). We can | 
|  14 // easily mock out this interface for testing. |  14 // easily mock out this interface for testing. | 
|  15  |  15  | 
|  16 // Implementations of this class should use asynchronous i/o. They can access |  16 // Implementations of this class should use asynchronous i/o. They can access | 
|  17 // the glib main loop to request callbacks when timers or file descriptors |  17 // the glib main loop to request callbacks when timers or file descriptors | 
|  18 // change. |  18 // change. | 
|  19  |  19  | 
|  20 namespace chromeos_update_engine { |  20 namespace chromeos_update_engine { | 
|  21  |  21  | 
|  22 class HttpFetcherDelegate; |  22 class HttpFetcherDelegate; | 
|  23  |  23  | 
|  24 class HttpFetcher { |  24 class HttpFetcher { | 
|  25  public: |  25  public: | 
|  26   HttpFetcher() : post_data_set_(false), delegate_(NULL) {} |  26   HttpFetcher() | 
 |  27       : post_data_set_(false), | 
 |  28         http_response_code_(0), | 
 |  29         delegate_(NULL) {} | 
|  27   virtual ~HttpFetcher() {} |  30   virtual ~HttpFetcher() {} | 
|  28   void set_delegate(HttpFetcherDelegate* delegate) { |  31  | 
|  29     delegate_ = delegate; |  32   void set_delegate(HttpFetcherDelegate* delegate) { delegate_ = delegate; } | 
|  30   } |  33   HttpFetcherDelegate* delegate() const { return delegate_; } | 
|  31   HttpFetcherDelegate* delegate() const { |  34   int http_response_code() const { return http_response_code_; } | 
|  32     return delegate_; |  | 
|  33   } |  | 
|  34  |  35  | 
|  35   // Optional: Post data to the server. The HttpFetcher should make a copy |  36   // Optional: Post data to the server. The HttpFetcher should make a copy | 
|  36   // of this data and upload it via HTTP POST during the transfer. |  37   // of this data and upload it via HTTP POST during the transfer. | 
|  37   void SetPostData(const void* data, size_t size) { |  38   void SetPostData(const void* data, size_t size) { | 
|  38     post_data_set_ = true; |  39     post_data_set_ = true; | 
|  39     post_data_.clear(); |  40     post_data_.clear(); | 
|  40     const char *char_data = reinterpret_cast<const char*>(data); |  41     const char *char_data = reinterpret_cast<const char*>(data); | 
|  41     post_data_.insert(post_data_.end(), char_data, char_data + size); |  42     post_data_.insert(post_data_.end(), char_data, char_data + size); | 
|  42   } |  43   } | 
|  43  |  44  | 
| (...skipping 15 matching lines...) Expand all  Loading... | 
|  59   virtual void Unpause() = 0; |  60   virtual void Unpause() = 0; | 
|  60  |  61  | 
|  61  protected: |  62  protected: | 
|  62   // The URL we're actively fetching from |  63   // The URL we're actively fetching from | 
|  63   std::string url_; |  64   std::string url_; | 
|  64  |  65  | 
|  65   // POST data for the transfer, and whether or not it was ever set |  66   // POST data for the transfer, and whether or not it was ever set | 
|  66   bool post_data_set_; |  67   bool post_data_set_; | 
|  67   std::vector<char> post_data_; |  68   std::vector<char> post_data_; | 
|  68  |  69  | 
 |  70   // The server's HTTP response code from the last transfer. This | 
 |  71   // field should be set to 0 when a new transfer is initiated, and | 
 |  72   // set to the response code when the transfer is complete. | 
 |  73   int http_response_code_; | 
 |  74  | 
|  69   // The delegate; may be NULL. |  75   // The delegate; may be NULL. | 
|  70   HttpFetcherDelegate* delegate_; |  76   HttpFetcherDelegate* delegate_; | 
|  71  private: |  77  private: | 
|  72   DISALLOW_COPY_AND_ASSIGN(HttpFetcher); |  78   DISALLOW_COPY_AND_ASSIGN(HttpFetcher); | 
|  73 }; |  79 }; | 
|  74  |  80  | 
|  75 // Interface for delegates |  81 // Interface for delegates | 
|  76 class HttpFetcherDelegate { |  82 class HttpFetcherDelegate { | 
|  77  public: |  83  public: | 
|  78   // Called every time bytes are received, even if they are automatically |  84   // Called every time bytes are received, even if they are automatically | 
|  79   // delivered to an output file. |  85   // delivered to an output file. | 
|  80   virtual void ReceivedBytes(HttpFetcher* fetcher, |  86   virtual void ReceivedBytes(HttpFetcher* fetcher, | 
|  81                              const char* bytes, |  87                              const char* bytes, | 
|  82                              int length) = 0; |  88                              int length) = 0; | 
|  83  |  89  | 
|  84   // Called when the transfer has completed successfully or been somehow |  90   // Called when the transfer has completed successfully or been somehow | 
|  85   // aborted. |  91   // aborted. | 
|  86   virtual void TransferComplete(HttpFetcher* fetcher, bool successful) = 0; |  92   virtual void TransferComplete(HttpFetcher* fetcher, bool successful) = 0; | 
|  87 }; |  93 }; | 
|  88  |  94  | 
|  89 }  // namespace chromeos_update_engine |  95 }  // namespace chromeos_update_engine | 
|  90  |  96  | 
|  91 #endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_HTTP_FETCHER_H__ |  97 #endif  // CHROMEOS_PLATFORM_UPDATE_ENGINE_HTTP_FETCHER_H__ | 
| OLD | NEW |