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