Skip to content

Commit b91f15a

Browse files
committed
appmodel: extract AppObjectGenerator base class to its own module
Signed-off-by: Balazs Scheidler <balazs.scheidler@axoflow.com>
1 parent 2663529 commit b91f15a

File tree

5 files changed

+168
-103
lines changed

5 files changed

+168
-103
lines changed

modules/appmodel/CMakeLists.txt

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ set (APPMODEL_SOURCES
99
appmodel-parser.c
1010
appmodel-plugin.c
1111
appmodel-context.c
12+
app-object-generator.c
1213
app-parser-generator.c
1314
application.c
1415
)

modules/appmodel/Makefile.am

+2
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ modules_appmodel_libappmodel_la_SOURCES = \
1010
modules/appmodel/appmodel-plugin.c \
1111
modules/appmodel/appmodel-context.c \
1212
modules/appmodel/appmodel-context.h \
13+
modules/appmodel/app-object-generator.c \
14+
modules/appmodel/app-object-generator.h \
1315
modules/appmodel/app-parser-generator.c \
1416
modules/appmodel/app-parser-generator.h \
1517
modules/appmodel/application.c \
+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
/*
2+
* Copyright (c) 2017 Balabit
3+
* Copyright (c) 2017 Balazs Scheidler <balazs.scheidler@balabit.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+
25+
#include "app-object-generator.h"
26+
#include "appmodel.h"
27+
28+
#include <string.h>
29+
30+
gboolean
31+
app_object_generator_is_application_included(AppObjectGenerator *self, const gchar *app_name)
32+
{
33+
/* include everything if we don't have the option */
34+
if (!self->included_apps)
35+
return TRUE;
36+
return strstr(self->included_apps, app_name) != NULL;
37+
}
38+
39+
gboolean
40+
app_object_generator_is_application_excluded(AppObjectGenerator *self, const gchar *app_name)
41+
{
42+
if (!self->excluded_apps)
43+
return FALSE;
44+
return strstr(self->excluded_apps, app_name) != NULL;
45+
}
46+
47+
static gboolean
48+
_parse_auto_parse_arg(AppObjectGenerator *self, CfgArgs *args, const gchar *reference)
49+
{
50+
const gchar *v = cfg_args_get(args, "auto-parse");
51+
52+
if (v)
53+
self->is_parsing_enabled = cfg_process_yesno(v);
54+
else
55+
self->is_parsing_enabled = TRUE;
56+
return TRUE;
57+
}
58+
59+
static gboolean
60+
_parse_auto_parse_exclude_arg(AppObjectGenerator *self, CfgArgs *args, const gchar *reference)
61+
{
62+
const gchar *v = cfg_args_get(args, "auto-parse-exclude");
63+
if (!v)
64+
return TRUE;
65+
self->excluded_apps = g_strdup(v);
66+
return TRUE;
67+
}
68+
69+
static gboolean
70+
_parse_auto_parse_include_arg(AppObjectGenerator *self, CfgArgs *args, const gchar *reference)
71+
{
72+
const gchar *v = cfg_args_get(args, "auto-parse-include");
73+
if (!v)
74+
return TRUE;
75+
self->included_apps = g_strdup(v);
76+
return TRUE;
77+
}
78+
79+
gboolean
80+
app_object_generator_parse_arguments_method(AppObjectGenerator *self, CfgArgs *args, const gchar *reference)
81+
{
82+
g_assert(args != NULL);
83+
84+
if (!_parse_auto_parse_arg(self, args, reference))
85+
return FALSE;
86+
if (!_parse_auto_parse_exclude_arg(self, args, reference))
87+
return FALSE;
88+
if (!_parse_auto_parse_include_arg(self, args, reference))
89+
return FALSE;
90+
return TRUE;
91+
}
92+
93+
static gboolean
94+
_generate(CfgBlockGenerator *s, GlobalConfig *cfg, gpointer args, GString *result, const gchar *reference)
95+
{
96+
AppObjectGenerator *self = (AppObjectGenerator *) s;
97+
CfgArgs *cfgargs = (CfgArgs *)args;
98+
99+
if (!self->parse_arguments(self, cfgargs, reference))
100+
return FALSE;
101+
102+
self->generate_config(self, cfg, result);
103+
104+
return TRUE;
105+
}
106+
107+
void
108+
app_object_generator_init_instance(AppObjectGenerator *self, gint context, const gchar *name)
109+
{
110+
cfg_block_generator_init_instance(&self->super, context, name);
111+
self->super.generate = _generate;
112+
self->parse_arguments = app_object_generator_parse_arguments_method;
113+
}
+49
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/*
2+
* Copyright (c) 2017 Balabit
3+
* Copyright (c) 2017 Balazs Scheidler <balazs.scheidler@balabit.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+
25+
#ifndef APPMODEL_APP_OBJECT_GENERATOR_H_INCLUDED
26+
#define APPMODEL_APP_OBJECT_GENERATOR_H_INCLUDED
27+
28+
#include "plugin.h"
29+
30+
typedef struct _AppObjectGenerator AppObjectGenerator;
31+
32+
struct _AppObjectGenerator
33+
{
34+
CfgBlockGenerator super;
35+
gboolean (*parse_arguments)(AppObjectGenerator *self, CfgArgs *args, const gchar *reference);
36+
void (*generate_config)(AppObjectGenerator *self, GlobalConfig *cfg, GString *result);
37+
const gchar *included_apps;
38+
const gchar *excluded_apps;
39+
gboolean is_parsing_enabled;
40+
};
41+
42+
gboolean app_object_generator_is_application_included(AppObjectGenerator *self, const gchar *app_name);
43+
gboolean app_object_generator_is_application_excluded(AppObjectGenerator *self, const gchar *app_name);
44+
45+
gboolean app_object_generator_parse_arguments_method(AppObjectGenerator *self, CfgArgs *args, const gchar *reference);
46+
void app_object_generator_init_instance(AppObjectGenerator *self, gint context, const gchar *name);
47+
48+
49+
#endif

modules/appmodel/app-parser-generator.c

+3-103
Original file line numberDiff line numberDiff line change
@@ -22,109 +22,9 @@
2222
*
2323
*/
2424

25-
#include "app-parser-generator.h"
25+
#include "app-object-generator.h"
2626
#include "appmodel.h"
2727

28-
#include <string.h>
29-
30-
typedef struct _AppObjectGenerator AppObjectGenerator;
31-
32-
struct _AppObjectGenerator
33-
{
34-
CfgBlockGenerator super;
35-
gboolean (*parse_arguments)(AppObjectGenerator *self, CfgArgs *args, const gchar *reference);
36-
void (*generate_config)(AppObjectGenerator *self, GlobalConfig *cfg, GString *result);
37-
const gchar *included_apps;
38-
const gchar *excluded_apps;
39-
gboolean is_parsing_enabled;
40-
};
41-
42-
static gboolean
43-
_is_application_included(AppObjectGenerator *self, const gchar *app_name)
44-
{
45-
/* include everything if we don't have the option */
46-
if (!self->included_apps)
47-
return TRUE;
48-
return strstr(self->included_apps, app_name) != NULL;
49-
}
50-
51-
static gboolean
52-
_is_application_excluded(AppObjectGenerator *self, const gchar *app_name)
53-
{
54-
if (!self->excluded_apps)
55-
return FALSE;
56-
return strstr(self->excluded_apps, app_name) != NULL;
57-
}
58-
59-
static gboolean
60-
_parse_auto_parse_arg(AppObjectGenerator *self, CfgArgs *args, const gchar *reference)
61-
{
62-
const gchar *v = cfg_args_get(args, "auto-parse");
63-
64-
if (v)
65-
self->is_parsing_enabled = cfg_process_yesno(v);
66-
else
67-
self->is_parsing_enabled = TRUE;
68-
return TRUE;
69-
}
70-
71-
static gboolean
72-
_parse_auto_parse_exclude_arg(AppObjectGenerator *self, CfgArgs *args, const gchar *reference)
73-
{
74-
const gchar *v = cfg_args_get(args, "auto-parse-exclude");
75-
if (!v)
76-
return TRUE;
77-
self->excluded_apps = g_strdup(v);
78-
return TRUE;
79-
}
80-
81-
static gboolean
82-
_parse_auto_parse_include_arg(AppObjectGenerator *self, CfgArgs *args, const gchar *reference)
83-
{
84-
const gchar *v = cfg_args_get(args, "auto-parse-include");
85-
if (!v)
86-
return TRUE;
87-
self->included_apps = g_strdup(v);
88-
return TRUE;
89-
}
90-
91-
92-
static gboolean
93-
app_object_generator_parse_arguments_method(AppObjectGenerator *self, CfgArgs *args, const gchar *reference)
94-
{
95-
g_assert(args != NULL);
96-
97-
if (!_parse_auto_parse_arg(self, args, reference))
98-
return FALSE;
99-
if (!_parse_auto_parse_exclude_arg(self, args, reference))
100-
return FALSE;
101-
if (!_parse_auto_parse_include_arg(self, args, reference))
102-
return FALSE;
103-
return TRUE;
104-
}
105-
106-
static gboolean
107-
_generate(CfgBlockGenerator *s, GlobalConfig *cfg, gpointer args, GString *result, const gchar *reference)
108-
{
109-
AppObjectGenerator *self = (AppObjectGenerator *) s;
110-
CfgArgs *cfgargs = (CfgArgs *)args;
111-
112-
if (!self->parse_arguments(self, cfgargs, reference))
113-
return FALSE;
114-
115-
self->generate_config(self, cfg, result);
116-
117-
return TRUE;
118-
}
119-
120-
void
121-
app_object_generator_init_instance(AppObjectGenerator *self, gint context, const gchar *name)
122-
{
123-
cfg_block_generator_init_instance(&self->super, context, name);
124-
self->super.generate = _generate;
125-
self->parse_arguments = app_object_generator_parse_arguments_method;
126-
}
127-
12828
/* app-parser() */
12929

13030
typedef struct _AppParserGenerator
@@ -220,10 +120,10 @@ _generate_application(Application *app, gpointer user_data)
220120
if (strcmp(self->topic, app->super.instance) != 0)
221121
return;
222122

223-
if (!_is_application_included(&self->super, app->super.name))
123+
if (!app_object_generator_is_application_included(&self->super, app->super.name))
224124
return;
225125

226-
if (_is_application_excluded(&self->super, app->super.name))
126+
if (app_object_generator_is_application_excluded(&self->super, app->super.name))
227127
return;
228128

229129
if (self->first_app_generated)

0 commit comments

Comments
 (0)