2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
42#ifndef WEB_HTTP_CLIENT_SOCKETCONTEXTUPGRADEFACTORYSELECTOR_H
43#define WEB_HTTP_CLIENT_SOCKETCONTEXTUPGRADEFACTORYSELECTOR_H
45#include "web/http/SocketContextUpgradeFactorySelector.h"
46#include "web/http/client/SocketContextUpgradeFactory.h"
50#ifndef DOXYGEN_SHOULD_SKIP_THIS
54namespace web::http::client {
64 SocketContextUpgradeFactory*
load(
const std::string& socketContextUpgradeName)
override;
69 SocketContextUpgradeFactory*
select(
const std::string& protocols, Request& req);
70 SocketContextUpgradeFactory*
select(Request& req, Response& res)
override;
static FileReader * open(const std::string &path)
void pipe(Sink *sink, const std::function< void(int)> &callback)
void sendToPeer(const std::string &data) const
const std::string & getConnectionName() const
SocketConnection * getSocketConnection() const
virtual void switchSocketContext(SocketContext *newSocketContext)
void sendToPeer(const char *chunk, std::size_t chunkLen) const final
bool streamToPeer(core::pipe::Source *source) const
static std::string contentType(const std::string &file)
MimeTypes operator=(const MimeTypes &)=delete
MimeTypes(const MimeTypes &)=delete
static std::map< std::string, std::string > mimeType
core::socket::stream::SocketContext * create(core::socket::stream::SocketConnection *socketConnection) final
virtual std::string name()=0
virtual bool execute(Request *request)=0
CiStringMap< std::string > headers
Request & set(const std::string &field, const std::string &value, bool overwrite=true)
TransferEncoding transferEncoding
ConnectionState connectionState
std::size_t contentLengthSent
void onSourceEof() override
CiStringMap< std::string > cookies
Request & cookie(const std::string &name, const std::string &value)
Request(Request &&) noexcept
CiStringMap< std::string > trailer
void onSourceError(int errnum) override
std::string header(const std::string &field)
std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> onResponseReceived
Request & sendFragment(const std::string &data)
bool sendFile(const std::string &file, const std::function< void(int errnum)> &onStatus, const std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> &onResponseReceived, const std::function< void(const std::shared_ptr< Request > &, const std::string &)> &onResponseParseError=responseParseError)
Request & query(const std::string &key, const std::string &value)
bool upgrade(const std::string &url, const std::string &protocols, const std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> &onResponseReceived, const std::function< void(const std::shared_ptr< Request > &, const std::string &)> &onResponseParseError=responseParseError)
void onSourceData(const char *chunk, std::size_t chunkLen) override
bool executeSendFragment(const char *chunk, std::size_t chunkLen)
const CiStringMap< std::string > & getQueries() const
const CiStringMap< std::string > & getCookies() const
Request & setTrailer(const std::string &field, const std::string &value, bool overwrite=true)
Request & cookie(const std::map< std::string, std::string > &cookies)
web::http::client::SocketContext * getSocketContext() const
static void responseParseError(const std::shared_ptr< Request > &request, const std::string &message)
void setMasterRequest(const std::shared_ptr< Request > &masterRequest)
std::function< void(const std::shared_ptr< Request > &request, const std::string &message)> onResponseParseError
CiStringMap< std::string > queries
Request & set(const std::map< std::string, std::string > &headers, bool overwrite=true)
std::size_t contentLength
web::http::client::SocketContext * socketContext
Request(web::http::client::SocketContext *socketContext, const std::string &host)
std::string hostFieldValue
Request & append(const std::string &field, const std::string &value)
Request & sendFragment(const char *chunk, std::size_t chunkLen)
std::list< RequestCommand * > requestCommands
void deliverResponse(const std::shared_ptr< Request > &request, const std::shared_ptr< Response > &response)
bool send(const char *chunk, std::size_t chunkLen, const std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> &onResponseReceived, const std::function< void(const std::shared_ptr< Request > &, const std::string &)> &onResponseParseError=responseParseError)
const CiStringMap< std::string > & getHeaders() const
Request & host(const std::string &hostFieldValue)
bool send(const std::string &chunk, const std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> &onResponseReceived, const std::function< void(const std::shared_ptr< Request > &, const std::string &)> &onResponseParseError=responseParseError)
std::weak_ptr< Request > masterRequest
Request & type(const std::string &type)
bool end(const std::function< void(const std::shared_ptr< Request > &, const std::shared_ptr< Response > &)> &onResponseReceived, const std::function< void(const std::shared_ptr< Request > &, const std::string &)> &onResponseParseError=responseParseError)
void deliverResponseParseError(const std::shared_ptr< Request > &request, const std::string &message)
void upgrade(const std::shared_ptr< Response > &response, const std::function< void(const std::string &)> &status)
bool executeSendFile(const std::string &file, const std::function< void(int)> &onStatus)
bool executeUpgrade(const std::string &url, const std::string &protocols)
void onSourceConnect(core::pipe::Source *source) override
const std::string & get(const std::string &key, int i=0) const
SocketContextUpgradeFactory * select(Request &req, Response &res) override
SocketContextUpgradeFactory * load(const std::string &socketContextUpgradeName) override
static SocketContextUpgradeFactorySelector * instance()
SocketContextUpgradeFactory * select(const std::string &protocols, Request &req)
void checkRefCount() final
void requestPrepared(Request &&request)
void requestDelivered(Request &&request, bool success)
SendFileCommand(const std::string &file, const std::function< void(int)> &onStatus)
SendFragmentCommand(const char *chunk, std::size_t chunkLen)
SendHeaderCommand()=default
UpgradeCommand(const std::string &url, const std::string &protocols)
std::string to_http_date(struct tm *tm)
std::string url_encode(const std::string &text)
std::string file_mod_http_date(const std::string &filePath)
bool ciEquals(const std::string &str1, const std::string &str2)
bool ciContains(const std::string &str1, const std::string &str2)
#define to_hex_str(int_val)