Repository navigation
Expand file tree
/
Copy pathStream.hpp
More file actions
58 lines (42 loc) · 1.82 KB
/
Copy pathStream.hpp
File metadata and controls
58 lines (42 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#ifndef SRC_STREAM_HPP_
#define SRC_STREAM_HPP_
#include "Mux.hpp"
#include "Request.hpp"
#include "Server.hpp"
#include <map>
class Stream {
public:
Stream();
void SetRing(struct io_uring *ring);
void SetServer(Server *server);
void SetCacheResource(uint64_t resource_id, const std::string &header_data,
std::string path, bool is_completed);
void SetStreamingResource(uint64_t resource_id,
const std::string &header_data);
void AddWriteHeaders(struct Request *stream, struct Mux *mux);
void HandleWriteHeaders(struct Request *stream);
int AddWriteStreamRequest(struct Request *stream);
virtual bool HandleExistsResource(struct Request *entry);
void AbortStream(uint64_t resource_id);
void CloseStream(uint64_t resource_id);
int NotifyStream(uint64_t resource_id, void *buffer, int size);
virtual int NotifyCacheCompleted(uint64_t resource_id, struct iovec *buffer, int size);
int AddWriteFromCacheRequest(struct Request *stream, struct Mux *mux);
bool HandleReadCacheRequest(struct Request *stream, int readed);
int HandleCopyCacheRequest(struct Request *stream, int readed);
void ProcessNext(struct Request *stream);
int RemoveRequest(struct Request *request);
void ReleaseErrorAllWaitingRequest(uint64_t resource_id, int status_code);
struct Mux *GetResource(uint64_t resource_id);
bool ExistsResource(uint64_t resource_id);
virtual void HandleCleanup(struct Request *request);
protected:
struct io_uring *ring_;
Server *server_;
std::unordered_map<uint64_t, struct Mux *> resources_;
std::map<long, uint64_t> resource_ttl_;
struct Mux *CreateMux(uint64_t resource_id, std::string url);
void ReleaseResource(uint64_t resource_id);
void AddResourceTTL(uint64_t resource_id, int timeout);
};
#endif