Upstream version 7.36.149.0
[platform/framework/web/crosswalk.git] / src / native_client_sdk / src / libraries / nacl_io / httpfs / http_fs_node.h
1 // Copyright 2013 The Chromium 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 #ifndef LIBRARIES_NACL_IO_HTTPFS_HTTP_FS_NODE_H_
6 #define LIBRARIES_NACL_IO_HTTPFS_HTTP_FS_NODE_H_
7
8 #include <map>
9 #include <string>
10 #include <vector>
11
12 #include "nacl_io/error.h"
13 #include "nacl_io/node.h"
14 #include "nacl_io/pepper_interface.h"
15
16 namespace nacl_io {
17
18 typedef std::map<std::string, std::string> StringMap_t;
19
20 class HttpFsNode : public Node {
21  public:
22   virtual Error FSync();
23   virtual Error GetDents(size_t offs,
24                          struct dirent* pdir,
25                          size_t count,
26                          int* out_bytes);
27   virtual Error GetStat(struct stat* stat);
28   virtual Error Read(const HandleAttr& attr,
29                      void* buf,
30                      size_t count,
31                      int* out_bytes);
32   virtual Error FTruncate(off_t size);
33   virtual Error Write(const HandleAttr& attr,
34                       const void* buf,
35                       size_t count,
36                       int* out_bytes);
37   virtual Error GetSize(off_t* out_size);
38
39   void SetCachedSize(off_t size);
40   void SetMode(int mode);
41
42  protected:
43   HttpFsNode(Filesystem* filesystem,
44              const std::string& url,
45              bool cache_content);
46
47  private:
48   Error GetStat_Locked(struct stat* stat);
49   Error OpenUrl(const char* method,
50                 StringMap_t* request_headers,
51                 ScopedResource* out_loader,
52                 ScopedResource* out_request,
53                 ScopedResource* out_response,
54                 int32_t* out_statuscode,
55                 StringMap_t* out_response_headers);
56
57   Error DownloadToCache();
58   Error ReadPartialFromCache(const HandleAttr& attr,
59                              void* buf,
60                              int count,
61                              int* out_bytes);
62   Error DownloadPartial(const HandleAttr& attr,
63                         void* buf,
64                         off_t count,
65                         int* out_bytes);
66
67   Error DownloadToTemp(off_t* out_bytes);
68
69   // Read as much as possible from |loader|, using |buffer_| as a scratch area.
70   Error ReadEntireResponseToTemp(const ScopedResource& loader,
71                                  off_t* out_bytes);
72   // Read as much as possible from |loader|, storing the result in
73   // |cached_data_|.
74   Error ReadEntireResponseToCache(const ScopedResource& loader, int* out_bytes);
75
76   // Read up to |count| bytes from |loader|, using |buffer_| as a scratch area.
77   Error ReadResponseToTemp(const ScopedResource& loader,
78                            int count,
79                            int* out_bytes);
80
81   // Read up to |count| bytes from |loader|, and store the result in |buf|,
82   // which is assumed to have |count| bytes free.
83   Error ReadResponseToBuffer(const ScopedResource& loader,
84                              void* buf,
85                              int count,
86                              int* out_bytes);
87
88   std::string url_;
89   std::vector<char> buffer_;
90
91   bool cache_content_;
92   bool has_cached_size_;
93   std::vector<char> cached_data_;
94
95   friend class HttpFs;
96 };
97
98 }  // namespace nacl_io
99
100 #endif  // LIBRARIES_NACL_IO_HTTPFS_HTTP_FS_NODE_H_