summaryrefslogtreecommitdiffhomepage
path: root/dev/lib/utility
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-08-24 14:13:34 +0200
committerAmlal El Mahrouss <amlal@nekernel.org>2025-08-24 14:13:34 +0200
commitb0d0e894a4394eed25dbb5cead12edd08a510a92 (patch)
tree788915894a49d5267391f3bf6b9c41a1c5fe40b8 /dev/lib/utility
parentd02bd0eb656b885bdf48088529183c40df8bd9c1 (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.hpp36
-rw-r--r--dev/lib/utility/chunk_string.hpp17
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_;
}