syslog-ng source
persist-state.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2002-2012 Balabit
3  * Copyright (c) 1998-2012 Balázs Scheidler
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 
25 #ifndef PERSIST_STATE_H_INCLUDED
26 #define PERSIST_STATE_H_INCLUDED
27 
28 #include "syslog-ng.h"
29 
30 typedef struct _PersistFileHeader
31 {
32  union
33  {
34  struct
35  {
36  /* should contain SLP4, everything is Big-Endian */
37 
38  /* 64 bytes for file header */
39  gchar magic[4];
40  /* should be zero, any non-zero value is not supported and causes the state to be dropped */
41  guint32 flags;
42  /* number of name-value keys in the file */
43  guint32 key_count;
44  /* space reserved for additional information in the header */
45  gchar __reserved1[52];
46  /* initial key store where the first couple of NV keys are stored, sized to align the header to 4k boundary */
47  gchar initial_key_store[4032];
48  };
49  gchar __padding[4096];
50  };
52 
53 typedef guint32 PersistEntryHandle;
54 
55 typedef struct
56 {
57  void (*handler)(gpointer user_data);
58  gpointer cookie;
60 
61 typedef struct _PersistEntry
62 {
64 } PersistEntry;
65 
67 {
68  gint version;
70  gchar *temp_filename;
71  gint fd;
73  GMutex mapped_lock;
75  guint32 current_size;
76  guint32 current_ofs;
77  gpointer current_map;
80 
81  /* keys being used */
82  GHashTable *keys;
86 };
87 
88 typedef struct _PersistState PersistState;
89 
90 gpointer persist_state_map_entry(PersistState *self, PersistEntryHandle handle);
91 void persist_state_unmap_entry(PersistState *self, PersistEntryHandle handle);
92 
93 PersistEntryHandle persist_state_alloc_entry(PersistState *self, const gchar *persist_name, gsize alloc_size);
94 PersistEntryHandle persist_state_lookup_entry(PersistState *self, const gchar *persist_name, gsize *size,
95  guint8 *version);
96 gboolean persist_state_entry_exists(PersistState *self, const gchar *persist_name);
97 gboolean persist_state_remove_entry(PersistState *self, const gchar *persist_name);
98 
99 gchar *persist_state_lookup_string(PersistState *self, const gchar *key, gsize *length, guint8 *version);
100 gboolean persist_state_rename_entry(PersistState *self, const gchar *old_key, const gchar *new_key);
101 gboolean persist_state_copy_entry(PersistState *self, const gchar *old_key, const gchar *new_key);
102 gboolean persist_state_move_entry(PersistState *self, const gchar *old_key, const gchar *new_key);
103 void persist_state_alloc_string(PersistState *self, const gchar *persist_name, const gchar *value, gssize len);
104 
106 
107 typedef void (*PersistStateForeachFunc)(gchar *name, gint entry_size, gpointer entry, gpointer userdata);
108 void persist_state_foreach_entry(PersistState *self, PersistStateForeachFunc func, gpointer userdata);
109 
110 gboolean persist_state_start(PersistState *self);
111 gboolean persist_state_start_edit(PersistState *self);
112 gboolean persist_state_start_dump(PersistState *self);
113 
114 const gchar *persist_state_get_filename(PersistState *self);
115 
116 gboolean persist_state_commit(PersistState *self);
117 void persist_state_cancel(PersistState *self);
118 
119 PersistState *persist_state_new(const gchar *filename);
120 void persist_state_free(PersistState *self);
121 
122 void persist_state_set_global_error_handler(PersistState *self, void (*handler)(gpointer user_data),
123  gpointer user_data);
124 
125 #endif
const gchar * name
Definition: debugger.c:265
void version(void)
Definition: dqtool.c:719
gboolean persist_state_start_edit(PersistState *self)
Definition: persist-state.c:963
gboolean persist_state_rename_entry(PersistState *self, const gchar *old_key, const gchar *new_key)
Definition: persist-state.c:332
void persist_state_foreach_entry(PersistState *self, PersistStateForeachFunc func, gpointer userdata)
Definition: persist-state.c:872
gboolean persist_state_commit(PersistState *self)
Definition: persist-state.c:990
const gchar * persist_state_get_filename(PersistState *self)
Definition: persist-state.c:947
void persist_state_alloc_string(PersistState *self, const gchar *persist_name, const gchar *value, gssize len)
Definition: persist-state.c:912
void persist_state_set_global_error_handler(PersistState *self, void(*handler)(gpointer user_data), gpointer user_data)
Definition: persist-state.c:1065
void persist_state_free(PersistState *self)
Definition: persist-state.c:1058
gboolean persist_state_move_entry(PersistState *self, const gchar *old_key, const gchar *new_key)
Definition: persist-state.c:385
PersistState * persist_state_new(const gchar *filename)
Definition: persist-state.c:1049
gboolean persist_state_remove_entry(PersistState *self, const gchar *persist_name)
Definition: persist-state.c:836
guint32 PersistEntryHandle
Definition: persist-state.h:53
void(* PersistStateForeachFunc)(gchar *name, gint entry_size, gpointer entry, gpointer userdata)
Definition: persist-state.h:107
void persist_state_unmap_entry(PersistState *self, PersistEntryHandle handle)
Definition: persist-state.c:767
gboolean persist_state_entry_exists(PersistState *self, const gchar *persist_name)
Definition: persist-state.c:829
gpointer persist_state_map_entry(PersistState *self, PersistEntryHandle handle)
Definition: persist-state.c:752
gboolean persist_state_copy_entry(PersistState *self, const gchar *old_key, const gchar *new_key)
Definition: persist-state.c:363
gboolean persist_state_start(PersistState *self)
Definition: persist-state.c:973
PersistEntryHandle persist_state_lookup_entry(PersistState *self, const gchar *persist_name, gsize *size, guint8 *version)
Definition: persist-state.c:810
gboolean persist_state_start_dump(PersistState *self)
Definition: persist-state.c:953
PersistEntryHandle persist_state_alloc_entry(PersistState *self, const gchar *persist_name, gsize alloc_size)
Definition: persist-state.c:790
void persist_state_free_entry(PersistEntryHandle handle)
void persist_state_cancel(PersistState *self)
Definition: persist-state.c:1035
gchar * persist_state_lookup_string(PersistState *self, const gchar *key, gsize *length, guint8 *version)
Definition: persist-state.c:885
Definition: persist-state.h:62
PersistEntryHandle ofs
Definition: persist-state.h:63
Definition: persist-state.h:31
guint32 flags
Definition: persist-state.h:41
guint32 key_count
Definition: persist-state.h:43
Definition: persist-state.h:56
gpointer cookie
Definition: persist-state.h:58
Definition: persist-state.h:67
gpointer current_map
Definition: persist-state.h:77
PersistStateErrorHandler error_handler
Definition: persist-state.h:79
PersistFileHeader * header
Definition: persist-state.h:78
gint current_key_ofs
Definition: persist-state.h:84
gint version
Definition: persist-state.h:68
GCond mapped_release_cond
Definition: persist-state.h:74
PersistEntryHandle current_key_block
Definition: persist-state.h:83
gchar * committed_filename
Definition: persist-state.h:69
guint32 current_ofs
Definition: persist-state.h:76
gint fd
Definition: persist-state.h:71
GHashTable * keys
Definition: persist-state.h:82
GMutex mapped_lock
Definition: persist-state.h:73
guint32 current_size
Definition: persist-state.h:75
gint mapped_counter
Definition: persist-state.h:72
gint current_key_size
Definition: persist-state.h:85
gchar * temp_filename
Definition: persist-state.h:70
GString * value
Definition: test_decode.c:28
struct tm key
Definition: cache.c:63