drogon
C++14/17-based HTTP application framework
Toggle main menu visibility
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
21
namespace
drogon
22
{
23
class
HttpRequest
;
24
using
HttpRequestPtr = std::shared_ptr<HttpRequest>;
25
26
class
RequestStreamReader
;
27
using
RequestStreamReaderPtr = std::shared_ptr<RequestStreamReader>;
28
29
struct
MultipartHeader
30
{
31
std::string name;
32
std::string filename;
33
std::string contentType;
34
};
35
36
class
DROGON_EXPORT
RequestStream
37
{
38
public
:
39
virtual
~RequestStream
() =
default
;
40
virtual
void
setStreamReader(RequestStreamReaderPtr reader) = 0;
41
};
42
43
using
RequestStreamPtr = std::shared_ptr<RequestStream>;
44
45
namespace
internal
46
{
47
DROGON_EXPORT RequestStreamPtr createRequestStream(
const
HttpRequestPtr &req);
48
}
49
50
enum class
StreamErrorCode
51
{
52
kNone = 0,
53
kBadRequest,
54
kConnectionBroken
55
};
56
57
class
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
91
class
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
drogon::HttpRequest
Abstract class for webapp developer to get or set the Http request;.
Definition
HttpRequest.h:81
drogon::RequestStreamReader
Definition
RequestStream.h:92
drogon::RequestStream
Definition
RequestStream.h:37
drogon
Drogon Test is a minimal effort test framework developed because the major C++ test frameworks doesn'...
Definition
Attribute.h:23
drogon::MultipartHeader
Definition
RequestStream.h:30
lib
inc
drogon
RequestStream.h
Generated by
1.17.0