1
#pragma once
2

            
3
#include <memory>
4

            
5
#include "source/extensions/common/async_files/async_file_handle.h"
6
#include "source/extensions/filters/http/cache_v2/http_cache.h"
7
#include "source/extensions/http/cache_v2/file_system_http_cache/cache_file_fixed_block.h"
8

            
9
namespace Envoy {
10
namespace Extensions {
11
namespace HttpFilters {
12
namespace CacheV2 {
13
namespace FileSystemHttpCache {
14

            
15
class CacheSession;
16
class FileSystemHttpCache;
17

            
18
using Envoy::Extensions::Common::AsyncFiles::AsyncFileHandle;
19

            
20
class FileLookupContext {
21
public:
22
  static void begin(Event::Dispatcher& dispatcher, AsyncFileHandle handle,
23
                    HttpCache::LookupCallback&& callback);
24

            
25
private:
26
  FileLookupContext(Event::Dispatcher& dispatcher, AsyncFileHandle handle,
27
                    HttpCache::LookupCallback&& callback);
28
  void getHeaderBlock();
29
  void getHeaders();
30
  void getTrailers();
31
  void done(absl::StatusOr<LookupResult>&& result);
32

            
33
  Event::Dispatcher& dispatcher_;
34
  AsyncFileHandle file_handle_;
35
  CacheFileFixedBlock header_block_;
36
  HttpCache::LookupCallback callback_;
37
  LookupResult result_;
38
};
39

            
40
} // namespace FileSystemHttpCache
41
} // namespace CacheV2
42
} // namespace HttpFilters
43
} // namespace Extensions
44
} // namespace Envoy