syslog-ng source
logproto-http-server.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2025 One Identity
3  * Copyright (c) 2025 Hofi <hofione@gmail.com>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation; either
8  * version 2.1 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
18  *
19  * As an additional exemption you are allowed to compile & link against the
20  * OpenSSL libraries as published by the OpenSSL project. See the file
21  * COPYING for details.
22  *
23  */
24 #ifndef LOGPROTO_HTTP_SERVER_INCLUDED
25 #define LOGPROTO_HTTP_SERVER_INCLUDED
26 
29 
30 static const gchar http_too_many_request_msg[] = "HTTP/1.1 429 Too Many Requests";
31 static const gchar http_bad_request_msg[] = "HTTP/1.1 400 Bad Request";
32 static const gchar http_ok_msg[] = "HTTP/1.1 200 OK";
33 
34 typedef struct _LogProtoHTTPServerOptions
35 {
36  LogProtoServerOptions super;
37  gboolean close_after_send;
38 
40 
41 typedef union _LogProtoHTTPServerOptionsStorage
42 {
43  LogProtoServerOptionsStorage storage;
45 
47 // _Static_assert() is a C11 feature, so we use a typedef trick to perform the static assertion
49  sizeof(LogProtoServerOptionsStorage) >= sizeof(LogProtoHTTPServerOptions) ? 1 : -1];
50 
51 typedef struct _LogProtoHTTPServer LogProtoHTTPServer;
53 {
54  LogProtoTextServer super;
56 
57  GString *(*request_processor)(LogProtoHTTPServer *s, LogProtoBufferedServerState *state,
58  const guchar *buffer_start, gsize buffer_bytes);
59  gint (*request_header_checker)(LogProtoHTTPServer *self, gchar *buffer_start, gsize buffer_bytes);
60  GString *(*response_header_composer)(LogProtoHTTPServer *self, const gchar *data, gsize data_len,
61  gboolean close_after_sent);
62  GString *(*response_body_composer)(LogProtoHTTPServer *self);
63  gssize (*response_sender)(LogProtoHTTPServer *self, const gchar *data, gsize data_len, gboolean close_after_sent);
64 };
65 
66 void log_proto_http_server_options_defaults(LogProtoServerOptionsStorage *options);
67 void log_proto_http_server_options_init(LogProtoServerOptionsStorage *options, GlobalConfig *cfg);
68 void log_proto_http_server_options_destroy(LogProtoServerOptionsStorage *options);
69 gboolean log_proto_http_server_options_validate(LogProtoServerOptionsStorage *options);
71  LogProtoServerOptionsStorage *options,
72  gboolean value);
73 
74 LogProtoServer *log_proto_http_server_new(LogTransport *transport,
75  const LogProtoServerOptionsStorage *options);
76 void log_proto_http_server_init(LogProtoHTTPServer *self, LogTransport *transport,
77  const LogProtoServerOptionsStorage *options);
78 
79 #endif
char static_assert_size_check_LogProtoHTTPServerOptions[sizeof(LogProtoServerOptionsStorage) >=sizeof(LogProtoHTTPServerOptions) ? 1 :-1]
Definition: logproto-http-server.h:49
void log_proto_http_server_options_set_close_after_send(LogProtoServerOptionsStorage *options, gboolean value)
Definition: logproto-http-server.c:201
void log_proto_http_server_init(LogProtoHTTPServer *self, LogTransport *transport, const LogProtoServerOptionsStorage *options)
Definition: logproto-http-server.c:131
void log_proto_http_server_options_defaults(LogProtoServerOptionsStorage *options)
Definition: logproto-http-server.c:162
gboolean log_proto_http_server_options_validate(LogProtoServerOptionsStorage *options)
Definition: logproto-http-server.c:195
void log_proto_http_server_options_init(LogProtoServerOptionsStorage *options, GlobalConfig *cfg)
Definition: logproto-http-server.c:175
LogProtoServer * log_proto_http_server_new(LogTransport *transport, const LogProtoServerOptionsStorage *options)
Definition: logproto-http-server.c:147
void log_proto_http_server_options_destroy(LogProtoServerOptionsStorage *options)
Definition: logproto-http-server.c:185
Definition: logproto-buffered-server.h:37
Definition: logproto-http-server.h:35
LogProtoServerOptions super
Definition: logproto-http-server.h:36
gboolean close_after_send
Definition: logproto-http-server.h:37
Definition: logproto-http-server.h:53
const LogProtoHTTPServerOptionsStorage * options
Definition: logproto-http-server.h:55
gssize(* response_sender)(LogProtoHTTPServer *self, const gchar *data, gsize data_len, gboolean close_after_sent)
Definition: logproto-http-server.h:63
LogProtoTextServer super
Definition: logproto-http-server.h:54
gint(* request_header_checker)(LogProtoHTTPServer *self, gchar *buffer_start, gsize buffer_bytes)
Definition: logproto-http-server.h:59
GlobalConfig * cfg
Definition: test_batched_ack_tracker.c:34
GString * value
Definition: test_decode.c:28
struct @95 state
Definition: logproto-http-server.h:42
LogProtoHTTPServerOptions super
Definition: logproto-http-server.h:44
LogProtoServerOptionsStorage storage
Definition: logproto-http-server.h:43