1 | /* AUTOMATICALLY GENERATED, DO NOT MODIFY */ |
2 | |
3 | /* |
4 | * Schema-defined QAPI visitors |
5 | * |
6 | * Copyright IBM, Corp. 2011 |
7 | * Copyright (C) 2014-2018 Red Hat, Inc. |
8 | * |
9 | * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. |
10 | * See the COPYING.LIB file in the top-level directory. |
11 | */ |
12 | |
13 | #include "qemu/osdep.h" |
14 | #include "qapi/error.h" |
15 | #include "qapi/qmp/qerror.h" |
16 | #include "qapi-visit-sockets.h" |
17 | |
18 | void visit_type_NetworkAddressFamily(Visitor *v, const char *name, NetworkAddressFamily *obj, Error **errp) |
19 | { |
20 | int value = *obj; |
21 | visit_type_enum(v, name, &value, &NetworkAddressFamily_lookup, errp); |
22 | *obj = value; |
23 | } |
24 | |
25 | void visit_type_InetSocketAddressBase_members(Visitor *v, InetSocketAddressBase *obj, Error **errp) |
26 | { |
27 | Error *err = NULL; |
28 | |
29 | visit_type_str(v, "host" , &obj->host, &err); |
30 | if (err) { |
31 | goto out; |
32 | } |
33 | visit_type_str(v, "port" , &obj->port, &err); |
34 | if (err) { |
35 | goto out; |
36 | } |
37 | |
38 | out: |
39 | error_propagate(errp, err); |
40 | } |
41 | |
42 | void visit_type_InetSocketAddressBase(Visitor *v, const char *name, InetSocketAddressBase **obj, Error **errp) |
43 | { |
44 | Error *err = NULL; |
45 | |
46 | visit_start_struct(v, name, (void **)obj, sizeof(InetSocketAddressBase), &err); |
47 | if (err) { |
48 | goto out; |
49 | } |
50 | if (!*obj) { |
51 | goto out_obj; |
52 | } |
53 | visit_type_InetSocketAddressBase_members(v, *obj, &err); |
54 | if (err) { |
55 | goto out_obj; |
56 | } |
57 | visit_check_struct(v, &err); |
58 | out_obj: |
59 | visit_end_struct(v, (void **)obj); |
60 | if (err && visit_is_input(v)) { |
61 | qapi_free_InetSocketAddressBase(*obj); |
62 | *obj = NULL; |
63 | } |
64 | out: |
65 | error_propagate(errp, err); |
66 | } |
67 | |
68 | void visit_type_InetSocketAddress_members(Visitor *v, InetSocketAddress *obj, Error **errp) |
69 | { |
70 | Error *err = NULL; |
71 | |
72 | visit_type_InetSocketAddressBase_members(v, (InetSocketAddressBase *)obj, &err); |
73 | if (err) { |
74 | goto out; |
75 | } |
76 | if (visit_optional(v, "numeric" , &obj->has_numeric)) { |
77 | visit_type_bool(v, "numeric" , &obj->numeric, &err); |
78 | if (err) { |
79 | goto out; |
80 | } |
81 | } |
82 | if (visit_optional(v, "to" , &obj->has_to)) { |
83 | visit_type_uint16(v, "to" , &obj->to, &err); |
84 | if (err) { |
85 | goto out; |
86 | } |
87 | } |
88 | if (visit_optional(v, "ipv4" , &obj->has_ipv4)) { |
89 | visit_type_bool(v, "ipv4" , &obj->ipv4, &err); |
90 | if (err) { |
91 | goto out; |
92 | } |
93 | } |
94 | if (visit_optional(v, "ipv6" , &obj->has_ipv6)) { |
95 | visit_type_bool(v, "ipv6" , &obj->ipv6, &err); |
96 | if (err) { |
97 | goto out; |
98 | } |
99 | } |
100 | if (visit_optional(v, "keep-alive" , &obj->has_keep_alive)) { |
101 | visit_type_bool(v, "keep-alive" , &obj->keep_alive, &err); |
102 | if (err) { |
103 | goto out; |
104 | } |
105 | } |
106 | |
107 | out: |
108 | error_propagate(errp, err); |
109 | } |
110 | |
111 | void visit_type_InetSocketAddress(Visitor *v, const char *name, InetSocketAddress **obj, Error **errp) |
112 | { |
113 | Error *err = NULL; |
114 | |
115 | visit_start_struct(v, name, (void **)obj, sizeof(InetSocketAddress), &err); |
116 | if (err) { |
117 | goto out; |
118 | } |
119 | if (!*obj) { |
120 | goto out_obj; |
121 | } |
122 | visit_type_InetSocketAddress_members(v, *obj, &err); |
123 | if (err) { |
124 | goto out_obj; |
125 | } |
126 | visit_check_struct(v, &err); |
127 | out_obj: |
128 | visit_end_struct(v, (void **)obj); |
129 | if (err && visit_is_input(v)) { |
130 | qapi_free_InetSocketAddress(*obj); |
131 | *obj = NULL; |
132 | } |
133 | out: |
134 | error_propagate(errp, err); |
135 | } |
136 | |
137 | void visit_type_UnixSocketAddress_members(Visitor *v, UnixSocketAddress *obj, Error **errp) |
138 | { |
139 | Error *err = NULL; |
140 | |
141 | visit_type_str(v, "path" , &obj->path, &err); |
142 | if (err) { |
143 | goto out; |
144 | } |
145 | |
146 | out: |
147 | error_propagate(errp, err); |
148 | } |
149 | |
150 | void visit_type_UnixSocketAddress(Visitor *v, const char *name, UnixSocketAddress **obj, Error **errp) |
151 | { |
152 | Error *err = NULL; |
153 | |
154 | visit_start_struct(v, name, (void **)obj, sizeof(UnixSocketAddress), &err); |
155 | if (err) { |
156 | goto out; |
157 | } |
158 | if (!*obj) { |
159 | goto out_obj; |
160 | } |
161 | visit_type_UnixSocketAddress_members(v, *obj, &err); |
162 | if (err) { |
163 | goto out_obj; |
164 | } |
165 | visit_check_struct(v, &err); |
166 | out_obj: |
167 | visit_end_struct(v, (void **)obj); |
168 | if (err && visit_is_input(v)) { |
169 | qapi_free_UnixSocketAddress(*obj); |
170 | *obj = NULL; |
171 | } |
172 | out: |
173 | error_propagate(errp, err); |
174 | } |
175 | |
176 | void visit_type_VsockSocketAddress_members(Visitor *v, VsockSocketAddress *obj, Error **errp) |
177 | { |
178 | Error *err = NULL; |
179 | |
180 | visit_type_str(v, "cid" , &obj->cid, &err); |
181 | if (err) { |
182 | goto out; |
183 | } |
184 | visit_type_str(v, "port" , &obj->port, &err); |
185 | if (err) { |
186 | goto out; |
187 | } |
188 | |
189 | out: |
190 | error_propagate(errp, err); |
191 | } |
192 | |
193 | void visit_type_VsockSocketAddress(Visitor *v, const char *name, VsockSocketAddress **obj, Error **errp) |
194 | { |
195 | Error *err = NULL; |
196 | |
197 | visit_start_struct(v, name, (void **)obj, sizeof(VsockSocketAddress), &err); |
198 | if (err) { |
199 | goto out; |
200 | } |
201 | if (!*obj) { |
202 | goto out_obj; |
203 | } |
204 | visit_type_VsockSocketAddress_members(v, *obj, &err); |
205 | if (err) { |
206 | goto out_obj; |
207 | } |
208 | visit_check_struct(v, &err); |
209 | out_obj: |
210 | visit_end_struct(v, (void **)obj); |
211 | if (err && visit_is_input(v)) { |
212 | qapi_free_VsockSocketAddress(*obj); |
213 | *obj = NULL; |
214 | } |
215 | out: |
216 | error_propagate(errp, err); |
217 | } |
218 | |
219 | void visit_type_q_obj_InetSocketAddress_wrapper_members(Visitor *v, q_obj_InetSocketAddress_wrapper *obj, Error **errp) |
220 | { |
221 | Error *err = NULL; |
222 | |
223 | visit_type_InetSocketAddress(v, "data" , &obj->data, &err); |
224 | if (err) { |
225 | goto out; |
226 | } |
227 | |
228 | out: |
229 | error_propagate(errp, err); |
230 | } |
231 | |
232 | void visit_type_q_obj_UnixSocketAddress_wrapper_members(Visitor *v, q_obj_UnixSocketAddress_wrapper *obj, Error **errp) |
233 | { |
234 | Error *err = NULL; |
235 | |
236 | visit_type_UnixSocketAddress(v, "data" , &obj->data, &err); |
237 | if (err) { |
238 | goto out; |
239 | } |
240 | |
241 | out: |
242 | error_propagate(errp, err); |
243 | } |
244 | |
245 | void visit_type_q_obj_VsockSocketAddress_wrapper_members(Visitor *v, q_obj_VsockSocketAddress_wrapper *obj, Error **errp) |
246 | { |
247 | Error *err = NULL; |
248 | |
249 | visit_type_VsockSocketAddress(v, "data" , &obj->data, &err); |
250 | if (err) { |
251 | goto out; |
252 | } |
253 | |
254 | out: |
255 | error_propagate(errp, err); |
256 | } |
257 | |
258 | void visit_type_q_obj_String_wrapper_members(Visitor *v, q_obj_String_wrapper *obj, Error **errp) |
259 | { |
260 | Error *err = NULL; |
261 | |
262 | visit_type_String(v, "data" , &obj->data, &err); |
263 | if (err) { |
264 | goto out; |
265 | } |
266 | |
267 | out: |
268 | error_propagate(errp, err); |
269 | } |
270 | |
271 | void visit_type_SocketAddressLegacyKind(Visitor *v, const char *name, SocketAddressLegacyKind *obj, Error **errp) |
272 | { |
273 | int value = *obj; |
274 | visit_type_enum(v, name, &value, &SocketAddressLegacyKind_lookup, errp); |
275 | *obj = value; |
276 | } |
277 | |
278 | void visit_type_SocketAddressLegacy_members(Visitor *v, SocketAddressLegacy *obj, Error **errp) |
279 | { |
280 | Error *err = NULL; |
281 | |
282 | visit_type_SocketAddressLegacyKind(v, "type" , &obj->type, &err); |
283 | if (err) { |
284 | goto out; |
285 | } |
286 | switch (obj->type) { |
287 | case SOCKET_ADDRESS_LEGACY_KIND_INET: |
288 | visit_type_q_obj_InetSocketAddress_wrapper_members(v, &obj->u.inet, &err); |
289 | break; |
290 | case SOCKET_ADDRESS_LEGACY_KIND_UNIX: |
291 | visit_type_q_obj_UnixSocketAddress_wrapper_members(v, &obj->u.q_unix, &err); |
292 | break; |
293 | case SOCKET_ADDRESS_LEGACY_KIND_VSOCK: |
294 | visit_type_q_obj_VsockSocketAddress_wrapper_members(v, &obj->u.vsock, &err); |
295 | break; |
296 | case SOCKET_ADDRESS_LEGACY_KIND_FD: |
297 | visit_type_q_obj_String_wrapper_members(v, &obj->u.fd, &err); |
298 | break; |
299 | default: |
300 | abort(); |
301 | } |
302 | |
303 | out: |
304 | error_propagate(errp, err); |
305 | } |
306 | |
307 | void visit_type_SocketAddressLegacy(Visitor *v, const char *name, SocketAddressLegacy **obj, Error **errp) |
308 | { |
309 | Error *err = NULL; |
310 | |
311 | visit_start_struct(v, name, (void **)obj, sizeof(SocketAddressLegacy), &err); |
312 | if (err) { |
313 | goto out; |
314 | } |
315 | if (!*obj) { |
316 | goto out_obj; |
317 | } |
318 | visit_type_SocketAddressLegacy_members(v, *obj, &err); |
319 | if (err) { |
320 | goto out_obj; |
321 | } |
322 | visit_check_struct(v, &err); |
323 | out_obj: |
324 | visit_end_struct(v, (void **)obj); |
325 | if (err && visit_is_input(v)) { |
326 | qapi_free_SocketAddressLegacy(*obj); |
327 | *obj = NULL; |
328 | } |
329 | out: |
330 | error_propagate(errp, err); |
331 | } |
332 | |
333 | void visit_type_SocketAddressType(Visitor *v, const char *name, SocketAddressType *obj, Error **errp) |
334 | { |
335 | int value = *obj; |
336 | visit_type_enum(v, name, &value, &SocketAddressType_lookup, errp); |
337 | *obj = value; |
338 | } |
339 | |
340 | void visit_type_q_obj_SocketAddress_base_members(Visitor *v, q_obj_SocketAddress_base *obj, Error **errp) |
341 | { |
342 | Error *err = NULL; |
343 | |
344 | visit_type_SocketAddressType(v, "type" , &obj->type, &err); |
345 | if (err) { |
346 | goto out; |
347 | } |
348 | |
349 | out: |
350 | error_propagate(errp, err); |
351 | } |
352 | |
353 | void visit_type_SocketAddress_members(Visitor *v, SocketAddress *obj, Error **errp) |
354 | { |
355 | Error *err = NULL; |
356 | |
357 | visit_type_q_obj_SocketAddress_base_members(v, (q_obj_SocketAddress_base *)obj, &err); |
358 | if (err) { |
359 | goto out; |
360 | } |
361 | switch (obj->type) { |
362 | case SOCKET_ADDRESS_TYPE_INET: |
363 | visit_type_InetSocketAddress_members(v, &obj->u.inet, &err); |
364 | break; |
365 | case SOCKET_ADDRESS_TYPE_UNIX: |
366 | visit_type_UnixSocketAddress_members(v, &obj->u.q_unix, &err); |
367 | break; |
368 | case SOCKET_ADDRESS_TYPE_VSOCK: |
369 | visit_type_VsockSocketAddress_members(v, &obj->u.vsock, &err); |
370 | break; |
371 | case SOCKET_ADDRESS_TYPE_FD: |
372 | visit_type_String_members(v, &obj->u.fd, &err); |
373 | break; |
374 | default: |
375 | abort(); |
376 | } |
377 | |
378 | out: |
379 | error_propagate(errp, err); |
380 | } |
381 | |
382 | void visit_type_SocketAddress(Visitor *v, const char *name, SocketAddress **obj, Error **errp) |
383 | { |
384 | Error *err = NULL; |
385 | |
386 | visit_start_struct(v, name, (void **)obj, sizeof(SocketAddress), &err); |
387 | if (err) { |
388 | goto out; |
389 | } |
390 | if (!*obj) { |
391 | goto out_obj; |
392 | } |
393 | visit_type_SocketAddress_members(v, *obj, &err); |
394 | if (err) { |
395 | goto out_obj; |
396 | } |
397 | visit_check_struct(v, &err); |
398 | out_obj: |
399 | visit_end_struct(v, (void **)obj); |
400 | if (err && visit_is_input(v)) { |
401 | qapi_free_SocketAddress(*obj); |
402 | *obj = NULL; |
403 | } |
404 | out: |
405 | error_propagate(errp, err); |
406 | } |
407 | |
408 | void visit_type_SocketAddressList(Visitor *v, const char *name, SocketAddressList **obj, Error **errp) |
409 | { |
410 | Error *err = NULL; |
411 | SocketAddressList *tail; |
412 | size_t size = sizeof(**obj); |
413 | |
414 | visit_start_list(v, name, (GenericList **)obj, size, &err); |
415 | if (err) { |
416 | goto out; |
417 | } |
418 | |
419 | for (tail = *obj; tail; |
420 | tail = (SocketAddressList *)visit_next_list(v, (GenericList *)tail, size)) { |
421 | visit_type_SocketAddress(v, NULL, &tail->value, &err); |
422 | if (err) { |
423 | break; |
424 | } |
425 | } |
426 | |
427 | if (!err) { |
428 | visit_check_list(v, &err); |
429 | } |
430 | visit_end_list(v, (void **)obj); |
431 | if (err && visit_is_input(v)) { |
432 | qapi_free_SocketAddressList(*obj); |
433 | *obj = NULL; |
434 | } |
435 | out: |
436 | error_propagate(errp, err); |
437 | } |
438 | |
439 | void visit_type_InetSocketAddressBaseList(Visitor *v, const char *name, InetSocketAddressBaseList **obj, Error **errp) |
440 | { |
441 | Error *err = NULL; |
442 | InetSocketAddressBaseList *tail; |
443 | size_t size = sizeof(**obj); |
444 | |
445 | visit_start_list(v, name, (GenericList **)obj, size, &err); |
446 | if (err) { |
447 | goto out; |
448 | } |
449 | |
450 | for (tail = *obj; tail; |
451 | tail = (InetSocketAddressBaseList *)visit_next_list(v, (GenericList *)tail, size)) { |
452 | visit_type_InetSocketAddressBase(v, NULL, &tail->value, &err); |
453 | if (err) { |
454 | break; |
455 | } |
456 | } |
457 | |
458 | if (!err) { |
459 | visit_check_list(v, &err); |
460 | } |
461 | visit_end_list(v, (void **)obj); |
462 | if (err && visit_is_input(v)) { |
463 | qapi_free_InetSocketAddressBaseList(*obj); |
464 | *obj = NULL; |
465 | } |
466 | out: |
467 | error_propagate(errp, err); |
468 | } |
469 | |
470 | /* Dummy declaration to prevent empty .o file */ |
471 | char qapi_dummy_qapi_visit_sockets_c; |
472 | |