diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-08-24 14:13:34 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-08-24 14:13:34 +0200 |
| commit | b0d0e894a4394eed25dbb5cead12edd08a510a92 (patch) | |
| tree | 788915894a49d5267391f3bf6b9c41a1c5fe40b8 /dev/lib/utility | |
| parent | d02bd0eb656b885bdf48088529183c40df8bd9c1 (diff) | |
feat! use `chunk_string` in the CGI module. Add additional constructors
for `chunk_string`
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/lib/utility')
| -rw-r--r-- | dev/lib/utility/cgi_writer.hpp | 36 | ||||
| -rw-r--r-- | dev/lib/utility/chunk_string.hpp | 17 |
2 files changed, 34 insertions, 19 deletions
diff --git a/dev/lib/utility/cgi_writer.hpp b/dev/lib/utility/cgi_writer.hpp index 69d0170..70b32cf 100644 --- a/dev/lib/utility/cgi_writer.hpp +++ b/dev/lib/utility/cgi_writer.hpp @@ -7,9 +7,10 @@ #ifndef _SNU_CGI_WRITER_HPP #define _SNU_CGI_WRITER_HPP -#include <cstdio> -#include <string> +#include <lib/io/print.hpp> +#include <lib/utility/chunk_string.hpp> #include <sstream> +#include <format> namespace snu { @@ -20,18 +21,16 @@ namespace snu class basic_writer { private: - basic_writer& eval_(const std::basic_string<char>& mime, const std::basic_stringstream<char_type>& ss) noexcept + basic_writer& eval_(const snu::basic_chunk_string<char_type>& mime, const snu::basic_chunk_string<char_type>& ss) noexcept { - std::printf("Content-Type: %s\r\n", mime.c_str()); - std::printf("Server: %s\r\n", "socl-cgi-system"); - std::printf("Content-Length: %ld\r\n\r\n", ss.str().size()); + std::basic_stringstream<char_type> ss_out; - auto ss_cc = ss.str(); + ss_out << std::format("Content-Type: {}\r\n", mime.str()); + ss_out << std::format("Server: {}\r\n", "SOCL-CGI/1.0"); + ss_out << std::format("Content-Length: {}\r\n\r\n", ss.str().size()); + ss_out << ss.str(); - for (auto& ch : ss_cc) - { - std::printf("%c", ch); - } + snu::io::print(ss_out.str()); return *this; } @@ -44,27 +43,32 @@ namespace snu basic_writer(const basic_writer&) = default; public: - basic_writer& binary(const std::basic_stringstream<char_type>& ss_in) + friend void operator<<(basic_writer& self, const snu::basic_chunk_string<char_type>& ss_in) + { + self = self.eval_("text/plain", ss_in); + } + + basic_writer& binary(const snu::basic_chunk_string<char_type>& ss_in) { return this->eval_("application/octet-stream", ss_in); } - basic_writer& html(const std::basic_stringstream<char_type>& ss_in) + basic_writer& html(const snu::basic_chunk_string<char_type>& ss_in) { return this->eval_("text/html", ss_in); } - basic_writer& xml(const std::basic_stringstream<char_type>& ss_in) + basic_writer& xml(const snu::basic_chunk_string<char_type>& ss_in) { return this->eval_("application/xml", ss_in); } - basic_writer& json(const std::basic_stringstream<char_type>& ss_in) + basic_writer& json(const snu::basic_chunk_string<char_type>& ss_in) { return this->eval_("application/json", ss_in); } - basic_writer& js(const std::basic_stringstream<char_type>& ss_in) + basic_writer& js(const snu::basic_chunk_string<char_type>& ss_in) { return this->eval_("text/javascript", ss_in); } diff --git a/dev/lib/utility/chunk_string.hpp b/dev/lib/utility/chunk_string.hpp index 6b060ae..79e0dd6 100644 --- a/dev/lib/utility/chunk_string.hpp +++ b/dev/lib/utility/chunk_string.hpp @@ -29,8 +29,19 @@ namespace snu constexpr const static auto max_chunk_size = 4096; public: - explicit basic_chunk_string() = default; - virtual ~basic_chunk_string() = default; + basic_chunk_string() = default; + + basic_chunk_string(const char_type* in) + { + this->operator+=(in); + } + + basic_chunk_string(const std::basic_string<char_type>& in) + { + this->operator+=(in); + } + + ~basic_chunk_string() = default; basic_chunk_string& operator=(const basic_chunk_string&) = default; basic_chunk_string(const basic_chunk_string&) = default; @@ -56,7 +67,7 @@ namespace snu return *this; } - const std::basic_string<char_type>& str() noexcept + const std::basic_string<char_type>& str() const noexcept { return packed_chunks_; } |
