Merge branch 'swima-reserved'
[strongswan.git] / src / libimcv / swima / swima_event.c
1 /*
2 * Copyright (C) 2017 Andreas Steffen
3 * HSR Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 #include "swima_event.h"
17 #include "swima_data_model.h"
18
19 typedef struct private_swima_event_t private_swima_event_t;
20
21 /**
22 * Private data of a swima_event_t object.
23 *
24 */
25 struct private_swima_event_t {
26
27 /**
28 * Public swima_event_t interface.
29 */
30 swima_event_t public;
31
32 /**
33 * Event ID
34 */
35 uint32_t eid;
36
37 /**
38 * Timestamp
39 */
40 chunk_t timestamp;
41
42 /**
43 * Action
44 */
45 uint8_t action;
46
47 /**
48 * Software [Identifier] record
49 */
50 swima_record_t *sw_record;
51
52 /**
53 * Reference count
54 */
55 refcount_t ref;
56 };
57
58 METHOD(swima_event_t, get_eid, uint32_t,
59 private_swima_event_t *this, chunk_t *timestamp)
60 {
61 if (timestamp)
62 {
63 *timestamp = this->timestamp;
64 }
65 return this->eid;
66 }
67
68 METHOD(swima_event_t, get_action, uint8_t,
69 private_swima_event_t *this)
70 {
71 return this->action;
72 }
73
74 METHOD(swima_event_t, get_sw_record, swima_record_t*,
75 private_swima_event_t *this)
76 {
77 return this->sw_record;
78 }
79
80
81 METHOD(swima_event_t, get_ref, swima_event_t*,
82 private_swima_event_t *this)
83 {
84 ref_get(&this->ref);
85 return &this->public;
86 }
87
88 METHOD(swima_event_t, destroy, void,
89 private_swima_event_t *this)
90 {
91 if (ref_put(&this->ref))
92 {
93 this->sw_record->destroy(this->sw_record);
94 free(this->timestamp.ptr);
95 free(this);
96 }
97 }
98
99 /**
100 * See header
101 */
102 swima_event_t *swima_event_create(uint32_t eid, chunk_t timestamp,
103 uint8_t action, swima_record_t *sw_record)
104 {
105 private_swima_event_t *this;
106
107 INIT(this,
108 .public = {
109 .get_eid = _get_eid,
110 .get_action = _get_action,
111 .get_sw_record = _get_sw_record,
112 .get_ref = _get_ref,
113 .destroy = _destroy,
114 },
115 .eid = eid,
116 .timestamp = chunk_clone(timestamp),
117 .action = action,
118 .sw_record = sw_record,
119 .ref = 1,
120 );
121
122 return &this->public;
123 }
124