1 /*
2 * LASH
3 *
4 * Copyright (C) 2002 Robert Ham <rah@bash.sh>
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
19 */
20
21 #include <lash/lash.h>
22 #include <lash/internal_headers.h>
23
24 #include "server_event.h"
25
26 void
server_event_init(server_event_t * event)27 server_event_init(server_event_t * event)
28 {
29 event->type = 0;
30 event->conn_id = 0;
31 event->data.lash_event = NULL;
32 }
33
34 static void
server_event_free_data(server_event_t * event)35 server_event_free_data(server_event_t * event)
36 {
37 if (event->data.lash_event) {
38 switch (event->type) {
39 case Client_Connect:
40 lash_connect_params_destroy(event->data.lash_connect_params);
41 break;
42 case Client_Event:
43 lash_event_destroy(event->data.lash_event);
44 break;
45 case Client_Config:
46 lash_config_destroy(event->data.lash_config);
47 break;
48 case Client_Comm_Event:
49 lash_comm_event_destroy(event->data.lash_comm_event);
50 default:
51 break;
52 }
53 event->data.lash_event = NULL;
54 }
55 }
56
57 void
server_event_free(server_event_t * event)58 server_event_free(server_event_t * event)
59 {
60 server_event_free_data(event);
61 event->type = 0;
62 event->conn_id = 0;
63 }
64
65 server_event_t *
server_event_new()66 server_event_new()
67 {
68 server_event_t *event;
69
70 event = lash_malloc(sizeof(server_event_t));
71 server_event_init(event);
72 return event;
73 }
74
75 void
server_event_destroy(server_event_t * event)76 server_event_destroy(server_event_t * event)
77 {
78 server_event_free(event);
79 free(event);
80 }
81
82 void
server_event_set_type(server_event_t * event,enum Server_Event_Type type)83 server_event_set_type(server_event_t * event, enum Server_Event_Type type)
84 {
85 event->type = type;
86 }
87
88 void
server_event_set_conn_id(server_event_t * event,unsigned long id)89 server_event_set_conn_id(server_event_t * event, unsigned long id)
90 {
91 event->conn_id = id;
92 }
93
94 void
server_event_set_lash_event(server_event_t * event,lash_event_t * lash_event)95 server_event_set_lash_event(server_event_t * event, lash_event_t * lash_event)
96 {
97 server_event_free_data(event);
98
99 event->type = Client_Event;
100 event->data.lash_event = lash_event;
101 }
102
103 void
server_event_set_lash_config(server_event_t * event,lash_config_t * lash_config)104 server_event_set_lash_config(server_event_t * event,
105 lash_config_t * lash_config)
106 {
107 server_event_free_data(event);
108
109 event->type = Client_Config;
110 event->data.lash_config = lash_config;
111 }
112
113 void
server_event_set_lash_comm_event(server_event_t * event,lash_comm_event_t * lash_comm_event)114 server_event_set_lash_comm_event(server_event_t * event,
115 lash_comm_event_t * lash_comm_event)
116 {
117 server_event_free_data(event);
118
119 event->type = Client_Comm_Event;
120 event->data.lash_comm_event = lash_comm_event;
121 }
122
123 void
server_event_set_lash_connect_params(server_event_t * event,lash_connect_params_t * params)124 server_event_set_lash_connect_params(server_event_t * event,
125 lash_connect_params_t * params)
126 {
127 server_event_free_data(event);
128
129 event->type = Client_Connect;
130 event->data.lash_connect_params = params;
131 }
132
133 lash_event_t *
server_event_take_lash_event(server_event_t * event)134 server_event_take_lash_event(server_event_t * event)
135 {
136 lash_event_t *lash_event;
137
138 lash_event = event->data.lash_event;
139 event->data.lash_event = NULL;
140 return lash_event;
141 }
142
143 lash_config_t *
server_event_take_lash_config(server_event_t * event)144 server_event_take_lash_config(server_event_t * event)
145 {
146 lash_config_t *lash_config;
147
148 lash_config = event->data.lash_config;
149 event->data.lash_config = NULL;
150 return lash_config;
151 }
152
153 lash_comm_event_t *
server_event_take_lash_comm_event(server_event_t * event)154 server_event_take_lash_comm_event(server_event_t * event)
155 {
156 lash_comm_event_t *lash_comm_event;
157
158 lash_comm_event = event->data.lash_comm_event;
159 event->data.lash_comm_event = NULL;
160 return lash_comm_event;
161 }
162
163 lash_connect_params_t *
server_event_take_lash_connect_params(server_event_t * event)164 server_event_take_lash_connect_params(server_event_t * event)
165 {
166 lash_connect_params_t *params;
167
168 params = event->data.lash_connect_params;
169 event->data.lash_connect_params = NULL;
170 return params;
171 }
172
173 /* EOF */
174