1: /*
2: * Automatically generated from ./regress.rpc
3: * by event_rpcgen.py/0.1. DO NOT EDIT THIS FILE.
4: */
5:
6: #include <sys/types.h>
7: #ifdef _EVENT_HAVE_SYS_TIME_H
8: #include <sys/time.h>
9: #endif
10: #include <stdlib.h>
11: #include <string.h>
12: #include <assert.h>
13: #define EVENT_NO_STRUCT
14: #include <event.h>
15:
16: #ifdef _EVENT___func__
17: #define __func__ _EVENT___func__
18: #endif
19:
20: #include "./regress.gen.h"
21:
22: void event_err(int eval, const char *fmt, ...);
23: void event_warn(const char *fmt, ...);
24: void event_errx(int eval, const char *fmt, ...);
25: void event_warnx(const char *fmt, ...);
26:
27:
28: /*
29: * Implementation of msg
30: */
31:
32: static struct msg_access_ __msg_base = {
33: msg_from_name_assign,
34: msg_from_name_get,
35: msg_to_name_assign,
36: msg_to_name_get,
37: msg_attack_assign,
38: msg_attack_get,
39: msg_run_assign,
40: msg_run_get,
41: msg_run_add,
42: };
43:
44: struct msg *
45: msg_new(void)
46: {
47: struct msg *tmp;
48: if ((tmp = malloc(sizeof(struct msg))) == NULL) {
49: event_warn("%s: malloc", __func__);
50: return (NULL);
51: }
52: tmp->base = &__msg_base;
53:
54: tmp->from_name_data = NULL;
55: tmp->from_name_set = 0;
56:
57: tmp->to_name_data = NULL;
58: tmp->to_name_set = 0;
59:
60: tmp->attack_data = NULL;
61: tmp->attack_set = 0;
62:
63: tmp->run_data = NULL;
64: tmp->run_length = 0;
65: tmp->run_num_allocated = 0;
66: tmp->run_set = 0;
67:
68: return (tmp);
69: }
70:
71:
72:
73:
74: struct run *
75: msg_run_add(struct msg *msg)
76: {
77: if (++msg->run_length >= msg->run_num_allocated) {
78: int tobe_allocated = msg->run_num_allocated;
79: struct run ** new_data = NULL;
80: tobe_allocated = !tobe_allocated ? 1 : tobe_allocated << 1;
81: new_data = (struct run **) realloc(msg->run_data,
82: tobe_allocated * sizeof(struct run *));
83: if (new_data == NULL)
84: goto error;
85: msg->run_data = new_data;
86: msg->run_num_allocated = tobe_allocated;
87: }
88: msg->run_data[msg->run_length - 1] = run_new();
89: if (msg->run_data[msg->run_length - 1] == NULL)
90: goto error;
91: msg->run_set = 1;
92: return (msg->run_data[msg->run_length - 1]);
93: error:
94: --msg->run_length;
95: return (NULL);
96: }
97:
98:
99: int
100: msg_from_name_assign(struct msg *msg,
101: const char * value)
102: {
103: if (msg->from_name_data != NULL)
104: free(msg->from_name_data);
105: if ((msg->from_name_data = strdup(value)) == NULL)
106: return (-1);
107: msg->from_name_set = 1;
108: return (0);
109: }
110:
111: int
112: msg_to_name_assign(struct msg *msg,
113: const char * value)
114: {
115: if (msg->to_name_data != NULL)
116: free(msg->to_name_data);
117: if ((msg->to_name_data = strdup(value)) == NULL)
118: return (-1);
119: msg->to_name_set = 1;
120: return (0);
121: }
122:
123: int
124: msg_attack_assign(struct msg *msg,
125: const struct kill* value)
126: {
127: struct evbuffer *tmp = NULL;
128: if (msg->attack_set) {
129: kill_clear(msg->attack_data);
130: msg->attack_set = 0;
131: } else {
132: msg->attack_data = kill_new();
133: if (msg->attack_data == NULL) {
134: event_warn("%s: kill_new()", __func__);
135: goto error;
136: }
137: }
138: if ((tmp = evbuffer_new()) == NULL) {
139: event_warn("%s: evbuffer_new()", __func__);
140: goto error;
141: }
142: kill_marshal(tmp, value);
143: if (kill_unmarshal(msg->attack_data, tmp) == -1) {
144: event_warnx("%s: kill_unmarshal", __func__);
145: goto error;
146: }
147: msg->attack_set = 1;
148: evbuffer_free(tmp);
149: return (0);
150: error:
151: if (tmp != NULL)
152: evbuffer_free(tmp);
153: if (msg->attack_data != NULL) {
154: kill_free(msg->attack_data);
155: msg->attack_data = NULL;
156: }
157: return (-1);
158: }
159:
160: int
161: msg_run_assign(struct msg *msg, int off,
162: const struct run * value)
163: {
164: struct evbuffer *tmp = NULL;
165: if (!msg->run_set || off < 0 || off >= msg->run_length)
166: return (-1);
167: run_clear(msg->run_data[off]);
168: if ((tmp = evbuffer_new()) == NULL) {
169: event_warn("%s: evbuffer_new()", __func__);
170: goto error;
171: }
172: run_marshal(tmp, value);
173: if (run_unmarshal(msg->run_data[off], tmp) == -1) {
174: event_warnx("%s: run_unmarshal", __func__);
175: goto error;
176: }
177: evbuffer_free(tmp);
178: return (0);
179: error:
180: if (tmp != NULL)
181: evbuffer_free(tmp);
182: run_clear(msg->run_data[off]);
183: return (-1);
184: }
185:
186: int
187: msg_from_name_get(struct msg *msg, char * *value)
188: {
189: if (msg->from_name_set != 1)
190: return (-1);
191: *value = msg->from_name_data;
192: return (0);
193: }
194:
195: int
196: msg_to_name_get(struct msg *msg, char * *value)
197: {
198: if (msg->to_name_set != 1)
199: return (-1);
200: *value = msg->to_name_data;
201: return (0);
202: }
203:
204: int
205: msg_attack_get(struct msg *msg, struct kill* *value)
206: {
207: if (msg->attack_set != 1) {
208: msg->attack_data = kill_new();
209: if (msg->attack_data == NULL)
210: return (-1);
211: msg->attack_set = 1;
212: }
213: *value = msg->attack_data;
214: return (0);
215: }
216:
217: int
218: msg_run_get(struct msg *msg, int offset,
219: struct run * *value)
220: {
221: if (!msg->run_set || offset < 0 || offset >= msg->run_length)
222: return (-1);
223: *value = msg->run_data[offset];
224: return (0);
225: }
226:
227: void
228: msg_clear(struct msg *tmp)
229: {
230: if (tmp->from_name_set == 1) {
231: free (tmp->from_name_data);
232: tmp->from_name_data = NULL;
233: tmp->from_name_set = 0;
234: }
235: if (tmp->to_name_set == 1) {
236: free (tmp->to_name_data);
237: tmp->to_name_data = NULL;
238: tmp->to_name_set = 0;
239: }
240: if (tmp->attack_set == 1) {
241: kill_free(tmp->attack_data);
242: tmp->attack_data = NULL;
243: tmp->attack_set = 0;
244: }
245: if (tmp->run_set == 1) {
246: int i;
247: for (i = 0; i < tmp->run_length; ++i) {
248: run_free(tmp->run_data[i]);
249: }
250: free(tmp->run_data);
251: tmp->run_data = NULL;
252: tmp->run_set = 0;
253: tmp->run_length = 0;
254: tmp->run_num_allocated = 0;
255: }
256: }
257:
258: void
259: msg_free(struct msg *tmp)
260: {
261: if (tmp->from_name_data != NULL)
262: free (tmp->from_name_data);
263: if (tmp->to_name_data != NULL)
264: free (tmp->to_name_data);
265: if (tmp->attack_data != NULL)
266: kill_free(tmp->attack_data);
267: if (tmp->run_data != NULL) {
268: int i;
269: for (i = 0; i < tmp->run_length; ++i) {
270: run_free(tmp->run_data[i]);
271: tmp->run_data[i] = NULL;
272: }
273: free(tmp->run_data);
274: tmp->run_data = NULL;
275: tmp->run_length = 0;
276: tmp->run_num_allocated = 0;
277: }
278: free(tmp);
279: }
280:
281: void
282: msg_marshal(struct evbuffer *evbuf, const struct msg *tmp){
283: evtag_marshal_string(evbuf, MSG_FROM_NAME, tmp->from_name_data);
284: evtag_marshal_string(evbuf, MSG_TO_NAME, tmp->to_name_data);
285: if (tmp->attack_set) {
286: evtag_marshal_kill(evbuf, MSG_ATTACK, tmp->attack_data);
287: }
288: {
289: int i;
290: for (i = 0; i < tmp->run_length; ++i) {
291: evtag_marshal_run(evbuf, MSG_RUN, tmp->run_data[i]);
292: }
293: }
294: }
295:
296: int
297: msg_unmarshal(struct msg *tmp, struct evbuffer *evbuf)
298: {
299: ev_uint32_t tag;
300: while (EVBUFFER_LENGTH(evbuf) > 0) {
301: if (evtag_peek(evbuf, &tag) == -1)
302: return (-1);
303: switch (tag) {
304:
305: case MSG_FROM_NAME:
306:
307: if (tmp->from_name_set)
308: return (-1);
309: if (evtag_unmarshal_string(evbuf, MSG_FROM_NAME, &tmp->from_name_data) == -1) {
310: event_warnx("%s: failed to unmarshal from_name", __func__);
311: return (-1);
312: }
313: tmp->from_name_set = 1;
314: break;
315:
316: case MSG_TO_NAME:
317:
318: if (tmp->to_name_set)
319: return (-1);
320: if (evtag_unmarshal_string(evbuf, MSG_TO_NAME, &tmp->to_name_data) == -1) {
321: event_warnx("%s: failed to unmarshal to_name", __func__);
322: return (-1);
323: }
324: tmp->to_name_set = 1;
325: break;
326:
327: case MSG_ATTACK:
328:
329: if (tmp->attack_set)
330: return (-1);
331: tmp->attack_data = kill_new();
332: if (tmp->attack_data == NULL)
333: return (-1);
334: if (evtag_unmarshal_kill(evbuf, MSG_ATTACK, tmp->attack_data) == -1) {
335: event_warnx("%s: failed to unmarshal attack", __func__);
336: return (-1);
337: }
338: tmp->attack_set = 1;
339: break;
340:
341: case MSG_RUN:
342:
343: if (msg_run_add(tmp) == NULL)
344: return (-1);
345: if (evtag_unmarshal_run(evbuf, MSG_RUN,
346: tmp->run_data[tmp->run_length - 1]) == -1) {
347: --tmp->run_length;
348: event_warnx("%s: failed to unmarshal run", __func__);
349: return (-1);
350: }
351: tmp->run_set = 1;
352: break;
353:
354: default:
355: return -1;
356: }
357: }
358:
359: if (msg_complete(tmp) == -1)
360: return (-1);
361: return (0);
362: }
363:
364: int
365: msg_complete(struct msg *msg)
366: {
367: if (!msg->from_name_set)
368: return (-1);
369: if (!msg->to_name_set)
370: return (-1);
371: if (msg->attack_set && kill_complete(msg->attack_data) == -1)
372: return (-1);
373: {
374: int i;
375: for (i = 0; i < msg->run_length; ++i) {
376: if (run_complete(msg->run_data[i]) == -1)
377: return (-1);
378: }
379: }
380: return (0);
381: }
382:
383: int
384: evtag_unmarshal_msg(struct evbuffer *evbuf, ev_uint32_t need_tag, struct msg *msg)
385: {
386: ev_uint32_t tag;
387: int res = -1;
388:
389: struct evbuffer *tmp = evbuffer_new();
390:
391: if (evtag_unmarshal(evbuf, &tag, tmp) == -1 || tag != need_tag)
392: goto error;
393:
394: if (msg_unmarshal(msg, tmp) == -1)
395: goto error;
396:
397: res = 0;
398:
399: error:
400: evbuffer_free(tmp);
401: return (res);
402: }
403:
404: void
405: evtag_marshal_msg(struct evbuffer *evbuf, ev_uint32_t tag, const struct msg *msg)
406: {
407: struct evbuffer *_buf = evbuffer_new();
408: assert(_buf != NULL);
409: evbuffer_drain(_buf, -1);
410: msg_marshal(_buf, msg);
411: evtag_marshal(evbuf, tag, EVBUFFER_DATA(_buf), EVBUFFER_LENGTH(_buf));
412: evbuffer_free(_buf);
413: }
414:
415: /*
416: * Implementation of kill
417: */
418:
419: static struct kill_access_ __kill_base = {
420: kill_weapon_assign,
421: kill_weapon_get,
422: kill_action_assign,
423: kill_action_get,
424: kill_how_often_assign,
425: kill_how_often_get,
426: };
427:
428: struct kill *
429: kill_new(void)
430: {
431: struct kill *tmp;
432: if ((tmp = malloc(sizeof(struct kill))) == NULL) {
433: event_warn("%s: malloc", __func__);
434: return (NULL);
435: }
436: tmp->base = &__kill_base;
437:
438: tmp->weapon_data = NULL;
439: tmp->weapon_set = 0;
440:
441: tmp->action_data = NULL;
442: tmp->action_set = 0;
443:
444: tmp->how_often_data = 0;
445: tmp->how_often_set = 0;
446:
447: return (tmp);
448: }
449:
450:
451:
452:
453: int
454: kill_weapon_assign(struct kill *msg,
455: const char * value)
456: {
457: if (msg->weapon_data != NULL)
458: free(msg->weapon_data);
459: if ((msg->weapon_data = strdup(value)) == NULL)
460: return (-1);
461: msg->weapon_set = 1;
462: return (0);
463: }
464:
465: int
466: kill_action_assign(struct kill *msg,
467: const char * value)
468: {
469: if (msg->action_data != NULL)
470: free(msg->action_data);
471: if ((msg->action_data = strdup(value)) == NULL)
472: return (-1);
473: msg->action_set = 1;
474: return (0);
475: }
476:
477: int
478: kill_how_often_assign(struct kill *msg, const ev_uint32_t value)
479: {
480: msg->how_often_set = 1;
481: msg->how_often_data = value;
482: return (0);
483: }
484:
485: int
486: kill_weapon_get(struct kill *msg, char * *value)
487: {
488: if (msg->weapon_set != 1)
489: return (-1);
490: *value = msg->weapon_data;
491: return (0);
492: }
493:
494: int
495: kill_action_get(struct kill *msg, char * *value)
496: {
497: if (msg->action_set != 1)
498: return (-1);
499: *value = msg->action_data;
500: return (0);
501: }
502:
503: int
504: kill_how_often_get(struct kill *msg, ev_uint32_t *value)
505: {
506: if (msg->how_often_set != 1)
507: return (-1);
508: *value = msg->how_often_data;
509: return (0);
510: }
511:
512: void
513: kill_clear(struct kill *tmp)
514: {
515: if (tmp->weapon_set == 1) {
516: free (tmp->weapon_data);
517: tmp->weapon_data = NULL;
518: tmp->weapon_set = 0;
519: }
520: if (tmp->action_set == 1) {
521: free (tmp->action_data);
522: tmp->action_data = NULL;
523: tmp->action_set = 0;
524: }
525: tmp->how_often_set = 0;
526: }
527:
528: void
529: kill_free(struct kill *tmp)
530: {
531: if (tmp->weapon_data != NULL)
532: free (tmp->weapon_data);
533: if (tmp->action_data != NULL)
534: free (tmp->action_data);
535: free(tmp);
536: }
537:
538: void
539: kill_marshal(struct evbuffer *evbuf, const struct kill *tmp){
540: evtag_marshal_string(evbuf, KILL_WEAPON, tmp->weapon_data);
541: evtag_marshal_string(evbuf, KILL_ACTION, tmp->action_data);
542: if (tmp->how_often_set) {
543: evtag_marshal_int(evbuf, KILL_HOW_OFTEN, tmp->how_often_data);
544: }
545: }
546:
547: int
548: kill_unmarshal(struct kill *tmp, struct evbuffer *evbuf)
549: {
550: ev_uint32_t tag;
551: while (EVBUFFER_LENGTH(evbuf) > 0) {
552: if (evtag_peek(evbuf, &tag) == -1)
553: return (-1);
554: switch (tag) {
555:
556: case KILL_WEAPON:
557:
558: if (tmp->weapon_set)
559: return (-1);
560: if (evtag_unmarshal_string(evbuf, KILL_WEAPON, &tmp->weapon_data) == -1) {
561: event_warnx("%s: failed to unmarshal weapon", __func__);
562: return (-1);
563: }
564: tmp->weapon_set = 1;
565: break;
566:
567: case KILL_ACTION:
568:
569: if (tmp->action_set)
570: return (-1);
571: if (evtag_unmarshal_string(evbuf, KILL_ACTION, &tmp->action_data) == -1) {
572: event_warnx("%s: failed to unmarshal action", __func__);
573: return (-1);
574: }
575: tmp->action_set = 1;
576: break;
577:
578: case KILL_HOW_OFTEN:
579:
580: if (tmp->how_often_set)
581: return (-1);
582: if (evtag_unmarshal_int(evbuf, KILL_HOW_OFTEN, &tmp->how_often_data) == -1) {
583: event_warnx("%s: failed to unmarshal how_often", __func__);
584: return (-1);
585: }
586: tmp->how_often_set = 1;
587: break;
588:
589: default:
590: return -1;
591: }
592: }
593:
594: if (kill_complete(tmp) == -1)
595: return (-1);
596: return (0);
597: }
598:
599: int
600: kill_complete(struct kill *msg)
601: {
602: if (!msg->weapon_set)
603: return (-1);
604: if (!msg->action_set)
605: return (-1);
606: return (0);
607: }
608:
609: int
610: evtag_unmarshal_kill(struct evbuffer *evbuf, ev_uint32_t need_tag, struct kill *msg)
611: {
612: ev_uint32_t tag;
613: int res = -1;
614:
615: struct evbuffer *tmp = evbuffer_new();
616:
617: if (evtag_unmarshal(evbuf, &tag, tmp) == -1 || tag != need_tag)
618: goto error;
619:
620: if (kill_unmarshal(msg, tmp) == -1)
621: goto error;
622:
623: res = 0;
624:
625: error:
626: evbuffer_free(tmp);
627: return (res);
628: }
629:
630: void
631: evtag_marshal_kill(struct evbuffer *evbuf, ev_uint32_t tag, const struct kill *msg)
632: {
633: struct evbuffer *_buf = evbuffer_new();
634: assert(_buf != NULL);
635: evbuffer_drain(_buf, -1);
636: kill_marshal(_buf, msg);
637: evtag_marshal(evbuf, tag, EVBUFFER_DATA(_buf), EVBUFFER_LENGTH(_buf));
638: evbuffer_free(_buf);
639: }
640:
641: /*
642: * Implementation of run
643: */
644:
645: static struct run_access_ __run_base = {
646: run_how_assign,
647: run_how_get,
648: run_some_bytes_assign,
649: run_some_bytes_get,
650: run_fixed_bytes_assign,
651: run_fixed_bytes_get,
652: };
653:
654: struct run *
655: run_new(void)
656: {
657: struct run *tmp;
658: if ((tmp = malloc(sizeof(struct run))) == NULL) {
659: event_warn("%s: malloc", __func__);
660: return (NULL);
661: }
662: tmp->base = &__run_base;
663:
664: tmp->how_data = NULL;
665: tmp->how_set = 0;
666:
667: tmp->some_bytes_data = NULL;
668: tmp->some_bytes_length = 0;
669: tmp->some_bytes_set = 0;
670:
671: memset(tmp->fixed_bytes_data, 0, sizeof(tmp->fixed_bytes_data));
672: tmp->fixed_bytes_set = 0;
673:
674: return (tmp);
675: }
676:
677:
678:
679:
680: int
681: run_how_assign(struct run *msg,
682: const char * value)
683: {
684: if (msg->how_data != NULL)
685: free(msg->how_data);
686: if ((msg->how_data = strdup(value)) == NULL)
687: return (-1);
688: msg->how_set = 1;
689: return (0);
690: }
691:
692: int
693: run_some_bytes_assign(struct run *msg, const ev_uint8_t * value, ev_uint32_t len)
694: {
695: if (msg->some_bytes_data != NULL)
696: free (msg->some_bytes_data);
697: msg->some_bytes_data = malloc(len);
698: if (msg->some_bytes_data == NULL)
699: return (-1);
700: msg->some_bytes_set = 1;
701: msg->some_bytes_length = len;
702: memcpy(msg->some_bytes_data, value, len);
703: return (0);
704: }
705:
706: int
707: run_fixed_bytes_assign(struct run *msg, const ev_uint8_t *value)
708: {
709: msg->fixed_bytes_set = 1;
710: memcpy(msg->fixed_bytes_data, value, 24);
711: return (0);
712: }
713:
714: int
715: run_how_get(struct run *msg, char * *value)
716: {
717: if (msg->how_set != 1)
718: return (-1);
719: *value = msg->how_data;
720: return (0);
721: }
722:
723: int
724: run_some_bytes_get(struct run *msg, ev_uint8_t * *value, ev_uint32_t *plen)
725: {
726: if (msg->some_bytes_set != 1)
727: return (-1);
728: *value = msg->some_bytes_data;
729: *plen = msg->some_bytes_length;
730: return (0);
731: }
732:
733: int
734: run_fixed_bytes_get(struct run *msg, ev_uint8_t **value)
735: {
736: if (msg->fixed_bytes_set != 1)
737: return (-1);
738: *value = msg->fixed_bytes_data;
739: return (0);
740: }
741:
742: void
743: run_clear(struct run *tmp)
744: {
745: if (tmp->how_set == 1) {
746: free (tmp->how_data);
747: tmp->how_data = NULL;
748: tmp->how_set = 0;
749: }
750: if (tmp->some_bytes_set == 1) {
751: free (tmp->some_bytes_data);
752: tmp->some_bytes_data = NULL;
753: tmp->some_bytes_length = 0;
754: tmp->some_bytes_set = 0;
755: }
756: tmp->fixed_bytes_set = 0;
757: memset(tmp->fixed_bytes_data, 0, sizeof(tmp->fixed_bytes_data));
758: }
759:
760: void
761: run_free(struct run *tmp)
762: {
763: if (tmp->how_data != NULL)
764: free (tmp->how_data);
765: if (tmp->some_bytes_data != NULL)
766: free (tmp->some_bytes_data);
767: free(tmp);
768: }
769:
770: void
771: run_marshal(struct evbuffer *evbuf, const struct run *tmp){
772: evtag_marshal_string(evbuf, RUN_HOW, tmp->how_data);
773: if (tmp->some_bytes_set) {
774: evtag_marshal(evbuf, RUN_SOME_BYTES, tmp->some_bytes_data, tmp->some_bytes_length);
775: }
776: evtag_marshal(evbuf, RUN_FIXED_BYTES, tmp->fixed_bytes_data, sizeof(tmp->fixed_bytes_data));
777: }
778:
779: int
780: run_unmarshal(struct run *tmp, struct evbuffer *evbuf)
781: {
782: ev_uint32_t tag;
783: while (EVBUFFER_LENGTH(evbuf) > 0) {
784: if (evtag_peek(evbuf, &tag) == -1)
785: return (-1);
786: switch (tag) {
787:
788: case RUN_HOW:
789:
790: if (tmp->how_set)
791: return (-1);
792: if (evtag_unmarshal_string(evbuf, RUN_HOW, &tmp->how_data) == -1) {
793: event_warnx("%s: failed to unmarshal how", __func__);
794: return (-1);
795: }
796: tmp->how_set = 1;
797: break;
798:
799: case RUN_SOME_BYTES:
800:
801: if (tmp->some_bytes_set)
802: return (-1);
803: if (evtag_payload_length(evbuf, &tmp->some_bytes_length) == -1)
804: return (-1);
805: if (tmp->some_bytes_length > EVBUFFER_LENGTH(evbuf))
806: return (-1);
807: if ((tmp->some_bytes_data = malloc(tmp->some_bytes_length)) == NULL)
808: return (-1);
809: if (evtag_unmarshal_fixed(evbuf, RUN_SOME_BYTES, tmp->some_bytes_data, tmp->some_bytes_length) == -1) {
810: event_warnx("%s: failed to unmarshal some_bytes", __func__);
811: return (-1);
812: }
813: tmp->some_bytes_set = 1;
814: break;
815:
816: case RUN_FIXED_BYTES:
817:
818: if (tmp->fixed_bytes_set)
819: return (-1);
820: if (evtag_unmarshal_fixed(evbuf, RUN_FIXED_BYTES, tmp->fixed_bytes_data, sizeof(tmp->fixed_bytes_data)) == -1) {
821: event_warnx("%s: failed to unmarshal fixed_bytes", __func__);
822: return (-1);
823: }
824: tmp->fixed_bytes_set = 1;
825: break;
826:
827: default:
828: return -1;
829: }
830: }
831:
832: if (run_complete(tmp) == -1)
833: return (-1);
834: return (0);
835: }
836:
837: int
838: run_complete(struct run *msg)
839: {
840: if (!msg->how_set)
841: return (-1);
842: if (!msg->fixed_bytes_set)
843: return (-1);
844: return (0);
845: }
846:
847: int
848: evtag_unmarshal_run(struct evbuffer *evbuf, ev_uint32_t need_tag, struct run *msg)
849: {
850: ev_uint32_t tag;
851: int res = -1;
852:
853: struct evbuffer *tmp = evbuffer_new();
854:
855: if (evtag_unmarshal(evbuf, &tag, tmp) == -1 || tag != need_tag)
856: goto error;
857:
858: if (run_unmarshal(msg, tmp) == -1)
859: goto error;
860:
861: res = 0;
862:
863: error:
864: evbuffer_free(tmp);
865: return (res);
866: }
867:
868: void
869: evtag_marshal_run(struct evbuffer *evbuf, ev_uint32_t tag, const struct run *msg)
870: {
871: struct evbuffer *_buf = evbuffer_new();
872: assert(_buf != NULL);
873: evbuffer_drain(_buf, -1);
874: run_marshal(_buf, msg);
875: evtag_marshal(evbuf, tag, EVBUFFER_DATA(_buf), EVBUFFER_LENGTH(_buf));
876: evbuffer_free(_buf);
877: }
878:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>