#pragma once #include "../Streams/Stream.hpp" #include "HttpUtils.hpp" #include "WebSocket.hpp" #include "TessesFramework/Filesystem/LocalFS.hpp" #include "TessesFramework/Filesystem/VFSFix.hpp" namespace Tesses::Framework::Http { class HttpRequestBody { public: virtual void HandleHeaders(HttpDictionary& dict); virtual void Write(std::shared_ptr strm)=0; virtual ~HttpRequestBody(); }; class StreamHttpRequestBody : public HttpRequestBody { std::shared_ptr strm; std::string mimeType; public: StreamHttpRequestBody(std::shared_ptr strm, std::string mimeType); void HandleHeaders(HttpDictionary& dict); void Write(std::shared_ptr strm); ~StreamHttpRequestBody(); }; class TextHttpRequestBody : public HttpRequestBody { std::string text; std::string mimeType; public: TextHttpRequestBody(std::string text, std::string mimeType); void HandleHeaders(HttpDictionary& dict); void Write(std::shared_ptr strm); ~TextHttpRequestBody(); }; class HttpRequest { public: HttpRequest(); std::string trusted_root_cert_bundle; bool ignoreSSLErrors; bool followRedirects; std::string method; std::string url; std::string unixSocket; HttpDictionary requestHeaders; HttpRequestBody* body; static std::shared_ptr EstablishConnection(Uri uri,bool ignoreSSLErrors,std::string trusted_root_cert_bundle); static std::shared_ptr EstablishUnixPathConnection(std::string unixPath, Uri uri, bool ignoreSSLErrors, std::string trusted_root_cert_bundle); void SendRequest(std::shared_ptr strm); }; class HttpResponse { private: bool owns; std::shared_ptr handleStrm; public: HttpResponse(std::shared_ptr strm); HttpResponse(HttpRequest& request); std::string version; StatusCode statusCode; HttpDictionary responseHeaders; std::string ReadAsString(); std::shared_ptr ReadAsStream(); void CopyToStream(std::shared_ptr strm); std::shared_ptr GetInternalStream(); ~HttpResponse(); }; void DownloadToStreamSimple(std::string url, std::shared_ptr strm); void DownloadToFileSimple(std::string url, std::shared_ptr vfs, Tesses::Framework::Filesystem::VFSPath path); void DownloadToFileSimple(std::string url, Tesses::Framework::Filesystem::VFSPath path); std::string DownloadToStringSimple(std::string url); bool WebSocketClientSuccessDefault(HttpDictionary& dict,bool v); void WebSocketClient(std::string url, HttpDictionary& requestHeaders, std::shared_ptr wsc, std::function cb=WebSocketClientSuccessDefault); void DownloadUnixSocketToStreamSimple(std::string unixSocket,std::string url, std::shared_ptr strm); void DownloadUnixSocketToFileSimple(std::string unixSocket,std::string url, std::shared_ptr vfs, Tesses::Framework::Filesystem::VFSPath path); void DownloadUnixSocketToFileSimple(std::string unixSocket,std::string url, Tesses::Framework::Filesystem::VFSPath path); std::string DownloadUnixSocketToStringSimple(std::string unixSocket,std::string url); void WebSocketUnixSocketClient(std::string unixSocket,std::string url, HttpDictionary& requestHeaders, std::shared_ptr wsc, std::function cb=WebSocketClientSuccessDefault); }