drogon
C++14/17-based HTTP application framework
Loading...
Searching...
No Matches
RequestStream.h
Go to the documentation of this file.
1
14#pragma once
15#include <drogon/exports.h>
16#include <string>
17#include <functional>
18#include <memory>
19#include <exception>
20
21namespace drogon
22{
23class HttpRequest;
24using HttpRequestPtr = std::shared_ptr<HttpRequest>;
25
27using RequestStreamReaderPtr = std::shared_ptr<RequestStreamReader>;
28
30{
31 std::string name;
32 std::string filename;
33 std::string contentType;
34};
35
36class DROGON_EXPORT RequestStream
37{
38 public:
39 virtual ~RequestStream() = default;
40 virtual void setStreamReader(RequestStreamReaderPtr reader) = 0;
41};
42
43using RequestStreamPtr = std::shared_ptr<RequestStream>;
44
45namespace internal
46{
47DROGON_EXPORT RequestStreamPtr createRequestStream(const HttpRequestPtr &req);
48}
49
50enum class StreamErrorCode
51{
52 kNone = 0,
53 kBadRequest,
54 kConnectionBroken
55};
56
57class StreamError final : public std::exception
58{
59 public:
60 const char *what() const noexcept override
61 {
62 return message_.data();
63 }
64
65 StreamErrorCode code() const
66 {
67 return code_;
68 }
69
70 StreamError(StreamErrorCode code, const std::string &message)
71 : message_(message), code_(code)
72 {
73 }
74
75 StreamError(StreamErrorCode code, std::string &&message)
76 : message_(std::move(message)), code_(code)
77 {
78 }
79
80 StreamError() = delete;
81
82 private:
83 std::string message_;
84 StreamErrorCode code_;
85};
86
91class DROGON_EXPORT RequestStreamReader
92{
93 public:
94 virtual ~RequestStreamReader() = default;
95 virtual void onStreamData(const char *, size_t) = 0;
96 virtual void onStreamFinish(std::exception_ptr) = 0;
97
98 using StreamDataCallback = std::function<void(const char *, size_t)>;
99 using StreamFinishCallback = std::function<void(std::exception_ptr)>;
100
101 // Create a handler with default implementation
102 static RequestStreamReaderPtr newReader(StreamDataCallback dataCb,
103 StreamFinishCallback finishCb);
104
105 // A handler that drops all data
106 static RequestStreamReaderPtr newNullReader();
107
108 using MultipartHeaderCallback = std::function<void(MultipartHeader header)>;
109
110 static RequestStreamReaderPtr newMultipartReader(
111 const HttpRequestPtr &req,
112 MultipartHeaderCallback headerCb,
113 StreamDataCallback dataCb,
114 StreamFinishCallback finishCb);
115};
116
117} // namespace drogon
Abstract class for webapp developer to get or set the Http request;.
Definition HttpRequest.h:81
Definition RequestStream.h:92
Definition RequestStream.h:37
Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...
Definition Attribute.h:23
Definition RequestStream.h:30