]> granicus.if.org Git - icinga2/blob - lib/base/netstring.hpp
Merge pull request #7185 from Icinga/bugfix/gelfwriter-wrong-log-facility
[icinga2] / lib / base / netstring.hpp
1 /* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
2
3 #ifndef NETSTRING_H
4 #define NETSTRING_H
5
6 #include "base/i2-base.hpp"
7 #include "base/stream.hpp"
8 #include "base/tlsstream.hpp"
9 #include <memory>
10 #include <boost/asio/spawn.hpp>
11
12 namespace icinga
13 {
14
15 class String;
16
17 /**
18  * Helper functions for reading/writing messages in the netstring format.
19  *
20  * @see https://cr.yp.to/proto/netstrings.txt
21  *
22  * @ingroup base
23  */
24 class NetString
25 {
26 public:
27         static StreamReadStatus ReadStringFromStream(const Stream::Ptr& stream, String *message, StreamReadContext& context,
28                 bool may_wait = false, ssize_t maxMessageLength = -1);
29         static String ReadStringFromStream(const std::shared_ptr<AsioTlsStream>& stream, ssize_t maxMessageLength = -1);
30         static String ReadStringFromStream(const std::shared_ptr<AsioTlsStream>& stream,
31                 boost::asio::yield_context yc, ssize_t maxMessageLength = -1);
32         static size_t WriteStringToStream(const Stream::Ptr& stream, const String& message);
33         static size_t WriteStringToStream(const std::shared_ptr<AsioTlsStream>& stream, const String& message);
34         static size_t WriteStringToStream(const std::shared_ptr<AsioTlsStream>& stream, const String& message, boost::asio::yield_context yc);
35         static void WriteStringToStream(std::ostream& stream, const String& message);
36
37 private:
38         NetString();
39 };
40
41 }
42
43 #endif /* NETSTRING_H */