Freeciv-3.2
Loading...
Searching...
No Matches
packets_gen.c
Go to the documentation of this file.
1 /**************************************************************************
2 * THIS FILE WAS GENERATED *
3 * Script: common/generate_packets.py *
4 * Input: common/networking/packets.def *
5 * DO NOT CHANGE THIS FILE *
6 **************************************************************************/
7
8#ifdef HAVE_CONFIG_H
9#include <fc_config.h>
10#endif
11
12#include <string.h>
13
14/* utility */
15#include "bitvector.h"
16#include "capability.h"
17#include "genhash.h"
18#include "log.h"
19#include "mem.h"
20#include "support.h"
21
22/* common */
23#include "capstr.h"
24#include "connection.h"
25#include "dataio.h"
26#include "game.h"
27
28#include "packets.h"
29
30const char *const packet_functional_capability = "tu32";
31
32#ifdef FREECIV_DELTA_PROTOCOL
33static genhash_val_t hash_const(const void *vkey)
34{
35 return 0;
36}
37
38static bool cmp_const(const void *vkey1, const void *vkey2)
39{
40 return TRUE;
41}
42#endif /* FREECIV_DELTA_PROTOCOL */
43
44void delta_stats_report(void) {}
45
46void delta_stats_reset(void) {}
47
48const char *packet_name(enum packet_type type)
49{
50 static const char *const names[PACKET_LAST] = {
51 "PACKET_PROCESSING_STARTED",
52 "PACKET_PROCESSING_FINISHED",
53 "unknown",
54 "unknown",
55 "PACKET_SERVER_JOIN_REQ",
56 "PACKET_SERVER_JOIN_REPLY",
57 "PACKET_AUTHENTICATION_REQ",
58 "PACKET_AUTHENTICATION_REPLY",
59 "PACKET_SERVER_SHUTDOWN",
60 "PACKET_RULESET_TECH_CLASS",
61 "PACKET_NATION_SELECT_REQ",
62 "PACKET_PLAYER_READY",
63 "PACKET_ENDGAME_REPORT",
64 "PACKET_SCENARIO_DESCRIPTION",
65 "PACKET_EDIT_SCENARIO_DESC",
66 "PACKET_TILE_INFO",
67 "PACKET_GAME_INFO",
68 "PACKET_MAP_INFO",
69 "PACKET_NUKE_TILE_INFO",
70 "PACKET_TEAM_NAME_INFO",
71 "PACKET_RULESET_IMPR_FLAG",
72 "PACKET_INVESTIGATE_STARTED",
73 "PACKET_INVESTIGATE_FINISHED",
74 "unknown",
75 "unknown",
76 "PACKET_CHAT_MSG",
77 "PACKET_CHAT_MSG_REQ",
78 "PACKET_CONNECT_MSG",
79 "PACKET_EARLY_CHAT_MSG",
80 "PACKET_SERVER_INFO",
81 "PACKET_CITY_REMOVE",
82 "PACKET_CITY_INFO",
83 "PACKET_CITY_SHORT_INFO",
84 "PACKET_CITY_SELL",
85 "PACKET_CITY_BUY",
86 "PACKET_CITY_CHANGE",
87 "PACKET_CITY_WORKLIST",
88 "PACKET_CITY_MAKE_SPECIALIST",
89 "PACKET_CITY_MAKE_WORKER",
90 "PACKET_CITY_CHANGE_SPECIALIST",
91 "PACKET_CITY_RENAME",
92 "PACKET_CITY_OPTIONS_REQ",
93 "PACKET_CITY_REFRESH",
94 "PACKET_CITY_NAME_SUGGESTION_REQ",
95 "PACKET_CITY_NAME_SUGGESTION_INFO",
96 "PACKET_CITY_SABOTAGE_LIST",
97 "PACKET_CITY_NATIONALITIES",
98 "unknown",
99 "unknown",
100 "unknown",
101 "PACKET_PLAYER_REMOVE",
102 "PACKET_PLAYER_INFO",
103 "PACKET_PLAYER_PHASE_DONE",
104 "PACKET_PLAYER_RATES",
105 "PACKET_PLAYER_CHANGE_GOVERNMENT",
106 "PACKET_PLAYER_RESEARCH",
107 "PACKET_PLAYER_TECH_GOAL",
108 "PACKET_PLAYER_ATTRIBUTE_BLOCK",
109 "PACKET_PLAYER_ATTRIBUTE_CHUNK",
110 "PACKET_PLAYER_DIPLSTATE",
111 "PACKET_RESEARCH_INFO",
112 "PACKET_PLAYER_PLACE_INFRA",
113 "PACKET_UNIT_REMOVE",
114 "PACKET_UNIT_INFO",
115 "PACKET_UNIT_SHORT_INFO",
116 "PACKET_UNIT_COMBAT_INFO",
117 "PACKET_UNKNOWN_RESEARCH",
118 "unknown",
119 "unknown",
120 "unknown",
121 "unknown",
122 "PACKET_UNIT_SSCS_SET",
123 "unknown",
124 "PACKET_UNIT_ORDERS",
125 "PACKET_UNIT_SERVER_SIDE_AGENT_SET",
126 "unknown",
127 "unknown",
128 "unknown",
129 "unknown",
130 "unknown",
131 "unknown",
132 "unknown",
133 "PACKET_UNIT_ACTION_QUERY",
134 "PACKET_UNIT_TYPE_UPGRADE",
135 "PACKET_UNIT_DO_ACTION",
136 "PACKET_UNIT_ACTION_ANSWER",
137 "unknown",
138 "PACKET_UNIT_GET_ACTIONS",
139 "PACKET_CONN_PING",
140 "PACKET_CONN_PONG",
141 "PACKET_UNIT_ACTIONS",
142 "unknown",
143 "unknown",
144 "unknown",
145 "unknown",
146 "PACKET_DIPLOMACY_INIT_MEETING_REQ",
147 "PACKET_DIPLOMACY_INIT_MEETING",
148 "PACKET_DIPLOMACY_CANCEL_MEETING_REQ",
149 "PACKET_DIPLOMACY_CANCEL_MEETING",
150 "PACKET_DIPLOMACY_CREATE_CLAUSE_REQ",
151 "PACKET_DIPLOMACY_CREATE_CLAUSE",
152 "PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ",
153 "PACKET_DIPLOMACY_REMOVE_CLAUSE",
154 "PACKET_DIPLOMACY_ACCEPT_TREATY_REQ",
155 "PACKET_DIPLOMACY_ACCEPT_TREATY",
156 "PACKET_DIPLOMACY_CANCEL_PACT",
157 "unknown",
158 "unknown",
159 "unknown",
160 "unknown",
161 "PACKET_PAGE_MSG",
162 "PACKET_REPORT_REQ",
163 "unknown",
164 "unknown",
165 "unknown",
166 "PACKET_CONN_INFO",
167 "PACKET_CONN_PING_INFO",
168 "unknown",
169 "unknown",
170 "PACKET_CLIENT_INFO",
171 "unknown",
172 "unknown",
173 "unknown",
174 "unknown",
175 "unknown",
176 "PACKET_END_PHASE",
177 "PACKET_START_PHASE",
178 "PACKET_NEW_YEAR",
179 "PACKET_BEGIN_TURN",
180 "PACKET_END_TURN",
181 "PACKET_FREEZE_CLIENT",
182 "PACKET_THAW_CLIENT",
183 "unknown",
184 "unknown",
185 "unknown",
186 "PACKET_SPACESHIP_LAUNCH",
187 "PACKET_SPACESHIP_PLACE",
188 "PACKET_SPACESHIP_INFO",
189 "PACKET_CITY_RALLY_POINT",
190 "unknown",
191 "PACKET_RULESET_UNIT",
192 "PACKET_RULESET_GAME",
193 "PACKET_RULESET_SPECIALIST",
194 "PACKET_RULESET_GOVERNMENT_RULER_TITLE",
195 "PACKET_RULESET_TECH",
196 "PACKET_RULESET_GOVERNMENT",
197 "PACKET_RULESET_TERRAIN_CONTROL",
198 "PACKET_RULESET_NATION_GROUPS",
199 "PACKET_RULESET_NATION",
200 "PACKET_RULESET_CITY",
201 "PACKET_RULESET_BUILDING",
202 "PACKET_RULESET_TERRAIN",
203 "PACKET_RULESET_UNIT_CLASS",
204 "PACKET_RULESET_BASE",
205 "unknown",
206 "PACKET_RULESET_CONTROL",
207 "unknown",
208 "unknown",
209 "unknown",
210 "unknown",
211 "PACKET_SINGLE_WANT_HACK_REQ",
212 "PACKET_SINGLE_WANT_HACK_REPLY",
213 "PACKET_RULESET_CHOICES",
214 "PACKET_GAME_LOAD",
215 "PACKET_SERVER_SETTING_CONTROL",
216 "PACKET_SERVER_SETTING_CONST",
217 "PACKET_SERVER_SETTING_BOOL",
218 "PACKET_SERVER_SETTING_INT",
219 "PACKET_SERVER_SETTING_STR",
220 "PACKET_SERVER_SETTING_ENUM",
221 "PACKET_SERVER_SETTING_BITWISE",
222 "PACKET_RULESET_SELECT",
223 "unknown",
224 "unknown",
225 "unknown",
226 "PACKET_RULESET_EFFECT",
227 "unknown",
228 "PACKET_RULESET_RESOURCE",
229 "unknown",
230 "unknown",
231 "PACKET_SCENARIO_INFO",
232 "PACKET_SAVE_SCENARIO",
233 "unknown",
234 "unknown",
235 "unknown",
236 "PACKET_VOTE_NEW",
237 "PACKET_VOTE_UPDATE",
238 "PACKET_VOTE_REMOVE",
239 "PACKET_VOTE_RESOLVE",
240 "PACKET_VOTE_SUBMIT",
241 "PACKET_EDIT_MODE",
242 "unknown",
243 "unknown",
244 "unknown",
245 "unknown",
246 "unknown",
247 "unknown",
248 "PACKET_EDIT_RECALCULATE_BORDERS",
249 "PACKET_EDIT_CHECK_TILES",
250 "PACKET_EDIT_TOGGLE_FOGOFWAR",
251 "PACKET_EDIT_TILE_TERRAIN",
252 "unknown",
253 "PACKET_EDIT_TILE_EXTRA",
254 "unknown",
255 "PACKET_EDIT_STARTPOS",
256 "PACKET_EDIT_STARTPOS_FULL",
257 "PACKET_EDIT_TILE",
258 "PACKET_EDIT_UNIT_CREATE",
259 "PACKET_EDIT_UNIT_REMOVE",
260 "PACKET_EDIT_UNIT_REMOVE_BY_ID",
261 "PACKET_EDIT_UNIT",
262 "PACKET_EDIT_CITY_CREATE",
263 "PACKET_EDIT_CITY_REMOVE",
264 "PACKET_EDIT_CITY",
265 "PACKET_EDIT_PLAYER_CREATE",
266 "PACKET_EDIT_PLAYER_REMOVE",
267 "PACKET_EDIT_PLAYER",
268 "PACKET_EDIT_PLAYER_VISION",
269 "PACKET_EDIT_GAME",
270 "PACKET_EDIT_OBJECT_CREATED",
271 "PACKET_RULESET_ROAD",
272 "unknown",
273 "PACKET_UNIT_CHANGE_ACTIVITY",
274 "PACKET_ENDGAME_PLAYER",
275 "PACKET_RULESET_DISASTER",
276 "PACKET_RULESETS_READY",
277 "PACKET_RULESET_EXTRA_FLAG",
278 "PACKET_RULESET_TRADE",
279 "PACKET_RULESET_UNIT_BONUS",
280 "PACKET_RULESET_UNIT_FLAG",
281 "PACKET_RULESET_UNIT_CLASS_FLAG",
282 "PACKET_RULESET_TERRAIN_FLAG",
283 "PACKET_RULESET_EXTRA",
284 "PACKET_RULESET_ACHIEVEMENT",
285 "PACKET_RULESET_TECH_FLAG",
286 "PACKET_RULESET_ACTION_ENABLER",
287 "PACKET_RULESET_NATION_SETS",
288 "PACKET_NATION_AVAILABILITY",
289 "PACKET_ACHIEVEMENT_INFO",
290 "PACKET_RULESET_STYLE",
291 "PACKET_RULESET_MUSIC",
292 "PACKET_WORKER_TASK",
293 "PACKET_PLAYER_MULTIPLIER",
294 "PACKET_RULESET_MULTIPLIER",
295 "PACKET_TIMEOUT_INFO",
296 "PACKET_PLAY_MUSIC",
297 "PACKET_RULESET_ACTION",
298 "PACKET_RULESET_DESCRIPTION_PART",
299 "PACKET_RULESET_GOODS",
300 "PACKET_TRADE_ROUTE_INFO",
301 "PACKET_PAGE_MSG_PART",
302 "PACKET_RULESET_SUMMARY",
303 "PACKET_RULESET_ACTION_AUTO",
304 "PACKET_SET_TOPOLOGY",
305 "PACKET_CLIENT_HEARTBEAT",
306 "PACKET_CALENDAR_INFO",
307 "PACKET_WEB_CITY_INFO_ADDITION",
308 "PACKET_WEB_CMA_SET",
309 "PACKET_WEB_CMA_CLEAR",
310 "PACKET_WEB_PLAYER_INFO_ADDITION",
311 "PACKET_WEB_RULESET_UNIT_ADDITION",
312 "unknown",
313 "unknown",
314 "unknown",
315 "unknown",
316 "unknown",
317 "unknown",
318 "unknown",
319 "unknown",
320 "unknown",
321 "unknown",
322 "unknown",
323 "unknown",
324 "unknown",
325 "unknown",
326 "unknown",
327 "unknown",
328 "unknown",
329 "unknown",
330 "unknown",
331 "unknown",
332 "unknown",
333 "unknown",
334 "unknown",
335 "unknown",
336 "unknown",
337 "unknown",
338 "unknown",
339 "unknown",
340 "unknown",
341 "unknown",
342 "unknown",
343 "unknown",
344 "unknown",
345 "unknown",
346 "unknown",
347 "unknown",
348 "unknown",
349 "unknown",
350 "unknown",
351 "unknown",
352 "unknown",
353 "unknown",
354 "unknown",
355 "unknown",
356 "unknown",
357 "unknown",
358 "unknown",
359 "unknown",
360 "unknown",
361 "unknown",
362 "unknown",
363 "unknown",
364 "unknown",
365 "unknown",
366 "unknown",
367 "unknown",
368 "unknown",
369 "unknown",
370 "unknown",
371 "unknown",
372 "unknown",
373 "unknown",
374 "unknown",
375 "unknown",
376 "unknown",
377 "unknown",
378 "unknown",
379 "unknown",
380 "unknown",
381 "unknown",
382 "unknown",
383 "unknown",
384 "unknown",
385 "unknown",
386 "unknown",
387 "unknown",
388 "unknown",
389 "unknown",
390 "unknown",
391 "unknown",
392 "unknown",
393 "unknown",
394 "unknown",
395 "unknown",
396 "unknown",
397 "unknown",
398 "unknown",
399 "unknown",
400 "unknown",
401 "unknown",
402 "unknown",
403 "unknown",
404 "unknown",
405 "unknown",
406 "unknown",
407 "unknown",
408 "unknown",
409 "unknown",
410 "unknown",
411 "unknown",
412 "unknown",
413 "unknown",
414 "unknown",
415 "unknown",
416 "unknown",
417 "unknown",
418 "unknown",
419 "unknown",
420 "unknown",
421 "unknown",
422 "unknown",
423 "unknown",
424 "unknown",
425 "unknown",
426 "unknown",
427 "unknown",
428 "unknown",
429 "unknown",
430 "unknown",
431 "unknown",
432 "unknown",
433 "unknown",
434 "unknown",
435 "unknown",
436 "unknown",
437 "unknown",
438 "unknown",
439 "unknown",
440 "unknown",
441 "unknown",
442 "unknown",
443 "unknown",
444 "unknown",
445 "unknown",
446 "unknown",
447 "unknown",
448 "unknown",
449 "unknown",
450 "unknown",
451 "unknown",
452 "unknown",
453 "unknown",
454 "unknown",
455 "unknown",
456 "unknown",
457 "unknown",
458 "unknown",
459 "unknown",
460 "unknown",
461 "unknown",
462 "unknown",
463 "unknown",
464 "unknown",
465 "unknown",
466 "unknown",
467 "unknown",
468 "unknown",
469 "unknown",
470 "unknown",
471 "unknown",
472 "unknown",
473 "unknown",
474 "unknown",
475 "unknown",
476 "unknown",
477 "unknown",
478 "unknown",
479 "unknown",
480 "unknown",
481 "unknown",
482 "unknown",
483 "unknown",
484 "unknown",
485 "unknown",
486 "unknown",
487 "unknown",
488 "unknown",
489 "unknown",
490 "unknown",
491 "unknown",
492 "unknown",
493 "unknown",
494 "unknown",
495 "unknown",
496 "unknown",
497 "unknown",
498 "unknown",
499 "unknown",
500 "unknown",
501 "unknown",
502 "unknown",
503 "unknown",
504 "unknown",
505 "unknown",
506 "unknown",
507 "unknown",
508 "unknown",
509 "unknown",
510 "unknown",
511 "unknown",
512 "unknown",
513 "unknown",
514 "unknown",
515 "unknown",
516 "unknown",
517 "unknown",
518 "unknown",
519 "unknown",
520 "unknown",
521 "unknown",
522 "unknown",
523 "unknown",
524 "unknown",
525 "unknown",
526 "unknown",
527 "unknown",
528 "unknown",
529 "unknown",
530 "unknown",
531 "unknown",
532 "unknown",
533 "unknown",
534 "unknown",
535 "unknown",
536 "unknown",
537 "unknown",
538 "unknown",
539 "unknown",
540 "unknown",
541 "unknown",
542 "unknown",
543 "unknown",
544 "unknown",
545 "unknown",
546 "unknown",
547 "unknown",
548 "unknown",
549 "unknown",
550 "unknown",
551 "unknown",
552 "unknown",
553 "unknown",
554 "unknown",
555 "unknown",
556 "unknown",
557 "unknown",
558 "unknown",
559 "unknown",
560 "unknown",
561 "unknown",
562 "unknown",
563 "PACKET_RULESET_CLAUSE",
564 "PACKET_RULESET_COUNTER",
565 "PACKET_CITY_UPDATE_COUNTERS",
566 "PACKET_POPUP_IMAGE",
567 "PACKET_EDIT_FOGOFWAR_STATE",
568 "PACKET_SYNC_SERIAL",
569 "PACKET_SYNC_SERIAL_REPLY",
570 };
571
572 return (type < PACKET_LAST ? names[type] : "unknown");
573}
574
576{
577 static const bool flag[PACKET_LAST] = {
578 FALSE, /* PACKET_PROCESSING_STARTED */
579 FALSE, /* PACKET_PROCESSING_FINISHED */
580 FALSE,
581 FALSE,
582 FALSE, /* PACKET_SERVER_JOIN_REQ */
583 FALSE, /* PACKET_SERVER_JOIN_REPLY */
584 FALSE, /* PACKET_AUTHENTICATION_REQ */
585 FALSE, /* PACKET_AUTHENTICATION_REPLY */
586 FALSE, /* PACKET_SERVER_SHUTDOWN */
587 FALSE, /* PACKET_RULESET_TECH_CLASS */
588 FALSE, /* PACKET_NATION_SELECT_REQ */
589 FALSE, /* PACKET_PLAYER_READY */
590 FALSE, /* PACKET_ENDGAME_REPORT */
591 FALSE, /* PACKET_SCENARIO_DESCRIPTION */
592 FALSE, /* PACKET_EDIT_SCENARIO_DESC */
593 TRUE, /* PACKET_TILE_INFO */
594 FALSE, /* PACKET_GAME_INFO */
595 FALSE, /* PACKET_MAP_INFO */
596 FALSE, /* PACKET_NUKE_TILE_INFO */
597 FALSE, /* PACKET_TEAM_NAME_INFO */
598 FALSE, /* PACKET_RULESET_IMPR_FLAG */
599 FALSE, /* PACKET_INVESTIGATE_STARTED */
600 FALSE, /* PACKET_INVESTIGATE_FINISHED */
601 FALSE,
602 FALSE,
603 FALSE, /* PACKET_CHAT_MSG */
604 FALSE, /* PACKET_CHAT_MSG_REQ */
605 FALSE, /* PACKET_CONNECT_MSG */
606 FALSE, /* PACKET_EARLY_CHAT_MSG */
607 FALSE, /* PACKET_SERVER_INFO */
608 FALSE, /* PACKET_CITY_REMOVE */
609 TRUE, /* PACKET_CITY_INFO */
610 TRUE, /* PACKET_CITY_SHORT_INFO */
611 FALSE, /* PACKET_CITY_SELL */
612 FALSE, /* PACKET_CITY_BUY */
613 FALSE, /* PACKET_CITY_CHANGE */
614 FALSE, /* PACKET_CITY_WORKLIST */
615 FALSE, /* PACKET_CITY_MAKE_SPECIALIST */
616 FALSE, /* PACKET_CITY_MAKE_WORKER */
617 FALSE, /* PACKET_CITY_CHANGE_SPECIALIST */
618 FALSE, /* PACKET_CITY_RENAME */
619 FALSE, /* PACKET_CITY_OPTIONS_REQ */
620 FALSE, /* PACKET_CITY_REFRESH */
621 FALSE, /* PACKET_CITY_NAME_SUGGESTION_REQ */
622 FALSE, /* PACKET_CITY_NAME_SUGGESTION_INFO */
623 FALSE, /* PACKET_CITY_SABOTAGE_LIST */
624 TRUE, /* PACKET_CITY_NATIONALITIES */
625 FALSE,
626 FALSE,
627 FALSE,
628 FALSE, /* PACKET_PLAYER_REMOVE */
629 FALSE, /* PACKET_PLAYER_INFO */
630 FALSE, /* PACKET_PLAYER_PHASE_DONE */
631 FALSE, /* PACKET_PLAYER_RATES */
632 FALSE, /* PACKET_PLAYER_CHANGE_GOVERNMENT */
633 FALSE, /* PACKET_PLAYER_RESEARCH */
634 FALSE, /* PACKET_PLAYER_TECH_GOAL */
635 FALSE, /* PACKET_PLAYER_ATTRIBUTE_BLOCK */
636 FALSE, /* PACKET_PLAYER_ATTRIBUTE_CHUNK */
637 FALSE, /* PACKET_PLAYER_DIPLSTATE */
638 TRUE, /* PACKET_RESEARCH_INFO */
639 FALSE, /* PACKET_PLAYER_PLACE_INFRA */
640 FALSE, /* PACKET_UNIT_REMOVE */
641 TRUE, /* PACKET_UNIT_INFO */
642 TRUE, /* PACKET_UNIT_SHORT_INFO */
643 FALSE, /* PACKET_UNIT_COMBAT_INFO */
644 TRUE, /* PACKET_UNKNOWN_RESEARCH */
645 FALSE,
646 FALSE,
647 FALSE,
648 FALSE,
649 FALSE, /* PACKET_UNIT_SSCS_SET */
650 FALSE,
651 FALSE, /* PACKET_UNIT_ORDERS */
652 FALSE, /* PACKET_UNIT_SERVER_SIDE_AGENT_SET */
653 FALSE,
654 FALSE,
655 FALSE,
656 FALSE,
657 FALSE,
658 FALSE,
659 FALSE,
660 FALSE, /* PACKET_UNIT_ACTION_QUERY */
661 FALSE, /* PACKET_UNIT_TYPE_UPGRADE */
662 FALSE, /* PACKET_UNIT_DO_ACTION */
663 FALSE, /* PACKET_UNIT_ACTION_ANSWER */
664 FALSE,
665 FALSE, /* PACKET_UNIT_GET_ACTIONS */
666 FALSE, /* PACKET_CONN_PING */
667 FALSE, /* PACKET_CONN_PONG */
668 FALSE, /* PACKET_UNIT_ACTIONS */
669 FALSE,
670 FALSE,
671 FALSE,
672 FALSE,
673 FALSE, /* PACKET_DIPLOMACY_INIT_MEETING_REQ */
674 FALSE, /* PACKET_DIPLOMACY_INIT_MEETING */
675 FALSE, /* PACKET_DIPLOMACY_CANCEL_MEETING_REQ */
676 FALSE, /* PACKET_DIPLOMACY_CANCEL_MEETING */
677 FALSE, /* PACKET_DIPLOMACY_CREATE_CLAUSE_REQ */
678 FALSE, /* PACKET_DIPLOMACY_CREATE_CLAUSE */
679 FALSE, /* PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ */
680 FALSE, /* PACKET_DIPLOMACY_REMOVE_CLAUSE */
681 FALSE, /* PACKET_DIPLOMACY_ACCEPT_TREATY_REQ */
682 FALSE, /* PACKET_DIPLOMACY_ACCEPT_TREATY */
683 FALSE, /* PACKET_DIPLOMACY_CANCEL_PACT */
684 FALSE,
685 FALSE,
686 FALSE,
687 FALSE,
688 FALSE, /* PACKET_PAGE_MSG */
689 FALSE, /* PACKET_REPORT_REQ */
690 FALSE,
691 FALSE,
692 FALSE,
693 FALSE, /* PACKET_CONN_INFO */
694 FALSE, /* PACKET_CONN_PING_INFO */
695 FALSE,
696 FALSE,
697 FALSE, /* PACKET_CLIENT_INFO */
698 FALSE,
699 FALSE,
700 FALSE,
701 FALSE,
702 FALSE,
703 FALSE, /* PACKET_END_PHASE */
704 FALSE, /* PACKET_START_PHASE */
705 FALSE, /* PACKET_NEW_YEAR */
706 FALSE, /* PACKET_BEGIN_TURN */
707 FALSE, /* PACKET_END_TURN */
708 FALSE, /* PACKET_FREEZE_CLIENT */
709 FALSE, /* PACKET_THAW_CLIENT */
710 FALSE,
711 FALSE,
712 FALSE,
713 FALSE, /* PACKET_SPACESHIP_LAUNCH */
714 FALSE, /* PACKET_SPACESHIP_PLACE */
715 TRUE, /* PACKET_SPACESHIP_INFO */
716 TRUE, /* PACKET_CITY_RALLY_POINT */
717 FALSE,
718 FALSE, /* PACKET_RULESET_UNIT */
719 FALSE, /* PACKET_RULESET_GAME */
720 FALSE, /* PACKET_RULESET_SPECIALIST */
721 FALSE, /* PACKET_RULESET_GOVERNMENT_RULER_TITLE */
722 FALSE, /* PACKET_RULESET_TECH */
723 FALSE, /* PACKET_RULESET_GOVERNMENT */
724 FALSE, /* PACKET_RULESET_TERRAIN_CONTROL */
725 FALSE, /* PACKET_RULESET_NATION_GROUPS */
726 FALSE, /* PACKET_RULESET_NATION */
727 FALSE, /* PACKET_RULESET_CITY */
728 FALSE, /* PACKET_RULESET_BUILDING */
729 FALSE, /* PACKET_RULESET_TERRAIN */
730 FALSE, /* PACKET_RULESET_UNIT_CLASS */
731 FALSE, /* PACKET_RULESET_BASE */
732 FALSE,
733 FALSE, /* PACKET_RULESET_CONTROL */
734 FALSE,
735 FALSE,
736 FALSE,
737 FALSE,
738 FALSE, /* PACKET_SINGLE_WANT_HACK_REQ */
739 FALSE, /* PACKET_SINGLE_WANT_HACK_REPLY */
740 FALSE, /* PACKET_RULESET_CHOICES */
741 FALSE, /* PACKET_GAME_LOAD */
742 FALSE, /* PACKET_SERVER_SETTING_CONTROL */
743 FALSE, /* PACKET_SERVER_SETTING_CONST */
744 FALSE, /* PACKET_SERVER_SETTING_BOOL */
745 FALSE, /* PACKET_SERVER_SETTING_INT */
746 FALSE, /* PACKET_SERVER_SETTING_STR */
747 FALSE, /* PACKET_SERVER_SETTING_ENUM */
748 FALSE, /* PACKET_SERVER_SETTING_BITWISE */
749 FALSE, /* PACKET_RULESET_SELECT */
750 FALSE,
751 FALSE,
752 FALSE,
753 FALSE, /* PACKET_RULESET_EFFECT */
754 FALSE,
755 FALSE, /* PACKET_RULESET_RESOURCE */
756 FALSE,
757 FALSE,
758 FALSE, /* PACKET_SCENARIO_INFO */
759 FALSE, /* PACKET_SAVE_SCENARIO */
760 FALSE,
761 FALSE,
762 FALSE,
763 FALSE, /* PACKET_VOTE_NEW */
764 FALSE, /* PACKET_VOTE_UPDATE */
765 FALSE, /* PACKET_VOTE_REMOVE */
766 FALSE, /* PACKET_VOTE_RESOLVE */
767 FALSE, /* PACKET_VOTE_SUBMIT */
768 FALSE, /* PACKET_EDIT_MODE */
769 FALSE,
770 FALSE,
771 FALSE,
772 FALSE,
773 FALSE,
774 FALSE,
775 FALSE, /* PACKET_EDIT_RECALCULATE_BORDERS */
776 FALSE, /* PACKET_EDIT_CHECK_TILES */
777 FALSE, /* PACKET_EDIT_TOGGLE_FOGOFWAR */
778 FALSE, /* PACKET_EDIT_TILE_TERRAIN */
779 FALSE,
780 FALSE, /* PACKET_EDIT_TILE_EXTRA */
781 FALSE,
782 FALSE, /* PACKET_EDIT_STARTPOS */
783 FALSE, /* PACKET_EDIT_STARTPOS_FULL */
784 FALSE, /* PACKET_EDIT_TILE */
785 FALSE, /* PACKET_EDIT_UNIT_CREATE */
786 FALSE, /* PACKET_EDIT_UNIT_REMOVE */
787 FALSE, /* PACKET_EDIT_UNIT_REMOVE_BY_ID */
788 FALSE, /* PACKET_EDIT_UNIT */
789 FALSE, /* PACKET_EDIT_CITY_CREATE */
790 FALSE, /* PACKET_EDIT_CITY_REMOVE */
791 FALSE, /* PACKET_EDIT_CITY */
792 FALSE, /* PACKET_EDIT_PLAYER_CREATE */
793 FALSE, /* PACKET_EDIT_PLAYER_REMOVE */
794 FALSE, /* PACKET_EDIT_PLAYER */
795 FALSE, /* PACKET_EDIT_PLAYER_VISION */
796 FALSE, /* PACKET_EDIT_GAME */
797 FALSE, /* PACKET_EDIT_OBJECT_CREATED */
798 FALSE, /* PACKET_RULESET_ROAD */
799 FALSE,
800 FALSE, /* PACKET_UNIT_CHANGE_ACTIVITY */
801 FALSE, /* PACKET_ENDGAME_PLAYER */
802 FALSE, /* PACKET_RULESET_DISASTER */
803 FALSE, /* PACKET_RULESETS_READY */
804 FALSE, /* PACKET_RULESET_EXTRA_FLAG */
805 FALSE, /* PACKET_RULESET_TRADE */
806 FALSE, /* PACKET_RULESET_UNIT_BONUS */
807 FALSE, /* PACKET_RULESET_UNIT_FLAG */
808 FALSE, /* PACKET_RULESET_UNIT_CLASS_FLAG */
809 FALSE, /* PACKET_RULESET_TERRAIN_FLAG */
810 FALSE, /* PACKET_RULESET_EXTRA */
811 FALSE, /* PACKET_RULESET_ACHIEVEMENT */
812 FALSE, /* PACKET_RULESET_TECH_FLAG */
813 FALSE, /* PACKET_RULESET_ACTION_ENABLER */
814 FALSE, /* PACKET_RULESET_NATION_SETS */
815 FALSE, /* PACKET_NATION_AVAILABILITY */
816 FALSE, /* PACKET_ACHIEVEMENT_INFO */
817 FALSE, /* PACKET_RULESET_STYLE */
818 FALSE, /* PACKET_RULESET_MUSIC */
819 FALSE, /* PACKET_WORKER_TASK */
820 FALSE, /* PACKET_PLAYER_MULTIPLIER */
821 FALSE, /* PACKET_RULESET_MULTIPLIER */
822 FALSE, /* PACKET_TIMEOUT_INFO */
823 FALSE, /* PACKET_PLAY_MUSIC */
824 FALSE, /* PACKET_RULESET_ACTION */
825 FALSE, /* PACKET_RULESET_DESCRIPTION_PART */
826 FALSE, /* PACKET_RULESET_GOODS */
827 FALSE, /* PACKET_TRADE_ROUTE_INFO */
828 FALSE, /* PACKET_PAGE_MSG_PART */
829 FALSE, /* PACKET_RULESET_SUMMARY */
830 FALSE, /* PACKET_RULESET_ACTION_AUTO */
831 FALSE, /* PACKET_SET_TOPOLOGY */
832 FALSE, /* PACKET_CLIENT_HEARTBEAT */
833 FALSE, /* PACKET_CALENDAR_INFO */
834 TRUE, /* PACKET_WEB_CITY_INFO_ADDITION */
835 FALSE, /* PACKET_WEB_CMA_SET */
836 FALSE, /* PACKET_WEB_CMA_CLEAR */
837 FALSE, /* PACKET_WEB_PLAYER_INFO_ADDITION */
838 FALSE, /* PACKET_WEB_RULESET_UNIT_ADDITION */
839 FALSE,
840 FALSE,
841 FALSE,
842 FALSE,
843 FALSE,
844 FALSE,
845 FALSE,
846 FALSE,
847 FALSE,
848 FALSE,
849 FALSE,
850 FALSE,
851 FALSE,
852 FALSE,
853 FALSE,
854 FALSE,
855 FALSE,
856 FALSE,
857 FALSE,
858 FALSE,
859 FALSE,
860 FALSE,
861 FALSE,
862 FALSE,
863 FALSE,
864 FALSE,
865 FALSE,
866 FALSE,
867 FALSE,
868 FALSE,
869 FALSE,
870 FALSE,
871 FALSE,
872 FALSE,
873 FALSE,
874 FALSE,
875 FALSE,
876 FALSE,
877 FALSE,
878 FALSE,
879 FALSE,
880 FALSE,
881 FALSE,
882 FALSE,
883 FALSE,
884 FALSE,
885 FALSE,
886 FALSE,
887 FALSE,
888 FALSE,
889 FALSE,
890 FALSE,
891 FALSE,
892 FALSE,
893 FALSE,
894 FALSE,
895 FALSE,
896 FALSE,
897 FALSE,
898 FALSE,
899 FALSE,
900 FALSE,
901 FALSE,
902 FALSE,
903 FALSE,
904 FALSE,
905 FALSE,
906 FALSE,
907 FALSE,
908 FALSE,
909 FALSE,
910 FALSE,
911 FALSE,
912 FALSE,
913 FALSE,
914 FALSE,
915 FALSE,
916 FALSE,
917 FALSE,
918 FALSE,
919 FALSE,
920 FALSE,
921 FALSE,
922 FALSE,
923 FALSE,
924 FALSE,
925 FALSE,
926 FALSE,
927 FALSE,
928 FALSE,
929 FALSE,
930 FALSE,
931 FALSE,
932 FALSE,
933 FALSE,
934 FALSE,
935 FALSE,
936 FALSE,
937 FALSE,
938 FALSE,
939 FALSE,
940 FALSE,
941 FALSE,
942 FALSE,
943 FALSE,
944 FALSE,
945 FALSE,
946 FALSE,
947 FALSE,
948 FALSE,
949 FALSE,
950 FALSE,
951 FALSE,
952 FALSE,
953 FALSE,
954 FALSE,
955 FALSE,
956 FALSE,
957 FALSE,
958 FALSE,
959 FALSE,
960 FALSE,
961 FALSE,
962 FALSE,
963 FALSE,
964 FALSE,
965 FALSE,
966 FALSE,
967 FALSE,
968 FALSE,
969 FALSE,
970 FALSE,
971 FALSE,
972 FALSE,
973 FALSE,
974 FALSE,
975 FALSE,
976 FALSE,
977 FALSE,
978 FALSE,
979 FALSE,
980 FALSE,
981 FALSE,
982 FALSE,
983 FALSE,
984 FALSE,
985 FALSE,
986 FALSE,
987 FALSE,
988 FALSE,
989 FALSE,
990 FALSE,
991 FALSE,
992 FALSE,
993 FALSE,
994 FALSE,
995 FALSE,
996 FALSE,
997 FALSE,
998 FALSE,
999 FALSE,
1000 FALSE,
1001 FALSE,
1002 FALSE,
1003 FALSE,
1004 FALSE,
1005 FALSE,
1006 FALSE,
1007 FALSE,
1008 FALSE,
1009 FALSE,
1010 FALSE,
1011 FALSE,
1012 FALSE,
1013 FALSE,
1014 FALSE,
1015 FALSE,
1016 FALSE,
1017 FALSE,
1018 FALSE,
1019 FALSE,
1020 FALSE,
1021 FALSE,
1022 FALSE,
1023 FALSE,
1024 FALSE,
1025 FALSE,
1026 FALSE,
1027 FALSE,
1028 FALSE,
1029 FALSE,
1030 FALSE,
1031 FALSE,
1032 FALSE,
1033 FALSE,
1034 FALSE,
1035 FALSE,
1036 FALSE,
1037 FALSE,
1038 FALSE,
1039 FALSE,
1040 FALSE,
1041 FALSE,
1042 FALSE,
1043 FALSE,
1044 FALSE,
1045 FALSE,
1046 FALSE,
1047 FALSE,
1048 FALSE,
1049 FALSE,
1050 FALSE,
1051 FALSE,
1052 FALSE,
1053 FALSE,
1054 FALSE,
1055 FALSE,
1056 FALSE,
1057 FALSE,
1058 FALSE,
1059 FALSE,
1060 FALSE,
1061 FALSE,
1062 FALSE,
1063 FALSE,
1064 FALSE,
1065 FALSE,
1066 FALSE,
1067 FALSE,
1068 FALSE,
1069 FALSE,
1070 FALSE,
1071 FALSE,
1072 FALSE,
1073 FALSE,
1074 FALSE,
1075 FALSE,
1076 FALSE,
1077 FALSE,
1078 FALSE,
1079 FALSE,
1080 FALSE,
1081 FALSE,
1082 FALSE,
1083 FALSE,
1084 FALSE,
1085 FALSE,
1086 FALSE,
1087 FALSE,
1088 FALSE,
1089 FALSE,
1090 FALSE, /* PACKET_RULESET_CLAUSE */
1091 FALSE, /* PACKET_RULESET_COUNTER */
1092 TRUE, /* PACKET_CITY_UPDATE_COUNTERS */
1093 FALSE, /* PACKET_POPUP_IMAGE */
1094 FALSE, /* PACKET_EDIT_FOGOFWAR_STATE */
1095 FALSE, /* PACKET_SYNC_SERIAL */
1096 FALSE, /* PACKET_SYNC_SERIAL_REPLY */
1097 };
1098
1099 return (type < PACKET_LAST ? flag[type] : FALSE);
1100}
1101
1103{
1105#if 1 /* To match endif */
1106 real_packet->__dummy = 0xff;
1107#endif
1108 log_packet_detailed("packet_processing_started_100: got info about ()");
1110}
1111
1113{
1115
1116 log_packet_detailed("packet_processing_started_100: sending info about ()");
1118}
1119
1121{
1122 if (!pc->used) {
1123 log_error("WARNING: trying to send data to the closed connection %s",
1125 return -1;
1126 }
1127 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PROCESSING_STARTED].no_packet != NULL, -1,
1128 "Handler for PACKET_PROCESSING_STARTED not installed");
1129 return pc->phs.handlers->send[PACKET_PROCESSING_STARTED].no_packet(pc);
1130}
1131
1133{
1135#if 1 /* To match endif */
1136 real_packet->__dummy = 0xff;
1137#endif
1138 log_packet_detailed("packet_processing_finished_100: got info about ()");
1140}
1141
1143{
1145
1146 log_packet_detailed("packet_processing_finished_100: sending info about ()");
1148}
1149
1151{
1152 if (!pc->used) {
1153 log_error("WARNING: trying to send data to the closed connection %s",
1155 return -1;
1156 }
1157 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PROCESSING_FINISHED].no_packet != NULL, -1,
1158 "Handler for PACKET_PROCESSING_FINISHED not installed");
1159 return pc->phs.handlers->send[PACKET_PROCESSING_FINISHED].no_packet(pc);
1160}
1161
1162#ifdef FREECIV_DELTA_PROTOCOL
1163#define hash_packet_investigate_started_100 hash_const
1164
1165#define cmp_packet_investigate_started_100 cmp_const
1166
1168#endif /* FREECIV_DELTA_PROTOCOL */
1169
1171{
1172#ifdef FREECIV_DELTA_PROTOCOL
1174 struct packet_investigate_started *old;
1175 struct genhash **hash = pc->phs.received + PACKET_INVESTIGATE_STARTED;
1176#endif /* FREECIV_DELTA_PROTOCOL */
1178#ifdef FREECIV_JSON_CONNECTION
1179 struct plocation field_addr;
1180 {
1184 }
1185#endif /* FREECIV_JSON_CONNECTION */
1186
1187#ifdef FREECIV_DELTA_PROTOCOL
1188#ifdef FREECIV_JSON_CONNECTION
1189 field_addr.name = "fields";
1190#endif /* FREECIV_JSON_CONNECTION */
1191 DIO_BV_GET(&din, &field_addr, fields);
1192
1193#else /* FREECIV_DELTA_PROTOCOL */
1194#ifdef FREECIV_JSON_CONNECTION
1195 field_addr.name = "city_id";
1196#endif /* FREECIV_JSON_CONNECTION */
1197 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
1199 }
1200#endif
1201 log_packet_detailed("packet_investigate_started_100: got info about ()");
1202
1203#ifdef FREECIV_DELTA_PROTOCOL
1204 if (NULL == *hash) {
1206 NULL, NULL, NULL, free);
1207 }
1208
1209 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1210 *real_packet = *old;
1211 } else {
1212 log_packet_detailed(" no old info");
1213 memset(real_packet, 0, sizeof(*real_packet));
1214 }
1215
1216 if (BV_ISSET(fields, 0)) {
1217 log_packet_detailed(" got field 'city_id'");
1218#ifdef FREECIV_JSON_CONNECTION
1219 field_addr.name = "city_id";
1220#endif /* FREECIV_JSON_CONNECTION */
1221 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
1223 }
1224 }
1225
1226 if (NULL == old) {
1227 old = fc_malloc(sizeof(*old));
1228 *old = *real_packet;
1229 genhash_insert(*hash, old, old);
1230 } else {
1231 *old = *real_packet;
1232 }
1233
1234#endif /* FREECIV_DELTA_PROTOCOL */
1236}
1237
1239{
1240 const struct packet_investigate_started *real_packet = packet;
1241 int e;
1242#ifdef FREECIV_DELTA_PROTOCOL
1244 struct packet_investigate_started *old;
1245 bool differ;
1246 struct genhash **hash = pc->phs.sent + PACKET_INVESTIGATE_STARTED;
1247#endif /* FREECIV_DELTA_PROTOCOL */
1249#ifdef FREECIV_JSON_CONNECTION
1250 struct plocation field_addr;
1251 {
1255 }
1256#endif /* FREECIV_JSON_CONNECTION */
1257
1258 log_packet_detailed("packet_investigate_started_100: sending info about ()");
1259
1260#ifdef FREECIV_DELTA_PROTOCOL
1261 if (NULL == *hash) {
1263 NULL, NULL, NULL, free);
1264 }
1265 BV_CLR_ALL(fields);
1266
1267 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
1268 old = fc_malloc(sizeof(*old));
1269 *old = *real_packet;
1270 genhash_insert(*hash, old, old);
1271 memset(old, 0, sizeof(*old));
1272 }
1273 differ = (old->city_id != real_packet->city_id);
1274 if (differ) {
1275 BV_SET(fields, 0);
1276 }
1277
1278
1279#ifdef FREECIV_JSON_CONNECTION
1280 field_addr.name = "fields";
1281#endif /* FREECIV_JSON_CONNECTION */
1282 e = 0;
1283 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1284 if (e) {
1285 log_packet_detailed("fields bitvector error detected");
1286 }
1287
1288 if (BV_ISSET(fields, 0)) {
1289 log_packet_detailed(" field 'city_id' has changed");
1290#ifdef FREECIV_JSON_CONNECTION
1291 field_addr.name = "city_id";
1292#endif /* FREECIV_JSON_CONNECTION */
1293 e = 0;
1294 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
1295 if (e) {
1296 log_packet_detailed("'city_id' field error detected");
1297 }
1298 }
1299
1300 *old = *real_packet;
1301#endif /* FREECIV_DELTA_PROTOCOL */
1302#ifndef FREECIV_DELTA_PROTOCOL
1303#ifdef FREECIV_JSON_CONNECTION
1304 field_addr.name = "city_id";
1305#endif /* FREECIV_JSON_CONNECTION */
1306 e = 0;
1307 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
1308 if (e) {
1309 log_packet_detailed("'city_id' field error detected");
1310 }
1311
1312#endif
1314}
1315
1317{
1318 if (!pc->used) {
1319 log_error("WARNING: trying to send data to the closed connection %s",
1321 return -1;
1322 }
1323 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_INVESTIGATE_STARTED].packet != NULL, -1,
1324 "Handler for PACKET_INVESTIGATE_STARTED not installed");
1325 return pc->phs.handlers->send[PACKET_INVESTIGATE_STARTED].packet(pc, packet);
1326}
1327
1334
1336{
1337 struct packet_investigate_started packet, *real_packet = &packet;
1338
1340
1342}
1343
1345{
1346 struct packet_investigate_started packet, *real_packet = &packet;
1347
1349
1351}
1352
1353#ifdef FREECIV_DELTA_PROTOCOL
1354#define hash_packet_investigate_finished_100 hash_const
1355
1356#define cmp_packet_investigate_finished_100 cmp_const
1357
1359#endif /* FREECIV_DELTA_PROTOCOL */
1360
1362{
1363#ifdef FREECIV_DELTA_PROTOCOL
1365 struct packet_investigate_finished *old;
1366 struct genhash **hash = pc->phs.received + PACKET_INVESTIGATE_FINISHED;
1367#endif /* FREECIV_DELTA_PROTOCOL */
1369#ifdef FREECIV_JSON_CONNECTION
1370 struct plocation field_addr;
1371 {
1375 }
1376#endif /* FREECIV_JSON_CONNECTION */
1377
1378#ifdef FREECIV_DELTA_PROTOCOL
1379#ifdef FREECIV_JSON_CONNECTION
1380 field_addr.name = "fields";
1381#endif /* FREECIV_JSON_CONNECTION */
1382 DIO_BV_GET(&din, &field_addr, fields);
1383
1384#else /* FREECIV_DELTA_PROTOCOL */
1385#ifdef FREECIV_JSON_CONNECTION
1386 field_addr.name = "city_id";
1387#endif /* FREECIV_JSON_CONNECTION */
1388 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
1390 }
1391#endif
1392 log_packet_detailed("packet_investigate_finished_100: got info about ()");
1393
1394#ifdef FREECIV_DELTA_PROTOCOL
1395 if (NULL == *hash) {
1397 NULL, NULL, NULL, free);
1398 }
1399
1400 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1401 *real_packet = *old;
1402 } else {
1403 log_packet_detailed(" no old info");
1404 memset(real_packet, 0, sizeof(*real_packet));
1405 }
1406
1407 if (BV_ISSET(fields, 0)) {
1408 log_packet_detailed(" got field 'city_id'");
1409#ifdef FREECIV_JSON_CONNECTION
1410 field_addr.name = "city_id";
1411#endif /* FREECIV_JSON_CONNECTION */
1412 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
1414 }
1415 }
1416
1417 if (NULL == old) {
1418 old = fc_malloc(sizeof(*old));
1419 *old = *real_packet;
1420 genhash_insert(*hash, old, old);
1421 } else {
1422 *old = *real_packet;
1423 }
1424
1425#endif /* FREECIV_DELTA_PROTOCOL */
1427}
1428
1430{
1431 const struct packet_investigate_finished *real_packet = packet;
1432 int e;
1433#ifdef FREECIV_DELTA_PROTOCOL
1435 struct packet_investigate_finished *old;
1436 bool differ;
1437 struct genhash **hash = pc->phs.sent + PACKET_INVESTIGATE_FINISHED;
1438#endif /* FREECIV_DELTA_PROTOCOL */
1440#ifdef FREECIV_JSON_CONNECTION
1441 struct plocation field_addr;
1442 {
1446 }
1447#endif /* FREECIV_JSON_CONNECTION */
1448
1449 log_packet_detailed("packet_investigate_finished_100: sending info about ()");
1450
1451#ifdef FREECIV_DELTA_PROTOCOL
1452 if (NULL == *hash) {
1454 NULL, NULL, NULL, free);
1455 }
1456 BV_CLR_ALL(fields);
1457
1458 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
1459 old = fc_malloc(sizeof(*old));
1460 *old = *real_packet;
1461 genhash_insert(*hash, old, old);
1462 memset(old, 0, sizeof(*old));
1463 }
1464 differ = (old->city_id != real_packet->city_id);
1465 if (differ) {
1466 BV_SET(fields, 0);
1467 }
1468
1469
1470#ifdef FREECIV_JSON_CONNECTION
1471 field_addr.name = "fields";
1472#endif /* FREECIV_JSON_CONNECTION */
1473 e = 0;
1474 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1475 if (e) {
1476 log_packet_detailed("fields bitvector error detected");
1477 }
1478
1479 if (BV_ISSET(fields, 0)) {
1480 log_packet_detailed(" field 'city_id' has changed");
1481#ifdef FREECIV_JSON_CONNECTION
1482 field_addr.name = "city_id";
1483#endif /* FREECIV_JSON_CONNECTION */
1484 e = 0;
1485 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
1486 if (e) {
1487 log_packet_detailed("'city_id' field error detected");
1488 }
1489 }
1490
1491 *old = *real_packet;
1492#endif /* FREECIV_DELTA_PROTOCOL */
1493#ifndef FREECIV_DELTA_PROTOCOL
1494#ifdef FREECIV_JSON_CONNECTION
1495 field_addr.name = "city_id";
1496#endif /* FREECIV_JSON_CONNECTION */
1497 e = 0;
1498 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
1499 if (e) {
1500 log_packet_detailed("'city_id' field error detected");
1501 }
1502
1503#endif
1505}
1506
1508{
1509 if (!pc->used) {
1510 log_error("WARNING: trying to send data to the closed connection %s",
1512 return -1;
1513 }
1514 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_INVESTIGATE_FINISHED].packet != NULL, -1,
1515 "Handler for PACKET_INVESTIGATE_FINISHED not installed");
1516 return pc->phs.handlers->send[PACKET_INVESTIGATE_FINISHED].packet(pc, packet);
1517}
1518
1525
1527{
1528 struct packet_investigate_finished packet, *real_packet = &packet;
1529
1531
1533}
1534
1536{
1537 struct packet_investigate_finished packet, *real_packet = &packet;
1538
1540
1542}
1543
1545{
1547#ifdef FREECIV_JSON_CONNECTION
1548 struct plocation field_addr;
1549 {
1553 }
1554#endif /* FREECIV_JSON_CONNECTION */
1555#if 1 /* To match endif */
1556#ifdef FREECIV_JSON_CONNECTION
1557 field_addr.name = "username";
1558#endif /* FREECIV_JSON_CONNECTION */
1559 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
1561 }
1562#ifdef FREECIV_JSON_CONNECTION
1563 field_addr.name = "capability";
1564#endif /* FREECIV_JSON_CONNECTION */
1565 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
1566 RECEIVE_PACKET_FIELD_ERROR(capability);
1567 }
1568#ifdef FREECIV_JSON_CONNECTION
1569 field_addr.name = "version_label";
1570#endif /* FREECIV_JSON_CONNECTION */
1571 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
1572 RECEIVE_PACKET_FIELD_ERROR(version_label);
1573 }
1574#ifdef FREECIV_JSON_CONNECTION
1575 field_addr.name = "major_version";
1576#endif /* FREECIV_JSON_CONNECTION */
1577 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
1578 RECEIVE_PACKET_FIELD_ERROR(major_version);
1579 }
1580#ifdef FREECIV_JSON_CONNECTION
1581 field_addr.name = "minor_version";
1582#endif /* FREECIV_JSON_CONNECTION */
1583 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
1584 RECEIVE_PACKET_FIELD_ERROR(minor_version);
1585 }
1586#ifdef FREECIV_JSON_CONNECTION
1587 field_addr.name = "patch_version";
1588#endif /* FREECIV_JSON_CONNECTION */
1589 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
1590 RECEIVE_PACKET_FIELD_ERROR(patch_version);
1591 }
1592#endif
1593 log_packet_detailed("packet_server_join_req_100: got info about ()");
1595}
1596
1598{
1599 const struct packet_server_join_req *real_packet = packet;
1600 int e;
1602#ifdef FREECIV_JSON_CONNECTION
1603 struct plocation field_addr;
1604 {
1608 }
1609#endif /* FREECIV_JSON_CONNECTION */
1610
1611 log_packet_detailed("packet_server_join_req_100: sending info about ()");
1612#if 1 /* To match endif */
1613#ifdef FREECIV_JSON_CONNECTION
1614 field_addr.name = "username";
1615#endif /* FREECIV_JSON_CONNECTION */
1616 e = 0;
1617 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
1618 if (e) {
1619 log_packet_detailed("'username' field error detected");
1620 }
1621#ifdef FREECIV_JSON_CONNECTION
1622 field_addr.name = "capability";
1623#endif /* FREECIV_JSON_CONNECTION */
1624 e = 0;
1625 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
1626 if (e) {
1627 log_packet_detailed("'capability' field error detected");
1628 }
1629#ifdef FREECIV_JSON_CONNECTION
1630 field_addr.name = "version_label";
1631#endif /* FREECIV_JSON_CONNECTION */
1632 e = 0;
1633 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
1634 if (e) {
1635 log_packet_detailed("'version_label' field error detected");
1636 }
1637#ifdef FREECIV_JSON_CONNECTION
1638 field_addr.name = "major_version";
1639#endif /* FREECIV_JSON_CONNECTION */
1640 e = 0;
1641 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
1642 if (e) {
1643 log_packet_detailed("'major_version' field error detected");
1644 }
1645#ifdef FREECIV_JSON_CONNECTION
1646 field_addr.name = "minor_version";
1647#endif /* FREECIV_JSON_CONNECTION */
1648 e = 0;
1649 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
1650 if (e) {
1651 log_packet_detailed("'minor_version' field error detected");
1652 }
1653#ifdef FREECIV_JSON_CONNECTION
1654 field_addr.name = "patch_version";
1655#endif /* FREECIV_JSON_CONNECTION */
1656 e = 0;
1657 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
1658 if (e) {
1659 log_packet_detailed("'patch_version' field error detected");
1660 }
1661
1662#endif
1664}
1665
1667{
1668 if (!pc->used) {
1669 log_error("WARNING: trying to send data to the closed connection %s",
1671 return -1;
1672 }
1673 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_JOIN_REQ].packet != NULL, -1,
1674 "Handler for PACKET_SERVER_JOIN_REQ not installed");
1675 return pc->phs.handlers->send[PACKET_SERVER_JOIN_REQ].packet(pc, packet);
1676}
1677
1678int dsend_packet_server_join_req(struct connection *pc, const char *username, const char *capability, const char *version_label, int major_version, int minor_version, int patch_version)
1679{
1680 struct packet_server_join_req packet, *real_packet = &packet;
1681
1682 sz_strlcpy(real_packet->username, username);
1683 sz_strlcpy(real_packet->capability, capability);
1684 sz_strlcpy(real_packet->version_label, version_label);
1685 real_packet->major_version = major_version;
1686 real_packet->minor_version = minor_version;
1687 real_packet->patch_version = patch_version;
1688
1690}
1691
1693{
1695#ifdef FREECIV_JSON_CONNECTION
1696 struct plocation field_addr;
1697 {
1701 }
1702#endif /* FREECIV_JSON_CONNECTION */
1703#if 1 /* To match endif */
1704#ifdef FREECIV_JSON_CONNECTION
1705 field_addr.name = "you_can_join";
1706#endif /* FREECIV_JSON_CONNECTION */
1707 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->you_can_join)) {
1708 RECEIVE_PACKET_FIELD_ERROR(you_can_join);
1709 }
1710#ifdef FREECIV_JSON_CONNECTION
1711 field_addr.name = "message";
1712#endif /* FREECIV_JSON_CONNECTION */
1713 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1715 }
1716#ifdef FREECIV_JSON_CONNECTION
1717 field_addr.name = "capability";
1718#endif /* FREECIV_JSON_CONNECTION */
1719 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
1720 RECEIVE_PACKET_FIELD_ERROR(capability);
1721 }
1722#ifdef FREECIV_JSON_CONNECTION
1723 field_addr.name = "challenge_file";
1724#endif /* FREECIV_JSON_CONNECTION */
1725 if (!DIO_GET(string, &din, &field_addr, real_packet->challenge_file, sizeof(real_packet->challenge_file))) {
1726 RECEIVE_PACKET_FIELD_ERROR(challenge_file);
1727 }
1728#ifdef FREECIV_JSON_CONNECTION
1729 field_addr.name = "conn_id";
1730#endif /* FREECIV_JSON_CONNECTION */
1731 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
1733 }
1734#endif
1735 log_packet_detailed("packet_server_join_reply_100: got info about ()");
1738}
1739
1741{
1742 const struct packet_server_join_reply *real_packet = packet;
1743 int e;
1745#ifdef FREECIV_JSON_CONNECTION
1746 struct plocation field_addr;
1747 {
1751 }
1752#endif /* FREECIV_JSON_CONNECTION */
1753
1754 log_packet_detailed("packet_server_join_reply_100: sending info about ()");
1755#if 1 /* To match endif */
1756#ifdef FREECIV_JSON_CONNECTION
1757 field_addr.name = "you_can_join";
1758#endif /* FREECIV_JSON_CONNECTION */
1759 e = 0;
1760 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->you_can_join);
1761 if (e) {
1762 log_packet_detailed("'you_can_join' field error detected");
1763 }
1764#ifdef FREECIV_JSON_CONNECTION
1765 field_addr.name = "message";
1766#endif /* FREECIV_JSON_CONNECTION */
1767 e = 0;
1768 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
1769 if (e) {
1770 log_packet_detailed("'message' field error detected");
1771 }
1772#ifdef FREECIV_JSON_CONNECTION
1773 field_addr.name = "capability";
1774#endif /* FREECIV_JSON_CONNECTION */
1775 e = 0;
1776 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
1777 if (e) {
1778 log_packet_detailed("'capability' field error detected");
1779 }
1780#ifdef FREECIV_JSON_CONNECTION
1781 field_addr.name = "challenge_file";
1782#endif /* FREECIV_JSON_CONNECTION */
1783 e = 0;
1784 e |= DIO_PUT(string, &dout, &field_addr, real_packet->challenge_file);
1785 if (e) {
1786 log_packet_detailed("'challenge_file' field error detected");
1787 }
1788#ifdef FREECIV_JSON_CONNECTION
1789 field_addr.name = "conn_id";
1790#endif /* FREECIV_JSON_CONNECTION */
1791 e = 0;
1792 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
1793 if (e) {
1794 log_packet_detailed("'conn_id' field error detected");
1795 }
1796
1797#endif
1800}
1801
1803{
1804 if (!pc->used) {
1805 log_error("WARNING: trying to send data to the closed connection %s",
1807 return -1;
1808 }
1809 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_JOIN_REPLY].packet != NULL, -1,
1810 "Handler for PACKET_SERVER_JOIN_REPLY not installed");
1811 return pc->phs.handlers->send[PACKET_SERVER_JOIN_REPLY].packet(pc, packet);
1812}
1813
1814#ifdef FREECIV_DELTA_PROTOCOL
1815#define hash_packet_authentication_req_100 hash_const
1816
1817#define cmp_packet_authentication_req_100 cmp_const
1818
1820#endif /* FREECIV_DELTA_PROTOCOL */
1821
1823{
1824#ifdef FREECIV_DELTA_PROTOCOL
1826 struct packet_authentication_req *old;
1827 struct genhash **hash = pc->phs.received + PACKET_AUTHENTICATION_REQ;
1828#endif /* FREECIV_DELTA_PROTOCOL */
1830#ifdef FREECIV_JSON_CONNECTION
1831 struct plocation field_addr;
1832 {
1836 }
1837#endif /* FREECIV_JSON_CONNECTION */
1838
1839#ifdef FREECIV_DELTA_PROTOCOL
1840#ifdef FREECIV_JSON_CONNECTION
1841 field_addr.name = "fields";
1842#endif /* FREECIV_JSON_CONNECTION */
1843 DIO_BV_GET(&din, &field_addr, fields);
1844
1845#else /* FREECIV_DELTA_PROTOCOL */
1846#ifdef FREECIV_JSON_CONNECTION
1847 field_addr.name = "type";
1848#endif /* FREECIV_JSON_CONNECTION */
1849 {
1850 int readin;
1851
1852 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
1854 }
1855 real_packet->type = readin;
1856 }
1857#ifdef FREECIV_JSON_CONNECTION
1858 field_addr.name = "message";
1859#endif /* FREECIV_JSON_CONNECTION */
1860 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1862 }
1863#endif
1864 log_packet_detailed("packet_authentication_req_100: got info about ()");
1865
1866#ifdef FREECIV_DELTA_PROTOCOL
1867 if (NULL == *hash) {
1869 NULL, NULL, NULL, free);
1870 }
1871
1872 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
1873 *real_packet = *old;
1874 } else {
1875 log_packet_detailed(" no old info");
1876 memset(real_packet, 0, sizeof(*real_packet));
1877 }
1878
1879 if (BV_ISSET(fields, 0)) {
1880 log_packet_detailed(" got field 'type'");
1881#ifdef FREECIV_JSON_CONNECTION
1882 field_addr.name = "type";
1883#endif /* FREECIV_JSON_CONNECTION */
1884 {
1885 int readin;
1886
1887 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
1889 }
1890 real_packet->type = readin;
1891 }
1892 }
1893 if (BV_ISSET(fields, 1)) {
1894 log_packet_detailed(" got field 'message'");
1895#ifdef FREECIV_JSON_CONNECTION
1896 field_addr.name = "message";
1897#endif /* FREECIV_JSON_CONNECTION */
1898 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
1900 }
1901 }
1902
1903 if (NULL == old) {
1904 old = fc_malloc(sizeof(*old));
1905 *old = *real_packet;
1906 genhash_insert(*hash, old, old);
1907 } else {
1908 *old = *real_packet;
1909 }
1910
1911#endif /* FREECIV_DELTA_PROTOCOL */
1913}
1914
1916{
1917 const struct packet_authentication_req *real_packet = packet;
1918 int e;
1919#ifdef FREECIV_DELTA_PROTOCOL
1921 struct packet_authentication_req *old;
1922 bool differ;
1923 struct genhash **hash = pc->phs.sent + PACKET_AUTHENTICATION_REQ;
1924#endif /* FREECIV_DELTA_PROTOCOL */
1926#ifdef FREECIV_JSON_CONNECTION
1927 struct plocation field_addr;
1928 {
1932 }
1933#endif /* FREECIV_JSON_CONNECTION */
1934
1935 log_packet_detailed("packet_authentication_req_100: sending info about ()");
1936
1937#ifdef FREECIV_DELTA_PROTOCOL
1938 if (NULL == *hash) {
1940 NULL, NULL, NULL, free);
1941 }
1942 BV_CLR_ALL(fields);
1943
1944 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
1945 old = fc_malloc(sizeof(*old));
1946 *old = *real_packet;
1947 genhash_insert(*hash, old, old);
1948 memset(old, 0, sizeof(*old));
1949 }
1950 differ = (old->type != real_packet->type);
1951 if (differ) {
1952 BV_SET(fields, 0);
1953 }
1954
1955 differ = (strcmp(old->message, real_packet->message) != 0);
1956 if (differ) {
1957 BV_SET(fields, 1);
1958 }
1959
1960
1961#ifdef FREECIV_JSON_CONNECTION
1962 field_addr.name = "fields";
1963#endif /* FREECIV_JSON_CONNECTION */
1964 e = 0;
1965 e |= DIO_BV_PUT(&dout, &field_addr, fields);
1966 if (e) {
1967 log_packet_detailed("fields bitvector error detected");
1968 }
1969
1970 if (BV_ISSET(fields, 0)) {
1971 log_packet_detailed(" field 'type' has changed");
1972#ifdef FREECIV_JSON_CONNECTION
1973 field_addr.name = "type";
1974#endif /* FREECIV_JSON_CONNECTION */
1975 e = 0;
1976 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
1977 if (e) {
1978 log_packet_detailed("'type' field error detected");
1979 }
1980 }
1981 if (BV_ISSET(fields, 1)) {
1982 log_packet_detailed(" field 'message' has changed");
1983#ifdef FREECIV_JSON_CONNECTION
1984 field_addr.name = "message";
1985#endif /* FREECIV_JSON_CONNECTION */
1986 e = 0;
1987 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
1988 if (e) {
1989 log_packet_detailed("'message' field error detected");
1990 }
1991 }
1992
1993 *old = *real_packet;
1994#endif /* FREECIV_DELTA_PROTOCOL */
1995#ifndef FREECIV_DELTA_PROTOCOL
1996#ifdef FREECIV_JSON_CONNECTION
1997 field_addr.name = "type";
1998#endif /* FREECIV_JSON_CONNECTION */
1999 e = 0;
2000 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
2001 if (e) {
2002 log_packet_detailed("'type' field error detected");
2003 }
2004#ifdef FREECIV_JSON_CONNECTION
2005 field_addr.name = "message";
2006#endif /* FREECIV_JSON_CONNECTION */
2007 e = 0;
2008 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
2009 if (e) {
2010 log_packet_detailed("'message' field error detected");
2011 }
2012
2013#endif
2015}
2016
2018{
2019 if (!pc->used) {
2020 log_error("WARNING: trying to send data to the closed connection %s",
2022 return -1;
2023 }
2024 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_AUTHENTICATION_REQ].packet != NULL, -1,
2025 "Handler for PACKET_AUTHENTICATION_REQ not installed");
2026 return pc->phs.handlers->send[PACKET_AUTHENTICATION_REQ].packet(pc, packet);
2027}
2028
2030{
2031 struct packet_authentication_req packet, *real_packet = &packet;
2032
2034 sz_strlcpy(real_packet->message, message);
2035
2037}
2038
2039#ifdef FREECIV_DELTA_PROTOCOL
2040#define hash_packet_authentication_reply_100 hash_const
2041
2042#define cmp_packet_authentication_reply_100 cmp_const
2043
2045#endif /* FREECIV_DELTA_PROTOCOL */
2046
2048{
2049#ifdef FREECIV_DELTA_PROTOCOL
2051 struct packet_authentication_reply *old;
2052 struct genhash **hash = pc->phs.received + PACKET_AUTHENTICATION_REPLY;
2053#endif /* FREECIV_DELTA_PROTOCOL */
2055#ifdef FREECIV_JSON_CONNECTION
2056 struct plocation field_addr;
2057 {
2061 }
2062#endif /* FREECIV_JSON_CONNECTION */
2063
2064#ifdef FREECIV_DELTA_PROTOCOL
2065#ifdef FREECIV_JSON_CONNECTION
2066 field_addr.name = "fields";
2067#endif /* FREECIV_JSON_CONNECTION */
2068 DIO_BV_GET(&din, &field_addr, fields);
2069
2070#else /* FREECIV_DELTA_PROTOCOL */
2071#ifdef FREECIV_JSON_CONNECTION
2072 field_addr.name = "password";
2073#endif /* FREECIV_JSON_CONNECTION */
2074 if (!DIO_GET(string, &din, &field_addr, real_packet->password, sizeof(real_packet->password))) {
2076 }
2077#endif
2078 log_packet_detailed("packet_authentication_reply_100: got info about ()");
2079
2080#ifdef FREECIV_DELTA_PROTOCOL
2081 if (NULL == *hash) {
2083 NULL, NULL, NULL, free);
2084 }
2085
2086 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
2087 *real_packet = *old;
2088 } else {
2089 log_packet_detailed(" no old info");
2090 memset(real_packet, 0, sizeof(*real_packet));
2091 }
2092
2093 if (BV_ISSET(fields, 0)) {
2094 log_packet_detailed(" got field 'password'");
2095#ifdef FREECIV_JSON_CONNECTION
2096 field_addr.name = "password";
2097#endif /* FREECIV_JSON_CONNECTION */
2098 if (!DIO_GET(string, &din, &field_addr, real_packet->password, sizeof(real_packet->password))) {
2100 }
2101 }
2102
2103 if (NULL == old) {
2104 old = fc_malloc(sizeof(*old));
2105 *old = *real_packet;
2106 genhash_insert(*hash, old, old);
2107 } else {
2108 *old = *real_packet;
2109 }
2110
2111#endif /* FREECIV_DELTA_PROTOCOL */
2113}
2114
2116{
2117 const struct packet_authentication_reply *real_packet = packet;
2118 int e;
2119#ifdef FREECIV_DELTA_PROTOCOL
2121 struct packet_authentication_reply *old;
2122 bool differ;
2123 struct genhash **hash = pc->phs.sent + PACKET_AUTHENTICATION_REPLY;
2124#endif /* FREECIV_DELTA_PROTOCOL */
2126#ifdef FREECIV_JSON_CONNECTION
2127 struct plocation field_addr;
2128 {
2132 }
2133#endif /* FREECIV_JSON_CONNECTION */
2134
2135 log_packet_detailed("packet_authentication_reply_100: sending info about ()");
2136
2137#ifdef FREECIV_DELTA_PROTOCOL
2138 if (NULL == *hash) {
2140 NULL, NULL, NULL, free);
2141 }
2142 BV_CLR_ALL(fields);
2143
2144 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
2145 old = fc_malloc(sizeof(*old));
2146 *old = *real_packet;
2147 genhash_insert(*hash, old, old);
2148 memset(old, 0, sizeof(*old));
2149 }
2150 differ = (strcmp(old->password, real_packet->password) != 0);
2151 if (differ) {
2152 BV_SET(fields, 0);
2153 }
2154
2155
2156#ifdef FREECIV_JSON_CONNECTION
2157 field_addr.name = "fields";
2158#endif /* FREECIV_JSON_CONNECTION */
2159 e = 0;
2160 e |= DIO_BV_PUT(&dout, &field_addr, fields);
2161 if (e) {
2162 log_packet_detailed("fields bitvector error detected");
2163 }
2164
2165 if (BV_ISSET(fields, 0)) {
2166 log_packet_detailed(" field 'password' has changed");
2167#ifdef FREECIV_JSON_CONNECTION
2168 field_addr.name = "password";
2169#endif /* FREECIV_JSON_CONNECTION */
2170 e = 0;
2171 e |= DIO_PUT(string, &dout, &field_addr, real_packet->password);
2172 if (e) {
2173 log_packet_detailed("'password' field error detected");
2174 }
2175 }
2176
2177 *old = *real_packet;
2178#endif /* FREECIV_DELTA_PROTOCOL */
2179#ifndef FREECIV_DELTA_PROTOCOL
2180#ifdef FREECIV_JSON_CONNECTION
2181 field_addr.name = "password";
2182#endif /* FREECIV_JSON_CONNECTION */
2183 e = 0;
2184 e |= DIO_PUT(string, &dout, &field_addr, real_packet->password);
2185 if (e) {
2186 log_packet_detailed("'password' field error detected");
2187 }
2188
2189#endif
2191}
2192
2194{
2195 if (!pc->used) {
2196 log_error("WARNING: trying to send data to the closed connection %s",
2198 return -1;
2199 }
2200 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_AUTHENTICATION_REPLY].packet != NULL, -1,
2201 "Handler for PACKET_AUTHENTICATION_REPLY not installed");
2202 return pc->phs.handlers->send[PACKET_AUTHENTICATION_REPLY].packet(pc, packet);
2203}
2204
2206{
2208#if 1 /* To match endif */
2209 real_packet->__dummy = 0xff;
2210#endif
2211 log_packet_detailed("packet_server_shutdown_100: got info about ()");
2213}
2214
2216{
2218
2219 log_packet_detailed("packet_server_shutdown_100: sending info about ()");
2221}
2222
2224{
2225 if (!pc->used) {
2226 log_error("WARNING: trying to send data to the closed connection %s",
2228 return -1;
2229 }
2230 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SHUTDOWN].no_packet != NULL, -1,
2231 "Handler for PACKET_SERVER_SHUTDOWN not installed");
2232 return pc->phs.handlers->send[PACKET_SERVER_SHUTDOWN].no_packet(pc);
2233}
2234
2241
2242#ifdef FREECIV_DELTA_PROTOCOL
2243#define hash_packet_nation_select_req_100 hash_const
2244
2245#define cmp_packet_nation_select_req_100 cmp_const
2246
2248#endif /* FREECIV_DELTA_PROTOCOL */
2249
2251{
2252#ifdef FREECIV_DELTA_PROTOCOL
2254 struct packet_nation_select_req *old;
2255 struct genhash **hash = pc->phs.received + PACKET_NATION_SELECT_REQ;
2256#endif /* FREECIV_DELTA_PROTOCOL */
2258#ifdef FREECIV_JSON_CONNECTION
2259 struct plocation field_addr;
2260 {
2264 }
2265#endif /* FREECIV_JSON_CONNECTION */
2266
2267#ifdef FREECIV_DELTA_PROTOCOL
2268#ifdef FREECIV_JSON_CONNECTION
2269 field_addr.name = "fields";
2270#endif /* FREECIV_JSON_CONNECTION */
2271 DIO_BV_GET(&din, &field_addr, fields);
2272
2273#else /* FREECIV_DELTA_PROTOCOL */
2274#ifdef FREECIV_JSON_CONNECTION
2275 field_addr.name = "player_no";
2276#endif /* FREECIV_JSON_CONNECTION */
2277 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_no)) {
2278 RECEIVE_PACKET_FIELD_ERROR(player_no);
2279 }
2280#ifdef FREECIV_JSON_CONNECTION
2281 field_addr.name = "nation_no";
2282#endif /* FREECIV_JSON_CONNECTION */
2283 {
2284 int readin;
2285
2286 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
2287 RECEIVE_PACKET_FIELD_ERROR(nation_no);
2288 }
2289 real_packet->nation_no = readin;
2290 }
2291#ifdef FREECIV_JSON_CONNECTION
2292 field_addr.name = "is_male";
2293#endif /* FREECIV_JSON_CONNECTION */
2294 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
2296 }
2297#ifdef FREECIV_JSON_CONNECTION
2298 field_addr.name = "name";
2299#endif /* FREECIV_JSON_CONNECTION */
2300 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
2302 }
2303#ifdef FREECIV_JSON_CONNECTION
2304 field_addr.name = "style";
2305#endif /* FREECIV_JSON_CONNECTION */
2306 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
2308 }
2309#endif
2310 log_packet_detailed("packet_nation_select_req_100: got info about ()");
2311
2312#ifdef FREECIV_DELTA_PROTOCOL
2313 if (NULL == *hash) {
2315 NULL, NULL, NULL, free);
2316 }
2317
2318 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
2319 *real_packet = *old;
2320 } else {
2321 log_packet_detailed(" no old info");
2322 memset(real_packet, 0, sizeof(*real_packet));
2323 }
2324
2325 if (BV_ISSET(fields, 0)) {
2326 log_packet_detailed(" got field 'player_no'");
2327#ifdef FREECIV_JSON_CONNECTION
2328 field_addr.name = "player_no";
2329#endif /* FREECIV_JSON_CONNECTION */
2330 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_no)) {
2331 RECEIVE_PACKET_FIELD_ERROR(player_no);
2332 }
2333 }
2334 if (BV_ISSET(fields, 1)) {
2335 log_packet_detailed(" got field 'nation_no'");
2336#ifdef FREECIV_JSON_CONNECTION
2337 field_addr.name = "nation_no";
2338#endif /* FREECIV_JSON_CONNECTION */
2339 {
2340 int readin;
2341
2342 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
2343 RECEIVE_PACKET_FIELD_ERROR(nation_no);
2344 }
2345 real_packet->nation_no = readin;
2346 }
2347 }
2348 real_packet->is_male = BV_ISSET(fields, 2);
2349 if (BV_ISSET(fields, 3)) {
2350 log_packet_detailed(" got field 'name'");
2351#ifdef FREECIV_JSON_CONNECTION
2352 field_addr.name = "name";
2353#endif /* FREECIV_JSON_CONNECTION */
2354 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
2356 }
2357 }
2358 if (BV_ISSET(fields, 4)) {
2359 log_packet_detailed(" got field 'style'");
2360#ifdef FREECIV_JSON_CONNECTION
2361 field_addr.name = "style";
2362#endif /* FREECIV_JSON_CONNECTION */
2363 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
2365 }
2366 }
2367
2368 if (NULL == old) {
2369 old = fc_malloc(sizeof(*old));
2370 *old = *real_packet;
2371 genhash_insert(*hash, old, old);
2372 } else {
2373 *old = *real_packet;
2374 }
2375
2376#endif /* FREECIV_DELTA_PROTOCOL */
2378}
2379
2381{
2382 const struct packet_nation_select_req *real_packet = packet;
2383 int e;
2384#ifdef FREECIV_DELTA_PROTOCOL
2386 struct packet_nation_select_req *old;
2387 bool differ;
2388 struct genhash **hash = pc->phs.sent + PACKET_NATION_SELECT_REQ;
2389#endif /* FREECIV_DELTA_PROTOCOL */
2391#ifdef FREECIV_JSON_CONNECTION
2392 struct plocation field_addr;
2393 {
2397 }
2398#endif /* FREECIV_JSON_CONNECTION */
2399
2400 log_packet_detailed("packet_nation_select_req_100: sending info about ()");
2401
2402#ifdef FREECIV_DELTA_PROTOCOL
2403 if (NULL == *hash) {
2405 NULL, NULL, NULL, free);
2406 }
2407 BV_CLR_ALL(fields);
2408
2409 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
2410 old = fc_malloc(sizeof(*old));
2411 *old = *real_packet;
2412 genhash_insert(*hash, old, old);
2413 memset(old, 0, sizeof(*old));
2414 }
2415 differ = (old->player_no != real_packet->player_no);
2416 if (differ) {
2417 BV_SET(fields, 0);
2418 }
2419
2420 differ = (old->nation_no != real_packet->nation_no);
2421 if (differ) {
2422 BV_SET(fields, 1);
2423 }
2424
2425 if (packet->is_male) {
2426 BV_SET(fields, 2);
2427 }
2428
2429 differ = (strcmp(old->name, real_packet->name) != 0);
2430 if (differ) {
2431 BV_SET(fields, 3);
2432 }
2433
2434 differ = (old->style != real_packet->style);
2435 if (differ) {
2436 BV_SET(fields, 4);
2437 }
2438
2439
2440#ifdef FREECIV_JSON_CONNECTION
2441 field_addr.name = "fields";
2442#endif /* FREECIV_JSON_CONNECTION */
2443 e = 0;
2444 e |= DIO_BV_PUT(&dout, &field_addr, fields);
2445 if (e) {
2446 log_packet_detailed("fields bitvector error detected");
2447 }
2448
2449 if (BV_ISSET(fields, 0)) {
2450 log_packet_detailed(" field 'player_no' has changed");
2451#ifdef FREECIV_JSON_CONNECTION
2452 field_addr.name = "player_no";
2453#endif /* FREECIV_JSON_CONNECTION */
2454 e = 0;
2455 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_no);
2456 if (e) {
2457 log_packet_detailed("'player_no' field error detected");
2458 }
2459 }
2460 if (BV_ISSET(fields, 1)) {
2461 log_packet_detailed(" field 'nation_no' has changed");
2462#ifdef FREECIV_JSON_CONNECTION
2463 field_addr.name = "nation_no";
2464#endif /* FREECIV_JSON_CONNECTION */
2465 e = 0;
2466 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_no);
2467 if (e) {
2468 log_packet_detailed("'nation_no' field error detected");
2469 }
2470 }
2471 /* field 2 is folded into the header */
2472 if (BV_ISSET(fields, 3)) {
2473 log_packet_detailed(" field 'name' has changed");
2474#ifdef FREECIV_JSON_CONNECTION
2475 field_addr.name = "name";
2476#endif /* FREECIV_JSON_CONNECTION */
2477 e = 0;
2478 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
2479 if (e) {
2480 log_packet_detailed("'name' field error detected");
2481 }
2482 }
2483 if (BV_ISSET(fields, 4)) {
2484 log_packet_detailed(" field 'style' has changed");
2485#ifdef FREECIV_JSON_CONNECTION
2486 field_addr.name = "style";
2487#endif /* FREECIV_JSON_CONNECTION */
2488 e = 0;
2489 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
2490 if (e) {
2491 log_packet_detailed("'style' field error detected");
2492 }
2493 }
2494
2495 *old = *real_packet;
2496#endif /* FREECIV_DELTA_PROTOCOL */
2497#ifndef FREECIV_DELTA_PROTOCOL
2498#ifdef FREECIV_JSON_CONNECTION
2499 field_addr.name = "player_no";
2500#endif /* FREECIV_JSON_CONNECTION */
2501 e = 0;
2502 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_no);
2503 if (e) {
2504 log_packet_detailed("'player_no' field error detected");
2505 }
2506#ifdef FREECIV_JSON_CONNECTION
2507 field_addr.name = "nation_no";
2508#endif /* FREECIV_JSON_CONNECTION */
2509 e = 0;
2510 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation_no);
2511 if (e) {
2512 log_packet_detailed("'nation_no' field error detected");
2513 }
2514#ifdef FREECIV_JSON_CONNECTION
2515 field_addr.name = "is_male";
2516#endif /* FREECIV_JSON_CONNECTION */
2517 e = 0;
2518 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
2519 if (e) {
2520 log_packet_detailed("'is_male' field error detected");
2521 }
2522#ifdef FREECIV_JSON_CONNECTION
2523 field_addr.name = "name";
2524#endif /* FREECIV_JSON_CONNECTION */
2525 e = 0;
2526 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
2527 if (e) {
2528 log_packet_detailed("'name' field error detected");
2529 }
2530#ifdef FREECIV_JSON_CONNECTION
2531 field_addr.name = "style";
2532#endif /* FREECIV_JSON_CONNECTION */
2533 e = 0;
2534 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
2535 if (e) {
2536 log_packet_detailed("'style' field error detected");
2537 }
2538
2539#endif
2541}
2542
2544{
2545 if (!pc->used) {
2546 log_error("WARNING: trying to send data to the closed connection %s",
2548 return -1;
2549 }
2550 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NATION_SELECT_REQ].packet != NULL, -1,
2551 "Handler for PACKET_NATION_SELECT_REQ not installed");
2552 return pc->phs.handlers->send[PACKET_NATION_SELECT_REQ].packet(pc, packet);
2553}
2554
2555int dsend_packet_nation_select_req(struct connection *pc, int player_no, Nation_type_id nation_no, bool is_male, const char *name, int style)
2556{
2557 struct packet_nation_select_req packet, *real_packet = &packet;
2558
2560 real_packet->nation_no = nation_no;
2561 real_packet->is_male = is_male;
2562 sz_strlcpy(real_packet->name, name);
2563 real_packet->style = style;
2564
2566}
2567
2568#ifdef FREECIV_DELTA_PROTOCOL
2569#define hash_packet_player_ready_100 hash_const
2570
2571#define cmp_packet_player_ready_100 cmp_const
2572
2574#endif /* FREECIV_DELTA_PROTOCOL */
2575
2577{
2578#ifdef FREECIV_DELTA_PROTOCOL
2580 struct packet_player_ready *old;
2581 struct genhash **hash = pc->phs.received + PACKET_PLAYER_READY;
2582#endif /* FREECIV_DELTA_PROTOCOL */
2584#ifdef FREECIV_JSON_CONNECTION
2585 struct plocation field_addr;
2586 {
2590 }
2591#endif /* FREECIV_JSON_CONNECTION */
2592
2593#ifdef FREECIV_DELTA_PROTOCOL
2594#ifdef FREECIV_JSON_CONNECTION
2595 field_addr.name = "fields";
2596#endif /* FREECIV_JSON_CONNECTION */
2597 DIO_BV_GET(&din, &field_addr, fields);
2598
2599#else /* FREECIV_DELTA_PROTOCOL */
2600#ifdef FREECIV_JSON_CONNECTION
2601 field_addr.name = "player_no";
2602#endif /* FREECIV_JSON_CONNECTION */
2603 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_no)) {
2604 RECEIVE_PACKET_FIELD_ERROR(player_no);
2605 }
2606#ifdef FREECIV_JSON_CONNECTION
2607 field_addr.name = "is_ready";
2608#endif /* FREECIV_JSON_CONNECTION */
2609 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
2611 }
2612#endif
2613 log_packet_detailed("packet_player_ready_100: got info about ()");
2614
2615#ifdef FREECIV_DELTA_PROTOCOL
2616 if (NULL == *hash) {
2618 NULL, NULL, NULL, free);
2619 }
2620
2621 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
2622 *real_packet = *old;
2623 } else {
2624 log_packet_detailed(" no old info");
2625 memset(real_packet, 0, sizeof(*real_packet));
2626 }
2627
2628 if (BV_ISSET(fields, 0)) {
2629 log_packet_detailed(" got field 'player_no'");
2630#ifdef FREECIV_JSON_CONNECTION
2631 field_addr.name = "player_no";
2632#endif /* FREECIV_JSON_CONNECTION */
2633 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_no)) {
2634 RECEIVE_PACKET_FIELD_ERROR(player_no);
2635 }
2636 }
2637 real_packet->is_ready = BV_ISSET(fields, 1);
2638
2639 if (NULL == old) {
2640 old = fc_malloc(sizeof(*old));
2641 *old = *real_packet;
2642 genhash_insert(*hash, old, old);
2643 } else {
2644 *old = *real_packet;
2645 }
2646
2647#endif /* FREECIV_DELTA_PROTOCOL */
2649}
2650
2651static int send_packet_player_ready_100(struct connection *pc, const struct packet_player_ready *packet)
2652{
2653 const struct packet_player_ready *real_packet = packet;
2654 int e;
2655#ifdef FREECIV_DELTA_PROTOCOL
2657 struct packet_player_ready *old;
2658 bool differ;
2659 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_READY;
2660#endif /* FREECIV_DELTA_PROTOCOL */
2662#ifdef FREECIV_JSON_CONNECTION
2663 struct plocation field_addr;
2664 {
2668 }
2669#endif /* FREECIV_JSON_CONNECTION */
2670
2671 log_packet_detailed("packet_player_ready_100: sending info about ()");
2672
2673#ifdef FREECIV_DELTA_PROTOCOL
2674 if (NULL == *hash) {
2676 NULL, NULL, NULL, free);
2677 }
2678 BV_CLR_ALL(fields);
2679
2680 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
2681 old = fc_malloc(sizeof(*old));
2682 *old = *real_packet;
2683 genhash_insert(*hash, old, old);
2684 memset(old, 0, sizeof(*old));
2685 }
2686 differ = (old->player_no != real_packet->player_no);
2687 if (differ) {
2688 BV_SET(fields, 0);
2689 }
2690
2691 if (packet->is_ready) {
2692 BV_SET(fields, 1);
2693 }
2694
2695
2696#ifdef FREECIV_JSON_CONNECTION
2697 field_addr.name = "fields";
2698#endif /* FREECIV_JSON_CONNECTION */
2699 e = 0;
2700 e |= DIO_BV_PUT(&dout, &field_addr, fields);
2701 if (e) {
2702 log_packet_detailed("fields bitvector error detected");
2703 }
2704
2705 if (BV_ISSET(fields, 0)) {
2706 log_packet_detailed(" field 'player_no' has changed");
2707#ifdef FREECIV_JSON_CONNECTION
2708 field_addr.name = "player_no";
2709#endif /* FREECIV_JSON_CONNECTION */
2710 e = 0;
2711 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_no);
2712 if (e) {
2713 log_packet_detailed("'player_no' field error detected");
2714 }
2715 }
2716 /* field 1 is folded into the header */
2717
2718 *old = *real_packet;
2719#endif /* FREECIV_DELTA_PROTOCOL */
2720#ifndef FREECIV_DELTA_PROTOCOL
2721#ifdef FREECIV_JSON_CONNECTION
2722 field_addr.name = "player_no";
2723#endif /* FREECIV_JSON_CONNECTION */
2724 e = 0;
2725 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_no);
2726 if (e) {
2727 log_packet_detailed("'player_no' field error detected");
2728 }
2729#ifdef FREECIV_JSON_CONNECTION
2730 field_addr.name = "is_ready";
2731#endif /* FREECIV_JSON_CONNECTION */
2732 e = 0;
2733 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
2734 if (e) {
2735 log_packet_detailed("'is_ready' field error detected");
2736 }
2737
2738#endif
2740}
2741
2743{
2744 if (!pc->used) {
2745 log_error("WARNING: trying to send data to the closed connection %s",
2747 return -1;
2748 }
2749 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_READY].packet != NULL, -1,
2750 "Handler for PACKET_PLAYER_READY not installed");
2751 return pc->phs.handlers->send[PACKET_PLAYER_READY].packet(pc, packet);
2752}
2753
2754int dsend_packet_player_ready(struct connection *pc, int player_no, bool is_ready)
2755{
2756 struct packet_player_ready packet, *real_packet = &packet;
2757
2759 real_packet->is_ready = is_ready;
2760
2762}
2763
2765{
2767#ifdef FREECIV_JSON_CONNECTION
2768 struct plocation field_addr;
2769 {
2773 }
2774#endif /* FREECIV_JSON_CONNECTION */
2775#if 1 /* To match endif */
2776#ifdef FREECIV_JSON_CONNECTION
2777 field_addr.name = "category_num";
2778#endif /* FREECIV_JSON_CONNECTION */
2779 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category_num)) {
2780 RECEIVE_PACKET_FIELD_ERROR(category_num);
2781 }
2782#ifdef FREECIV_JSON_CONNECTION
2783 field_addr.name = "category_name";
2784#endif /* FREECIV_JSON_CONNECTION */
2785 if (real_packet->category_num > 32) {
2786 RECEIVE_PACKET_FIELD_ERROR(category_name, ": truncation array");
2787 }
2788 {
2789 int i;
2790
2791#ifdef FREECIV_JSON_CONNECTION
2792 /* Enter array. */
2793 field_addr.sub_location = plocation_elem_new(0);
2794#endif /* FREECIV_JSON_CONNECTION */
2795
2796 for (i = 0; i < real_packet->category_num; i++) {
2797#ifdef FREECIV_JSON_CONNECTION
2798 field_addr.sub_location->number = i;
2799#endif /* FREECIV_JSON_CONNECTION */
2800
2801 if (!DIO_GET(string, &din, &field_addr, real_packet->category_name[i], sizeof(real_packet->category_name[i]))) {
2802 RECEIVE_PACKET_FIELD_ERROR(category_name);
2803 }
2804 }
2805
2806#ifdef FREECIV_JSON_CONNECTION
2807 /* Exit array. */
2808 FC_FREE(field_addr.sub_location);
2809#endif /* FREECIV_JSON_CONNECTION */
2810 }
2811#ifdef FREECIV_JSON_CONNECTION
2812 field_addr.name = "player_num";
2813#endif /* FREECIV_JSON_CONNECTION */
2814 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
2815 RECEIVE_PACKET_FIELD_ERROR(player_num);
2816 }
2817#endif
2818 log_packet_detailed("packet_endgame_report_100: got info about ()");
2820}
2821
2823{
2824 const struct packet_endgame_report *real_packet = packet;
2825 int e;
2827#ifdef FREECIV_JSON_CONNECTION
2828 struct plocation field_addr;
2829 {
2833 }
2834#endif /* FREECIV_JSON_CONNECTION */
2835
2836 log_packet_detailed("packet_endgame_report_100: sending info about ()");
2837#if 1 /* To match endif */
2838#ifdef FREECIV_JSON_CONNECTION
2839 field_addr.name = "category_num";
2840#endif /* FREECIV_JSON_CONNECTION */
2841 e = 0;
2842 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category_num);
2843 if (e) {
2844 log_packet_detailed("'category_num' field error detected");
2845 }
2846#ifdef FREECIV_JSON_CONNECTION
2847 field_addr.name = "category_name";
2848#endif /* FREECIV_JSON_CONNECTION */
2849 e = 0;
2850 {
2851 int i;
2852
2853#ifdef FREECIV_JSON_CONNECTION
2854 /* Create the array. */
2855 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->category_num);
2856
2857 /* Enter the array. */
2858 field_addr.sub_location = plocation_elem_new(0);
2859#endif /* FREECIV_JSON_CONNECTION */
2860
2861 for (i = 0; i < real_packet->category_num; i++) {
2862#ifdef FREECIV_JSON_CONNECTION
2863 /* Next array element. */
2864 field_addr.sub_location->number = i;
2865#endif /* FREECIV_JSON_CONNECTION */
2866
2867 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_name[i]);
2868 }
2869
2870#ifdef FREECIV_JSON_CONNECTION
2871 /* Exit array. */
2872 FC_FREE(field_addr.sub_location);
2873#endif /* FREECIV_JSON_CONNECTION */
2874 }
2875 if (e) {
2876 log_packet_detailed("'category_name' field error detected");
2877 }
2878#ifdef FREECIV_JSON_CONNECTION
2879 field_addr.name = "player_num";
2880#endif /* FREECIV_JSON_CONNECTION */
2881 e = 0;
2882 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
2883 if (e) {
2884 log_packet_detailed("'player_num' field error detected");
2885 }
2886
2887#endif
2889}
2890
2892{
2893 if (!pc->used) {
2894 log_error("WARNING: trying to send data to the closed connection %s",
2896 return -1;
2897 }
2898 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ENDGAME_REPORT].packet != NULL, -1,
2899 "Handler for PACKET_ENDGAME_REPORT not installed");
2900 return pc->phs.handlers->send[PACKET_ENDGAME_REPORT].packet(pc, packet);
2901}
2902
2903void lsend_packet_endgame_report(struct conn_list *dest, const struct packet_endgame_report *packet)
2904{
2905 conn_list_iterate(dest, pconn) {
2908}
2909
2911{
2913#ifdef FREECIV_JSON_CONNECTION
2914 struct plocation field_addr;
2915 {
2919 }
2920#endif /* FREECIV_JSON_CONNECTION */
2921#if 1 /* To match endif */
2922#ifdef FREECIV_JSON_CONNECTION
2923 field_addr.name = "category_num";
2924#endif /* FREECIV_JSON_CONNECTION */
2925 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category_num)) {
2926 RECEIVE_PACKET_FIELD_ERROR(category_num);
2927 }
2928#ifdef FREECIV_JSON_CONNECTION
2929 field_addr.name = "player_id";
2930#endif /* FREECIV_JSON_CONNECTION */
2931 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_id)) {
2932 RECEIVE_PACKET_FIELD_ERROR(player_id);
2933 }
2934#ifdef FREECIV_JSON_CONNECTION
2935 field_addr.name = "score";
2936#endif /* FREECIV_JSON_CONNECTION */
2937 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
2939 }
2940#ifdef FREECIV_JSON_CONNECTION
2941 field_addr.name = "category_score";
2942#endif /* FREECIV_JSON_CONNECTION */
2943 if (real_packet->category_num > 32) {
2944 RECEIVE_PACKET_FIELD_ERROR(category_score, ": truncation array");
2945 }
2946 {
2947 int i;
2948
2949#ifdef FREECIV_JSON_CONNECTION
2950 /* Enter array. */
2951 field_addr.sub_location = plocation_elem_new(0);
2952#endif /* FREECIV_JSON_CONNECTION */
2953
2954 for (i = 0; i < real_packet->category_num; i++) {
2955#ifdef FREECIV_JSON_CONNECTION
2956 field_addr.sub_location->number = i;
2957#endif /* FREECIV_JSON_CONNECTION */
2958
2959 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->category_score[i])) {
2960 RECEIVE_PACKET_FIELD_ERROR(category_score);
2961 }
2962 }
2963
2964#ifdef FREECIV_JSON_CONNECTION
2965 /* Exit array. */
2966 FC_FREE(field_addr.sub_location);
2967#endif /* FREECIV_JSON_CONNECTION */
2968 }
2969#ifdef FREECIV_JSON_CONNECTION
2970 field_addr.name = "winner";
2971#endif /* FREECIV_JSON_CONNECTION */
2972 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->winner)) {
2974 }
2975#endif
2976 log_packet_detailed("packet_endgame_player_100: got info about ()");
2978}
2979
2981{
2982 const struct packet_endgame_player *real_packet = packet;
2983 int e;
2985#ifdef FREECIV_JSON_CONNECTION
2986 struct plocation field_addr;
2987 {
2991 }
2992#endif /* FREECIV_JSON_CONNECTION */
2993
2994 log_packet_detailed("packet_endgame_player_100: sending info about ()");
2995#if 1 /* To match endif */
2996#ifdef FREECIV_JSON_CONNECTION
2997 field_addr.name = "category_num";
2998#endif /* FREECIV_JSON_CONNECTION */
2999 e = 0;
3000 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category_num);
3001 if (e) {
3002 log_packet_detailed("'category_num' field error detected");
3003 }
3004#ifdef FREECIV_JSON_CONNECTION
3005 field_addr.name = "player_id";
3006#endif /* FREECIV_JSON_CONNECTION */
3007 e = 0;
3008 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_id);
3009 if (e) {
3010 log_packet_detailed("'player_id' field error detected");
3011 }
3012#ifdef FREECIV_JSON_CONNECTION
3013 field_addr.name = "score";
3014#endif /* FREECIV_JSON_CONNECTION */
3015 e = 0;
3016 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
3017 if (e) {
3018 log_packet_detailed("'score' field error detected");
3019 }
3020#ifdef FREECIV_JSON_CONNECTION
3021 field_addr.name = "category_score";
3022#endif /* FREECIV_JSON_CONNECTION */
3023 e = 0;
3024 {
3025 int i;
3026
3027#ifdef FREECIV_JSON_CONNECTION
3028 /* Create the array. */
3029 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->category_num);
3030
3031 /* Enter the array. */
3032 field_addr.sub_location = plocation_elem_new(0);
3033#endif /* FREECIV_JSON_CONNECTION */
3034
3035 for (i = 0; i < real_packet->category_num; i++) {
3036#ifdef FREECIV_JSON_CONNECTION
3037 /* Next array element. */
3038 field_addr.sub_location->number = i;
3039#endif /* FREECIV_JSON_CONNECTION */
3040
3041 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->category_score[i]);
3042 }
3043
3044#ifdef FREECIV_JSON_CONNECTION
3045 /* Exit array. */
3046 FC_FREE(field_addr.sub_location);
3047#endif /* FREECIV_JSON_CONNECTION */
3048 }
3049 if (e) {
3050 log_packet_detailed("'category_score' field error detected");
3051 }
3052#ifdef FREECIV_JSON_CONNECTION
3053 field_addr.name = "winner";
3054#endif /* FREECIV_JSON_CONNECTION */
3055 e = 0;
3056 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->winner);
3057 if (e) {
3058 log_packet_detailed("'winner' field error detected");
3059 }
3060
3061#endif
3063}
3064
3066{
3067 if (!pc->used) {
3068 log_error("WARNING: trying to send data to the closed connection %s",
3070 return -1;
3071 }
3072 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ENDGAME_PLAYER].packet != NULL, -1,
3073 "Handler for PACKET_ENDGAME_PLAYER not installed");
3074 return pc->phs.handlers->send[PACKET_ENDGAME_PLAYER].packet(pc, packet);
3075}
3076
3077void lsend_packet_endgame_player(struct conn_list *dest, const struct packet_endgame_player *packet)
3078{
3079 conn_list_iterate(dest, pconn) {
3082}
3083
3084#ifdef FREECIV_DELTA_PROTOCOL
3086{
3087 const struct packet_tile_info *key = (const struct packet_tile_info *) vkey;
3088 genhash_val_t result = 0;
3089
3090 result += key->tile;
3091
3092 result &= 0xFFFFFFFF;
3093 return result;
3094}
3095
3096static bool cmp_packet_tile_info_100(const void *vkey1, const void *vkey2)
3097{
3098 const struct packet_tile_info *old = (const struct packet_tile_info *) vkey1;
3099 const struct packet_tile_info *real_packet = (const struct packet_tile_info *) vkey2;
3100 bool differ;
3101
3102 differ = (old->tile != real_packet->tile);
3103
3104 return !differ;
3105}
3107#endif /* FREECIV_DELTA_PROTOCOL */
3108
3110{
3111#ifdef FREECIV_DELTA_PROTOCOL
3113 struct packet_tile_info *old;
3114 struct genhash **hash = pc->phs.received + PACKET_TILE_INFO;
3115#endif /* FREECIV_DELTA_PROTOCOL */
3117#ifdef FREECIV_JSON_CONNECTION
3118 struct plocation field_addr;
3119 {
3123 }
3124#endif /* FREECIV_JSON_CONNECTION */
3125
3126#ifdef FREECIV_DELTA_PROTOCOL
3127#ifdef FREECIV_JSON_CONNECTION
3128 field_addr.name = "fields";
3129#endif /* FREECIV_JSON_CONNECTION */
3130 DIO_BV_GET(&din, &field_addr, fields);
3131#ifdef FREECIV_JSON_CONNECTION
3132 field_addr.name = "tile";
3133#endif /* FREECIV_JSON_CONNECTION */
3134 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
3136 }
3137
3138#else /* FREECIV_DELTA_PROTOCOL */
3139#ifdef FREECIV_JSON_CONNECTION
3140 field_addr.name = "tile";
3141#endif /* FREECIV_JSON_CONNECTION */
3142 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
3144 }
3145#ifdef FREECIV_JSON_CONNECTION
3146 field_addr.name = "continent";
3147#endif /* FREECIV_JSON_CONNECTION */
3148 {
3149 int readin;
3150
3151 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
3152 RECEIVE_PACKET_FIELD_ERROR(continent);
3153 }
3154 real_packet->continent = readin;
3155 }
3156#ifdef FREECIV_JSON_CONNECTION
3157 field_addr.name = "known";
3158#endif /* FREECIV_JSON_CONNECTION */
3159 {
3160 int readin;
3161
3162 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3164 }
3165 real_packet->known = readin;
3166 }
3167#ifdef FREECIV_JSON_CONNECTION
3168 field_addr.name = "owner";
3169#endif /* FREECIV_JSON_CONNECTION */
3170 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
3172 }
3173#ifdef FREECIV_JSON_CONNECTION
3174 field_addr.name = "extras_owner";
3175#endif /* FREECIV_JSON_CONNECTION */
3176 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->extras_owner)) {
3177 RECEIVE_PACKET_FIELD_ERROR(extras_owner);
3178 }
3179#ifdef FREECIV_JSON_CONNECTION
3180 field_addr.name = "worked";
3181#endif /* FREECIV_JSON_CONNECTION */
3182 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->worked)) {
3184 }
3185#ifdef FREECIV_JSON_CONNECTION
3186 field_addr.name = "terrain";
3187#endif /* FREECIV_JSON_CONNECTION */
3188 {
3189 int readin;
3190
3191 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3193 }
3194 real_packet->terrain = readin;
3195 }
3196#ifdef FREECIV_JSON_CONNECTION
3197 field_addr.name = "resource";
3198#endif /* FREECIV_JSON_CONNECTION */
3199 {
3200 int readin;
3201
3202 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3204 }
3205 real_packet->resource = readin;
3206 }
3207#ifdef FREECIV_JSON_CONNECTION
3208 field_addr.name = "extras";
3209#endif /* FREECIV_JSON_CONNECTION */
3210 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
3212 }
3213#ifdef FREECIV_JSON_CONNECTION
3214 field_addr.name = "placing";
3215#endif /* FREECIV_JSON_CONNECTION */
3216 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->placing)) {
3218 }
3219#ifdef FREECIV_JSON_CONNECTION
3220 field_addr.name = "place_turn";
3221#endif /* FREECIV_JSON_CONNECTION */
3222 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->place_turn)) {
3223 RECEIVE_PACKET_FIELD_ERROR(place_turn);
3224 }
3225#ifdef FREECIV_JSON_CONNECTION
3226 field_addr.name = "spec_sprite";
3227#endif /* FREECIV_JSON_CONNECTION */
3228 if (!DIO_GET(string, &din, &field_addr, real_packet->spec_sprite, sizeof(real_packet->spec_sprite))) {
3229 RECEIVE_PACKET_FIELD_ERROR(spec_sprite);
3230 }
3231#ifdef FREECIV_JSON_CONNECTION
3232 field_addr.name = "label";
3233#endif /* FREECIV_JSON_CONNECTION */
3234 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
3236 }
3237#endif
3238 log_packet_detailed("packet_tile_info_100: got info about (%d)",
3239 real_packet->tile);
3240
3241#ifdef FREECIV_DELTA_PROTOCOL
3242 if (NULL == *hash) {
3244 NULL, NULL, NULL, free);
3245 }
3246
3247 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
3248 *real_packet = *old;
3249 } else {
3250 int tile;
3251
3252 tile = real_packet->tile;
3253
3254 log_packet_detailed(" no old info");
3255 memset(real_packet, 0, sizeof(*real_packet));
3256
3257 real_packet->tile = tile;
3258 }
3259
3260 if (BV_ISSET(fields, 0)) {
3261 log_packet_detailed(" got field 'continent'");
3262#ifdef FREECIV_JSON_CONNECTION
3263 field_addr.name = "continent";
3264#endif /* FREECIV_JSON_CONNECTION */
3265 {
3266 int readin;
3267
3268 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
3269 RECEIVE_PACKET_FIELD_ERROR(continent);
3270 }
3271 real_packet->continent = readin;
3272 }
3273 }
3274 if (BV_ISSET(fields, 1)) {
3275 log_packet_detailed(" got field 'known'");
3276#ifdef FREECIV_JSON_CONNECTION
3277 field_addr.name = "known";
3278#endif /* FREECIV_JSON_CONNECTION */
3279 {
3280 int readin;
3281
3282 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3284 }
3285 real_packet->known = readin;
3286 }
3287 }
3288 if (BV_ISSET(fields, 2)) {
3289 log_packet_detailed(" got field 'owner'");
3290#ifdef FREECIV_JSON_CONNECTION
3291 field_addr.name = "owner";
3292#endif /* FREECIV_JSON_CONNECTION */
3293 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
3295 }
3296 }
3297 if (BV_ISSET(fields, 3)) {
3298 log_packet_detailed(" got field 'extras_owner'");
3299#ifdef FREECIV_JSON_CONNECTION
3300 field_addr.name = "extras_owner";
3301#endif /* FREECIV_JSON_CONNECTION */
3302 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->extras_owner)) {
3303 RECEIVE_PACKET_FIELD_ERROR(extras_owner);
3304 }
3305 }
3306 if (BV_ISSET(fields, 4)) {
3307 log_packet_detailed(" got field 'worked'");
3308#ifdef FREECIV_JSON_CONNECTION
3309 field_addr.name = "worked";
3310#endif /* FREECIV_JSON_CONNECTION */
3311 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->worked)) {
3313 }
3314 }
3315 if (BV_ISSET(fields, 5)) {
3316 log_packet_detailed(" got field 'terrain'");
3317#ifdef FREECIV_JSON_CONNECTION
3318 field_addr.name = "terrain";
3319#endif /* FREECIV_JSON_CONNECTION */
3320 {
3321 int readin;
3322
3323 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3325 }
3326 real_packet->terrain = readin;
3327 }
3328 }
3329 if (BV_ISSET(fields, 6)) {
3330 log_packet_detailed(" got field 'resource'");
3331#ifdef FREECIV_JSON_CONNECTION
3332 field_addr.name = "resource";
3333#endif /* FREECIV_JSON_CONNECTION */
3334 {
3335 int readin;
3336
3337 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3339 }
3340 real_packet->resource = readin;
3341 }
3342 }
3343 if (BV_ISSET(fields, 7)) {
3344 log_packet_detailed(" got field 'extras'");
3345#ifdef FREECIV_JSON_CONNECTION
3346 field_addr.name = "extras";
3347#endif /* FREECIV_JSON_CONNECTION */
3348 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
3350 }
3351 }
3352 if (BV_ISSET(fields, 8)) {
3353 log_packet_detailed(" got field 'placing'");
3354#ifdef FREECIV_JSON_CONNECTION
3355 field_addr.name = "placing";
3356#endif /* FREECIV_JSON_CONNECTION */
3357 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->placing)) {
3359 }
3360 }
3361 if (BV_ISSET(fields, 9)) {
3362 log_packet_detailed(" got field 'place_turn'");
3363#ifdef FREECIV_JSON_CONNECTION
3364 field_addr.name = "place_turn";
3365#endif /* FREECIV_JSON_CONNECTION */
3366 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->place_turn)) {
3367 RECEIVE_PACKET_FIELD_ERROR(place_turn);
3368 }
3369 }
3370 if (BV_ISSET(fields, 10)) {
3371 log_packet_detailed(" got field 'spec_sprite'");
3372#ifdef FREECIV_JSON_CONNECTION
3373 field_addr.name = "spec_sprite";
3374#endif /* FREECIV_JSON_CONNECTION */
3375 if (!DIO_GET(string, &din, &field_addr, real_packet->spec_sprite, sizeof(real_packet->spec_sprite))) {
3376 RECEIVE_PACKET_FIELD_ERROR(spec_sprite);
3377 }
3378 }
3379 if (BV_ISSET(fields, 11)) {
3380 log_packet_detailed(" got field 'label'");
3381#ifdef FREECIV_JSON_CONNECTION
3382 field_addr.name = "label";
3383#endif /* FREECIV_JSON_CONNECTION */
3384 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
3386 }
3387 }
3388
3389 if (NULL == old) {
3390 old = fc_malloc(sizeof(*old));
3391 *old = *real_packet;
3392 genhash_insert(*hash, old, old);
3393 } else {
3394 *old = *real_packet;
3395 }
3396
3397#endif /* FREECIV_DELTA_PROTOCOL */
3399}
3400
3401static int send_packet_tile_info_100(struct connection *pc, const struct packet_tile_info *packet)
3402{
3403 const struct packet_tile_info *real_packet = packet;
3404 int e;
3405#ifdef FREECIV_DELTA_PROTOCOL
3407 struct packet_tile_info *old;
3408 bool differ;
3409 struct genhash **hash = pc->phs.sent + PACKET_TILE_INFO;
3410 int different = 0;
3411#endif /* FREECIV_DELTA_PROTOCOL */
3413#ifdef FREECIV_JSON_CONNECTION
3414 struct plocation field_addr;
3415 {
3419 }
3420#endif /* FREECIV_JSON_CONNECTION */
3421
3422 log_packet_detailed("packet_tile_info_100: sending info about (%d)",
3423 real_packet->tile);
3424
3425#ifdef FREECIV_DELTA_PROTOCOL
3426 if (NULL == *hash) {
3428 NULL, NULL, NULL, free);
3429 }
3430 BV_CLR_ALL(fields);
3431
3432 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
3433 old = fc_malloc(sizeof(*old));
3434 *old = *real_packet;
3435 genhash_insert(*hash, old, old);
3436 memset(old, 0, sizeof(*old));
3437 different = 1; /* Force to send. */
3438 }
3439 differ = (old->continent != real_packet->continent);
3440 if (differ) {
3441 different++;
3442 BV_SET(fields, 0);
3443 }
3444
3445 differ = (old->known != real_packet->known);
3446 if (differ) {
3447 different++;
3448 BV_SET(fields, 1);
3449 }
3450
3451 differ = (old->owner != real_packet->owner);
3452 if (differ) {
3453 different++;
3454 BV_SET(fields, 2);
3455 }
3456
3457 differ = (old->extras_owner != real_packet->extras_owner);
3458 if (differ) {
3459 different++;
3460 BV_SET(fields, 3);
3461 }
3462
3463 differ = (old->worked != real_packet->worked);
3464 if (differ) {
3465 different++;
3466 BV_SET(fields, 4);
3467 }
3468
3469 differ = (old->terrain != real_packet->terrain);
3470 if (differ) {
3471 different++;
3472 BV_SET(fields, 5);
3473 }
3474
3475 differ = (old->resource != real_packet->resource);
3476 if (differ) {
3477 different++;
3478 BV_SET(fields, 6);
3479 }
3480
3481 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
3482 if (differ) {
3483 different++;
3484 BV_SET(fields, 7);
3485 }
3486
3487 differ = (old->placing != real_packet->placing);
3488 if (differ) {
3489 different++;
3490 BV_SET(fields, 8);
3491 }
3492
3493 differ = (old->place_turn != real_packet->place_turn);
3494 if (differ) {
3495 different++;
3496 BV_SET(fields, 9);
3497 }
3498
3499 differ = (strcmp(old->spec_sprite, real_packet->spec_sprite) != 0);
3500 if (differ) {
3501 different++;
3502 BV_SET(fields, 10);
3503 }
3504
3505 differ = (strcmp(old->label, real_packet->label) != 0);
3506 if (differ) {
3507 different++;
3508 BV_SET(fields, 11);
3509 }
3510
3511 if (different == 0) {
3512 log_packet_detailed(" no change -> discard");
3514 }
3515
3516#ifdef FREECIV_JSON_CONNECTION
3517 field_addr.name = "fields";
3518#endif /* FREECIV_JSON_CONNECTION */
3519 e = 0;
3520 e |= DIO_BV_PUT(&dout, &field_addr, fields);
3521 if (e) {
3522 log_packet_detailed("fields bitvector error detected");
3523 }
3524#ifdef FREECIV_JSON_CONNECTION
3525 field_addr.name = "tile";
3526#endif /* FREECIV_JSON_CONNECTION */
3527 e = 0;
3528 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
3529 if (e) {
3530 log_packet_detailed("'tile' field error detected");
3531 }
3532
3533 if (BV_ISSET(fields, 0)) {
3534 log_packet_detailed(" field 'continent' has changed");
3535#ifdef FREECIV_JSON_CONNECTION
3536 field_addr.name = "continent";
3537#endif /* FREECIV_JSON_CONNECTION */
3538 e = 0;
3539 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->continent);
3540 if (e) {
3541 log_packet_detailed("'continent' field error detected");
3542 }
3543 }
3544 if (BV_ISSET(fields, 1)) {
3545 log_packet_detailed(" field 'known' has changed");
3546#ifdef FREECIV_JSON_CONNECTION
3547 field_addr.name = "known";
3548#endif /* FREECIV_JSON_CONNECTION */
3549 e = 0;
3550 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->known);
3551 if (e) {
3552 log_packet_detailed("'known' field error detected");
3553 }
3554 }
3555 if (BV_ISSET(fields, 2)) {
3556 log_packet_detailed(" field 'owner' has changed");
3557#ifdef FREECIV_JSON_CONNECTION
3558 field_addr.name = "owner";
3559#endif /* FREECIV_JSON_CONNECTION */
3560 e = 0;
3561 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
3562 if (e) {
3563 log_packet_detailed("'owner' field error detected");
3564 }
3565 }
3566 if (BV_ISSET(fields, 3)) {
3567 log_packet_detailed(" field 'extras_owner' has changed");
3568#ifdef FREECIV_JSON_CONNECTION
3569 field_addr.name = "extras_owner";
3570#endif /* FREECIV_JSON_CONNECTION */
3571 e = 0;
3572 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->extras_owner);
3573 if (e) {
3574 log_packet_detailed("'extras_owner' field error detected");
3575 }
3576 }
3577 if (BV_ISSET(fields, 4)) {
3578 log_packet_detailed(" field 'worked' has changed");
3579#ifdef FREECIV_JSON_CONNECTION
3580 field_addr.name = "worked";
3581#endif /* FREECIV_JSON_CONNECTION */
3582 e = 0;
3583 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->worked);
3584 if (e) {
3585 log_packet_detailed("'worked' field error detected");
3586 }
3587 }
3588 if (BV_ISSET(fields, 5)) {
3589 log_packet_detailed(" field 'terrain' has changed");
3590#ifdef FREECIV_JSON_CONNECTION
3591 field_addr.name = "terrain";
3592#endif /* FREECIV_JSON_CONNECTION */
3593 e = 0;
3594 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
3595 if (e) {
3596 log_packet_detailed("'terrain' field error detected");
3597 }
3598 }
3599 if (BV_ISSET(fields, 6)) {
3600 log_packet_detailed(" field 'resource' has changed");
3601#ifdef FREECIV_JSON_CONNECTION
3602 field_addr.name = "resource";
3603#endif /* FREECIV_JSON_CONNECTION */
3604 e = 0;
3605 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
3606 if (e) {
3607 log_packet_detailed("'resource' field error detected");
3608 }
3609 }
3610 if (BV_ISSET(fields, 7)) {
3611 log_packet_detailed(" field 'extras' has changed");
3612#ifdef FREECIV_JSON_CONNECTION
3613 field_addr.name = "extras";
3614#endif /* FREECIV_JSON_CONNECTION */
3615 e = 0;
3616 e |= DIO_BV_PUT(&dout, &field_addr, packet->extras);
3617 if (e) {
3618 log_packet_detailed("'extras' field error detected");
3619 }
3620 }
3621 if (BV_ISSET(fields, 8)) {
3622 log_packet_detailed(" field 'placing' has changed");
3623#ifdef FREECIV_JSON_CONNECTION
3624 field_addr.name = "placing";
3625#endif /* FREECIV_JSON_CONNECTION */
3626 e = 0;
3627 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->placing);
3628 if (e) {
3629 log_packet_detailed("'placing' field error detected");
3630 }
3631 }
3632 if (BV_ISSET(fields, 9)) {
3633 log_packet_detailed(" field 'place_turn' has changed");
3634#ifdef FREECIV_JSON_CONNECTION
3635 field_addr.name = "place_turn";
3636#endif /* FREECIV_JSON_CONNECTION */
3637 e = 0;
3638 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->place_turn);
3639 if (e) {
3640 log_packet_detailed("'place_turn' field error detected");
3641 }
3642 }
3643 if (BV_ISSET(fields, 10)) {
3644 log_packet_detailed(" field 'spec_sprite' has changed");
3645#ifdef FREECIV_JSON_CONNECTION
3646 field_addr.name = "spec_sprite";
3647#endif /* FREECIV_JSON_CONNECTION */
3648 e = 0;
3649 e |= DIO_PUT(string, &dout, &field_addr, real_packet->spec_sprite);
3650 if (e) {
3651 log_packet_detailed("'spec_sprite' field error detected");
3652 }
3653 }
3654 if (BV_ISSET(fields, 11)) {
3655 log_packet_detailed(" field 'label' has changed");
3656#ifdef FREECIV_JSON_CONNECTION
3657 field_addr.name = "label";
3658#endif /* FREECIV_JSON_CONNECTION */
3659 e = 0;
3660 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
3661 if (e) {
3662 log_packet_detailed("'label' field error detected");
3663 }
3664 }
3665
3666 *old = *real_packet;
3667#endif /* FREECIV_DELTA_PROTOCOL */
3668#ifndef FREECIV_DELTA_PROTOCOL
3669#ifdef FREECIV_JSON_CONNECTION
3670 field_addr.name = "tile";
3671#endif /* FREECIV_JSON_CONNECTION */
3672 e = 0;
3673 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
3674 if (e) {
3675 log_packet_detailed("'tile' field error detected");
3676 }
3677#ifdef FREECIV_JSON_CONNECTION
3678 field_addr.name = "continent";
3679#endif /* FREECIV_JSON_CONNECTION */
3680 e = 0;
3681 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->continent);
3682 if (e) {
3683 log_packet_detailed("'continent' field error detected");
3684 }
3685#ifdef FREECIV_JSON_CONNECTION
3686 field_addr.name = "known";
3687#endif /* FREECIV_JSON_CONNECTION */
3688 e = 0;
3689 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->known);
3690 if (e) {
3691 log_packet_detailed("'known' field error detected");
3692 }
3693#ifdef FREECIV_JSON_CONNECTION
3694 field_addr.name = "owner";
3695#endif /* FREECIV_JSON_CONNECTION */
3696 e = 0;
3697 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
3698 if (e) {
3699 log_packet_detailed("'owner' field error detected");
3700 }
3701#ifdef FREECIV_JSON_CONNECTION
3702 field_addr.name = "extras_owner";
3703#endif /* FREECIV_JSON_CONNECTION */
3704 e = 0;
3705 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->extras_owner);
3706 if (e) {
3707 log_packet_detailed("'extras_owner' field error detected");
3708 }
3709#ifdef FREECIV_JSON_CONNECTION
3710 field_addr.name = "worked";
3711#endif /* FREECIV_JSON_CONNECTION */
3712 e = 0;
3713 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->worked);
3714 if (e) {
3715 log_packet_detailed("'worked' field error detected");
3716 }
3717#ifdef FREECIV_JSON_CONNECTION
3718 field_addr.name = "terrain";
3719#endif /* FREECIV_JSON_CONNECTION */
3720 e = 0;
3721 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
3722 if (e) {
3723 log_packet_detailed("'terrain' field error detected");
3724 }
3725#ifdef FREECIV_JSON_CONNECTION
3726 field_addr.name = "resource";
3727#endif /* FREECIV_JSON_CONNECTION */
3728 e = 0;
3729 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
3730 if (e) {
3731 log_packet_detailed("'resource' field error detected");
3732 }
3733#ifdef FREECIV_JSON_CONNECTION
3734 field_addr.name = "extras";
3735#endif /* FREECIV_JSON_CONNECTION */
3736 e = 0;
3737 e |= DIO_BV_PUT(&dout, &field_addr, packet->extras);
3738 if (e) {
3739 log_packet_detailed("'extras' field error detected");
3740 }
3741#ifdef FREECIV_JSON_CONNECTION
3742 field_addr.name = "placing";
3743#endif /* FREECIV_JSON_CONNECTION */
3744 e = 0;
3745 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->placing);
3746 if (e) {
3747 log_packet_detailed("'placing' field error detected");
3748 }
3749#ifdef FREECIV_JSON_CONNECTION
3750 field_addr.name = "place_turn";
3751#endif /* FREECIV_JSON_CONNECTION */
3752 e = 0;
3753 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->place_turn);
3754 if (e) {
3755 log_packet_detailed("'place_turn' field error detected");
3756 }
3757#ifdef FREECIV_JSON_CONNECTION
3758 field_addr.name = "spec_sprite";
3759#endif /* FREECIV_JSON_CONNECTION */
3760 e = 0;
3761 e |= DIO_PUT(string, &dout, &field_addr, real_packet->spec_sprite);
3762 if (e) {
3763 log_packet_detailed("'spec_sprite' field error detected");
3764 }
3765#ifdef FREECIV_JSON_CONNECTION
3766 field_addr.name = "label";
3767#endif /* FREECIV_JSON_CONNECTION */
3768 e = 0;
3769 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
3770 if (e) {
3771 log_packet_detailed("'label' field error detected");
3772 }
3773
3774#endif
3776}
3777
3778int send_packet_tile_info(struct connection *pc, const struct packet_tile_info *packet)
3779{
3780 if (!pc->used) {
3781 log_error("WARNING: trying to send data to the closed connection %s",
3783 return -1;
3784 }
3785 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TILE_INFO].packet != NULL, -1,
3786 "Handler for PACKET_TILE_INFO not installed");
3787 return pc->phs.handlers->send[PACKET_TILE_INFO].packet(pc, packet);
3788}
3789
3790void lsend_packet_tile_info(struct conn_list *dest, const struct packet_tile_info *packet)
3791{
3792 conn_list_iterate(dest, pconn) {
3795}
3796
3797#ifdef FREECIV_DELTA_PROTOCOL
3798#define hash_packet_game_info_100 hash_const
3799
3800#define cmp_packet_game_info_100 cmp_const
3801
3803#endif /* FREECIV_DELTA_PROTOCOL */
3804
3806{
3807#ifdef FREECIV_DELTA_PROTOCOL
3809 struct packet_game_info *old;
3810 struct genhash **hash = pc->phs.received + PACKET_GAME_INFO;
3811#endif /* FREECIV_DELTA_PROTOCOL */
3813#ifdef FREECIV_JSON_CONNECTION
3814 struct plocation field_addr;
3815 {
3819 }
3820#endif /* FREECIV_JSON_CONNECTION */
3821
3822#ifdef FREECIV_DELTA_PROTOCOL
3823#ifdef FREECIV_JSON_CONNECTION
3824 field_addr.name = "fields";
3825#endif /* FREECIV_JSON_CONNECTION */
3826 DIO_BV_GET(&din, &field_addr, fields);
3827
3828#else /* FREECIV_DELTA_PROTOCOL */
3829#ifdef FREECIV_JSON_CONNECTION
3830 field_addr.name = "add_to_size_limit";
3831#endif /* FREECIV_JSON_CONNECTION */
3832 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->add_to_size_limit)) {
3833 RECEIVE_PACKET_FIELD_ERROR(add_to_size_limit);
3834 }
3835#ifdef FREECIV_JSON_CONNECTION
3836 field_addr.name = "aifill";
3837#endif /* FREECIV_JSON_CONNECTION */
3838 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->aifill)) {
3840 }
3841#ifdef FREECIV_JSON_CONNECTION
3842 field_addr.name = "persistent_ready";
3843#endif /* FREECIV_JSON_CONNECTION */
3844 {
3845 int readin;
3846
3847 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3848 RECEIVE_PACKET_FIELD_ERROR(persistent_ready);
3849 }
3850 real_packet->persistent_ready = readin;
3851 }
3852#ifdef FREECIV_JSON_CONNECTION
3853 field_addr.name = "airlifting_style";
3854#endif /* FREECIV_JSON_CONNECTION */
3855 {
3856 int readin;
3857
3858 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3859 RECEIVE_PACKET_FIELD_ERROR(airlifting_style);
3860 }
3861 real_packet->airlifting_style = readin;
3862 }
3863#ifdef FREECIV_JSON_CONNECTION
3864 field_addr.name = "airlift_from_always_enabled";
3865#endif /* FREECIV_JSON_CONNECTION */
3866 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift_from_always_enabled)) {
3867 RECEIVE_PACKET_FIELD_ERROR(airlift_from_always_enabled);
3868 }
3869#ifdef FREECIV_JSON_CONNECTION
3870 field_addr.name = "airlift_to_always_enabled";
3871#endif /* FREECIV_JSON_CONNECTION */
3872 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift_to_always_enabled)) {
3873 RECEIVE_PACKET_FIELD_ERROR(airlift_to_always_enabled);
3874 }
3875#ifdef FREECIV_JSON_CONNECTION
3876 field_addr.name = "angrycitizen";
3877#endif /* FREECIV_JSON_CONNECTION */
3878 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->angrycitizen)) {
3879 RECEIVE_PACKET_FIELD_ERROR(angrycitizen);
3880 }
3881#ifdef FREECIV_JSON_CONNECTION
3882 field_addr.name = "base_pollution";
3883#endif /* FREECIV_JSON_CONNECTION */
3884 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->base_pollution)) {
3885 RECEIVE_PACKET_FIELD_ERROR(base_pollution);
3886 }
3887#ifdef FREECIV_JSON_CONNECTION
3888 field_addr.name = "base_tech_cost";
3889#endif /* FREECIV_JSON_CONNECTION */
3890 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->base_tech_cost)) {
3891 RECEIVE_PACKET_FIELD_ERROR(base_tech_cost);
3892 }
3893#ifdef FREECIV_JSON_CONNECTION
3894 field_addr.name = "min_tech_cost";
3895#endif /* FREECIV_JSON_CONNECTION */
3896 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_tech_cost)) {
3897 RECEIVE_PACKET_FIELD_ERROR(min_tech_cost);
3898 }
3899#ifdef FREECIV_JSON_CONNECTION
3900 field_addr.name = "tech_leak_pct";
3901#endif /* FREECIV_JSON_CONNECTION */
3902 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tech_leak_pct)) {
3903 RECEIVE_PACKET_FIELD_ERROR(tech_leak_pct);
3904 }
3905#ifdef FREECIV_JSON_CONNECTION
3906 field_addr.name = "border_city_radius_sq";
3907#endif /* FREECIV_JSON_CONNECTION */
3908 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->border_city_radius_sq)) {
3909 RECEIVE_PACKET_FIELD_ERROR(border_city_radius_sq);
3910 }
3911#ifdef FREECIV_JSON_CONNECTION
3912 field_addr.name = "border_size_effect";
3913#endif /* FREECIV_JSON_CONNECTION */
3914 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->border_size_effect)) {
3915 RECEIVE_PACKET_FIELD_ERROR(border_size_effect);
3916 }
3917#ifdef FREECIV_JSON_CONNECTION
3918 field_addr.name = "border_city_permanent_radius_sq";
3919#endif /* FREECIV_JSON_CONNECTION */
3920 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->border_city_permanent_radius_sq)) {
3921 RECEIVE_PACKET_FIELD_ERROR(border_city_permanent_radius_sq);
3922 }
3923#ifdef FREECIV_JSON_CONNECTION
3924 field_addr.name = "borders";
3925#endif /* FREECIV_JSON_CONNECTION */
3926 {
3927 int readin;
3928
3929 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3931 }
3932 real_packet->borders = readin;
3933 }
3934#ifdef FREECIV_JSON_CONNECTION
3935 field_addr.name = "base_bribe_cost";
3936#endif /* FREECIV_JSON_CONNECTION */
3937 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->base_bribe_cost)) {
3938 RECEIVE_PACKET_FIELD_ERROR(base_bribe_cost);
3939 }
3940#ifdef FREECIV_JSON_CONNECTION
3941 field_addr.name = "caravan_bonus_style";
3942#endif /* FREECIV_JSON_CONNECTION */
3943 {
3944 int readin;
3945
3946 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
3947 RECEIVE_PACKET_FIELD_ERROR(caravan_bonus_style);
3948 }
3949 real_packet->caravan_bonus_style = readin;
3950 }
3951#ifdef FREECIV_JSON_CONNECTION
3952 field_addr.name = "culture_vic_points";
3953#endif /* FREECIV_JSON_CONNECTION */
3954 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture_vic_points)) {
3955 RECEIVE_PACKET_FIELD_ERROR(culture_vic_points);
3956 }
3957#ifdef FREECIV_JSON_CONNECTION
3958 field_addr.name = "culture_vic_lead";
3959#endif /* FREECIV_JSON_CONNECTION */
3960 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_vic_lead)) {
3961 RECEIVE_PACKET_FIELD_ERROR(culture_vic_lead);
3962 }
3963#ifdef FREECIV_JSON_CONNECTION
3964 field_addr.name = "culture_migration_pml";
3965#endif /* FREECIV_JSON_CONNECTION */
3966 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_migration_pml)) {
3968 }
3969#ifdef FREECIV_JSON_CONNECTION
3970 field_addr.name = "history_interest_pml";
3971#endif /* FREECIV_JSON_CONNECTION */
3972 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->history_interest_pml)) {
3973 RECEIVE_PACKET_FIELD_ERROR(history_interest_pml);
3974 }
3975#ifdef FREECIV_JSON_CONNECTION
3976 field_addr.name = "celebratesize";
3977#endif /* FREECIV_JSON_CONNECTION */
3978 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->celebratesize)) {
3979 RECEIVE_PACKET_FIELD_ERROR(celebratesize);
3980 }
3981#ifdef FREECIV_JSON_CONNECTION
3982 field_addr.name = "changable_tax";
3983#endif /* FREECIV_JSON_CONNECTION */
3984 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->changable_tax)) {
3985 RECEIVE_PACKET_FIELD_ERROR(changable_tax);
3986 }
3987#ifdef FREECIV_JSON_CONNECTION
3988 field_addr.name = "pop_report_zeroes";
3989#endif /* FREECIV_JSON_CONNECTION */
3990 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_report_zeroes)) {
3991 RECEIVE_PACKET_FIELD_ERROR(pop_report_zeroes);
3992 }
3993#ifdef FREECIV_JSON_CONNECTION
3994 field_addr.name = "citizen_nationality";
3995#endif /* FREECIV_JSON_CONNECTION */
3996 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->citizen_nationality)) {
3997 RECEIVE_PACKET_FIELD_ERROR(citizen_nationality);
3998 }
3999#ifdef FREECIV_JSON_CONNECTION
4000 field_addr.name = "unit_builders_nationality";
4001#endif /* FREECIV_JSON_CONNECTION */
4002 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unit_builders_nationality)) {
4003 RECEIVE_PACKET_FIELD_ERROR(unit_builders_nationality);
4004 }
4005#ifdef FREECIV_JSON_CONNECTION
4006 field_addr.name = "citizen_convert_speed";
4007#endif /* FREECIV_JSON_CONNECTION */
4008 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->citizen_convert_speed)) {
4009 RECEIVE_PACKET_FIELD_ERROR(citizen_convert_speed);
4010 }
4011#ifdef FREECIV_JSON_CONNECTION
4012 field_addr.name = "conquest_convert_pct";
4013#endif /* FREECIV_JSON_CONNECTION */
4014 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->conquest_convert_pct)) {
4015 RECEIVE_PACKET_FIELD_ERROR(conquest_convert_pct);
4016 }
4017#ifdef FREECIV_JSON_CONNECTION
4018 field_addr.name = "citizen_partisans_pct";
4019#endif /* FREECIV_JSON_CONNECTION */
4020 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citizen_partisans_pct)) {
4021 RECEIVE_PACKET_FIELD_ERROR(citizen_partisans_pct);
4022 }
4023#ifdef FREECIV_JSON_CONNECTION
4024 field_addr.name = "citymindist";
4025#endif /* FREECIV_JSON_CONNECTION */
4026 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citymindist)) {
4027 RECEIVE_PACKET_FIELD_ERROR(citymindist);
4028 }
4029#ifdef FREECIV_JSON_CONNECTION
4030 field_addr.name = "cooling";
4031#endif /* FREECIV_JSON_CONNECTION */
4032 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cooling)) {
4034 }
4035#ifdef FREECIV_JSON_CONNECTION
4036 field_addr.name = "coolinglevel";
4037#endif /* FREECIV_JSON_CONNECTION */
4038 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->coolinglevel)) {
4039 RECEIVE_PACKET_FIELD_ERROR(coolinglevel);
4040 }
4041#ifdef FREECIV_JSON_CONNECTION
4042 field_addr.name = "diplchance_initial_odds";
4043#endif /* FREECIV_JSON_CONNECTION */
4044 if (!DIO_BV_GET(&din, &field_addr, real_packet->diplchance_initial_odds)) {
4045 RECEIVE_PACKET_FIELD_ERROR(diplchance_initial_odds);
4046 }
4047#ifdef FREECIV_JSON_CONNECTION
4048 field_addr.name = "diplomacy";
4049#endif /* FREECIV_JSON_CONNECTION */
4050 {
4051 int readin;
4052
4053 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4054 RECEIVE_PACKET_FIELD_ERROR(diplomacy);
4055 }
4056 real_packet->diplomacy = readin;
4057 }
4058#ifdef FREECIV_JSON_CONNECTION
4059 field_addr.name = "fogofwar";
4060#endif /* FREECIV_JSON_CONNECTION */
4061 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->fogofwar)) {
4063 }
4064#ifdef FREECIV_JSON_CONNECTION
4065 field_addr.name = "food_cost";
4066#endif /* FREECIV_JSON_CONNECTION */
4067 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_cost)) {
4068 RECEIVE_PACKET_FIELD_ERROR(food_cost);
4069 }
4070#ifdef FREECIV_JSON_CONNECTION
4071 field_addr.name = "foodbox";
4072#endif /* FREECIV_JSON_CONNECTION */
4073 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->foodbox)) {
4075 }
4076#ifdef FREECIV_JSON_CONNECTION
4077 field_addr.name = "forced_gold";
4078#endif /* FREECIV_JSON_CONNECTION */
4079 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_gold)) {
4080 RECEIVE_PACKET_FIELD_ERROR(forced_gold);
4081 }
4082#ifdef FREECIV_JSON_CONNECTION
4083 field_addr.name = "forced_luxury";
4084#endif /* FREECIV_JSON_CONNECTION */
4085 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_luxury)) {
4086 RECEIVE_PACKET_FIELD_ERROR(forced_luxury);
4087 }
4088#ifdef FREECIV_JSON_CONNECTION
4089 field_addr.name = "forced_science";
4090#endif /* FREECIV_JSON_CONNECTION */
4091 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_science)) {
4092 RECEIVE_PACKET_FIELD_ERROR(forced_science);
4093 }
4094#ifdef FREECIV_JSON_CONNECTION
4095 field_addr.name = "fulltradesize";
4096#endif /* FREECIV_JSON_CONNECTION */
4097 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fulltradesize)) {
4098 RECEIVE_PACKET_FIELD_ERROR(fulltradesize);
4099 }
4100#ifdef FREECIV_JSON_CONNECTION
4101 field_addr.name = "trade_world_rel_pct";
4102#endif /* FREECIV_JSON_CONNECTION */
4103 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_world_rel_pct)) {
4104 RECEIVE_PACKET_FIELD_ERROR(trade_world_rel_pct);
4105 }
4106#ifdef FREECIV_JSON_CONNECTION
4107 field_addr.name = "min_trade_route_val";
4108#endif /* FREECIV_JSON_CONNECTION */
4109 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_trade_route_val)) {
4110 RECEIVE_PACKET_FIELD_ERROR(min_trade_route_val);
4111 }
4112#ifdef FREECIV_JSON_CONNECTION
4113 field_addr.name = "reveal_trade_partner";
4114#endif /* FREECIV_JSON_CONNECTION */
4115 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->reveal_trade_partner)) {
4116 RECEIVE_PACKET_FIELD_ERROR(reveal_trade_partner);
4117 }
4118#ifdef FREECIV_JSON_CONNECTION
4119 field_addr.name = "goods_selection";
4120#endif /* FREECIV_JSON_CONNECTION */
4121 {
4122 int readin;
4123
4124 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4125 RECEIVE_PACKET_FIELD_ERROR(goods_selection);
4126 }
4127 real_packet->goods_selection = readin;
4128 }
4129#ifdef FREECIV_JSON_CONNECTION
4130 field_addr.name = "global_advance_count";
4131#endif /* FREECIV_JSON_CONNECTION */
4132 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_advance_count)) {
4133 RECEIVE_PACKET_FIELD_ERROR(global_advance_count);
4134 }
4135#ifdef FREECIV_JSON_CONNECTION
4136 field_addr.name = "global_advances";
4137#endif /* FREECIV_JSON_CONNECTION */
4138 {
4139 int i;
4140
4141#ifdef FREECIV_JSON_CONNECTION
4142 /* Enter array. */
4143 field_addr.sub_location = plocation_elem_new(0);
4144#endif /* FREECIV_JSON_CONNECTION */
4145
4146 for (i = 0; i < A_LAST; i++) {
4147#ifdef FREECIV_JSON_CONNECTION
4148 field_addr.sub_location->number = i;
4149#endif /* FREECIV_JSON_CONNECTION */
4150
4151 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->global_advances[i])) {
4152 RECEIVE_PACKET_FIELD_ERROR(global_advances);
4153 }
4154 }
4155
4156#ifdef FREECIV_JSON_CONNECTION
4157 /* Exit array. */
4158 FC_FREE(field_addr.sub_location);
4159#endif /* FREECIV_JSON_CONNECTION */
4160 }
4161#ifdef FREECIV_JSON_CONNECTION
4162 field_addr.name = "global_warming";
4163#endif /* FREECIV_JSON_CONNECTION */
4164 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->global_warming)) {
4166 }
4167#ifdef FREECIV_JSON_CONNECTION
4168 field_addr.name = "globalwarming";
4169#endif /* FREECIV_JSON_CONNECTION */
4170 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->globalwarming)) {
4171 RECEIVE_PACKET_FIELD_ERROR(globalwarming);
4172 }
4173#ifdef FREECIV_JSON_CONNECTION
4174 field_addr.name = "gold";
4175#endif /* FREECIV_JSON_CONNECTION */
4176 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
4178 }
4179#ifdef FREECIV_JSON_CONNECTION
4180 field_addr.name = "gold_upkeep_style";
4181#endif /* FREECIV_JSON_CONNECTION */
4182 {
4183 int readin;
4184
4185 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4186 RECEIVE_PACKET_FIELD_ERROR(gold_upkeep_style);
4187 }
4188 real_packet->gold_upkeep_style = readin;
4189 }
4190#ifdef FREECIV_JSON_CONNECTION
4191 field_addr.name = "homeless_gold_upkeep";
4192#endif /* FREECIV_JSON_CONNECTION */
4193 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->homeless_gold_upkeep)) {
4194 RECEIVE_PACKET_FIELD_ERROR(homeless_gold_upkeep);
4195 }
4196#ifdef FREECIV_JSON_CONNECTION
4197 field_addr.name = "infrapoints";
4198#endif /* FREECIV_JSON_CONNECTION */
4199 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
4200 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
4201 }
4202#ifdef FREECIV_JSON_CONNECTION
4203 field_addr.name = "revolentype";
4204#endif /* FREECIV_JSON_CONNECTION */
4205 {
4206 int readin;
4207
4208 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4209 RECEIVE_PACKET_FIELD_ERROR(revolentype);
4210 }
4211 real_packet->revolentype = readin;
4212 }
4213#ifdef FREECIV_JSON_CONNECTION
4214 field_addr.name = "default_government_id";
4215#endif /* FREECIV_JSON_CONNECTION */
4216 {
4217 int readin;
4218
4219 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
4220 RECEIVE_PACKET_FIELD_ERROR(default_government_id);
4221 }
4222 real_packet->default_government_id = readin;
4223 }
4224#ifdef FREECIV_JSON_CONNECTION
4225 field_addr.name = "government_during_revolution_id";
4226#endif /* FREECIV_JSON_CONNECTION */
4227 {
4228 int readin;
4229
4230 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
4231 RECEIVE_PACKET_FIELD_ERROR(government_during_revolution_id);
4232 }
4233 real_packet->government_during_revolution_id = readin;
4234 }
4235#ifdef FREECIV_JSON_CONNECTION
4236 field_addr.name = "granary_food_inc";
4237#endif /* FREECIV_JSON_CONNECTION */
4238 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_inc)) {
4239 RECEIVE_PACKET_FIELD_ERROR(granary_food_inc);
4240 }
4241#ifdef FREECIV_JSON_CONNECTION
4242 field_addr.name = "granary_food_ini";
4243#endif /* FREECIV_JSON_CONNECTION */
4244 {
4245 int i;
4246
4247#ifdef FREECIV_JSON_CONNECTION
4248 /* Enter array. */
4249 field_addr.sub_location = plocation_elem_new(0);
4250#endif /* FREECIV_JSON_CONNECTION */
4251
4252 for (i = 0; i < MAX_GRANARY_INIS; i++) {
4253#ifdef FREECIV_JSON_CONNECTION
4254 field_addr.sub_location->number = i;
4255#endif /* FREECIV_JSON_CONNECTION */
4256
4257 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_ini[i])) {
4258 RECEIVE_PACKET_FIELD_ERROR(granary_food_ini);
4259 }
4260 }
4261
4262#ifdef FREECIV_JSON_CONNECTION
4263 /* Exit array. */
4264 FC_FREE(field_addr.sub_location);
4265#endif /* FREECIV_JSON_CONNECTION */
4266 }
4267#ifdef FREECIV_JSON_CONNECTION
4268 field_addr.name = "granary_num_inis";
4269#endif /* FREECIV_JSON_CONNECTION */
4270 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->granary_num_inis)) {
4271 RECEIVE_PACKET_FIELD_ERROR(granary_num_inis);
4272 }
4273#ifdef FREECIV_JSON_CONNECTION
4274 field_addr.name = "great_wonder_owners";
4275#endif /* FREECIV_JSON_CONNECTION */
4276 {
4277 int i;
4278
4279#ifdef FREECIV_JSON_CONNECTION
4280 /* Enter array. */
4281 field_addr.sub_location = plocation_elem_new(0);
4282#endif /* FREECIV_JSON_CONNECTION */
4283
4284 for (i = 0; i < B_LAST; i++) {
4285#ifdef FREECIV_JSON_CONNECTION
4286 field_addr.sub_location->number = i;
4287#endif /* FREECIV_JSON_CONNECTION */
4288
4289 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->great_wonder_owners[i])) {
4290 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners);
4291 }
4292 }
4293
4294#ifdef FREECIV_JSON_CONNECTION
4295 /* Exit array. */
4296 FC_FREE(field_addr.sub_location);
4297#endif /* FREECIV_JSON_CONNECTION */
4298 }
4299#ifdef FREECIV_JSON_CONNECTION
4300 field_addr.name = "happy_cost";
4301#endif /* FREECIV_JSON_CONNECTION */
4302 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->happy_cost)) {
4303 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
4304 }
4305#ifdef FREECIV_JSON_CONNECTION
4306 field_addr.name = "happyborders";
4307#endif /* FREECIV_JSON_CONNECTION */
4308 {
4309 int readin;
4310
4311 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4312 RECEIVE_PACKET_FIELD_ERROR(happyborders);
4313 }
4314 real_packet->happyborders = readin;
4315 }
4316#ifdef FREECIV_JSON_CONNECTION
4317 field_addr.name = "heating";
4318#endif /* FREECIV_JSON_CONNECTION */
4319 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->heating)) {
4321 }
4322#ifdef FREECIV_JSON_CONNECTION
4323 field_addr.name = "illness_base_factor";
4324#endif /* FREECIV_JSON_CONNECTION */
4325 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_base_factor)) {
4326 RECEIVE_PACKET_FIELD_ERROR(illness_base_factor);
4327 }
4328#ifdef FREECIV_JSON_CONNECTION
4329 field_addr.name = "illness_min_size";
4330#endif /* FREECIV_JSON_CONNECTION */
4331 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->illness_min_size)) {
4332 RECEIVE_PACKET_FIELD_ERROR(illness_min_size);
4333 }
4334#ifdef FREECIV_JSON_CONNECTION
4335 field_addr.name = "illness_on";
4336#endif /* FREECIV_JSON_CONNECTION */
4337 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->illness_on)) {
4338 RECEIVE_PACKET_FIELD_ERROR(illness_on);
4339 }
4340#ifdef FREECIV_JSON_CONNECTION
4341 field_addr.name = "illness_pollution_factor";
4342#endif /* FREECIV_JSON_CONNECTION */
4343 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_pollution_factor)) {
4344 RECEIVE_PACKET_FIELD_ERROR(illness_pollution_factor);
4345 }
4346#ifdef FREECIV_JSON_CONNECTION
4347 field_addr.name = "illness_trade_infection";
4348#endif /* FREECIV_JSON_CONNECTION */
4349 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade_infection)) {
4350 RECEIVE_PACKET_FIELD_ERROR(illness_trade_infection);
4351 }
4352#ifdef FREECIV_JSON_CONNECTION
4353 field_addr.name = "init_city_radius_sq";
4354#endif /* FREECIV_JSON_CONNECTION */
4355 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_city_radius_sq)) {
4356 RECEIVE_PACKET_FIELD_ERROR(init_city_radius_sq);
4357 }
4358#ifdef FREECIV_JSON_CONNECTION
4359 field_addr.name = "is_edit_mode";
4360#endif /* FREECIV_JSON_CONNECTION */
4361 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_edit_mode)) {
4362 RECEIVE_PACKET_FIELD_ERROR(is_edit_mode);
4363 }
4364#ifdef FREECIV_JSON_CONNECTION
4365 field_addr.name = "is_new_game";
4366#endif /* FREECIV_JSON_CONNECTION */
4367 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_new_game)) {
4368 RECEIVE_PACKET_FIELD_ERROR(is_new_game);
4369 }
4370#ifdef FREECIV_JSON_CONNECTION
4371 field_addr.name = "killcitizen";
4372#endif /* FREECIV_JSON_CONNECTION */
4373 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->killcitizen)) {
4374 RECEIVE_PACKET_FIELD_ERROR(killcitizen);
4375 }
4376#ifdef FREECIV_JSON_CONNECTION
4377 field_addr.name = "killstack";
4378#endif /* FREECIV_JSON_CONNECTION */
4379 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->killstack)) {
4380 RECEIVE_PACKET_FIELD_ERROR(killstack);
4381 }
4382#ifdef FREECIV_JSON_CONNECTION
4383 field_addr.name = "only_killing_makes_veteran";
4384#endif /* FREECIV_JSON_CONNECTION */
4385 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->only_killing_makes_veteran)) {
4386 RECEIVE_PACKET_FIELD_ERROR(only_killing_makes_veteran);
4387 }
4388#ifdef FREECIV_JSON_CONNECTION
4389 field_addr.name = "only_real_fight_makes_veteran";
4390#endif /* FREECIV_JSON_CONNECTION */
4391 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->only_real_fight_makes_veteran)) {
4392 RECEIVE_PACKET_FIELD_ERROR(only_real_fight_makes_veteran);
4393 }
4394#ifdef FREECIV_JSON_CONNECTION
4395 field_addr.name = "combat_odds_scaled_veterancy";
4396#endif /* FREECIV_JSON_CONNECTION */
4397 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->combat_odds_scaled_veterancy)) {
4398 RECEIVE_PACKET_FIELD_ERROR(combat_odds_scaled_veterancy);
4399 }
4400#ifdef FREECIV_JSON_CONNECTION
4401 field_addr.name = "damage_reduces_bombard_rate";
4402#endif /* FREECIV_JSON_CONNECTION */
4403 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->damage_reduces_bombard_rate)) {
4404 RECEIVE_PACKET_FIELD_ERROR(damage_reduces_bombard_rate);
4405 }
4406#ifdef FREECIV_JSON_CONNECTION
4407 field_addr.name = "low_firepower_badwallattacker";
4408#endif /* FREECIV_JSON_CONNECTION */
4409 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_badwallattacker)) {
4410 RECEIVE_PACKET_FIELD_ERROR(low_firepower_badwallattacker);
4411 }
4412#ifdef FREECIV_JSON_CONNECTION
4413 field_addr.name = "low_firepower_pearl_harbour";
4414#endif /* FREECIV_JSON_CONNECTION */
4415 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_pearl_harbour)) {
4416 RECEIVE_PACKET_FIELD_ERROR(low_firepower_pearl_harbour);
4417 }
4418#ifdef FREECIV_JSON_CONNECTION
4419 field_addr.name = "low_firepower_combat_bonus";
4420#endif /* FREECIV_JSON_CONNECTION */
4421 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_combat_bonus)) {
4422 RECEIVE_PACKET_FIELD_ERROR(low_firepower_combat_bonus);
4423 }
4424#ifdef FREECIV_JSON_CONNECTION
4425 field_addr.name = "low_firepower_nonnat_bombard";
4426#endif /* FREECIV_JSON_CONNECTION */
4427 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_nonnat_bombard)) {
4428 RECEIVE_PACKET_FIELD_ERROR(low_firepower_nonnat_bombard);
4429 }
4430#ifdef FREECIV_JSON_CONNECTION
4431 field_addr.name = "nuke_pop_loss_pct";
4432#endif /* FREECIV_JSON_CONNECTION */
4433 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_pop_loss_pct)) {
4434 RECEIVE_PACKET_FIELD_ERROR(nuke_pop_loss_pct);
4435 }
4436#ifdef FREECIV_JSON_CONNECTION
4437 field_addr.name = "nuke_defender_survival_chance_pct";
4438#endif /* FREECIV_JSON_CONNECTION */
4439 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_defender_survival_chance_pct)) {
4440 RECEIVE_PACKET_FIELD_ERROR(nuke_defender_survival_chance_pct);
4441 }
4442#ifdef FREECIV_JSON_CONNECTION
4443 field_addr.name = "min_city_center_output";
4444#endif /* FREECIV_JSON_CONNECTION */
4445 {
4446 int i;
4447
4448#ifdef FREECIV_JSON_CONNECTION
4449 /* Enter array. */
4450 field_addr.sub_location = plocation_elem_new(0);
4451#endif /* FREECIV_JSON_CONNECTION */
4452
4453 for (i = 0; i < O_LAST; i++) {
4454#ifdef FREECIV_JSON_CONNECTION
4455 field_addr.sub_location->number = i;
4456#endif /* FREECIV_JSON_CONNECTION */
4457
4458 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_city_center_output[i])) {
4459 RECEIVE_PACKET_FIELD_ERROR(min_city_center_output);
4460 }
4461 }
4462
4463#ifdef FREECIV_JSON_CONNECTION
4464 /* Exit array. */
4465 FC_FREE(field_addr.sub_location);
4466#endif /* FREECIV_JSON_CONNECTION */
4467 }
4468#ifdef FREECIV_JSON_CONNECTION
4469 field_addr.name = "muuk_food_wipe";
4470#endif /* FREECIV_JSON_CONNECTION */
4471 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_food_wipe)) {
4472 RECEIVE_PACKET_FIELD_ERROR(muuk_food_wipe);
4473 }
4474#ifdef FREECIV_JSON_CONNECTION
4475 field_addr.name = "muuk_gold_wipe";
4476#endif /* FREECIV_JSON_CONNECTION */
4477 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_gold_wipe)) {
4478 RECEIVE_PACKET_FIELD_ERROR(muuk_gold_wipe);
4479 }
4480#ifdef FREECIV_JSON_CONNECTION
4481 field_addr.name = "muuk_shield_wipe";
4482#endif /* FREECIV_JSON_CONNECTION */
4483 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->muuk_shield_wipe)) {
4484 RECEIVE_PACKET_FIELD_ERROR(muuk_shield_wipe);
4485 }
4486#ifdef FREECIV_JSON_CONNECTION
4487 field_addr.name = "notradesize";
4488#endif /* FREECIV_JSON_CONNECTION */
4489 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->notradesize)) {
4490 RECEIVE_PACKET_FIELD_ERROR(notradesize);
4491 }
4492#ifdef FREECIV_JSON_CONNECTION
4493 field_addr.name = "nuclear_winter";
4494#endif /* FREECIV_JSON_CONNECTION */
4495 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->nuclear_winter)) {
4497 }
4498#ifdef FREECIV_JSON_CONNECTION
4499 field_addr.name = "nuclearwinter";
4500#endif /* FREECIV_JSON_CONNECTION */
4501 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->nuclearwinter)) {
4502 RECEIVE_PACKET_FIELD_ERROR(nuclearwinter);
4503 }
4504#ifdef FREECIV_JSON_CONNECTION
4505 field_addr.name = "phase";
4506#endif /* FREECIV_JSON_CONNECTION */
4507 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
4509 }
4510#ifdef FREECIV_JSON_CONNECTION
4511 field_addr.name = "phase_mode";
4512#endif /* FREECIV_JSON_CONNECTION */
4513 {
4514 int readin;
4515
4516 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4517 RECEIVE_PACKET_FIELD_ERROR(phase_mode);
4518 }
4519 real_packet->phase_mode = readin;
4520 }
4521#ifdef FREECIV_JSON_CONNECTION
4522 field_addr.name = "pillage_select";
4523#endif /* FREECIV_JSON_CONNECTION */
4524 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->pillage_select)) {
4525 RECEIVE_PACKET_FIELD_ERROR(pillage_select);
4526 }
4527#ifdef FREECIV_JSON_CONNECTION
4528 field_addr.name = "steal_maps_reveals_all_cities";
4529#endif /* FREECIV_JSON_CONNECTION */
4530 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->steal_maps_reveals_all_cities)) {
4531 RECEIVE_PACKET_FIELD_ERROR(steal_maps_reveals_all_cities);
4532 }
4533#ifdef FREECIV_JSON_CONNECTION
4534 field_addr.name = "poison_empties_food_stock";
4535#endif /* FREECIV_JSON_CONNECTION */
4536 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->poison_empties_food_stock)) {
4537 RECEIVE_PACKET_FIELD_ERROR(poison_empties_food_stock);
4538 }
4539#ifdef FREECIV_JSON_CONNECTION
4540 field_addr.name = "tech_steal_allow_holes";
4541#endif /* FREECIV_JSON_CONNECTION */
4542 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_steal_allow_holes)) {
4543 RECEIVE_PACKET_FIELD_ERROR(tech_steal_allow_holes);
4544 }
4545#ifdef FREECIV_JSON_CONNECTION
4546 field_addr.name = "tech_trade_allow_holes";
4547#endif /* FREECIV_JSON_CONNECTION */
4548 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_trade_allow_holes)) {
4549 RECEIVE_PACKET_FIELD_ERROR(tech_trade_allow_holes);
4550 }
4551#ifdef FREECIV_JSON_CONNECTION
4552 field_addr.name = "tech_trade_loss_allow_holes";
4553#endif /* FREECIV_JSON_CONNECTION */
4554 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_trade_loss_allow_holes)) {
4555 RECEIVE_PACKET_FIELD_ERROR(tech_trade_loss_allow_holes);
4556 }
4557#ifdef FREECIV_JSON_CONNECTION
4558 field_addr.name = "tech_parasite_allow_holes";
4559#endif /* FREECIV_JSON_CONNECTION */
4560 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_parasite_allow_holes)) {
4561 RECEIVE_PACKET_FIELD_ERROR(tech_parasite_allow_holes);
4562 }
4563#ifdef FREECIV_JSON_CONNECTION
4564 field_addr.name = "tech_loss_allow_holes";
4565#endif /* FREECIV_JSON_CONNECTION */
4566 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tech_loss_allow_holes)) {
4567 RECEIVE_PACKET_FIELD_ERROR(tech_loss_allow_holes);
4568 }
4569#ifdef FREECIV_JSON_CONNECTION
4570 field_addr.name = "rapturedelay";
4571#endif /* FREECIV_JSON_CONNECTION */
4572 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapturedelay)) {
4573 RECEIVE_PACKET_FIELD_ERROR(rapturedelay);
4574 }
4575#ifdef FREECIV_JSON_CONNECTION
4576 field_addr.name = "disasters";
4577#endif /* FREECIV_JSON_CONNECTION */
4578 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disasters)) {
4580 }
4581#ifdef FREECIV_JSON_CONNECTION
4582 field_addr.name = "restrictinfra";
4583#endif /* FREECIV_JSON_CONNECTION */
4584 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->restrictinfra)) {
4585 RECEIVE_PACKET_FIELD_ERROR(restrictinfra);
4586 }
4587#ifdef FREECIV_JSON_CONNECTION
4588 field_addr.name = "unreachable_protects";
4589#endif /* FREECIV_JSON_CONNECTION */
4590 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unreachable_protects)) {
4591 RECEIVE_PACKET_FIELD_ERROR(unreachable_protects);
4592 }
4593#ifdef FREECIV_JSON_CONNECTION
4594 field_addr.name = "sciencebox";
4595#endif /* FREECIV_JSON_CONNECTION */
4596 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->sciencebox)) {
4597 RECEIVE_PACKET_FIELD_ERROR(sciencebox);
4598 }
4599#ifdef FREECIV_JSON_CONNECTION
4600 field_addr.name = "shieldbox";
4601#endif /* FREECIV_JSON_CONNECTION */
4602 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->shieldbox)) {
4603 RECEIVE_PACKET_FIELD_ERROR(shieldbox);
4604 }
4605#ifdef FREECIV_JSON_CONNECTION
4606 field_addr.name = "skill_level";
4607#endif /* FREECIV_JSON_CONNECTION */
4608 {
4609 int readin;
4610
4611 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4612 RECEIVE_PACKET_FIELD_ERROR(skill_level);
4613 }
4614 real_packet->skill_level = readin;
4615 }
4616#ifdef FREECIV_JSON_CONNECTION
4617 field_addr.name = "victory_conditions";
4618#endif /* FREECIV_JSON_CONNECTION */
4619 {
4620 int readin;
4621
4622 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4623 RECEIVE_PACKET_FIELD_ERROR(victory_conditions);
4624 }
4625 real_packet->victory_conditions = readin;
4626 }
4627#ifdef FREECIV_JSON_CONNECTION
4628 field_addr.name = "team_pooled_research";
4629#endif /* FREECIV_JSON_CONNECTION */
4630 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->team_pooled_research)) {
4631 RECEIVE_PACKET_FIELD_ERROR(team_pooled_research);
4632 }
4633#ifdef FREECIV_JSON_CONNECTION
4634 field_addr.name = "tech";
4635#endif /* FREECIV_JSON_CONNECTION */
4636 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech)) {
4638 }
4639#ifdef FREECIV_JSON_CONNECTION
4640 field_addr.name = "tech_cost_style";
4641#endif /* FREECIV_JSON_CONNECTION */
4642 {
4643 int readin;
4644
4645 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4646 RECEIVE_PACKET_FIELD_ERROR(tech_cost_style);
4647 }
4648 real_packet->tech_cost_style = readin;
4649 }
4650#ifdef FREECIV_JSON_CONNECTION
4651 field_addr.name = "tech_leakage";
4652#endif /* FREECIV_JSON_CONNECTION */
4653 {
4654 int readin;
4655
4656 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4657 RECEIVE_PACKET_FIELD_ERROR(tech_leakage);
4658 }
4659 real_packet->tech_leakage = readin;
4660 }
4661#ifdef FREECIV_JSON_CONNECTION
4662 field_addr.name = "tech_upkeep_divider";
4663#endif /* FREECIV_JSON_CONNECTION */
4664 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_divider)) {
4665 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_divider);
4666 }
4667#ifdef FREECIV_JSON_CONNECTION
4668 field_addr.name = "tech_upkeep_style";
4669#endif /* FREECIV_JSON_CONNECTION */
4670 {
4671 int readin;
4672
4673 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4674 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_style);
4675 }
4676 real_packet->tech_upkeep_style = readin;
4677 }
4678#ifdef FREECIV_JSON_CONNECTION
4679 field_addr.name = "techloss_forgiveness";
4680#endif /* FREECIV_JSON_CONNECTION */
4681 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->techloss_forgiveness)) {
4682 RECEIVE_PACKET_FIELD_ERROR(techloss_forgiveness);
4683 }
4684#ifdef FREECIV_JSON_CONNECTION
4685 field_addr.name = "free_tech_method";
4686#endif /* FREECIV_JSON_CONNECTION */
4687 {
4688 int readin;
4689
4690 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4691 RECEIVE_PACKET_FIELD_ERROR(free_tech_method);
4692 }
4693 real_packet->free_tech_method = readin;
4694 }
4695#ifdef FREECIV_JSON_CONNECTION
4696 field_addr.name = "gameloss_style";
4697#endif /* FREECIV_JSON_CONNECTION */
4698 {
4699 int readin;
4700
4701 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4702 RECEIVE_PACKET_FIELD_ERROR(gameloss_style);
4703 }
4704 real_packet->gameloss_style = readin;
4705 }
4706#ifdef FREECIV_JSON_CONNECTION
4707 field_addr.name = "timeout";
4708#endif /* FREECIV_JSON_CONNECTION */
4709 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->timeout)) {
4711 }
4712#ifdef FREECIV_JSON_CONNECTION
4713 field_addr.name = "first_timeout";
4714#endif /* FREECIV_JSON_CONNECTION */
4715 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->first_timeout)) {
4716 RECEIVE_PACKET_FIELD_ERROR(first_timeout);
4717 }
4718#ifdef FREECIV_JSON_CONNECTION
4719 field_addr.name = "tired_attack";
4720#endif /* FREECIV_JSON_CONNECTION */
4721 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->tired_attack)) {
4722 RECEIVE_PACKET_FIELD_ERROR(tired_attack);
4723 }
4724#ifdef FREECIV_JSON_CONNECTION
4725 field_addr.name = "trademindist";
4726#endif /* FREECIV_JSON_CONNECTION */
4727 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trademindist)) {
4728 RECEIVE_PACKET_FIELD_ERROR(trademindist);
4729 }
4730#ifdef FREECIV_JSON_CONNECTION
4731 field_addr.name = "trade_revenue_style";
4732#endif /* FREECIV_JSON_CONNECTION */
4733 {
4734 int readin;
4735
4736 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4737 RECEIVE_PACKET_FIELD_ERROR(trade_revenue_style);
4738 }
4739 real_packet->trade_revenue_style = readin;
4740 }
4741#ifdef FREECIV_JSON_CONNECTION
4742 field_addr.name = "trading_city";
4743#endif /* FREECIV_JSON_CONNECTION */
4744 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_city)) {
4745 RECEIVE_PACKET_FIELD_ERROR(trading_city);
4746 }
4747#ifdef FREECIV_JSON_CONNECTION
4748 field_addr.name = "trading_gold";
4749#endif /* FREECIV_JSON_CONNECTION */
4750 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_gold)) {
4751 RECEIVE_PACKET_FIELD_ERROR(trading_gold);
4752 }
4753#ifdef FREECIV_JSON_CONNECTION
4754 field_addr.name = "trading_tech";
4755#endif /* FREECIV_JSON_CONNECTION */
4756 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->trading_tech)) {
4757 RECEIVE_PACKET_FIELD_ERROR(trading_tech);
4758 }
4759#ifdef FREECIV_JSON_CONNECTION
4760 field_addr.name = "turn";
4761#endif /* FREECIV_JSON_CONNECTION */
4762 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
4764 }
4765#ifdef FREECIV_JSON_CONNECTION
4766 field_addr.name = "warminglevel";
4767#endif /* FREECIV_JSON_CONNECTION */
4768 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->warminglevel)) {
4769 RECEIVE_PACKET_FIELD_ERROR(warminglevel);
4770 }
4771#ifdef FREECIV_JSON_CONNECTION
4772 field_addr.name = "year";
4773#endif /* FREECIV_JSON_CONNECTION */
4774 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
4776 }
4777#ifdef FREECIV_JSON_CONNECTION
4778 field_addr.name = "year_0_hack";
4779#endif /* FREECIV_JSON_CONNECTION */
4780 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->year_0_hack)) {
4781 RECEIVE_PACKET_FIELD_ERROR(year_0_hack);
4782 }
4783#ifdef FREECIV_JSON_CONNECTION
4784 field_addr.name = "top_cities_count";
4785#endif /* FREECIV_JSON_CONNECTION */
4786 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->top_cities_count)) {
4787 RECEIVE_PACKET_FIELD_ERROR(top_cities_count);
4788 }
4789#ifdef FREECIV_JSON_CONNECTION
4790 field_addr.name = "fragment_count";
4791#endif /* FREECIV_JSON_CONNECTION */
4792 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragment_count)) {
4793 RECEIVE_PACKET_FIELD_ERROR(fragment_count);
4794 }
4795#ifdef FREECIV_JSON_CONNECTION
4796 field_addr.name = "civil_war_enabled";
4797#endif /* FREECIV_JSON_CONNECTION */
4798 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->civil_war_enabled)) {
4799 RECEIVE_PACKET_FIELD_ERROR(civil_war_enabled);
4800 }
4801#ifdef FREECIV_JSON_CONNECTION
4802 field_addr.name = "civil_war_bonus_celebrating";
4803#endif /* FREECIV_JSON_CONNECTION */
4804 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->civil_war_bonus_celebrating)) {
4805 RECEIVE_PACKET_FIELD_ERROR(civil_war_bonus_celebrating);
4806 }
4807#ifdef FREECIV_JSON_CONNECTION
4808 field_addr.name = "civil_war_bonus_unhappy";
4809#endif /* FREECIV_JSON_CONNECTION */
4810 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->civil_war_bonus_unhappy)) {
4811 RECEIVE_PACKET_FIELD_ERROR(civil_war_bonus_unhappy);
4812 }
4813#ifdef FREECIV_JSON_CONNECTION
4814 field_addr.name = "granularity";
4815#endif /* FREECIV_JSON_CONNECTION */
4816 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granularity)) {
4817 RECEIVE_PACKET_FIELD_ERROR(granularity);
4818 }
4819#ifdef FREECIV_JSON_CONNECTION
4820 field_addr.name = "small_wonder_visibility";
4821#endif /* FREECIV_JSON_CONNECTION */
4822 {
4823 int readin;
4824
4825 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4826 RECEIVE_PACKET_FIELD_ERROR(small_wonder_visibility);
4827 }
4828 real_packet->small_wonder_visibility = readin;
4829 }
4830#endif
4831 log_packet_detailed("packet_game_info_100: got info about ()");
4832
4833#ifdef FREECIV_DELTA_PROTOCOL
4834 if (NULL == *hash) {
4836 NULL, NULL, NULL, free);
4837 }
4838
4839 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
4840 *real_packet = *old;
4841 } else {
4842 log_packet_detailed(" no old info");
4843 memset(real_packet, 0, sizeof(*real_packet));
4844 }
4845
4846 if (BV_ISSET(fields, 0)) {
4847 log_packet_detailed(" got field 'add_to_size_limit'");
4848#ifdef FREECIV_JSON_CONNECTION
4849 field_addr.name = "add_to_size_limit";
4850#endif /* FREECIV_JSON_CONNECTION */
4851 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->add_to_size_limit)) {
4852 RECEIVE_PACKET_FIELD_ERROR(add_to_size_limit);
4853 }
4854 }
4855 if (BV_ISSET(fields, 1)) {
4856 log_packet_detailed(" got field 'aifill'");
4857#ifdef FREECIV_JSON_CONNECTION
4858 field_addr.name = "aifill";
4859#endif /* FREECIV_JSON_CONNECTION */
4860 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->aifill)) {
4862 }
4863 }
4864 if (BV_ISSET(fields, 2)) {
4865 log_packet_detailed(" got field 'persistent_ready'");
4866#ifdef FREECIV_JSON_CONNECTION
4867 field_addr.name = "persistent_ready";
4868#endif /* FREECIV_JSON_CONNECTION */
4869 {
4870 int readin;
4871
4872 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4873 RECEIVE_PACKET_FIELD_ERROR(persistent_ready);
4874 }
4875 real_packet->persistent_ready = readin;
4876 }
4877 }
4878 if (BV_ISSET(fields, 3)) {
4879 log_packet_detailed(" got field 'airlifting_style'");
4880#ifdef FREECIV_JSON_CONNECTION
4881 field_addr.name = "airlifting_style";
4882#endif /* FREECIV_JSON_CONNECTION */
4883 {
4884 int readin;
4885
4886 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4887 RECEIVE_PACKET_FIELD_ERROR(airlifting_style);
4888 }
4889 real_packet->airlifting_style = readin;
4890 }
4891 }
4892 real_packet->airlift_from_always_enabled = BV_ISSET(fields, 4);
4893 real_packet->airlift_to_always_enabled = BV_ISSET(fields, 5);
4894 if (BV_ISSET(fields, 6)) {
4895 log_packet_detailed(" got field 'angrycitizen'");
4896#ifdef FREECIV_JSON_CONNECTION
4897 field_addr.name = "angrycitizen";
4898#endif /* FREECIV_JSON_CONNECTION */
4899 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->angrycitizen)) {
4900 RECEIVE_PACKET_FIELD_ERROR(angrycitizen);
4901 }
4902 }
4903 if (BV_ISSET(fields, 7)) {
4904 log_packet_detailed(" got field 'base_pollution'");
4905#ifdef FREECIV_JSON_CONNECTION
4906 field_addr.name = "base_pollution";
4907#endif /* FREECIV_JSON_CONNECTION */
4908 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->base_pollution)) {
4909 RECEIVE_PACKET_FIELD_ERROR(base_pollution);
4910 }
4911 }
4912 if (BV_ISSET(fields, 8)) {
4913 log_packet_detailed(" got field 'base_tech_cost'");
4914#ifdef FREECIV_JSON_CONNECTION
4915 field_addr.name = "base_tech_cost";
4916#endif /* FREECIV_JSON_CONNECTION */
4917 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->base_tech_cost)) {
4918 RECEIVE_PACKET_FIELD_ERROR(base_tech_cost);
4919 }
4920 }
4921 if (BV_ISSET(fields, 9)) {
4922 log_packet_detailed(" got field 'min_tech_cost'");
4923#ifdef FREECIV_JSON_CONNECTION
4924 field_addr.name = "min_tech_cost";
4925#endif /* FREECIV_JSON_CONNECTION */
4926 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_tech_cost)) {
4927 RECEIVE_PACKET_FIELD_ERROR(min_tech_cost);
4928 }
4929 }
4930 if (BV_ISSET(fields, 10)) {
4931 log_packet_detailed(" got field 'tech_leak_pct'");
4932#ifdef FREECIV_JSON_CONNECTION
4933 field_addr.name = "tech_leak_pct";
4934#endif /* FREECIV_JSON_CONNECTION */
4935 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tech_leak_pct)) {
4936 RECEIVE_PACKET_FIELD_ERROR(tech_leak_pct);
4937 }
4938 }
4939 if (BV_ISSET(fields, 11)) {
4940 log_packet_detailed(" got field 'border_city_radius_sq'");
4941#ifdef FREECIV_JSON_CONNECTION
4942 field_addr.name = "border_city_radius_sq";
4943#endif /* FREECIV_JSON_CONNECTION */
4944 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->border_city_radius_sq)) {
4945 RECEIVE_PACKET_FIELD_ERROR(border_city_radius_sq);
4946 }
4947 }
4948 if (BV_ISSET(fields, 12)) {
4949 log_packet_detailed(" got field 'border_size_effect'");
4950#ifdef FREECIV_JSON_CONNECTION
4951 field_addr.name = "border_size_effect";
4952#endif /* FREECIV_JSON_CONNECTION */
4953 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->border_size_effect)) {
4954 RECEIVE_PACKET_FIELD_ERROR(border_size_effect);
4955 }
4956 }
4957 if (BV_ISSET(fields, 13)) {
4958 log_packet_detailed(" got field 'border_city_permanent_radius_sq'");
4959#ifdef FREECIV_JSON_CONNECTION
4960 field_addr.name = "border_city_permanent_radius_sq";
4961#endif /* FREECIV_JSON_CONNECTION */
4962 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->border_city_permanent_radius_sq)) {
4963 RECEIVE_PACKET_FIELD_ERROR(border_city_permanent_radius_sq);
4964 }
4965 }
4966 if (BV_ISSET(fields, 14)) {
4967 log_packet_detailed(" got field 'borders'");
4968#ifdef FREECIV_JSON_CONNECTION
4969 field_addr.name = "borders";
4970#endif /* FREECIV_JSON_CONNECTION */
4971 {
4972 int readin;
4973
4974 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4976 }
4977 real_packet->borders = readin;
4978 }
4979 }
4980 if (BV_ISSET(fields, 15)) {
4981 log_packet_detailed(" got field 'base_bribe_cost'");
4982#ifdef FREECIV_JSON_CONNECTION
4983 field_addr.name = "base_bribe_cost";
4984#endif /* FREECIV_JSON_CONNECTION */
4985 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->base_bribe_cost)) {
4986 RECEIVE_PACKET_FIELD_ERROR(base_bribe_cost);
4987 }
4988 }
4989 if (BV_ISSET(fields, 16)) {
4990 log_packet_detailed(" got field 'caravan_bonus_style'");
4991#ifdef FREECIV_JSON_CONNECTION
4992 field_addr.name = "caravan_bonus_style";
4993#endif /* FREECIV_JSON_CONNECTION */
4994 {
4995 int readin;
4996
4997 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
4998 RECEIVE_PACKET_FIELD_ERROR(caravan_bonus_style);
4999 }
5000 real_packet->caravan_bonus_style = readin;
5001 }
5002 }
5003 if (BV_ISSET(fields, 17)) {
5004 log_packet_detailed(" got field 'culture_vic_points'");
5005#ifdef FREECIV_JSON_CONNECTION
5006 field_addr.name = "culture_vic_points";
5007#endif /* FREECIV_JSON_CONNECTION */
5008 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture_vic_points)) {
5009 RECEIVE_PACKET_FIELD_ERROR(culture_vic_points);
5010 }
5011 }
5012 if (BV_ISSET(fields, 18)) {
5013 log_packet_detailed(" got field 'culture_vic_lead'");
5014#ifdef FREECIV_JSON_CONNECTION
5015 field_addr.name = "culture_vic_lead";
5016#endif /* FREECIV_JSON_CONNECTION */
5017 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_vic_lead)) {
5018 RECEIVE_PACKET_FIELD_ERROR(culture_vic_lead);
5019 }
5020 }
5021 if (BV_ISSET(fields, 19)) {
5022 log_packet_detailed(" got field 'culture_migration_pml'");
5023#ifdef FREECIV_JSON_CONNECTION
5024 field_addr.name = "culture_migration_pml";
5025#endif /* FREECIV_JSON_CONNECTION */
5026 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->culture_migration_pml)) {
5028 }
5029 }
5030 if (BV_ISSET(fields, 20)) {
5031 log_packet_detailed(" got field 'history_interest_pml'");
5032#ifdef FREECIV_JSON_CONNECTION
5033 field_addr.name = "history_interest_pml";
5034#endif /* FREECIV_JSON_CONNECTION */
5035 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->history_interest_pml)) {
5036 RECEIVE_PACKET_FIELD_ERROR(history_interest_pml);
5037 }
5038 }
5039 if (BV_ISSET(fields, 21)) {
5040 log_packet_detailed(" got field 'celebratesize'");
5041#ifdef FREECIV_JSON_CONNECTION
5042 field_addr.name = "celebratesize";
5043#endif /* FREECIV_JSON_CONNECTION */
5044 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->celebratesize)) {
5045 RECEIVE_PACKET_FIELD_ERROR(celebratesize);
5046 }
5047 }
5048 real_packet->changable_tax = BV_ISSET(fields, 22);
5049 if (BV_ISSET(fields, 23)) {
5050 log_packet_detailed(" got field 'pop_report_zeroes'");
5051#ifdef FREECIV_JSON_CONNECTION
5052 field_addr.name = "pop_report_zeroes";
5053#endif /* FREECIV_JSON_CONNECTION */
5054 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_report_zeroes)) {
5055 RECEIVE_PACKET_FIELD_ERROR(pop_report_zeroes);
5056 }
5057 }
5058 real_packet->citizen_nationality = BV_ISSET(fields, 24);
5059 real_packet->unit_builders_nationality = BV_ISSET(fields, 25);
5060 if (BV_ISSET(fields, 26)) {
5061 log_packet_detailed(" got field 'citizen_convert_speed'");
5062#ifdef FREECIV_JSON_CONNECTION
5063 field_addr.name = "citizen_convert_speed";
5064#endif /* FREECIV_JSON_CONNECTION */
5065 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->citizen_convert_speed)) {
5066 RECEIVE_PACKET_FIELD_ERROR(citizen_convert_speed);
5067 }
5068 }
5069 if (BV_ISSET(fields, 27)) {
5070 log_packet_detailed(" got field 'conquest_convert_pct'");
5071#ifdef FREECIV_JSON_CONNECTION
5072 field_addr.name = "conquest_convert_pct";
5073#endif /* FREECIV_JSON_CONNECTION */
5074 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->conquest_convert_pct)) {
5075 RECEIVE_PACKET_FIELD_ERROR(conquest_convert_pct);
5076 }
5077 }
5078 if (BV_ISSET(fields, 28)) {
5079 log_packet_detailed(" got field 'citizen_partisans_pct'");
5080#ifdef FREECIV_JSON_CONNECTION
5081 field_addr.name = "citizen_partisans_pct";
5082#endif /* FREECIV_JSON_CONNECTION */
5083 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citizen_partisans_pct)) {
5084 RECEIVE_PACKET_FIELD_ERROR(citizen_partisans_pct);
5085 }
5086 }
5087 if (BV_ISSET(fields, 29)) {
5088 log_packet_detailed(" got field 'citymindist'");
5089#ifdef FREECIV_JSON_CONNECTION
5090 field_addr.name = "citymindist";
5091#endif /* FREECIV_JSON_CONNECTION */
5092 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->citymindist)) {
5093 RECEIVE_PACKET_FIELD_ERROR(citymindist);
5094 }
5095 }
5096 if (BV_ISSET(fields, 30)) {
5097 log_packet_detailed(" got field 'cooling'");
5098#ifdef FREECIV_JSON_CONNECTION
5099 field_addr.name = "cooling";
5100#endif /* FREECIV_JSON_CONNECTION */
5101 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cooling)) {
5103 }
5104 }
5105 if (BV_ISSET(fields, 31)) {
5106 log_packet_detailed(" got field 'coolinglevel'");
5107#ifdef FREECIV_JSON_CONNECTION
5108 field_addr.name = "coolinglevel";
5109#endif /* FREECIV_JSON_CONNECTION */
5110 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->coolinglevel)) {
5111 RECEIVE_PACKET_FIELD_ERROR(coolinglevel);
5112 }
5113 }
5114 if (BV_ISSET(fields, 32)) {
5115 log_packet_detailed(" got field 'diplchance_initial_odds'");
5116#ifdef FREECIV_JSON_CONNECTION
5117 field_addr.name = "diplchance_initial_odds";
5118#endif /* FREECIV_JSON_CONNECTION */
5119 if (!DIO_BV_GET(&din, &field_addr, real_packet->diplchance_initial_odds)) {
5120 RECEIVE_PACKET_FIELD_ERROR(diplchance_initial_odds);
5121 }
5122 }
5123 if (BV_ISSET(fields, 33)) {
5124 log_packet_detailed(" got field 'diplomacy'");
5125#ifdef FREECIV_JSON_CONNECTION
5126 field_addr.name = "diplomacy";
5127#endif /* FREECIV_JSON_CONNECTION */
5128 {
5129 int readin;
5130
5131 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5132 RECEIVE_PACKET_FIELD_ERROR(diplomacy);
5133 }
5134 real_packet->diplomacy = readin;
5135 }
5136 }
5137 real_packet->fogofwar = BV_ISSET(fields, 34);
5138 if (BV_ISSET(fields, 35)) {
5139 log_packet_detailed(" got field 'food_cost'");
5140#ifdef FREECIV_JSON_CONNECTION
5141 field_addr.name = "food_cost";
5142#endif /* FREECIV_JSON_CONNECTION */
5143 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_cost)) {
5144 RECEIVE_PACKET_FIELD_ERROR(food_cost);
5145 }
5146 }
5147 if (BV_ISSET(fields, 36)) {
5148 log_packet_detailed(" got field 'foodbox'");
5149#ifdef FREECIV_JSON_CONNECTION
5150 field_addr.name = "foodbox";
5151#endif /* FREECIV_JSON_CONNECTION */
5152 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->foodbox)) {
5154 }
5155 }
5156 if (BV_ISSET(fields, 37)) {
5157 log_packet_detailed(" got field 'forced_gold'");
5158#ifdef FREECIV_JSON_CONNECTION
5159 field_addr.name = "forced_gold";
5160#endif /* FREECIV_JSON_CONNECTION */
5161 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_gold)) {
5162 RECEIVE_PACKET_FIELD_ERROR(forced_gold);
5163 }
5164 }
5165 if (BV_ISSET(fields, 38)) {
5166 log_packet_detailed(" got field 'forced_luxury'");
5167#ifdef FREECIV_JSON_CONNECTION
5168 field_addr.name = "forced_luxury";
5169#endif /* FREECIV_JSON_CONNECTION */
5170 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_luxury)) {
5171 RECEIVE_PACKET_FIELD_ERROR(forced_luxury);
5172 }
5173 }
5174 if (BV_ISSET(fields, 39)) {
5175 log_packet_detailed(" got field 'forced_science'");
5176#ifdef FREECIV_JSON_CONNECTION
5177 field_addr.name = "forced_science";
5178#endif /* FREECIV_JSON_CONNECTION */
5179 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->forced_science)) {
5180 RECEIVE_PACKET_FIELD_ERROR(forced_science);
5181 }
5182 }
5183 if (BV_ISSET(fields, 40)) {
5184 log_packet_detailed(" got field 'fulltradesize'");
5185#ifdef FREECIV_JSON_CONNECTION
5186 field_addr.name = "fulltradesize";
5187#endif /* FREECIV_JSON_CONNECTION */
5188 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fulltradesize)) {
5189 RECEIVE_PACKET_FIELD_ERROR(fulltradesize);
5190 }
5191 }
5192 if (BV_ISSET(fields, 41)) {
5193 log_packet_detailed(" got field 'trade_world_rel_pct'");
5194#ifdef FREECIV_JSON_CONNECTION
5195 field_addr.name = "trade_world_rel_pct";
5196#endif /* FREECIV_JSON_CONNECTION */
5197 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_world_rel_pct)) {
5198 RECEIVE_PACKET_FIELD_ERROR(trade_world_rel_pct);
5199 }
5200 }
5201 if (BV_ISSET(fields, 42)) {
5202 log_packet_detailed(" got field 'min_trade_route_val'");
5203#ifdef FREECIV_JSON_CONNECTION
5204 field_addr.name = "min_trade_route_val";
5205#endif /* FREECIV_JSON_CONNECTION */
5206 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_trade_route_val)) {
5207 RECEIVE_PACKET_FIELD_ERROR(min_trade_route_val);
5208 }
5209 }
5210 real_packet->reveal_trade_partner = BV_ISSET(fields, 43);
5211 if (BV_ISSET(fields, 44)) {
5212 log_packet_detailed(" got field 'goods_selection'");
5213#ifdef FREECIV_JSON_CONNECTION
5214 field_addr.name = "goods_selection";
5215#endif /* FREECIV_JSON_CONNECTION */
5216 {
5217 int readin;
5218
5219 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5220 RECEIVE_PACKET_FIELD_ERROR(goods_selection);
5221 }
5222 real_packet->goods_selection = readin;
5223 }
5224 }
5225 if (BV_ISSET(fields, 45)) {
5226 log_packet_detailed(" got field 'global_advance_count'");
5227#ifdef FREECIV_JSON_CONNECTION
5228 field_addr.name = "global_advance_count";
5229#endif /* FREECIV_JSON_CONNECTION */
5230 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_advance_count)) {
5231 RECEIVE_PACKET_FIELD_ERROR(global_advance_count);
5232 }
5233 }
5234 if (BV_ISSET(fields, 46)) {
5235 log_packet_detailed(" got field 'global_advances'");
5236#ifdef FREECIV_JSON_CONNECTION
5237 field_addr.name = "global_advances";
5238#endif /* FREECIV_JSON_CONNECTION */
5240#ifdef FREECIV_JSON_CONNECTION
5241 /* Enter array (start at initial element). */
5242 field_addr.sub_location = plocation_elem_new(0);
5243 /* Enter diff array element (start at the index address). */
5244 field_addr.sub_location->sub_location = plocation_elem_new(0);
5245#endif /* FREECIV_JSON_CONNECTION */
5246
5247 while (TRUE) {
5248 int i;
5249
5250 /* Read next index */
5251#if A_LAST <= MAX_UINT8
5252 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
5253#else
5254 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
5255#endif
5256 RECEIVE_PACKET_FIELD_ERROR(global_advances);
5257 }
5258
5259 if (i == A_LAST) {
5260 break;
5261 }
5262 if (i > A_LAST) {
5263 RECEIVE_PACKET_FIELD_ERROR(global_advances,
5264 ": unexpected value %d "
5265 "(> A_LAST) in array diff",
5266 i);
5267 }
5268
5269#ifdef FREECIV_JSON_CONNECTION
5270 /* Content address. */
5271 field_addr.sub_location->sub_location->number = 1;
5272#endif /* FREECIV_JSON_CONNECTION */
5273
5274 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->global_advances[i])) {
5275 RECEIVE_PACKET_FIELD_ERROR(global_advances);
5276 }
5277
5278#ifdef FREECIV_JSON_CONNECTION
5279 /* Move to the next diff array element. */
5280 field_addr.sub_location->number++;
5281 /* Back to the index address. */
5282 field_addr.sub_location->sub_location->number = 0;
5283#endif /* FREECIV_JSON_CONNECTION */
5284 }
5285
5286#ifdef FREECIV_JSON_CONNECTION
5287 /* Exit diff array element. */
5288 FC_FREE(field_addr.sub_location->sub_location);
5289 /* Exit array. */
5290 FC_FREE(field_addr.sub_location);
5291#endif /* FREECIV_JSON_CONNECTION */
5292 }
5293 real_packet->global_warming = BV_ISSET(fields, 47);
5294 if (BV_ISSET(fields, 48)) {
5295 log_packet_detailed(" got field 'globalwarming'");
5296#ifdef FREECIV_JSON_CONNECTION
5297 field_addr.name = "globalwarming";
5298#endif /* FREECIV_JSON_CONNECTION */
5299 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->globalwarming)) {
5300 RECEIVE_PACKET_FIELD_ERROR(globalwarming);
5301 }
5302 }
5303 if (BV_ISSET(fields, 49)) {
5304 log_packet_detailed(" got field 'gold'");
5305#ifdef FREECIV_JSON_CONNECTION
5306 field_addr.name = "gold";
5307#endif /* FREECIV_JSON_CONNECTION */
5308 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
5310 }
5311 }
5312 if (BV_ISSET(fields, 50)) {
5313 log_packet_detailed(" got field 'gold_upkeep_style'");
5314#ifdef FREECIV_JSON_CONNECTION
5315 field_addr.name = "gold_upkeep_style";
5316#endif /* FREECIV_JSON_CONNECTION */
5317 {
5318 int readin;
5319
5320 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5321 RECEIVE_PACKET_FIELD_ERROR(gold_upkeep_style);
5322 }
5323 real_packet->gold_upkeep_style = readin;
5324 }
5325 }
5326 real_packet->homeless_gold_upkeep = BV_ISSET(fields, 51);
5327 if (BV_ISSET(fields, 52)) {
5328 log_packet_detailed(" got field 'infrapoints'");
5329#ifdef FREECIV_JSON_CONNECTION
5330 field_addr.name = "infrapoints";
5331#endif /* FREECIV_JSON_CONNECTION */
5332 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
5333 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
5334 }
5335 }
5336 if (BV_ISSET(fields, 53)) {
5337 log_packet_detailed(" got field 'revolentype'");
5338#ifdef FREECIV_JSON_CONNECTION
5339 field_addr.name = "revolentype";
5340#endif /* FREECIV_JSON_CONNECTION */
5341 {
5342 int readin;
5343
5344 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5345 RECEIVE_PACKET_FIELD_ERROR(revolentype);
5346 }
5347 real_packet->revolentype = readin;
5348 }
5349 }
5350 if (BV_ISSET(fields, 54)) {
5351 log_packet_detailed(" got field 'default_government_id'");
5352#ifdef FREECIV_JSON_CONNECTION
5353 field_addr.name = "default_government_id";
5354#endif /* FREECIV_JSON_CONNECTION */
5355 {
5356 int readin;
5357
5358 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
5359 RECEIVE_PACKET_FIELD_ERROR(default_government_id);
5360 }
5361 real_packet->default_government_id = readin;
5362 }
5363 }
5364 if (BV_ISSET(fields, 55)) {
5365 log_packet_detailed(" got field 'government_during_revolution_id'");
5366#ifdef FREECIV_JSON_CONNECTION
5367 field_addr.name = "government_during_revolution_id";
5368#endif /* FREECIV_JSON_CONNECTION */
5369 {
5370 int readin;
5371
5372 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
5373 RECEIVE_PACKET_FIELD_ERROR(government_during_revolution_id);
5374 }
5375 real_packet->government_during_revolution_id = readin;
5376 }
5377 }
5378 if (BV_ISSET(fields, 56)) {
5379 log_packet_detailed(" got field 'granary_food_inc'");
5380#ifdef FREECIV_JSON_CONNECTION
5381 field_addr.name = "granary_food_inc";
5382#endif /* FREECIV_JSON_CONNECTION */
5383 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_inc)) {
5384 RECEIVE_PACKET_FIELD_ERROR(granary_food_inc);
5385 }
5386 }
5387 if (BV_ISSET(fields, 57)) {
5388 log_packet_detailed(" got field 'granary_food_ini'");
5389#ifdef FREECIV_JSON_CONNECTION
5390 field_addr.name = "granary_food_ini";
5391#endif /* FREECIV_JSON_CONNECTION */
5392 {
5393 int i;
5394
5395#ifdef FREECIV_JSON_CONNECTION
5396 /* Enter array. */
5397 field_addr.sub_location = plocation_elem_new(0);
5398#endif /* FREECIV_JSON_CONNECTION */
5399
5400 for (i = 0; i < MAX_GRANARY_INIS; i++) {
5401#ifdef FREECIV_JSON_CONNECTION
5402 field_addr.sub_location->number = i;
5403#endif /* FREECIV_JSON_CONNECTION */
5404
5405 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_food_ini[i])) {
5406 RECEIVE_PACKET_FIELD_ERROR(granary_food_ini);
5407 }
5408 }
5409
5410#ifdef FREECIV_JSON_CONNECTION
5411 /* Exit array. */
5412 FC_FREE(field_addr.sub_location);
5413#endif /* FREECIV_JSON_CONNECTION */
5414 }
5415 }
5416 if (BV_ISSET(fields, 58)) {
5417 log_packet_detailed(" got field 'granary_num_inis'");
5418#ifdef FREECIV_JSON_CONNECTION
5419 field_addr.name = "granary_num_inis";
5420#endif /* FREECIV_JSON_CONNECTION */
5421 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->granary_num_inis)) {
5422 RECEIVE_PACKET_FIELD_ERROR(granary_num_inis);
5423 }
5424 }
5425 if (BV_ISSET(fields, 59)) {
5426 log_packet_detailed(" got field 'great_wonder_owners'");
5427#ifdef FREECIV_JSON_CONNECTION
5428 field_addr.name = "great_wonder_owners";
5429#endif /* FREECIV_JSON_CONNECTION */
5431#ifdef FREECIV_JSON_CONNECTION
5432 /* Enter array (start at initial element). */
5433 field_addr.sub_location = plocation_elem_new(0);
5434 /* Enter diff array element (start at the index address). */
5435 field_addr.sub_location->sub_location = plocation_elem_new(0);
5436#endif /* FREECIV_JSON_CONNECTION */
5437
5438 while (TRUE) {
5439 int i;
5440
5441 /* Read next index */
5442#if B_LAST <= MAX_UINT8
5443 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
5444#else
5445 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
5446#endif
5447 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners);
5448 }
5449
5450 if (i == B_LAST) {
5451 break;
5452 }
5453 if (i > B_LAST) {
5454 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners,
5455 ": unexpected value %d "
5456 "(> B_LAST) in array diff",
5457 i);
5458 }
5459
5460#ifdef FREECIV_JSON_CONNECTION
5461 /* Content address. */
5462 field_addr.sub_location->sub_location->number = 1;
5463#endif /* FREECIV_JSON_CONNECTION */
5464
5465 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->great_wonder_owners[i])) {
5466 RECEIVE_PACKET_FIELD_ERROR(great_wonder_owners);
5467 }
5468
5469#ifdef FREECIV_JSON_CONNECTION
5470 /* Move to the next diff array element. */
5471 field_addr.sub_location->number++;
5472 /* Back to the index address. */
5473 field_addr.sub_location->sub_location->number = 0;
5474#endif /* FREECIV_JSON_CONNECTION */
5475 }
5476
5477#ifdef FREECIV_JSON_CONNECTION
5478 /* Exit diff array element. */
5479 FC_FREE(field_addr.sub_location->sub_location);
5480 /* Exit array. */
5481 FC_FREE(field_addr.sub_location);
5482#endif /* FREECIV_JSON_CONNECTION */
5483 }
5484 if (BV_ISSET(fields, 60)) {
5485 log_packet_detailed(" got field 'happy_cost'");
5486#ifdef FREECIV_JSON_CONNECTION
5487 field_addr.name = "happy_cost";
5488#endif /* FREECIV_JSON_CONNECTION */
5489 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->happy_cost)) {
5490 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
5491 }
5492 }
5493 if (BV_ISSET(fields, 61)) {
5494 log_packet_detailed(" got field 'happyborders'");
5495#ifdef FREECIV_JSON_CONNECTION
5496 field_addr.name = "happyborders";
5497#endif /* FREECIV_JSON_CONNECTION */
5498 {
5499 int readin;
5500
5501 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5502 RECEIVE_PACKET_FIELD_ERROR(happyborders);
5503 }
5504 real_packet->happyborders = readin;
5505 }
5506 }
5507 if (BV_ISSET(fields, 62)) {
5508 log_packet_detailed(" got field 'heating'");
5509#ifdef FREECIV_JSON_CONNECTION
5510 field_addr.name = "heating";
5511#endif /* FREECIV_JSON_CONNECTION */
5512 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->heating)) {
5514 }
5515 }
5516 if (BV_ISSET(fields, 63)) {
5517 log_packet_detailed(" got field 'illness_base_factor'");
5518#ifdef FREECIV_JSON_CONNECTION
5519 field_addr.name = "illness_base_factor";
5520#endif /* FREECIV_JSON_CONNECTION */
5521 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_base_factor)) {
5522 RECEIVE_PACKET_FIELD_ERROR(illness_base_factor);
5523 }
5524 }
5525 if (BV_ISSET(fields, 64)) {
5526 log_packet_detailed(" got field 'illness_min_size'");
5527#ifdef FREECIV_JSON_CONNECTION
5528 field_addr.name = "illness_min_size";
5529#endif /* FREECIV_JSON_CONNECTION */
5530 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->illness_min_size)) {
5531 RECEIVE_PACKET_FIELD_ERROR(illness_min_size);
5532 }
5533 }
5534 real_packet->illness_on = BV_ISSET(fields, 65);
5535 if (BV_ISSET(fields, 66)) {
5536 log_packet_detailed(" got field 'illness_pollution_factor'");
5537#ifdef FREECIV_JSON_CONNECTION
5538 field_addr.name = "illness_pollution_factor";
5539#endif /* FREECIV_JSON_CONNECTION */
5540 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_pollution_factor)) {
5541 RECEIVE_PACKET_FIELD_ERROR(illness_pollution_factor);
5542 }
5543 }
5544 if (BV_ISSET(fields, 67)) {
5545 log_packet_detailed(" got field 'illness_trade_infection'");
5546#ifdef FREECIV_JSON_CONNECTION
5547 field_addr.name = "illness_trade_infection";
5548#endif /* FREECIV_JSON_CONNECTION */
5549 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade_infection)) {
5550 RECEIVE_PACKET_FIELD_ERROR(illness_trade_infection);
5551 }
5552 }
5553 if (BV_ISSET(fields, 68)) {
5554 log_packet_detailed(" got field 'init_city_radius_sq'");
5555#ifdef FREECIV_JSON_CONNECTION
5556 field_addr.name = "init_city_radius_sq";
5557#endif /* FREECIV_JSON_CONNECTION */
5558 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_city_radius_sq)) {
5559 RECEIVE_PACKET_FIELD_ERROR(init_city_radius_sq);
5560 }
5561 }
5562 real_packet->is_edit_mode = BV_ISSET(fields, 69);
5563 real_packet->is_new_game = BV_ISSET(fields, 70);
5564 real_packet->killcitizen = BV_ISSET(fields, 71);
5565 real_packet->killstack = BV_ISSET(fields, 72);
5566 real_packet->only_killing_makes_veteran = BV_ISSET(fields, 73);
5567 real_packet->only_real_fight_makes_veteran = BV_ISSET(fields, 74);
5568 real_packet->combat_odds_scaled_veterancy = BV_ISSET(fields, 75);
5569 real_packet->damage_reduces_bombard_rate = BV_ISSET(fields, 76);
5570 if (BV_ISSET(fields, 77)) {
5571 log_packet_detailed(" got field 'low_firepower_badwallattacker'");
5572#ifdef FREECIV_JSON_CONNECTION
5573 field_addr.name = "low_firepower_badwallattacker";
5574#endif /* FREECIV_JSON_CONNECTION */
5575 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_badwallattacker)) {
5576 RECEIVE_PACKET_FIELD_ERROR(low_firepower_badwallattacker);
5577 }
5578 }
5579 if (BV_ISSET(fields, 78)) {
5580 log_packet_detailed(" got field 'low_firepower_pearl_harbour'");
5581#ifdef FREECIV_JSON_CONNECTION
5582 field_addr.name = "low_firepower_pearl_harbour";
5583#endif /* FREECIV_JSON_CONNECTION */
5584 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_pearl_harbour)) {
5585 RECEIVE_PACKET_FIELD_ERROR(low_firepower_pearl_harbour);
5586 }
5587 }
5588 if (BV_ISSET(fields, 79)) {
5589 log_packet_detailed(" got field 'low_firepower_combat_bonus'");
5590#ifdef FREECIV_JSON_CONNECTION
5591 field_addr.name = "low_firepower_combat_bonus";
5592#endif /* FREECIV_JSON_CONNECTION */
5593 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_combat_bonus)) {
5594 RECEIVE_PACKET_FIELD_ERROR(low_firepower_combat_bonus);
5595 }
5596 }
5597 if (BV_ISSET(fields, 80)) {
5598 log_packet_detailed(" got field 'low_firepower_nonnat_bombard'");
5599#ifdef FREECIV_JSON_CONNECTION
5600 field_addr.name = "low_firepower_nonnat_bombard";
5601#endif /* FREECIV_JSON_CONNECTION */
5602 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->low_firepower_nonnat_bombard)) {
5603 RECEIVE_PACKET_FIELD_ERROR(low_firepower_nonnat_bombard);
5604 }
5605 }
5606 if (BV_ISSET(fields, 81)) {
5607 log_packet_detailed(" got field 'nuke_pop_loss_pct'");
5608#ifdef FREECIV_JSON_CONNECTION
5609 field_addr.name = "nuke_pop_loss_pct";
5610#endif /* FREECIV_JSON_CONNECTION */
5611 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_pop_loss_pct)) {
5612 RECEIVE_PACKET_FIELD_ERROR(nuke_pop_loss_pct);
5613 }
5614 }
5615 if (BV_ISSET(fields, 82)) {
5616 log_packet_detailed(" got field 'nuke_defender_survival_chance_pct'");
5617#ifdef FREECIV_JSON_CONNECTION
5618 field_addr.name = "nuke_defender_survival_chance_pct";
5619#endif /* FREECIV_JSON_CONNECTION */
5620 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nuke_defender_survival_chance_pct)) {
5621 RECEIVE_PACKET_FIELD_ERROR(nuke_defender_survival_chance_pct);
5622 }
5623 }
5624 if (BV_ISSET(fields, 83)) {
5625 log_packet_detailed(" got field 'min_city_center_output'");
5626#ifdef FREECIV_JSON_CONNECTION
5627 field_addr.name = "min_city_center_output";
5628#endif /* FREECIV_JSON_CONNECTION */
5629 {
5630 int i;
5631
5632#ifdef FREECIV_JSON_CONNECTION
5633 /* Enter array. */
5634 field_addr.sub_location = plocation_elem_new(0);
5635#endif /* FREECIV_JSON_CONNECTION */
5636
5637 for (i = 0; i < O_LAST; i++) {
5638#ifdef FREECIV_JSON_CONNECTION
5639 field_addr.sub_location->number = i;
5640#endif /* FREECIV_JSON_CONNECTION */
5641
5642 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->min_city_center_output[i])) {
5643 RECEIVE_PACKET_FIELD_ERROR(min_city_center_output);
5644 }
5645 }
5646
5647#ifdef FREECIV_JSON_CONNECTION
5648 /* Exit array. */
5649 FC_FREE(field_addr.sub_location);
5650#endif /* FREECIV_JSON_CONNECTION */
5651 }
5652 }
5653 real_packet->muuk_food_wipe = BV_ISSET(fields, 84);
5654 real_packet->muuk_gold_wipe = BV_ISSET(fields, 85);
5655 real_packet->muuk_shield_wipe = BV_ISSET(fields, 86);
5656 if (BV_ISSET(fields, 87)) {
5657 log_packet_detailed(" got field 'notradesize'");
5658#ifdef FREECIV_JSON_CONNECTION
5659 field_addr.name = "notradesize";
5660#endif /* FREECIV_JSON_CONNECTION */
5661 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->notradesize)) {
5662 RECEIVE_PACKET_FIELD_ERROR(notradesize);
5663 }
5664 }
5665 real_packet->nuclear_winter = BV_ISSET(fields, 88);
5666 if (BV_ISSET(fields, 89)) {
5667 log_packet_detailed(" got field 'nuclearwinter'");
5668#ifdef FREECIV_JSON_CONNECTION
5669 field_addr.name = "nuclearwinter";
5670#endif /* FREECIV_JSON_CONNECTION */
5671 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->nuclearwinter)) {
5672 RECEIVE_PACKET_FIELD_ERROR(nuclearwinter);
5673 }
5674 }
5675 if (BV_ISSET(fields, 90)) {
5676 log_packet_detailed(" got field 'phase'");
5677#ifdef FREECIV_JSON_CONNECTION
5678 field_addr.name = "phase";
5679#endif /* FREECIV_JSON_CONNECTION */
5680 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
5682 }
5683 }
5684 if (BV_ISSET(fields, 91)) {
5685 log_packet_detailed(" got field 'phase_mode'");
5686#ifdef FREECIV_JSON_CONNECTION
5687 field_addr.name = "phase_mode";
5688#endif /* FREECIV_JSON_CONNECTION */
5689 {
5690 int readin;
5691
5692 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5693 RECEIVE_PACKET_FIELD_ERROR(phase_mode);
5694 }
5695 real_packet->phase_mode = readin;
5696 }
5697 }
5698 real_packet->pillage_select = BV_ISSET(fields, 92);
5699 real_packet->steal_maps_reveals_all_cities = BV_ISSET(fields, 93);
5700 real_packet->poison_empties_food_stock = BV_ISSET(fields, 94);
5701 real_packet->tech_steal_allow_holes = BV_ISSET(fields, 95);
5702 real_packet->tech_trade_allow_holes = BV_ISSET(fields, 96);
5703 real_packet->tech_trade_loss_allow_holes = BV_ISSET(fields, 97);
5704 real_packet->tech_parasite_allow_holes = BV_ISSET(fields, 98);
5705 real_packet->tech_loss_allow_holes = BV_ISSET(fields, 99);
5706 if (BV_ISSET(fields, 100)) {
5707 log_packet_detailed(" got field 'rapturedelay'");
5708#ifdef FREECIV_JSON_CONNECTION
5709 field_addr.name = "rapturedelay";
5710#endif /* FREECIV_JSON_CONNECTION */
5711 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapturedelay)) {
5712 RECEIVE_PACKET_FIELD_ERROR(rapturedelay);
5713 }
5714 }
5715 if (BV_ISSET(fields, 101)) {
5716 log_packet_detailed(" got field 'disasters'");
5717#ifdef FREECIV_JSON_CONNECTION
5718 field_addr.name = "disasters";
5719#endif /* FREECIV_JSON_CONNECTION */
5720 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disasters)) {
5722 }
5723 }
5724 real_packet->restrictinfra = BV_ISSET(fields, 102);
5725 real_packet->unreachable_protects = BV_ISSET(fields, 103);
5726 if (BV_ISSET(fields, 104)) {
5727 log_packet_detailed(" got field 'sciencebox'");
5728#ifdef FREECIV_JSON_CONNECTION
5729 field_addr.name = "sciencebox";
5730#endif /* FREECIV_JSON_CONNECTION */
5731 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->sciencebox)) {
5732 RECEIVE_PACKET_FIELD_ERROR(sciencebox);
5733 }
5734 }
5735 if (BV_ISSET(fields, 105)) {
5736 log_packet_detailed(" got field 'shieldbox'");
5737#ifdef FREECIV_JSON_CONNECTION
5738 field_addr.name = "shieldbox";
5739#endif /* FREECIV_JSON_CONNECTION */
5740 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->shieldbox)) {
5741 RECEIVE_PACKET_FIELD_ERROR(shieldbox);
5742 }
5743 }
5744 if (BV_ISSET(fields, 106)) {
5745 log_packet_detailed(" got field 'skill_level'");
5746#ifdef FREECIV_JSON_CONNECTION
5747 field_addr.name = "skill_level";
5748#endif /* FREECIV_JSON_CONNECTION */
5749 {
5750 int readin;
5751
5752 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5753 RECEIVE_PACKET_FIELD_ERROR(skill_level);
5754 }
5755 real_packet->skill_level = readin;
5756 }
5757 }
5758 if (BV_ISSET(fields, 107)) {
5759 log_packet_detailed(" got field 'victory_conditions'");
5760#ifdef FREECIV_JSON_CONNECTION
5761 field_addr.name = "victory_conditions";
5762#endif /* FREECIV_JSON_CONNECTION */
5763 {
5764 int readin;
5765
5766 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5767 RECEIVE_PACKET_FIELD_ERROR(victory_conditions);
5768 }
5769 real_packet->victory_conditions = readin;
5770 }
5771 }
5772 real_packet->team_pooled_research = BV_ISSET(fields, 108);
5773 if (BV_ISSET(fields, 109)) {
5774 log_packet_detailed(" got field 'tech'");
5775#ifdef FREECIV_JSON_CONNECTION
5776 field_addr.name = "tech";
5777#endif /* FREECIV_JSON_CONNECTION */
5778 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech)) {
5780 }
5781 }
5782 if (BV_ISSET(fields, 110)) {
5783 log_packet_detailed(" got field 'tech_cost_style'");
5784#ifdef FREECIV_JSON_CONNECTION
5785 field_addr.name = "tech_cost_style";
5786#endif /* FREECIV_JSON_CONNECTION */
5787 {
5788 int readin;
5789
5790 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5791 RECEIVE_PACKET_FIELD_ERROR(tech_cost_style);
5792 }
5793 real_packet->tech_cost_style = readin;
5794 }
5795 }
5796 if (BV_ISSET(fields, 111)) {
5797 log_packet_detailed(" got field 'tech_leakage'");
5798#ifdef FREECIV_JSON_CONNECTION
5799 field_addr.name = "tech_leakage";
5800#endif /* FREECIV_JSON_CONNECTION */
5801 {
5802 int readin;
5803
5804 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5805 RECEIVE_PACKET_FIELD_ERROR(tech_leakage);
5806 }
5807 real_packet->tech_leakage = readin;
5808 }
5809 }
5810 if (BV_ISSET(fields, 112)) {
5811 log_packet_detailed(" got field 'tech_upkeep_divider'");
5812#ifdef FREECIV_JSON_CONNECTION
5813 field_addr.name = "tech_upkeep_divider";
5814#endif /* FREECIV_JSON_CONNECTION */
5815 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_divider)) {
5816 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_divider);
5817 }
5818 }
5819 if (BV_ISSET(fields, 113)) {
5820 log_packet_detailed(" got field 'tech_upkeep_style'");
5821#ifdef FREECIV_JSON_CONNECTION
5822 field_addr.name = "tech_upkeep_style";
5823#endif /* FREECIV_JSON_CONNECTION */
5824 {
5825 int readin;
5826
5827 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5828 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_style);
5829 }
5830 real_packet->tech_upkeep_style = readin;
5831 }
5832 }
5833 if (BV_ISSET(fields, 114)) {
5834 log_packet_detailed(" got field 'techloss_forgiveness'");
5835#ifdef FREECIV_JSON_CONNECTION
5836 field_addr.name = "techloss_forgiveness";
5837#endif /* FREECIV_JSON_CONNECTION */
5838 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->techloss_forgiveness)) {
5839 RECEIVE_PACKET_FIELD_ERROR(techloss_forgiveness);
5840 }
5841 }
5842 if (BV_ISSET(fields, 115)) {
5843 log_packet_detailed(" got field 'free_tech_method'");
5844#ifdef FREECIV_JSON_CONNECTION
5845 field_addr.name = "free_tech_method";
5846#endif /* FREECIV_JSON_CONNECTION */
5847 {
5848 int readin;
5849
5850 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5851 RECEIVE_PACKET_FIELD_ERROR(free_tech_method);
5852 }
5853 real_packet->free_tech_method = readin;
5854 }
5855 }
5856 if (BV_ISSET(fields, 116)) {
5857 log_packet_detailed(" got field 'gameloss_style'");
5858#ifdef FREECIV_JSON_CONNECTION
5859 field_addr.name = "gameloss_style";
5860#endif /* FREECIV_JSON_CONNECTION */
5861 {
5862 int readin;
5863
5864 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5865 RECEIVE_PACKET_FIELD_ERROR(gameloss_style);
5866 }
5867 real_packet->gameloss_style = readin;
5868 }
5869 }
5870 if (BV_ISSET(fields, 117)) {
5871 log_packet_detailed(" got field 'timeout'");
5872#ifdef FREECIV_JSON_CONNECTION
5873 field_addr.name = "timeout";
5874#endif /* FREECIV_JSON_CONNECTION */
5875 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->timeout)) {
5877 }
5878 }
5879 if (BV_ISSET(fields, 118)) {
5880 log_packet_detailed(" got field 'first_timeout'");
5881#ifdef FREECIV_JSON_CONNECTION
5882 field_addr.name = "first_timeout";
5883#endif /* FREECIV_JSON_CONNECTION */
5884 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->first_timeout)) {
5885 RECEIVE_PACKET_FIELD_ERROR(first_timeout);
5886 }
5887 }
5888 real_packet->tired_attack = BV_ISSET(fields, 119);
5889 if (BV_ISSET(fields, 120)) {
5890 log_packet_detailed(" got field 'trademindist'");
5891#ifdef FREECIV_JSON_CONNECTION
5892 field_addr.name = "trademindist";
5893#endif /* FREECIV_JSON_CONNECTION */
5894 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trademindist)) {
5895 RECEIVE_PACKET_FIELD_ERROR(trademindist);
5896 }
5897 }
5898 if (BV_ISSET(fields, 121)) {
5899 log_packet_detailed(" got field 'trade_revenue_style'");
5900#ifdef FREECIV_JSON_CONNECTION
5901 field_addr.name = "trade_revenue_style";
5902#endif /* FREECIV_JSON_CONNECTION */
5903 {
5904 int readin;
5905
5906 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5907 RECEIVE_PACKET_FIELD_ERROR(trade_revenue_style);
5908 }
5909 real_packet->trade_revenue_style = readin;
5910 }
5911 }
5912 real_packet->trading_city = BV_ISSET(fields, 122);
5913 real_packet->trading_gold = BV_ISSET(fields, 123);
5914 real_packet->trading_tech = BV_ISSET(fields, 124);
5915 if (BV_ISSET(fields, 125)) {
5916 log_packet_detailed(" got field 'turn'");
5917#ifdef FREECIV_JSON_CONNECTION
5918 field_addr.name = "turn";
5919#endif /* FREECIV_JSON_CONNECTION */
5920 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
5922 }
5923 }
5924 if (BV_ISSET(fields, 126)) {
5925 log_packet_detailed(" got field 'warminglevel'");
5926#ifdef FREECIV_JSON_CONNECTION
5927 field_addr.name = "warminglevel";
5928#endif /* FREECIV_JSON_CONNECTION */
5929 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->warminglevel)) {
5930 RECEIVE_PACKET_FIELD_ERROR(warminglevel);
5931 }
5932 }
5933 if (BV_ISSET(fields, 127)) {
5934 log_packet_detailed(" got field 'year'");
5935#ifdef FREECIV_JSON_CONNECTION
5936 field_addr.name = "year";
5937#endif /* FREECIV_JSON_CONNECTION */
5938 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
5940 }
5941 }
5942 real_packet->year_0_hack = BV_ISSET(fields, 128);
5943 if (BV_ISSET(fields, 129)) {
5944 log_packet_detailed(" got field 'top_cities_count'");
5945#ifdef FREECIV_JSON_CONNECTION
5946 field_addr.name = "top_cities_count";
5947#endif /* FREECIV_JSON_CONNECTION */
5948 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->top_cities_count)) {
5949 RECEIVE_PACKET_FIELD_ERROR(top_cities_count);
5950 }
5951 }
5952 if (BV_ISSET(fields, 130)) {
5953 log_packet_detailed(" got field 'fragment_count'");
5954#ifdef FREECIV_JSON_CONNECTION
5955 field_addr.name = "fragment_count";
5956#endif /* FREECIV_JSON_CONNECTION */
5957 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragment_count)) {
5958 RECEIVE_PACKET_FIELD_ERROR(fragment_count);
5959 }
5960 }
5961 real_packet->civil_war_enabled = BV_ISSET(fields, 131);
5962 if (BV_ISSET(fields, 132)) {
5963 log_packet_detailed(" got field 'civil_war_bonus_celebrating'");
5964#ifdef FREECIV_JSON_CONNECTION
5965 field_addr.name = "civil_war_bonus_celebrating";
5966#endif /* FREECIV_JSON_CONNECTION */
5967 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->civil_war_bonus_celebrating)) {
5968 RECEIVE_PACKET_FIELD_ERROR(civil_war_bonus_celebrating);
5969 }
5970 }
5971 if (BV_ISSET(fields, 133)) {
5972 log_packet_detailed(" got field 'civil_war_bonus_unhappy'");
5973#ifdef FREECIV_JSON_CONNECTION
5974 field_addr.name = "civil_war_bonus_unhappy";
5975#endif /* FREECIV_JSON_CONNECTION */
5976 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->civil_war_bonus_unhappy)) {
5977 RECEIVE_PACKET_FIELD_ERROR(civil_war_bonus_unhappy);
5978 }
5979 }
5980 if (BV_ISSET(fields, 134)) {
5981 log_packet_detailed(" got field 'granularity'");
5982#ifdef FREECIV_JSON_CONNECTION
5983 field_addr.name = "granularity";
5984#endif /* FREECIV_JSON_CONNECTION */
5985 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granularity)) {
5986 RECEIVE_PACKET_FIELD_ERROR(granularity);
5987 }
5988 }
5989 if (BV_ISSET(fields, 135)) {
5990 log_packet_detailed(" got field 'small_wonder_visibility'");
5991#ifdef FREECIV_JSON_CONNECTION
5992 field_addr.name = "small_wonder_visibility";
5993#endif /* FREECIV_JSON_CONNECTION */
5994 {
5995 int readin;
5996
5997 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
5998 RECEIVE_PACKET_FIELD_ERROR(small_wonder_visibility);
5999 }
6000 real_packet->small_wonder_visibility = readin;
6001 }
6002 }
6003
6004 if (NULL == old) {
6005 old = fc_malloc(sizeof(*old));
6006 *old = *real_packet;
6007 genhash_insert(*hash, old, old);
6008 } else {
6009 *old = *real_packet;
6010 }
6011
6012#endif /* FREECIV_DELTA_PROTOCOL */
6014}
6015
6016static int send_packet_game_info_100(struct connection *pc, const struct packet_game_info *packet)
6017{
6018 const struct packet_game_info *real_packet = packet;
6019 int e;
6020#ifdef FREECIV_DELTA_PROTOCOL
6022 struct packet_game_info *old;
6023 bool differ;
6024 struct genhash **hash = pc->phs.sent + PACKET_GAME_INFO;
6025 int different = 0;
6026#endif /* FREECIV_DELTA_PROTOCOL */
6028#ifdef FREECIV_JSON_CONNECTION
6029 struct plocation field_addr;
6030 {
6034 }
6035#endif /* FREECIV_JSON_CONNECTION */
6036
6037 log_packet_detailed("packet_game_info_100: sending info about ()");
6038
6039#ifdef FREECIV_DELTA_PROTOCOL
6040 if (NULL == *hash) {
6042 NULL, NULL, NULL, free);
6043 }
6044 BV_CLR_ALL(fields);
6045
6046 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
6047 old = fc_malloc(sizeof(*old));
6048 *old = *real_packet;
6049 genhash_insert(*hash, old, old);
6050 memset(old, 0, sizeof(*old));
6051 different = 1; /* Force to send. */
6052 }
6053 differ = (old->add_to_size_limit != real_packet->add_to_size_limit);
6054 if (differ) {
6055 different++;
6056 BV_SET(fields, 0);
6057 }
6058
6059 differ = (old->aifill != real_packet->aifill);
6060 if (differ) {
6061 different++;
6062 BV_SET(fields, 1);
6063 }
6064
6065 differ = (old->persistent_ready != real_packet->persistent_ready);
6066 if (differ) {
6067 different++;
6068 BV_SET(fields, 2);
6069 }
6070
6071 differ = (old->airlifting_style != real_packet->airlifting_style);
6072 if (differ) {
6073 different++;
6074 BV_SET(fields, 3);
6075 }
6076
6077 differ = (old->airlift_from_always_enabled != real_packet->airlift_from_always_enabled);
6078 if (differ) {
6079 different++;
6080 }
6081 if (packet->airlift_from_always_enabled) {
6082 BV_SET(fields, 4);
6083 }
6084
6085 differ = (old->airlift_to_always_enabled != real_packet->airlift_to_always_enabled);
6086 if (differ) {
6087 different++;
6088 }
6089 if (packet->airlift_to_always_enabled) {
6090 BV_SET(fields, 5);
6091 }
6092
6093 differ = (old->angrycitizen != real_packet->angrycitizen);
6094 if (differ) {
6095 different++;
6096 BV_SET(fields, 6);
6097 }
6098
6099 differ = (old->base_pollution != real_packet->base_pollution);
6100 if (differ) {
6101 different++;
6102 BV_SET(fields, 7);
6103 }
6104
6105 differ = (old->base_tech_cost != real_packet->base_tech_cost);
6106 if (differ) {
6107 different++;
6108 BV_SET(fields, 8);
6109 }
6110
6111 differ = (old->min_tech_cost != real_packet->min_tech_cost);
6112 if (differ) {
6113 different++;
6114 BV_SET(fields, 9);
6115 }
6116
6117 differ = (old->tech_leak_pct != real_packet->tech_leak_pct);
6118 if (differ) {
6119 different++;
6120 BV_SET(fields, 10);
6121 }
6122
6123 differ = (old->border_city_radius_sq != real_packet->border_city_radius_sq);
6124 if (differ) {
6125 different++;
6126 BV_SET(fields, 11);
6127 }
6128
6129 differ = (old->border_size_effect != real_packet->border_size_effect);
6130 if (differ) {
6131 different++;
6132 BV_SET(fields, 12);
6133 }
6134
6135 differ = (old->border_city_permanent_radius_sq != real_packet->border_city_permanent_radius_sq);
6136 if (differ) {
6137 different++;
6138 BV_SET(fields, 13);
6139 }
6140
6141 differ = (old->borders != real_packet->borders);
6142 if (differ) {
6143 different++;
6144 BV_SET(fields, 14);
6145 }
6146
6147 differ = (old->base_bribe_cost != real_packet->base_bribe_cost);
6148 if (differ) {
6149 different++;
6150 BV_SET(fields, 15);
6151 }
6152
6153 differ = (old->caravan_bonus_style != real_packet->caravan_bonus_style);
6154 if (differ) {
6155 different++;
6156 BV_SET(fields, 16);
6157 }
6158
6159 differ = (old->culture_vic_points != real_packet->culture_vic_points);
6160 if (differ) {
6161 different++;
6162 BV_SET(fields, 17);
6163 }
6164
6165 differ = (old->culture_vic_lead != real_packet->culture_vic_lead);
6166 if (differ) {
6167 different++;
6168 BV_SET(fields, 18);
6169 }
6170
6171 differ = (old->culture_migration_pml != real_packet->culture_migration_pml);
6172 if (differ) {
6173 different++;
6174 BV_SET(fields, 19);
6175 }
6176
6177 differ = (old->history_interest_pml != real_packet->history_interest_pml);
6178 if (differ) {
6179 different++;
6180 BV_SET(fields, 20);
6181 }
6182
6183 differ = (old->celebratesize != real_packet->celebratesize);
6184 if (differ) {
6185 different++;
6186 BV_SET(fields, 21);
6187 }
6188
6189 differ = (old->changable_tax != real_packet->changable_tax);
6190 if (differ) {
6191 different++;
6192 }
6193 if (packet->changable_tax) {
6194 BV_SET(fields, 22);
6195 }
6196
6197 differ = (old->pop_report_zeroes != real_packet->pop_report_zeroes);
6198 if (differ) {
6199 different++;
6200 BV_SET(fields, 23);
6201 }
6202
6203 differ = (old->citizen_nationality != real_packet->citizen_nationality);
6204 if (differ) {
6205 different++;
6206 }
6207 if (packet->citizen_nationality) {
6208 BV_SET(fields, 24);
6209 }
6210
6211 differ = (old->unit_builders_nationality != real_packet->unit_builders_nationality);
6212 if (differ) {
6213 different++;
6214 }
6215 if (packet->unit_builders_nationality) {
6216 BV_SET(fields, 25);
6217 }
6218
6219 differ = (old->citizen_convert_speed != real_packet->citizen_convert_speed);
6220 if (differ) {
6221 different++;
6222 BV_SET(fields, 26);
6223 }
6224
6225 differ = (old->conquest_convert_pct != real_packet->conquest_convert_pct);
6226 if (differ) {
6227 different++;
6228 BV_SET(fields, 27);
6229 }
6230
6231 differ = (old->citizen_partisans_pct != real_packet->citizen_partisans_pct);
6232 if (differ) {
6233 different++;
6234 BV_SET(fields, 28);
6235 }
6236
6237 differ = (old->citymindist != real_packet->citymindist);
6238 if (differ) {
6239 different++;
6240 BV_SET(fields, 29);
6241 }
6242
6243 differ = (old->cooling != real_packet->cooling);
6244 if (differ) {
6245 different++;
6246 BV_SET(fields, 30);
6247 }
6248
6249 differ = (old->coolinglevel != real_packet->coolinglevel);
6250 if (differ) {
6251 different++;
6252 BV_SET(fields, 31);
6253 }
6254
6255 differ = !BV_ARE_EQUAL(old->diplchance_initial_odds, real_packet->diplchance_initial_odds);
6256 if (differ) {
6257 different++;
6258 BV_SET(fields, 32);
6259 }
6260
6261 differ = (old->diplomacy != real_packet->diplomacy);
6262 if (differ) {
6263 different++;
6264 BV_SET(fields, 33);
6265 }
6266
6267 differ = (old->fogofwar != real_packet->fogofwar);
6268 if (differ) {
6269 different++;
6270 }
6271 if (packet->fogofwar) {
6272 BV_SET(fields, 34);
6273 }
6274
6275 differ = (old->food_cost != real_packet->food_cost);
6276 if (differ) {
6277 different++;
6278 BV_SET(fields, 35);
6279 }
6280
6281 differ = (old->foodbox != real_packet->foodbox);
6282 if (differ) {
6283 different++;
6284 BV_SET(fields, 36);
6285 }
6286
6287 differ = (old->forced_gold != real_packet->forced_gold);
6288 if (differ) {
6289 different++;
6290 BV_SET(fields, 37);
6291 }
6292
6293 differ = (old->forced_luxury != real_packet->forced_luxury);
6294 if (differ) {
6295 different++;
6296 BV_SET(fields, 38);
6297 }
6298
6299 differ = (old->forced_science != real_packet->forced_science);
6300 if (differ) {
6301 different++;
6302 BV_SET(fields, 39);
6303 }
6304
6305 differ = (old->fulltradesize != real_packet->fulltradesize);
6306 if (differ) {
6307 different++;
6308 BV_SET(fields, 40);
6309 }
6310
6311 differ = (old->trade_world_rel_pct != real_packet->trade_world_rel_pct);
6312 if (differ) {
6313 different++;
6314 BV_SET(fields, 41);
6315 }
6316
6317 differ = (old->min_trade_route_val != real_packet->min_trade_route_val);
6318 if (differ) {
6319 different++;
6320 BV_SET(fields, 42);
6321 }
6322
6323 differ = (old->reveal_trade_partner != real_packet->reveal_trade_partner);
6324 if (differ) {
6325 different++;
6326 }
6327 if (packet->reveal_trade_partner) {
6328 BV_SET(fields, 43);
6329 }
6330
6331 differ = (old->goods_selection != real_packet->goods_selection);
6332 if (differ) {
6333 different++;
6334 BV_SET(fields, 44);
6335 }
6336
6337 differ = (old->global_advance_count != real_packet->global_advance_count);
6338 if (differ) {
6339 different++;
6340 BV_SET(fields, 45);
6341 }
6342
6343 differ = FALSE;
6344 {
6345 int i;
6346
6347 for (i = 0; i < A_LAST; i++) {
6348 differ = (old->global_advances[i] != real_packet->global_advances[i]);
6349 if (differ) {
6350 break;
6351 }
6352 }
6353 }
6354 if (differ) {
6355 different++;
6356 BV_SET(fields, 46);
6357 }
6358
6359 differ = (old->global_warming != real_packet->global_warming);
6360 if (differ) {
6361 different++;
6362 }
6363 if (packet->global_warming) {
6364 BV_SET(fields, 47);
6365 }
6366
6367 differ = (old->globalwarming != real_packet->globalwarming);
6368 if (differ) {
6369 different++;
6370 BV_SET(fields, 48);
6371 }
6372
6373 differ = (old->gold != real_packet->gold);
6374 if (differ) {
6375 different++;
6376 BV_SET(fields, 49);
6377 }
6378
6379 differ = (old->gold_upkeep_style != real_packet->gold_upkeep_style);
6380 if (differ) {
6381 different++;
6382 BV_SET(fields, 50);
6383 }
6384
6385 differ = (old->homeless_gold_upkeep != real_packet->homeless_gold_upkeep);
6386 if (differ) {
6387 different++;
6388 }
6389 if (packet->homeless_gold_upkeep) {
6390 BV_SET(fields, 51);
6391 }
6392
6393 differ = (old->infrapoints != real_packet->infrapoints);
6394 if (differ) {
6395 different++;
6396 BV_SET(fields, 52);
6397 }
6398
6399 differ = (old->revolentype != real_packet->revolentype);
6400 if (differ) {
6401 different++;
6402 BV_SET(fields, 53);
6403 }
6404
6405 differ = (old->default_government_id != real_packet->default_government_id);
6406 if (differ) {
6407 different++;
6408 BV_SET(fields, 54);
6409 }
6410
6411 differ = (old->government_during_revolution_id != real_packet->government_during_revolution_id);
6412 if (differ) {
6413 different++;
6414 BV_SET(fields, 55);
6415 }
6416
6417 differ = (old->granary_food_inc != real_packet->granary_food_inc);
6418 if (differ) {
6419 different++;
6420 BV_SET(fields, 56);
6421 }
6422
6423 differ = FALSE;
6424 {
6425 int i;
6426
6427 for (i = 0; i < MAX_GRANARY_INIS; i++) {
6428 differ = (old->granary_food_ini[i] != real_packet->granary_food_ini[i]);
6429 if (differ) {
6430 break;
6431 }
6432 }
6433 }
6434 if (differ) {
6435 different++;
6436 BV_SET(fields, 57);
6437 }
6438
6439 differ = (old->granary_num_inis != real_packet->granary_num_inis);
6440 if (differ) {
6441 different++;
6442 BV_SET(fields, 58);
6443 }
6444
6445 differ = FALSE;
6446 {
6447 int i;
6448
6449 for (i = 0; i < B_LAST; i++) {
6450 differ = (old->great_wonder_owners[i] != real_packet->great_wonder_owners[i]);
6451 if (differ) {
6452 break;
6453 }
6454 }
6455 }
6456 if (differ) {
6457 different++;
6458 BV_SET(fields, 59);
6459 }
6460
6461 differ = (old->happy_cost != real_packet->happy_cost);
6462 if (differ) {
6463 different++;
6464 BV_SET(fields, 60);
6465 }
6466
6467 differ = (old->happyborders != real_packet->happyborders);
6468 if (differ) {
6469 different++;
6470 BV_SET(fields, 61);
6471 }
6472
6473 differ = (old->heating != real_packet->heating);
6474 if (differ) {
6475 different++;
6476 BV_SET(fields, 62);
6477 }
6478
6479 differ = (old->illness_base_factor != real_packet->illness_base_factor);
6480 if (differ) {
6481 different++;
6482 BV_SET(fields, 63);
6483 }
6484
6485 differ = (old->illness_min_size != real_packet->illness_min_size);
6486 if (differ) {
6487 different++;
6488 BV_SET(fields, 64);
6489 }
6490
6491 differ = (old->illness_on != real_packet->illness_on);
6492 if (differ) {
6493 different++;
6494 }
6495 if (packet->illness_on) {
6496 BV_SET(fields, 65);
6497 }
6498
6499 differ = (old->illness_pollution_factor != real_packet->illness_pollution_factor);
6500 if (differ) {
6501 different++;
6502 BV_SET(fields, 66);
6503 }
6504
6505 differ = (old->illness_trade_infection != real_packet->illness_trade_infection);
6506 if (differ) {
6507 different++;
6508 BV_SET(fields, 67);
6509 }
6510
6511 differ = (old->init_city_radius_sq != real_packet->init_city_radius_sq);
6512 if (differ) {
6513 different++;
6514 BV_SET(fields, 68);
6515 }
6516
6517 differ = (old->is_edit_mode != real_packet->is_edit_mode);
6518 if (differ) {
6519 different++;
6520 }
6521 if (packet->is_edit_mode) {
6522 BV_SET(fields, 69);
6523 }
6524
6525 differ = (old->is_new_game != real_packet->is_new_game);
6526 if (differ) {
6527 different++;
6528 }
6529 if (packet->is_new_game) {
6530 BV_SET(fields, 70);
6531 }
6532
6533 differ = (old->killcitizen != real_packet->killcitizen);
6534 if (differ) {
6535 different++;
6536 }
6537 if (packet->killcitizen) {
6538 BV_SET(fields, 71);
6539 }
6540
6541 differ = (old->killstack != real_packet->killstack);
6542 if (differ) {
6543 different++;
6544 }
6545 if (packet->killstack) {
6546 BV_SET(fields, 72);
6547 }
6548
6549 differ = (old->only_killing_makes_veteran != real_packet->only_killing_makes_veteran);
6550 if (differ) {
6551 different++;
6552 }
6553 if (packet->only_killing_makes_veteran) {
6554 BV_SET(fields, 73);
6555 }
6556
6557 differ = (old->only_real_fight_makes_veteran != real_packet->only_real_fight_makes_veteran);
6558 if (differ) {
6559 different++;
6560 }
6561 if (packet->only_real_fight_makes_veteran) {
6562 BV_SET(fields, 74);
6563 }
6564
6565 differ = (old->combat_odds_scaled_veterancy != real_packet->combat_odds_scaled_veterancy);
6566 if (differ) {
6567 different++;
6568 }
6569 if (packet->combat_odds_scaled_veterancy) {
6570 BV_SET(fields, 75);
6571 }
6572
6573 differ = (old->damage_reduces_bombard_rate != real_packet->damage_reduces_bombard_rate);
6574 if (differ) {
6575 different++;
6576 }
6577 if (packet->damage_reduces_bombard_rate) {
6578 BV_SET(fields, 76);
6579 }
6580
6581 differ = (old->low_firepower_badwallattacker != real_packet->low_firepower_badwallattacker);
6582 if (differ) {
6583 different++;
6584 BV_SET(fields, 77);
6585 }
6586
6587 differ = (old->low_firepower_pearl_harbour != real_packet->low_firepower_pearl_harbour);
6588 if (differ) {
6589 different++;
6590 BV_SET(fields, 78);
6591 }
6592
6593 differ = (old->low_firepower_combat_bonus != real_packet->low_firepower_combat_bonus);
6594 if (differ) {
6595 different++;
6596 BV_SET(fields, 79);
6597 }
6598
6599 differ = (old->low_firepower_nonnat_bombard != real_packet->low_firepower_nonnat_bombard);
6600 if (differ) {
6601 different++;
6602 BV_SET(fields, 80);
6603 }
6604
6605 differ = (old->nuke_pop_loss_pct != real_packet->nuke_pop_loss_pct);
6606 if (differ) {
6607 different++;
6608 BV_SET(fields, 81);
6609 }
6610
6611 differ = (old->nuke_defender_survival_chance_pct != real_packet->nuke_defender_survival_chance_pct);
6612 if (differ) {
6613 different++;
6614 BV_SET(fields, 82);
6615 }
6616
6617 differ = FALSE;
6618 {
6619 int i;
6620
6621 for (i = 0; i < O_LAST; i++) {
6622 differ = (old->min_city_center_output[i] != real_packet->min_city_center_output[i]);
6623 if (differ) {
6624 break;
6625 }
6626 }
6627 }
6628 if (differ) {
6629 different++;
6630 BV_SET(fields, 83);
6631 }
6632
6633 differ = (old->muuk_food_wipe != real_packet->muuk_food_wipe);
6634 if (differ) {
6635 different++;
6636 }
6637 if (packet->muuk_food_wipe) {
6638 BV_SET(fields, 84);
6639 }
6640
6641 differ = (old->muuk_gold_wipe != real_packet->muuk_gold_wipe);
6642 if (differ) {
6643 different++;
6644 }
6645 if (packet->muuk_gold_wipe) {
6646 BV_SET(fields, 85);
6647 }
6648
6649 differ = (old->muuk_shield_wipe != real_packet->muuk_shield_wipe);
6650 if (differ) {
6651 different++;
6652 }
6653 if (packet->muuk_shield_wipe) {
6654 BV_SET(fields, 86);
6655 }
6656
6657 differ = (old->notradesize != real_packet->notradesize);
6658 if (differ) {
6659 different++;
6660 BV_SET(fields, 87);
6661 }
6662
6663 differ = (old->nuclear_winter != real_packet->nuclear_winter);
6664 if (differ) {
6665 different++;
6666 }
6667 if (packet->nuclear_winter) {
6668 BV_SET(fields, 88);
6669 }
6670
6671 differ = (old->nuclearwinter != real_packet->nuclearwinter);
6672 if (differ) {
6673 different++;
6674 BV_SET(fields, 89);
6675 }
6676
6677 differ = (old->phase != real_packet->phase);
6678 if (differ) {
6679 different++;
6680 BV_SET(fields, 90);
6681 }
6682
6683 differ = (old->phase_mode != real_packet->phase_mode);
6684 if (differ) {
6685 different++;
6686 BV_SET(fields, 91);
6687 }
6688
6689 differ = (old->pillage_select != real_packet->pillage_select);
6690 if (differ) {
6691 different++;
6692 }
6693 if (packet->pillage_select) {
6694 BV_SET(fields, 92);
6695 }
6696
6697 differ = (old->steal_maps_reveals_all_cities != real_packet->steal_maps_reveals_all_cities);
6698 if (differ) {
6699 different++;
6700 }
6701 if (packet->steal_maps_reveals_all_cities) {
6702 BV_SET(fields, 93);
6703 }
6704
6705 differ = (old->poison_empties_food_stock != real_packet->poison_empties_food_stock);
6706 if (differ) {
6707 different++;
6708 }
6709 if (packet->poison_empties_food_stock) {
6710 BV_SET(fields, 94);
6711 }
6712
6713 differ = (old->tech_steal_allow_holes != real_packet->tech_steal_allow_holes);
6714 if (differ) {
6715 different++;
6716 }
6717 if (packet->tech_steal_allow_holes) {
6718 BV_SET(fields, 95);
6719 }
6720
6721 differ = (old->tech_trade_allow_holes != real_packet->tech_trade_allow_holes);
6722 if (differ) {
6723 different++;
6724 }
6725 if (packet->tech_trade_allow_holes) {
6726 BV_SET(fields, 96);
6727 }
6728
6729 differ = (old->tech_trade_loss_allow_holes != real_packet->tech_trade_loss_allow_holes);
6730 if (differ) {
6731 different++;
6732 }
6733 if (packet->tech_trade_loss_allow_holes) {
6734 BV_SET(fields, 97);
6735 }
6736
6737 differ = (old->tech_parasite_allow_holes != real_packet->tech_parasite_allow_holes);
6738 if (differ) {
6739 different++;
6740 }
6741 if (packet->tech_parasite_allow_holes) {
6742 BV_SET(fields, 98);
6743 }
6744
6745 differ = (old->tech_loss_allow_holes != real_packet->tech_loss_allow_holes);
6746 if (differ) {
6747 different++;
6748 }
6749 if (packet->tech_loss_allow_holes) {
6750 BV_SET(fields, 99);
6751 }
6752
6753 differ = (old->rapturedelay != real_packet->rapturedelay);
6754 if (differ) {
6755 different++;
6756 BV_SET(fields, 100);
6757 }
6758
6759 differ = (old->disasters != real_packet->disasters);
6760 if (differ) {
6761 different++;
6762 BV_SET(fields, 101);
6763 }
6764
6765 differ = (old->restrictinfra != real_packet->restrictinfra);
6766 if (differ) {
6767 different++;
6768 }
6769 if (packet->restrictinfra) {
6770 BV_SET(fields, 102);
6771 }
6772
6773 differ = (old->unreachable_protects != real_packet->unreachable_protects);
6774 if (differ) {
6775 different++;
6776 }
6777 if (packet->unreachable_protects) {
6778 BV_SET(fields, 103);
6779 }
6780
6781 differ = (old->sciencebox != real_packet->sciencebox);
6782 if (differ) {
6783 different++;
6784 BV_SET(fields, 104);
6785 }
6786
6787 differ = (old->shieldbox != real_packet->shieldbox);
6788 if (differ) {
6789 different++;
6790 BV_SET(fields, 105);
6791 }
6792
6793 differ = (old->skill_level != real_packet->skill_level);
6794 if (differ) {
6795 different++;
6796 BV_SET(fields, 106);
6797 }
6798
6799 differ = (old->victory_conditions != real_packet->victory_conditions);
6800 if (differ) {
6801 different++;
6802 BV_SET(fields, 107);
6803 }
6804
6805 differ = (old->team_pooled_research != real_packet->team_pooled_research);
6806 if (differ) {
6807 different++;
6808 }
6809 if (packet->team_pooled_research) {
6810 BV_SET(fields, 108);
6811 }
6812
6813 differ = (old->tech != real_packet->tech);
6814 if (differ) {
6815 different++;
6816 BV_SET(fields, 109);
6817 }
6818
6819 differ = (old->tech_cost_style != real_packet->tech_cost_style);
6820 if (differ) {
6821 different++;
6822 BV_SET(fields, 110);
6823 }
6824
6825 differ = (old->tech_leakage != real_packet->tech_leakage);
6826 if (differ) {
6827 different++;
6828 BV_SET(fields, 111);
6829 }
6830
6831 differ = (old->tech_upkeep_divider != real_packet->tech_upkeep_divider);
6832 if (differ) {
6833 different++;
6834 BV_SET(fields, 112);
6835 }
6836
6837 differ = (old->tech_upkeep_style != real_packet->tech_upkeep_style);
6838 if (differ) {
6839 different++;
6840 BV_SET(fields, 113);
6841 }
6842
6843 differ = (old->techloss_forgiveness != real_packet->techloss_forgiveness);
6844 if (differ) {
6845 different++;
6846 BV_SET(fields, 114);
6847 }
6848
6849 differ = (old->free_tech_method != real_packet->free_tech_method);
6850 if (differ) {
6851 different++;
6852 BV_SET(fields, 115);
6853 }
6854
6855 differ = (old->gameloss_style != real_packet->gameloss_style);
6856 if (differ) {
6857 different++;
6858 BV_SET(fields, 116);
6859 }
6860
6861 differ = (old->timeout != real_packet->timeout);
6862 if (differ) {
6863 different++;
6864 BV_SET(fields, 117);
6865 }
6866
6867 differ = (old->first_timeout != real_packet->first_timeout);
6868 if (differ) {
6869 different++;
6870 BV_SET(fields, 118);
6871 }
6872
6873 differ = (old->tired_attack != real_packet->tired_attack);
6874 if (differ) {
6875 different++;
6876 }
6877 if (packet->tired_attack) {
6878 BV_SET(fields, 119);
6879 }
6880
6881 differ = (old->trademindist != real_packet->trademindist);
6882 if (differ) {
6883 different++;
6884 BV_SET(fields, 120);
6885 }
6886
6887 differ = (old->trade_revenue_style != real_packet->trade_revenue_style);
6888 if (differ) {
6889 different++;
6890 BV_SET(fields, 121);
6891 }
6892
6893 differ = (old->trading_city != real_packet->trading_city);
6894 if (differ) {
6895 different++;
6896 }
6897 if (packet->trading_city) {
6898 BV_SET(fields, 122);
6899 }
6900
6901 differ = (old->trading_gold != real_packet->trading_gold);
6902 if (differ) {
6903 different++;
6904 }
6905 if (packet->trading_gold) {
6906 BV_SET(fields, 123);
6907 }
6908
6909 differ = (old->trading_tech != real_packet->trading_tech);
6910 if (differ) {
6911 different++;
6912 }
6913 if (packet->trading_tech) {
6914 BV_SET(fields, 124);
6915 }
6916
6917 differ = (old->turn != real_packet->turn);
6918 if (differ) {
6919 different++;
6920 BV_SET(fields, 125);
6921 }
6922
6923 differ = (old->warminglevel != real_packet->warminglevel);
6924 if (differ) {
6925 different++;
6926 BV_SET(fields, 126);
6927 }
6928
6929 differ = (old->year != real_packet->year);
6930 if (differ) {
6931 different++;
6932 BV_SET(fields, 127);
6933 }
6934
6935 differ = (old->year_0_hack != real_packet->year_0_hack);
6936 if (differ) {
6937 different++;
6938 }
6939 if (packet->year_0_hack) {
6940 BV_SET(fields, 128);
6941 }
6942
6943 differ = (old->top_cities_count != real_packet->top_cities_count);
6944 if (differ) {
6945 different++;
6946 BV_SET(fields, 129);
6947 }
6948
6949 differ = (old->fragment_count != real_packet->fragment_count);
6950 if (differ) {
6951 different++;
6952 BV_SET(fields, 130);
6953 }
6954
6955 differ = (old->civil_war_enabled != real_packet->civil_war_enabled);
6956 if (differ) {
6957 different++;
6958 }
6959 if (packet->civil_war_enabled) {
6960 BV_SET(fields, 131);
6961 }
6962
6963 differ = (old->civil_war_bonus_celebrating != real_packet->civil_war_bonus_celebrating);
6964 if (differ) {
6965 different++;
6966 BV_SET(fields, 132);
6967 }
6968
6969 differ = (old->civil_war_bonus_unhappy != real_packet->civil_war_bonus_unhappy);
6970 if (differ) {
6971 different++;
6972 BV_SET(fields, 133);
6973 }
6974
6975 differ = (old->granularity != real_packet->granularity);
6976 if (differ) {
6977 different++;
6978 BV_SET(fields, 134);
6979 }
6980
6981 differ = (old->small_wonder_visibility != real_packet->small_wonder_visibility);
6982 if (differ) {
6983 different++;
6984 BV_SET(fields, 135);
6985 }
6986
6987 if (different == 0) {
6988 log_packet_detailed(" no change -> discard");
6990 }
6991
6992#ifdef FREECIV_JSON_CONNECTION
6993 field_addr.name = "fields";
6994#endif /* FREECIV_JSON_CONNECTION */
6995 e = 0;
6996 e |= DIO_BV_PUT(&dout, &field_addr, fields);
6997 if (e) {
6998 log_packet_detailed("fields bitvector error detected");
6999 }
7000
7001 if (BV_ISSET(fields, 0)) {
7002 log_packet_detailed(" field 'add_to_size_limit' has changed");
7003#ifdef FREECIV_JSON_CONNECTION
7004 field_addr.name = "add_to_size_limit";
7005#endif /* FREECIV_JSON_CONNECTION */
7006 e = 0;
7007 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->add_to_size_limit);
7008 if (e) {
7009 log_packet_detailed("'add_to_size_limit' field error detected");
7010 }
7011 }
7012 if (BV_ISSET(fields, 1)) {
7013 log_packet_detailed(" field 'aifill' has changed");
7014#ifdef FREECIV_JSON_CONNECTION
7015 field_addr.name = "aifill";
7016#endif /* FREECIV_JSON_CONNECTION */
7017 e = 0;
7018 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->aifill);
7019 if (e) {
7020 log_packet_detailed("'aifill' field error detected");
7021 }
7022 }
7023 if (BV_ISSET(fields, 2)) {
7024 log_packet_detailed(" field 'persistent_ready' has changed");
7025#ifdef FREECIV_JSON_CONNECTION
7026 field_addr.name = "persistent_ready";
7027#endif /* FREECIV_JSON_CONNECTION */
7028 e = 0;
7029 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->persistent_ready);
7030 if (e) {
7031 log_packet_detailed("'persistent_ready' field error detected");
7032 }
7033 }
7034 if (BV_ISSET(fields, 3)) {
7035 log_packet_detailed(" field 'airlifting_style' has changed");
7036#ifdef FREECIV_JSON_CONNECTION
7037 field_addr.name = "airlifting_style";
7038#endif /* FREECIV_JSON_CONNECTION */
7039 e = 0;
7040 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlifting_style);
7041 if (e) {
7042 log_packet_detailed("'airlifting_style' field error detected");
7043 }
7044 }
7045 /* field 4 is folded into the header */
7046 /* field 5 is folded into the header */
7047 if (BV_ISSET(fields, 6)) {
7048 log_packet_detailed(" field 'angrycitizen' has changed");
7049#ifdef FREECIV_JSON_CONNECTION
7050 field_addr.name = "angrycitizen";
7051#endif /* FREECIV_JSON_CONNECTION */
7052 e = 0;
7053 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->angrycitizen);
7054 if (e) {
7055 log_packet_detailed("'angrycitizen' field error detected");
7056 }
7057 }
7058 if (BV_ISSET(fields, 7)) {
7059 log_packet_detailed(" field 'base_pollution' has changed");
7060#ifdef FREECIV_JSON_CONNECTION
7061 field_addr.name = "base_pollution";
7062#endif /* FREECIV_JSON_CONNECTION */
7063 e = 0;
7064 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->base_pollution);
7065 if (e) {
7066 log_packet_detailed("'base_pollution' field error detected");
7067 }
7068 }
7069 if (BV_ISSET(fields, 8)) {
7070 log_packet_detailed(" field 'base_tech_cost' has changed");
7071#ifdef FREECIV_JSON_CONNECTION
7072 field_addr.name = "base_tech_cost";
7073#endif /* FREECIV_JSON_CONNECTION */
7074 e = 0;
7075 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->base_tech_cost);
7076 if (e) {
7077 log_packet_detailed("'base_tech_cost' field error detected");
7078 }
7079 }
7080 if (BV_ISSET(fields, 9)) {
7081 log_packet_detailed(" field 'min_tech_cost' has changed");
7082#ifdef FREECIV_JSON_CONNECTION
7083 field_addr.name = "min_tech_cost";
7084#endif /* FREECIV_JSON_CONNECTION */
7085 e = 0;
7086 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_tech_cost);
7087 if (e) {
7088 log_packet_detailed("'min_tech_cost' field error detected");
7089 }
7090 }
7091 if (BV_ISSET(fields, 10)) {
7092 log_packet_detailed(" field 'tech_leak_pct' has changed");
7093#ifdef FREECIV_JSON_CONNECTION
7094 field_addr.name = "tech_leak_pct";
7095#endif /* FREECIV_JSON_CONNECTION */
7096 e = 0;
7097 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leak_pct);
7098 if (e) {
7099 log_packet_detailed("'tech_leak_pct' field error detected");
7100 }
7101 }
7102 if (BV_ISSET(fields, 11)) {
7103 log_packet_detailed(" field 'border_city_radius_sq' has changed");
7104#ifdef FREECIV_JSON_CONNECTION
7105 field_addr.name = "border_city_radius_sq";
7106#endif /* FREECIV_JSON_CONNECTION */
7107 e = 0;
7108 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->border_city_radius_sq);
7109 if (e) {
7110 log_packet_detailed("'border_city_radius_sq' field error detected");
7111 }
7112 }
7113 if (BV_ISSET(fields, 12)) {
7114 log_packet_detailed(" field 'border_size_effect' has changed");
7115#ifdef FREECIV_JSON_CONNECTION
7116 field_addr.name = "border_size_effect";
7117#endif /* FREECIV_JSON_CONNECTION */
7118 e = 0;
7119 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->border_size_effect);
7120 if (e) {
7121 log_packet_detailed("'border_size_effect' field error detected");
7122 }
7123 }
7124 if (BV_ISSET(fields, 13)) {
7125 log_packet_detailed(" field 'border_city_permanent_radius_sq' has changed");
7126#ifdef FREECIV_JSON_CONNECTION
7127 field_addr.name = "border_city_permanent_radius_sq";
7128#endif /* FREECIV_JSON_CONNECTION */
7129 e = 0;
7130 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->border_city_permanent_radius_sq);
7131 if (e) {
7132 log_packet_detailed("'border_city_permanent_radius_sq' field error detected");
7133 }
7134 }
7135 if (BV_ISSET(fields, 14)) {
7136 log_packet_detailed(" field 'borders' has changed");
7137#ifdef FREECIV_JSON_CONNECTION
7138 field_addr.name = "borders";
7139#endif /* FREECIV_JSON_CONNECTION */
7140 e = 0;
7141 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->borders);
7142 if (e) {
7143 log_packet_detailed("'borders' field error detected");
7144 }
7145 }
7146 if (BV_ISSET(fields, 15)) {
7147 log_packet_detailed(" field 'base_bribe_cost' has changed");
7148#ifdef FREECIV_JSON_CONNECTION
7149 field_addr.name = "base_bribe_cost";
7150#endif /* FREECIV_JSON_CONNECTION */
7151 e = 0;
7152 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->base_bribe_cost);
7153 if (e) {
7154 log_packet_detailed("'base_bribe_cost' field error detected");
7155 }
7156 }
7157 if (BV_ISSET(fields, 16)) {
7158 log_packet_detailed(" field 'caravan_bonus_style' has changed");
7159#ifdef FREECIV_JSON_CONNECTION
7160 field_addr.name = "caravan_bonus_style";
7161#endif /* FREECIV_JSON_CONNECTION */
7162 e = 0;
7163 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->caravan_bonus_style);
7164 if (e) {
7165 log_packet_detailed("'caravan_bonus_style' field error detected");
7166 }
7167 }
7168 if (BV_ISSET(fields, 17)) {
7169 log_packet_detailed(" field 'culture_vic_points' has changed");
7170#ifdef FREECIV_JSON_CONNECTION
7171 field_addr.name = "culture_vic_points";
7172#endif /* FREECIV_JSON_CONNECTION */
7173 e = 0;
7174 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture_vic_points);
7175 if (e) {
7176 log_packet_detailed("'culture_vic_points' field error detected");
7177 }
7178 }
7179 if (BV_ISSET(fields, 18)) {
7180 log_packet_detailed(" field 'culture_vic_lead' has changed");
7181#ifdef FREECIV_JSON_CONNECTION
7182 field_addr.name = "culture_vic_lead";
7183#endif /* FREECIV_JSON_CONNECTION */
7184 e = 0;
7185 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_vic_lead);
7186 if (e) {
7187 log_packet_detailed("'culture_vic_lead' field error detected");
7188 }
7189 }
7190 if (BV_ISSET(fields, 19)) {
7191 log_packet_detailed(" field 'culture_migration_pml' has changed");
7192#ifdef FREECIV_JSON_CONNECTION
7193 field_addr.name = "culture_migration_pml";
7194#endif /* FREECIV_JSON_CONNECTION */
7195 e = 0;
7196 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_migration_pml);
7197 if (e) {
7198 log_packet_detailed("'culture_migration_pml' field error detected");
7199 }
7200 }
7201 if (BV_ISSET(fields, 20)) {
7202 log_packet_detailed(" field 'history_interest_pml' has changed");
7203#ifdef FREECIV_JSON_CONNECTION
7204 field_addr.name = "history_interest_pml";
7205#endif /* FREECIV_JSON_CONNECTION */
7206 e = 0;
7207 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->history_interest_pml);
7208 if (e) {
7209 log_packet_detailed("'history_interest_pml' field error detected");
7210 }
7211 }
7212 if (BV_ISSET(fields, 21)) {
7213 log_packet_detailed(" field 'celebratesize' has changed");
7214#ifdef FREECIV_JSON_CONNECTION
7215 field_addr.name = "celebratesize";
7216#endif /* FREECIV_JSON_CONNECTION */
7217 e = 0;
7218 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->celebratesize);
7219 if (e) {
7220 log_packet_detailed("'celebratesize' field error detected");
7221 }
7222 }
7223 /* field 22 is folded into the header */
7224 if (BV_ISSET(fields, 23)) {
7225 log_packet_detailed(" field 'pop_report_zeroes' has changed");
7226#ifdef FREECIV_JSON_CONNECTION
7227 field_addr.name = "pop_report_zeroes";
7228#endif /* FREECIV_JSON_CONNECTION */
7229 e = 0;
7230 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_report_zeroes);
7231 if (e) {
7232 log_packet_detailed("'pop_report_zeroes' field error detected");
7233 }
7234 }
7235 /* field 24 is folded into the header */
7236 /* field 25 is folded into the header */
7237 if (BV_ISSET(fields, 26)) {
7238 log_packet_detailed(" field 'citizen_convert_speed' has changed");
7239#ifdef FREECIV_JSON_CONNECTION
7240 field_addr.name = "citizen_convert_speed";
7241#endif /* FREECIV_JSON_CONNECTION */
7242 e = 0;
7243 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->citizen_convert_speed);
7244 if (e) {
7245 log_packet_detailed("'citizen_convert_speed' field error detected");
7246 }
7247 }
7248 if (BV_ISSET(fields, 27)) {
7249 log_packet_detailed(" field 'conquest_convert_pct' has changed");
7250#ifdef FREECIV_JSON_CONNECTION
7251 field_addr.name = "conquest_convert_pct";
7252#endif /* FREECIV_JSON_CONNECTION */
7253 e = 0;
7254 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->conquest_convert_pct);
7255 if (e) {
7256 log_packet_detailed("'conquest_convert_pct' field error detected");
7257 }
7258 }
7259 if (BV_ISSET(fields, 28)) {
7260 log_packet_detailed(" field 'citizen_partisans_pct' has changed");
7261#ifdef FREECIV_JSON_CONNECTION
7262 field_addr.name = "citizen_partisans_pct";
7263#endif /* FREECIV_JSON_CONNECTION */
7264 e = 0;
7265 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citizen_partisans_pct);
7266 if (e) {
7267 log_packet_detailed("'citizen_partisans_pct' field error detected");
7268 }
7269 }
7270 if (BV_ISSET(fields, 29)) {
7271 log_packet_detailed(" field 'citymindist' has changed");
7272#ifdef FREECIV_JSON_CONNECTION
7273 field_addr.name = "citymindist";
7274#endif /* FREECIV_JSON_CONNECTION */
7275 e = 0;
7276 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citymindist);
7277 if (e) {
7278 log_packet_detailed("'citymindist' field error detected");
7279 }
7280 }
7281 if (BV_ISSET(fields, 30)) {
7282 log_packet_detailed(" field 'cooling' has changed");
7283#ifdef FREECIV_JSON_CONNECTION
7284 field_addr.name = "cooling";
7285#endif /* FREECIV_JSON_CONNECTION */
7286 e = 0;
7287 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cooling);
7288 if (e) {
7289 log_packet_detailed("'cooling' field error detected");
7290 }
7291 }
7292 if (BV_ISSET(fields, 31)) {
7293 log_packet_detailed(" field 'coolinglevel' has changed");
7294#ifdef FREECIV_JSON_CONNECTION
7295 field_addr.name = "coolinglevel";
7296#endif /* FREECIV_JSON_CONNECTION */
7297 e = 0;
7298 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->coolinglevel);
7299 if (e) {
7300 log_packet_detailed("'coolinglevel' field error detected");
7301 }
7302 }
7303 if (BV_ISSET(fields, 32)) {
7304 log_packet_detailed(" field 'diplchance_initial_odds' has changed");
7305#ifdef FREECIV_JSON_CONNECTION
7306 field_addr.name = "diplchance_initial_odds";
7307#endif /* FREECIV_JSON_CONNECTION */
7308 e = 0;
7310 if (e) {
7311 log_packet_detailed("'diplchance_initial_odds' field error detected");
7312 }
7313 }
7314 if (BV_ISSET(fields, 33)) {
7315 log_packet_detailed(" field 'diplomacy' has changed");
7316#ifdef FREECIV_JSON_CONNECTION
7317 field_addr.name = "diplomacy";
7318#endif /* FREECIV_JSON_CONNECTION */
7319 e = 0;
7320 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->diplomacy);
7321 if (e) {
7322 log_packet_detailed("'diplomacy' field error detected");
7323 }
7324 }
7325 /* field 34 is folded into the header */
7326 if (BV_ISSET(fields, 35)) {
7327 log_packet_detailed(" field 'food_cost' has changed");
7328#ifdef FREECIV_JSON_CONNECTION
7329 field_addr.name = "food_cost";
7330#endif /* FREECIV_JSON_CONNECTION */
7331 e = 0;
7332 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_cost);
7333 if (e) {
7334 log_packet_detailed("'food_cost' field error detected");
7335 }
7336 }
7337 if (BV_ISSET(fields, 36)) {
7338 log_packet_detailed(" field 'foodbox' has changed");
7339#ifdef FREECIV_JSON_CONNECTION
7340 field_addr.name = "foodbox";
7341#endif /* FREECIV_JSON_CONNECTION */
7342 e = 0;
7343 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->foodbox);
7344 if (e) {
7345 log_packet_detailed("'foodbox' field error detected");
7346 }
7347 }
7348 if (BV_ISSET(fields, 37)) {
7349 log_packet_detailed(" field 'forced_gold' has changed");
7350#ifdef FREECIV_JSON_CONNECTION
7351 field_addr.name = "forced_gold";
7352#endif /* FREECIV_JSON_CONNECTION */
7353 e = 0;
7354 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_gold);
7355 if (e) {
7356 log_packet_detailed("'forced_gold' field error detected");
7357 }
7358 }
7359 if (BV_ISSET(fields, 38)) {
7360 log_packet_detailed(" field 'forced_luxury' has changed");
7361#ifdef FREECIV_JSON_CONNECTION
7362 field_addr.name = "forced_luxury";
7363#endif /* FREECIV_JSON_CONNECTION */
7364 e = 0;
7365 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_luxury);
7366 if (e) {
7367 log_packet_detailed("'forced_luxury' field error detected");
7368 }
7369 }
7370 if (BV_ISSET(fields, 39)) {
7371 log_packet_detailed(" field 'forced_science' has changed");
7372#ifdef FREECIV_JSON_CONNECTION
7373 field_addr.name = "forced_science";
7374#endif /* FREECIV_JSON_CONNECTION */
7375 e = 0;
7376 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_science);
7377 if (e) {
7378 log_packet_detailed("'forced_science' field error detected");
7379 }
7380 }
7381 if (BV_ISSET(fields, 40)) {
7382 log_packet_detailed(" field 'fulltradesize' has changed");
7383#ifdef FREECIV_JSON_CONNECTION
7384 field_addr.name = "fulltradesize";
7385#endif /* FREECIV_JSON_CONNECTION */
7386 e = 0;
7387 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fulltradesize);
7388 if (e) {
7389 log_packet_detailed("'fulltradesize' field error detected");
7390 }
7391 }
7392 if (BV_ISSET(fields, 41)) {
7393 log_packet_detailed(" field 'trade_world_rel_pct' has changed");
7394#ifdef FREECIV_JSON_CONNECTION
7395 field_addr.name = "trade_world_rel_pct";
7396#endif /* FREECIV_JSON_CONNECTION */
7397 e = 0;
7398 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_world_rel_pct);
7399 if (e) {
7400 log_packet_detailed("'trade_world_rel_pct' field error detected");
7401 }
7402 }
7403 if (BV_ISSET(fields, 42)) {
7404 log_packet_detailed(" field 'min_trade_route_val' has changed");
7405#ifdef FREECIV_JSON_CONNECTION
7406 field_addr.name = "min_trade_route_val";
7407#endif /* FREECIV_JSON_CONNECTION */
7408 e = 0;
7409 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_trade_route_val);
7410 if (e) {
7411 log_packet_detailed("'min_trade_route_val' field error detected");
7412 }
7413 }
7414 /* field 43 is folded into the header */
7415 if (BV_ISSET(fields, 44)) {
7416 log_packet_detailed(" field 'goods_selection' has changed");
7417#ifdef FREECIV_JSON_CONNECTION
7418 field_addr.name = "goods_selection";
7419#endif /* FREECIV_JSON_CONNECTION */
7420 e = 0;
7421 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods_selection);
7422 if (e) {
7423 log_packet_detailed("'goods_selection' field error detected");
7424 }
7425 }
7426 if (BV_ISSET(fields, 45)) {
7427 log_packet_detailed(" field 'global_advance_count' has changed");
7428#ifdef FREECIV_JSON_CONNECTION
7429 field_addr.name = "global_advance_count";
7430#endif /* FREECIV_JSON_CONNECTION */
7431 e = 0;
7432 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_advance_count);
7433 if (e) {
7434 log_packet_detailed("'global_advance_count' field error detected");
7435 }
7436 }
7437 if (BV_ISSET(fields, 46)) {
7438 log_packet_detailed(" field 'global_advances' has changed");
7439#ifdef FREECIV_JSON_CONNECTION
7440 field_addr.name = "global_advances";
7441#endif /* FREECIV_JSON_CONNECTION */
7442 e = 0;
7444 {
7445 int i;
7446
7447#ifdef FREECIV_JSON_CONNECTION
7448 size_t count_i = 0;
7449
7450 /* Create the array. */
7451 e |= DIO_PUT(farray, &dout, &field_addr, 0);
7452
7453 /* Enter array. */
7454 field_addr.sub_location = plocation_elem_new(0);
7455#endif /* FREECIV_JSON_CONNECTION */
7456
7457 for (i = 0; i < A_LAST; i++) {
7458 differ = (old->global_advances[i] != real_packet->global_advances[i]);
7459
7460 if (differ) {
7461#ifdef FREECIV_JSON_CONNECTION
7462 /* Append next diff array element. */
7463 field_addr.sub_location->number = -1;
7464
7465 /* Create the diff array element. */
7466 e |= DIO_PUT(farray, &dout, &field_addr, 2);
7467
7468 /* Enter diff array element (start at the index address). */
7469 field_addr.sub_location->number = count_i++;
7470 field_addr.sub_location->sub_location = plocation_elem_new(0);
7471#endif /* FREECIV_JSON_CONNECTION */
7472
7473 /* Write the index */
7474#if A_LAST <= MAX_UINT8
7475 e |= DIO_PUT(uint8, &dout, &field_addr, i);
7476#else
7477 e |= DIO_PUT(uint16, &dout, &field_addr, i);
7478#endif
7479
7480#ifdef FREECIV_JSON_CONNECTION
7481 /* Content address. */
7482 field_addr.sub_location->sub_location->number = 1;
7483#endif /* FREECIV_JSON_CONNECTION */
7484
7485 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_advances[i]);
7486
7487#ifdef FREECIV_JSON_CONNECTION
7488 /* Exit diff array element. */
7489 FC_FREE(field_addr.sub_location->sub_location);
7490#endif /* FREECIV_JSON_CONNECTION */
7491 }
7492 }
7493
7494#ifdef FREECIV_JSON_CONNECTION
7495 /* Append diff array element. */
7496 field_addr.sub_location->number = -1;
7497
7498 /* Create the terminating diff array element. */
7499 e |= DIO_PUT(farray, &dout, &field_addr, 1);
7500
7501 /* Enter diff array element (start at the index address). */
7502 field_addr.sub_location->number = count_i;
7503 field_addr.sub_location->sub_location = plocation_elem_new(0);
7504#endif /* FREECIV_JSON_CONNECTION */
7505
7506 /* Write the sentinel value */
7507#if A_LAST <= MAX_UINT8
7508 e |= DIO_PUT(uint8, &dout, &field_addr, A_LAST);
7509#else
7510 e |= DIO_PUT(uint16, &dout, &field_addr, A_LAST);
7511#endif
7512
7513#ifdef FREECIV_JSON_CONNECTION
7514 /* Exit diff array element. */
7515 FC_FREE(field_addr.sub_location->sub_location);
7516
7517 /* Exit array. */
7518 FC_FREE(field_addr.sub_location);
7519#endif /* FREECIV_JSON_CONNECTION */
7520 }
7521 if (e) {
7522 log_packet_detailed("'global_advances' field error detected");
7523 }
7524 }
7525 /* field 47 is folded into the header */
7526 if (BV_ISSET(fields, 48)) {
7527 log_packet_detailed(" field 'globalwarming' has changed");
7528#ifdef FREECIV_JSON_CONNECTION
7529 field_addr.name = "globalwarming";
7530#endif /* FREECIV_JSON_CONNECTION */
7531 e = 0;
7532 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->globalwarming);
7533 if (e) {
7534 log_packet_detailed("'globalwarming' field error detected");
7535 }
7536 }
7537 if (BV_ISSET(fields, 49)) {
7538 log_packet_detailed(" field 'gold' has changed");
7539#ifdef FREECIV_JSON_CONNECTION
7540 field_addr.name = "gold";
7541#endif /* FREECIV_JSON_CONNECTION */
7542 e = 0;
7543 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
7544 if (e) {
7545 log_packet_detailed("'gold' field error detected");
7546 }
7547 }
7548 if (BV_ISSET(fields, 50)) {
7549 log_packet_detailed(" field 'gold_upkeep_style' has changed");
7550#ifdef FREECIV_JSON_CONNECTION
7551 field_addr.name = "gold_upkeep_style";
7552#endif /* FREECIV_JSON_CONNECTION */
7553 e = 0;
7554 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gold_upkeep_style);
7555 if (e) {
7556 log_packet_detailed("'gold_upkeep_style' field error detected");
7557 }
7558 }
7559 /* field 51 is folded into the header */
7560 if (BV_ISSET(fields, 52)) {
7561 log_packet_detailed(" field 'infrapoints' has changed");
7562#ifdef FREECIV_JSON_CONNECTION
7563 field_addr.name = "infrapoints";
7564#endif /* FREECIV_JSON_CONNECTION */
7565 e = 0;
7566 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
7567 if (e) {
7568 log_packet_detailed("'infrapoints' field error detected");
7569 }
7570 }
7571 if (BV_ISSET(fields, 53)) {
7572 log_packet_detailed(" field 'revolentype' has changed");
7573#ifdef FREECIV_JSON_CONNECTION
7574 field_addr.name = "revolentype";
7575#endif /* FREECIV_JSON_CONNECTION */
7576 e = 0;
7577 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->revolentype);
7578 if (e) {
7579 log_packet_detailed("'revolentype' field error detected");
7580 }
7581 }
7582 if (BV_ISSET(fields, 54)) {
7583 log_packet_detailed(" field 'default_government_id' has changed");
7584#ifdef FREECIV_JSON_CONNECTION
7585 field_addr.name = "default_government_id";
7586#endif /* FREECIV_JSON_CONNECTION */
7587 e = 0;
7588 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_government_id);
7589 if (e) {
7590 log_packet_detailed("'default_government_id' field error detected");
7591 }
7592 }
7593 if (BV_ISSET(fields, 55)) {
7594 log_packet_detailed(" field 'government_during_revolution_id' has changed");
7595#ifdef FREECIV_JSON_CONNECTION
7596 field_addr.name = "government_during_revolution_id";
7597#endif /* FREECIV_JSON_CONNECTION */
7598 e = 0;
7599 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government_during_revolution_id);
7600 if (e) {
7601 log_packet_detailed("'government_during_revolution_id' field error detected");
7602 }
7603 }
7604 if (BV_ISSET(fields, 56)) {
7605 log_packet_detailed(" field 'granary_food_inc' has changed");
7606#ifdef FREECIV_JSON_CONNECTION
7607 field_addr.name = "granary_food_inc";
7608#endif /* FREECIV_JSON_CONNECTION */
7609 e = 0;
7610 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_inc);
7611 if (e) {
7612 log_packet_detailed("'granary_food_inc' field error detected");
7613 }
7614 }
7615 if (BV_ISSET(fields, 57)) {
7616 log_packet_detailed(" field 'granary_food_ini' has changed");
7617#ifdef FREECIV_JSON_CONNECTION
7618 field_addr.name = "granary_food_ini";
7619#endif /* FREECIV_JSON_CONNECTION */
7620 e = 0;
7621 {
7622 int i;
7623
7624#ifdef FREECIV_JSON_CONNECTION
7625 /* Create the array. */
7627
7628 /* Enter the array. */
7629 field_addr.sub_location = plocation_elem_new(0);
7630#endif /* FREECIV_JSON_CONNECTION */
7631
7632 for (i = 0; i < MAX_GRANARY_INIS; i++) {
7633#ifdef FREECIV_JSON_CONNECTION
7634 /* Next array element. */
7635 field_addr.sub_location->number = i;
7636#endif /* FREECIV_JSON_CONNECTION */
7637
7638 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_ini[i]);
7639 }
7640
7641#ifdef FREECIV_JSON_CONNECTION
7642 /* Exit array. */
7643 FC_FREE(field_addr.sub_location);
7644#endif /* FREECIV_JSON_CONNECTION */
7645 }
7646 if (e) {
7647 log_packet_detailed("'granary_food_ini' field error detected");
7648 }
7649 }
7650 if (BV_ISSET(fields, 58)) {
7651 log_packet_detailed(" field 'granary_num_inis' has changed");
7652#ifdef FREECIV_JSON_CONNECTION
7653 field_addr.name = "granary_num_inis";
7654#endif /* FREECIV_JSON_CONNECTION */
7655 e = 0;
7656 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->granary_num_inis);
7657 if (e) {
7658 log_packet_detailed("'granary_num_inis' field error detected");
7659 }
7660 }
7661 if (BV_ISSET(fields, 59)) {
7662 log_packet_detailed(" field 'great_wonder_owners' has changed");
7663#ifdef FREECIV_JSON_CONNECTION
7664 field_addr.name = "great_wonder_owners";
7665#endif /* FREECIV_JSON_CONNECTION */
7666 e = 0;
7668 {
7669 int i;
7670
7671#ifdef FREECIV_JSON_CONNECTION
7672 size_t count_i = 0;
7673
7674 /* Create the array. */
7675 e |= DIO_PUT(farray, &dout, &field_addr, 0);
7676
7677 /* Enter array. */
7678 field_addr.sub_location = plocation_elem_new(0);
7679#endif /* FREECIV_JSON_CONNECTION */
7680
7681 for (i = 0; i < B_LAST; i++) {
7682 differ = (old->great_wonder_owners[i] != real_packet->great_wonder_owners[i]);
7683
7684 if (differ) {
7685#ifdef FREECIV_JSON_CONNECTION
7686 /* Append next diff array element. */
7687 field_addr.sub_location->number = -1;
7688
7689 /* Create the diff array element. */
7690 e |= DIO_PUT(farray, &dout, &field_addr, 2);
7691
7692 /* Enter diff array element (start at the index address). */
7693 field_addr.sub_location->number = count_i++;
7694 field_addr.sub_location->sub_location = plocation_elem_new(0);
7695#endif /* FREECIV_JSON_CONNECTION */
7696
7697 /* Write the index */
7698#if B_LAST <= MAX_UINT8
7699 e |= DIO_PUT(uint8, &dout, &field_addr, i);
7700#else
7701 e |= DIO_PUT(uint16, &dout, &field_addr, i);
7702#endif
7703
7704#ifdef FREECIV_JSON_CONNECTION
7705 /* Content address. */
7706 field_addr.sub_location->sub_location->number = 1;
7707#endif /* FREECIV_JSON_CONNECTION */
7708
7709 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->great_wonder_owners[i]);
7710
7711#ifdef FREECIV_JSON_CONNECTION
7712 /* Exit diff array element. */
7713 FC_FREE(field_addr.sub_location->sub_location);
7714#endif /* FREECIV_JSON_CONNECTION */
7715 }
7716 }
7717
7718#ifdef FREECIV_JSON_CONNECTION
7719 /* Append diff array element. */
7720 field_addr.sub_location->number = -1;
7721
7722 /* Create the terminating diff array element. */
7723 e |= DIO_PUT(farray, &dout, &field_addr, 1);
7724
7725 /* Enter diff array element (start at the index address). */
7726 field_addr.sub_location->number = count_i;
7727 field_addr.sub_location->sub_location = plocation_elem_new(0);
7728#endif /* FREECIV_JSON_CONNECTION */
7729
7730 /* Write the sentinel value */
7731#if B_LAST <= MAX_UINT8
7732 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
7733#else
7734 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
7735#endif
7736
7737#ifdef FREECIV_JSON_CONNECTION
7738 /* Exit diff array element. */
7739 FC_FREE(field_addr.sub_location->sub_location);
7740
7741 /* Exit array. */
7742 FC_FREE(field_addr.sub_location);
7743#endif /* FREECIV_JSON_CONNECTION */
7744 }
7745 if (e) {
7746 log_packet_detailed("'great_wonder_owners' field error detected");
7747 }
7748 }
7749 if (BV_ISSET(fields, 60)) {
7750 log_packet_detailed(" field 'happy_cost' has changed");
7751#ifdef FREECIV_JSON_CONNECTION
7752 field_addr.name = "happy_cost";
7753#endif /* FREECIV_JSON_CONNECTION */
7754 e = 0;
7755 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->happy_cost);
7756 if (e) {
7757 log_packet_detailed("'happy_cost' field error detected");
7758 }
7759 }
7760 if (BV_ISSET(fields, 61)) {
7761 log_packet_detailed(" field 'happyborders' has changed");
7762#ifdef FREECIV_JSON_CONNECTION
7763 field_addr.name = "happyborders";
7764#endif /* FREECIV_JSON_CONNECTION */
7765 e = 0;
7766 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happyborders);
7767 if (e) {
7768 log_packet_detailed("'happyborders' field error detected");
7769 }
7770 }
7771 if (BV_ISSET(fields, 62)) {
7772 log_packet_detailed(" field 'heating' has changed");
7773#ifdef FREECIV_JSON_CONNECTION
7774 field_addr.name = "heating";
7775#endif /* FREECIV_JSON_CONNECTION */
7776 e = 0;
7777 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->heating);
7778 if (e) {
7779 log_packet_detailed("'heating' field error detected");
7780 }
7781 }
7782 if (BV_ISSET(fields, 63)) {
7783 log_packet_detailed(" field 'illness_base_factor' has changed");
7784#ifdef FREECIV_JSON_CONNECTION
7785 field_addr.name = "illness_base_factor";
7786#endif /* FREECIV_JSON_CONNECTION */
7787 e = 0;
7788 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_base_factor);
7789 if (e) {
7790 log_packet_detailed("'illness_base_factor' field error detected");
7791 }
7792 }
7793 if (BV_ISSET(fields, 64)) {
7794 log_packet_detailed(" field 'illness_min_size' has changed");
7795#ifdef FREECIV_JSON_CONNECTION
7796 field_addr.name = "illness_min_size";
7797#endif /* FREECIV_JSON_CONNECTION */
7798 e = 0;
7799 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->illness_min_size);
7800 if (e) {
7801 log_packet_detailed("'illness_min_size' field error detected");
7802 }
7803 }
7804 /* field 65 is folded into the header */
7805 if (BV_ISSET(fields, 66)) {
7806 log_packet_detailed(" field 'illness_pollution_factor' has changed");
7807#ifdef FREECIV_JSON_CONNECTION
7808 field_addr.name = "illness_pollution_factor";
7809#endif /* FREECIV_JSON_CONNECTION */
7810 e = 0;
7811 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_pollution_factor);
7812 if (e) {
7813 log_packet_detailed("'illness_pollution_factor' field error detected");
7814 }
7815 }
7816 if (BV_ISSET(fields, 67)) {
7817 log_packet_detailed(" field 'illness_trade_infection' has changed");
7818#ifdef FREECIV_JSON_CONNECTION
7819 field_addr.name = "illness_trade_infection";
7820#endif /* FREECIV_JSON_CONNECTION */
7821 e = 0;
7822 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade_infection);
7823 if (e) {
7824 log_packet_detailed("'illness_trade_infection' field error detected");
7825 }
7826 }
7827 if (BV_ISSET(fields, 68)) {
7828 log_packet_detailed(" field 'init_city_radius_sq' has changed");
7829#ifdef FREECIV_JSON_CONNECTION
7830 field_addr.name = "init_city_radius_sq";
7831#endif /* FREECIV_JSON_CONNECTION */
7832 e = 0;
7833 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_city_radius_sq);
7834 if (e) {
7835 log_packet_detailed("'init_city_radius_sq' field error detected");
7836 }
7837 }
7838 /* field 69 is folded into the header */
7839 /* field 70 is folded into the header */
7840 /* field 71 is folded into the header */
7841 /* field 72 is folded into the header */
7842 /* field 73 is folded into the header */
7843 /* field 74 is folded into the header */
7844 /* field 75 is folded into the header */
7845 /* field 76 is folded into the header */
7846 if (BV_ISSET(fields, 77)) {
7847 log_packet_detailed(" field 'low_firepower_badwallattacker' has changed");
7848#ifdef FREECIV_JSON_CONNECTION
7849 field_addr.name = "low_firepower_badwallattacker";
7850#endif /* FREECIV_JSON_CONNECTION */
7851 e = 0;
7852 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_badwallattacker);
7853 if (e) {
7854 log_packet_detailed("'low_firepower_badwallattacker' field error detected");
7855 }
7856 }
7857 if (BV_ISSET(fields, 78)) {
7858 log_packet_detailed(" field 'low_firepower_pearl_harbour' has changed");
7859#ifdef FREECIV_JSON_CONNECTION
7860 field_addr.name = "low_firepower_pearl_harbour";
7861#endif /* FREECIV_JSON_CONNECTION */
7862 e = 0;
7863 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_pearl_harbour);
7864 if (e) {
7865 log_packet_detailed("'low_firepower_pearl_harbour' field error detected");
7866 }
7867 }
7868 if (BV_ISSET(fields, 79)) {
7869 log_packet_detailed(" field 'low_firepower_combat_bonus' has changed");
7870#ifdef FREECIV_JSON_CONNECTION
7871 field_addr.name = "low_firepower_combat_bonus";
7872#endif /* FREECIV_JSON_CONNECTION */
7873 e = 0;
7874 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_combat_bonus);
7875 if (e) {
7876 log_packet_detailed("'low_firepower_combat_bonus' field error detected");
7877 }
7878 }
7879 if (BV_ISSET(fields, 80)) {
7880 log_packet_detailed(" field 'low_firepower_nonnat_bombard' has changed");
7881#ifdef FREECIV_JSON_CONNECTION
7882 field_addr.name = "low_firepower_nonnat_bombard";
7883#endif /* FREECIV_JSON_CONNECTION */
7884 e = 0;
7885 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_nonnat_bombard);
7886 if (e) {
7887 log_packet_detailed("'low_firepower_nonnat_bombard' field error detected");
7888 }
7889 }
7890 if (BV_ISSET(fields, 81)) {
7891 log_packet_detailed(" field 'nuke_pop_loss_pct' has changed");
7892#ifdef FREECIV_JSON_CONNECTION
7893 field_addr.name = "nuke_pop_loss_pct";
7894#endif /* FREECIV_JSON_CONNECTION */
7895 e = 0;
7896 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_pop_loss_pct);
7897 if (e) {
7898 log_packet_detailed("'nuke_pop_loss_pct' field error detected");
7899 }
7900 }
7901 if (BV_ISSET(fields, 82)) {
7902 log_packet_detailed(" field 'nuke_defender_survival_chance_pct' has changed");
7903#ifdef FREECIV_JSON_CONNECTION
7904 field_addr.name = "nuke_defender_survival_chance_pct";
7905#endif /* FREECIV_JSON_CONNECTION */
7906 e = 0;
7907 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_defender_survival_chance_pct);
7908 if (e) {
7909 log_packet_detailed("'nuke_defender_survival_chance_pct' field error detected");
7910 }
7911 }
7912 if (BV_ISSET(fields, 83)) {
7913 log_packet_detailed(" field 'min_city_center_output' has changed");
7914#ifdef FREECIV_JSON_CONNECTION
7915 field_addr.name = "min_city_center_output";
7916#endif /* FREECIV_JSON_CONNECTION */
7917 e = 0;
7918 {
7919 int i;
7920
7921#ifdef FREECIV_JSON_CONNECTION
7922 /* Create the array. */
7923 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
7924
7925 /* Enter the array. */
7926 field_addr.sub_location = plocation_elem_new(0);
7927#endif /* FREECIV_JSON_CONNECTION */
7928
7929 for (i = 0; i < O_LAST; i++) {
7930#ifdef FREECIV_JSON_CONNECTION
7931 /* Next array element. */
7932 field_addr.sub_location->number = i;
7933#endif /* FREECIV_JSON_CONNECTION */
7934
7935 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_city_center_output[i]);
7936 }
7937
7938#ifdef FREECIV_JSON_CONNECTION
7939 /* Exit array. */
7940 FC_FREE(field_addr.sub_location);
7941#endif /* FREECIV_JSON_CONNECTION */
7942 }
7943 if (e) {
7944 log_packet_detailed("'min_city_center_output' field error detected");
7945 }
7946 }
7947 /* field 84 is folded into the header */
7948 /* field 85 is folded into the header */
7949 /* field 86 is folded into the header */
7950 if (BV_ISSET(fields, 87)) {
7951 log_packet_detailed(" field 'notradesize' has changed");
7952#ifdef FREECIV_JSON_CONNECTION
7953 field_addr.name = "notradesize";
7954#endif /* FREECIV_JSON_CONNECTION */
7955 e = 0;
7956 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->notradesize);
7957 if (e) {
7958 log_packet_detailed("'notradesize' field error detected");
7959 }
7960 }
7961 /* field 88 is folded into the header */
7962 if (BV_ISSET(fields, 89)) {
7963 log_packet_detailed(" field 'nuclearwinter' has changed");
7964#ifdef FREECIV_JSON_CONNECTION
7965 field_addr.name = "nuclearwinter";
7966#endif /* FREECIV_JSON_CONNECTION */
7967 e = 0;
7968 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->nuclearwinter);
7969 if (e) {
7970 log_packet_detailed("'nuclearwinter' field error detected");
7971 }
7972 }
7973 if (BV_ISSET(fields, 90)) {
7974 log_packet_detailed(" field 'phase' has changed");
7975#ifdef FREECIV_JSON_CONNECTION
7976 field_addr.name = "phase";
7977#endif /* FREECIV_JSON_CONNECTION */
7978 e = 0;
7979 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
7980 if (e) {
7981 log_packet_detailed("'phase' field error detected");
7982 }
7983 }
7984 if (BV_ISSET(fields, 91)) {
7985 log_packet_detailed(" field 'phase_mode' has changed");
7986#ifdef FREECIV_JSON_CONNECTION
7987 field_addr.name = "phase_mode";
7988#endif /* FREECIV_JSON_CONNECTION */
7989 e = 0;
7990 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->phase_mode);
7991 if (e) {
7992 log_packet_detailed("'phase_mode' field error detected");
7993 }
7994 }
7995 /* field 92 is folded into the header */
7996 /* field 93 is folded into the header */
7997 /* field 94 is folded into the header */
7998 /* field 95 is folded into the header */
7999 /* field 96 is folded into the header */
8000 /* field 97 is folded into the header */
8001 /* field 98 is folded into the header */
8002 /* field 99 is folded into the header */
8003 if (BV_ISSET(fields, 100)) {
8004 log_packet_detailed(" field 'rapturedelay' has changed");
8005#ifdef FREECIV_JSON_CONNECTION
8006 field_addr.name = "rapturedelay";
8007#endif /* FREECIV_JSON_CONNECTION */
8008 e = 0;
8009 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapturedelay);
8010 if (e) {
8011 log_packet_detailed("'rapturedelay' field error detected");
8012 }
8013 }
8014 if (BV_ISSET(fields, 101)) {
8015 log_packet_detailed(" field 'disasters' has changed");
8016#ifdef FREECIV_JSON_CONNECTION
8017 field_addr.name = "disasters";
8018#endif /* FREECIV_JSON_CONNECTION */
8019 e = 0;
8020 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disasters);
8021 if (e) {
8022 log_packet_detailed("'disasters' field error detected");
8023 }
8024 }
8025 /* field 102 is folded into the header */
8026 /* field 103 is folded into the header */
8027 if (BV_ISSET(fields, 104)) {
8028 log_packet_detailed(" field 'sciencebox' has changed");
8029#ifdef FREECIV_JSON_CONNECTION
8030 field_addr.name = "sciencebox";
8031#endif /* FREECIV_JSON_CONNECTION */
8032 e = 0;
8033 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->sciencebox);
8034 if (e) {
8035 log_packet_detailed("'sciencebox' field error detected");
8036 }
8037 }
8038 if (BV_ISSET(fields, 105)) {
8039 log_packet_detailed(" field 'shieldbox' has changed");
8040#ifdef FREECIV_JSON_CONNECTION
8041 field_addr.name = "shieldbox";
8042#endif /* FREECIV_JSON_CONNECTION */
8043 e = 0;
8044 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->shieldbox);
8045 if (e) {
8046 log_packet_detailed("'shieldbox' field error detected");
8047 }
8048 }
8049 if (BV_ISSET(fields, 106)) {
8050 log_packet_detailed(" field 'skill_level' has changed");
8051#ifdef FREECIV_JSON_CONNECTION
8052 field_addr.name = "skill_level";
8053#endif /* FREECIV_JSON_CONNECTION */
8054 e = 0;
8055 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->skill_level);
8056 if (e) {
8057 log_packet_detailed("'skill_level' field error detected");
8058 }
8059 }
8060 if (BV_ISSET(fields, 107)) {
8061 log_packet_detailed(" field 'victory_conditions' has changed");
8062#ifdef FREECIV_JSON_CONNECTION
8063 field_addr.name = "victory_conditions";
8064#endif /* FREECIV_JSON_CONNECTION */
8065 e = 0;
8066 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->victory_conditions);
8067 if (e) {
8068 log_packet_detailed("'victory_conditions' field error detected");
8069 }
8070 }
8071 /* field 108 is folded into the header */
8072 if (BV_ISSET(fields, 109)) {
8073 log_packet_detailed(" field 'tech' has changed");
8074#ifdef FREECIV_JSON_CONNECTION
8075 field_addr.name = "tech";
8076#endif /* FREECIV_JSON_CONNECTION */
8077 e = 0;
8078 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech);
8079 if (e) {
8080 log_packet_detailed("'tech' field error detected");
8081 }
8082 }
8083 if (BV_ISSET(fields, 110)) {
8084 log_packet_detailed(" field 'tech_cost_style' has changed");
8085#ifdef FREECIV_JSON_CONNECTION
8086 field_addr.name = "tech_cost_style";
8087#endif /* FREECIV_JSON_CONNECTION */
8088 e = 0;
8089 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_cost_style);
8090 if (e) {
8091 log_packet_detailed("'tech_cost_style' field error detected");
8092 }
8093 }
8094 if (BV_ISSET(fields, 111)) {
8095 log_packet_detailed(" field 'tech_leakage' has changed");
8096#ifdef FREECIV_JSON_CONNECTION
8097 field_addr.name = "tech_leakage";
8098#endif /* FREECIV_JSON_CONNECTION */
8099 e = 0;
8100 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leakage);
8101 if (e) {
8102 log_packet_detailed("'tech_leakage' field error detected");
8103 }
8104 }
8105 if (BV_ISSET(fields, 112)) {
8106 log_packet_detailed(" field 'tech_upkeep_divider' has changed");
8107#ifdef FREECIV_JSON_CONNECTION
8108 field_addr.name = "tech_upkeep_divider";
8109#endif /* FREECIV_JSON_CONNECTION */
8110 e = 0;
8111 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_divider);
8112 if (e) {
8113 log_packet_detailed("'tech_upkeep_divider' field error detected");
8114 }
8115 }
8116 if (BV_ISSET(fields, 113)) {
8117 log_packet_detailed(" field 'tech_upkeep_style' has changed");
8118#ifdef FREECIV_JSON_CONNECTION
8119 field_addr.name = "tech_upkeep_style";
8120#endif /* FREECIV_JSON_CONNECTION */
8121 e = 0;
8122 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_upkeep_style);
8123 if (e) {
8124 log_packet_detailed("'tech_upkeep_style' field error detected");
8125 }
8126 }
8127 if (BV_ISSET(fields, 114)) {
8128 log_packet_detailed(" field 'techloss_forgiveness' has changed");
8129#ifdef FREECIV_JSON_CONNECTION
8130 field_addr.name = "techloss_forgiveness";
8131#endif /* FREECIV_JSON_CONNECTION */
8132 e = 0;
8133 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->techloss_forgiveness);
8134 if (e) {
8135 log_packet_detailed("'techloss_forgiveness' field error detected");
8136 }
8137 }
8138 if (BV_ISSET(fields, 115)) {
8139 log_packet_detailed(" field 'free_tech_method' has changed");
8140#ifdef FREECIV_JSON_CONNECTION
8141 field_addr.name = "free_tech_method";
8142#endif /* FREECIV_JSON_CONNECTION */
8143 e = 0;
8144 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->free_tech_method);
8145 if (e) {
8146 log_packet_detailed("'free_tech_method' field error detected");
8147 }
8148 }
8149 if (BV_ISSET(fields, 116)) {
8150 log_packet_detailed(" field 'gameloss_style' has changed");
8151#ifdef FREECIV_JSON_CONNECTION
8152 field_addr.name = "gameloss_style";
8153#endif /* FREECIV_JSON_CONNECTION */
8154 e = 0;
8155 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gameloss_style);
8156 if (e) {
8157 log_packet_detailed("'gameloss_style' field error detected");
8158 }
8159 }
8160 if (BV_ISSET(fields, 117)) {
8161 log_packet_detailed(" field 'timeout' has changed");
8162#ifdef FREECIV_JSON_CONNECTION
8163 field_addr.name = "timeout";
8164#endif /* FREECIV_JSON_CONNECTION */
8165 e = 0;
8166 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->timeout);
8167 if (e) {
8168 log_packet_detailed("'timeout' field error detected");
8169 }
8170 }
8171 if (BV_ISSET(fields, 118)) {
8172 log_packet_detailed(" field 'first_timeout' has changed");
8173#ifdef FREECIV_JSON_CONNECTION
8174 field_addr.name = "first_timeout";
8175#endif /* FREECIV_JSON_CONNECTION */
8176 e = 0;
8177 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->first_timeout);
8178 if (e) {
8179 log_packet_detailed("'first_timeout' field error detected");
8180 }
8181 }
8182 /* field 119 is folded into the header */
8183 if (BV_ISSET(fields, 120)) {
8184 log_packet_detailed(" field 'trademindist' has changed");
8185#ifdef FREECIV_JSON_CONNECTION
8186 field_addr.name = "trademindist";
8187#endif /* FREECIV_JSON_CONNECTION */
8188 e = 0;
8189 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trademindist);
8190 if (e) {
8191 log_packet_detailed("'trademindist' field error detected");
8192 }
8193 }
8194 if (BV_ISSET(fields, 121)) {
8195 log_packet_detailed(" field 'trade_revenue_style' has changed");
8196#ifdef FREECIV_JSON_CONNECTION
8197 field_addr.name = "trade_revenue_style";
8198#endif /* FREECIV_JSON_CONNECTION */
8199 e = 0;
8200 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_revenue_style);
8201 if (e) {
8202 log_packet_detailed("'trade_revenue_style' field error detected");
8203 }
8204 }
8205 /* field 122 is folded into the header */
8206 /* field 123 is folded into the header */
8207 /* field 124 is folded into the header */
8208 if (BV_ISSET(fields, 125)) {
8209 log_packet_detailed(" field 'turn' has changed");
8210#ifdef FREECIV_JSON_CONNECTION
8211 field_addr.name = "turn";
8212#endif /* FREECIV_JSON_CONNECTION */
8213 e = 0;
8214 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
8215 if (e) {
8216 log_packet_detailed("'turn' field error detected");
8217 }
8218 }
8219 if (BV_ISSET(fields, 126)) {
8220 log_packet_detailed(" field 'warminglevel' has changed");
8221#ifdef FREECIV_JSON_CONNECTION
8222 field_addr.name = "warminglevel";
8223#endif /* FREECIV_JSON_CONNECTION */
8224 e = 0;
8225 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->warminglevel);
8226 if (e) {
8227 log_packet_detailed("'warminglevel' field error detected");
8228 }
8229 }
8230 if (BV_ISSET(fields, 127)) {
8231 log_packet_detailed(" field 'year' has changed");
8232#ifdef FREECIV_JSON_CONNECTION
8233 field_addr.name = "year";
8234#endif /* FREECIV_JSON_CONNECTION */
8235 e = 0;
8236 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
8237 if (e) {
8238 log_packet_detailed("'year' field error detected");
8239 }
8240 }
8241 /* field 128 is folded into the header */
8242 if (BV_ISSET(fields, 129)) {
8243 log_packet_detailed(" field 'top_cities_count' has changed");
8244#ifdef FREECIV_JSON_CONNECTION
8245 field_addr.name = "top_cities_count";
8246#endif /* FREECIV_JSON_CONNECTION */
8247 e = 0;
8248 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->top_cities_count);
8249 if (e) {
8250 log_packet_detailed("'top_cities_count' field error detected");
8251 }
8252 }
8253 if (BV_ISSET(fields, 130)) {
8254 log_packet_detailed(" field 'fragment_count' has changed");
8255#ifdef FREECIV_JSON_CONNECTION
8256 field_addr.name = "fragment_count";
8257#endif /* FREECIV_JSON_CONNECTION */
8258 e = 0;
8259 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragment_count);
8260 if (e) {
8261 log_packet_detailed("'fragment_count' field error detected");
8262 }
8263 }
8264 /* field 131 is folded into the header */
8265 if (BV_ISSET(fields, 132)) {
8266 log_packet_detailed(" field 'civil_war_bonus_celebrating' has changed");
8267#ifdef FREECIV_JSON_CONNECTION
8268 field_addr.name = "civil_war_bonus_celebrating";
8269#endif /* FREECIV_JSON_CONNECTION */
8270 e = 0;
8271 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->civil_war_bonus_celebrating);
8272 if (e) {
8273 log_packet_detailed("'civil_war_bonus_celebrating' field error detected");
8274 }
8275 }
8276 if (BV_ISSET(fields, 133)) {
8277 log_packet_detailed(" field 'civil_war_bonus_unhappy' has changed");
8278#ifdef FREECIV_JSON_CONNECTION
8279 field_addr.name = "civil_war_bonus_unhappy";
8280#endif /* FREECIV_JSON_CONNECTION */
8281 e = 0;
8282 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->civil_war_bonus_unhappy);
8283 if (e) {
8284 log_packet_detailed("'civil_war_bonus_unhappy' field error detected");
8285 }
8286 }
8287 if (BV_ISSET(fields, 134)) {
8288 log_packet_detailed(" field 'granularity' has changed");
8289#ifdef FREECIV_JSON_CONNECTION
8290 field_addr.name = "granularity";
8291#endif /* FREECIV_JSON_CONNECTION */
8292 e = 0;
8293 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granularity);
8294 if (e) {
8295 log_packet_detailed("'granularity' field error detected");
8296 }
8297 }
8298 if (BV_ISSET(fields, 135)) {
8299 log_packet_detailed(" field 'small_wonder_visibility' has changed");
8300#ifdef FREECIV_JSON_CONNECTION
8301 field_addr.name = "small_wonder_visibility";
8302#endif /* FREECIV_JSON_CONNECTION */
8303 e = 0;
8304 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->small_wonder_visibility);
8305 if (e) {
8306 log_packet_detailed("'small_wonder_visibility' field error detected");
8307 }
8308 }
8309
8310 *old = *real_packet;
8311#endif /* FREECIV_DELTA_PROTOCOL */
8312#ifndef FREECIV_DELTA_PROTOCOL
8313#ifdef FREECIV_JSON_CONNECTION
8314 field_addr.name = "add_to_size_limit";
8315#endif /* FREECIV_JSON_CONNECTION */
8316 e = 0;
8317 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->add_to_size_limit);
8318 if (e) {
8319 log_packet_detailed("'add_to_size_limit' field error detected");
8320 }
8321#ifdef FREECIV_JSON_CONNECTION
8322 field_addr.name = "aifill";
8323#endif /* FREECIV_JSON_CONNECTION */
8324 e = 0;
8325 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->aifill);
8326 if (e) {
8327 log_packet_detailed("'aifill' field error detected");
8328 }
8329#ifdef FREECIV_JSON_CONNECTION
8330 field_addr.name = "persistent_ready";
8331#endif /* FREECIV_JSON_CONNECTION */
8332 e = 0;
8333 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->persistent_ready);
8334 if (e) {
8335 log_packet_detailed("'persistent_ready' field error detected");
8336 }
8337#ifdef FREECIV_JSON_CONNECTION
8338 field_addr.name = "airlifting_style";
8339#endif /* FREECIV_JSON_CONNECTION */
8340 e = 0;
8341 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlifting_style);
8342 if (e) {
8343 log_packet_detailed("'airlifting_style' field error detected");
8344 }
8345#ifdef FREECIV_JSON_CONNECTION
8346 field_addr.name = "airlift_from_always_enabled";
8347#endif /* FREECIV_JSON_CONNECTION */
8348 e = 0;
8349 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift_from_always_enabled);
8350 if (e) {
8351 log_packet_detailed("'airlift_from_always_enabled' field error detected");
8352 }
8353#ifdef FREECIV_JSON_CONNECTION
8354 field_addr.name = "airlift_to_always_enabled";
8355#endif /* FREECIV_JSON_CONNECTION */
8356 e = 0;
8357 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift_to_always_enabled);
8358 if (e) {
8359 log_packet_detailed("'airlift_to_always_enabled' field error detected");
8360 }
8361#ifdef FREECIV_JSON_CONNECTION
8362 field_addr.name = "angrycitizen";
8363#endif /* FREECIV_JSON_CONNECTION */
8364 e = 0;
8365 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->angrycitizen);
8366 if (e) {
8367 log_packet_detailed("'angrycitizen' field error detected");
8368 }
8369#ifdef FREECIV_JSON_CONNECTION
8370 field_addr.name = "base_pollution";
8371#endif /* FREECIV_JSON_CONNECTION */
8372 e = 0;
8373 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->base_pollution);
8374 if (e) {
8375 log_packet_detailed("'base_pollution' field error detected");
8376 }
8377#ifdef FREECIV_JSON_CONNECTION
8378 field_addr.name = "base_tech_cost";
8379#endif /* FREECIV_JSON_CONNECTION */
8380 e = 0;
8381 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->base_tech_cost);
8382 if (e) {
8383 log_packet_detailed("'base_tech_cost' field error detected");
8384 }
8385#ifdef FREECIV_JSON_CONNECTION
8386 field_addr.name = "min_tech_cost";
8387#endif /* FREECIV_JSON_CONNECTION */
8388 e = 0;
8389 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_tech_cost);
8390 if (e) {
8391 log_packet_detailed("'min_tech_cost' field error detected");
8392 }
8393#ifdef FREECIV_JSON_CONNECTION
8394 field_addr.name = "tech_leak_pct";
8395#endif /* FREECIV_JSON_CONNECTION */
8396 e = 0;
8397 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leak_pct);
8398 if (e) {
8399 log_packet_detailed("'tech_leak_pct' field error detected");
8400 }
8401#ifdef FREECIV_JSON_CONNECTION
8402 field_addr.name = "border_city_radius_sq";
8403#endif /* FREECIV_JSON_CONNECTION */
8404 e = 0;
8405 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->border_city_radius_sq);
8406 if (e) {
8407 log_packet_detailed("'border_city_radius_sq' field error detected");
8408 }
8409#ifdef FREECIV_JSON_CONNECTION
8410 field_addr.name = "border_size_effect";
8411#endif /* FREECIV_JSON_CONNECTION */
8412 e = 0;
8413 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->border_size_effect);
8414 if (e) {
8415 log_packet_detailed("'border_size_effect' field error detected");
8416 }
8417#ifdef FREECIV_JSON_CONNECTION
8418 field_addr.name = "border_city_permanent_radius_sq";
8419#endif /* FREECIV_JSON_CONNECTION */
8420 e = 0;
8421 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->border_city_permanent_radius_sq);
8422 if (e) {
8423 log_packet_detailed("'border_city_permanent_radius_sq' field error detected");
8424 }
8425#ifdef FREECIV_JSON_CONNECTION
8426 field_addr.name = "borders";
8427#endif /* FREECIV_JSON_CONNECTION */
8428 e = 0;
8429 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->borders);
8430 if (e) {
8431 log_packet_detailed("'borders' field error detected");
8432 }
8433#ifdef FREECIV_JSON_CONNECTION
8434 field_addr.name = "base_bribe_cost";
8435#endif /* FREECIV_JSON_CONNECTION */
8436 e = 0;
8437 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->base_bribe_cost);
8438 if (e) {
8439 log_packet_detailed("'base_bribe_cost' field error detected");
8440 }
8441#ifdef FREECIV_JSON_CONNECTION
8442 field_addr.name = "caravan_bonus_style";
8443#endif /* FREECIV_JSON_CONNECTION */
8444 e = 0;
8445 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->caravan_bonus_style);
8446 if (e) {
8447 log_packet_detailed("'caravan_bonus_style' field error detected");
8448 }
8449#ifdef FREECIV_JSON_CONNECTION
8450 field_addr.name = "culture_vic_points";
8451#endif /* FREECIV_JSON_CONNECTION */
8452 e = 0;
8453 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture_vic_points);
8454 if (e) {
8455 log_packet_detailed("'culture_vic_points' field error detected");
8456 }
8457#ifdef FREECIV_JSON_CONNECTION
8458 field_addr.name = "culture_vic_lead";
8459#endif /* FREECIV_JSON_CONNECTION */
8460 e = 0;
8461 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_vic_lead);
8462 if (e) {
8463 log_packet_detailed("'culture_vic_lead' field error detected");
8464 }
8465#ifdef FREECIV_JSON_CONNECTION
8466 field_addr.name = "culture_migration_pml";
8467#endif /* FREECIV_JSON_CONNECTION */
8468 e = 0;
8469 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->culture_migration_pml);
8470 if (e) {
8471 log_packet_detailed("'culture_migration_pml' field error detected");
8472 }
8473#ifdef FREECIV_JSON_CONNECTION
8474 field_addr.name = "history_interest_pml";
8475#endif /* FREECIV_JSON_CONNECTION */
8476 e = 0;
8477 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->history_interest_pml);
8478 if (e) {
8479 log_packet_detailed("'history_interest_pml' field error detected");
8480 }
8481#ifdef FREECIV_JSON_CONNECTION
8482 field_addr.name = "celebratesize";
8483#endif /* FREECIV_JSON_CONNECTION */
8484 e = 0;
8485 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->celebratesize);
8486 if (e) {
8487 log_packet_detailed("'celebratesize' field error detected");
8488 }
8489#ifdef FREECIV_JSON_CONNECTION
8490 field_addr.name = "changable_tax";
8491#endif /* FREECIV_JSON_CONNECTION */
8492 e = 0;
8493 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->changable_tax);
8494 if (e) {
8495 log_packet_detailed("'changable_tax' field error detected");
8496 }
8497#ifdef FREECIV_JSON_CONNECTION
8498 field_addr.name = "pop_report_zeroes";
8499#endif /* FREECIV_JSON_CONNECTION */
8500 e = 0;
8501 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_report_zeroes);
8502 if (e) {
8503 log_packet_detailed("'pop_report_zeroes' field error detected");
8504 }
8505#ifdef FREECIV_JSON_CONNECTION
8506 field_addr.name = "citizen_nationality";
8507#endif /* FREECIV_JSON_CONNECTION */
8508 e = 0;
8509 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->citizen_nationality);
8510 if (e) {
8511 log_packet_detailed("'citizen_nationality' field error detected");
8512 }
8513#ifdef FREECIV_JSON_CONNECTION
8514 field_addr.name = "unit_builders_nationality";
8515#endif /* FREECIV_JSON_CONNECTION */
8516 e = 0;
8517 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unit_builders_nationality);
8518 if (e) {
8519 log_packet_detailed("'unit_builders_nationality' field error detected");
8520 }
8521#ifdef FREECIV_JSON_CONNECTION
8522 field_addr.name = "citizen_convert_speed";
8523#endif /* FREECIV_JSON_CONNECTION */
8524 e = 0;
8525 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->citizen_convert_speed);
8526 if (e) {
8527 log_packet_detailed("'citizen_convert_speed' field error detected");
8528 }
8529#ifdef FREECIV_JSON_CONNECTION
8530 field_addr.name = "conquest_convert_pct";
8531#endif /* FREECIV_JSON_CONNECTION */
8532 e = 0;
8533 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->conquest_convert_pct);
8534 if (e) {
8535 log_packet_detailed("'conquest_convert_pct' field error detected");
8536 }
8537#ifdef FREECIV_JSON_CONNECTION
8538 field_addr.name = "citizen_partisans_pct";
8539#endif /* FREECIV_JSON_CONNECTION */
8540 e = 0;
8541 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citizen_partisans_pct);
8542 if (e) {
8543 log_packet_detailed("'citizen_partisans_pct' field error detected");
8544 }
8545#ifdef FREECIV_JSON_CONNECTION
8546 field_addr.name = "citymindist";
8547#endif /* FREECIV_JSON_CONNECTION */
8548 e = 0;
8549 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->citymindist);
8550 if (e) {
8551 log_packet_detailed("'citymindist' field error detected");
8552 }
8553#ifdef FREECIV_JSON_CONNECTION
8554 field_addr.name = "cooling";
8555#endif /* FREECIV_JSON_CONNECTION */
8556 e = 0;
8557 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cooling);
8558 if (e) {
8559 log_packet_detailed("'cooling' field error detected");
8560 }
8561#ifdef FREECIV_JSON_CONNECTION
8562 field_addr.name = "coolinglevel";
8563#endif /* FREECIV_JSON_CONNECTION */
8564 e = 0;
8565 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->coolinglevel);
8566 if (e) {
8567 log_packet_detailed("'coolinglevel' field error detected");
8568 }
8569#ifdef FREECIV_JSON_CONNECTION
8570 field_addr.name = "diplchance_initial_odds";
8571#endif /* FREECIV_JSON_CONNECTION */
8572 e = 0;
8574 if (e) {
8575 log_packet_detailed("'diplchance_initial_odds' field error detected");
8576 }
8577#ifdef FREECIV_JSON_CONNECTION
8578 field_addr.name = "diplomacy";
8579#endif /* FREECIV_JSON_CONNECTION */
8580 e = 0;
8581 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->diplomacy);
8582 if (e) {
8583 log_packet_detailed("'diplomacy' field error detected");
8584 }
8585#ifdef FREECIV_JSON_CONNECTION
8586 field_addr.name = "fogofwar";
8587#endif /* FREECIV_JSON_CONNECTION */
8588 e = 0;
8589 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->fogofwar);
8590 if (e) {
8591 log_packet_detailed("'fogofwar' field error detected");
8592 }
8593#ifdef FREECIV_JSON_CONNECTION
8594 field_addr.name = "food_cost";
8595#endif /* FREECIV_JSON_CONNECTION */
8596 e = 0;
8597 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_cost);
8598 if (e) {
8599 log_packet_detailed("'food_cost' field error detected");
8600 }
8601#ifdef FREECIV_JSON_CONNECTION
8602 field_addr.name = "foodbox";
8603#endif /* FREECIV_JSON_CONNECTION */
8604 e = 0;
8605 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->foodbox);
8606 if (e) {
8607 log_packet_detailed("'foodbox' field error detected");
8608 }
8609#ifdef FREECIV_JSON_CONNECTION
8610 field_addr.name = "forced_gold";
8611#endif /* FREECIV_JSON_CONNECTION */
8612 e = 0;
8613 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_gold);
8614 if (e) {
8615 log_packet_detailed("'forced_gold' field error detected");
8616 }
8617#ifdef FREECIV_JSON_CONNECTION
8618 field_addr.name = "forced_luxury";
8619#endif /* FREECIV_JSON_CONNECTION */
8620 e = 0;
8621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_luxury);
8622 if (e) {
8623 log_packet_detailed("'forced_luxury' field error detected");
8624 }
8625#ifdef FREECIV_JSON_CONNECTION
8626 field_addr.name = "forced_science";
8627#endif /* FREECIV_JSON_CONNECTION */
8628 e = 0;
8629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->forced_science);
8630 if (e) {
8631 log_packet_detailed("'forced_science' field error detected");
8632 }
8633#ifdef FREECIV_JSON_CONNECTION
8634 field_addr.name = "fulltradesize";
8635#endif /* FREECIV_JSON_CONNECTION */
8636 e = 0;
8637 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fulltradesize);
8638 if (e) {
8639 log_packet_detailed("'fulltradesize' field error detected");
8640 }
8641#ifdef FREECIV_JSON_CONNECTION
8642 field_addr.name = "trade_world_rel_pct";
8643#endif /* FREECIV_JSON_CONNECTION */
8644 e = 0;
8645 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_world_rel_pct);
8646 if (e) {
8647 log_packet_detailed("'trade_world_rel_pct' field error detected");
8648 }
8649#ifdef FREECIV_JSON_CONNECTION
8650 field_addr.name = "min_trade_route_val";
8651#endif /* FREECIV_JSON_CONNECTION */
8652 e = 0;
8653 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_trade_route_val);
8654 if (e) {
8655 log_packet_detailed("'min_trade_route_val' field error detected");
8656 }
8657#ifdef FREECIV_JSON_CONNECTION
8658 field_addr.name = "reveal_trade_partner";
8659#endif /* FREECIV_JSON_CONNECTION */
8660 e = 0;
8661 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->reveal_trade_partner);
8662 if (e) {
8663 log_packet_detailed("'reveal_trade_partner' field error detected");
8664 }
8665#ifdef FREECIV_JSON_CONNECTION
8666 field_addr.name = "goods_selection";
8667#endif /* FREECIV_JSON_CONNECTION */
8668 e = 0;
8669 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods_selection);
8670 if (e) {
8671 log_packet_detailed("'goods_selection' field error detected");
8672 }
8673#ifdef FREECIV_JSON_CONNECTION
8674 field_addr.name = "global_advance_count";
8675#endif /* FREECIV_JSON_CONNECTION */
8676 e = 0;
8677 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_advance_count);
8678 if (e) {
8679 log_packet_detailed("'global_advance_count' field error detected");
8680 }
8681#ifdef FREECIV_JSON_CONNECTION
8682 field_addr.name = "global_advances";
8683#endif /* FREECIV_JSON_CONNECTION */
8684 e = 0;
8685 {
8686 int i;
8687
8688#ifdef FREECIV_JSON_CONNECTION
8689 /* Create the array. */
8690 e |= DIO_PUT(farray, &dout, &field_addr, A_LAST);
8691
8692 /* Enter the array. */
8693 field_addr.sub_location = plocation_elem_new(0);
8694#endif /* FREECIV_JSON_CONNECTION */
8695
8696 for (i = 0; i < A_LAST; i++) {
8697#ifdef FREECIV_JSON_CONNECTION
8698 /* Next array element. */
8699 field_addr.sub_location->number = i;
8700#endif /* FREECIV_JSON_CONNECTION */
8701
8702 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_advances[i]);
8703 }
8704
8705#ifdef FREECIV_JSON_CONNECTION
8706 /* Exit array. */
8707 FC_FREE(field_addr.sub_location);
8708#endif /* FREECIV_JSON_CONNECTION */
8709 }
8710 if (e) {
8711 log_packet_detailed("'global_advances' field error detected");
8712 }
8713#ifdef FREECIV_JSON_CONNECTION
8714 field_addr.name = "global_warming";
8715#endif /* FREECIV_JSON_CONNECTION */
8716 e = 0;
8717 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->global_warming);
8718 if (e) {
8719 log_packet_detailed("'global_warming' field error detected");
8720 }
8721#ifdef FREECIV_JSON_CONNECTION
8722 field_addr.name = "globalwarming";
8723#endif /* FREECIV_JSON_CONNECTION */
8724 e = 0;
8725 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->globalwarming);
8726 if (e) {
8727 log_packet_detailed("'globalwarming' field error detected");
8728 }
8729#ifdef FREECIV_JSON_CONNECTION
8730 field_addr.name = "gold";
8731#endif /* FREECIV_JSON_CONNECTION */
8732 e = 0;
8733 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
8734 if (e) {
8735 log_packet_detailed("'gold' field error detected");
8736 }
8737#ifdef FREECIV_JSON_CONNECTION
8738 field_addr.name = "gold_upkeep_style";
8739#endif /* FREECIV_JSON_CONNECTION */
8740 e = 0;
8741 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gold_upkeep_style);
8742 if (e) {
8743 log_packet_detailed("'gold_upkeep_style' field error detected");
8744 }
8745#ifdef FREECIV_JSON_CONNECTION
8746 field_addr.name = "homeless_gold_upkeep";
8747#endif /* FREECIV_JSON_CONNECTION */
8748 e = 0;
8749 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->homeless_gold_upkeep);
8750 if (e) {
8751 log_packet_detailed("'homeless_gold_upkeep' field error detected");
8752 }
8753#ifdef FREECIV_JSON_CONNECTION
8754 field_addr.name = "infrapoints";
8755#endif /* FREECIV_JSON_CONNECTION */
8756 e = 0;
8757 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
8758 if (e) {
8759 log_packet_detailed("'infrapoints' field error detected");
8760 }
8761#ifdef FREECIV_JSON_CONNECTION
8762 field_addr.name = "revolentype";
8763#endif /* FREECIV_JSON_CONNECTION */
8764 e = 0;
8765 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->revolentype);
8766 if (e) {
8767 log_packet_detailed("'revolentype' field error detected");
8768 }
8769#ifdef FREECIV_JSON_CONNECTION
8770 field_addr.name = "default_government_id";
8771#endif /* FREECIV_JSON_CONNECTION */
8772 e = 0;
8773 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_government_id);
8774 if (e) {
8775 log_packet_detailed("'default_government_id' field error detected");
8776 }
8777#ifdef FREECIV_JSON_CONNECTION
8778 field_addr.name = "government_during_revolution_id";
8779#endif /* FREECIV_JSON_CONNECTION */
8780 e = 0;
8781 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government_during_revolution_id);
8782 if (e) {
8783 log_packet_detailed("'government_during_revolution_id' field error detected");
8784 }
8785#ifdef FREECIV_JSON_CONNECTION
8786 field_addr.name = "granary_food_inc";
8787#endif /* FREECIV_JSON_CONNECTION */
8788 e = 0;
8789 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_inc);
8790 if (e) {
8791 log_packet_detailed("'granary_food_inc' field error detected");
8792 }
8793#ifdef FREECIV_JSON_CONNECTION
8794 field_addr.name = "granary_food_ini";
8795#endif /* FREECIV_JSON_CONNECTION */
8796 e = 0;
8797 {
8798 int i;
8799
8800#ifdef FREECIV_JSON_CONNECTION
8801 /* Create the array. */
8803
8804 /* Enter the array. */
8805 field_addr.sub_location = plocation_elem_new(0);
8806#endif /* FREECIV_JSON_CONNECTION */
8807
8808 for (i = 0; i < MAX_GRANARY_INIS; i++) {
8809#ifdef FREECIV_JSON_CONNECTION
8810 /* Next array element. */
8811 field_addr.sub_location->number = i;
8812#endif /* FREECIV_JSON_CONNECTION */
8813
8814 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_food_ini[i]);
8815 }
8816
8817#ifdef FREECIV_JSON_CONNECTION
8818 /* Exit array. */
8819 FC_FREE(field_addr.sub_location);
8820#endif /* FREECIV_JSON_CONNECTION */
8821 }
8822 if (e) {
8823 log_packet_detailed("'granary_food_ini' field error detected");
8824 }
8825#ifdef FREECIV_JSON_CONNECTION
8826 field_addr.name = "granary_num_inis";
8827#endif /* FREECIV_JSON_CONNECTION */
8828 e = 0;
8829 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->granary_num_inis);
8830 if (e) {
8831 log_packet_detailed("'granary_num_inis' field error detected");
8832 }
8833#ifdef FREECIV_JSON_CONNECTION
8834 field_addr.name = "great_wonder_owners";
8835#endif /* FREECIV_JSON_CONNECTION */
8836 e = 0;
8837 {
8838 int i;
8839
8840#ifdef FREECIV_JSON_CONNECTION
8841 /* Create the array. */
8842 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
8843
8844 /* Enter the array. */
8845 field_addr.sub_location = plocation_elem_new(0);
8846#endif /* FREECIV_JSON_CONNECTION */
8847
8848 for (i = 0; i < B_LAST; i++) {
8849#ifdef FREECIV_JSON_CONNECTION
8850 /* Next array element. */
8851 field_addr.sub_location->number = i;
8852#endif /* FREECIV_JSON_CONNECTION */
8853
8854 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->great_wonder_owners[i]);
8855 }
8856
8857#ifdef FREECIV_JSON_CONNECTION
8858 /* Exit array. */
8859 FC_FREE(field_addr.sub_location);
8860#endif /* FREECIV_JSON_CONNECTION */
8861 }
8862 if (e) {
8863 log_packet_detailed("'great_wonder_owners' field error detected");
8864 }
8865#ifdef FREECIV_JSON_CONNECTION
8866 field_addr.name = "happy_cost";
8867#endif /* FREECIV_JSON_CONNECTION */
8868 e = 0;
8869 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->happy_cost);
8870 if (e) {
8871 log_packet_detailed("'happy_cost' field error detected");
8872 }
8873#ifdef FREECIV_JSON_CONNECTION
8874 field_addr.name = "happyborders";
8875#endif /* FREECIV_JSON_CONNECTION */
8876 e = 0;
8877 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happyborders);
8878 if (e) {
8879 log_packet_detailed("'happyborders' field error detected");
8880 }
8881#ifdef FREECIV_JSON_CONNECTION
8882 field_addr.name = "heating";
8883#endif /* FREECIV_JSON_CONNECTION */
8884 e = 0;
8885 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->heating);
8886 if (e) {
8887 log_packet_detailed("'heating' field error detected");
8888 }
8889#ifdef FREECIV_JSON_CONNECTION
8890 field_addr.name = "illness_base_factor";
8891#endif /* FREECIV_JSON_CONNECTION */
8892 e = 0;
8893 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_base_factor);
8894 if (e) {
8895 log_packet_detailed("'illness_base_factor' field error detected");
8896 }
8897#ifdef FREECIV_JSON_CONNECTION
8898 field_addr.name = "illness_min_size";
8899#endif /* FREECIV_JSON_CONNECTION */
8900 e = 0;
8901 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->illness_min_size);
8902 if (e) {
8903 log_packet_detailed("'illness_min_size' field error detected");
8904 }
8905#ifdef FREECIV_JSON_CONNECTION
8906 field_addr.name = "illness_on";
8907#endif /* FREECIV_JSON_CONNECTION */
8908 e = 0;
8909 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->illness_on);
8910 if (e) {
8911 log_packet_detailed("'illness_on' field error detected");
8912 }
8913#ifdef FREECIV_JSON_CONNECTION
8914 field_addr.name = "illness_pollution_factor";
8915#endif /* FREECIV_JSON_CONNECTION */
8916 e = 0;
8917 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_pollution_factor);
8918 if (e) {
8919 log_packet_detailed("'illness_pollution_factor' field error detected");
8920 }
8921#ifdef FREECIV_JSON_CONNECTION
8922 field_addr.name = "illness_trade_infection";
8923#endif /* FREECIV_JSON_CONNECTION */
8924 e = 0;
8925 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade_infection);
8926 if (e) {
8927 log_packet_detailed("'illness_trade_infection' field error detected");
8928 }
8929#ifdef FREECIV_JSON_CONNECTION
8930 field_addr.name = "init_city_radius_sq";
8931#endif /* FREECIV_JSON_CONNECTION */
8932 e = 0;
8933 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_city_radius_sq);
8934 if (e) {
8935 log_packet_detailed("'init_city_radius_sq' field error detected");
8936 }
8937#ifdef FREECIV_JSON_CONNECTION
8938 field_addr.name = "is_edit_mode";
8939#endif /* FREECIV_JSON_CONNECTION */
8940 e = 0;
8941 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_edit_mode);
8942 if (e) {
8943 log_packet_detailed("'is_edit_mode' field error detected");
8944 }
8945#ifdef FREECIV_JSON_CONNECTION
8946 field_addr.name = "is_new_game";
8947#endif /* FREECIV_JSON_CONNECTION */
8948 e = 0;
8949 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_new_game);
8950 if (e) {
8951 log_packet_detailed("'is_new_game' field error detected");
8952 }
8953#ifdef FREECIV_JSON_CONNECTION
8954 field_addr.name = "killcitizen";
8955#endif /* FREECIV_JSON_CONNECTION */
8956 e = 0;
8957 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->killcitizen);
8958 if (e) {
8959 log_packet_detailed("'killcitizen' field error detected");
8960 }
8961#ifdef FREECIV_JSON_CONNECTION
8962 field_addr.name = "killstack";
8963#endif /* FREECIV_JSON_CONNECTION */
8964 e = 0;
8965 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->killstack);
8966 if (e) {
8967 log_packet_detailed("'killstack' field error detected");
8968 }
8969#ifdef FREECIV_JSON_CONNECTION
8970 field_addr.name = "only_killing_makes_veteran";
8971#endif /* FREECIV_JSON_CONNECTION */
8972 e = 0;
8973 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->only_killing_makes_veteran);
8974 if (e) {
8975 log_packet_detailed("'only_killing_makes_veteran' field error detected");
8976 }
8977#ifdef FREECIV_JSON_CONNECTION
8978 field_addr.name = "only_real_fight_makes_veteran";
8979#endif /* FREECIV_JSON_CONNECTION */
8980 e = 0;
8981 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->only_real_fight_makes_veteran);
8982 if (e) {
8983 log_packet_detailed("'only_real_fight_makes_veteran' field error detected");
8984 }
8985#ifdef FREECIV_JSON_CONNECTION
8986 field_addr.name = "combat_odds_scaled_veterancy";
8987#endif /* FREECIV_JSON_CONNECTION */
8988 e = 0;
8989 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->combat_odds_scaled_veterancy);
8990 if (e) {
8991 log_packet_detailed("'combat_odds_scaled_veterancy' field error detected");
8992 }
8993#ifdef FREECIV_JSON_CONNECTION
8994 field_addr.name = "damage_reduces_bombard_rate";
8995#endif /* FREECIV_JSON_CONNECTION */
8996 e = 0;
8997 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->damage_reduces_bombard_rate);
8998 if (e) {
8999 log_packet_detailed("'damage_reduces_bombard_rate' field error detected");
9000 }
9001#ifdef FREECIV_JSON_CONNECTION
9002 field_addr.name = "low_firepower_badwallattacker";
9003#endif /* FREECIV_JSON_CONNECTION */
9004 e = 0;
9005 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_badwallattacker);
9006 if (e) {
9007 log_packet_detailed("'low_firepower_badwallattacker' field error detected");
9008 }
9009#ifdef FREECIV_JSON_CONNECTION
9010 field_addr.name = "low_firepower_pearl_harbour";
9011#endif /* FREECIV_JSON_CONNECTION */
9012 e = 0;
9013 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_pearl_harbour);
9014 if (e) {
9015 log_packet_detailed("'low_firepower_pearl_harbour' field error detected");
9016 }
9017#ifdef FREECIV_JSON_CONNECTION
9018 field_addr.name = "low_firepower_combat_bonus";
9019#endif /* FREECIV_JSON_CONNECTION */
9020 e = 0;
9021 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_combat_bonus);
9022 if (e) {
9023 log_packet_detailed("'low_firepower_combat_bonus' field error detected");
9024 }
9025#ifdef FREECIV_JSON_CONNECTION
9026 field_addr.name = "low_firepower_nonnat_bombard";
9027#endif /* FREECIV_JSON_CONNECTION */
9028 e = 0;
9029 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->low_firepower_nonnat_bombard);
9030 if (e) {
9031 log_packet_detailed("'low_firepower_nonnat_bombard' field error detected");
9032 }
9033#ifdef FREECIV_JSON_CONNECTION
9034 field_addr.name = "nuke_pop_loss_pct";
9035#endif /* FREECIV_JSON_CONNECTION */
9036 e = 0;
9037 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_pop_loss_pct);
9038 if (e) {
9039 log_packet_detailed("'nuke_pop_loss_pct' field error detected");
9040 }
9041#ifdef FREECIV_JSON_CONNECTION
9042 field_addr.name = "nuke_defender_survival_chance_pct";
9043#endif /* FREECIV_JSON_CONNECTION */
9044 e = 0;
9045 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nuke_defender_survival_chance_pct);
9046 if (e) {
9047 log_packet_detailed("'nuke_defender_survival_chance_pct' field error detected");
9048 }
9049#ifdef FREECIV_JSON_CONNECTION
9050 field_addr.name = "min_city_center_output";
9051#endif /* FREECIV_JSON_CONNECTION */
9052 e = 0;
9053 {
9054 int i;
9055
9056#ifdef FREECIV_JSON_CONNECTION
9057 /* Create the array. */
9058 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
9059
9060 /* Enter the array. */
9061 field_addr.sub_location = plocation_elem_new(0);
9062#endif /* FREECIV_JSON_CONNECTION */
9063
9064 for (i = 0; i < O_LAST; i++) {
9065#ifdef FREECIV_JSON_CONNECTION
9066 /* Next array element. */
9067 field_addr.sub_location->number = i;
9068#endif /* FREECIV_JSON_CONNECTION */
9069
9070 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->min_city_center_output[i]);
9071 }
9072
9073#ifdef FREECIV_JSON_CONNECTION
9074 /* Exit array. */
9075 FC_FREE(field_addr.sub_location);
9076#endif /* FREECIV_JSON_CONNECTION */
9077 }
9078 if (e) {
9079 log_packet_detailed("'min_city_center_output' field error detected");
9080 }
9081#ifdef FREECIV_JSON_CONNECTION
9082 field_addr.name = "muuk_food_wipe";
9083#endif /* FREECIV_JSON_CONNECTION */
9084 e = 0;
9085 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_food_wipe);
9086 if (e) {
9087 log_packet_detailed("'muuk_food_wipe' field error detected");
9088 }
9089#ifdef FREECIV_JSON_CONNECTION
9090 field_addr.name = "muuk_gold_wipe";
9091#endif /* FREECIV_JSON_CONNECTION */
9092 e = 0;
9093 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_gold_wipe);
9094 if (e) {
9095 log_packet_detailed("'muuk_gold_wipe' field error detected");
9096 }
9097#ifdef FREECIV_JSON_CONNECTION
9098 field_addr.name = "muuk_shield_wipe";
9099#endif /* FREECIV_JSON_CONNECTION */
9100 e = 0;
9101 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->muuk_shield_wipe);
9102 if (e) {
9103 log_packet_detailed("'muuk_shield_wipe' field error detected");
9104 }
9105#ifdef FREECIV_JSON_CONNECTION
9106 field_addr.name = "notradesize";
9107#endif /* FREECIV_JSON_CONNECTION */
9108 e = 0;
9109 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->notradesize);
9110 if (e) {
9111 log_packet_detailed("'notradesize' field error detected");
9112 }
9113#ifdef FREECIV_JSON_CONNECTION
9114 field_addr.name = "nuclear_winter";
9115#endif /* FREECIV_JSON_CONNECTION */
9116 e = 0;
9117 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->nuclear_winter);
9118 if (e) {
9119 log_packet_detailed("'nuclear_winter' field error detected");
9120 }
9121#ifdef FREECIV_JSON_CONNECTION
9122 field_addr.name = "nuclearwinter";
9123#endif /* FREECIV_JSON_CONNECTION */
9124 e = 0;
9125 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->nuclearwinter);
9126 if (e) {
9127 log_packet_detailed("'nuclearwinter' field error detected");
9128 }
9129#ifdef FREECIV_JSON_CONNECTION
9130 field_addr.name = "phase";
9131#endif /* FREECIV_JSON_CONNECTION */
9132 e = 0;
9133 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
9134 if (e) {
9135 log_packet_detailed("'phase' field error detected");
9136 }
9137#ifdef FREECIV_JSON_CONNECTION
9138 field_addr.name = "phase_mode";
9139#endif /* FREECIV_JSON_CONNECTION */
9140 e = 0;
9141 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->phase_mode);
9142 if (e) {
9143 log_packet_detailed("'phase_mode' field error detected");
9144 }
9145#ifdef FREECIV_JSON_CONNECTION
9146 field_addr.name = "pillage_select";
9147#endif /* FREECIV_JSON_CONNECTION */
9148 e = 0;
9149 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->pillage_select);
9150 if (e) {
9151 log_packet_detailed("'pillage_select' field error detected");
9152 }
9153#ifdef FREECIV_JSON_CONNECTION
9154 field_addr.name = "steal_maps_reveals_all_cities";
9155#endif /* FREECIV_JSON_CONNECTION */
9156 e = 0;
9157 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->steal_maps_reveals_all_cities);
9158 if (e) {
9159 log_packet_detailed("'steal_maps_reveals_all_cities' field error detected");
9160 }
9161#ifdef FREECIV_JSON_CONNECTION
9162 field_addr.name = "poison_empties_food_stock";
9163#endif /* FREECIV_JSON_CONNECTION */
9164 e = 0;
9165 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->poison_empties_food_stock);
9166 if (e) {
9167 log_packet_detailed("'poison_empties_food_stock' field error detected");
9168 }
9169#ifdef FREECIV_JSON_CONNECTION
9170 field_addr.name = "tech_steal_allow_holes";
9171#endif /* FREECIV_JSON_CONNECTION */
9172 e = 0;
9173 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_steal_allow_holes);
9174 if (e) {
9175 log_packet_detailed("'tech_steal_allow_holes' field error detected");
9176 }
9177#ifdef FREECIV_JSON_CONNECTION
9178 field_addr.name = "tech_trade_allow_holes";
9179#endif /* FREECIV_JSON_CONNECTION */
9180 e = 0;
9181 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_trade_allow_holes);
9182 if (e) {
9183 log_packet_detailed("'tech_trade_allow_holes' field error detected");
9184 }
9185#ifdef FREECIV_JSON_CONNECTION
9186 field_addr.name = "tech_trade_loss_allow_holes";
9187#endif /* FREECIV_JSON_CONNECTION */
9188 e = 0;
9189 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_trade_loss_allow_holes);
9190 if (e) {
9191 log_packet_detailed("'tech_trade_loss_allow_holes' field error detected");
9192 }
9193#ifdef FREECIV_JSON_CONNECTION
9194 field_addr.name = "tech_parasite_allow_holes";
9195#endif /* FREECIV_JSON_CONNECTION */
9196 e = 0;
9197 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_parasite_allow_holes);
9198 if (e) {
9199 log_packet_detailed("'tech_parasite_allow_holes' field error detected");
9200 }
9201#ifdef FREECIV_JSON_CONNECTION
9202 field_addr.name = "tech_loss_allow_holes";
9203#endif /* FREECIV_JSON_CONNECTION */
9204 e = 0;
9205 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tech_loss_allow_holes);
9206 if (e) {
9207 log_packet_detailed("'tech_loss_allow_holes' field error detected");
9208 }
9209#ifdef FREECIV_JSON_CONNECTION
9210 field_addr.name = "rapturedelay";
9211#endif /* FREECIV_JSON_CONNECTION */
9212 e = 0;
9213 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapturedelay);
9214 if (e) {
9215 log_packet_detailed("'rapturedelay' field error detected");
9216 }
9217#ifdef FREECIV_JSON_CONNECTION
9218 field_addr.name = "disasters";
9219#endif /* FREECIV_JSON_CONNECTION */
9220 e = 0;
9221 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disasters);
9222 if (e) {
9223 log_packet_detailed("'disasters' field error detected");
9224 }
9225#ifdef FREECIV_JSON_CONNECTION
9226 field_addr.name = "restrictinfra";
9227#endif /* FREECIV_JSON_CONNECTION */
9228 e = 0;
9229 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->restrictinfra);
9230 if (e) {
9231 log_packet_detailed("'restrictinfra' field error detected");
9232 }
9233#ifdef FREECIV_JSON_CONNECTION
9234 field_addr.name = "unreachable_protects";
9235#endif /* FREECIV_JSON_CONNECTION */
9236 e = 0;
9237 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unreachable_protects);
9238 if (e) {
9239 log_packet_detailed("'unreachable_protects' field error detected");
9240 }
9241#ifdef FREECIV_JSON_CONNECTION
9242 field_addr.name = "sciencebox";
9243#endif /* FREECIV_JSON_CONNECTION */
9244 e = 0;
9245 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->sciencebox);
9246 if (e) {
9247 log_packet_detailed("'sciencebox' field error detected");
9248 }
9249#ifdef FREECIV_JSON_CONNECTION
9250 field_addr.name = "shieldbox";
9251#endif /* FREECIV_JSON_CONNECTION */
9252 e = 0;
9253 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->shieldbox);
9254 if (e) {
9255 log_packet_detailed("'shieldbox' field error detected");
9256 }
9257#ifdef FREECIV_JSON_CONNECTION
9258 field_addr.name = "skill_level";
9259#endif /* FREECIV_JSON_CONNECTION */
9260 e = 0;
9261 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->skill_level);
9262 if (e) {
9263 log_packet_detailed("'skill_level' field error detected");
9264 }
9265#ifdef FREECIV_JSON_CONNECTION
9266 field_addr.name = "victory_conditions";
9267#endif /* FREECIV_JSON_CONNECTION */
9268 e = 0;
9269 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->victory_conditions);
9270 if (e) {
9271 log_packet_detailed("'victory_conditions' field error detected");
9272 }
9273#ifdef FREECIV_JSON_CONNECTION
9274 field_addr.name = "team_pooled_research";
9275#endif /* FREECIV_JSON_CONNECTION */
9276 e = 0;
9277 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->team_pooled_research);
9278 if (e) {
9279 log_packet_detailed("'team_pooled_research' field error detected");
9280 }
9281#ifdef FREECIV_JSON_CONNECTION
9282 field_addr.name = "tech";
9283#endif /* FREECIV_JSON_CONNECTION */
9284 e = 0;
9285 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech);
9286 if (e) {
9287 log_packet_detailed("'tech' field error detected");
9288 }
9289#ifdef FREECIV_JSON_CONNECTION
9290 field_addr.name = "tech_cost_style";
9291#endif /* FREECIV_JSON_CONNECTION */
9292 e = 0;
9293 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_cost_style);
9294 if (e) {
9295 log_packet_detailed("'tech_cost_style' field error detected");
9296 }
9297#ifdef FREECIV_JSON_CONNECTION
9298 field_addr.name = "tech_leakage";
9299#endif /* FREECIV_JSON_CONNECTION */
9300 e = 0;
9301 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_leakage);
9302 if (e) {
9303 log_packet_detailed("'tech_leakage' field error detected");
9304 }
9305#ifdef FREECIV_JSON_CONNECTION
9306 field_addr.name = "tech_upkeep_divider";
9307#endif /* FREECIV_JSON_CONNECTION */
9308 e = 0;
9309 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_divider);
9310 if (e) {
9311 log_packet_detailed("'tech_upkeep_divider' field error detected");
9312 }
9313#ifdef FREECIV_JSON_CONNECTION
9314 field_addr.name = "tech_upkeep_style";
9315#endif /* FREECIV_JSON_CONNECTION */
9316 e = 0;
9317 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tech_upkeep_style);
9318 if (e) {
9319 log_packet_detailed("'tech_upkeep_style' field error detected");
9320 }
9321#ifdef FREECIV_JSON_CONNECTION
9322 field_addr.name = "techloss_forgiveness";
9323#endif /* FREECIV_JSON_CONNECTION */
9324 e = 0;
9325 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->techloss_forgiveness);
9326 if (e) {
9327 log_packet_detailed("'techloss_forgiveness' field error detected");
9328 }
9329#ifdef FREECIV_JSON_CONNECTION
9330 field_addr.name = "free_tech_method";
9331#endif /* FREECIV_JSON_CONNECTION */
9332 e = 0;
9333 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->free_tech_method);
9334 if (e) {
9335 log_packet_detailed("'free_tech_method' field error detected");
9336 }
9337#ifdef FREECIV_JSON_CONNECTION
9338 field_addr.name = "gameloss_style";
9339#endif /* FREECIV_JSON_CONNECTION */
9340 e = 0;
9341 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gameloss_style);
9342 if (e) {
9343 log_packet_detailed("'gameloss_style' field error detected");
9344 }
9345#ifdef FREECIV_JSON_CONNECTION
9346 field_addr.name = "timeout";
9347#endif /* FREECIV_JSON_CONNECTION */
9348 e = 0;
9349 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->timeout);
9350 if (e) {
9351 log_packet_detailed("'timeout' field error detected");
9352 }
9353#ifdef FREECIV_JSON_CONNECTION
9354 field_addr.name = "first_timeout";
9355#endif /* FREECIV_JSON_CONNECTION */
9356 e = 0;
9357 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->first_timeout);
9358 if (e) {
9359 log_packet_detailed("'first_timeout' field error detected");
9360 }
9361#ifdef FREECIV_JSON_CONNECTION
9362 field_addr.name = "tired_attack";
9363#endif /* FREECIV_JSON_CONNECTION */
9364 e = 0;
9365 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->tired_attack);
9366 if (e) {
9367 log_packet_detailed("'tired_attack' field error detected");
9368 }
9369#ifdef FREECIV_JSON_CONNECTION
9370 field_addr.name = "trademindist";
9371#endif /* FREECIV_JSON_CONNECTION */
9372 e = 0;
9373 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trademindist);
9374 if (e) {
9375 log_packet_detailed("'trademindist' field error detected");
9376 }
9377#ifdef FREECIV_JSON_CONNECTION
9378 field_addr.name = "trade_revenue_style";
9379#endif /* FREECIV_JSON_CONNECTION */
9380 e = 0;
9381 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_revenue_style);
9382 if (e) {
9383 log_packet_detailed("'trade_revenue_style' field error detected");
9384 }
9385#ifdef FREECIV_JSON_CONNECTION
9386 field_addr.name = "trading_city";
9387#endif /* FREECIV_JSON_CONNECTION */
9388 e = 0;
9389 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_city);
9390 if (e) {
9391 log_packet_detailed("'trading_city' field error detected");
9392 }
9393#ifdef FREECIV_JSON_CONNECTION
9394 field_addr.name = "trading_gold";
9395#endif /* FREECIV_JSON_CONNECTION */
9396 e = 0;
9397 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_gold);
9398 if (e) {
9399 log_packet_detailed("'trading_gold' field error detected");
9400 }
9401#ifdef FREECIV_JSON_CONNECTION
9402 field_addr.name = "trading_tech";
9403#endif /* FREECIV_JSON_CONNECTION */
9404 e = 0;
9405 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->trading_tech);
9406 if (e) {
9407 log_packet_detailed("'trading_tech' field error detected");
9408 }
9409#ifdef FREECIV_JSON_CONNECTION
9410 field_addr.name = "turn";
9411#endif /* FREECIV_JSON_CONNECTION */
9412 e = 0;
9413 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
9414 if (e) {
9415 log_packet_detailed("'turn' field error detected");
9416 }
9417#ifdef FREECIV_JSON_CONNECTION
9418 field_addr.name = "warminglevel";
9419#endif /* FREECIV_JSON_CONNECTION */
9420 e = 0;
9421 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->warminglevel);
9422 if (e) {
9423 log_packet_detailed("'warminglevel' field error detected");
9424 }
9425#ifdef FREECIV_JSON_CONNECTION
9426 field_addr.name = "year";
9427#endif /* FREECIV_JSON_CONNECTION */
9428 e = 0;
9429 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
9430 if (e) {
9431 log_packet_detailed("'year' field error detected");
9432 }
9433#ifdef FREECIV_JSON_CONNECTION
9434 field_addr.name = "year_0_hack";
9435#endif /* FREECIV_JSON_CONNECTION */
9436 e = 0;
9437 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->year_0_hack);
9438 if (e) {
9439 log_packet_detailed("'year_0_hack' field error detected");
9440 }
9441#ifdef FREECIV_JSON_CONNECTION
9442 field_addr.name = "top_cities_count";
9443#endif /* FREECIV_JSON_CONNECTION */
9444 e = 0;
9445 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->top_cities_count);
9446 if (e) {
9447 log_packet_detailed("'top_cities_count' field error detected");
9448 }
9449#ifdef FREECIV_JSON_CONNECTION
9450 field_addr.name = "fragment_count";
9451#endif /* FREECIV_JSON_CONNECTION */
9452 e = 0;
9453 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragment_count);
9454 if (e) {
9455 log_packet_detailed("'fragment_count' field error detected");
9456 }
9457#ifdef FREECIV_JSON_CONNECTION
9458 field_addr.name = "civil_war_enabled";
9459#endif /* FREECIV_JSON_CONNECTION */
9460 e = 0;
9461 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->civil_war_enabled);
9462 if (e) {
9463 log_packet_detailed("'civil_war_enabled' field error detected");
9464 }
9465#ifdef FREECIV_JSON_CONNECTION
9466 field_addr.name = "civil_war_bonus_celebrating";
9467#endif /* FREECIV_JSON_CONNECTION */
9468 e = 0;
9469 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->civil_war_bonus_celebrating);
9470 if (e) {
9471 log_packet_detailed("'civil_war_bonus_celebrating' field error detected");
9472 }
9473#ifdef FREECIV_JSON_CONNECTION
9474 field_addr.name = "civil_war_bonus_unhappy";
9475#endif /* FREECIV_JSON_CONNECTION */
9476 e = 0;
9477 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->civil_war_bonus_unhappy);
9478 if (e) {
9479 log_packet_detailed("'civil_war_bonus_unhappy' field error detected");
9480 }
9481#ifdef FREECIV_JSON_CONNECTION
9482 field_addr.name = "granularity";
9483#endif /* FREECIV_JSON_CONNECTION */
9484 e = 0;
9485 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granularity);
9486 if (e) {
9487 log_packet_detailed("'granularity' field error detected");
9488 }
9489#ifdef FREECIV_JSON_CONNECTION
9490 field_addr.name = "small_wonder_visibility";
9491#endif /* FREECIV_JSON_CONNECTION */
9492 e = 0;
9493 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->small_wonder_visibility);
9494 if (e) {
9495 log_packet_detailed("'small_wonder_visibility' field error detected");
9496 }
9497
9498#endif
9500}
9501
9502int send_packet_game_info(struct connection *pc, const struct packet_game_info *packet)
9503{
9504 if (!pc->used) {
9505 log_error("WARNING: trying to send data to the closed connection %s",
9507 return -1;
9508 }
9509 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_GAME_INFO].packet != NULL, -1,
9510 "Handler for PACKET_GAME_INFO not installed");
9511 return pc->phs.handlers->send[PACKET_GAME_INFO].packet(pc, packet);
9512}
9513
9514#ifdef FREECIV_DELTA_PROTOCOL
9515#define hash_packet_calendar_info_100 hash_const
9516
9517#define cmp_packet_calendar_info_100 cmp_const
9518
9520#endif /* FREECIV_DELTA_PROTOCOL */
9521
9523{
9524#ifdef FREECIV_DELTA_PROTOCOL
9526 struct packet_calendar_info *old;
9527 struct genhash **hash = pc->phs.received + PACKET_CALENDAR_INFO;
9528#endif /* FREECIV_DELTA_PROTOCOL */
9530#ifdef FREECIV_JSON_CONNECTION
9531 struct plocation field_addr;
9532 {
9536 }
9537#endif /* FREECIV_JSON_CONNECTION */
9538
9539#ifdef FREECIV_DELTA_PROTOCOL
9540#ifdef FREECIV_JSON_CONNECTION
9541 field_addr.name = "fields";
9542#endif /* FREECIV_JSON_CONNECTION */
9543 DIO_BV_GET(&din, &field_addr, fields);
9544
9545#else /* FREECIV_DELTA_PROTOCOL */
9546#ifdef FREECIV_JSON_CONNECTION
9547 field_addr.name = "positive_year_label";
9548#endif /* FREECIV_JSON_CONNECTION */
9549 if (!DIO_GET(string, &din, &field_addr, real_packet->positive_year_label, sizeof(real_packet->positive_year_label))) {
9550 RECEIVE_PACKET_FIELD_ERROR(positive_year_label);
9551 }
9552#ifdef FREECIV_JSON_CONNECTION
9553 field_addr.name = "negative_year_label";
9554#endif /* FREECIV_JSON_CONNECTION */
9555 if (!DIO_GET(string, &din, &field_addr, real_packet->negative_year_label, sizeof(real_packet->negative_year_label))) {
9556 RECEIVE_PACKET_FIELD_ERROR(negative_year_label);
9557 }
9558#ifdef FREECIV_JSON_CONNECTION
9559 field_addr.name = "calendar_fragments";
9560#endif /* FREECIV_JSON_CONNECTION */
9561 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->calendar_fragments)) {
9563 }
9564#ifdef FREECIV_JSON_CONNECTION
9565 field_addr.name = "calendar_fragment_name";
9566#endif /* FREECIV_JSON_CONNECTION */
9567 {
9568 int i;
9569
9570#ifdef FREECIV_JSON_CONNECTION
9571 /* Enter array. */
9572 field_addr.sub_location = plocation_elem_new(0);
9573#endif /* FREECIV_JSON_CONNECTION */
9574
9575 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
9576#ifdef FREECIV_JSON_CONNECTION
9577 field_addr.sub_location->number = i;
9578#endif /* FREECIV_JSON_CONNECTION */
9579
9580 if (!DIO_GET(string, &din, &field_addr, real_packet->calendar_fragment_name[i], sizeof(real_packet->calendar_fragment_name[i]))) {
9581 RECEIVE_PACKET_FIELD_ERROR(calendar_fragment_name);
9582 }
9583 }
9584
9585#ifdef FREECIV_JSON_CONNECTION
9586 /* Exit array. */
9587 FC_FREE(field_addr.sub_location);
9588#endif /* FREECIV_JSON_CONNECTION */
9589 }
9590#ifdef FREECIV_JSON_CONNECTION
9591 field_addr.name = "calendar_skip_0";
9592#endif /* FREECIV_JSON_CONNECTION */
9593 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->calendar_skip_0)) {
9594 RECEIVE_PACKET_FIELD_ERROR(calendar_skip_0);
9595 }
9596#endif
9597 log_packet_detailed("packet_calendar_info_100: got info about ()");
9598
9599#ifdef FREECIV_DELTA_PROTOCOL
9600 if (NULL == *hash) {
9602 NULL, NULL, NULL, free);
9603 }
9604
9605 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
9606 *real_packet = *old;
9607 } else {
9608 log_packet_detailed(" no old info");
9609 memset(real_packet, 0, sizeof(*real_packet));
9610 }
9611
9612 if (BV_ISSET(fields, 0)) {
9613 log_packet_detailed(" got field 'positive_year_label'");
9614#ifdef FREECIV_JSON_CONNECTION
9615 field_addr.name = "positive_year_label";
9616#endif /* FREECIV_JSON_CONNECTION */
9617 if (!DIO_GET(string, &din, &field_addr, real_packet->positive_year_label, sizeof(real_packet->positive_year_label))) {
9618 RECEIVE_PACKET_FIELD_ERROR(positive_year_label);
9619 }
9620 }
9621 if (BV_ISSET(fields, 1)) {
9622 log_packet_detailed(" got field 'negative_year_label'");
9623#ifdef FREECIV_JSON_CONNECTION
9624 field_addr.name = "negative_year_label";
9625#endif /* FREECIV_JSON_CONNECTION */
9626 if (!DIO_GET(string, &din, &field_addr, real_packet->negative_year_label, sizeof(real_packet->negative_year_label))) {
9627 RECEIVE_PACKET_FIELD_ERROR(negative_year_label);
9628 }
9629 }
9630 if (BV_ISSET(fields, 2)) {
9631 log_packet_detailed(" got field 'calendar_fragments'");
9632#ifdef FREECIV_JSON_CONNECTION
9633 field_addr.name = "calendar_fragments";
9634#endif /* FREECIV_JSON_CONNECTION */
9635 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->calendar_fragments)) {
9637 }
9638 }
9639 if (BV_ISSET(fields, 3)) {
9640 log_packet_detailed(" got field 'calendar_fragment_name'");
9641#ifdef FREECIV_JSON_CONNECTION
9642 field_addr.name = "calendar_fragment_name";
9643#endif /* FREECIV_JSON_CONNECTION */
9644 {
9645 int i;
9646
9647#ifdef FREECIV_JSON_CONNECTION
9648 /* Enter array. */
9649 field_addr.sub_location = plocation_elem_new(0);
9650#endif /* FREECIV_JSON_CONNECTION */
9651
9652 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
9653#ifdef FREECIV_JSON_CONNECTION
9654 field_addr.sub_location->number = i;
9655#endif /* FREECIV_JSON_CONNECTION */
9656
9657 if (!DIO_GET(string, &din, &field_addr, real_packet->calendar_fragment_name[i], sizeof(real_packet->calendar_fragment_name[i]))) {
9658 RECEIVE_PACKET_FIELD_ERROR(calendar_fragment_name);
9659 }
9660 }
9661
9662#ifdef FREECIV_JSON_CONNECTION
9663 /* Exit array. */
9664 FC_FREE(field_addr.sub_location);
9665#endif /* FREECIV_JSON_CONNECTION */
9666 }
9667 }
9668 real_packet->calendar_skip_0 = BV_ISSET(fields, 4);
9669
9670 if (NULL == old) {
9671 old = fc_malloc(sizeof(*old));
9672 *old = *real_packet;
9673 genhash_insert(*hash, old, old);
9674 } else {
9675 *old = *real_packet;
9676 }
9677
9678#endif /* FREECIV_DELTA_PROTOCOL */
9680}
9681
9682static int send_packet_calendar_info_100(struct connection *pc, const struct packet_calendar_info *packet)
9683{
9684 const struct packet_calendar_info *real_packet = packet;
9685 int e;
9686#ifdef FREECIV_DELTA_PROTOCOL
9688 struct packet_calendar_info *old;
9689 bool differ;
9690 struct genhash **hash = pc->phs.sent + PACKET_CALENDAR_INFO;
9691 int different = 0;
9692#endif /* FREECIV_DELTA_PROTOCOL */
9694#ifdef FREECIV_JSON_CONNECTION
9695 struct plocation field_addr;
9696 {
9700 }
9701#endif /* FREECIV_JSON_CONNECTION */
9702
9703 log_packet_detailed("packet_calendar_info_100: sending info about ()");
9704
9705#ifdef FREECIV_DELTA_PROTOCOL
9706 if (NULL == *hash) {
9708 NULL, NULL, NULL, free);
9709 }
9710 BV_CLR_ALL(fields);
9711
9712 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
9713 old = fc_malloc(sizeof(*old));
9714 *old = *real_packet;
9715 genhash_insert(*hash, old, old);
9716 memset(old, 0, sizeof(*old));
9717 different = 1; /* Force to send. */
9718 }
9719 differ = (strcmp(old->positive_year_label, real_packet->positive_year_label) != 0);
9720 if (differ) {
9721 different++;
9722 BV_SET(fields, 0);
9723 }
9724
9725 differ = (strcmp(old->negative_year_label, real_packet->negative_year_label) != 0);
9726 if (differ) {
9727 different++;
9728 BV_SET(fields, 1);
9729 }
9730
9731 differ = (old->calendar_fragments != real_packet->calendar_fragments);
9732 if (differ) {
9733 different++;
9734 BV_SET(fields, 2);
9735 }
9736
9737 differ = FALSE;
9738 {
9739 int i;
9740
9741 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
9742 differ = (strcmp(old->calendar_fragment_name[i], real_packet->calendar_fragment_name[i]) != 0);
9743 if (differ) {
9744 break;
9745 }
9746 }
9747 }
9748 if (differ) {
9749 different++;
9750 BV_SET(fields, 3);
9751 }
9752
9753 differ = (old->calendar_skip_0 != real_packet->calendar_skip_0);
9754 if (differ) {
9755 different++;
9756 }
9757 if (packet->calendar_skip_0) {
9758 BV_SET(fields, 4);
9759 }
9760
9761 if (different == 0) {
9762 log_packet_detailed(" no change -> discard");
9764 }
9765
9766#ifdef FREECIV_JSON_CONNECTION
9767 field_addr.name = "fields";
9768#endif /* FREECIV_JSON_CONNECTION */
9769 e = 0;
9770 e |= DIO_BV_PUT(&dout, &field_addr, fields);
9771 if (e) {
9772 log_packet_detailed("fields bitvector error detected");
9773 }
9774
9775 if (BV_ISSET(fields, 0)) {
9776 log_packet_detailed(" field 'positive_year_label' has changed");
9777#ifdef FREECIV_JSON_CONNECTION
9778 field_addr.name = "positive_year_label";
9779#endif /* FREECIV_JSON_CONNECTION */
9780 e = 0;
9781 e |= DIO_PUT(string, &dout, &field_addr, real_packet->positive_year_label);
9782 if (e) {
9783 log_packet_detailed("'positive_year_label' field error detected");
9784 }
9785 }
9786 if (BV_ISSET(fields, 1)) {
9787 log_packet_detailed(" field 'negative_year_label' has changed");
9788#ifdef FREECIV_JSON_CONNECTION
9789 field_addr.name = "negative_year_label";
9790#endif /* FREECIV_JSON_CONNECTION */
9791 e = 0;
9792 e |= DIO_PUT(string, &dout, &field_addr, real_packet->negative_year_label);
9793 if (e) {
9794 log_packet_detailed("'negative_year_label' field error detected");
9795 }
9796 }
9797 if (BV_ISSET(fields, 2)) {
9798 log_packet_detailed(" field 'calendar_fragments' has changed");
9799#ifdef FREECIV_JSON_CONNECTION
9800 field_addr.name = "calendar_fragments";
9801#endif /* FREECIV_JSON_CONNECTION */
9802 e = 0;
9803 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->calendar_fragments);
9804 if (e) {
9805 log_packet_detailed("'calendar_fragments' field error detected");
9806 }
9807 }
9808 if (BV_ISSET(fields, 3)) {
9809 log_packet_detailed(" field 'calendar_fragment_name' has changed");
9810#ifdef FREECIV_JSON_CONNECTION
9811 field_addr.name = "calendar_fragment_name";
9812#endif /* FREECIV_JSON_CONNECTION */
9813 e = 0;
9814 {
9815 int i;
9816
9817#ifdef FREECIV_JSON_CONNECTION
9818 /* Create the array. */
9820
9821 /* Enter the array. */
9822 field_addr.sub_location = plocation_elem_new(0);
9823#endif /* FREECIV_JSON_CONNECTION */
9824
9825 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
9826#ifdef FREECIV_JSON_CONNECTION
9827 /* Next array element. */
9828 field_addr.sub_location->number = i;
9829#endif /* FREECIV_JSON_CONNECTION */
9830
9831 e |= DIO_PUT(string, &dout, &field_addr, real_packet->calendar_fragment_name[i]);
9832 }
9833
9834#ifdef FREECIV_JSON_CONNECTION
9835 /* Exit array. */
9836 FC_FREE(field_addr.sub_location);
9837#endif /* FREECIV_JSON_CONNECTION */
9838 }
9839 if (e) {
9840 log_packet_detailed("'calendar_fragment_name' field error detected");
9841 }
9842 }
9843 /* field 4 is folded into the header */
9844
9845 *old = *real_packet;
9846#endif /* FREECIV_DELTA_PROTOCOL */
9847#ifndef FREECIV_DELTA_PROTOCOL
9848#ifdef FREECIV_JSON_CONNECTION
9849 field_addr.name = "positive_year_label";
9850#endif /* FREECIV_JSON_CONNECTION */
9851 e = 0;
9852 e |= DIO_PUT(string, &dout, &field_addr, real_packet->positive_year_label);
9853 if (e) {
9854 log_packet_detailed("'positive_year_label' field error detected");
9855 }
9856#ifdef FREECIV_JSON_CONNECTION
9857 field_addr.name = "negative_year_label";
9858#endif /* FREECIV_JSON_CONNECTION */
9859 e = 0;
9860 e |= DIO_PUT(string, &dout, &field_addr, real_packet->negative_year_label);
9861 if (e) {
9862 log_packet_detailed("'negative_year_label' field error detected");
9863 }
9864#ifdef FREECIV_JSON_CONNECTION
9865 field_addr.name = "calendar_fragments";
9866#endif /* FREECIV_JSON_CONNECTION */
9867 e = 0;
9868 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->calendar_fragments);
9869 if (e) {
9870 log_packet_detailed("'calendar_fragments' field error detected");
9871 }
9872#ifdef FREECIV_JSON_CONNECTION
9873 field_addr.name = "calendar_fragment_name";
9874#endif /* FREECIV_JSON_CONNECTION */
9875 e = 0;
9876 {
9877 int i;
9878
9879#ifdef FREECIV_JSON_CONNECTION
9880 /* Create the array. */
9882
9883 /* Enter the array. */
9884 field_addr.sub_location = plocation_elem_new(0);
9885#endif /* FREECIV_JSON_CONNECTION */
9886
9887 for (i = 0; i < MAX_CALENDAR_FRAGMENTS; i++) {
9888#ifdef FREECIV_JSON_CONNECTION
9889 /* Next array element. */
9890 field_addr.sub_location->number = i;
9891#endif /* FREECIV_JSON_CONNECTION */
9892
9893 e |= DIO_PUT(string, &dout, &field_addr, real_packet->calendar_fragment_name[i]);
9894 }
9895
9896#ifdef FREECIV_JSON_CONNECTION
9897 /* Exit array. */
9898 FC_FREE(field_addr.sub_location);
9899#endif /* FREECIV_JSON_CONNECTION */
9900 }
9901 if (e) {
9902 log_packet_detailed("'calendar_fragment_name' field error detected");
9903 }
9904#ifdef FREECIV_JSON_CONNECTION
9905 field_addr.name = "calendar_skip_0";
9906#endif /* FREECIV_JSON_CONNECTION */
9907 e = 0;
9908 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->calendar_skip_0);
9909 if (e) {
9910 log_packet_detailed("'calendar_skip_0' field error detected");
9911 }
9912
9913#endif
9915}
9916
9918{
9919 if (!pc->used) {
9920 log_error("WARNING: trying to send data to the closed connection %s",
9922 return -1;
9923 }
9924 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CALENDAR_INFO].packet != NULL, -1,
9925 "Handler for PACKET_CALENDAR_INFO not installed");
9926 return pc->phs.handlers->send[PACKET_CALENDAR_INFO].packet(pc, packet);
9927}
9928
9929#ifdef FREECIV_DELTA_PROTOCOL
9930#define hash_packet_timeout_info_100 hash_const
9931
9932#define cmp_packet_timeout_info_100 cmp_const
9933
9935#endif /* FREECIV_DELTA_PROTOCOL */
9936
9938{
9939#ifdef FREECIV_DELTA_PROTOCOL
9941 struct packet_timeout_info *old;
9942 struct genhash **hash = pc->phs.received + PACKET_TIMEOUT_INFO;
9943#endif /* FREECIV_DELTA_PROTOCOL */
9945#ifdef FREECIV_JSON_CONNECTION
9946 struct plocation field_addr;
9947 {
9951 }
9952#endif /* FREECIV_JSON_CONNECTION */
9953
9954#ifdef FREECIV_DELTA_PROTOCOL
9955#ifdef FREECIV_JSON_CONNECTION
9956 field_addr.name = "fields";
9957#endif /* FREECIV_JSON_CONNECTION */
9958 DIO_BV_GET(&din, &field_addr, fields);
9959
9960#else /* FREECIV_DELTA_PROTOCOL */
9961#ifdef FREECIV_JSON_CONNECTION
9962 field_addr.name = "seconds_to_phasedone";
9963#endif /* FREECIV_JSON_CONNECTION */
9964 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->seconds_to_phasedone, 100)) {
9965 RECEIVE_PACKET_FIELD_ERROR(seconds_to_phasedone);
9966 }
9967#ifdef FREECIV_JSON_CONNECTION
9968 field_addr.name = "last_turn_change_time";
9969#endif /* FREECIV_JSON_CONNECTION */
9970 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->last_turn_change_time, 100)) {
9971 RECEIVE_PACKET_FIELD_ERROR(last_turn_change_time);
9972 }
9973#endif
9974 log_packet_detailed("packet_timeout_info_100: got info about ()");
9975
9976#ifdef FREECIV_DELTA_PROTOCOL
9977 if (NULL == *hash) {
9979 NULL, NULL, NULL, free);
9980 }
9981
9982 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
9983 *real_packet = *old;
9984 } else {
9985 log_packet_detailed(" no old info");
9986 memset(real_packet, 0, sizeof(*real_packet));
9987 }
9988
9989 if (BV_ISSET(fields, 0)) {
9990 log_packet_detailed(" got field 'seconds_to_phasedone'");
9991#ifdef FREECIV_JSON_CONNECTION
9992 field_addr.name = "seconds_to_phasedone";
9993#endif /* FREECIV_JSON_CONNECTION */
9994 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->seconds_to_phasedone, 100)) {
9995 RECEIVE_PACKET_FIELD_ERROR(seconds_to_phasedone);
9996 }
9997 }
9998 if (BV_ISSET(fields, 1)) {
9999 log_packet_detailed(" got field 'last_turn_change_time'");
10000#ifdef FREECIV_JSON_CONNECTION
10001 field_addr.name = "last_turn_change_time";
10002#endif /* FREECIV_JSON_CONNECTION */
10003 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->last_turn_change_time, 100)) {
10004 RECEIVE_PACKET_FIELD_ERROR(last_turn_change_time);
10005 }
10006 }
10007
10008 if (NULL == old) {
10009 old = fc_malloc(sizeof(*old));
10010 *old = *real_packet;
10011 genhash_insert(*hash, old, old);
10012 } else {
10013 *old = *real_packet;
10014 }
10015
10016#endif /* FREECIV_DELTA_PROTOCOL */
10018}
10019
10020static int send_packet_timeout_info_100(struct connection *pc, const struct packet_timeout_info *packet)
10021{
10022 const struct packet_timeout_info *real_packet = packet;
10023 int e;
10024#ifdef FREECIV_DELTA_PROTOCOL
10026 struct packet_timeout_info *old;
10027 bool differ;
10028 struct genhash **hash = pc->phs.sent + PACKET_TIMEOUT_INFO;
10029#endif /* FREECIV_DELTA_PROTOCOL */
10031#ifdef FREECIV_JSON_CONNECTION
10032 struct plocation field_addr;
10033 {
10037 }
10038#endif /* FREECIV_JSON_CONNECTION */
10039
10040 log_packet_detailed("packet_timeout_info_100: sending info about ()");
10041
10042#ifdef FREECIV_DELTA_PROTOCOL
10043 if (NULL == *hash) {
10045 NULL, NULL, NULL, free);
10046 }
10047 BV_CLR_ALL(fields);
10048
10049 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
10050 old = fc_malloc(sizeof(*old));
10051 *old = *real_packet;
10052 genhash_insert(*hash, old, old);
10053 memset(old, 0, sizeof(*old));
10054 }
10055 differ = (old->seconds_to_phasedone != real_packet->seconds_to_phasedone);
10056 if (differ) {
10057 BV_SET(fields, 0);
10058 }
10059
10060 differ = (old->last_turn_change_time != real_packet->last_turn_change_time);
10061 if (differ) {
10062 BV_SET(fields, 1);
10063 }
10064
10065
10066#ifdef FREECIV_JSON_CONNECTION
10067 field_addr.name = "fields";
10068#endif /* FREECIV_JSON_CONNECTION */
10069 e = 0;
10070 e |= DIO_BV_PUT(&dout, &field_addr, fields);
10071 if (e) {
10072 log_packet_detailed("fields bitvector error detected");
10073 }
10074
10075 if (BV_ISSET(fields, 0)) {
10076 log_packet_detailed(" field 'seconds_to_phasedone' has changed");
10077#ifdef FREECIV_JSON_CONNECTION
10078 field_addr.name = "seconds_to_phasedone";
10079#endif /* FREECIV_JSON_CONNECTION */
10080 e = 0;
10081 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->seconds_to_phasedone, 100);
10082 if (e) {
10083 log_packet_detailed("'seconds_to_phasedone' field error detected");
10084 }
10085 }
10086 if (BV_ISSET(fields, 1)) {
10087 log_packet_detailed(" field 'last_turn_change_time' has changed");
10088#ifdef FREECIV_JSON_CONNECTION
10089 field_addr.name = "last_turn_change_time";
10090#endif /* FREECIV_JSON_CONNECTION */
10091 e = 0;
10092 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->last_turn_change_time, 100);
10093 if (e) {
10094 log_packet_detailed("'last_turn_change_time' field error detected");
10095 }
10096 }
10097
10098 *old = *real_packet;
10099#endif /* FREECIV_DELTA_PROTOCOL */
10100#ifndef FREECIV_DELTA_PROTOCOL
10101#ifdef FREECIV_JSON_CONNECTION
10102 field_addr.name = "seconds_to_phasedone";
10103#endif /* FREECIV_JSON_CONNECTION */
10104 e = 0;
10105 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->seconds_to_phasedone, 100);
10106 if (e) {
10107 log_packet_detailed("'seconds_to_phasedone' field error detected");
10108 }
10109#ifdef FREECIV_JSON_CONNECTION
10110 field_addr.name = "last_turn_change_time";
10111#endif /* FREECIV_JSON_CONNECTION */
10112 e = 0;
10113 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->last_turn_change_time, 100);
10114 if (e) {
10115 log_packet_detailed("'last_turn_change_time' field error detected");
10116 }
10117
10118#endif
10120}
10121
10123{
10124 if (!pc->used) {
10125 log_error("WARNING: trying to send data to the closed connection %s",
10127 return -1;
10128 }
10129 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TIMEOUT_INFO].packet != NULL, -1,
10130 "Handler for PACKET_TIMEOUT_INFO not installed");
10131 return pc->phs.handlers->send[PACKET_TIMEOUT_INFO].packet(pc, packet);
10132}
10133
10134#ifdef FREECIV_DELTA_PROTOCOL
10135#define hash_packet_map_info_100 hash_const
10136
10137#define cmp_packet_map_info_100 cmp_const
10138
10140#endif /* FREECIV_DELTA_PROTOCOL */
10141
10143{
10144#ifdef FREECIV_DELTA_PROTOCOL
10146 struct packet_map_info *old;
10147 struct genhash **hash = pc->phs.received + PACKET_MAP_INFO;
10148#endif /* FREECIV_DELTA_PROTOCOL */
10150#ifdef FREECIV_JSON_CONNECTION
10151 struct plocation field_addr;
10152 {
10156 }
10157#endif /* FREECIV_JSON_CONNECTION */
10158
10159#ifdef FREECIV_DELTA_PROTOCOL
10160#ifdef FREECIV_JSON_CONNECTION
10161 field_addr.name = "fields";
10162#endif /* FREECIV_JSON_CONNECTION */
10163 DIO_BV_GET(&din, &field_addr, fields);
10164
10165#else /* FREECIV_DELTA_PROTOCOL */
10166#ifdef FREECIV_JSON_CONNECTION
10167 field_addr.name = "xsize";
10168#endif /* FREECIV_JSON_CONNECTION */
10169 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->xsize)) {
10171 }
10172#ifdef FREECIV_JSON_CONNECTION
10173 field_addr.name = "ysize";
10174#endif /* FREECIV_JSON_CONNECTION */
10175 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ysize)) {
10177 }
10178#ifdef FREECIV_JSON_CONNECTION
10179 field_addr.name = "topology_id";
10180#endif /* FREECIV_JSON_CONNECTION */
10181 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
10182 RECEIVE_PACKET_FIELD_ERROR(topology_id);
10183 }
10184#ifdef FREECIV_JSON_CONNECTION
10185 field_addr.name = "wrap_id";
10186#endif /* FREECIV_JSON_CONNECTION */
10187 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
10189 }
10190#ifdef FREECIV_JSON_CONNECTION
10191 field_addr.name = "north_latitude";
10192#endif /* FREECIV_JSON_CONNECTION */
10193 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->north_latitude)) {
10194 RECEIVE_PACKET_FIELD_ERROR(north_latitude);
10195 }
10196#ifdef FREECIV_JSON_CONNECTION
10197 field_addr.name = "south_latitude";
10198#endif /* FREECIV_JSON_CONNECTION */
10199 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->south_latitude)) {
10200 RECEIVE_PACKET_FIELD_ERROR(south_latitude);
10201 }
10202#endif
10203 log_packet_detailed("packet_map_info_100: got info about ()");
10204
10205#ifdef FREECIV_DELTA_PROTOCOL
10206 if (NULL == *hash) {
10208 NULL, NULL, NULL, free);
10209 }
10210
10211 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
10212 *real_packet = *old;
10213 } else {
10214 log_packet_detailed(" no old info");
10215 memset(real_packet, 0, sizeof(*real_packet));
10216 }
10217
10218 if (BV_ISSET(fields, 0)) {
10219 log_packet_detailed(" got field 'xsize'");
10220#ifdef FREECIV_JSON_CONNECTION
10221 field_addr.name = "xsize";
10222#endif /* FREECIV_JSON_CONNECTION */
10223 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->xsize)) {
10225 }
10226 }
10227 if (BV_ISSET(fields, 1)) {
10228 log_packet_detailed(" got field 'ysize'");
10229#ifdef FREECIV_JSON_CONNECTION
10230 field_addr.name = "ysize";
10231#endif /* FREECIV_JSON_CONNECTION */
10232 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ysize)) {
10234 }
10235 }
10236 if (BV_ISSET(fields, 2)) {
10237 log_packet_detailed(" got field 'topology_id'");
10238#ifdef FREECIV_JSON_CONNECTION
10239 field_addr.name = "topology_id";
10240#endif /* FREECIV_JSON_CONNECTION */
10241 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
10242 RECEIVE_PACKET_FIELD_ERROR(topology_id);
10243 }
10244 }
10245 if (BV_ISSET(fields, 3)) {
10246 log_packet_detailed(" got field 'wrap_id'");
10247#ifdef FREECIV_JSON_CONNECTION
10248 field_addr.name = "wrap_id";
10249#endif /* FREECIV_JSON_CONNECTION */
10250 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
10252 }
10253 }
10254 if (BV_ISSET(fields, 4)) {
10255 log_packet_detailed(" got field 'north_latitude'");
10256#ifdef FREECIV_JSON_CONNECTION
10257 field_addr.name = "north_latitude";
10258#endif /* FREECIV_JSON_CONNECTION */
10259 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->north_latitude)) {
10260 RECEIVE_PACKET_FIELD_ERROR(north_latitude);
10261 }
10262 }
10263 if (BV_ISSET(fields, 5)) {
10264 log_packet_detailed(" got field 'south_latitude'");
10265#ifdef FREECIV_JSON_CONNECTION
10266 field_addr.name = "south_latitude";
10267#endif /* FREECIV_JSON_CONNECTION */
10268 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->south_latitude)) {
10269 RECEIVE_PACKET_FIELD_ERROR(south_latitude);
10270 }
10271 }
10272
10273 if (NULL == old) {
10274 old = fc_malloc(sizeof(*old));
10275 *old = *real_packet;
10276 genhash_insert(*hash, old, old);
10277 } else {
10278 *old = *real_packet;
10279 }
10280
10281#endif /* FREECIV_DELTA_PROTOCOL */
10283}
10284
10285static int send_packet_map_info_100(struct connection *pc, const struct packet_map_info *packet)
10286{
10287 const struct packet_map_info *real_packet = packet;
10288 int e;
10289#ifdef FREECIV_DELTA_PROTOCOL
10291 struct packet_map_info *old;
10292 bool differ;
10293 struct genhash **hash = pc->phs.sent + PACKET_MAP_INFO;
10294#endif /* FREECIV_DELTA_PROTOCOL */
10296#ifdef FREECIV_JSON_CONNECTION
10297 struct plocation field_addr;
10298 {
10302 }
10303#endif /* FREECIV_JSON_CONNECTION */
10304
10305 log_packet_detailed("packet_map_info_100: sending info about ()");
10306
10307#ifdef FREECIV_DELTA_PROTOCOL
10308 if (NULL == *hash) {
10310 NULL, NULL, NULL, free);
10311 }
10312 BV_CLR_ALL(fields);
10313
10314 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
10315 old = fc_malloc(sizeof(*old));
10316 *old = *real_packet;
10317 genhash_insert(*hash, old, old);
10318 memset(old, 0, sizeof(*old));
10319 }
10320 differ = (old->xsize != real_packet->xsize);
10321 if (differ) {
10322 BV_SET(fields, 0);
10323 }
10324
10325 differ = (old->ysize != real_packet->ysize);
10326 if (differ) {
10327 BV_SET(fields, 1);
10328 }
10329
10330 differ = (old->topology_id != real_packet->topology_id);
10331 if (differ) {
10332 BV_SET(fields, 2);
10333 }
10334
10335 differ = (old->wrap_id != real_packet->wrap_id);
10336 if (differ) {
10337 BV_SET(fields, 3);
10338 }
10339
10340 differ = (old->north_latitude != real_packet->north_latitude);
10341 if (differ) {
10342 BV_SET(fields, 4);
10343 }
10344
10345 differ = (old->south_latitude != real_packet->south_latitude);
10346 if (differ) {
10347 BV_SET(fields, 5);
10348 }
10349
10350
10351#ifdef FREECIV_JSON_CONNECTION
10352 field_addr.name = "fields";
10353#endif /* FREECIV_JSON_CONNECTION */
10354 e = 0;
10355 e |= DIO_BV_PUT(&dout, &field_addr, fields);
10356 if (e) {
10357 log_packet_detailed("fields bitvector error detected");
10358 }
10359
10360 if (BV_ISSET(fields, 0)) {
10361 log_packet_detailed(" field 'xsize' has changed");
10362#ifdef FREECIV_JSON_CONNECTION
10363 field_addr.name = "xsize";
10364#endif /* FREECIV_JSON_CONNECTION */
10365 e = 0;
10366 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->xsize);
10367 if (e) {
10368 log_packet_detailed("'xsize' field error detected");
10369 }
10370 }
10371 if (BV_ISSET(fields, 1)) {
10372 log_packet_detailed(" field 'ysize' has changed");
10373#ifdef FREECIV_JSON_CONNECTION
10374 field_addr.name = "ysize";
10375#endif /* FREECIV_JSON_CONNECTION */
10376 e = 0;
10377 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ysize);
10378 if (e) {
10379 log_packet_detailed("'ysize' field error detected");
10380 }
10381 }
10382 if (BV_ISSET(fields, 2)) {
10383 log_packet_detailed(" field 'topology_id' has changed");
10384#ifdef FREECIV_JSON_CONNECTION
10385 field_addr.name = "topology_id";
10386#endif /* FREECIV_JSON_CONNECTION */
10387 e = 0;
10388 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
10389 if (e) {
10390 log_packet_detailed("'topology_id' field error detected");
10391 }
10392 }
10393 if (BV_ISSET(fields, 3)) {
10394 log_packet_detailed(" field 'wrap_id' has changed");
10395#ifdef FREECIV_JSON_CONNECTION
10396 field_addr.name = "wrap_id";
10397#endif /* FREECIV_JSON_CONNECTION */
10398 e = 0;
10399 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
10400 if (e) {
10401 log_packet_detailed("'wrap_id' field error detected");
10402 }
10403 }
10404 if (BV_ISSET(fields, 4)) {
10405 log_packet_detailed(" field 'north_latitude' has changed");
10406#ifdef FREECIV_JSON_CONNECTION
10407 field_addr.name = "north_latitude";
10408#endif /* FREECIV_JSON_CONNECTION */
10409 e = 0;
10410 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->north_latitude);
10411 if (e) {
10412 log_packet_detailed("'north_latitude' field error detected");
10413 }
10414 }
10415 if (BV_ISSET(fields, 5)) {
10416 log_packet_detailed(" field 'south_latitude' has changed");
10417#ifdef FREECIV_JSON_CONNECTION
10418 field_addr.name = "south_latitude";
10419#endif /* FREECIV_JSON_CONNECTION */
10420 e = 0;
10421 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->south_latitude);
10422 if (e) {
10423 log_packet_detailed("'south_latitude' field error detected");
10424 }
10425 }
10426
10427 *old = *real_packet;
10428#endif /* FREECIV_DELTA_PROTOCOL */
10429#ifndef FREECIV_DELTA_PROTOCOL
10430#ifdef FREECIV_JSON_CONNECTION
10431 field_addr.name = "xsize";
10432#endif /* FREECIV_JSON_CONNECTION */
10433 e = 0;
10434 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->xsize);
10435 if (e) {
10436 log_packet_detailed("'xsize' field error detected");
10437 }
10438#ifdef FREECIV_JSON_CONNECTION
10439 field_addr.name = "ysize";
10440#endif /* FREECIV_JSON_CONNECTION */
10441 e = 0;
10442 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ysize);
10443 if (e) {
10444 log_packet_detailed("'ysize' field error detected");
10445 }
10446#ifdef FREECIV_JSON_CONNECTION
10447 field_addr.name = "topology_id";
10448#endif /* FREECIV_JSON_CONNECTION */
10449 e = 0;
10450 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
10451 if (e) {
10452 log_packet_detailed("'topology_id' field error detected");
10453 }
10454#ifdef FREECIV_JSON_CONNECTION
10455 field_addr.name = "wrap_id";
10456#endif /* FREECIV_JSON_CONNECTION */
10457 e = 0;
10458 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
10459 if (e) {
10460 log_packet_detailed("'wrap_id' field error detected");
10461 }
10462#ifdef FREECIV_JSON_CONNECTION
10463 field_addr.name = "north_latitude";
10464#endif /* FREECIV_JSON_CONNECTION */
10465 e = 0;
10466 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->north_latitude);
10467 if (e) {
10468 log_packet_detailed("'north_latitude' field error detected");
10469 }
10470#ifdef FREECIV_JSON_CONNECTION
10471 field_addr.name = "south_latitude";
10472#endif /* FREECIV_JSON_CONNECTION */
10473 e = 0;
10474 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->south_latitude);
10475 if (e) {
10476 log_packet_detailed("'south_latitude' field error detected");
10477 }
10478
10479#endif
10481}
10482
10483int send_packet_map_info(struct connection *pc, const struct packet_map_info *packet)
10484{
10485 if (!pc->used) {
10486 log_error("WARNING: trying to send data to the closed connection %s",
10488 return -1;
10489 }
10490 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_MAP_INFO].packet != NULL, -1,
10491 "Handler for PACKET_MAP_INFO not installed");
10492 return pc->phs.handlers->send[PACKET_MAP_INFO].packet(pc, packet);
10493}
10494
10495void lsend_packet_map_info(struct conn_list *dest, const struct packet_map_info *packet)
10496{
10497 conn_list_iterate(dest, pconn) {
10498 send_packet_map_info(pconn, packet);
10500}
10501
10502#ifdef FREECIV_DELTA_PROTOCOL
10503#define hash_packet_nuke_tile_info_100 hash_const
10504
10505#define cmp_packet_nuke_tile_info_100 cmp_const
10506
10508#endif /* FREECIV_DELTA_PROTOCOL */
10509
10511{
10512#ifdef FREECIV_DELTA_PROTOCOL
10514 struct packet_nuke_tile_info *old;
10515 struct genhash **hash = pc->phs.received + PACKET_NUKE_TILE_INFO;
10516#endif /* FREECIV_DELTA_PROTOCOL */
10518#ifdef FREECIV_JSON_CONNECTION
10519 struct plocation field_addr;
10520 {
10524 }
10525#endif /* FREECIV_JSON_CONNECTION */
10526
10527#ifdef FREECIV_DELTA_PROTOCOL
10528#ifdef FREECIV_JSON_CONNECTION
10529 field_addr.name = "fields";
10530#endif /* FREECIV_JSON_CONNECTION */
10531 DIO_BV_GET(&din, &field_addr, fields);
10532
10533#else /* FREECIV_DELTA_PROTOCOL */
10534#ifdef FREECIV_JSON_CONNECTION
10535 field_addr.name = "tile";
10536#endif /* FREECIV_JSON_CONNECTION */
10537 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
10539 }
10540#endif
10541 log_packet_detailed("packet_nuke_tile_info_100: got info about ()");
10542
10543#ifdef FREECIV_DELTA_PROTOCOL
10544 if (NULL == *hash) {
10546 NULL, NULL, NULL, free);
10547 }
10548
10549 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
10550 *real_packet = *old;
10551 } else {
10552 log_packet_detailed(" no old info");
10553 memset(real_packet, 0, sizeof(*real_packet));
10554 }
10555
10556 if (BV_ISSET(fields, 0)) {
10557 log_packet_detailed(" got field 'tile'");
10558#ifdef FREECIV_JSON_CONNECTION
10559 field_addr.name = "tile";
10560#endif /* FREECIV_JSON_CONNECTION */
10561 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
10563 }
10564 }
10565
10566 if (NULL == old) {
10567 old = fc_malloc(sizeof(*old));
10568 *old = *real_packet;
10569 genhash_insert(*hash, old, old);
10570 } else {
10571 *old = *real_packet;
10572 }
10573
10574#endif /* FREECIV_DELTA_PROTOCOL */
10576}
10577
10579{
10580 const struct packet_nuke_tile_info *real_packet = packet;
10581 int e;
10582#ifdef FREECIV_DELTA_PROTOCOL
10584 struct packet_nuke_tile_info *old;
10585 bool differ;
10586 struct genhash **hash = pc->phs.sent + PACKET_NUKE_TILE_INFO;
10587#endif /* FREECIV_DELTA_PROTOCOL */
10589#ifdef FREECIV_JSON_CONNECTION
10590 struct plocation field_addr;
10591 {
10595 }
10596#endif /* FREECIV_JSON_CONNECTION */
10597
10598 log_packet_detailed("packet_nuke_tile_info_100: sending info about ()");
10599
10600#ifdef FREECIV_DELTA_PROTOCOL
10601 if (NULL == *hash) {
10603 NULL, NULL, NULL, free);
10604 }
10605 BV_CLR_ALL(fields);
10606
10607 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
10608 old = fc_malloc(sizeof(*old));
10609 *old = *real_packet;
10610 genhash_insert(*hash, old, old);
10611 memset(old, 0, sizeof(*old));
10612 }
10613 differ = (old->tile != real_packet->tile);
10614 if (differ) {
10615 BV_SET(fields, 0);
10616 }
10617
10618
10619#ifdef FREECIV_JSON_CONNECTION
10620 field_addr.name = "fields";
10621#endif /* FREECIV_JSON_CONNECTION */
10622 e = 0;
10623 e |= DIO_BV_PUT(&dout, &field_addr, fields);
10624 if (e) {
10625 log_packet_detailed("fields bitvector error detected");
10626 }
10627
10628 if (BV_ISSET(fields, 0)) {
10629 log_packet_detailed(" field 'tile' has changed");
10630#ifdef FREECIV_JSON_CONNECTION
10631 field_addr.name = "tile";
10632#endif /* FREECIV_JSON_CONNECTION */
10633 e = 0;
10634 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
10635 if (e) {
10636 log_packet_detailed("'tile' field error detected");
10637 }
10638 }
10639
10640 *old = *real_packet;
10641#endif /* FREECIV_DELTA_PROTOCOL */
10642#ifndef FREECIV_DELTA_PROTOCOL
10643#ifdef FREECIV_JSON_CONNECTION
10644 field_addr.name = "tile";
10645#endif /* FREECIV_JSON_CONNECTION */
10646 e = 0;
10647 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
10648 if (e) {
10649 log_packet_detailed("'tile' field error detected");
10650 }
10651
10652#endif
10654}
10655
10657{
10658 if (!pc->used) {
10659 log_error("WARNING: trying to send data to the closed connection %s",
10661 return -1;
10662 }
10663 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NUKE_TILE_INFO].packet != NULL, -1,
10664 "Handler for PACKET_NUKE_TILE_INFO not installed");
10665 return pc->phs.handlers->send[PACKET_NUKE_TILE_INFO].packet(pc, packet);
10666}
10667
10668void lsend_packet_nuke_tile_info(struct conn_list *dest, const struct packet_nuke_tile_info *packet)
10669{
10670 conn_list_iterate(dest, pconn) {
10673}
10674
10676{
10677 struct packet_nuke_tile_info packet, *real_packet = &packet;
10678
10680
10682}
10683
10685{
10686 struct packet_nuke_tile_info packet, *real_packet = &packet;
10687
10689
10691}
10692
10693#ifdef FREECIV_DELTA_PROTOCOL
10695{
10696 const struct packet_team_name_info *key = (const struct packet_team_name_info *) vkey;
10697 genhash_val_t result = 0;
10698
10699 result += key->team_id;
10700
10701 result &= 0xFFFFFFFF;
10702 return result;
10703}
10704
10705static bool cmp_packet_team_name_info_100(const void *vkey1, const void *vkey2)
10706{
10707 const struct packet_team_name_info *old = (const struct packet_team_name_info *) vkey1;
10708 const struct packet_team_name_info *real_packet = (const struct packet_team_name_info *) vkey2;
10709 bool differ;
10710
10711 differ = (old->team_id != real_packet->team_id);
10712
10713 return !differ;
10714}
10716#endif /* FREECIV_DELTA_PROTOCOL */
10717
10719{
10720#ifdef FREECIV_DELTA_PROTOCOL
10722 struct packet_team_name_info *old;
10723 struct genhash **hash = pc->phs.received + PACKET_TEAM_NAME_INFO;
10724#endif /* FREECIV_DELTA_PROTOCOL */
10726#ifdef FREECIV_JSON_CONNECTION
10727 struct plocation field_addr;
10728 {
10732 }
10733#endif /* FREECIV_JSON_CONNECTION */
10734
10735#ifdef FREECIV_DELTA_PROTOCOL
10736#ifdef FREECIV_JSON_CONNECTION
10737 field_addr.name = "fields";
10738#endif /* FREECIV_JSON_CONNECTION */
10739 DIO_BV_GET(&din, &field_addr, fields);
10740#ifdef FREECIV_JSON_CONNECTION
10741 field_addr.name = "team_id";
10742#endif /* FREECIV_JSON_CONNECTION */
10743 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team_id)) {
10745 }
10746
10747#else /* FREECIV_DELTA_PROTOCOL */
10748#ifdef FREECIV_JSON_CONNECTION
10749 field_addr.name = "team_id";
10750#endif /* FREECIV_JSON_CONNECTION */
10751 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team_id)) {
10753 }
10754#ifdef FREECIV_JSON_CONNECTION
10755 field_addr.name = "team_name";
10756#endif /* FREECIV_JSON_CONNECTION */
10757 if (!DIO_GET(string, &din, &field_addr, real_packet->team_name, sizeof(real_packet->team_name))) {
10758 RECEIVE_PACKET_FIELD_ERROR(team_name);
10759 }
10760#endif
10761 log_packet_detailed("packet_team_name_info_100: got info about (%d)",
10762 real_packet->team_id);
10763
10764#ifdef FREECIV_DELTA_PROTOCOL
10765 if (NULL == *hash) {
10767 NULL, NULL, NULL, free);
10768 }
10769
10770 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
10771 *real_packet = *old;
10772 } else {
10773 int team_id;
10774
10775 team_id = real_packet->team_id;
10776
10777 log_packet_detailed(" no old info");
10778 memset(real_packet, 0, sizeof(*real_packet));
10779
10780 real_packet->team_id = team_id;
10781 }
10782
10783 if (BV_ISSET(fields, 0)) {
10784 log_packet_detailed(" got field 'team_name'");
10785#ifdef FREECIV_JSON_CONNECTION
10786 field_addr.name = "team_name";
10787#endif /* FREECIV_JSON_CONNECTION */
10788 if (!DIO_GET(string, &din, &field_addr, real_packet->team_name, sizeof(real_packet->team_name))) {
10789 RECEIVE_PACKET_FIELD_ERROR(team_name);
10790 }
10791 }
10792
10793 if (NULL == old) {
10794 old = fc_malloc(sizeof(*old));
10795 *old = *real_packet;
10796 genhash_insert(*hash, old, old);
10797 } else {
10798 *old = *real_packet;
10799 }
10800
10801#endif /* FREECIV_DELTA_PROTOCOL */
10803}
10804
10806{
10807 const struct packet_team_name_info *real_packet = packet;
10808 int e;
10809#ifdef FREECIV_DELTA_PROTOCOL
10811 struct packet_team_name_info *old;
10812 bool differ;
10813 struct genhash **hash = pc->phs.sent + PACKET_TEAM_NAME_INFO;
10814#endif /* FREECIV_DELTA_PROTOCOL */
10816#ifdef FREECIV_JSON_CONNECTION
10817 struct plocation field_addr;
10818 {
10822 }
10823#endif /* FREECIV_JSON_CONNECTION */
10824
10825 log_packet_detailed("packet_team_name_info_100: sending info about (%d)",
10826 real_packet->team_id);
10827
10828#ifdef FREECIV_DELTA_PROTOCOL
10829 if (NULL == *hash) {
10831 NULL, NULL, NULL, free);
10832 }
10833 BV_CLR_ALL(fields);
10834
10835 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
10836 old = fc_malloc(sizeof(*old));
10837 *old = *real_packet;
10838 genhash_insert(*hash, old, old);
10839 memset(old, 0, sizeof(*old));
10840 }
10841 differ = (strcmp(old->team_name, real_packet->team_name) != 0);
10842 if (differ) {
10843 BV_SET(fields, 0);
10844 }
10845
10846
10847#ifdef FREECIV_JSON_CONNECTION
10848 field_addr.name = "fields";
10849#endif /* FREECIV_JSON_CONNECTION */
10850 e = 0;
10851 e |= DIO_BV_PUT(&dout, &field_addr, fields);
10852 if (e) {
10853 log_packet_detailed("fields bitvector error detected");
10854 }
10855#ifdef FREECIV_JSON_CONNECTION
10856 field_addr.name = "team_id";
10857#endif /* FREECIV_JSON_CONNECTION */
10858 e = 0;
10859 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team_id);
10860 if (e) {
10861 log_packet_detailed("'team_id' field error detected");
10862 }
10863
10864 if (BV_ISSET(fields, 0)) {
10865 log_packet_detailed(" field 'team_name' has changed");
10866#ifdef FREECIV_JSON_CONNECTION
10867 field_addr.name = "team_name";
10868#endif /* FREECIV_JSON_CONNECTION */
10869 e = 0;
10870 e |= DIO_PUT(string, &dout, &field_addr, real_packet->team_name);
10871 if (e) {
10872 log_packet_detailed("'team_name' field error detected");
10873 }
10874 }
10875
10876 *old = *real_packet;
10877#endif /* FREECIV_DELTA_PROTOCOL */
10878#ifndef FREECIV_DELTA_PROTOCOL
10879#ifdef FREECIV_JSON_CONNECTION
10880 field_addr.name = "team_id";
10881#endif /* FREECIV_JSON_CONNECTION */
10882 e = 0;
10883 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team_id);
10884 if (e) {
10885 log_packet_detailed("'team_id' field error detected");
10886 }
10887#ifdef FREECIV_JSON_CONNECTION
10888 field_addr.name = "team_name";
10889#endif /* FREECIV_JSON_CONNECTION */
10890 e = 0;
10891 e |= DIO_PUT(string, &dout, &field_addr, real_packet->team_name);
10892 if (e) {
10893 log_packet_detailed("'team_name' field error detected");
10894 }
10895
10896#endif
10898}
10899
10901{
10902 if (!pc->used) {
10903 log_error("WARNING: trying to send data to the closed connection %s",
10905 return -1;
10906 }
10907 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TEAM_NAME_INFO].packet != NULL, -1,
10908 "Handler for PACKET_TEAM_NAME_INFO not installed");
10909 return pc->phs.handlers->send[PACKET_TEAM_NAME_INFO].packet(pc, packet);
10910}
10911
10912void lsend_packet_team_name_info(struct conn_list *dest, const struct packet_team_name_info *packet)
10913{
10914 conn_list_iterate(dest, pconn) {
10917}
10918
10919#ifdef FREECIV_DELTA_PROTOCOL
10920#define hash_packet_achievement_info_100 hash_const
10921
10922#define cmp_packet_achievement_info_100 cmp_const
10923
10925#endif /* FREECIV_DELTA_PROTOCOL */
10926
10928{
10929#ifdef FREECIV_DELTA_PROTOCOL
10931 struct packet_achievement_info *old;
10932 struct genhash **hash = pc->phs.received + PACKET_ACHIEVEMENT_INFO;
10933#endif /* FREECIV_DELTA_PROTOCOL */
10935#ifdef FREECIV_JSON_CONNECTION
10936 struct plocation field_addr;
10937 {
10941 }
10942#endif /* FREECIV_JSON_CONNECTION */
10943
10944#ifdef FREECIV_DELTA_PROTOCOL
10945#ifdef FREECIV_JSON_CONNECTION
10946 field_addr.name = "fields";
10947#endif /* FREECIV_JSON_CONNECTION */
10948 DIO_BV_GET(&din, &field_addr, fields);
10949
10950#else /* FREECIV_DELTA_PROTOCOL */
10951#ifdef FREECIV_JSON_CONNECTION
10952 field_addr.name = "id";
10953#endif /* FREECIV_JSON_CONNECTION */
10954 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
10956 }
10957#ifdef FREECIV_JSON_CONNECTION
10958 field_addr.name = "gained";
10959#endif /* FREECIV_JSON_CONNECTION */
10960 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->gained)) {
10962 }
10963#ifdef FREECIV_JSON_CONNECTION
10964 field_addr.name = "first";
10965#endif /* FREECIV_JSON_CONNECTION */
10966 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->first)) {
10968 }
10969#endif
10970 log_packet_detailed("packet_achievement_info_100: got info about ()");
10971
10972#ifdef FREECIV_DELTA_PROTOCOL
10973 if (NULL == *hash) {
10975 NULL, NULL, NULL, free);
10976 }
10977
10978 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
10979 *real_packet = *old;
10980 } else {
10981 log_packet_detailed(" no old info");
10982 memset(real_packet, 0, sizeof(*real_packet));
10983 }
10984
10985 if (BV_ISSET(fields, 0)) {
10986 log_packet_detailed(" got field 'id'");
10987#ifdef FREECIV_JSON_CONNECTION
10988 field_addr.name = "id";
10989#endif /* FREECIV_JSON_CONNECTION */
10990 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
10992 }
10993 }
10994 real_packet->gained = BV_ISSET(fields, 1);
10995 real_packet->first = BV_ISSET(fields, 2);
10996
10997 if (NULL == old) {
10998 old = fc_malloc(sizeof(*old));
10999 *old = *real_packet;
11000 genhash_insert(*hash, old, old);
11001 } else {
11002 *old = *real_packet;
11003 }
11004
11005#endif /* FREECIV_DELTA_PROTOCOL */
11007}
11008
11010{
11011 const struct packet_achievement_info *real_packet = packet;
11012 int e;
11013#ifdef FREECIV_DELTA_PROTOCOL
11015 struct packet_achievement_info *old;
11016 bool differ;
11017 struct genhash **hash = pc->phs.sent + PACKET_ACHIEVEMENT_INFO;
11018#endif /* FREECIV_DELTA_PROTOCOL */
11020#ifdef FREECIV_JSON_CONNECTION
11021 struct plocation field_addr;
11022 {
11026 }
11027#endif /* FREECIV_JSON_CONNECTION */
11028
11029 log_packet_detailed("packet_achievement_info_100: sending info about ()");
11030
11031#ifdef FREECIV_DELTA_PROTOCOL
11032 if (NULL == *hash) {
11034 NULL, NULL, NULL, free);
11035 }
11036 BV_CLR_ALL(fields);
11037
11038 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11039 old = fc_malloc(sizeof(*old));
11040 *old = *real_packet;
11041 genhash_insert(*hash, old, old);
11042 memset(old, 0, sizeof(*old));
11043 }
11044 differ = (old->id != real_packet->id);
11045 if (differ) {
11046 BV_SET(fields, 0);
11047 }
11048
11049 if (packet->gained) {
11050 BV_SET(fields, 1);
11051 }
11052
11053 if (packet->first) {
11054 BV_SET(fields, 2);
11055 }
11056
11057
11058#ifdef FREECIV_JSON_CONNECTION
11059 field_addr.name = "fields";
11060#endif /* FREECIV_JSON_CONNECTION */
11061 e = 0;
11062 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11063 if (e) {
11064 log_packet_detailed("fields bitvector error detected");
11065 }
11066
11067 if (BV_ISSET(fields, 0)) {
11068 log_packet_detailed(" field 'id' has changed");
11069#ifdef FREECIV_JSON_CONNECTION
11070 field_addr.name = "id";
11071#endif /* FREECIV_JSON_CONNECTION */
11072 e = 0;
11073 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
11074 if (e) {
11075 log_packet_detailed("'id' field error detected");
11076 }
11077 }
11078 /* field 1 is folded into the header */
11079 /* field 2 is folded into the header */
11080
11081 *old = *real_packet;
11082#endif /* FREECIV_DELTA_PROTOCOL */
11083#ifndef FREECIV_DELTA_PROTOCOL
11084#ifdef FREECIV_JSON_CONNECTION
11085 field_addr.name = "id";
11086#endif /* FREECIV_JSON_CONNECTION */
11087 e = 0;
11088 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
11089 if (e) {
11090 log_packet_detailed("'id' field error detected");
11091 }
11092#ifdef FREECIV_JSON_CONNECTION
11093 field_addr.name = "gained";
11094#endif /* FREECIV_JSON_CONNECTION */
11095 e = 0;
11096 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->gained);
11097 if (e) {
11098 log_packet_detailed("'gained' field error detected");
11099 }
11100#ifdef FREECIV_JSON_CONNECTION
11101 field_addr.name = "first";
11102#endif /* FREECIV_JSON_CONNECTION */
11103 e = 0;
11104 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->first);
11105 if (e) {
11106 log_packet_detailed("'first' field error detected");
11107 }
11108
11109#endif
11111}
11112
11114{
11115 if (!pc->used) {
11116 log_error("WARNING: trying to send data to the closed connection %s",
11118 return -1;
11119 }
11120 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_ACHIEVEMENT_INFO].packet != NULL, -1,
11121 "Handler for PACKET_ACHIEVEMENT_INFO not installed");
11122 return pc->phs.handlers->send[PACKET_ACHIEVEMENT_INFO].packet(pc, packet);
11123}
11124
11126{
11127 conn_list_iterate(dest, pconn) {
11130}
11131
11132#ifdef FREECIV_DELTA_PROTOCOL
11133#define hash_packet_chat_msg_100 hash_const
11134
11135#define cmp_packet_chat_msg_100 cmp_const
11136
11138#endif /* FREECIV_DELTA_PROTOCOL */
11139
11141{
11142#ifdef FREECIV_DELTA_PROTOCOL
11144 struct packet_chat_msg *old;
11145 struct genhash **hash = pc->phs.received + PACKET_CHAT_MSG;
11146#endif /* FREECIV_DELTA_PROTOCOL */
11148#ifdef FREECIV_JSON_CONNECTION
11149 struct plocation field_addr;
11150 {
11154 }
11155#endif /* FREECIV_JSON_CONNECTION */
11156
11157#ifdef FREECIV_DELTA_PROTOCOL
11158#ifdef FREECIV_JSON_CONNECTION
11159 field_addr.name = "fields";
11160#endif /* FREECIV_JSON_CONNECTION */
11161 DIO_BV_GET(&din, &field_addr, fields);
11162
11163#else /* FREECIV_DELTA_PROTOCOL */
11164#ifdef FREECIV_JSON_CONNECTION
11165 field_addr.name = "message";
11166#endif /* FREECIV_JSON_CONNECTION */
11167 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
11169 }
11170#ifdef FREECIV_JSON_CONNECTION
11171 field_addr.name = "tile";
11172#endif /* FREECIV_JSON_CONNECTION */
11173 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
11175 }
11176#ifdef FREECIV_JSON_CONNECTION
11177 field_addr.name = "event";
11178#endif /* FREECIV_JSON_CONNECTION */
11179 {
11180 int readin;
11181
11182 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
11184 }
11185 real_packet->event = readin;
11186 }
11187#ifdef FREECIV_JSON_CONNECTION
11188 field_addr.name = "turn";
11189#endif /* FREECIV_JSON_CONNECTION */
11190 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
11192 }
11193#ifdef FREECIV_JSON_CONNECTION
11194 field_addr.name = "phase";
11195#endif /* FREECIV_JSON_CONNECTION */
11196 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
11198 }
11199#ifdef FREECIV_JSON_CONNECTION
11200 field_addr.name = "conn_id";
11201#endif /* FREECIV_JSON_CONNECTION */
11202 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
11204 }
11205#endif
11206 log_packet_detailed("packet_chat_msg_100: got info about ()");
11207
11208#ifdef FREECIV_DELTA_PROTOCOL
11209 if (NULL == *hash) {
11211 NULL, NULL, NULL, free);
11212 }
11213
11214 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
11215 *real_packet = *old;
11216 } else {
11217 log_packet_detailed(" no old info");
11218 memset(real_packet, 0, sizeof(*real_packet));
11219 }
11220
11221 if (BV_ISSET(fields, 0)) {
11222 log_packet_detailed(" got field 'message'");
11223#ifdef FREECIV_JSON_CONNECTION
11224 field_addr.name = "message";
11225#endif /* FREECIV_JSON_CONNECTION */
11226 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
11228 }
11229 }
11230 if (BV_ISSET(fields, 1)) {
11231 log_packet_detailed(" got field 'tile'");
11232#ifdef FREECIV_JSON_CONNECTION
11233 field_addr.name = "tile";
11234#endif /* FREECIV_JSON_CONNECTION */
11235 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
11237 }
11238 }
11239 if (BV_ISSET(fields, 2)) {
11240 log_packet_detailed(" got field 'event'");
11241#ifdef FREECIV_JSON_CONNECTION
11242 field_addr.name = "event";
11243#endif /* FREECIV_JSON_CONNECTION */
11244 {
11245 int readin;
11246
11247 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
11249 }
11250 real_packet->event = readin;
11251 }
11252 }
11253 if (BV_ISSET(fields, 3)) {
11254 log_packet_detailed(" got field 'turn'");
11255#ifdef FREECIV_JSON_CONNECTION
11256 field_addr.name = "turn";
11257#endif /* FREECIV_JSON_CONNECTION */
11258 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
11260 }
11261 }
11262 if (BV_ISSET(fields, 4)) {
11263 log_packet_detailed(" got field 'phase'");
11264#ifdef FREECIV_JSON_CONNECTION
11265 field_addr.name = "phase";
11266#endif /* FREECIV_JSON_CONNECTION */
11267 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
11269 }
11270 }
11271 if (BV_ISSET(fields, 5)) {
11272 log_packet_detailed(" got field 'conn_id'");
11273#ifdef FREECIV_JSON_CONNECTION
11274 field_addr.name = "conn_id";
11275#endif /* FREECIV_JSON_CONNECTION */
11276 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
11278 }
11279 }
11280
11281 if (NULL == old) {
11282 old = fc_malloc(sizeof(*old));
11283 *old = *real_packet;
11284 genhash_insert(*hash, old, old);
11285 } else {
11286 *old = *real_packet;
11287 }
11288
11289#endif /* FREECIV_DELTA_PROTOCOL */
11291}
11292
11293static int send_packet_chat_msg_100(struct connection *pc, const struct packet_chat_msg *packet)
11294{
11295 const struct packet_chat_msg *real_packet = packet;
11296 int e;
11297#ifdef FREECIV_DELTA_PROTOCOL
11299 struct packet_chat_msg *old;
11300 bool differ;
11301 struct genhash **hash = pc->phs.sent + PACKET_CHAT_MSG;
11302#endif /* FREECIV_DELTA_PROTOCOL */
11304#ifdef FREECIV_JSON_CONNECTION
11305 struct plocation field_addr;
11306 {
11310 }
11311#endif /* FREECIV_JSON_CONNECTION */
11312
11313 log_packet_detailed("packet_chat_msg_100: sending info about ()");
11314
11315#ifdef FREECIV_DELTA_PROTOCOL
11316 if (NULL == *hash) {
11318 NULL, NULL, NULL, free);
11319 }
11320 BV_CLR_ALL(fields);
11321
11322 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11323 old = fc_malloc(sizeof(*old));
11324 *old = *real_packet;
11325 genhash_insert(*hash, old, old);
11326 memset(old, 0, sizeof(*old));
11327 }
11328 differ = (strcmp(old->message, real_packet->message) != 0);
11329 if (differ) {
11330 BV_SET(fields, 0);
11331 }
11332
11333 differ = (old->tile != real_packet->tile);
11334 if (differ) {
11335 BV_SET(fields, 1);
11336 }
11337
11338 differ = (old->event != real_packet->event);
11339 if (differ) {
11340 BV_SET(fields, 2);
11341 }
11342
11343 differ = (old->turn != real_packet->turn);
11344 if (differ) {
11345 BV_SET(fields, 3);
11346 }
11347
11348 differ = (old->phase != real_packet->phase);
11349 if (differ) {
11350 BV_SET(fields, 4);
11351 }
11352
11353 differ = (old->conn_id != real_packet->conn_id);
11354 if (differ) {
11355 BV_SET(fields, 5);
11356 }
11357
11358
11359#ifdef FREECIV_JSON_CONNECTION
11360 field_addr.name = "fields";
11361#endif /* FREECIV_JSON_CONNECTION */
11362 e = 0;
11363 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11364 if (e) {
11365 log_packet_detailed("fields bitvector error detected");
11366 }
11367
11368 if (BV_ISSET(fields, 0)) {
11369 log_packet_detailed(" field 'message' has changed");
11370#ifdef FREECIV_JSON_CONNECTION
11371 field_addr.name = "message";
11372#endif /* FREECIV_JSON_CONNECTION */
11373 e = 0;
11374 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
11375 if (e) {
11376 log_packet_detailed("'message' field error detected");
11377 }
11378 }
11379 if (BV_ISSET(fields, 1)) {
11380 log_packet_detailed(" field 'tile' has changed");
11381#ifdef FREECIV_JSON_CONNECTION
11382 field_addr.name = "tile";
11383#endif /* FREECIV_JSON_CONNECTION */
11384 e = 0;
11385 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
11386 if (e) {
11387 log_packet_detailed("'tile' field error detected");
11388 }
11389 }
11390 if (BV_ISSET(fields, 2)) {
11391 log_packet_detailed(" field 'event' has changed");
11392#ifdef FREECIV_JSON_CONNECTION
11393 field_addr.name = "event";
11394#endif /* FREECIV_JSON_CONNECTION */
11395 e = 0;
11396 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
11397 if (e) {
11398 log_packet_detailed("'event' field error detected");
11399 }
11400 }
11401 if (BV_ISSET(fields, 3)) {
11402 log_packet_detailed(" field 'turn' has changed");
11403#ifdef FREECIV_JSON_CONNECTION
11404 field_addr.name = "turn";
11405#endif /* FREECIV_JSON_CONNECTION */
11406 e = 0;
11407 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
11408 if (e) {
11409 log_packet_detailed("'turn' field error detected");
11410 }
11411 }
11412 if (BV_ISSET(fields, 4)) {
11413 log_packet_detailed(" field 'phase' has changed");
11414#ifdef FREECIV_JSON_CONNECTION
11415 field_addr.name = "phase";
11416#endif /* FREECIV_JSON_CONNECTION */
11417 e = 0;
11418 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
11419 if (e) {
11420 log_packet_detailed("'phase' field error detected");
11421 }
11422 }
11423 if (BV_ISSET(fields, 5)) {
11424 log_packet_detailed(" field 'conn_id' has changed");
11425#ifdef FREECIV_JSON_CONNECTION
11426 field_addr.name = "conn_id";
11427#endif /* FREECIV_JSON_CONNECTION */
11428 e = 0;
11429 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
11430 if (e) {
11431 log_packet_detailed("'conn_id' field error detected");
11432 }
11433 }
11434
11435 *old = *real_packet;
11436#endif /* FREECIV_DELTA_PROTOCOL */
11437#ifndef FREECIV_DELTA_PROTOCOL
11438#ifdef FREECIV_JSON_CONNECTION
11439 field_addr.name = "message";
11440#endif /* FREECIV_JSON_CONNECTION */
11441 e = 0;
11442 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
11443 if (e) {
11444 log_packet_detailed("'message' field error detected");
11445 }
11446#ifdef FREECIV_JSON_CONNECTION
11447 field_addr.name = "tile";
11448#endif /* FREECIV_JSON_CONNECTION */
11449 e = 0;
11450 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
11451 if (e) {
11452 log_packet_detailed("'tile' field error detected");
11453 }
11454#ifdef FREECIV_JSON_CONNECTION
11455 field_addr.name = "event";
11456#endif /* FREECIV_JSON_CONNECTION */
11457 e = 0;
11458 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
11459 if (e) {
11460 log_packet_detailed("'event' field error detected");
11461 }
11462#ifdef FREECIV_JSON_CONNECTION
11463 field_addr.name = "turn";
11464#endif /* FREECIV_JSON_CONNECTION */
11465 e = 0;
11466 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
11467 if (e) {
11468 log_packet_detailed("'turn' field error detected");
11469 }
11470#ifdef FREECIV_JSON_CONNECTION
11471 field_addr.name = "phase";
11472#endif /* FREECIV_JSON_CONNECTION */
11473 e = 0;
11474 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
11475 if (e) {
11476 log_packet_detailed("'phase' field error detected");
11477 }
11478#ifdef FREECIV_JSON_CONNECTION
11479 field_addr.name = "conn_id";
11480#endif /* FREECIV_JSON_CONNECTION */
11481 e = 0;
11482 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
11483 if (e) {
11484 log_packet_detailed("'conn_id' field error detected");
11485 }
11486
11487#endif
11489}
11490
11491int send_packet_chat_msg(struct connection *pc, const struct packet_chat_msg *packet)
11492{
11493 if (!pc->used) {
11494 log_error("WARNING: trying to send data to the closed connection %s",
11496 return -1;
11497 }
11498 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CHAT_MSG].packet != NULL, -1,
11499 "Handler for PACKET_CHAT_MSG not installed");
11500 return pc->phs.handlers->send[PACKET_CHAT_MSG].packet(pc, packet);
11501}
11502
11503void lsend_packet_chat_msg(struct conn_list *dest, const struct packet_chat_msg *packet)
11504{
11505 conn_list_iterate(dest, pconn) {
11506 send_packet_chat_msg(pconn, packet);
11508}
11509
11510#ifdef FREECIV_DELTA_PROTOCOL
11511#define hash_packet_early_chat_msg_100 hash_const
11512
11513#define cmp_packet_early_chat_msg_100 cmp_const
11514
11516#endif /* FREECIV_DELTA_PROTOCOL */
11517
11519{
11520#ifdef FREECIV_DELTA_PROTOCOL
11522 struct packet_early_chat_msg *old;
11523 struct genhash **hash = pc->phs.received + PACKET_EARLY_CHAT_MSG;
11524#endif /* FREECIV_DELTA_PROTOCOL */
11526#ifdef FREECIV_JSON_CONNECTION
11527 struct plocation field_addr;
11528 {
11532 }
11533#endif /* FREECIV_JSON_CONNECTION */
11534
11535#ifdef FREECIV_DELTA_PROTOCOL
11536#ifdef FREECIV_JSON_CONNECTION
11537 field_addr.name = "fields";
11538#endif /* FREECIV_JSON_CONNECTION */
11539 DIO_BV_GET(&din, &field_addr, fields);
11540
11541#else /* FREECIV_DELTA_PROTOCOL */
11542#ifdef FREECIV_JSON_CONNECTION
11543 field_addr.name = "message";
11544#endif /* FREECIV_JSON_CONNECTION */
11545 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
11547 }
11548#ifdef FREECIV_JSON_CONNECTION
11549 field_addr.name = "tile";
11550#endif /* FREECIV_JSON_CONNECTION */
11551 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
11553 }
11554#ifdef FREECIV_JSON_CONNECTION
11555 field_addr.name = "event";
11556#endif /* FREECIV_JSON_CONNECTION */
11557 {
11558 int readin;
11559
11560 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
11562 }
11563 real_packet->event = readin;
11564 }
11565#ifdef FREECIV_JSON_CONNECTION
11566 field_addr.name = "turn";
11567#endif /* FREECIV_JSON_CONNECTION */
11568 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
11570 }
11571#ifdef FREECIV_JSON_CONNECTION
11572 field_addr.name = "phase";
11573#endif /* FREECIV_JSON_CONNECTION */
11574 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
11576 }
11577#ifdef FREECIV_JSON_CONNECTION
11578 field_addr.name = "conn_id";
11579#endif /* FREECIV_JSON_CONNECTION */
11580 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
11582 }
11583#endif
11584 log_packet_detailed("packet_early_chat_msg_100: got info about ()");
11585
11586#ifdef FREECIV_DELTA_PROTOCOL
11587 if (NULL == *hash) {
11589 NULL, NULL, NULL, free);
11590 }
11591
11592 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
11593 *real_packet = *old;
11594 } else {
11595 log_packet_detailed(" no old info");
11596 memset(real_packet, 0, sizeof(*real_packet));
11597 }
11598
11599 if (BV_ISSET(fields, 0)) {
11600 log_packet_detailed(" got field 'message'");
11601#ifdef FREECIV_JSON_CONNECTION
11602 field_addr.name = "message";
11603#endif /* FREECIV_JSON_CONNECTION */
11604 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
11606 }
11607 }
11608 if (BV_ISSET(fields, 1)) {
11609 log_packet_detailed(" got field 'tile'");
11610#ifdef FREECIV_JSON_CONNECTION
11611 field_addr.name = "tile";
11612#endif /* FREECIV_JSON_CONNECTION */
11613 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
11615 }
11616 }
11617 if (BV_ISSET(fields, 2)) {
11618 log_packet_detailed(" got field 'event'");
11619#ifdef FREECIV_JSON_CONNECTION
11620 field_addr.name = "event";
11621#endif /* FREECIV_JSON_CONNECTION */
11622 {
11623 int readin;
11624
11625 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
11627 }
11628 real_packet->event = readin;
11629 }
11630 }
11631 if (BV_ISSET(fields, 3)) {
11632 log_packet_detailed(" got field 'turn'");
11633#ifdef FREECIV_JSON_CONNECTION
11634 field_addr.name = "turn";
11635#endif /* FREECIV_JSON_CONNECTION */
11636 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
11638 }
11639 }
11640 if (BV_ISSET(fields, 4)) {
11641 log_packet_detailed(" got field 'phase'");
11642#ifdef FREECIV_JSON_CONNECTION
11643 field_addr.name = "phase";
11644#endif /* FREECIV_JSON_CONNECTION */
11645 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
11647 }
11648 }
11649 if (BV_ISSET(fields, 5)) {
11650 log_packet_detailed(" got field 'conn_id'");
11651#ifdef FREECIV_JSON_CONNECTION
11652 field_addr.name = "conn_id";
11653#endif /* FREECIV_JSON_CONNECTION */
11654 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id)) {
11656 }
11657 }
11658
11659 if (NULL == old) {
11660 old = fc_malloc(sizeof(*old));
11661 *old = *real_packet;
11662 genhash_insert(*hash, old, old);
11663 } else {
11664 *old = *real_packet;
11665 }
11666
11667#endif /* FREECIV_DELTA_PROTOCOL */
11669}
11670
11672{
11673 const struct packet_early_chat_msg *real_packet = packet;
11674 int e;
11675#ifdef FREECIV_DELTA_PROTOCOL
11677 struct packet_early_chat_msg *old;
11678 bool differ;
11679 struct genhash **hash = pc->phs.sent + PACKET_EARLY_CHAT_MSG;
11680#endif /* FREECIV_DELTA_PROTOCOL */
11682#ifdef FREECIV_JSON_CONNECTION
11683 struct plocation field_addr;
11684 {
11688 }
11689#endif /* FREECIV_JSON_CONNECTION */
11690
11691 log_packet_detailed("packet_early_chat_msg_100: sending info about ()");
11692
11693#ifdef FREECIV_DELTA_PROTOCOL
11694 if (NULL == *hash) {
11696 NULL, NULL, NULL, free);
11697 }
11698 BV_CLR_ALL(fields);
11699
11700 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11701 old = fc_malloc(sizeof(*old));
11702 *old = *real_packet;
11703 genhash_insert(*hash, old, old);
11704 memset(old, 0, sizeof(*old));
11705 }
11706 differ = (strcmp(old->message, real_packet->message) != 0);
11707 if (differ) {
11708 BV_SET(fields, 0);
11709 }
11710
11711 differ = (old->tile != real_packet->tile);
11712 if (differ) {
11713 BV_SET(fields, 1);
11714 }
11715
11716 differ = (old->event != real_packet->event);
11717 if (differ) {
11718 BV_SET(fields, 2);
11719 }
11720
11721 differ = (old->turn != real_packet->turn);
11722 if (differ) {
11723 BV_SET(fields, 3);
11724 }
11725
11726 differ = (old->phase != real_packet->phase);
11727 if (differ) {
11728 BV_SET(fields, 4);
11729 }
11730
11731 differ = (old->conn_id != real_packet->conn_id);
11732 if (differ) {
11733 BV_SET(fields, 5);
11734 }
11735
11736
11737#ifdef FREECIV_JSON_CONNECTION
11738 field_addr.name = "fields";
11739#endif /* FREECIV_JSON_CONNECTION */
11740 e = 0;
11741 e |= DIO_BV_PUT(&dout, &field_addr, fields);
11742 if (e) {
11743 log_packet_detailed("fields bitvector error detected");
11744 }
11745
11746 if (BV_ISSET(fields, 0)) {
11747 log_packet_detailed(" field 'message' has changed");
11748#ifdef FREECIV_JSON_CONNECTION
11749 field_addr.name = "message";
11750#endif /* FREECIV_JSON_CONNECTION */
11751 e = 0;
11752 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
11753 if (e) {
11754 log_packet_detailed("'message' field error detected");
11755 }
11756 }
11757 if (BV_ISSET(fields, 1)) {
11758 log_packet_detailed(" field 'tile' has changed");
11759#ifdef FREECIV_JSON_CONNECTION
11760 field_addr.name = "tile";
11761#endif /* FREECIV_JSON_CONNECTION */
11762 e = 0;
11763 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
11764 if (e) {
11765 log_packet_detailed("'tile' field error detected");
11766 }
11767 }
11768 if (BV_ISSET(fields, 2)) {
11769 log_packet_detailed(" field 'event' has changed");
11770#ifdef FREECIV_JSON_CONNECTION
11771 field_addr.name = "event";
11772#endif /* FREECIV_JSON_CONNECTION */
11773 e = 0;
11774 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
11775 if (e) {
11776 log_packet_detailed("'event' field error detected");
11777 }
11778 }
11779 if (BV_ISSET(fields, 3)) {
11780 log_packet_detailed(" field 'turn' has changed");
11781#ifdef FREECIV_JSON_CONNECTION
11782 field_addr.name = "turn";
11783#endif /* FREECIV_JSON_CONNECTION */
11784 e = 0;
11785 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
11786 if (e) {
11787 log_packet_detailed("'turn' field error detected");
11788 }
11789 }
11790 if (BV_ISSET(fields, 4)) {
11791 log_packet_detailed(" field 'phase' has changed");
11792#ifdef FREECIV_JSON_CONNECTION
11793 field_addr.name = "phase";
11794#endif /* FREECIV_JSON_CONNECTION */
11795 e = 0;
11796 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
11797 if (e) {
11798 log_packet_detailed("'phase' field error detected");
11799 }
11800 }
11801 if (BV_ISSET(fields, 5)) {
11802 log_packet_detailed(" field 'conn_id' has changed");
11803#ifdef FREECIV_JSON_CONNECTION
11804 field_addr.name = "conn_id";
11805#endif /* FREECIV_JSON_CONNECTION */
11806 e = 0;
11807 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
11808 if (e) {
11809 log_packet_detailed("'conn_id' field error detected");
11810 }
11811 }
11812
11813 *old = *real_packet;
11814#endif /* FREECIV_DELTA_PROTOCOL */
11815#ifndef FREECIV_DELTA_PROTOCOL
11816#ifdef FREECIV_JSON_CONNECTION
11817 field_addr.name = "message";
11818#endif /* FREECIV_JSON_CONNECTION */
11819 e = 0;
11820 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
11821 if (e) {
11822 log_packet_detailed("'message' field error detected");
11823 }
11824#ifdef FREECIV_JSON_CONNECTION
11825 field_addr.name = "tile";
11826#endif /* FREECIV_JSON_CONNECTION */
11827 e = 0;
11828 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
11829 if (e) {
11830 log_packet_detailed("'tile' field error detected");
11831 }
11832#ifdef FREECIV_JSON_CONNECTION
11833 field_addr.name = "event";
11834#endif /* FREECIV_JSON_CONNECTION */
11835 e = 0;
11836 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
11837 if (e) {
11838 log_packet_detailed("'event' field error detected");
11839 }
11840#ifdef FREECIV_JSON_CONNECTION
11841 field_addr.name = "turn";
11842#endif /* FREECIV_JSON_CONNECTION */
11843 e = 0;
11844 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
11845 if (e) {
11846 log_packet_detailed("'turn' field error detected");
11847 }
11848#ifdef FREECIV_JSON_CONNECTION
11849 field_addr.name = "phase";
11850#endif /* FREECIV_JSON_CONNECTION */
11851 e = 0;
11852 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
11853 if (e) {
11854 log_packet_detailed("'phase' field error detected");
11855 }
11856#ifdef FREECIV_JSON_CONNECTION
11857 field_addr.name = "conn_id";
11858#endif /* FREECIV_JSON_CONNECTION */
11859 e = 0;
11860 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id);
11861 if (e) {
11862 log_packet_detailed("'conn_id' field error detected");
11863 }
11864
11865#endif
11867}
11868
11870{
11871 if (!pc->used) {
11872 log_error("WARNING: trying to send data to the closed connection %s",
11874 return -1;
11875 }
11876 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EARLY_CHAT_MSG].packet != NULL, -1,
11877 "Handler for PACKET_EARLY_CHAT_MSG not installed");
11878 return pc->phs.handlers->send[PACKET_EARLY_CHAT_MSG].packet(pc, packet);
11879}
11880
11881void lsend_packet_early_chat_msg(struct conn_list *dest, const struct packet_early_chat_msg *packet)
11882{
11883 conn_list_iterate(dest, pconn) {
11886}
11887
11888#ifdef FREECIV_DELTA_PROTOCOL
11889#define hash_packet_chat_msg_req_100 hash_const
11890
11891#define cmp_packet_chat_msg_req_100 cmp_const
11892
11894#endif /* FREECIV_DELTA_PROTOCOL */
11895
11897{
11898#ifdef FREECIV_DELTA_PROTOCOL
11900 struct packet_chat_msg_req *old;
11901 struct genhash **hash = pc->phs.received + PACKET_CHAT_MSG_REQ;
11902#endif /* FREECIV_DELTA_PROTOCOL */
11904#ifdef FREECIV_JSON_CONNECTION
11905 struct plocation field_addr;
11906 {
11910 }
11911#endif /* FREECIV_JSON_CONNECTION */
11912
11913#ifdef FREECIV_DELTA_PROTOCOL
11914#ifdef FREECIV_JSON_CONNECTION
11915 field_addr.name = "fields";
11916#endif /* FREECIV_JSON_CONNECTION */
11917 DIO_BV_GET(&din, &field_addr, fields);
11918
11919#else /* FREECIV_DELTA_PROTOCOL */
11920#ifdef FREECIV_JSON_CONNECTION
11921 field_addr.name = "message";
11922#endif /* FREECIV_JSON_CONNECTION */
11923 if (!DIO_GET(estring, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
11925 }
11926#endif
11927 log_packet_detailed("packet_chat_msg_req_100: got info about ()");
11928
11929#ifdef FREECIV_DELTA_PROTOCOL
11930 if (NULL == *hash) {
11932 NULL, NULL, NULL, free);
11933 }
11934
11935 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
11936 *real_packet = *old;
11937 } else {
11938 log_packet_detailed(" no old info");
11939 memset(real_packet, 0, sizeof(*real_packet));
11940 }
11941
11942 if (BV_ISSET(fields, 0)) {
11943 log_packet_detailed(" got field 'message'");
11944#ifdef FREECIV_JSON_CONNECTION
11945 field_addr.name = "message";
11946#endif /* FREECIV_JSON_CONNECTION */
11947 if (!DIO_GET(estring, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
11949 }
11950 }
11951
11952 if (NULL == old) {
11953 old = fc_malloc(sizeof(*old));
11954 *old = *real_packet;
11955 genhash_insert(*hash, old, old);
11956 } else {
11957 *old = *real_packet;
11958 }
11959
11960#endif /* FREECIV_DELTA_PROTOCOL */
11962}
11963
11964static int send_packet_chat_msg_req_100(struct connection *pc, const struct packet_chat_msg_req *packet)
11965{
11966 const struct packet_chat_msg_req *real_packet = packet;
11967 int e;
11968#ifdef FREECIV_DELTA_PROTOCOL
11970 struct packet_chat_msg_req *old;
11971 bool differ;
11972 struct genhash **hash = pc->phs.sent + PACKET_CHAT_MSG_REQ;
11973#endif /* FREECIV_DELTA_PROTOCOL */
11975#ifdef FREECIV_JSON_CONNECTION
11976 struct plocation field_addr;
11977 {
11981 }
11982#endif /* FREECIV_JSON_CONNECTION */
11983
11984 log_packet_detailed("packet_chat_msg_req_100: sending info about ()");
11985
11986#ifdef FREECIV_DELTA_PROTOCOL
11987 if (NULL == *hash) {
11989 NULL, NULL, NULL, free);
11990 }
11991 BV_CLR_ALL(fields);
11992
11993 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
11994 old = fc_malloc(sizeof(*old));
11995 *old = *real_packet;
11996 genhash_insert(*hash, old, old);
11997 memset(old, 0, sizeof(*old));
11998 }
11999 differ = (strcmp(old->message, real_packet->message) != 0);
12000 if (differ) {
12001 BV_SET(fields, 0);
12002 }
12003
12004
12005#ifdef FREECIV_JSON_CONNECTION
12006 field_addr.name = "fields";
12007#endif /* FREECIV_JSON_CONNECTION */
12008 e = 0;
12009 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12010 if (e) {
12011 log_packet_detailed("fields bitvector error detected");
12012 }
12013
12014 if (BV_ISSET(fields, 0)) {
12015 log_packet_detailed(" field 'message' has changed");
12016#ifdef FREECIV_JSON_CONNECTION
12017 field_addr.name = "message";
12018#endif /* FREECIV_JSON_CONNECTION */
12019 e = 0;
12020 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->message);
12021 if (e) {
12022 log_packet_detailed("'message' field error detected");
12023 }
12024 }
12025
12026 *old = *real_packet;
12027#endif /* FREECIV_DELTA_PROTOCOL */
12028#ifndef FREECIV_DELTA_PROTOCOL
12029#ifdef FREECIV_JSON_CONNECTION
12030 field_addr.name = "message";
12031#endif /* FREECIV_JSON_CONNECTION */
12032 e = 0;
12033 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->message);
12034 if (e) {
12035 log_packet_detailed("'message' field error detected");
12036 }
12037
12038#endif
12040}
12041
12043{
12044 if (!pc->used) {
12045 log_error("WARNING: trying to send data to the closed connection %s",
12047 return -1;
12048 }
12049 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CHAT_MSG_REQ].packet != NULL, -1,
12050 "Handler for PACKET_CHAT_MSG_REQ not installed");
12051 return pc->phs.handlers->send[PACKET_CHAT_MSG_REQ].packet(pc, packet);
12052}
12053
12055{
12056 struct packet_chat_msg_req packet, *real_packet = &packet;
12057
12058 sz_strlcpy(real_packet->message, message);
12059
12061}
12062
12063#ifdef FREECIV_DELTA_PROTOCOL
12064#define hash_packet_connect_msg_100 hash_const
12065
12066#define cmp_packet_connect_msg_100 cmp_const
12067
12069#endif /* FREECIV_DELTA_PROTOCOL */
12070
12072{
12073#ifdef FREECIV_DELTA_PROTOCOL
12075 struct packet_connect_msg *old;
12076 struct genhash **hash = pc->phs.received + PACKET_CONNECT_MSG;
12077#endif /* FREECIV_DELTA_PROTOCOL */
12079#ifdef FREECIV_JSON_CONNECTION
12080 struct plocation field_addr;
12081 {
12085 }
12086#endif /* FREECIV_JSON_CONNECTION */
12087
12088#ifdef FREECIV_DELTA_PROTOCOL
12089#ifdef FREECIV_JSON_CONNECTION
12090 field_addr.name = "fields";
12091#endif /* FREECIV_JSON_CONNECTION */
12092 DIO_BV_GET(&din, &field_addr, fields);
12093
12094#else /* FREECIV_DELTA_PROTOCOL */
12095#ifdef FREECIV_JSON_CONNECTION
12096 field_addr.name = "message";
12097#endif /* FREECIV_JSON_CONNECTION */
12098 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
12100 }
12101#endif
12102 log_packet_detailed("packet_connect_msg_100: got info about ()");
12103
12104#ifdef FREECIV_DELTA_PROTOCOL
12105 if (NULL == *hash) {
12107 NULL, NULL, NULL, free);
12108 }
12109
12110 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12111 *real_packet = *old;
12112 } else {
12113 log_packet_detailed(" no old info");
12114 memset(real_packet, 0, sizeof(*real_packet));
12115 }
12116
12117 if (BV_ISSET(fields, 0)) {
12118 log_packet_detailed(" got field 'message'");
12119#ifdef FREECIV_JSON_CONNECTION
12120 field_addr.name = "message";
12121#endif /* FREECIV_JSON_CONNECTION */
12122 if (!DIO_GET(string, &din, &field_addr, real_packet->message, sizeof(real_packet->message))) {
12124 }
12125 }
12126
12127 if (NULL == old) {
12128 old = fc_malloc(sizeof(*old));
12129 *old = *real_packet;
12130 genhash_insert(*hash, old, old);
12131 } else {
12132 *old = *real_packet;
12133 }
12134
12135#endif /* FREECIV_DELTA_PROTOCOL */
12137}
12138
12139static int send_packet_connect_msg_100(struct connection *pc, const struct packet_connect_msg *packet)
12140{
12141 const struct packet_connect_msg *real_packet = packet;
12142 int e;
12143#ifdef FREECIV_DELTA_PROTOCOL
12145 struct packet_connect_msg *old;
12146 bool differ;
12147 struct genhash **hash = pc->phs.sent + PACKET_CONNECT_MSG;
12148#endif /* FREECIV_DELTA_PROTOCOL */
12150#ifdef FREECIV_JSON_CONNECTION
12151 struct plocation field_addr;
12152 {
12156 }
12157#endif /* FREECIV_JSON_CONNECTION */
12158
12159 log_packet_detailed("packet_connect_msg_100: sending info about ()");
12160
12161#ifdef FREECIV_DELTA_PROTOCOL
12162 if (NULL == *hash) {
12164 NULL, NULL, NULL, free);
12165 }
12166 BV_CLR_ALL(fields);
12167
12168 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12169 old = fc_malloc(sizeof(*old));
12170 *old = *real_packet;
12171 genhash_insert(*hash, old, old);
12172 memset(old, 0, sizeof(*old));
12173 }
12174 differ = (strcmp(old->message, real_packet->message) != 0);
12175 if (differ) {
12176 BV_SET(fields, 0);
12177 }
12178
12179
12180#ifdef FREECIV_JSON_CONNECTION
12181 field_addr.name = "fields";
12182#endif /* FREECIV_JSON_CONNECTION */
12183 e = 0;
12184 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12185 if (e) {
12186 log_packet_detailed("fields bitvector error detected");
12187 }
12188
12189 if (BV_ISSET(fields, 0)) {
12190 log_packet_detailed(" field 'message' has changed");
12191#ifdef FREECIV_JSON_CONNECTION
12192 field_addr.name = "message";
12193#endif /* FREECIV_JSON_CONNECTION */
12194 e = 0;
12195 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
12196 if (e) {
12197 log_packet_detailed("'message' field error detected");
12198 }
12199 }
12200
12201 *old = *real_packet;
12202#endif /* FREECIV_DELTA_PROTOCOL */
12203#ifndef FREECIV_DELTA_PROTOCOL
12204#ifdef FREECIV_JSON_CONNECTION
12205 field_addr.name = "message";
12206#endif /* FREECIV_JSON_CONNECTION */
12207 e = 0;
12208 e |= DIO_PUT(string, &dout, &field_addr, real_packet->message);
12209 if (e) {
12210 log_packet_detailed("'message' field error detected");
12211 }
12212
12213#endif
12215}
12216
12218{
12219 if (!pc->used) {
12220 log_error("WARNING: trying to send data to the closed connection %s",
12222 return -1;
12223 }
12224 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONNECT_MSG].packet != NULL, -1,
12225 "Handler for PACKET_CONNECT_MSG not installed");
12226 return pc->phs.handlers->send[PACKET_CONNECT_MSG].packet(pc, packet);
12227}
12228
12230{
12231 struct packet_connect_msg packet, *real_packet = &packet;
12232
12233 sz_strlcpy(real_packet->message, message);
12234
12236}
12237
12238#ifdef FREECIV_DELTA_PROTOCOL
12239#define hash_packet_server_info_100 hash_const
12240
12241#define cmp_packet_server_info_100 cmp_const
12242
12244#endif /* FREECIV_DELTA_PROTOCOL */
12245
12247{
12248#ifdef FREECIV_DELTA_PROTOCOL
12250 struct packet_server_info *old;
12251 struct genhash **hash = pc->phs.received + PACKET_SERVER_INFO;
12252#endif /* FREECIV_DELTA_PROTOCOL */
12254#ifdef FREECIV_JSON_CONNECTION
12255 struct plocation field_addr;
12256 {
12260 }
12261#endif /* FREECIV_JSON_CONNECTION */
12262
12263#ifdef FREECIV_DELTA_PROTOCOL
12264#ifdef FREECIV_JSON_CONNECTION
12265 field_addr.name = "fields";
12266#endif /* FREECIV_JSON_CONNECTION */
12267 DIO_BV_GET(&din, &field_addr, fields);
12268
12269#else /* FREECIV_DELTA_PROTOCOL */
12270#ifdef FREECIV_JSON_CONNECTION
12271 field_addr.name = "version_label";
12272#endif /* FREECIV_JSON_CONNECTION */
12273 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
12274 RECEIVE_PACKET_FIELD_ERROR(version_label);
12275 }
12276#ifdef FREECIV_JSON_CONNECTION
12277 field_addr.name = "major_version";
12278#endif /* FREECIV_JSON_CONNECTION */
12279 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
12280 RECEIVE_PACKET_FIELD_ERROR(major_version);
12281 }
12282#ifdef FREECIV_JSON_CONNECTION
12283 field_addr.name = "minor_version";
12284#endif /* FREECIV_JSON_CONNECTION */
12285 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
12286 RECEIVE_PACKET_FIELD_ERROR(minor_version);
12287 }
12288#ifdef FREECIV_JSON_CONNECTION
12289 field_addr.name = "patch_version";
12290#endif /* FREECIV_JSON_CONNECTION */
12291 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
12292 RECEIVE_PACKET_FIELD_ERROR(patch_version);
12293 }
12294#ifdef FREECIV_JSON_CONNECTION
12295 field_addr.name = "emerg_version";
12296#endif /* FREECIV_JSON_CONNECTION */
12297 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
12298 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
12299 }
12300#endif
12301 log_packet_detailed("packet_server_info_100: got info about ()");
12302
12303#ifdef FREECIV_DELTA_PROTOCOL
12304 if (NULL == *hash) {
12306 NULL, NULL, NULL, free);
12307 }
12308
12309 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12310 *real_packet = *old;
12311 } else {
12312 log_packet_detailed(" no old info");
12313 memset(real_packet, 0, sizeof(*real_packet));
12314 }
12315
12316 if (BV_ISSET(fields, 0)) {
12317 log_packet_detailed(" got field 'version_label'");
12318#ifdef FREECIV_JSON_CONNECTION
12319 field_addr.name = "version_label";
12320#endif /* FREECIV_JSON_CONNECTION */
12321 if (!DIO_GET(string, &din, &field_addr, real_packet->version_label, sizeof(real_packet->version_label))) {
12322 RECEIVE_PACKET_FIELD_ERROR(version_label);
12323 }
12324 }
12325 if (BV_ISSET(fields, 1)) {
12326 log_packet_detailed(" got field 'major_version'");
12327#ifdef FREECIV_JSON_CONNECTION
12328 field_addr.name = "major_version";
12329#endif /* FREECIV_JSON_CONNECTION */
12330 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->major_version)) {
12331 RECEIVE_PACKET_FIELD_ERROR(major_version);
12332 }
12333 }
12334 if (BV_ISSET(fields, 2)) {
12335 log_packet_detailed(" got field 'minor_version'");
12336#ifdef FREECIV_JSON_CONNECTION
12337 field_addr.name = "minor_version";
12338#endif /* FREECIV_JSON_CONNECTION */
12339 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->minor_version)) {
12340 RECEIVE_PACKET_FIELD_ERROR(minor_version);
12341 }
12342 }
12343 if (BV_ISSET(fields, 3)) {
12344 log_packet_detailed(" got field 'patch_version'");
12345#ifdef FREECIV_JSON_CONNECTION
12346 field_addr.name = "patch_version";
12347#endif /* FREECIV_JSON_CONNECTION */
12348 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->patch_version)) {
12349 RECEIVE_PACKET_FIELD_ERROR(patch_version);
12350 }
12351 }
12352 if (BV_ISSET(fields, 4)) {
12353 log_packet_detailed(" got field 'emerg_version'");
12354#ifdef FREECIV_JSON_CONNECTION
12355 field_addr.name = "emerg_version";
12356#endif /* FREECIV_JSON_CONNECTION */
12357 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
12358 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
12359 }
12360 }
12361
12362 if (NULL == old) {
12363 old = fc_malloc(sizeof(*old));
12364 *old = *real_packet;
12365 genhash_insert(*hash, old, old);
12366 } else {
12367 *old = *real_packet;
12368 }
12369
12370#endif /* FREECIV_DELTA_PROTOCOL */
12372}
12373
12374static int send_packet_server_info_100(struct connection *pc, const struct packet_server_info *packet)
12375{
12376 const struct packet_server_info *real_packet = packet;
12377 int e;
12378#ifdef FREECIV_DELTA_PROTOCOL
12380 struct packet_server_info *old;
12381 bool differ;
12382 struct genhash **hash = pc->phs.sent + PACKET_SERVER_INFO;
12383#endif /* FREECIV_DELTA_PROTOCOL */
12385#ifdef FREECIV_JSON_CONNECTION
12386 struct plocation field_addr;
12387 {
12391 }
12392#endif /* FREECIV_JSON_CONNECTION */
12393
12394 log_packet_detailed("packet_server_info_100: sending info about ()");
12395
12396#ifdef FREECIV_DELTA_PROTOCOL
12397 if (NULL == *hash) {
12399 NULL, NULL, NULL, free);
12400 }
12401 BV_CLR_ALL(fields);
12402
12403 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12404 old = fc_malloc(sizeof(*old));
12405 *old = *real_packet;
12406 genhash_insert(*hash, old, old);
12407 memset(old, 0, sizeof(*old));
12408 }
12409 differ = (strcmp(old->version_label, real_packet->version_label) != 0);
12410 if (differ) {
12411 BV_SET(fields, 0);
12412 }
12413
12414 differ = (old->major_version != real_packet->major_version);
12415 if (differ) {
12416 BV_SET(fields, 1);
12417 }
12418
12419 differ = (old->minor_version != real_packet->minor_version);
12420 if (differ) {
12421 BV_SET(fields, 2);
12422 }
12423
12424 differ = (old->patch_version != real_packet->patch_version);
12425 if (differ) {
12426 BV_SET(fields, 3);
12427 }
12428
12429 differ = (old->emerg_version != real_packet->emerg_version);
12430 if (differ) {
12431 BV_SET(fields, 4);
12432 }
12433
12434
12435#ifdef FREECIV_JSON_CONNECTION
12436 field_addr.name = "fields";
12437#endif /* FREECIV_JSON_CONNECTION */
12438 e = 0;
12439 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12440 if (e) {
12441 log_packet_detailed("fields bitvector error detected");
12442 }
12443
12444 if (BV_ISSET(fields, 0)) {
12445 log_packet_detailed(" field 'version_label' has changed");
12446#ifdef FREECIV_JSON_CONNECTION
12447 field_addr.name = "version_label";
12448#endif /* FREECIV_JSON_CONNECTION */
12449 e = 0;
12450 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
12451 if (e) {
12452 log_packet_detailed("'version_label' field error detected");
12453 }
12454 }
12455 if (BV_ISSET(fields, 1)) {
12456 log_packet_detailed(" field 'major_version' has changed");
12457#ifdef FREECIV_JSON_CONNECTION
12458 field_addr.name = "major_version";
12459#endif /* FREECIV_JSON_CONNECTION */
12460 e = 0;
12461 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
12462 if (e) {
12463 log_packet_detailed("'major_version' field error detected");
12464 }
12465 }
12466 if (BV_ISSET(fields, 2)) {
12467 log_packet_detailed(" field 'minor_version' has changed");
12468#ifdef FREECIV_JSON_CONNECTION
12469 field_addr.name = "minor_version";
12470#endif /* FREECIV_JSON_CONNECTION */
12471 e = 0;
12472 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
12473 if (e) {
12474 log_packet_detailed("'minor_version' field error detected");
12475 }
12476 }
12477 if (BV_ISSET(fields, 3)) {
12478 log_packet_detailed(" field 'patch_version' has changed");
12479#ifdef FREECIV_JSON_CONNECTION
12480 field_addr.name = "patch_version";
12481#endif /* FREECIV_JSON_CONNECTION */
12482 e = 0;
12483 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
12484 if (e) {
12485 log_packet_detailed("'patch_version' field error detected");
12486 }
12487 }
12488 if (BV_ISSET(fields, 4)) {
12489 log_packet_detailed(" field 'emerg_version' has changed");
12490#ifdef FREECIV_JSON_CONNECTION
12491 field_addr.name = "emerg_version";
12492#endif /* FREECIV_JSON_CONNECTION */
12493 e = 0;
12494 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
12495 if (e) {
12496 log_packet_detailed("'emerg_version' field error detected");
12497 }
12498 }
12499
12500 *old = *real_packet;
12501#endif /* FREECIV_DELTA_PROTOCOL */
12502#ifndef FREECIV_DELTA_PROTOCOL
12503#ifdef FREECIV_JSON_CONNECTION
12504 field_addr.name = "version_label";
12505#endif /* FREECIV_JSON_CONNECTION */
12506 e = 0;
12507 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version_label);
12508 if (e) {
12509 log_packet_detailed("'version_label' field error detected");
12510 }
12511#ifdef FREECIV_JSON_CONNECTION
12512 field_addr.name = "major_version";
12513#endif /* FREECIV_JSON_CONNECTION */
12514 e = 0;
12515 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->major_version);
12516 if (e) {
12517 log_packet_detailed("'major_version' field error detected");
12518 }
12519#ifdef FREECIV_JSON_CONNECTION
12520 field_addr.name = "minor_version";
12521#endif /* FREECIV_JSON_CONNECTION */
12522 e = 0;
12523 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->minor_version);
12524 if (e) {
12525 log_packet_detailed("'minor_version' field error detected");
12526 }
12527#ifdef FREECIV_JSON_CONNECTION
12528 field_addr.name = "patch_version";
12529#endif /* FREECIV_JSON_CONNECTION */
12530 e = 0;
12531 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->patch_version);
12532 if (e) {
12533 log_packet_detailed("'patch_version' field error detected");
12534 }
12535#ifdef FREECIV_JSON_CONNECTION
12536 field_addr.name = "emerg_version";
12537#endif /* FREECIV_JSON_CONNECTION */
12538 e = 0;
12539 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
12540 if (e) {
12541 log_packet_detailed("'emerg_version' field error detected");
12542 }
12543
12544#endif
12546}
12547
12549{
12550 if (!pc->used) {
12551 log_error("WARNING: trying to send data to the closed connection %s",
12553 return -1;
12554 }
12555 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_INFO].packet != NULL, -1,
12556 "Handler for PACKET_SERVER_INFO not installed");
12557 return pc->phs.handlers->send[PACKET_SERVER_INFO].packet(pc, packet);
12558}
12559
12560int dsend_packet_server_info(struct connection *pc, const char *version_label, int major_version, int minor_version, int patch_version, int emerg_version)
12561{
12562 struct packet_server_info packet, *real_packet = &packet;
12563
12564 sz_strlcpy(real_packet->version_label, version_label);
12565 real_packet->major_version = major_version;
12566 real_packet->minor_version = minor_version;
12567 real_packet->patch_version = patch_version;
12568 real_packet->emerg_version = emerg_version;
12569
12571}
12572
12573#ifdef FREECIV_DELTA_PROTOCOL
12574#define hash_packet_city_remove_100 hash_const
12575
12576#define cmp_packet_city_remove_100 cmp_const
12577
12579#endif /* FREECIV_DELTA_PROTOCOL */
12580
12582{
12583#ifdef FREECIV_DELTA_PROTOCOL
12585 struct packet_city_remove *old;
12586 struct genhash **hash = pc->phs.received + PACKET_CITY_REMOVE;
12587#endif /* FREECIV_DELTA_PROTOCOL */
12589#ifdef FREECIV_JSON_CONNECTION
12590 struct plocation field_addr;
12591 {
12595 }
12596#endif /* FREECIV_JSON_CONNECTION */
12597
12598#ifdef FREECIV_DELTA_PROTOCOL
12599#ifdef FREECIV_JSON_CONNECTION
12600 field_addr.name = "fields";
12601#endif /* FREECIV_JSON_CONNECTION */
12602 DIO_BV_GET(&din, &field_addr, fields);
12603
12604#else /* FREECIV_DELTA_PROTOCOL */
12605#ifdef FREECIV_JSON_CONNECTION
12606 field_addr.name = "city_id";
12607#endif /* FREECIV_JSON_CONNECTION */
12608 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
12610 }
12611#endif
12612 log_packet_detailed("packet_city_remove_100: got info about ()");
12613
12614#ifdef FREECIV_DELTA_PROTOCOL
12615 if (NULL == *hash) {
12617 NULL, NULL, NULL, free);
12618 }
12619
12620 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
12621 *real_packet = *old;
12622 } else {
12623 log_packet_detailed(" no old info");
12624 memset(real_packet, 0, sizeof(*real_packet));
12625 }
12626
12627 if (BV_ISSET(fields, 0)) {
12628 log_packet_detailed(" got field 'city_id'");
12629#ifdef FREECIV_JSON_CONNECTION
12630 field_addr.name = "city_id";
12631#endif /* FREECIV_JSON_CONNECTION */
12632 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
12634 }
12635 }
12636
12637 if (NULL == old) {
12638 old = fc_malloc(sizeof(*old));
12639 *old = *real_packet;
12640 genhash_insert(*hash, old, old);
12641 } else {
12642 *old = *real_packet;
12643 }
12644
12645 hash = pc->phs.received + PACKET_CITY_INFO;
12646 if (NULL != *hash) {
12648 }
12649
12650 hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
12651 if (NULL != *hash) {
12653 }
12654
12655 hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
12656 if (NULL != *hash) {
12658 }
12659
12660 hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
12661 if (NULL != *hash) {
12663 }
12664
12665 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
12666 if (NULL != *hash) {
12668 }
12669
12670#endif /* FREECIV_DELTA_PROTOCOL */
12672}
12673
12674static int send_packet_city_remove_100(struct connection *pc, const struct packet_city_remove *packet)
12675{
12676 const struct packet_city_remove *real_packet = packet;
12677 int e;
12678#ifdef FREECIV_DELTA_PROTOCOL
12680 struct packet_city_remove *old;
12681 bool differ;
12682 struct genhash **hash = pc->phs.sent + PACKET_CITY_REMOVE;
12683#endif /* FREECIV_DELTA_PROTOCOL */
12685#ifdef FREECIV_JSON_CONNECTION
12686 struct plocation field_addr;
12687 {
12691 }
12692#endif /* FREECIV_JSON_CONNECTION */
12693
12694 log_packet_detailed("packet_city_remove_100: sending info about ()");
12695
12696#ifdef FREECIV_DELTA_PROTOCOL
12697 if (NULL == *hash) {
12699 NULL, NULL, NULL, free);
12700 }
12701 BV_CLR_ALL(fields);
12702
12703 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
12704 old = fc_malloc(sizeof(*old));
12705 *old = *real_packet;
12706 genhash_insert(*hash, old, old);
12707 memset(old, 0, sizeof(*old));
12708 }
12709 differ = (old->city_id != real_packet->city_id);
12710 if (differ) {
12711 BV_SET(fields, 0);
12712 }
12713
12714
12715#ifdef FREECIV_JSON_CONNECTION
12716 field_addr.name = "fields";
12717#endif /* FREECIV_JSON_CONNECTION */
12718 e = 0;
12719 e |= DIO_BV_PUT(&dout, &field_addr, fields);
12720 if (e) {
12721 log_packet_detailed("fields bitvector error detected");
12722 }
12723
12724 if (BV_ISSET(fields, 0)) {
12725 log_packet_detailed(" field 'city_id' has changed");
12726#ifdef FREECIV_JSON_CONNECTION
12727 field_addr.name = "city_id";
12728#endif /* FREECIV_JSON_CONNECTION */
12729 e = 0;
12730 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
12731 if (e) {
12732 log_packet_detailed("'city_id' field error detected");
12733 }
12734 }
12735
12736 *old = *real_packet;
12737
12738 hash = pc->phs.sent + PACKET_CITY_INFO;
12739 if (NULL != *hash) {
12741 }
12742
12744 if (NULL != *hash) {
12746 }
12747
12748 hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
12749 if (NULL != *hash) {
12751 }
12752
12753 hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
12754 if (NULL != *hash) {
12756 }
12757
12758 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
12759 if (NULL != *hash) {
12761 }
12762#endif /* FREECIV_DELTA_PROTOCOL */
12763#ifndef FREECIV_DELTA_PROTOCOL
12764#ifdef FREECIV_JSON_CONNECTION
12765 field_addr.name = "city_id";
12766#endif /* FREECIV_JSON_CONNECTION */
12767 e = 0;
12768 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
12769 if (e) {
12770 log_packet_detailed("'city_id' field error detected");
12771 }
12772
12773#endif
12775}
12776
12778{
12779 if (!pc->used) {
12780 log_error("WARNING: trying to send data to the closed connection %s",
12782 return -1;
12783 }
12784 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_REMOVE].packet != NULL, -1,
12785 "Handler for PACKET_CITY_REMOVE not installed");
12786 return pc->phs.handlers->send[PACKET_CITY_REMOVE].packet(pc, packet);
12787}
12788
12789void lsend_packet_city_remove(struct conn_list *dest, const struct packet_city_remove *packet)
12790{
12791 conn_list_iterate(dest, pconn) {
12794}
12795
12796int dsend_packet_city_remove(struct connection *pc, int city_id)
12797{
12798 struct packet_city_remove packet, *real_packet = &packet;
12799
12801
12803}
12804
12806{
12807 struct packet_city_remove packet, *real_packet = &packet;
12808
12810
12812}
12813
12814#ifdef FREECIV_DELTA_PROTOCOL
12816{
12817 const struct packet_city_info *key = (const struct packet_city_info *) vkey;
12818 genhash_val_t result = 0;
12819
12820 result += key->id;
12821
12822 result &= 0xFFFFFFFF;
12823 return result;
12824}
12825
12826static bool cmp_packet_city_info_100(const void *vkey1, const void *vkey2)
12827{
12828 const struct packet_city_info *old = (const struct packet_city_info *) vkey1;
12829 const struct packet_city_info *real_packet = (const struct packet_city_info *) vkey2;
12830 bool differ;
12831
12832 differ = (old->id != real_packet->id);
12833
12834 return !differ;
12835}
12837#endif /* FREECIV_DELTA_PROTOCOL */
12838
12840{
12841#ifdef FREECIV_DELTA_PROTOCOL
12843 struct packet_city_info *old;
12844 struct genhash **hash = pc->phs.received + PACKET_CITY_INFO;
12845#endif /* FREECIV_DELTA_PROTOCOL */
12847#ifdef FREECIV_JSON_CONNECTION
12848 struct plocation field_addr;
12849 {
12853 }
12854#endif /* FREECIV_JSON_CONNECTION */
12855
12856#ifdef FREECIV_DELTA_PROTOCOL
12857#ifdef FREECIV_JSON_CONNECTION
12858 field_addr.name = "fields";
12859#endif /* FREECIV_JSON_CONNECTION */
12860 DIO_BV_GET(&din, &field_addr, fields);
12861#ifdef FREECIV_JSON_CONNECTION
12862 field_addr.name = "id";
12863#endif /* FREECIV_JSON_CONNECTION */
12864 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
12866 }
12867
12868#else /* FREECIV_DELTA_PROTOCOL */
12869#ifdef FREECIV_JSON_CONNECTION
12870 field_addr.name = "id";
12871#endif /* FREECIV_JSON_CONNECTION */
12872 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
12874 }
12875#ifdef FREECIV_JSON_CONNECTION
12876 field_addr.name = "tile";
12877#endif /* FREECIV_JSON_CONNECTION */
12878 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
12880 }
12881#ifdef FREECIV_JSON_CONNECTION
12882 field_addr.name = "owner";
12883#endif /* FREECIV_JSON_CONNECTION */
12884 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
12886 }
12887#ifdef FREECIV_JSON_CONNECTION
12888 field_addr.name = "original";
12889#endif /* FREECIV_JSON_CONNECTION */
12890 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
12892 }
12893#ifdef FREECIV_JSON_CONNECTION
12894 field_addr.name = "size";
12895#endif /* FREECIV_JSON_CONNECTION */
12896 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
12898 }
12899#ifdef FREECIV_JSON_CONNECTION
12900 field_addr.name = "city_radius_sq";
12901#endif /* FREECIV_JSON_CONNECTION */
12902 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
12903 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
12904 }
12905#ifdef FREECIV_JSON_CONNECTION
12906 field_addr.name = "style";
12907#endif /* FREECIV_JSON_CONNECTION */
12908 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
12910 }
12911#ifdef FREECIV_JSON_CONNECTION
12912 field_addr.name = "capital";
12913#endif /* FREECIV_JSON_CONNECTION */
12914 {
12915 int readin;
12916
12917 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
12919 }
12920 real_packet->capital = readin;
12921 }
12922#ifdef FREECIV_JSON_CONNECTION
12923 field_addr.name = "ppl_happy";
12924#endif /* FREECIV_JSON_CONNECTION */
12925 {
12926 int i;
12927
12928#ifdef FREECIV_JSON_CONNECTION
12929 /* Enter array. */
12930 field_addr.sub_location = plocation_elem_new(0);
12931#endif /* FREECIV_JSON_CONNECTION */
12932
12933 for (i = 0; i < FEELING_LAST; i++) {
12934#ifdef FREECIV_JSON_CONNECTION
12935 field_addr.sub_location->number = i;
12936#endif /* FREECIV_JSON_CONNECTION */
12937
12938 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
12939 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
12940 }
12941 }
12942
12943#ifdef FREECIV_JSON_CONNECTION
12944 /* Exit array. */
12945 FC_FREE(field_addr.sub_location);
12946#endif /* FREECIV_JSON_CONNECTION */
12947 }
12948#ifdef FREECIV_JSON_CONNECTION
12949 field_addr.name = "ppl_content";
12950#endif /* FREECIV_JSON_CONNECTION */
12951 {
12952 int i;
12953
12954#ifdef FREECIV_JSON_CONNECTION
12955 /* Enter array. */
12956 field_addr.sub_location = plocation_elem_new(0);
12957#endif /* FREECIV_JSON_CONNECTION */
12958
12959 for (i = 0; i < FEELING_LAST; i++) {
12960#ifdef FREECIV_JSON_CONNECTION
12961 field_addr.sub_location->number = i;
12962#endif /* FREECIV_JSON_CONNECTION */
12963
12964 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
12965 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
12966 }
12967 }
12968
12969#ifdef FREECIV_JSON_CONNECTION
12970 /* Exit array. */
12971 FC_FREE(field_addr.sub_location);
12972#endif /* FREECIV_JSON_CONNECTION */
12973 }
12974#ifdef FREECIV_JSON_CONNECTION
12975 field_addr.name = "ppl_unhappy";
12976#endif /* FREECIV_JSON_CONNECTION */
12977 {
12978 int i;
12979
12980#ifdef FREECIV_JSON_CONNECTION
12981 /* Enter array. */
12982 field_addr.sub_location = plocation_elem_new(0);
12983#endif /* FREECIV_JSON_CONNECTION */
12984
12985 for (i = 0; i < FEELING_LAST; i++) {
12986#ifdef FREECIV_JSON_CONNECTION
12987 field_addr.sub_location->number = i;
12988#endif /* FREECIV_JSON_CONNECTION */
12989
12990 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
12991 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
12992 }
12993 }
12994
12995#ifdef FREECIV_JSON_CONNECTION
12996 /* Exit array. */
12997 FC_FREE(field_addr.sub_location);
12998#endif /* FREECIV_JSON_CONNECTION */
12999 }
13000#ifdef FREECIV_JSON_CONNECTION
13001 field_addr.name = "ppl_angry";
13002#endif /* FREECIV_JSON_CONNECTION */
13003 {
13004 int i;
13005
13006#ifdef FREECIV_JSON_CONNECTION
13007 /* Enter array. */
13008 field_addr.sub_location = plocation_elem_new(0);
13009#endif /* FREECIV_JSON_CONNECTION */
13010
13011 for (i = 0; i < FEELING_LAST; i++) {
13012#ifdef FREECIV_JSON_CONNECTION
13013 field_addr.sub_location->number = i;
13014#endif /* FREECIV_JSON_CONNECTION */
13015
13016 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
13017 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
13018 }
13019 }
13020
13021#ifdef FREECIV_JSON_CONNECTION
13022 /* Exit array. */
13023 FC_FREE(field_addr.sub_location);
13024#endif /* FREECIV_JSON_CONNECTION */
13025 }
13026#ifdef FREECIV_JSON_CONNECTION
13027 field_addr.name = "specialists_size";
13028#endif /* FREECIV_JSON_CONNECTION */
13029 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
13030 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
13031 }
13032#ifdef FREECIV_JSON_CONNECTION
13033 field_addr.name = "specialists";
13034#endif /* FREECIV_JSON_CONNECTION */
13035 if (real_packet->specialists_size > SP_MAX) {
13036 RECEIVE_PACKET_FIELD_ERROR(specialists, ": truncation array");
13037 }
13038 {
13039 int i;
13040
13041#ifdef FREECIV_JSON_CONNECTION
13042 /* Enter array. */
13043 field_addr.sub_location = plocation_elem_new(0);
13044#endif /* FREECIV_JSON_CONNECTION */
13045
13046 for (i = 0; i < real_packet->specialists_size; i++) {
13047#ifdef FREECIV_JSON_CONNECTION
13048 field_addr.sub_location->number = i;
13049#endif /* FREECIV_JSON_CONNECTION */
13050
13051 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
13053 }
13054 }
13055
13056#ifdef FREECIV_JSON_CONNECTION
13057 /* Exit array. */
13058 FC_FREE(field_addr.sub_location);
13059#endif /* FREECIV_JSON_CONNECTION */
13060 }
13061#ifdef FREECIV_JSON_CONNECTION
13062 field_addr.name = "history";
13063#endif /* FREECIV_JSON_CONNECTION */
13064 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
13066 }
13067#ifdef FREECIV_JSON_CONNECTION
13068 field_addr.name = "culture";
13069#endif /* FREECIV_JSON_CONNECTION */
13070 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
13072 }
13073#ifdef FREECIV_JSON_CONNECTION
13074 field_addr.name = "buy_cost";
13075#endif /* FREECIV_JSON_CONNECTION */
13076 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
13078 }
13079#ifdef FREECIV_JSON_CONNECTION
13080 field_addr.name = "surplus";
13081#endif /* FREECIV_JSON_CONNECTION */
13082 {
13083 int i;
13084
13085#ifdef FREECIV_JSON_CONNECTION
13086 /* Enter array. */
13087 field_addr.sub_location = plocation_elem_new(0);
13088#endif /* FREECIV_JSON_CONNECTION */
13089
13090 for (i = 0; i < O_LAST; i++) {
13091#ifdef FREECIV_JSON_CONNECTION
13092 field_addr.sub_location->number = i;
13093#endif /* FREECIV_JSON_CONNECTION */
13094
13095 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
13097 }
13098 }
13099
13100#ifdef FREECIV_JSON_CONNECTION
13101 /* Exit array. */
13102 FC_FREE(field_addr.sub_location);
13103#endif /* FREECIV_JSON_CONNECTION */
13104 }
13105#ifdef FREECIV_JSON_CONNECTION
13106 field_addr.name = "waste";
13107#endif /* FREECIV_JSON_CONNECTION */
13108 {
13109 int i;
13110
13111#ifdef FREECIV_JSON_CONNECTION
13112 /* Enter array. */
13113 field_addr.sub_location = plocation_elem_new(0);
13114#endif /* FREECIV_JSON_CONNECTION */
13115
13116 for (i = 0; i < O_LAST; i++) {
13117#ifdef FREECIV_JSON_CONNECTION
13118 field_addr.sub_location->number = i;
13119#endif /* FREECIV_JSON_CONNECTION */
13120
13121 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
13123 }
13124 }
13125
13126#ifdef FREECIV_JSON_CONNECTION
13127 /* Exit array. */
13128 FC_FREE(field_addr.sub_location);
13129#endif /* FREECIV_JSON_CONNECTION */
13130 }
13131#ifdef FREECIV_JSON_CONNECTION
13132 field_addr.name = "unhappy_penalty";
13133#endif /* FREECIV_JSON_CONNECTION */
13134 {
13135 int i;
13136
13137#ifdef FREECIV_JSON_CONNECTION
13138 /* Enter array. */
13139 field_addr.sub_location = plocation_elem_new(0);
13140#endif /* FREECIV_JSON_CONNECTION */
13141
13142 for (i = 0; i < O_LAST; i++) {
13143#ifdef FREECIV_JSON_CONNECTION
13144 field_addr.sub_location->number = i;
13145#endif /* FREECIV_JSON_CONNECTION */
13146
13147 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
13148 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
13149 }
13150 }
13151
13152#ifdef FREECIV_JSON_CONNECTION
13153 /* Exit array. */
13154 FC_FREE(field_addr.sub_location);
13155#endif /* FREECIV_JSON_CONNECTION */
13156 }
13157#ifdef FREECIV_JSON_CONNECTION
13158 field_addr.name = "prod";
13159#endif /* FREECIV_JSON_CONNECTION */
13160 {
13161 int i;
13162
13163#ifdef FREECIV_JSON_CONNECTION
13164 /* Enter array. */
13165 field_addr.sub_location = plocation_elem_new(0);
13166#endif /* FREECIV_JSON_CONNECTION */
13167
13168 for (i = 0; i < O_LAST; i++) {
13169#ifdef FREECIV_JSON_CONNECTION
13170 field_addr.sub_location->number = i;
13171#endif /* FREECIV_JSON_CONNECTION */
13172
13173 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
13175 }
13176 }
13177
13178#ifdef FREECIV_JSON_CONNECTION
13179 /* Exit array. */
13180 FC_FREE(field_addr.sub_location);
13181#endif /* FREECIV_JSON_CONNECTION */
13182 }
13183#ifdef FREECIV_JSON_CONNECTION
13184 field_addr.name = "citizen_base";
13185#endif /* FREECIV_JSON_CONNECTION */
13186 {
13187 int i;
13188
13189#ifdef FREECIV_JSON_CONNECTION
13190 /* Enter array. */
13191 field_addr.sub_location = plocation_elem_new(0);
13192#endif /* FREECIV_JSON_CONNECTION */
13193
13194 for (i = 0; i < O_LAST; i++) {
13195#ifdef FREECIV_JSON_CONNECTION
13196 field_addr.sub_location->number = i;
13197#endif /* FREECIV_JSON_CONNECTION */
13198
13199 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
13200 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
13201 }
13202 }
13203
13204#ifdef FREECIV_JSON_CONNECTION
13205 /* Exit array. */
13206 FC_FREE(field_addr.sub_location);
13207#endif /* FREECIV_JSON_CONNECTION */
13208 }
13209#ifdef FREECIV_JSON_CONNECTION
13210 field_addr.name = "usage";
13211#endif /* FREECIV_JSON_CONNECTION */
13212 {
13213 int i;
13214
13215#ifdef FREECIV_JSON_CONNECTION
13216 /* Enter array. */
13217 field_addr.sub_location = plocation_elem_new(0);
13218#endif /* FREECIV_JSON_CONNECTION */
13219
13220 for (i = 0; i < O_LAST; i++) {
13221#ifdef FREECIV_JSON_CONNECTION
13222 field_addr.sub_location->number = i;
13223#endif /* FREECIV_JSON_CONNECTION */
13224
13225 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
13227 }
13228 }
13229
13230#ifdef FREECIV_JSON_CONNECTION
13231 /* Exit array. */
13232 FC_FREE(field_addr.sub_location);
13233#endif /* FREECIV_JSON_CONNECTION */
13234 }
13235#ifdef FREECIV_JSON_CONNECTION
13236 field_addr.name = "food_stock";
13237#endif /* FREECIV_JSON_CONNECTION */
13238 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
13239 RECEIVE_PACKET_FIELD_ERROR(food_stock);
13240 }
13241#ifdef FREECIV_JSON_CONNECTION
13242 field_addr.name = "shield_stock";
13243#endif /* FREECIV_JSON_CONNECTION */
13244 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
13245 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
13246 }
13247#ifdef FREECIV_JSON_CONNECTION
13248 field_addr.name = "trade_route_count";
13249#endif /* FREECIV_JSON_CONNECTION */
13250 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
13251 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
13252 }
13253#ifdef FREECIV_JSON_CONNECTION
13254 field_addr.name = "pollution";
13255#endif /* FREECIV_JSON_CONNECTION */
13256 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
13257 RECEIVE_PACKET_FIELD_ERROR(pollution);
13258 }
13259#ifdef FREECIV_JSON_CONNECTION
13260 field_addr.name = "illness_trade";
13261#endif /* FREECIV_JSON_CONNECTION */
13262 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
13263 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
13264 }
13265#ifdef FREECIV_JSON_CONNECTION
13266 field_addr.name = "production_kind";
13267#endif /* FREECIV_JSON_CONNECTION */
13268 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
13269 RECEIVE_PACKET_FIELD_ERROR(production_kind);
13270 }
13271#ifdef FREECIV_JSON_CONNECTION
13272 field_addr.name = "production_value";
13273#endif /* FREECIV_JSON_CONNECTION */
13274 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
13275 RECEIVE_PACKET_FIELD_ERROR(production_value);
13276 }
13277#ifdef FREECIV_JSON_CONNECTION
13278 field_addr.name = "turn_founded";
13279#endif /* FREECIV_JSON_CONNECTION */
13280 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
13281 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
13282 }
13283#ifdef FREECIV_JSON_CONNECTION
13284 field_addr.name = "turn_last_built";
13285#endif /* FREECIV_JSON_CONNECTION */
13286 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
13287 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
13288 }
13289#ifdef FREECIV_JSON_CONNECTION
13290 field_addr.name = "changed_from_kind";
13291#endif /* FREECIV_JSON_CONNECTION */
13292 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
13293 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
13294 }
13295#ifdef FREECIV_JSON_CONNECTION
13296 field_addr.name = "changed_from_value";
13297#endif /* FREECIV_JSON_CONNECTION */
13298 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
13299 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
13300 }
13301#ifdef FREECIV_JSON_CONNECTION
13302 field_addr.name = "before_change_shields";
13303#endif /* FREECIV_JSON_CONNECTION */
13304 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
13305 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
13306 }
13307#ifdef FREECIV_JSON_CONNECTION
13308 field_addr.name = "disbanded_shields";
13309#endif /* FREECIV_JSON_CONNECTION */
13310 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
13311 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
13312 }
13313#ifdef FREECIV_JSON_CONNECTION
13314 field_addr.name = "caravan_shields";
13315#endif /* FREECIV_JSON_CONNECTION */
13316 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
13317 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
13318 }
13319#ifdef FREECIV_JSON_CONNECTION
13320 field_addr.name = "last_turns_shield_surplus";
13321#endif /* FREECIV_JSON_CONNECTION */
13322 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
13323 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
13324 }
13325#ifdef FREECIV_JSON_CONNECTION
13326 field_addr.name = "airlift";
13327#endif /* FREECIV_JSON_CONNECTION */
13328 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
13330 }
13331#ifdef FREECIV_JSON_CONNECTION
13332 field_addr.name = "did_buy";
13333#endif /* FREECIV_JSON_CONNECTION */
13334 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
13336 }
13337#ifdef FREECIV_JSON_CONNECTION
13338 field_addr.name = "did_sell";
13339#endif /* FREECIV_JSON_CONNECTION */
13340 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
13342 }
13343#ifdef FREECIV_JSON_CONNECTION
13344 field_addr.name = "was_happy";
13345#endif /* FREECIV_JSON_CONNECTION */
13346 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
13347 RECEIVE_PACKET_FIELD_ERROR(was_happy);
13348 }
13349#ifdef FREECIV_JSON_CONNECTION
13350 field_addr.name = "had_famine";
13351#endif /* FREECIV_JSON_CONNECTION */
13352 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
13353 RECEIVE_PACKET_FIELD_ERROR(had_famine);
13354 }
13355#ifdef FREECIV_JSON_CONNECTION
13356 field_addr.name = "diplomat_investigate";
13357#endif /* FREECIV_JSON_CONNECTION */
13358 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->diplomat_investigate)) {
13360 }
13361#ifdef FREECIV_JSON_CONNECTION
13362 field_addr.name = "walls";
13363#endif /* FREECIV_JSON_CONNECTION */
13364 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
13366 }
13367#ifdef FREECIV_JSON_CONNECTION
13368 field_addr.name = "city_image";
13369#endif /* FREECIV_JSON_CONNECTION */
13370 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
13371 RECEIVE_PACKET_FIELD_ERROR(city_image);
13372 }
13373#ifdef FREECIV_JSON_CONNECTION
13374 field_addr.name = "steal";
13375#endif /* FREECIV_JSON_CONNECTION */
13376 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
13378 }
13379#ifdef FREECIV_JSON_CONNECTION
13380 field_addr.name = "worklist";
13381#endif /* FREECIV_JSON_CONNECTION */
13382 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
13384 }
13385#ifdef FREECIV_JSON_CONNECTION
13386 field_addr.name = "improvements";
13387#endif /* FREECIV_JSON_CONNECTION */
13388 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
13389 RECEIVE_PACKET_FIELD_ERROR(improvements);
13390 }
13391#ifdef FREECIV_JSON_CONNECTION
13392 field_addr.name = "city_options";
13393#endif /* FREECIV_JSON_CONNECTION */
13394 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
13395 RECEIVE_PACKET_FIELD_ERROR(city_options);
13396 }
13397#ifdef FREECIV_JSON_CONNECTION
13398 field_addr.name = "wl_cb";
13399#endif /* FREECIV_JSON_CONNECTION */
13400 {
13401 int readin;
13402
13403 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
13405 }
13406 real_packet->wl_cb = readin;
13407 }
13408#ifdef FREECIV_JSON_CONNECTION
13409 field_addr.name = "acquire_type";
13410#endif /* FREECIV_JSON_CONNECTION */
13411 {
13412 int readin;
13413
13414 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
13415 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
13416 }
13417 real_packet->acquire_type = readin;
13418 }
13419#ifdef FREECIV_JSON_CONNECTION
13420 field_addr.name = "name";
13421#endif /* FREECIV_JSON_CONNECTION */
13422 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
13424 }
13425#endif
13426 log_packet_detailed("packet_city_info_100: got info about (%d)",
13427 real_packet->id);
13428
13429#ifdef FREECIV_DELTA_PROTOCOL
13430 if (NULL == *hash) {
13432 NULL, NULL, NULL, free);
13433 }
13434
13435 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
13436 *real_packet = *old;
13437 } else {
13438 int id;
13439
13440 id = real_packet->id;
13441
13442 log_packet_detailed(" no old info");
13443 memset(real_packet, 0, sizeof(*real_packet));
13444
13445 real_packet->id = id;
13446 }
13447
13448 if (BV_ISSET(fields, 0)) {
13449 log_packet_detailed(" got field 'tile'");
13450#ifdef FREECIV_JSON_CONNECTION
13451 field_addr.name = "tile";
13452#endif /* FREECIV_JSON_CONNECTION */
13453 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
13455 }
13456 }
13457 if (BV_ISSET(fields, 1)) {
13458 log_packet_detailed(" got field 'owner'");
13459#ifdef FREECIV_JSON_CONNECTION
13460 field_addr.name = "owner";
13461#endif /* FREECIV_JSON_CONNECTION */
13462 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
13464 }
13465 }
13466 if (BV_ISSET(fields, 2)) {
13467 log_packet_detailed(" got field 'original'");
13468#ifdef FREECIV_JSON_CONNECTION
13469 field_addr.name = "original";
13470#endif /* FREECIV_JSON_CONNECTION */
13471 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
13473 }
13474 }
13475 if (BV_ISSET(fields, 3)) {
13476 log_packet_detailed(" got field 'size'");
13477#ifdef FREECIV_JSON_CONNECTION
13478 field_addr.name = "size";
13479#endif /* FREECIV_JSON_CONNECTION */
13480 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
13482 }
13483 }
13484 if (BV_ISSET(fields, 4)) {
13485 log_packet_detailed(" got field 'city_radius_sq'");
13486#ifdef FREECIV_JSON_CONNECTION
13487 field_addr.name = "city_radius_sq";
13488#endif /* FREECIV_JSON_CONNECTION */
13489 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
13490 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
13491 }
13492 }
13493 if (BV_ISSET(fields, 5)) {
13494 log_packet_detailed(" got field 'style'");
13495#ifdef FREECIV_JSON_CONNECTION
13496 field_addr.name = "style";
13497#endif /* FREECIV_JSON_CONNECTION */
13498 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
13500 }
13501 }
13502 if (BV_ISSET(fields, 6)) {
13503 log_packet_detailed(" got field 'capital'");
13504#ifdef FREECIV_JSON_CONNECTION
13505 field_addr.name = "capital";
13506#endif /* FREECIV_JSON_CONNECTION */
13507 {
13508 int readin;
13509
13510 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
13512 }
13513 real_packet->capital = readin;
13514 }
13515 }
13516 if (BV_ISSET(fields, 7)) {
13517 log_packet_detailed(" got field 'ppl_happy'");
13518#ifdef FREECIV_JSON_CONNECTION
13519 field_addr.name = "ppl_happy";
13520#endif /* FREECIV_JSON_CONNECTION */
13521 {
13522 int i;
13523
13524#ifdef FREECIV_JSON_CONNECTION
13525 /* Enter array. */
13526 field_addr.sub_location = plocation_elem_new(0);
13527#endif /* FREECIV_JSON_CONNECTION */
13528
13529 for (i = 0; i < FEELING_LAST; i++) {
13530#ifdef FREECIV_JSON_CONNECTION
13531 field_addr.sub_location->number = i;
13532#endif /* FREECIV_JSON_CONNECTION */
13533
13534 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
13535 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
13536 }
13537 }
13538
13539#ifdef FREECIV_JSON_CONNECTION
13540 /* Exit array. */
13541 FC_FREE(field_addr.sub_location);
13542#endif /* FREECIV_JSON_CONNECTION */
13543 }
13544 }
13545 if (BV_ISSET(fields, 8)) {
13546 log_packet_detailed(" got field 'ppl_content'");
13547#ifdef FREECIV_JSON_CONNECTION
13548 field_addr.name = "ppl_content";
13549#endif /* FREECIV_JSON_CONNECTION */
13550 {
13551 int i;
13552
13553#ifdef FREECIV_JSON_CONNECTION
13554 /* Enter array. */
13555 field_addr.sub_location = plocation_elem_new(0);
13556#endif /* FREECIV_JSON_CONNECTION */
13557
13558 for (i = 0; i < FEELING_LAST; i++) {
13559#ifdef FREECIV_JSON_CONNECTION
13560 field_addr.sub_location->number = i;
13561#endif /* FREECIV_JSON_CONNECTION */
13562
13563 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
13564 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
13565 }
13566 }
13567
13568#ifdef FREECIV_JSON_CONNECTION
13569 /* Exit array. */
13570 FC_FREE(field_addr.sub_location);
13571#endif /* FREECIV_JSON_CONNECTION */
13572 }
13573 }
13574 if (BV_ISSET(fields, 9)) {
13575 log_packet_detailed(" got field 'ppl_unhappy'");
13576#ifdef FREECIV_JSON_CONNECTION
13577 field_addr.name = "ppl_unhappy";
13578#endif /* FREECIV_JSON_CONNECTION */
13579 {
13580 int i;
13581
13582#ifdef FREECIV_JSON_CONNECTION
13583 /* Enter array. */
13584 field_addr.sub_location = plocation_elem_new(0);
13585#endif /* FREECIV_JSON_CONNECTION */
13586
13587 for (i = 0; i < FEELING_LAST; i++) {
13588#ifdef FREECIV_JSON_CONNECTION
13589 field_addr.sub_location->number = i;
13590#endif /* FREECIV_JSON_CONNECTION */
13591
13592 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
13593 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
13594 }
13595 }
13596
13597#ifdef FREECIV_JSON_CONNECTION
13598 /* Exit array. */
13599 FC_FREE(field_addr.sub_location);
13600#endif /* FREECIV_JSON_CONNECTION */
13601 }
13602 }
13603 if (BV_ISSET(fields, 10)) {
13604 log_packet_detailed(" got field 'ppl_angry'");
13605#ifdef FREECIV_JSON_CONNECTION
13606 field_addr.name = "ppl_angry";
13607#endif /* FREECIV_JSON_CONNECTION */
13608 {
13609 int i;
13610
13611#ifdef FREECIV_JSON_CONNECTION
13612 /* Enter array. */
13613 field_addr.sub_location = plocation_elem_new(0);
13614#endif /* FREECIV_JSON_CONNECTION */
13615
13616 for (i = 0; i < FEELING_LAST; i++) {
13617#ifdef FREECIV_JSON_CONNECTION
13618 field_addr.sub_location->number = i;
13619#endif /* FREECIV_JSON_CONNECTION */
13620
13621 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
13622 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
13623 }
13624 }
13625
13626#ifdef FREECIV_JSON_CONNECTION
13627 /* Exit array. */
13628 FC_FREE(field_addr.sub_location);
13629#endif /* FREECIV_JSON_CONNECTION */
13630 }
13631 }
13632 if (BV_ISSET(fields, 11)) {
13633 log_packet_detailed(" got field 'specialists_size'");
13634#ifdef FREECIV_JSON_CONNECTION
13635 field_addr.name = "specialists_size";
13636#endif /* FREECIV_JSON_CONNECTION */
13637 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
13638 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
13639 }
13640 }
13641 if (BV_ISSET(fields, 12)) {
13642 log_packet_detailed(" got field 'specialists'");
13643#ifdef FREECIV_JSON_CONNECTION
13644 field_addr.name = "specialists";
13645#endif /* FREECIV_JSON_CONNECTION */
13646 if (real_packet->specialists_size > SP_MAX) {
13647 RECEIVE_PACKET_FIELD_ERROR(specialists, ": truncation array");
13648 }
13649 {
13650 int i;
13651
13652#ifdef FREECIV_JSON_CONNECTION
13653 /* Enter array. */
13654 field_addr.sub_location = plocation_elem_new(0);
13655#endif /* FREECIV_JSON_CONNECTION */
13656
13657 for (i = 0; i < real_packet->specialists_size; i++) {
13658#ifdef FREECIV_JSON_CONNECTION
13659 field_addr.sub_location->number = i;
13660#endif /* FREECIV_JSON_CONNECTION */
13661
13662 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
13664 }
13665 }
13666
13667#ifdef FREECIV_JSON_CONNECTION
13668 /* Exit array. */
13669 FC_FREE(field_addr.sub_location);
13670#endif /* FREECIV_JSON_CONNECTION */
13671 }
13672 }
13673 if (BV_ISSET(fields, 13)) {
13674 log_packet_detailed(" got field 'history'");
13675#ifdef FREECIV_JSON_CONNECTION
13676 field_addr.name = "history";
13677#endif /* FREECIV_JSON_CONNECTION */
13678 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
13680 }
13681 }
13682 if (BV_ISSET(fields, 14)) {
13683 log_packet_detailed(" got field 'culture'");
13684#ifdef FREECIV_JSON_CONNECTION
13685 field_addr.name = "culture";
13686#endif /* FREECIV_JSON_CONNECTION */
13687 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
13689 }
13690 }
13691 if (BV_ISSET(fields, 15)) {
13692 log_packet_detailed(" got field 'buy_cost'");
13693#ifdef FREECIV_JSON_CONNECTION
13694 field_addr.name = "buy_cost";
13695#endif /* FREECIV_JSON_CONNECTION */
13696 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
13698 }
13699 }
13700 if (BV_ISSET(fields, 16)) {
13701 log_packet_detailed(" got field 'surplus'");
13702#ifdef FREECIV_JSON_CONNECTION
13703 field_addr.name = "surplus";
13704#endif /* FREECIV_JSON_CONNECTION */
13705 {
13706 int i;
13707
13708#ifdef FREECIV_JSON_CONNECTION
13709 /* Enter array. */
13710 field_addr.sub_location = plocation_elem_new(0);
13711#endif /* FREECIV_JSON_CONNECTION */
13712
13713 for (i = 0; i < O_LAST; i++) {
13714#ifdef FREECIV_JSON_CONNECTION
13715 field_addr.sub_location->number = i;
13716#endif /* FREECIV_JSON_CONNECTION */
13717
13718 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
13720 }
13721 }
13722
13723#ifdef FREECIV_JSON_CONNECTION
13724 /* Exit array. */
13725 FC_FREE(field_addr.sub_location);
13726#endif /* FREECIV_JSON_CONNECTION */
13727 }
13728 }
13729 if (BV_ISSET(fields, 17)) {
13730 log_packet_detailed(" got field 'waste'");
13731#ifdef FREECIV_JSON_CONNECTION
13732 field_addr.name = "waste";
13733#endif /* FREECIV_JSON_CONNECTION */
13734 {
13735 int i;
13736
13737#ifdef FREECIV_JSON_CONNECTION
13738 /* Enter array. */
13739 field_addr.sub_location = plocation_elem_new(0);
13740#endif /* FREECIV_JSON_CONNECTION */
13741
13742 for (i = 0; i < O_LAST; i++) {
13743#ifdef FREECIV_JSON_CONNECTION
13744 field_addr.sub_location->number = i;
13745#endif /* FREECIV_JSON_CONNECTION */
13746
13747 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
13749 }
13750 }
13751
13752#ifdef FREECIV_JSON_CONNECTION
13753 /* Exit array. */
13754 FC_FREE(field_addr.sub_location);
13755#endif /* FREECIV_JSON_CONNECTION */
13756 }
13757 }
13758 if (BV_ISSET(fields, 18)) {
13759 log_packet_detailed(" got field 'unhappy_penalty'");
13760#ifdef FREECIV_JSON_CONNECTION
13761 field_addr.name = "unhappy_penalty";
13762#endif /* FREECIV_JSON_CONNECTION */
13763 {
13764 int i;
13765
13766#ifdef FREECIV_JSON_CONNECTION
13767 /* Enter array. */
13768 field_addr.sub_location = plocation_elem_new(0);
13769#endif /* FREECIV_JSON_CONNECTION */
13770
13771 for (i = 0; i < O_LAST; i++) {
13772#ifdef FREECIV_JSON_CONNECTION
13773 field_addr.sub_location->number = i;
13774#endif /* FREECIV_JSON_CONNECTION */
13775
13776 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
13777 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
13778 }
13779 }
13780
13781#ifdef FREECIV_JSON_CONNECTION
13782 /* Exit array. */
13783 FC_FREE(field_addr.sub_location);
13784#endif /* FREECIV_JSON_CONNECTION */
13785 }
13786 }
13787 if (BV_ISSET(fields, 19)) {
13788 log_packet_detailed(" got field 'prod'");
13789#ifdef FREECIV_JSON_CONNECTION
13790 field_addr.name = "prod";
13791#endif /* FREECIV_JSON_CONNECTION */
13792 {
13793 int i;
13794
13795#ifdef FREECIV_JSON_CONNECTION
13796 /* Enter array. */
13797 field_addr.sub_location = plocation_elem_new(0);
13798#endif /* FREECIV_JSON_CONNECTION */
13799
13800 for (i = 0; i < O_LAST; i++) {
13801#ifdef FREECIV_JSON_CONNECTION
13802 field_addr.sub_location->number = i;
13803#endif /* FREECIV_JSON_CONNECTION */
13804
13805 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
13807 }
13808 }
13809
13810#ifdef FREECIV_JSON_CONNECTION
13811 /* Exit array. */
13812 FC_FREE(field_addr.sub_location);
13813#endif /* FREECIV_JSON_CONNECTION */
13814 }
13815 }
13816 if (BV_ISSET(fields, 20)) {
13817 log_packet_detailed(" got field 'citizen_base'");
13818#ifdef FREECIV_JSON_CONNECTION
13819 field_addr.name = "citizen_base";
13820#endif /* FREECIV_JSON_CONNECTION */
13821 {
13822 int i;
13823
13824#ifdef FREECIV_JSON_CONNECTION
13825 /* Enter array. */
13826 field_addr.sub_location = plocation_elem_new(0);
13827#endif /* FREECIV_JSON_CONNECTION */
13828
13829 for (i = 0; i < O_LAST; i++) {
13830#ifdef FREECIV_JSON_CONNECTION
13831 field_addr.sub_location->number = i;
13832#endif /* FREECIV_JSON_CONNECTION */
13833
13834 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
13835 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
13836 }
13837 }
13838
13839#ifdef FREECIV_JSON_CONNECTION
13840 /* Exit array. */
13841 FC_FREE(field_addr.sub_location);
13842#endif /* FREECIV_JSON_CONNECTION */
13843 }
13844 }
13845 if (BV_ISSET(fields, 21)) {
13846 log_packet_detailed(" got field 'usage'");
13847#ifdef FREECIV_JSON_CONNECTION
13848 field_addr.name = "usage";
13849#endif /* FREECIV_JSON_CONNECTION */
13850 {
13851 int i;
13852
13853#ifdef FREECIV_JSON_CONNECTION
13854 /* Enter array. */
13855 field_addr.sub_location = plocation_elem_new(0);
13856#endif /* FREECIV_JSON_CONNECTION */
13857
13858 for (i = 0; i < O_LAST; i++) {
13859#ifdef FREECIV_JSON_CONNECTION
13860 field_addr.sub_location->number = i;
13861#endif /* FREECIV_JSON_CONNECTION */
13862
13863 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
13865 }
13866 }
13867
13868#ifdef FREECIV_JSON_CONNECTION
13869 /* Exit array. */
13870 FC_FREE(field_addr.sub_location);
13871#endif /* FREECIV_JSON_CONNECTION */
13872 }
13873 }
13874 if (BV_ISSET(fields, 22)) {
13875 log_packet_detailed(" got field 'food_stock'");
13876#ifdef FREECIV_JSON_CONNECTION
13877 field_addr.name = "food_stock";
13878#endif /* FREECIV_JSON_CONNECTION */
13879 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
13880 RECEIVE_PACKET_FIELD_ERROR(food_stock);
13881 }
13882 }
13883 if (BV_ISSET(fields, 23)) {
13884 log_packet_detailed(" got field 'shield_stock'");
13885#ifdef FREECIV_JSON_CONNECTION
13886 field_addr.name = "shield_stock";
13887#endif /* FREECIV_JSON_CONNECTION */
13888 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
13889 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
13890 }
13891 }
13892 if (BV_ISSET(fields, 24)) {
13893 log_packet_detailed(" got field 'trade_route_count'");
13894#ifdef FREECIV_JSON_CONNECTION
13895 field_addr.name = "trade_route_count";
13896#endif /* FREECIV_JSON_CONNECTION */
13897 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
13898 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
13899 }
13900 }
13901 if (BV_ISSET(fields, 25)) {
13902 log_packet_detailed(" got field 'pollution'");
13903#ifdef FREECIV_JSON_CONNECTION
13904 field_addr.name = "pollution";
13905#endif /* FREECIV_JSON_CONNECTION */
13906 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
13907 RECEIVE_PACKET_FIELD_ERROR(pollution);
13908 }
13909 }
13910 if (BV_ISSET(fields, 26)) {
13911 log_packet_detailed(" got field 'illness_trade'");
13912#ifdef FREECIV_JSON_CONNECTION
13913 field_addr.name = "illness_trade";
13914#endif /* FREECIV_JSON_CONNECTION */
13915 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
13916 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
13917 }
13918 }
13919 if (BV_ISSET(fields, 27)) {
13920 log_packet_detailed(" got field 'production_kind'");
13921#ifdef FREECIV_JSON_CONNECTION
13922 field_addr.name = "production_kind";
13923#endif /* FREECIV_JSON_CONNECTION */
13924 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
13925 RECEIVE_PACKET_FIELD_ERROR(production_kind);
13926 }
13927 }
13928 if (BV_ISSET(fields, 28)) {
13929 log_packet_detailed(" got field 'production_value'");
13930#ifdef FREECIV_JSON_CONNECTION
13931 field_addr.name = "production_value";
13932#endif /* FREECIV_JSON_CONNECTION */
13933 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
13934 RECEIVE_PACKET_FIELD_ERROR(production_value);
13935 }
13936 }
13937 if (BV_ISSET(fields, 29)) {
13938 log_packet_detailed(" got field 'turn_founded'");
13939#ifdef FREECIV_JSON_CONNECTION
13940 field_addr.name = "turn_founded";
13941#endif /* FREECIV_JSON_CONNECTION */
13942 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
13943 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
13944 }
13945 }
13946 if (BV_ISSET(fields, 30)) {
13947 log_packet_detailed(" got field 'turn_last_built'");
13948#ifdef FREECIV_JSON_CONNECTION
13949 field_addr.name = "turn_last_built";
13950#endif /* FREECIV_JSON_CONNECTION */
13951 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
13952 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
13953 }
13954 }
13955 if (BV_ISSET(fields, 31)) {
13956 log_packet_detailed(" got field 'changed_from_kind'");
13957#ifdef FREECIV_JSON_CONNECTION
13958 field_addr.name = "changed_from_kind";
13959#endif /* FREECIV_JSON_CONNECTION */
13960 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
13961 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
13962 }
13963 }
13964 if (BV_ISSET(fields, 32)) {
13965 log_packet_detailed(" got field 'changed_from_value'");
13966#ifdef FREECIV_JSON_CONNECTION
13967 field_addr.name = "changed_from_value";
13968#endif /* FREECIV_JSON_CONNECTION */
13969 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
13970 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
13971 }
13972 }
13973 if (BV_ISSET(fields, 33)) {
13974 log_packet_detailed(" got field 'before_change_shields'");
13975#ifdef FREECIV_JSON_CONNECTION
13976 field_addr.name = "before_change_shields";
13977#endif /* FREECIV_JSON_CONNECTION */
13978 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
13979 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
13980 }
13981 }
13982 if (BV_ISSET(fields, 34)) {
13983 log_packet_detailed(" got field 'disbanded_shields'");
13984#ifdef FREECIV_JSON_CONNECTION
13985 field_addr.name = "disbanded_shields";
13986#endif /* FREECIV_JSON_CONNECTION */
13987 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
13988 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
13989 }
13990 }
13991 if (BV_ISSET(fields, 35)) {
13992 log_packet_detailed(" got field 'caravan_shields'");
13993#ifdef FREECIV_JSON_CONNECTION
13994 field_addr.name = "caravan_shields";
13995#endif /* FREECIV_JSON_CONNECTION */
13996 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
13997 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
13998 }
13999 }
14000 if (BV_ISSET(fields, 36)) {
14001 log_packet_detailed(" got field 'last_turns_shield_surplus'");
14002#ifdef FREECIV_JSON_CONNECTION
14003 field_addr.name = "last_turns_shield_surplus";
14004#endif /* FREECIV_JSON_CONNECTION */
14005 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
14006 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
14007 }
14008 }
14009 if (BV_ISSET(fields, 37)) {
14010 log_packet_detailed(" got field 'airlift'");
14011#ifdef FREECIV_JSON_CONNECTION
14012 field_addr.name = "airlift";
14013#endif /* FREECIV_JSON_CONNECTION */
14014 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
14016 }
14017 }
14018 real_packet->did_buy = BV_ISSET(fields, 38);
14019 real_packet->did_sell = BV_ISSET(fields, 39);
14020 real_packet->was_happy = BV_ISSET(fields, 40);
14021 real_packet->had_famine = BV_ISSET(fields, 41);
14022 real_packet->diplomat_investigate = BV_ISSET(fields, 42);
14023 if (BV_ISSET(fields, 43)) {
14024 log_packet_detailed(" got field 'walls'");
14025#ifdef FREECIV_JSON_CONNECTION
14026 field_addr.name = "walls";
14027#endif /* FREECIV_JSON_CONNECTION */
14028 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
14030 }
14031 }
14032 if (BV_ISSET(fields, 44)) {
14033 log_packet_detailed(" got field 'city_image'");
14034#ifdef FREECIV_JSON_CONNECTION
14035 field_addr.name = "city_image";
14036#endif /* FREECIV_JSON_CONNECTION */
14037 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
14038 RECEIVE_PACKET_FIELD_ERROR(city_image);
14039 }
14040 }
14041 if (BV_ISSET(fields, 45)) {
14042 log_packet_detailed(" got field 'steal'");
14043#ifdef FREECIV_JSON_CONNECTION
14044 field_addr.name = "steal";
14045#endif /* FREECIV_JSON_CONNECTION */
14046 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
14048 }
14049 }
14050 if (BV_ISSET(fields, 46)) {
14051 log_packet_detailed(" got field 'worklist'");
14052#ifdef FREECIV_JSON_CONNECTION
14053 field_addr.name = "worklist";
14054#endif /* FREECIV_JSON_CONNECTION */
14055 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
14057 }
14058 }
14059 if (BV_ISSET(fields, 47)) {
14060 log_packet_detailed(" got field 'improvements'");
14061#ifdef FREECIV_JSON_CONNECTION
14062 field_addr.name = "improvements";
14063#endif /* FREECIV_JSON_CONNECTION */
14064 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
14065 RECEIVE_PACKET_FIELD_ERROR(improvements);
14066 }
14067 }
14068 if (BV_ISSET(fields, 48)) {
14069 log_packet_detailed(" got field 'city_options'");
14070#ifdef FREECIV_JSON_CONNECTION
14071 field_addr.name = "city_options";
14072#endif /* FREECIV_JSON_CONNECTION */
14073 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
14074 RECEIVE_PACKET_FIELD_ERROR(city_options);
14075 }
14076 }
14077 if (BV_ISSET(fields, 49)) {
14078 log_packet_detailed(" got field 'wl_cb'");
14079#ifdef FREECIV_JSON_CONNECTION
14080 field_addr.name = "wl_cb";
14081#endif /* FREECIV_JSON_CONNECTION */
14082 {
14083 int readin;
14084
14085 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
14087 }
14088 real_packet->wl_cb = readin;
14089 }
14090 }
14091 if (BV_ISSET(fields, 50)) {
14092 log_packet_detailed(" got field 'acquire_type'");
14093#ifdef FREECIV_JSON_CONNECTION
14094 field_addr.name = "acquire_type";
14095#endif /* FREECIV_JSON_CONNECTION */
14096 {
14097 int readin;
14098
14099 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
14100 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
14101 }
14102 real_packet->acquire_type = readin;
14103 }
14104 }
14105 if (BV_ISSET(fields, 51)) {
14106 log_packet_detailed(" got field 'name'");
14107#ifdef FREECIV_JSON_CONNECTION
14108 field_addr.name = "name";
14109#endif /* FREECIV_JSON_CONNECTION */
14110 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
14112 }
14113 }
14114
14115 if (NULL == old) {
14116 old = fc_malloc(sizeof(*old));
14117 *old = *real_packet;
14118 genhash_insert(*hash, old, old);
14119 } else {
14120 *old = *real_packet;
14121 }
14122
14123 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
14124 if (NULL != *hash) {
14126 }
14127
14128#endif /* FREECIV_DELTA_PROTOCOL */
14130}
14131
14132static int send_packet_city_info_100(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
14133{
14134 const struct packet_city_info *real_packet = packet;
14135 int e;
14136#ifdef FREECIV_DELTA_PROTOCOL
14138 struct packet_city_info *old;
14139 bool differ;
14140 struct genhash **hash = pc->phs.sent + PACKET_CITY_INFO;
14141 int different = force_to_send;
14142#endif /* FREECIV_DELTA_PROTOCOL */
14144#ifdef FREECIV_JSON_CONNECTION
14145 struct plocation field_addr;
14146 {
14150 }
14151#endif /* FREECIV_JSON_CONNECTION */
14152
14153 log_packet_detailed("packet_city_info_100: sending info about (%d)",
14154 real_packet->id);
14155
14156#ifdef FREECIV_DELTA_PROTOCOL
14157 if (NULL == *hash) {
14159 NULL, NULL, NULL, free);
14160 }
14161 BV_CLR_ALL(fields);
14162
14163 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
14164 old = fc_malloc(sizeof(*old));
14165 *old = *real_packet;
14166 genhash_insert(*hash, old, old);
14167 memset(old, 0, sizeof(*old));
14168 different = 1; /* Force to send. */
14169 }
14170 differ = (old->tile != real_packet->tile);
14171 if (differ) {
14172 different++;
14173 BV_SET(fields, 0);
14174 }
14175
14176 differ = (old->owner != real_packet->owner);
14177 if (differ) {
14178 different++;
14179 BV_SET(fields, 1);
14180 }
14181
14182 differ = (old->original != real_packet->original);
14183 if (differ) {
14184 different++;
14185 BV_SET(fields, 2);
14186 }
14187
14188 differ = (old->size != real_packet->size);
14189 if (differ) {
14190 different++;
14191 BV_SET(fields, 3);
14192 }
14193
14194 differ = (old->city_radius_sq != real_packet->city_radius_sq);
14195 if (differ) {
14196 different++;
14197 BV_SET(fields, 4);
14198 }
14199
14200 differ = (old->style != real_packet->style);
14201 if (differ) {
14202 different++;
14203 BV_SET(fields, 5);
14204 }
14205
14206 differ = (old->capital != real_packet->capital);
14207 if (differ) {
14208 different++;
14209 BV_SET(fields, 6);
14210 }
14211
14212 differ = FALSE;
14213 {
14214 int i;
14215
14216 for (i = 0; i < FEELING_LAST; i++) {
14217 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
14218 if (differ) {
14219 break;
14220 }
14221 }
14222 }
14223 if (differ) {
14224 different++;
14225 BV_SET(fields, 7);
14226 }
14227
14228 differ = FALSE;
14229 {
14230 int i;
14231
14232 for (i = 0; i < FEELING_LAST; i++) {
14233 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
14234 if (differ) {
14235 break;
14236 }
14237 }
14238 }
14239 if (differ) {
14240 different++;
14241 BV_SET(fields, 8);
14242 }
14243
14244 differ = FALSE;
14245 {
14246 int i;
14247
14248 for (i = 0; i < FEELING_LAST; i++) {
14249 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
14250 if (differ) {
14251 break;
14252 }
14253 }
14254 }
14255 if (differ) {
14256 different++;
14257 BV_SET(fields, 9);
14258 }
14259
14260 differ = FALSE;
14261 {
14262 int i;
14263
14264 for (i = 0; i < FEELING_LAST; i++) {
14265 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
14266 if (differ) {
14267 break;
14268 }
14269 }
14270 }
14271 if (differ) {
14272 different++;
14273 BV_SET(fields, 10);
14274 }
14275
14276 differ = (old->specialists_size != real_packet->specialists_size);
14277 if (differ) {
14278 different++;
14279 BV_SET(fields, 11);
14280 }
14281
14282 differ = (old->specialists_size != real_packet->specialists_size);
14283 if (!differ) {
14284 int i;
14285
14286 for (i = 0; i < real_packet->specialists_size; i++) {
14287 differ = (old->specialists[i] != real_packet->specialists[i]);
14288 if (differ) {
14289 break;
14290 }
14291 }
14292 }
14293 if (differ) {
14294 different++;
14295 BV_SET(fields, 12);
14296 }
14297
14298 differ = (old->history != real_packet->history);
14299 if (differ) {
14300 different++;
14301 BV_SET(fields, 13);
14302 }
14303
14304 differ = (old->culture != real_packet->culture);
14305 if (differ) {
14306 different++;
14307 BV_SET(fields, 14);
14308 }
14309
14310 differ = (old->buy_cost != real_packet->buy_cost);
14311 if (differ) {
14312 different++;
14313 BV_SET(fields, 15);
14314 }
14315
14316 differ = FALSE;
14317 {
14318 int i;
14319
14320 for (i = 0; i < O_LAST; i++) {
14321 differ = (old->surplus[i] != real_packet->surplus[i]);
14322 if (differ) {
14323 break;
14324 }
14325 }
14326 }
14327 if (differ) {
14328 different++;
14329 BV_SET(fields, 16);
14330 }
14331
14332 differ = FALSE;
14333 {
14334 int i;
14335
14336 for (i = 0; i < O_LAST; i++) {
14337 differ = (old->waste[i] != real_packet->waste[i]);
14338 if (differ) {
14339 break;
14340 }
14341 }
14342 }
14343 if (differ) {
14344 different++;
14345 BV_SET(fields, 17);
14346 }
14347
14348 differ = FALSE;
14349 {
14350 int i;
14351
14352 for (i = 0; i < O_LAST; i++) {
14353 differ = (old->unhappy_penalty[i] != real_packet->unhappy_penalty[i]);
14354 if (differ) {
14355 break;
14356 }
14357 }
14358 }
14359 if (differ) {
14360 different++;
14361 BV_SET(fields, 18);
14362 }
14363
14364 differ = FALSE;
14365 {
14366 int i;
14367
14368 for (i = 0; i < O_LAST; i++) {
14369 differ = (old->prod[i] != real_packet->prod[i]);
14370 if (differ) {
14371 break;
14372 }
14373 }
14374 }
14375 if (differ) {
14376 different++;
14377 BV_SET(fields, 19);
14378 }
14379
14380 differ = FALSE;
14381 {
14382 int i;
14383
14384 for (i = 0; i < O_LAST; i++) {
14385 differ = (old->citizen_base[i] != real_packet->citizen_base[i]);
14386 if (differ) {
14387 break;
14388 }
14389 }
14390 }
14391 if (differ) {
14392 different++;
14393 BV_SET(fields, 20);
14394 }
14395
14396 differ = FALSE;
14397 {
14398 int i;
14399
14400 for (i = 0; i < O_LAST; i++) {
14401 differ = (old->usage[i] != real_packet->usage[i]);
14402 if (differ) {
14403 break;
14404 }
14405 }
14406 }
14407 if (differ) {
14408 different++;
14409 BV_SET(fields, 21);
14410 }
14411
14412 differ = (old->food_stock != real_packet->food_stock);
14413 if (differ) {
14414 different++;
14415 BV_SET(fields, 22);
14416 }
14417
14418 differ = (old->shield_stock != real_packet->shield_stock);
14419 if (differ) {
14420 different++;
14421 BV_SET(fields, 23);
14422 }
14423
14424 differ = (old->trade_route_count != real_packet->trade_route_count);
14425 if (differ) {
14426 different++;
14427 BV_SET(fields, 24);
14428 }
14429
14430 differ = (old->pollution != real_packet->pollution);
14431 if (differ) {
14432 different++;
14433 BV_SET(fields, 25);
14434 }
14435
14436 differ = (old->illness_trade != real_packet->illness_trade);
14437 if (differ) {
14438 different++;
14439 BV_SET(fields, 26);
14440 }
14441
14442 differ = (old->production_kind != real_packet->production_kind);
14443 if (differ) {
14444 different++;
14445 BV_SET(fields, 27);
14446 }
14447
14448 differ = (old->production_value != real_packet->production_value);
14449 if (differ) {
14450 different++;
14451 BV_SET(fields, 28);
14452 }
14453
14454 differ = (old->turn_founded != real_packet->turn_founded);
14455 if (differ) {
14456 different++;
14457 BV_SET(fields, 29);
14458 }
14459
14460 differ = (old->turn_last_built != real_packet->turn_last_built);
14461 if (differ) {
14462 different++;
14463 BV_SET(fields, 30);
14464 }
14465
14466 differ = (old->changed_from_kind != real_packet->changed_from_kind);
14467 if (differ) {
14468 different++;
14469 BV_SET(fields, 31);
14470 }
14471
14472 differ = (old->changed_from_value != real_packet->changed_from_value);
14473 if (differ) {
14474 different++;
14475 BV_SET(fields, 32);
14476 }
14477
14478 differ = (old->before_change_shields != real_packet->before_change_shields);
14479 if (differ) {
14480 different++;
14481 BV_SET(fields, 33);
14482 }
14483
14484 differ = (old->disbanded_shields != real_packet->disbanded_shields);
14485 if (differ) {
14486 different++;
14487 BV_SET(fields, 34);
14488 }
14489
14490 differ = (old->caravan_shields != real_packet->caravan_shields);
14491 if (differ) {
14492 different++;
14493 BV_SET(fields, 35);
14494 }
14495
14496 differ = (old->last_turns_shield_surplus != real_packet->last_turns_shield_surplus);
14497 if (differ) {
14498 different++;
14499 BV_SET(fields, 36);
14500 }
14501
14502 differ = (old->airlift != real_packet->airlift);
14503 if (differ) {
14504 different++;
14505 BV_SET(fields, 37);
14506 }
14507
14508 differ = (old->did_buy != real_packet->did_buy);
14509 if (differ) {
14510 different++;
14511 }
14512 if (packet->did_buy) {
14513 BV_SET(fields, 38);
14514 }
14515
14516 differ = (old->did_sell != real_packet->did_sell);
14517 if (differ) {
14518 different++;
14519 }
14520 if (packet->did_sell) {
14521 BV_SET(fields, 39);
14522 }
14523
14524 differ = (old->was_happy != real_packet->was_happy);
14525 if (differ) {
14526 different++;
14527 }
14528 if (packet->was_happy) {
14529 BV_SET(fields, 40);
14530 }
14531
14532 differ = (old->had_famine != real_packet->had_famine);
14533 if (differ) {
14534 different++;
14535 }
14536 if (packet->had_famine) {
14537 BV_SET(fields, 41);
14538 }
14539
14540 differ = (old->diplomat_investigate != real_packet->diplomat_investigate);
14541 if (differ) {
14542 different++;
14543 }
14544 if (packet->diplomat_investigate) {
14545 BV_SET(fields, 42);
14546 }
14547
14548 differ = (old->walls != real_packet->walls);
14549 if (differ) {
14550 different++;
14551 BV_SET(fields, 43);
14552 }
14553
14554 differ = (old->city_image != real_packet->city_image);
14555 if (differ) {
14556 different++;
14557 BV_SET(fields, 44);
14558 }
14559
14560 differ = (old->steal != real_packet->steal);
14561 if (differ) {
14562 different++;
14563 BV_SET(fields, 45);
14564 }
14565
14566 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
14567 if (differ) {
14568 different++;
14569 BV_SET(fields, 46);
14570 }
14571
14572 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
14573 if (differ) {
14574 different++;
14575 BV_SET(fields, 47);
14576 }
14577
14578 differ = !BV_ARE_EQUAL(old->city_options, real_packet->city_options);
14579 if (differ) {
14580 different++;
14581 BV_SET(fields, 48);
14582 }
14583
14584 differ = (old->wl_cb != real_packet->wl_cb);
14585 if (differ) {
14586 different++;
14587 BV_SET(fields, 49);
14588 }
14589
14590 differ = (old->acquire_type != real_packet->acquire_type);
14591 if (differ) {
14592 different++;
14593 BV_SET(fields, 50);
14594 }
14595
14596 differ = (strcmp(old->name, real_packet->name) != 0);
14597 if (differ) {
14598 different++;
14599 BV_SET(fields, 51);
14600 }
14601
14602 if (different == 0) {
14603 log_packet_detailed(" no change -> discard");
14605 }
14606
14607#ifdef FREECIV_JSON_CONNECTION
14608 field_addr.name = "fields";
14609#endif /* FREECIV_JSON_CONNECTION */
14610 e = 0;
14611 e |= DIO_BV_PUT(&dout, &field_addr, fields);
14612 if (e) {
14613 log_packet_detailed("fields bitvector error detected");
14614 }
14615#ifdef FREECIV_JSON_CONNECTION
14616 field_addr.name = "id";
14617#endif /* FREECIV_JSON_CONNECTION */
14618 e = 0;
14619 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
14620 if (e) {
14621 log_packet_detailed("'id' field error detected");
14622 }
14623
14624 if (BV_ISSET(fields, 0)) {
14625 log_packet_detailed(" field 'tile' has changed");
14626#ifdef FREECIV_JSON_CONNECTION
14627 field_addr.name = "tile";
14628#endif /* FREECIV_JSON_CONNECTION */
14629 e = 0;
14630 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
14631 if (e) {
14632 log_packet_detailed("'tile' field error detected");
14633 }
14634 }
14635 if (BV_ISSET(fields, 1)) {
14636 log_packet_detailed(" field 'owner' has changed");
14637#ifdef FREECIV_JSON_CONNECTION
14638 field_addr.name = "owner";
14639#endif /* FREECIV_JSON_CONNECTION */
14640 e = 0;
14641 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
14642 if (e) {
14643 log_packet_detailed("'owner' field error detected");
14644 }
14645 }
14646 if (BV_ISSET(fields, 2)) {
14647 log_packet_detailed(" field 'original' has changed");
14648#ifdef FREECIV_JSON_CONNECTION
14649 field_addr.name = "original";
14650#endif /* FREECIV_JSON_CONNECTION */
14651 e = 0;
14652 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
14653 if (e) {
14654 log_packet_detailed("'original' field error detected");
14655 }
14656 }
14657 if (BV_ISSET(fields, 3)) {
14658 log_packet_detailed(" field 'size' has changed");
14659#ifdef FREECIV_JSON_CONNECTION
14660 field_addr.name = "size";
14661#endif /* FREECIV_JSON_CONNECTION */
14662 e = 0;
14663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
14664 if (e) {
14665 log_packet_detailed("'size' field error detected");
14666 }
14667 }
14668 if (BV_ISSET(fields, 4)) {
14669 log_packet_detailed(" field 'city_radius_sq' has changed");
14670#ifdef FREECIV_JSON_CONNECTION
14671 field_addr.name = "city_radius_sq";
14672#endif /* FREECIV_JSON_CONNECTION */
14673 e = 0;
14674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
14675 if (e) {
14676 log_packet_detailed("'city_radius_sq' field error detected");
14677 }
14678 }
14679 if (BV_ISSET(fields, 5)) {
14680 log_packet_detailed(" field 'style' has changed");
14681#ifdef FREECIV_JSON_CONNECTION
14682 field_addr.name = "style";
14683#endif /* FREECIV_JSON_CONNECTION */
14684 e = 0;
14685 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
14686 if (e) {
14687 log_packet_detailed("'style' field error detected");
14688 }
14689 }
14690 if (BV_ISSET(fields, 6)) {
14691 log_packet_detailed(" field 'capital' has changed");
14692#ifdef FREECIV_JSON_CONNECTION
14693 field_addr.name = "capital";
14694#endif /* FREECIV_JSON_CONNECTION */
14695 e = 0;
14696 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
14697 if (e) {
14698 log_packet_detailed("'capital' field error detected");
14699 }
14700 }
14701 if (BV_ISSET(fields, 7)) {
14702 log_packet_detailed(" field 'ppl_happy' has changed");
14703#ifdef FREECIV_JSON_CONNECTION
14704 field_addr.name = "ppl_happy";
14705#endif /* FREECIV_JSON_CONNECTION */
14706 e = 0;
14707 {
14708 int i;
14709
14710#ifdef FREECIV_JSON_CONNECTION
14711 /* Create the array. */
14713
14714 /* Enter the array. */
14715 field_addr.sub_location = plocation_elem_new(0);
14716#endif /* FREECIV_JSON_CONNECTION */
14717
14718 for (i = 0; i < FEELING_LAST; i++) {
14719#ifdef FREECIV_JSON_CONNECTION
14720 /* Next array element. */
14721 field_addr.sub_location->number = i;
14722#endif /* FREECIV_JSON_CONNECTION */
14723
14724 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
14725 }
14726
14727#ifdef FREECIV_JSON_CONNECTION
14728 /* Exit array. */
14729 FC_FREE(field_addr.sub_location);
14730#endif /* FREECIV_JSON_CONNECTION */
14731 }
14732 if (e) {
14733 log_packet_detailed("'ppl_happy' field error detected");
14734 }
14735 }
14736 if (BV_ISSET(fields, 8)) {
14737 log_packet_detailed(" field 'ppl_content' has changed");
14738#ifdef FREECIV_JSON_CONNECTION
14739 field_addr.name = "ppl_content";
14740#endif /* FREECIV_JSON_CONNECTION */
14741 e = 0;
14742 {
14743 int i;
14744
14745#ifdef FREECIV_JSON_CONNECTION
14746 /* Create the array. */
14748
14749 /* Enter the array. */
14750 field_addr.sub_location = plocation_elem_new(0);
14751#endif /* FREECIV_JSON_CONNECTION */
14752
14753 for (i = 0; i < FEELING_LAST; i++) {
14754#ifdef FREECIV_JSON_CONNECTION
14755 /* Next array element. */
14756 field_addr.sub_location->number = i;
14757#endif /* FREECIV_JSON_CONNECTION */
14758
14759 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
14760 }
14761
14762#ifdef FREECIV_JSON_CONNECTION
14763 /* Exit array. */
14764 FC_FREE(field_addr.sub_location);
14765#endif /* FREECIV_JSON_CONNECTION */
14766 }
14767 if (e) {
14768 log_packet_detailed("'ppl_content' field error detected");
14769 }
14770 }
14771 if (BV_ISSET(fields, 9)) {
14772 log_packet_detailed(" field 'ppl_unhappy' has changed");
14773#ifdef FREECIV_JSON_CONNECTION
14774 field_addr.name = "ppl_unhappy";
14775#endif /* FREECIV_JSON_CONNECTION */
14776 e = 0;
14777 {
14778 int i;
14779
14780#ifdef FREECIV_JSON_CONNECTION
14781 /* Create the array. */
14783
14784 /* Enter the array. */
14785 field_addr.sub_location = plocation_elem_new(0);
14786#endif /* FREECIV_JSON_CONNECTION */
14787
14788 for (i = 0; i < FEELING_LAST; i++) {
14789#ifdef FREECIV_JSON_CONNECTION
14790 /* Next array element. */
14791 field_addr.sub_location->number = i;
14792#endif /* FREECIV_JSON_CONNECTION */
14793
14794 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
14795 }
14796
14797#ifdef FREECIV_JSON_CONNECTION
14798 /* Exit array. */
14799 FC_FREE(field_addr.sub_location);
14800#endif /* FREECIV_JSON_CONNECTION */
14801 }
14802 if (e) {
14803 log_packet_detailed("'ppl_unhappy' field error detected");
14804 }
14805 }
14806 if (BV_ISSET(fields, 10)) {
14807 log_packet_detailed(" field 'ppl_angry' has changed");
14808#ifdef FREECIV_JSON_CONNECTION
14809 field_addr.name = "ppl_angry";
14810#endif /* FREECIV_JSON_CONNECTION */
14811 e = 0;
14812 {
14813 int i;
14814
14815#ifdef FREECIV_JSON_CONNECTION
14816 /* Create the array. */
14818
14819 /* Enter the array. */
14820 field_addr.sub_location = plocation_elem_new(0);
14821#endif /* FREECIV_JSON_CONNECTION */
14822
14823 for (i = 0; i < FEELING_LAST; i++) {
14824#ifdef FREECIV_JSON_CONNECTION
14825 /* Next array element. */
14826 field_addr.sub_location->number = i;
14827#endif /* FREECIV_JSON_CONNECTION */
14828
14829 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
14830 }
14831
14832#ifdef FREECIV_JSON_CONNECTION
14833 /* Exit array. */
14834 FC_FREE(field_addr.sub_location);
14835#endif /* FREECIV_JSON_CONNECTION */
14836 }
14837 if (e) {
14838 log_packet_detailed("'ppl_angry' field error detected");
14839 }
14840 }
14841 if (BV_ISSET(fields, 11)) {
14842 log_packet_detailed(" field 'specialists_size' has changed");
14843#ifdef FREECIV_JSON_CONNECTION
14844 field_addr.name = "specialists_size";
14845#endif /* FREECIV_JSON_CONNECTION */
14846 e = 0;
14847 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
14848 if (e) {
14849 log_packet_detailed("'specialists_size' field error detected");
14850 }
14851 }
14852 if (BV_ISSET(fields, 12)) {
14853 log_packet_detailed(" field 'specialists' has changed");
14854#ifdef FREECIV_JSON_CONNECTION
14855 field_addr.name = "specialists";
14856#endif /* FREECIV_JSON_CONNECTION */
14857 e = 0;
14858 {
14859 int i;
14860
14861#ifdef FREECIV_JSON_CONNECTION
14862 /* Create the array. */
14863 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
14864
14865 /* Enter the array. */
14866 field_addr.sub_location = plocation_elem_new(0);
14867#endif /* FREECIV_JSON_CONNECTION */
14868
14869 for (i = 0; i < real_packet->specialists_size; i++) {
14870#ifdef FREECIV_JSON_CONNECTION
14871 /* Next array element. */
14872 field_addr.sub_location->number = i;
14873#endif /* FREECIV_JSON_CONNECTION */
14874
14875 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
14876 }
14877
14878#ifdef FREECIV_JSON_CONNECTION
14879 /* Exit array. */
14880 FC_FREE(field_addr.sub_location);
14881#endif /* FREECIV_JSON_CONNECTION */
14882 }
14883 if (e) {
14884 log_packet_detailed("'specialists' field error detected");
14885 }
14886 }
14887 if (BV_ISSET(fields, 13)) {
14888 log_packet_detailed(" field 'history' has changed");
14889#ifdef FREECIV_JSON_CONNECTION
14890 field_addr.name = "history";
14891#endif /* FREECIV_JSON_CONNECTION */
14892 e = 0;
14893 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
14894 if (e) {
14895 log_packet_detailed("'history' field error detected");
14896 }
14897 }
14898 if (BV_ISSET(fields, 14)) {
14899 log_packet_detailed(" field 'culture' has changed");
14900#ifdef FREECIV_JSON_CONNECTION
14901 field_addr.name = "culture";
14902#endif /* FREECIV_JSON_CONNECTION */
14903 e = 0;
14904 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
14905 if (e) {
14906 log_packet_detailed("'culture' field error detected");
14907 }
14908 }
14909 if (BV_ISSET(fields, 15)) {
14910 log_packet_detailed(" field 'buy_cost' has changed");
14911#ifdef FREECIV_JSON_CONNECTION
14912 field_addr.name = "buy_cost";
14913#endif /* FREECIV_JSON_CONNECTION */
14914 e = 0;
14915 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
14916 if (e) {
14917 log_packet_detailed("'buy_cost' field error detected");
14918 }
14919 }
14920 if (BV_ISSET(fields, 16)) {
14921 log_packet_detailed(" field 'surplus' has changed");
14922#ifdef FREECIV_JSON_CONNECTION
14923 field_addr.name = "surplus";
14924#endif /* FREECIV_JSON_CONNECTION */
14925 e = 0;
14926 {
14927 int i;
14928
14929#ifdef FREECIV_JSON_CONNECTION
14930 /* Create the array. */
14931 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
14932
14933 /* Enter the array. */
14934 field_addr.sub_location = plocation_elem_new(0);
14935#endif /* FREECIV_JSON_CONNECTION */
14936
14937 for (i = 0; i < O_LAST; i++) {
14938#ifdef FREECIV_JSON_CONNECTION
14939 /* Next array element. */
14940 field_addr.sub_location->number = i;
14941#endif /* FREECIV_JSON_CONNECTION */
14942
14943 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
14944 }
14945
14946#ifdef FREECIV_JSON_CONNECTION
14947 /* Exit array. */
14948 FC_FREE(field_addr.sub_location);
14949#endif /* FREECIV_JSON_CONNECTION */
14950 }
14951 if (e) {
14952 log_packet_detailed("'surplus' field error detected");
14953 }
14954 }
14955 if (BV_ISSET(fields, 17)) {
14956 log_packet_detailed(" field 'waste' has changed");
14957#ifdef FREECIV_JSON_CONNECTION
14958 field_addr.name = "waste";
14959#endif /* FREECIV_JSON_CONNECTION */
14960 e = 0;
14961 {
14962 int i;
14963
14964#ifdef FREECIV_JSON_CONNECTION
14965 /* Create the array. */
14966 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
14967
14968 /* Enter the array. */
14969 field_addr.sub_location = plocation_elem_new(0);
14970#endif /* FREECIV_JSON_CONNECTION */
14971
14972 for (i = 0; i < O_LAST; i++) {
14973#ifdef FREECIV_JSON_CONNECTION
14974 /* Next array element. */
14975 field_addr.sub_location->number = i;
14976#endif /* FREECIV_JSON_CONNECTION */
14977
14978 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
14979 }
14980
14981#ifdef FREECIV_JSON_CONNECTION
14982 /* Exit array. */
14983 FC_FREE(field_addr.sub_location);
14984#endif /* FREECIV_JSON_CONNECTION */
14985 }
14986 if (e) {
14987 log_packet_detailed("'waste' field error detected");
14988 }
14989 }
14990 if (BV_ISSET(fields, 18)) {
14991 log_packet_detailed(" field 'unhappy_penalty' has changed");
14992#ifdef FREECIV_JSON_CONNECTION
14993 field_addr.name = "unhappy_penalty";
14994#endif /* FREECIV_JSON_CONNECTION */
14995 e = 0;
14996 {
14997 int i;
14998
14999#ifdef FREECIV_JSON_CONNECTION
15000 /* Create the array. */
15001 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15002
15003 /* Enter the array. */
15004 field_addr.sub_location = plocation_elem_new(0);
15005#endif /* FREECIV_JSON_CONNECTION */
15006
15007 for (i = 0; i < O_LAST; i++) {
15008#ifdef FREECIV_JSON_CONNECTION
15009 /* Next array element. */
15010 field_addr.sub_location->number = i;
15011#endif /* FREECIV_JSON_CONNECTION */
15012
15013 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
15014 }
15015
15016#ifdef FREECIV_JSON_CONNECTION
15017 /* Exit array. */
15018 FC_FREE(field_addr.sub_location);
15019#endif /* FREECIV_JSON_CONNECTION */
15020 }
15021 if (e) {
15022 log_packet_detailed("'unhappy_penalty' field error detected");
15023 }
15024 }
15025 if (BV_ISSET(fields, 19)) {
15026 log_packet_detailed(" field 'prod' has changed");
15027#ifdef FREECIV_JSON_CONNECTION
15028 field_addr.name = "prod";
15029#endif /* FREECIV_JSON_CONNECTION */
15030 e = 0;
15031 {
15032 int i;
15033
15034#ifdef FREECIV_JSON_CONNECTION
15035 /* Create the array. */
15036 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15037
15038 /* Enter the array. */
15039 field_addr.sub_location = plocation_elem_new(0);
15040#endif /* FREECIV_JSON_CONNECTION */
15041
15042 for (i = 0; i < O_LAST; i++) {
15043#ifdef FREECIV_JSON_CONNECTION
15044 /* Next array element. */
15045 field_addr.sub_location->number = i;
15046#endif /* FREECIV_JSON_CONNECTION */
15047
15048 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
15049 }
15050
15051#ifdef FREECIV_JSON_CONNECTION
15052 /* Exit array. */
15053 FC_FREE(field_addr.sub_location);
15054#endif /* FREECIV_JSON_CONNECTION */
15055 }
15056 if (e) {
15057 log_packet_detailed("'prod' field error detected");
15058 }
15059 }
15060 if (BV_ISSET(fields, 20)) {
15061 log_packet_detailed(" field 'citizen_base' has changed");
15062#ifdef FREECIV_JSON_CONNECTION
15063 field_addr.name = "citizen_base";
15064#endif /* FREECIV_JSON_CONNECTION */
15065 e = 0;
15066 {
15067 int i;
15068
15069#ifdef FREECIV_JSON_CONNECTION
15070 /* Create the array. */
15071 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15072
15073 /* Enter the array. */
15074 field_addr.sub_location = plocation_elem_new(0);
15075#endif /* FREECIV_JSON_CONNECTION */
15076
15077 for (i = 0; i < O_LAST; i++) {
15078#ifdef FREECIV_JSON_CONNECTION
15079 /* Next array element. */
15080 field_addr.sub_location->number = i;
15081#endif /* FREECIV_JSON_CONNECTION */
15082
15083 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
15084 }
15085
15086#ifdef FREECIV_JSON_CONNECTION
15087 /* Exit array. */
15088 FC_FREE(field_addr.sub_location);
15089#endif /* FREECIV_JSON_CONNECTION */
15090 }
15091 if (e) {
15092 log_packet_detailed("'citizen_base' field error detected");
15093 }
15094 }
15095 if (BV_ISSET(fields, 21)) {
15096 log_packet_detailed(" field 'usage' has changed");
15097#ifdef FREECIV_JSON_CONNECTION
15098 field_addr.name = "usage";
15099#endif /* FREECIV_JSON_CONNECTION */
15100 e = 0;
15101 {
15102 int i;
15103
15104#ifdef FREECIV_JSON_CONNECTION
15105 /* Create the array. */
15106 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15107
15108 /* Enter the array. */
15109 field_addr.sub_location = plocation_elem_new(0);
15110#endif /* FREECIV_JSON_CONNECTION */
15111
15112 for (i = 0; i < O_LAST; i++) {
15113#ifdef FREECIV_JSON_CONNECTION
15114 /* Next array element. */
15115 field_addr.sub_location->number = i;
15116#endif /* FREECIV_JSON_CONNECTION */
15117
15118 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
15119 }
15120
15121#ifdef FREECIV_JSON_CONNECTION
15122 /* Exit array. */
15123 FC_FREE(field_addr.sub_location);
15124#endif /* FREECIV_JSON_CONNECTION */
15125 }
15126 if (e) {
15127 log_packet_detailed("'usage' field error detected");
15128 }
15129 }
15130 if (BV_ISSET(fields, 22)) {
15131 log_packet_detailed(" field 'food_stock' has changed");
15132#ifdef FREECIV_JSON_CONNECTION
15133 field_addr.name = "food_stock";
15134#endif /* FREECIV_JSON_CONNECTION */
15135 e = 0;
15136 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
15137 if (e) {
15138 log_packet_detailed("'food_stock' field error detected");
15139 }
15140 }
15141 if (BV_ISSET(fields, 23)) {
15142 log_packet_detailed(" field 'shield_stock' has changed");
15143#ifdef FREECIV_JSON_CONNECTION
15144 field_addr.name = "shield_stock";
15145#endif /* FREECIV_JSON_CONNECTION */
15146 e = 0;
15147 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
15148 if (e) {
15149 log_packet_detailed("'shield_stock' field error detected");
15150 }
15151 }
15152 if (BV_ISSET(fields, 24)) {
15153 log_packet_detailed(" field 'trade_route_count' has changed");
15154#ifdef FREECIV_JSON_CONNECTION
15155 field_addr.name = "trade_route_count";
15156#endif /* FREECIV_JSON_CONNECTION */
15157 e = 0;
15158 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
15159 if (e) {
15160 log_packet_detailed("'trade_route_count' field error detected");
15161 }
15162 }
15163 if (BV_ISSET(fields, 25)) {
15164 log_packet_detailed(" field 'pollution' has changed");
15165#ifdef FREECIV_JSON_CONNECTION
15166 field_addr.name = "pollution";
15167#endif /* FREECIV_JSON_CONNECTION */
15168 e = 0;
15169 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
15170 if (e) {
15171 log_packet_detailed("'pollution' field error detected");
15172 }
15173 }
15174 if (BV_ISSET(fields, 26)) {
15175 log_packet_detailed(" field 'illness_trade' has changed");
15176#ifdef FREECIV_JSON_CONNECTION
15177 field_addr.name = "illness_trade";
15178#endif /* FREECIV_JSON_CONNECTION */
15179 e = 0;
15180 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
15181 if (e) {
15182 log_packet_detailed("'illness_trade' field error detected");
15183 }
15184 }
15185 if (BV_ISSET(fields, 27)) {
15186 log_packet_detailed(" field 'production_kind' has changed");
15187#ifdef FREECIV_JSON_CONNECTION
15188 field_addr.name = "production_kind";
15189#endif /* FREECIV_JSON_CONNECTION */
15190 e = 0;
15191 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
15192 if (e) {
15193 log_packet_detailed("'production_kind' field error detected");
15194 }
15195 }
15196 if (BV_ISSET(fields, 28)) {
15197 log_packet_detailed(" field 'production_value' has changed");
15198#ifdef FREECIV_JSON_CONNECTION
15199 field_addr.name = "production_value";
15200#endif /* FREECIV_JSON_CONNECTION */
15201 e = 0;
15202 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
15203 if (e) {
15204 log_packet_detailed("'production_value' field error detected");
15205 }
15206 }
15207 if (BV_ISSET(fields, 29)) {
15208 log_packet_detailed(" field 'turn_founded' has changed");
15209#ifdef FREECIV_JSON_CONNECTION
15210 field_addr.name = "turn_founded";
15211#endif /* FREECIV_JSON_CONNECTION */
15212 e = 0;
15213 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
15214 if (e) {
15215 log_packet_detailed("'turn_founded' field error detected");
15216 }
15217 }
15218 if (BV_ISSET(fields, 30)) {
15219 log_packet_detailed(" field 'turn_last_built' has changed");
15220#ifdef FREECIV_JSON_CONNECTION
15221 field_addr.name = "turn_last_built";
15222#endif /* FREECIV_JSON_CONNECTION */
15223 e = 0;
15224 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
15225 if (e) {
15226 log_packet_detailed("'turn_last_built' field error detected");
15227 }
15228 }
15229 if (BV_ISSET(fields, 31)) {
15230 log_packet_detailed(" field 'changed_from_kind' has changed");
15231#ifdef FREECIV_JSON_CONNECTION
15232 field_addr.name = "changed_from_kind";
15233#endif /* FREECIV_JSON_CONNECTION */
15234 e = 0;
15235 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
15236 if (e) {
15237 log_packet_detailed("'changed_from_kind' field error detected");
15238 }
15239 }
15240 if (BV_ISSET(fields, 32)) {
15241 log_packet_detailed(" field 'changed_from_value' has changed");
15242#ifdef FREECIV_JSON_CONNECTION
15243 field_addr.name = "changed_from_value";
15244#endif /* FREECIV_JSON_CONNECTION */
15245 e = 0;
15246 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
15247 if (e) {
15248 log_packet_detailed("'changed_from_value' field error detected");
15249 }
15250 }
15251 if (BV_ISSET(fields, 33)) {
15252 log_packet_detailed(" field 'before_change_shields' has changed");
15253#ifdef FREECIV_JSON_CONNECTION
15254 field_addr.name = "before_change_shields";
15255#endif /* FREECIV_JSON_CONNECTION */
15256 e = 0;
15257 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
15258 if (e) {
15259 log_packet_detailed("'before_change_shields' field error detected");
15260 }
15261 }
15262 if (BV_ISSET(fields, 34)) {
15263 log_packet_detailed(" field 'disbanded_shields' has changed");
15264#ifdef FREECIV_JSON_CONNECTION
15265 field_addr.name = "disbanded_shields";
15266#endif /* FREECIV_JSON_CONNECTION */
15267 e = 0;
15268 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
15269 if (e) {
15270 log_packet_detailed("'disbanded_shields' field error detected");
15271 }
15272 }
15273 if (BV_ISSET(fields, 35)) {
15274 log_packet_detailed(" field 'caravan_shields' has changed");
15275#ifdef FREECIV_JSON_CONNECTION
15276 field_addr.name = "caravan_shields";
15277#endif /* FREECIV_JSON_CONNECTION */
15278 e = 0;
15279 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
15280 if (e) {
15281 log_packet_detailed("'caravan_shields' field error detected");
15282 }
15283 }
15284 if (BV_ISSET(fields, 36)) {
15285 log_packet_detailed(" field 'last_turns_shield_surplus' has changed");
15286#ifdef FREECIV_JSON_CONNECTION
15287 field_addr.name = "last_turns_shield_surplus";
15288#endif /* FREECIV_JSON_CONNECTION */
15289 e = 0;
15290 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
15291 if (e) {
15292 log_packet_detailed("'last_turns_shield_surplus' field error detected");
15293 }
15294 }
15295 if (BV_ISSET(fields, 37)) {
15296 log_packet_detailed(" field 'airlift' has changed");
15297#ifdef FREECIV_JSON_CONNECTION
15298 field_addr.name = "airlift";
15299#endif /* FREECIV_JSON_CONNECTION */
15300 e = 0;
15301 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
15302 if (e) {
15303 log_packet_detailed("'airlift' field error detected");
15304 }
15305 }
15306 /* field 38 is folded into the header */
15307 /* field 39 is folded into the header */
15308 /* field 40 is folded into the header */
15309 /* field 41 is folded into the header */
15310 /* field 42 is folded into the header */
15311 if (BV_ISSET(fields, 43)) {
15312 log_packet_detailed(" field 'walls' has changed");
15313#ifdef FREECIV_JSON_CONNECTION
15314 field_addr.name = "walls";
15315#endif /* FREECIV_JSON_CONNECTION */
15316 e = 0;
15317 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
15318 if (e) {
15319 log_packet_detailed("'walls' field error detected");
15320 }
15321 }
15322 if (BV_ISSET(fields, 44)) {
15323 log_packet_detailed(" field 'city_image' has changed");
15324#ifdef FREECIV_JSON_CONNECTION
15325 field_addr.name = "city_image";
15326#endif /* FREECIV_JSON_CONNECTION */
15327 e = 0;
15328 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
15329 if (e) {
15330 log_packet_detailed("'city_image' field error detected");
15331 }
15332 }
15333 if (BV_ISSET(fields, 45)) {
15334 log_packet_detailed(" field 'steal' has changed");
15335#ifdef FREECIV_JSON_CONNECTION
15336 field_addr.name = "steal";
15337#endif /* FREECIV_JSON_CONNECTION */
15338 e = 0;
15339 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
15340 if (e) {
15341 log_packet_detailed("'steal' field error detected");
15342 }
15343 }
15344 if (BV_ISSET(fields, 46)) {
15345 log_packet_detailed(" field 'worklist' has changed");
15346#ifdef FREECIV_JSON_CONNECTION
15347 field_addr.name = "worklist";
15348#endif /* FREECIV_JSON_CONNECTION */
15349 e = 0;
15350 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
15351 if (e) {
15352 log_packet_detailed("'worklist' field error detected");
15353 }
15354 }
15355 if (BV_ISSET(fields, 47)) {
15356 log_packet_detailed(" field 'improvements' has changed");
15357#ifdef FREECIV_JSON_CONNECTION
15358 field_addr.name = "improvements";
15359#endif /* FREECIV_JSON_CONNECTION */
15360 e = 0;
15361 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
15362 if (e) {
15363 log_packet_detailed("'improvements' field error detected");
15364 }
15365 }
15366 if (BV_ISSET(fields, 48)) {
15367 log_packet_detailed(" field 'city_options' has changed");
15368#ifdef FREECIV_JSON_CONNECTION
15369 field_addr.name = "city_options";
15370#endif /* FREECIV_JSON_CONNECTION */
15371 e = 0;
15372 e |= DIO_BV_PUT(&dout, &field_addr, packet->city_options);
15373 if (e) {
15374 log_packet_detailed("'city_options' field error detected");
15375 }
15376 }
15377 if (BV_ISSET(fields, 49)) {
15378 log_packet_detailed(" field 'wl_cb' has changed");
15379#ifdef FREECIV_JSON_CONNECTION
15380 field_addr.name = "wl_cb";
15381#endif /* FREECIV_JSON_CONNECTION */
15382 e = 0;
15383 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
15384 if (e) {
15385 log_packet_detailed("'wl_cb' field error detected");
15386 }
15387 }
15388 if (BV_ISSET(fields, 50)) {
15389 log_packet_detailed(" field 'acquire_type' has changed");
15390#ifdef FREECIV_JSON_CONNECTION
15391 field_addr.name = "acquire_type";
15392#endif /* FREECIV_JSON_CONNECTION */
15393 e = 0;
15394 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
15395 if (e) {
15396 log_packet_detailed("'acquire_type' field error detected");
15397 }
15398 }
15399 if (BV_ISSET(fields, 51)) {
15400 log_packet_detailed(" field 'name' has changed");
15401#ifdef FREECIV_JSON_CONNECTION
15402 field_addr.name = "name";
15403#endif /* FREECIV_JSON_CONNECTION */
15404 e = 0;
15405 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
15406 if (e) {
15407 log_packet_detailed("'name' field error detected");
15408 }
15409 }
15410
15411 *old = *real_packet;
15412
15413 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
15414 if (NULL != *hash) {
15416 }
15417#endif /* FREECIV_DELTA_PROTOCOL */
15418#ifndef FREECIV_DELTA_PROTOCOL
15419#ifdef FREECIV_JSON_CONNECTION
15420 field_addr.name = "id";
15421#endif /* FREECIV_JSON_CONNECTION */
15422 e = 0;
15423 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
15424 if (e) {
15425 log_packet_detailed("'id' field error detected");
15426 }
15427#ifdef FREECIV_JSON_CONNECTION
15428 field_addr.name = "tile";
15429#endif /* FREECIV_JSON_CONNECTION */
15430 e = 0;
15431 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
15432 if (e) {
15433 log_packet_detailed("'tile' field error detected");
15434 }
15435#ifdef FREECIV_JSON_CONNECTION
15436 field_addr.name = "owner";
15437#endif /* FREECIV_JSON_CONNECTION */
15438 e = 0;
15439 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
15440 if (e) {
15441 log_packet_detailed("'owner' field error detected");
15442 }
15443#ifdef FREECIV_JSON_CONNECTION
15444 field_addr.name = "original";
15445#endif /* FREECIV_JSON_CONNECTION */
15446 e = 0;
15447 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
15448 if (e) {
15449 log_packet_detailed("'original' field error detected");
15450 }
15451#ifdef FREECIV_JSON_CONNECTION
15452 field_addr.name = "size";
15453#endif /* FREECIV_JSON_CONNECTION */
15454 e = 0;
15455 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
15456 if (e) {
15457 log_packet_detailed("'size' field error detected");
15458 }
15459#ifdef FREECIV_JSON_CONNECTION
15460 field_addr.name = "city_radius_sq";
15461#endif /* FREECIV_JSON_CONNECTION */
15462 e = 0;
15463 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
15464 if (e) {
15465 log_packet_detailed("'city_radius_sq' field error detected");
15466 }
15467#ifdef FREECIV_JSON_CONNECTION
15468 field_addr.name = "style";
15469#endif /* FREECIV_JSON_CONNECTION */
15470 e = 0;
15471 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
15472 if (e) {
15473 log_packet_detailed("'style' field error detected");
15474 }
15475#ifdef FREECIV_JSON_CONNECTION
15476 field_addr.name = "capital";
15477#endif /* FREECIV_JSON_CONNECTION */
15478 e = 0;
15479 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
15480 if (e) {
15481 log_packet_detailed("'capital' field error detected");
15482 }
15483#ifdef FREECIV_JSON_CONNECTION
15484 field_addr.name = "ppl_happy";
15485#endif /* FREECIV_JSON_CONNECTION */
15486 e = 0;
15487 {
15488 int i;
15489
15490#ifdef FREECIV_JSON_CONNECTION
15491 /* Create the array. */
15493
15494 /* Enter the array. */
15495 field_addr.sub_location = plocation_elem_new(0);
15496#endif /* FREECIV_JSON_CONNECTION */
15497
15498 for (i = 0; i < FEELING_LAST; i++) {
15499#ifdef FREECIV_JSON_CONNECTION
15500 /* Next array element. */
15501 field_addr.sub_location->number = i;
15502#endif /* FREECIV_JSON_CONNECTION */
15503
15504 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
15505 }
15506
15507#ifdef FREECIV_JSON_CONNECTION
15508 /* Exit array. */
15509 FC_FREE(field_addr.sub_location);
15510#endif /* FREECIV_JSON_CONNECTION */
15511 }
15512 if (e) {
15513 log_packet_detailed("'ppl_happy' field error detected");
15514 }
15515#ifdef FREECIV_JSON_CONNECTION
15516 field_addr.name = "ppl_content";
15517#endif /* FREECIV_JSON_CONNECTION */
15518 e = 0;
15519 {
15520 int i;
15521
15522#ifdef FREECIV_JSON_CONNECTION
15523 /* Create the array. */
15525
15526 /* Enter the array. */
15527 field_addr.sub_location = plocation_elem_new(0);
15528#endif /* FREECIV_JSON_CONNECTION */
15529
15530 for (i = 0; i < FEELING_LAST; i++) {
15531#ifdef FREECIV_JSON_CONNECTION
15532 /* Next array element. */
15533 field_addr.sub_location->number = i;
15534#endif /* FREECIV_JSON_CONNECTION */
15535
15536 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
15537 }
15538
15539#ifdef FREECIV_JSON_CONNECTION
15540 /* Exit array. */
15541 FC_FREE(field_addr.sub_location);
15542#endif /* FREECIV_JSON_CONNECTION */
15543 }
15544 if (e) {
15545 log_packet_detailed("'ppl_content' field error detected");
15546 }
15547#ifdef FREECIV_JSON_CONNECTION
15548 field_addr.name = "ppl_unhappy";
15549#endif /* FREECIV_JSON_CONNECTION */
15550 e = 0;
15551 {
15552 int i;
15553
15554#ifdef FREECIV_JSON_CONNECTION
15555 /* Create the array. */
15557
15558 /* Enter the array. */
15559 field_addr.sub_location = plocation_elem_new(0);
15560#endif /* FREECIV_JSON_CONNECTION */
15561
15562 for (i = 0; i < FEELING_LAST; i++) {
15563#ifdef FREECIV_JSON_CONNECTION
15564 /* Next array element. */
15565 field_addr.sub_location->number = i;
15566#endif /* FREECIV_JSON_CONNECTION */
15567
15568 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
15569 }
15570
15571#ifdef FREECIV_JSON_CONNECTION
15572 /* Exit array. */
15573 FC_FREE(field_addr.sub_location);
15574#endif /* FREECIV_JSON_CONNECTION */
15575 }
15576 if (e) {
15577 log_packet_detailed("'ppl_unhappy' field error detected");
15578 }
15579#ifdef FREECIV_JSON_CONNECTION
15580 field_addr.name = "ppl_angry";
15581#endif /* FREECIV_JSON_CONNECTION */
15582 e = 0;
15583 {
15584 int i;
15585
15586#ifdef FREECIV_JSON_CONNECTION
15587 /* Create the array. */
15589
15590 /* Enter the array. */
15591 field_addr.sub_location = plocation_elem_new(0);
15592#endif /* FREECIV_JSON_CONNECTION */
15593
15594 for (i = 0; i < FEELING_LAST; i++) {
15595#ifdef FREECIV_JSON_CONNECTION
15596 /* Next array element. */
15597 field_addr.sub_location->number = i;
15598#endif /* FREECIV_JSON_CONNECTION */
15599
15600 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
15601 }
15602
15603#ifdef FREECIV_JSON_CONNECTION
15604 /* Exit array. */
15605 FC_FREE(field_addr.sub_location);
15606#endif /* FREECIV_JSON_CONNECTION */
15607 }
15608 if (e) {
15609 log_packet_detailed("'ppl_angry' field error detected");
15610 }
15611#ifdef FREECIV_JSON_CONNECTION
15612 field_addr.name = "specialists_size";
15613#endif /* FREECIV_JSON_CONNECTION */
15614 e = 0;
15615 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
15616 if (e) {
15617 log_packet_detailed("'specialists_size' field error detected");
15618 }
15619#ifdef FREECIV_JSON_CONNECTION
15620 field_addr.name = "specialists";
15621#endif /* FREECIV_JSON_CONNECTION */
15622 e = 0;
15623 {
15624 int i;
15625
15626#ifdef FREECIV_JSON_CONNECTION
15627 /* Create the array. */
15628 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
15629
15630 /* Enter the array. */
15631 field_addr.sub_location = plocation_elem_new(0);
15632#endif /* FREECIV_JSON_CONNECTION */
15633
15634 for (i = 0; i < real_packet->specialists_size; i++) {
15635#ifdef FREECIV_JSON_CONNECTION
15636 /* Next array element. */
15637 field_addr.sub_location->number = i;
15638#endif /* FREECIV_JSON_CONNECTION */
15639
15640 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
15641 }
15642
15643#ifdef FREECIV_JSON_CONNECTION
15644 /* Exit array. */
15645 FC_FREE(field_addr.sub_location);
15646#endif /* FREECIV_JSON_CONNECTION */
15647 }
15648 if (e) {
15649 log_packet_detailed("'specialists' field error detected");
15650 }
15651#ifdef FREECIV_JSON_CONNECTION
15652 field_addr.name = "history";
15653#endif /* FREECIV_JSON_CONNECTION */
15654 e = 0;
15655 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
15656 if (e) {
15657 log_packet_detailed("'history' field error detected");
15658 }
15659#ifdef FREECIV_JSON_CONNECTION
15660 field_addr.name = "culture";
15661#endif /* FREECIV_JSON_CONNECTION */
15662 e = 0;
15663 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
15664 if (e) {
15665 log_packet_detailed("'culture' field error detected");
15666 }
15667#ifdef FREECIV_JSON_CONNECTION
15668 field_addr.name = "buy_cost";
15669#endif /* FREECIV_JSON_CONNECTION */
15670 e = 0;
15671 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
15672 if (e) {
15673 log_packet_detailed("'buy_cost' field error detected");
15674 }
15675#ifdef FREECIV_JSON_CONNECTION
15676 field_addr.name = "surplus";
15677#endif /* FREECIV_JSON_CONNECTION */
15678 e = 0;
15679 {
15680 int i;
15681
15682#ifdef FREECIV_JSON_CONNECTION
15683 /* Create the array. */
15684 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15685
15686 /* Enter the array. */
15687 field_addr.sub_location = plocation_elem_new(0);
15688#endif /* FREECIV_JSON_CONNECTION */
15689
15690 for (i = 0; i < O_LAST; i++) {
15691#ifdef FREECIV_JSON_CONNECTION
15692 /* Next array element. */
15693 field_addr.sub_location->number = i;
15694#endif /* FREECIV_JSON_CONNECTION */
15695
15696 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
15697 }
15698
15699#ifdef FREECIV_JSON_CONNECTION
15700 /* Exit array. */
15701 FC_FREE(field_addr.sub_location);
15702#endif /* FREECIV_JSON_CONNECTION */
15703 }
15704 if (e) {
15705 log_packet_detailed("'surplus' field error detected");
15706 }
15707#ifdef FREECIV_JSON_CONNECTION
15708 field_addr.name = "waste";
15709#endif /* FREECIV_JSON_CONNECTION */
15710 e = 0;
15711 {
15712 int i;
15713
15714#ifdef FREECIV_JSON_CONNECTION
15715 /* Create the array. */
15716 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15717
15718 /* Enter the array. */
15719 field_addr.sub_location = plocation_elem_new(0);
15720#endif /* FREECIV_JSON_CONNECTION */
15721
15722 for (i = 0; i < O_LAST; i++) {
15723#ifdef FREECIV_JSON_CONNECTION
15724 /* Next array element. */
15725 field_addr.sub_location->number = i;
15726#endif /* FREECIV_JSON_CONNECTION */
15727
15728 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
15729 }
15730
15731#ifdef FREECIV_JSON_CONNECTION
15732 /* Exit array. */
15733 FC_FREE(field_addr.sub_location);
15734#endif /* FREECIV_JSON_CONNECTION */
15735 }
15736 if (e) {
15737 log_packet_detailed("'waste' field error detected");
15738 }
15739#ifdef FREECIV_JSON_CONNECTION
15740 field_addr.name = "unhappy_penalty";
15741#endif /* FREECIV_JSON_CONNECTION */
15742 e = 0;
15743 {
15744 int i;
15745
15746#ifdef FREECIV_JSON_CONNECTION
15747 /* Create the array. */
15748 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15749
15750 /* Enter the array. */
15751 field_addr.sub_location = plocation_elem_new(0);
15752#endif /* FREECIV_JSON_CONNECTION */
15753
15754 for (i = 0; i < O_LAST; i++) {
15755#ifdef FREECIV_JSON_CONNECTION
15756 /* Next array element. */
15757 field_addr.sub_location->number = i;
15758#endif /* FREECIV_JSON_CONNECTION */
15759
15760 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
15761 }
15762
15763#ifdef FREECIV_JSON_CONNECTION
15764 /* Exit array. */
15765 FC_FREE(field_addr.sub_location);
15766#endif /* FREECIV_JSON_CONNECTION */
15767 }
15768 if (e) {
15769 log_packet_detailed("'unhappy_penalty' field error detected");
15770 }
15771#ifdef FREECIV_JSON_CONNECTION
15772 field_addr.name = "prod";
15773#endif /* FREECIV_JSON_CONNECTION */
15774 e = 0;
15775 {
15776 int i;
15777
15778#ifdef FREECIV_JSON_CONNECTION
15779 /* Create the array. */
15780 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15781
15782 /* Enter the array. */
15783 field_addr.sub_location = plocation_elem_new(0);
15784#endif /* FREECIV_JSON_CONNECTION */
15785
15786 for (i = 0; i < O_LAST; i++) {
15787#ifdef FREECIV_JSON_CONNECTION
15788 /* Next array element. */
15789 field_addr.sub_location->number = i;
15790#endif /* FREECIV_JSON_CONNECTION */
15791
15792 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
15793 }
15794
15795#ifdef FREECIV_JSON_CONNECTION
15796 /* Exit array. */
15797 FC_FREE(field_addr.sub_location);
15798#endif /* FREECIV_JSON_CONNECTION */
15799 }
15800 if (e) {
15801 log_packet_detailed("'prod' field error detected");
15802 }
15803#ifdef FREECIV_JSON_CONNECTION
15804 field_addr.name = "citizen_base";
15805#endif /* FREECIV_JSON_CONNECTION */
15806 e = 0;
15807 {
15808 int i;
15809
15810#ifdef FREECIV_JSON_CONNECTION
15811 /* Create the array. */
15812 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15813
15814 /* Enter the array. */
15815 field_addr.sub_location = plocation_elem_new(0);
15816#endif /* FREECIV_JSON_CONNECTION */
15817
15818 for (i = 0; i < O_LAST; i++) {
15819#ifdef FREECIV_JSON_CONNECTION
15820 /* Next array element. */
15821 field_addr.sub_location->number = i;
15822#endif /* FREECIV_JSON_CONNECTION */
15823
15824 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
15825 }
15826
15827#ifdef FREECIV_JSON_CONNECTION
15828 /* Exit array. */
15829 FC_FREE(field_addr.sub_location);
15830#endif /* FREECIV_JSON_CONNECTION */
15831 }
15832 if (e) {
15833 log_packet_detailed("'citizen_base' field error detected");
15834 }
15835#ifdef FREECIV_JSON_CONNECTION
15836 field_addr.name = "usage";
15837#endif /* FREECIV_JSON_CONNECTION */
15838 e = 0;
15839 {
15840 int i;
15841
15842#ifdef FREECIV_JSON_CONNECTION
15843 /* Create the array. */
15844 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
15845
15846 /* Enter the array. */
15847 field_addr.sub_location = plocation_elem_new(0);
15848#endif /* FREECIV_JSON_CONNECTION */
15849
15850 for (i = 0; i < O_LAST; i++) {
15851#ifdef FREECIV_JSON_CONNECTION
15852 /* Next array element. */
15853 field_addr.sub_location->number = i;
15854#endif /* FREECIV_JSON_CONNECTION */
15855
15856 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
15857 }
15858
15859#ifdef FREECIV_JSON_CONNECTION
15860 /* Exit array. */
15861 FC_FREE(field_addr.sub_location);
15862#endif /* FREECIV_JSON_CONNECTION */
15863 }
15864 if (e) {
15865 log_packet_detailed("'usage' field error detected");
15866 }
15867#ifdef FREECIV_JSON_CONNECTION
15868 field_addr.name = "food_stock";
15869#endif /* FREECIV_JSON_CONNECTION */
15870 e = 0;
15871 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
15872 if (e) {
15873 log_packet_detailed("'food_stock' field error detected");
15874 }
15875#ifdef FREECIV_JSON_CONNECTION
15876 field_addr.name = "shield_stock";
15877#endif /* FREECIV_JSON_CONNECTION */
15878 e = 0;
15879 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
15880 if (e) {
15881 log_packet_detailed("'shield_stock' field error detected");
15882 }
15883#ifdef FREECIV_JSON_CONNECTION
15884 field_addr.name = "trade_route_count";
15885#endif /* FREECIV_JSON_CONNECTION */
15886 e = 0;
15887 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
15888 if (e) {
15889 log_packet_detailed("'trade_route_count' field error detected");
15890 }
15891#ifdef FREECIV_JSON_CONNECTION
15892 field_addr.name = "pollution";
15893#endif /* FREECIV_JSON_CONNECTION */
15894 e = 0;
15895 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
15896 if (e) {
15897 log_packet_detailed("'pollution' field error detected");
15898 }
15899#ifdef FREECIV_JSON_CONNECTION
15900 field_addr.name = "illness_trade";
15901#endif /* FREECIV_JSON_CONNECTION */
15902 e = 0;
15903 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
15904 if (e) {
15905 log_packet_detailed("'illness_trade' field error detected");
15906 }
15907#ifdef FREECIV_JSON_CONNECTION
15908 field_addr.name = "production_kind";
15909#endif /* FREECIV_JSON_CONNECTION */
15910 e = 0;
15911 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
15912 if (e) {
15913 log_packet_detailed("'production_kind' field error detected");
15914 }
15915#ifdef FREECIV_JSON_CONNECTION
15916 field_addr.name = "production_value";
15917#endif /* FREECIV_JSON_CONNECTION */
15918 e = 0;
15919 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
15920 if (e) {
15921 log_packet_detailed("'production_value' field error detected");
15922 }
15923#ifdef FREECIV_JSON_CONNECTION
15924 field_addr.name = "turn_founded";
15925#endif /* FREECIV_JSON_CONNECTION */
15926 e = 0;
15927 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
15928 if (e) {
15929 log_packet_detailed("'turn_founded' field error detected");
15930 }
15931#ifdef FREECIV_JSON_CONNECTION
15932 field_addr.name = "turn_last_built";
15933#endif /* FREECIV_JSON_CONNECTION */
15934 e = 0;
15935 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
15936 if (e) {
15937 log_packet_detailed("'turn_last_built' field error detected");
15938 }
15939#ifdef FREECIV_JSON_CONNECTION
15940 field_addr.name = "changed_from_kind";
15941#endif /* FREECIV_JSON_CONNECTION */
15942 e = 0;
15943 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
15944 if (e) {
15945 log_packet_detailed("'changed_from_kind' field error detected");
15946 }
15947#ifdef FREECIV_JSON_CONNECTION
15948 field_addr.name = "changed_from_value";
15949#endif /* FREECIV_JSON_CONNECTION */
15950 e = 0;
15951 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
15952 if (e) {
15953 log_packet_detailed("'changed_from_value' field error detected");
15954 }
15955#ifdef FREECIV_JSON_CONNECTION
15956 field_addr.name = "before_change_shields";
15957#endif /* FREECIV_JSON_CONNECTION */
15958 e = 0;
15959 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
15960 if (e) {
15961 log_packet_detailed("'before_change_shields' field error detected");
15962 }
15963#ifdef FREECIV_JSON_CONNECTION
15964 field_addr.name = "disbanded_shields";
15965#endif /* FREECIV_JSON_CONNECTION */
15966 e = 0;
15967 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
15968 if (e) {
15969 log_packet_detailed("'disbanded_shields' field error detected");
15970 }
15971#ifdef FREECIV_JSON_CONNECTION
15972 field_addr.name = "caravan_shields";
15973#endif /* FREECIV_JSON_CONNECTION */
15974 e = 0;
15975 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
15976 if (e) {
15977 log_packet_detailed("'caravan_shields' field error detected");
15978 }
15979#ifdef FREECIV_JSON_CONNECTION
15980 field_addr.name = "last_turns_shield_surplus";
15981#endif /* FREECIV_JSON_CONNECTION */
15982 e = 0;
15983 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
15984 if (e) {
15985 log_packet_detailed("'last_turns_shield_surplus' field error detected");
15986 }
15987#ifdef FREECIV_JSON_CONNECTION
15988 field_addr.name = "airlift";
15989#endif /* FREECIV_JSON_CONNECTION */
15990 e = 0;
15991 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
15992 if (e) {
15993 log_packet_detailed("'airlift' field error detected");
15994 }
15995#ifdef FREECIV_JSON_CONNECTION
15996 field_addr.name = "did_buy";
15997#endif /* FREECIV_JSON_CONNECTION */
15998 e = 0;
15999 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
16000 if (e) {
16001 log_packet_detailed("'did_buy' field error detected");
16002 }
16003#ifdef FREECIV_JSON_CONNECTION
16004 field_addr.name = "did_sell";
16005#endif /* FREECIV_JSON_CONNECTION */
16006 e = 0;
16007 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
16008 if (e) {
16009 log_packet_detailed("'did_sell' field error detected");
16010 }
16011#ifdef FREECIV_JSON_CONNECTION
16012 field_addr.name = "was_happy";
16013#endif /* FREECIV_JSON_CONNECTION */
16014 e = 0;
16015 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
16016 if (e) {
16017 log_packet_detailed("'was_happy' field error detected");
16018 }
16019#ifdef FREECIV_JSON_CONNECTION
16020 field_addr.name = "had_famine";
16021#endif /* FREECIV_JSON_CONNECTION */
16022 e = 0;
16023 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
16024 if (e) {
16025 log_packet_detailed("'had_famine' field error detected");
16026 }
16027#ifdef FREECIV_JSON_CONNECTION
16028 field_addr.name = "diplomat_investigate";
16029#endif /* FREECIV_JSON_CONNECTION */
16030 e = 0;
16031 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->diplomat_investigate);
16032 if (e) {
16033 log_packet_detailed("'diplomat_investigate' field error detected");
16034 }
16035#ifdef FREECIV_JSON_CONNECTION
16036 field_addr.name = "walls";
16037#endif /* FREECIV_JSON_CONNECTION */
16038 e = 0;
16039 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
16040 if (e) {
16041 log_packet_detailed("'walls' field error detected");
16042 }
16043#ifdef FREECIV_JSON_CONNECTION
16044 field_addr.name = "city_image";
16045#endif /* FREECIV_JSON_CONNECTION */
16046 e = 0;
16047 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
16048 if (e) {
16049 log_packet_detailed("'city_image' field error detected");
16050 }
16051#ifdef FREECIV_JSON_CONNECTION
16052 field_addr.name = "steal";
16053#endif /* FREECIV_JSON_CONNECTION */
16054 e = 0;
16055 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
16056 if (e) {
16057 log_packet_detailed("'steal' field error detected");
16058 }
16059#ifdef FREECIV_JSON_CONNECTION
16060 field_addr.name = "worklist";
16061#endif /* FREECIV_JSON_CONNECTION */
16062 e = 0;
16063 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
16064 if (e) {
16065 log_packet_detailed("'worklist' field error detected");
16066 }
16067#ifdef FREECIV_JSON_CONNECTION
16068 field_addr.name = "improvements";
16069#endif /* FREECIV_JSON_CONNECTION */
16070 e = 0;
16071 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
16072 if (e) {
16073 log_packet_detailed("'improvements' field error detected");
16074 }
16075#ifdef FREECIV_JSON_CONNECTION
16076 field_addr.name = "city_options";
16077#endif /* FREECIV_JSON_CONNECTION */
16078 e = 0;
16079 e |= DIO_BV_PUT(&dout, &field_addr, packet->city_options);
16080 if (e) {
16081 log_packet_detailed("'city_options' field error detected");
16082 }
16083#ifdef FREECIV_JSON_CONNECTION
16084 field_addr.name = "wl_cb";
16085#endif /* FREECIV_JSON_CONNECTION */
16086 e = 0;
16087 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
16088 if (e) {
16089 log_packet_detailed("'wl_cb' field error detected");
16090 }
16091#ifdef FREECIV_JSON_CONNECTION
16092 field_addr.name = "acquire_type";
16093#endif /* FREECIV_JSON_CONNECTION */
16094 e = 0;
16095 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
16096 if (e) {
16097 log_packet_detailed("'acquire_type' field error detected");
16098 }
16099#ifdef FREECIV_JSON_CONNECTION
16100 field_addr.name = "name";
16101#endif /* FREECIV_JSON_CONNECTION */
16102 e = 0;
16103 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
16104 if (e) {
16105 log_packet_detailed("'name' field error detected");
16106 }
16107
16108#endif
16110}
16111
16112int send_packet_city_info(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
16113{
16114 if (!pc->used) {
16115 log_error("WARNING: trying to send data to the closed connection %s",
16117 return -1;
16118 }
16119 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send != NULL, -1,
16120 "Handler for PACKET_CITY_INFO not installed");
16121 return pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send(pc, packet, force_to_send);
16122}
16123
16124void lsend_packet_city_info(struct conn_list *dest, const struct packet_city_info *packet, bool force_to_send)
16125{
16126 conn_list_iterate(dest, pconn) {
16127 send_packet_city_info(pconn, packet, force_to_send);
16129}
16130
16131#ifdef FREECIV_DELTA_PROTOCOL
16133{
16134 const struct packet_city_nationalities *key = (const struct packet_city_nationalities *) vkey;
16135 genhash_val_t result = 0;
16136
16137 result += key->id;
16138
16139 result &= 0xFFFFFFFF;
16140 return result;
16141}
16142
16143static bool cmp_packet_city_nationalities_100(const void *vkey1, const void *vkey2)
16144{
16145 const struct packet_city_nationalities *old = (const struct packet_city_nationalities *) vkey1;
16147 bool differ;
16148
16149 differ = (old->id != real_packet->id);
16150
16151 return !differ;
16152}
16154#endif /* FREECIV_DELTA_PROTOCOL */
16155
16157{
16158#ifdef FREECIV_DELTA_PROTOCOL
16160 struct packet_city_nationalities *old;
16161 struct genhash **hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
16162#endif /* FREECIV_DELTA_PROTOCOL */
16164#ifdef FREECIV_JSON_CONNECTION
16165 struct plocation field_addr;
16166 {
16170 }
16171#endif /* FREECIV_JSON_CONNECTION */
16172
16173#ifdef FREECIV_DELTA_PROTOCOL
16174#ifdef FREECIV_JSON_CONNECTION
16175 field_addr.name = "fields";
16176#endif /* FREECIV_JSON_CONNECTION */
16177 DIO_BV_GET(&din, &field_addr, fields);
16178#ifdef FREECIV_JSON_CONNECTION
16179 field_addr.name = "id";
16180#endif /* FREECIV_JSON_CONNECTION */
16181 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
16183 }
16184
16185#else /* FREECIV_DELTA_PROTOCOL */
16186#ifdef FREECIV_JSON_CONNECTION
16187 field_addr.name = "id";
16188#endif /* FREECIV_JSON_CONNECTION */
16189 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
16191 }
16192#ifdef FREECIV_JSON_CONNECTION
16193 field_addr.name = "nationalities_count";
16194#endif /* FREECIV_JSON_CONNECTION */
16195 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
16196 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
16197 }
16198#ifdef FREECIV_JSON_CONNECTION
16199 field_addr.name = "nation_id";
16200#endif /* FREECIV_JSON_CONNECTION */
16201 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
16202 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": truncation array");
16203 }
16204 {
16205 int i;
16206
16207#ifdef FREECIV_JSON_CONNECTION
16208 /* Enter array. */
16209 field_addr.sub_location = plocation_elem_new(0);
16210#endif /* FREECIV_JSON_CONNECTION */
16211
16212 for (i = 0; i < real_packet->nationalities_count; i++) {
16213#ifdef FREECIV_JSON_CONNECTION
16214 field_addr.sub_location->number = i;
16215#endif /* FREECIV_JSON_CONNECTION */
16216
16217 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_id[i])) {
16218 RECEIVE_PACKET_FIELD_ERROR(nation_id);
16219 }
16220 }
16221
16222#ifdef FREECIV_JSON_CONNECTION
16223 /* Exit array. */
16224 FC_FREE(field_addr.sub_location);
16225#endif /* FREECIV_JSON_CONNECTION */
16226 }
16227#ifdef FREECIV_JSON_CONNECTION
16228 field_addr.name = "nation_citizens";
16229#endif /* FREECIV_JSON_CONNECTION */
16230 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
16231 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": truncation array");
16232 }
16233 {
16234 int i;
16235
16236#ifdef FREECIV_JSON_CONNECTION
16237 /* Enter array. */
16238 field_addr.sub_location = plocation_elem_new(0);
16239#endif /* FREECIV_JSON_CONNECTION */
16240
16241 for (i = 0; i < real_packet->nationalities_count; i++) {
16242#ifdef FREECIV_JSON_CONNECTION
16243 field_addr.sub_location->number = i;
16244#endif /* FREECIV_JSON_CONNECTION */
16245
16246 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
16247 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
16248 }
16249 }
16250
16251#ifdef FREECIV_JSON_CONNECTION
16252 /* Exit array. */
16253 FC_FREE(field_addr.sub_location);
16254#endif /* FREECIV_JSON_CONNECTION */
16255 }
16256#endif
16257 log_packet_detailed("packet_city_nationalities_100: got info about (%d)",
16258 real_packet->id);
16259
16260#ifdef FREECIV_DELTA_PROTOCOL
16261 if (NULL == *hash) {
16263 NULL, NULL, NULL, free);
16264 }
16265
16266 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
16267 *real_packet = *old;
16268 } else {
16269 int id;
16270
16271 id = real_packet->id;
16272
16273 log_packet_detailed(" no old info");
16274 memset(real_packet, 0, sizeof(*real_packet));
16275
16276 real_packet->id = id;
16277 }
16278
16279 if (BV_ISSET(fields, 0)) {
16280 log_packet_detailed(" got field 'nationalities_count'");
16281#ifdef FREECIV_JSON_CONNECTION
16282 field_addr.name = "nationalities_count";
16283#endif /* FREECIV_JSON_CONNECTION */
16284 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
16285 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
16286 }
16287 }
16288 if (BV_ISSET(fields, 1)) {
16289 log_packet_detailed(" got field 'nation_id'");
16290#ifdef FREECIV_JSON_CONNECTION
16291 field_addr.name = "nation_id";
16292#endif /* FREECIV_JSON_CONNECTION */
16293 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
16294 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": truncation array");
16295 }
16296 {
16297 int i;
16298
16299#ifdef FREECIV_JSON_CONNECTION
16300 /* Enter array. */
16301 field_addr.sub_location = plocation_elem_new(0);
16302#endif /* FREECIV_JSON_CONNECTION */
16303
16304 for (i = 0; i < real_packet->nationalities_count; i++) {
16305#ifdef FREECIV_JSON_CONNECTION
16306 field_addr.sub_location->number = i;
16307#endif /* FREECIV_JSON_CONNECTION */
16308
16309 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_id[i])) {
16310 RECEIVE_PACKET_FIELD_ERROR(nation_id);
16311 }
16312 }
16313
16314#ifdef FREECIV_JSON_CONNECTION
16315 /* Exit array. */
16316 FC_FREE(field_addr.sub_location);
16317#endif /* FREECIV_JSON_CONNECTION */
16318 }
16319 }
16320 if (BV_ISSET(fields, 2)) {
16321 log_packet_detailed(" got field 'nation_citizens'");
16322#ifdef FREECIV_JSON_CONNECTION
16323 field_addr.name = "nation_citizens";
16324#endif /* FREECIV_JSON_CONNECTION */
16325 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
16326 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": truncation array");
16327 }
16328 {
16329 int i;
16330
16331#ifdef FREECIV_JSON_CONNECTION
16332 /* Enter array. */
16333 field_addr.sub_location = plocation_elem_new(0);
16334#endif /* FREECIV_JSON_CONNECTION */
16335
16336 for (i = 0; i < real_packet->nationalities_count; i++) {
16337#ifdef FREECIV_JSON_CONNECTION
16338 field_addr.sub_location->number = i;
16339#endif /* FREECIV_JSON_CONNECTION */
16340
16341 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
16342 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
16343 }
16344 }
16345
16346#ifdef FREECIV_JSON_CONNECTION
16347 /* Exit array. */
16348 FC_FREE(field_addr.sub_location);
16349#endif /* FREECIV_JSON_CONNECTION */
16350 }
16351 }
16352
16353 if (NULL == old) {
16354 old = fc_malloc(sizeof(*old));
16355 *old = *real_packet;
16356 genhash_insert(*hash, old, old);
16357 } else {
16358 *old = *real_packet;
16359 }
16360
16361#endif /* FREECIV_DELTA_PROTOCOL */
16363}
16364
16365static int send_packet_city_nationalities_100(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
16366{
16367 const struct packet_city_nationalities *real_packet = packet;
16368 int e;
16369#ifdef FREECIV_DELTA_PROTOCOL
16371 struct packet_city_nationalities *old;
16372 bool differ;
16373 struct genhash **hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
16374 int different = force_to_send;
16375#endif /* FREECIV_DELTA_PROTOCOL */
16377#ifdef FREECIV_JSON_CONNECTION
16378 struct plocation field_addr;
16379 {
16383 }
16384#endif /* FREECIV_JSON_CONNECTION */
16385
16386 log_packet_detailed("packet_city_nationalities_100: sending info about (%d)",
16387 real_packet->id);
16388
16389#ifdef FREECIV_DELTA_PROTOCOL
16390 if (NULL == *hash) {
16392 NULL, NULL, NULL, free);
16393 }
16394 BV_CLR_ALL(fields);
16395
16396 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
16397 old = fc_malloc(sizeof(*old));
16398 *old = *real_packet;
16399 genhash_insert(*hash, old, old);
16400 memset(old, 0, sizeof(*old));
16401 different = 1; /* Force to send. */
16402 }
16403 differ = (old->nationalities_count != real_packet->nationalities_count);
16404 if (differ) {
16405 different++;
16406 BV_SET(fields, 0);
16407 }
16408
16409 differ = (old->nationalities_count != real_packet->nationalities_count);
16410 if (!differ) {
16411 int i;
16412
16413 for (i = 0; i < real_packet->nationalities_count; i++) {
16414 differ = (old->nation_id[i] != real_packet->nation_id[i]);
16415 if (differ) {
16416 break;
16417 }
16418 }
16419 }
16420 if (differ) {
16421 different++;
16422 BV_SET(fields, 1);
16423 }
16424
16425 differ = (old->nationalities_count != real_packet->nationalities_count);
16426 if (!differ) {
16427 int i;
16428
16429 for (i = 0; i < real_packet->nationalities_count; i++) {
16430 differ = (old->nation_citizens[i] != real_packet->nation_citizens[i]);
16431 if (differ) {
16432 break;
16433 }
16434 }
16435 }
16436 if (differ) {
16437 different++;
16438 BV_SET(fields, 2);
16439 }
16440
16441 if (different == 0) {
16442 log_packet_detailed(" no change -> discard");
16444 }
16445
16446#ifdef FREECIV_JSON_CONNECTION
16447 field_addr.name = "fields";
16448#endif /* FREECIV_JSON_CONNECTION */
16449 e = 0;
16450 e |= DIO_BV_PUT(&dout, &field_addr, fields);
16451 if (e) {
16452 log_packet_detailed("fields bitvector error detected");
16453 }
16454#ifdef FREECIV_JSON_CONNECTION
16455 field_addr.name = "id";
16456#endif /* FREECIV_JSON_CONNECTION */
16457 e = 0;
16458 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
16459 if (e) {
16460 log_packet_detailed("'id' field error detected");
16461 }
16462
16463 if (BV_ISSET(fields, 0)) {
16464 log_packet_detailed(" field 'nationalities_count' has changed");
16465#ifdef FREECIV_JSON_CONNECTION
16466 field_addr.name = "nationalities_count";
16467#endif /* FREECIV_JSON_CONNECTION */
16468 e = 0;
16469 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
16470 if (e) {
16471 log_packet_detailed("'nationalities_count' field error detected");
16472 }
16473 }
16474 if (BV_ISSET(fields, 1)) {
16475 log_packet_detailed(" field 'nation_id' has changed");
16476#ifdef FREECIV_JSON_CONNECTION
16477 field_addr.name = "nation_id";
16478#endif /* FREECIV_JSON_CONNECTION */
16479 e = 0;
16480 {
16481 int i;
16482
16483#ifdef FREECIV_JSON_CONNECTION
16484 /* Create the array. */
16485 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
16486
16487 /* Enter the array. */
16488 field_addr.sub_location = plocation_elem_new(0);
16489#endif /* FREECIV_JSON_CONNECTION */
16490
16491 for (i = 0; i < real_packet->nationalities_count; i++) {
16492#ifdef FREECIV_JSON_CONNECTION
16493 /* Next array element. */
16494 field_addr.sub_location->number = i;
16495#endif /* FREECIV_JSON_CONNECTION */
16496
16497 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_id[i]);
16498 }
16499
16500#ifdef FREECIV_JSON_CONNECTION
16501 /* Exit array. */
16502 FC_FREE(field_addr.sub_location);
16503#endif /* FREECIV_JSON_CONNECTION */
16504 }
16505 if (e) {
16506 log_packet_detailed("'nation_id' field error detected");
16507 }
16508 }
16509 if (BV_ISSET(fields, 2)) {
16510 log_packet_detailed(" field 'nation_citizens' has changed");
16511#ifdef FREECIV_JSON_CONNECTION
16512 field_addr.name = "nation_citizens";
16513#endif /* FREECIV_JSON_CONNECTION */
16514 e = 0;
16515 {
16516 int i;
16517
16518#ifdef FREECIV_JSON_CONNECTION
16519 /* Create the array. */
16520 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
16521
16522 /* Enter the array. */
16523 field_addr.sub_location = plocation_elem_new(0);
16524#endif /* FREECIV_JSON_CONNECTION */
16525
16526 for (i = 0; i < real_packet->nationalities_count; i++) {
16527#ifdef FREECIV_JSON_CONNECTION
16528 /* Next array element. */
16529 field_addr.sub_location->number = i;
16530#endif /* FREECIV_JSON_CONNECTION */
16531
16532 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
16533 }
16534
16535#ifdef FREECIV_JSON_CONNECTION
16536 /* Exit array. */
16537 FC_FREE(field_addr.sub_location);
16538#endif /* FREECIV_JSON_CONNECTION */
16539 }
16540 if (e) {
16541 log_packet_detailed("'nation_citizens' field error detected");
16542 }
16543 }
16544
16545 *old = *real_packet;
16546#endif /* FREECIV_DELTA_PROTOCOL */
16547#ifndef FREECIV_DELTA_PROTOCOL
16548#ifdef FREECIV_JSON_CONNECTION
16549 field_addr.name = "id";
16550#endif /* FREECIV_JSON_CONNECTION */
16551 e = 0;
16552 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
16553 if (e) {
16554 log_packet_detailed("'id' field error detected");
16555 }
16556#ifdef FREECIV_JSON_CONNECTION
16557 field_addr.name = "nationalities_count";
16558#endif /* FREECIV_JSON_CONNECTION */
16559 e = 0;
16560 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
16561 if (e) {
16562 log_packet_detailed("'nationalities_count' field error detected");
16563 }
16564#ifdef FREECIV_JSON_CONNECTION
16565 field_addr.name = "nation_id";
16566#endif /* FREECIV_JSON_CONNECTION */
16567 e = 0;
16568 {
16569 int i;
16570
16571#ifdef FREECIV_JSON_CONNECTION
16572 /* Create the array. */
16573 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
16574
16575 /* Enter the array. */
16576 field_addr.sub_location = plocation_elem_new(0);
16577#endif /* FREECIV_JSON_CONNECTION */
16578
16579 for (i = 0; i < real_packet->nationalities_count; i++) {
16580#ifdef FREECIV_JSON_CONNECTION
16581 /* Next array element. */
16582 field_addr.sub_location->number = i;
16583#endif /* FREECIV_JSON_CONNECTION */
16584
16585 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_id[i]);
16586 }
16587
16588#ifdef FREECIV_JSON_CONNECTION
16589 /* Exit array. */
16590 FC_FREE(field_addr.sub_location);
16591#endif /* FREECIV_JSON_CONNECTION */
16592 }
16593 if (e) {
16594 log_packet_detailed("'nation_id' field error detected");
16595 }
16596#ifdef FREECIV_JSON_CONNECTION
16597 field_addr.name = "nation_citizens";
16598#endif /* FREECIV_JSON_CONNECTION */
16599 e = 0;
16600 {
16601 int i;
16602
16603#ifdef FREECIV_JSON_CONNECTION
16604 /* Create the array. */
16605 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
16606
16607 /* Enter the array. */
16608 field_addr.sub_location = plocation_elem_new(0);
16609#endif /* FREECIV_JSON_CONNECTION */
16610
16611 for (i = 0; i < real_packet->nationalities_count; i++) {
16612#ifdef FREECIV_JSON_CONNECTION
16613 /* Next array element. */
16614 field_addr.sub_location->number = i;
16615#endif /* FREECIV_JSON_CONNECTION */
16616
16617 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
16618 }
16619
16620#ifdef FREECIV_JSON_CONNECTION
16621 /* Exit array. */
16622 FC_FREE(field_addr.sub_location);
16623#endif /* FREECIV_JSON_CONNECTION */
16624 }
16625 if (e) {
16626 log_packet_detailed("'nation_citizens' field error detected");
16627 }
16628
16629#endif
16631}
16632
16633int send_packet_city_nationalities(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
16634{
16635 if (!pc->used) {
16636 log_error("WARNING: trying to send data to the closed connection %s",
16638 return -1;
16639 }
16640 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send != NULL, -1,
16641 "Handler for PACKET_CITY_NATIONALITIES not installed");
16642 return pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send(pc, packet, force_to_send);
16643}
16644
16645void lsend_packet_city_nationalities(struct conn_list *dest, const struct packet_city_nationalities *packet, bool force_to_send)
16646{
16647 conn_list_iterate(dest, pconn) {
16648 send_packet_city_nationalities(pconn, packet, force_to_send);
16650}
16651
16652#ifdef FREECIV_DELTA_PROTOCOL
16654{
16655 const struct packet_city_update_counters *key = (const struct packet_city_update_counters *) vkey;
16656 genhash_val_t result = 0;
16657
16658 result += key->city;
16659
16660 result &= 0xFFFFFFFF;
16661 return result;
16662}
16663
16664static bool cmp_packet_city_update_counters_100(const void *vkey1, const void *vkey2)
16665{
16666 const struct packet_city_update_counters *old = (const struct packet_city_update_counters *) vkey1;
16668 bool differ;
16669
16670 differ = (old->city != real_packet->city);
16671
16672 return !differ;
16673}
16675#endif /* FREECIV_DELTA_PROTOCOL */
16676
16678{
16679#ifdef FREECIV_DELTA_PROTOCOL
16681 struct packet_city_update_counters *old;
16682 struct genhash **hash = pc->phs.received + PACKET_CITY_UPDATE_COUNTERS;
16683#endif /* FREECIV_DELTA_PROTOCOL */
16685#ifdef FREECIV_JSON_CONNECTION
16686 struct plocation field_addr;
16687 {
16691 }
16692#endif /* FREECIV_JSON_CONNECTION */
16693
16694#ifdef FREECIV_DELTA_PROTOCOL
16695#ifdef FREECIV_JSON_CONNECTION
16696 field_addr.name = "fields";
16697#endif /* FREECIV_JSON_CONNECTION */
16698 DIO_BV_GET(&din, &field_addr, fields);
16699#ifdef FREECIV_JSON_CONNECTION
16700 field_addr.name = "city";
16701#endif /* FREECIV_JSON_CONNECTION */
16702 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
16704 }
16705
16706#else /* FREECIV_DELTA_PROTOCOL */
16707#ifdef FREECIV_JSON_CONNECTION
16708 field_addr.name = "city";
16709#endif /* FREECIV_JSON_CONNECTION */
16710 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
16712 }
16713#ifdef FREECIV_JSON_CONNECTION
16714 field_addr.name = "count";
16715#endif /* FREECIV_JSON_CONNECTION */
16716 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
16718 }
16719#ifdef FREECIV_JSON_CONNECTION
16720 field_addr.name = "counters";
16721#endif /* FREECIV_JSON_CONNECTION */
16722 if (real_packet->count > MAX_COUNTERS) {
16723 RECEIVE_PACKET_FIELD_ERROR(counters, ": truncation array");
16724 }
16725 {
16726 int i;
16727
16728#ifdef FREECIV_JSON_CONNECTION
16729 /* Enter array. */
16730 field_addr.sub_location = plocation_elem_new(0);
16731#endif /* FREECIV_JSON_CONNECTION */
16732
16733 for (i = 0; i < real_packet->count; i++) {
16734#ifdef FREECIV_JSON_CONNECTION
16735 field_addr.sub_location->number = i;
16736#endif /* FREECIV_JSON_CONNECTION */
16737
16738 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
16740 }
16741 }
16742
16743#ifdef FREECIV_JSON_CONNECTION
16744 /* Exit array. */
16745 FC_FREE(field_addr.sub_location);
16746#endif /* FREECIV_JSON_CONNECTION */
16747 }
16748#endif
16749 log_packet_detailed("packet_city_update_counters_100: got info about (%d)",
16750 real_packet->city);
16751
16752#ifdef FREECIV_DELTA_PROTOCOL
16753 if (NULL == *hash) {
16755 NULL, NULL, NULL, free);
16756 }
16757
16758 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
16759 *real_packet = *old;
16760 } else {
16761 int city;
16762
16763 city = real_packet->city;
16764
16765 log_packet_detailed(" no old info");
16766 memset(real_packet, 0, sizeof(*real_packet));
16767
16768 real_packet->city = city;
16769 }
16770
16771 if (BV_ISSET(fields, 0)) {
16772 log_packet_detailed(" got field 'count'");
16773#ifdef FREECIV_JSON_CONNECTION
16774 field_addr.name = "count";
16775#endif /* FREECIV_JSON_CONNECTION */
16776 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
16778 }
16779 }
16780 if (BV_ISSET(fields, 1)) {
16781 log_packet_detailed(" got field 'counters'");
16782#ifdef FREECIV_JSON_CONNECTION
16783 field_addr.name = "counters";
16784#endif /* FREECIV_JSON_CONNECTION */
16785 if (real_packet->count > MAX_COUNTERS) {
16786 RECEIVE_PACKET_FIELD_ERROR(counters, ": truncation array");
16787 }
16788 {
16789 int i;
16790
16791#ifdef FREECIV_JSON_CONNECTION
16792 /* Enter array. */
16793 field_addr.sub_location = plocation_elem_new(0);
16794#endif /* FREECIV_JSON_CONNECTION */
16795
16796 for (i = 0; i < real_packet->count; i++) {
16797#ifdef FREECIV_JSON_CONNECTION
16798 field_addr.sub_location->number = i;
16799#endif /* FREECIV_JSON_CONNECTION */
16800
16801 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
16803 }
16804 }
16805
16806#ifdef FREECIV_JSON_CONNECTION
16807 /* Exit array. */
16808 FC_FREE(field_addr.sub_location);
16809#endif /* FREECIV_JSON_CONNECTION */
16810 }
16811 }
16812
16813 if (NULL == old) {
16814 old = fc_malloc(sizeof(*old));
16815 *old = *real_packet;
16816 genhash_insert(*hash, old, old);
16817 } else {
16818 *old = *real_packet;
16819 }
16820
16821#endif /* FREECIV_DELTA_PROTOCOL */
16823}
16824
16826{
16827 const struct packet_city_update_counters *real_packet = packet;
16828 int e;
16829#ifdef FREECIV_DELTA_PROTOCOL
16831 struct packet_city_update_counters *old;
16832 bool differ;
16833 struct genhash **hash = pc->phs.sent + PACKET_CITY_UPDATE_COUNTERS;
16834 int different = 0;
16835#endif /* FREECIV_DELTA_PROTOCOL */
16837#ifdef FREECIV_JSON_CONNECTION
16838 struct plocation field_addr;
16839 {
16843 }
16844#endif /* FREECIV_JSON_CONNECTION */
16845
16846 log_packet_detailed("packet_city_update_counters_100: sending info about (%d)",
16847 real_packet->city);
16848
16849#ifdef FREECIV_DELTA_PROTOCOL
16850 if (NULL == *hash) {
16852 NULL, NULL, NULL, free);
16853 }
16854 BV_CLR_ALL(fields);
16855
16856 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
16857 old = fc_malloc(sizeof(*old));
16858 *old = *real_packet;
16859 genhash_insert(*hash, old, old);
16860 memset(old, 0, sizeof(*old));
16861 different = 1; /* Force to send. */
16862 }
16863 differ = (old->count != real_packet->count);
16864 if (differ) {
16865 different++;
16866 BV_SET(fields, 0);
16867 }
16868
16869 differ = (old->count != real_packet->count);
16870 if (!differ) {
16871 int i;
16872
16873 for (i = 0; i < real_packet->count; i++) {
16874 differ = (old->counters[i] != real_packet->counters[i]);
16875 if (differ) {
16876 break;
16877 }
16878 }
16879 }
16880 if (differ) {
16881 different++;
16882 BV_SET(fields, 1);
16883 }
16884
16885 if (different == 0) {
16886 log_packet_detailed(" no change -> discard");
16888 }
16889
16890#ifdef FREECIV_JSON_CONNECTION
16891 field_addr.name = "fields";
16892#endif /* FREECIV_JSON_CONNECTION */
16893 e = 0;
16894 e |= DIO_BV_PUT(&dout, &field_addr, fields);
16895 if (e) {
16896 log_packet_detailed("fields bitvector error detected");
16897 }
16898#ifdef FREECIV_JSON_CONNECTION
16899 field_addr.name = "city";
16900#endif /* FREECIV_JSON_CONNECTION */
16901 e = 0;
16902 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
16903 if (e) {
16904 log_packet_detailed("'city' field error detected");
16905 }
16906
16907 if (BV_ISSET(fields, 0)) {
16908 log_packet_detailed(" field 'count' has changed");
16909#ifdef FREECIV_JSON_CONNECTION
16910 field_addr.name = "count";
16911#endif /* FREECIV_JSON_CONNECTION */
16912 e = 0;
16913 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
16914 if (e) {
16915 log_packet_detailed("'count' field error detected");
16916 }
16917 }
16918 if (BV_ISSET(fields, 1)) {
16919 log_packet_detailed(" field 'counters' has changed");
16920#ifdef FREECIV_JSON_CONNECTION
16921 field_addr.name = "counters";
16922#endif /* FREECIV_JSON_CONNECTION */
16923 e = 0;
16924 {
16925 int i;
16926
16927#ifdef FREECIV_JSON_CONNECTION
16928 /* Create the array. */
16929 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
16930
16931 /* Enter the array. */
16932 field_addr.sub_location = plocation_elem_new(0);
16933#endif /* FREECIV_JSON_CONNECTION */
16934
16935 for (i = 0; i < real_packet->count; i++) {
16936#ifdef FREECIV_JSON_CONNECTION
16937 /* Next array element. */
16938 field_addr.sub_location->number = i;
16939#endif /* FREECIV_JSON_CONNECTION */
16940
16941 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
16942 }
16943
16944#ifdef FREECIV_JSON_CONNECTION
16945 /* Exit array. */
16946 FC_FREE(field_addr.sub_location);
16947#endif /* FREECIV_JSON_CONNECTION */
16948 }
16949 if (e) {
16950 log_packet_detailed("'counters' field error detected");
16951 }
16952 }
16953
16954 *old = *real_packet;
16955#endif /* FREECIV_DELTA_PROTOCOL */
16956#ifndef FREECIV_DELTA_PROTOCOL
16957#ifdef FREECIV_JSON_CONNECTION
16958 field_addr.name = "city";
16959#endif /* FREECIV_JSON_CONNECTION */
16960 e = 0;
16961 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
16962 if (e) {
16963 log_packet_detailed("'city' field error detected");
16964 }
16965#ifdef FREECIV_JSON_CONNECTION
16966 field_addr.name = "count";
16967#endif /* FREECIV_JSON_CONNECTION */
16968 e = 0;
16969 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
16970 if (e) {
16971 log_packet_detailed("'count' field error detected");
16972 }
16973#ifdef FREECIV_JSON_CONNECTION
16974 field_addr.name = "counters";
16975#endif /* FREECIV_JSON_CONNECTION */
16976 e = 0;
16977 {
16978 int i;
16979
16980#ifdef FREECIV_JSON_CONNECTION
16981 /* Create the array. */
16982 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
16983
16984 /* Enter the array. */
16985 field_addr.sub_location = plocation_elem_new(0);
16986#endif /* FREECIV_JSON_CONNECTION */
16987
16988 for (i = 0; i < real_packet->count; i++) {
16989#ifdef FREECIV_JSON_CONNECTION
16990 /* Next array element. */
16991 field_addr.sub_location->number = i;
16992#endif /* FREECIV_JSON_CONNECTION */
16993
16994 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
16995 }
16996
16997#ifdef FREECIV_JSON_CONNECTION
16998 /* Exit array. */
16999 FC_FREE(field_addr.sub_location);
17000#endif /* FREECIV_JSON_CONNECTION */
17001 }
17002 if (e) {
17003 log_packet_detailed("'counters' field error detected");
17004 }
17005
17006#endif
17008}
17009
17011{
17012 if (!pc->used) {
17013 log_error("WARNING: trying to send data to the closed connection %s",
17015 return -1;
17016 }
17017 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet != NULL, -1,
17018 "Handler for PACKET_CITY_UPDATE_COUNTERS not installed");
17019 return pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet(pc, packet);
17020}
17021
17023{
17024 conn_list_iterate(dest, pconn) {
17027}
17028
17029#ifdef FREECIV_DELTA_PROTOCOL
17031{
17032 const struct packet_city_short_info *key = (const struct packet_city_short_info *) vkey;
17033 genhash_val_t result = 0;
17034
17035 result += key->id;
17036
17037 result &= 0xFFFFFFFF;
17038 return result;
17039}
17040
17041static bool cmp_packet_city_short_info_100(const void *vkey1, const void *vkey2)
17042{
17043 const struct packet_city_short_info *old = (const struct packet_city_short_info *) vkey1;
17044 const struct packet_city_short_info *real_packet = (const struct packet_city_short_info *) vkey2;
17045 bool differ;
17046
17047 differ = (old->id != real_packet->id);
17048
17049 return !differ;
17050}
17052#endif /* FREECIV_DELTA_PROTOCOL */
17053
17055{
17056#ifdef FREECIV_DELTA_PROTOCOL
17058 struct packet_city_short_info *old;
17059 struct genhash **hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
17060#endif /* FREECIV_DELTA_PROTOCOL */
17062#ifdef FREECIV_JSON_CONNECTION
17063 struct plocation field_addr;
17064 {
17068 }
17069#endif /* FREECIV_JSON_CONNECTION */
17070
17071#ifdef FREECIV_DELTA_PROTOCOL
17072#ifdef FREECIV_JSON_CONNECTION
17073 field_addr.name = "fields";
17074#endif /* FREECIV_JSON_CONNECTION */
17075 DIO_BV_GET(&din, &field_addr, fields);
17076#ifdef FREECIV_JSON_CONNECTION
17077 field_addr.name = "id";
17078#endif /* FREECIV_JSON_CONNECTION */
17079 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
17081 }
17082
17083#else /* FREECIV_DELTA_PROTOCOL */
17084#ifdef FREECIV_JSON_CONNECTION
17085 field_addr.name = "id";
17086#endif /* FREECIV_JSON_CONNECTION */
17087 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
17089 }
17090#ifdef FREECIV_JSON_CONNECTION
17091 field_addr.name = "tile";
17092#endif /* FREECIV_JSON_CONNECTION */
17093 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
17095 }
17096#ifdef FREECIV_JSON_CONNECTION
17097 field_addr.name = "owner";
17098#endif /* FREECIV_JSON_CONNECTION */
17099 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
17101 }
17102#ifdef FREECIV_JSON_CONNECTION
17103 field_addr.name = "original";
17104#endif /* FREECIV_JSON_CONNECTION */
17105 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
17107 }
17108#ifdef FREECIV_JSON_CONNECTION
17109 field_addr.name = "size";
17110#endif /* FREECIV_JSON_CONNECTION */
17111 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
17113 }
17114#ifdef FREECIV_JSON_CONNECTION
17115 field_addr.name = "style";
17116#endif /* FREECIV_JSON_CONNECTION */
17117 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
17119 }
17120#ifdef FREECIV_JSON_CONNECTION
17121 field_addr.name = "capital";
17122#endif /* FREECIV_JSON_CONNECTION */
17123 {
17124 int readin;
17125
17126 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
17128 }
17129 real_packet->capital = readin;
17130 }
17131#ifdef FREECIV_JSON_CONNECTION
17132 field_addr.name = "occupied";
17133#endif /* FREECIV_JSON_CONNECTION */
17134 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
17136 }
17137#ifdef FREECIV_JSON_CONNECTION
17138 field_addr.name = "walls";
17139#endif /* FREECIV_JSON_CONNECTION */
17140 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
17142 }
17143#ifdef FREECIV_JSON_CONNECTION
17144 field_addr.name = "happy";
17145#endif /* FREECIV_JSON_CONNECTION */
17146 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->happy)) {
17148 }
17149#ifdef FREECIV_JSON_CONNECTION
17150 field_addr.name = "unhappy";
17151#endif /* FREECIV_JSON_CONNECTION */
17152 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unhappy)) {
17154 }
17155#ifdef FREECIV_JSON_CONNECTION
17156 field_addr.name = "city_image";
17157#endif /* FREECIV_JSON_CONNECTION */
17158 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
17159 RECEIVE_PACKET_FIELD_ERROR(city_image);
17160 }
17161#ifdef FREECIV_JSON_CONNECTION
17162 field_addr.name = "improvements";
17163#endif /* FREECIV_JSON_CONNECTION */
17164 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
17165 RECEIVE_PACKET_FIELD_ERROR(improvements);
17166 }
17167#ifdef FREECIV_JSON_CONNECTION
17168 field_addr.name = "name";
17169#endif /* FREECIV_JSON_CONNECTION */
17170 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
17172 }
17173#endif
17174 log_packet_detailed("packet_city_short_info_100: got info about (%d)",
17175 real_packet->id);
17176
17177#ifdef FREECIV_DELTA_PROTOCOL
17178 if (NULL == *hash) {
17180 NULL, NULL, NULL, free);
17181 }
17182
17183 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
17184 *real_packet = *old;
17185 } else {
17186 int id;
17187
17188 id = real_packet->id;
17189
17190 log_packet_detailed(" no old info");
17191 memset(real_packet, 0, sizeof(*real_packet));
17192
17193 real_packet->id = id;
17194 }
17195
17196 if (BV_ISSET(fields, 0)) {
17197 log_packet_detailed(" got field 'tile'");
17198#ifdef FREECIV_JSON_CONNECTION
17199 field_addr.name = "tile";
17200#endif /* FREECIV_JSON_CONNECTION */
17201 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
17203 }
17204 }
17205 if (BV_ISSET(fields, 1)) {
17206 log_packet_detailed(" got field 'owner'");
17207#ifdef FREECIV_JSON_CONNECTION
17208 field_addr.name = "owner";
17209#endif /* FREECIV_JSON_CONNECTION */
17210 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
17212 }
17213 }
17214 if (BV_ISSET(fields, 2)) {
17215 log_packet_detailed(" got field 'original'");
17216#ifdef FREECIV_JSON_CONNECTION
17217 field_addr.name = "original";
17218#endif /* FREECIV_JSON_CONNECTION */
17219 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
17221 }
17222 }
17223 if (BV_ISSET(fields, 3)) {
17224 log_packet_detailed(" got field 'size'");
17225#ifdef FREECIV_JSON_CONNECTION
17226 field_addr.name = "size";
17227#endif /* FREECIV_JSON_CONNECTION */
17228 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
17230 }
17231 }
17232 if (BV_ISSET(fields, 4)) {
17233 log_packet_detailed(" got field 'style'");
17234#ifdef FREECIV_JSON_CONNECTION
17235 field_addr.name = "style";
17236#endif /* FREECIV_JSON_CONNECTION */
17237 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
17239 }
17240 }
17241 if (BV_ISSET(fields, 5)) {
17242 log_packet_detailed(" got field 'capital'");
17243#ifdef FREECIV_JSON_CONNECTION
17244 field_addr.name = "capital";
17245#endif /* FREECIV_JSON_CONNECTION */
17246 {
17247 int readin;
17248
17249 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
17251 }
17252 real_packet->capital = readin;
17253 }
17254 }
17255 real_packet->occupied = BV_ISSET(fields, 6);
17256 if (BV_ISSET(fields, 7)) {
17257 log_packet_detailed(" got field 'walls'");
17258#ifdef FREECIV_JSON_CONNECTION
17259 field_addr.name = "walls";
17260#endif /* FREECIV_JSON_CONNECTION */
17261 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
17263 }
17264 }
17265 real_packet->happy = BV_ISSET(fields, 8);
17266 real_packet->unhappy = BV_ISSET(fields, 9);
17267 if (BV_ISSET(fields, 10)) {
17268 log_packet_detailed(" got field 'city_image'");
17269#ifdef FREECIV_JSON_CONNECTION
17270 field_addr.name = "city_image";
17271#endif /* FREECIV_JSON_CONNECTION */
17272 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
17273 RECEIVE_PACKET_FIELD_ERROR(city_image);
17274 }
17275 }
17276 if (BV_ISSET(fields, 11)) {
17277 log_packet_detailed(" got field 'improvements'");
17278#ifdef FREECIV_JSON_CONNECTION
17279 field_addr.name = "improvements";
17280#endif /* FREECIV_JSON_CONNECTION */
17281 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
17282 RECEIVE_PACKET_FIELD_ERROR(improvements);
17283 }
17284 }
17285 if (BV_ISSET(fields, 12)) {
17286 log_packet_detailed(" got field 'name'");
17287#ifdef FREECIV_JSON_CONNECTION
17288 field_addr.name = "name";
17289#endif /* FREECIV_JSON_CONNECTION */
17290 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
17292 }
17293 }
17294
17295 if (NULL == old) {
17296 old = fc_malloc(sizeof(*old));
17297 *old = *real_packet;
17298 genhash_insert(*hash, old, old);
17299 } else {
17300 *old = *real_packet;
17301 }
17302
17303 hash = pc->phs.received + PACKET_CITY_INFO;
17304 if (NULL != *hash) {
17306 }
17307
17308 hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
17309 if (NULL != *hash) {
17311 }
17312
17313 hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
17314 if (NULL != *hash) {
17316 }
17317
17318 hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
17319 if (NULL != *hash) {
17321 }
17322
17323#endif /* FREECIV_DELTA_PROTOCOL */
17325}
17326
17328{
17329 const struct packet_city_short_info *real_packet = packet;
17330 int e;
17331#ifdef FREECIV_DELTA_PROTOCOL
17333 struct packet_city_short_info *old;
17334 bool differ;
17335 struct genhash **hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
17336 int different = 0;
17337#endif /* FREECIV_DELTA_PROTOCOL */
17339#ifdef FREECIV_JSON_CONNECTION
17340 struct plocation field_addr;
17341 {
17345 }
17346#endif /* FREECIV_JSON_CONNECTION */
17347
17348 log_packet_detailed("packet_city_short_info_100: sending info about (%d)",
17349 real_packet->id);
17350
17351#ifdef FREECIV_DELTA_PROTOCOL
17352 if (NULL == *hash) {
17354 NULL, NULL, NULL, free);
17355 }
17356 BV_CLR_ALL(fields);
17357
17358 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
17359 old = fc_malloc(sizeof(*old));
17360 *old = *real_packet;
17361 genhash_insert(*hash, old, old);
17362 memset(old, 0, sizeof(*old));
17363 different = 1; /* Force to send. */
17364 }
17365 differ = (old->tile != real_packet->tile);
17366 if (differ) {
17367 different++;
17368 BV_SET(fields, 0);
17369 }
17370
17371 differ = (old->owner != real_packet->owner);
17372 if (differ) {
17373 different++;
17374 BV_SET(fields, 1);
17375 }
17376
17377 differ = (old->original != real_packet->original);
17378 if (differ) {
17379 different++;
17380 BV_SET(fields, 2);
17381 }
17382
17383 differ = (old->size != real_packet->size);
17384 if (differ) {
17385 different++;
17386 BV_SET(fields, 3);
17387 }
17388
17389 differ = (old->style != real_packet->style);
17390 if (differ) {
17391 different++;
17392 BV_SET(fields, 4);
17393 }
17394
17395 differ = (old->capital != real_packet->capital);
17396 if (differ) {
17397 different++;
17398 BV_SET(fields, 5);
17399 }
17400
17401 differ = (old->occupied != real_packet->occupied);
17402 if (differ) {
17403 different++;
17404 }
17405 if (packet->occupied) {
17406 BV_SET(fields, 6);
17407 }
17408
17409 differ = (old->walls != real_packet->walls);
17410 if (differ) {
17411 different++;
17412 BV_SET(fields, 7);
17413 }
17414
17415 differ = (old->happy != real_packet->happy);
17416 if (differ) {
17417 different++;
17418 }
17419 if (packet->happy) {
17420 BV_SET(fields, 8);
17421 }
17422
17423 differ = (old->unhappy != real_packet->unhappy);
17424 if (differ) {
17425 different++;
17426 }
17427 if (packet->unhappy) {
17428 BV_SET(fields, 9);
17429 }
17430
17431 differ = (old->city_image != real_packet->city_image);
17432 if (differ) {
17433 different++;
17434 BV_SET(fields, 10);
17435 }
17436
17437 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
17438 if (differ) {
17439 different++;
17440 BV_SET(fields, 11);
17441 }
17442
17443 differ = (strcmp(old->name, real_packet->name) != 0);
17444 if (differ) {
17445 different++;
17446 BV_SET(fields, 12);
17447 }
17448
17449 if (different == 0) {
17450 log_packet_detailed(" no change -> discard");
17452 }
17453
17454#ifdef FREECIV_JSON_CONNECTION
17455 field_addr.name = "fields";
17456#endif /* FREECIV_JSON_CONNECTION */
17457 e = 0;
17458 e |= DIO_BV_PUT(&dout, &field_addr, fields);
17459 if (e) {
17460 log_packet_detailed("fields bitvector error detected");
17461 }
17462#ifdef FREECIV_JSON_CONNECTION
17463 field_addr.name = "id";
17464#endif /* FREECIV_JSON_CONNECTION */
17465 e = 0;
17466 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
17467 if (e) {
17468 log_packet_detailed("'id' field error detected");
17469 }
17470
17471 if (BV_ISSET(fields, 0)) {
17472 log_packet_detailed(" field 'tile' has changed");
17473#ifdef FREECIV_JSON_CONNECTION
17474 field_addr.name = "tile";
17475#endif /* FREECIV_JSON_CONNECTION */
17476 e = 0;
17477 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
17478 if (e) {
17479 log_packet_detailed("'tile' field error detected");
17480 }
17481 }
17482 if (BV_ISSET(fields, 1)) {
17483 log_packet_detailed(" field 'owner' has changed");
17484#ifdef FREECIV_JSON_CONNECTION
17485 field_addr.name = "owner";
17486#endif /* FREECIV_JSON_CONNECTION */
17487 e = 0;
17488 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
17489 if (e) {
17490 log_packet_detailed("'owner' field error detected");
17491 }
17492 }
17493 if (BV_ISSET(fields, 2)) {
17494 log_packet_detailed(" field 'original' has changed");
17495#ifdef FREECIV_JSON_CONNECTION
17496 field_addr.name = "original";
17497#endif /* FREECIV_JSON_CONNECTION */
17498 e = 0;
17499 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
17500 if (e) {
17501 log_packet_detailed("'original' field error detected");
17502 }
17503 }
17504 if (BV_ISSET(fields, 3)) {
17505 log_packet_detailed(" field 'size' has changed");
17506#ifdef FREECIV_JSON_CONNECTION
17507 field_addr.name = "size";
17508#endif /* FREECIV_JSON_CONNECTION */
17509 e = 0;
17510 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
17511 if (e) {
17512 log_packet_detailed("'size' field error detected");
17513 }
17514 }
17515 if (BV_ISSET(fields, 4)) {
17516 log_packet_detailed(" field 'style' has changed");
17517#ifdef FREECIV_JSON_CONNECTION
17518 field_addr.name = "style";
17519#endif /* FREECIV_JSON_CONNECTION */
17520 e = 0;
17521 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
17522 if (e) {
17523 log_packet_detailed("'style' field error detected");
17524 }
17525 }
17526 if (BV_ISSET(fields, 5)) {
17527 log_packet_detailed(" field 'capital' has changed");
17528#ifdef FREECIV_JSON_CONNECTION
17529 field_addr.name = "capital";
17530#endif /* FREECIV_JSON_CONNECTION */
17531 e = 0;
17532 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
17533 if (e) {
17534 log_packet_detailed("'capital' field error detected");
17535 }
17536 }
17537 /* field 6 is folded into the header */
17538 if (BV_ISSET(fields, 7)) {
17539 log_packet_detailed(" field 'walls' has changed");
17540#ifdef FREECIV_JSON_CONNECTION
17541 field_addr.name = "walls";
17542#endif /* FREECIV_JSON_CONNECTION */
17543 e = 0;
17544 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
17545 if (e) {
17546 log_packet_detailed("'walls' field error detected");
17547 }
17548 }
17549 /* field 8 is folded into the header */
17550 /* field 9 is folded into the header */
17551 if (BV_ISSET(fields, 10)) {
17552 log_packet_detailed(" field 'city_image' has changed");
17553#ifdef FREECIV_JSON_CONNECTION
17554 field_addr.name = "city_image";
17555#endif /* FREECIV_JSON_CONNECTION */
17556 e = 0;
17557 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
17558 if (e) {
17559 log_packet_detailed("'city_image' field error detected");
17560 }
17561 }
17562 if (BV_ISSET(fields, 11)) {
17563 log_packet_detailed(" field 'improvements' has changed");
17564#ifdef FREECIV_JSON_CONNECTION
17565 field_addr.name = "improvements";
17566#endif /* FREECIV_JSON_CONNECTION */
17567 e = 0;
17568 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
17569 if (e) {
17570 log_packet_detailed("'improvements' field error detected");
17571 }
17572 }
17573 if (BV_ISSET(fields, 12)) {
17574 log_packet_detailed(" field 'name' has changed");
17575#ifdef FREECIV_JSON_CONNECTION
17576 field_addr.name = "name";
17577#endif /* FREECIV_JSON_CONNECTION */
17578 e = 0;
17579 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
17580 if (e) {
17581 log_packet_detailed("'name' field error detected");
17582 }
17583 }
17584
17585 *old = *real_packet;
17586
17587 hash = pc->phs.sent + PACKET_CITY_INFO;
17588 if (NULL != *hash) {
17590 }
17591
17593 if (NULL != *hash) {
17595 }
17596
17597 hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
17598 if (NULL != *hash) {
17600 }
17601
17602 hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
17603 if (NULL != *hash) {
17605 }
17606#endif /* FREECIV_DELTA_PROTOCOL */
17607#ifndef FREECIV_DELTA_PROTOCOL
17608#ifdef FREECIV_JSON_CONNECTION
17609 field_addr.name = "id";
17610#endif /* FREECIV_JSON_CONNECTION */
17611 e = 0;
17612 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
17613 if (e) {
17614 log_packet_detailed("'id' field error detected");
17615 }
17616#ifdef FREECIV_JSON_CONNECTION
17617 field_addr.name = "tile";
17618#endif /* FREECIV_JSON_CONNECTION */
17619 e = 0;
17620 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
17621 if (e) {
17622 log_packet_detailed("'tile' field error detected");
17623 }
17624#ifdef FREECIV_JSON_CONNECTION
17625 field_addr.name = "owner";
17626#endif /* FREECIV_JSON_CONNECTION */
17627 e = 0;
17628 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
17629 if (e) {
17630 log_packet_detailed("'owner' field error detected");
17631 }
17632#ifdef FREECIV_JSON_CONNECTION
17633 field_addr.name = "original";
17634#endif /* FREECIV_JSON_CONNECTION */
17635 e = 0;
17636 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
17637 if (e) {
17638 log_packet_detailed("'original' field error detected");
17639 }
17640#ifdef FREECIV_JSON_CONNECTION
17641 field_addr.name = "size";
17642#endif /* FREECIV_JSON_CONNECTION */
17643 e = 0;
17644 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
17645 if (e) {
17646 log_packet_detailed("'size' field error detected");
17647 }
17648#ifdef FREECIV_JSON_CONNECTION
17649 field_addr.name = "style";
17650#endif /* FREECIV_JSON_CONNECTION */
17651 e = 0;
17652 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
17653 if (e) {
17654 log_packet_detailed("'style' field error detected");
17655 }
17656#ifdef FREECIV_JSON_CONNECTION
17657 field_addr.name = "capital";
17658#endif /* FREECIV_JSON_CONNECTION */
17659 e = 0;
17660 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
17661 if (e) {
17662 log_packet_detailed("'capital' field error detected");
17663 }
17664#ifdef FREECIV_JSON_CONNECTION
17665 field_addr.name = "occupied";
17666#endif /* FREECIV_JSON_CONNECTION */
17667 e = 0;
17668 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
17669 if (e) {
17670 log_packet_detailed("'occupied' field error detected");
17671 }
17672#ifdef FREECIV_JSON_CONNECTION
17673 field_addr.name = "walls";
17674#endif /* FREECIV_JSON_CONNECTION */
17675 e = 0;
17676 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
17677 if (e) {
17678 log_packet_detailed("'walls' field error detected");
17679 }
17680#ifdef FREECIV_JSON_CONNECTION
17681 field_addr.name = "happy";
17682#endif /* FREECIV_JSON_CONNECTION */
17683 e = 0;
17684 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->happy);
17685 if (e) {
17686 log_packet_detailed("'happy' field error detected");
17687 }
17688#ifdef FREECIV_JSON_CONNECTION
17689 field_addr.name = "unhappy";
17690#endif /* FREECIV_JSON_CONNECTION */
17691 e = 0;
17692 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unhappy);
17693 if (e) {
17694 log_packet_detailed("'unhappy' field error detected");
17695 }
17696#ifdef FREECIV_JSON_CONNECTION
17697 field_addr.name = "city_image";
17698#endif /* FREECIV_JSON_CONNECTION */
17699 e = 0;
17700 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
17701 if (e) {
17702 log_packet_detailed("'city_image' field error detected");
17703 }
17704#ifdef FREECIV_JSON_CONNECTION
17705 field_addr.name = "improvements";
17706#endif /* FREECIV_JSON_CONNECTION */
17707 e = 0;
17708 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
17709 if (e) {
17710 log_packet_detailed("'improvements' field error detected");
17711 }
17712#ifdef FREECIV_JSON_CONNECTION
17713 field_addr.name = "name";
17714#endif /* FREECIV_JSON_CONNECTION */
17715 e = 0;
17716 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
17717 if (e) {
17718 log_packet_detailed("'name' field error detected");
17719 }
17720
17721#endif
17723}
17724
17726{
17727 if (!pc->used) {
17728 log_error("WARNING: trying to send data to the closed connection %s",
17730 return -1;
17731 }
17732 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet != NULL, -1,
17733 "Handler for PACKET_CITY_SHORT_INFO not installed");
17734 return pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet(pc, packet);
17735}
17736
17737void lsend_packet_city_short_info(struct conn_list *dest, const struct packet_city_short_info *packet)
17738{
17739 conn_list_iterate(dest, pconn) {
17742}
17743
17744#ifdef FREECIV_DELTA_PROTOCOL
17745#define hash_packet_trade_route_info_100 hash_const
17746
17747#define cmp_packet_trade_route_info_100 cmp_const
17748
17750#endif /* FREECIV_DELTA_PROTOCOL */
17751
17753{
17754#ifdef FREECIV_DELTA_PROTOCOL
17756 struct packet_trade_route_info *old;
17757 struct genhash **hash = pc->phs.received + PACKET_TRADE_ROUTE_INFO;
17758#endif /* FREECIV_DELTA_PROTOCOL */
17760#ifdef FREECIV_JSON_CONNECTION
17761 struct plocation field_addr;
17762 {
17766 }
17767#endif /* FREECIV_JSON_CONNECTION */
17768
17769#ifdef FREECIV_DELTA_PROTOCOL
17770#ifdef FREECIV_JSON_CONNECTION
17771 field_addr.name = "fields";
17772#endif /* FREECIV_JSON_CONNECTION */
17773 DIO_BV_GET(&din, &field_addr, fields);
17774
17775#else /* FREECIV_DELTA_PROTOCOL */
17776#ifdef FREECIV_JSON_CONNECTION
17777 field_addr.name = "city";
17778#endif /* FREECIV_JSON_CONNECTION */
17779 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
17781 }
17782#ifdef FREECIV_JSON_CONNECTION
17783 field_addr.name = "index";
17784#endif /* FREECIV_JSON_CONNECTION */
17785 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
17787 }
17788#ifdef FREECIV_JSON_CONNECTION
17789 field_addr.name = "partner";
17790#endif /* FREECIV_JSON_CONNECTION */
17791 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
17793 }
17794#ifdef FREECIV_JSON_CONNECTION
17795 field_addr.name = "value";
17796#endif /* FREECIV_JSON_CONNECTION */
17797 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
17799 }
17800#ifdef FREECIV_JSON_CONNECTION
17801 field_addr.name = "direction";
17802#endif /* FREECIV_JSON_CONNECTION */
17803 {
17804 int readin;
17805
17806 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
17807 RECEIVE_PACKET_FIELD_ERROR(direction);
17808 }
17809 real_packet->direction = readin;
17810 }
17811#ifdef FREECIV_JSON_CONNECTION
17812 field_addr.name = "goods";
17813#endif /* FREECIV_JSON_CONNECTION */
17814 {
17815 int readin;
17816
17817 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
17819 }
17820 real_packet->goods = readin;
17821 }
17822#endif
17823 log_packet_detailed("packet_trade_route_info_100: got info about ()");
17824
17825#ifdef FREECIV_DELTA_PROTOCOL
17826 if (NULL == *hash) {
17828 NULL, NULL, NULL, free);
17829 }
17830
17831 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
17832 *real_packet = *old;
17833 } else {
17834 log_packet_detailed(" no old info");
17835 memset(real_packet, 0, sizeof(*real_packet));
17836 }
17837
17838 if (BV_ISSET(fields, 0)) {
17839 log_packet_detailed(" got field 'city'");
17840#ifdef FREECIV_JSON_CONNECTION
17841 field_addr.name = "city";
17842#endif /* FREECIV_JSON_CONNECTION */
17843 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
17845 }
17846 }
17847 if (BV_ISSET(fields, 1)) {
17848 log_packet_detailed(" got field 'index'");
17849#ifdef FREECIV_JSON_CONNECTION
17850 field_addr.name = "index";
17851#endif /* FREECIV_JSON_CONNECTION */
17852 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
17854 }
17855 }
17856 if (BV_ISSET(fields, 2)) {
17857 log_packet_detailed(" got field 'partner'");
17858#ifdef FREECIV_JSON_CONNECTION
17859 field_addr.name = "partner";
17860#endif /* FREECIV_JSON_CONNECTION */
17861 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
17863 }
17864 }
17865 if (BV_ISSET(fields, 3)) {
17866 log_packet_detailed(" got field 'value'");
17867#ifdef FREECIV_JSON_CONNECTION
17868 field_addr.name = "value";
17869#endif /* FREECIV_JSON_CONNECTION */
17870 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
17872 }
17873 }
17874 if (BV_ISSET(fields, 4)) {
17875 log_packet_detailed(" got field 'direction'");
17876#ifdef FREECIV_JSON_CONNECTION
17877 field_addr.name = "direction";
17878#endif /* FREECIV_JSON_CONNECTION */
17879 {
17880 int readin;
17881
17882 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
17883 RECEIVE_PACKET_FIELD_ERROR(direction);
17884 }
17885 real_packet->direction = readin;
17886 }
17887 }
17888 if (BV_ISSET(fields, 5)) {
17889 log_packet_detailed(" got field 'goods'");
17890#ifdef FREECIV_JSON_CONNECTION
17891 field_addr.name = "goods";
17892#endif /* FREECIV_JSON_CONNECTION */
17893 {
17894 int readin;
17895
17896 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
17898 }
17899 real_packet->goods = readin;
17900 }
17901 }
17902
17903 if (NULL == old) {
17904 old = fc_malloc(sizeof(*old));
17905 *old = *real_packet;
17906 genhash_insert(*hash, old, old);
17907 } else {
17908 *old = *real_packet;
17909 }
17910
17911#endif /* FREECIV_DELTA_PROTOCOL */
17913}
17914
17916{
17917 const struct packet_trade_route_info *real_packet = packet;
17918 int e;
17919#ifdef FREECIV_DELTA_PROTOCOL
17921 struct packet_trade_route_info *old;
17922 bool differ;
17923 struct genhash **hash = pc->phs.sent + PACKET_TRADE_ROUTE_INFO;
17924#endif /* FREECIV_DELTA_PROTOCOL */
17926#ifdef FREECIV_JSON_CONNECTION
17927 struct plocation field_addr;
17928 {
17932 }
17933#endif /* FREECIV_JSON_CONNECTION */
17934
17935 log_packet_detailed("packet_trade_route_info_100: sending info about ()");
17936
17937#ifdef FREECIV_DELTA_PROTOCOL
17938 if (NULL == *hash) {
17940 NULL, NULL, NULL, free);
17941 }
17942 BV_CLR_ALL(fields);
17943
17944 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
17945 old = fc_malloc(sizeof(*old));
17946 *old = *real_packet;
17947 genhash_insert(*hash, old, old);
17948 memset(old, 0, sizeof(*old));
17949 }
17950 differ = (old->city != real_packet->city);
17951 if (differ) {
17952 BV_SET(fields, 0);
17953 }
17954
17955 differ = (old->index != real_packet->index);
17956 if (differ) {
17957 BV_SET(fields, 1);
17958 }
17959
17960 differ = (old->partner != real_packet->partner);
17961 if (differ) {
17962 BV_SET(fields, 2);
17963 }
17964
17965 differ = (old->value != real_packet->value);
17966 if (differ) {
17967 BV_SET(fields, 3);
17968 }
17969
17970 differ = (old->direction != real_packet->direction);
17971 if (differ) {
17972 BV_SET(fields, 4);
17973 }
17974
17975 differ = (old->goods != real_packet->goods);
17976 if (differ) {
17977 BV_SET(fields, 5);
17978 }
17979
17980
17981#ifdef FREECIV_JSON_CONNECTION
17982 field_addr.name = "fields";
17983#endif /* FREECIV_JSON_CONNECTION */
17984 e = 0;
17985 e |= DIO_BV_PUT(&dout, &field_addr, fields);
17986 if (e) {
17987 log_packet_detailed("fields bitvector error detected");
17988 }
17989
17990 if (BV_ISSET(fields, 0)) {
17991 log_packet_detailed(" field 'city' has changed");
17992#ifdef FREECIV_JSON_CONNECTION
17993 field_addr.name = "city";
17994#endif /* FREECIV_JSON_CONNECTION */
17995 e = 0;
17996 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
17997 if (e) {
17998 log_packet_detailed("'city' field error detected");
17999 }
18000 }
18001 if (BV_ISSET(fields, 1)) {
18002 log_packet_detailed(" field 'index' has changed");
18003#ifdef FREECIV_JSON_CONNECTION
18004 field_addr.name = "index";
18005#endif /* FREECIV_JSON_CONNECTION */
18006 e = 0;
18007 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
18008 if (e) {
18009 log_packet_detailed("'index' field error detected");
18010 }
18011 }
18012 if (BV_ISSET(fields, 2)) {
18013 log_packet_detailed(" field 'partner' has changed");
18014#ifdef FREECIV_JSON_CONNECTION
18015 field_addr.name = "partner";
18016#endif /* FREECIV_JSON_CONNECTION */
18017 e = 0;
18018 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
18019 if (e) {
18020 log_packet_detailed("'partner' field error detected");
18021 }
18022 }
18023 if (BV_ISSET(fields, 3)) {
18024 log_packet_detailed(" field 'value' has changed");
18025#ifdef FREECIV_JSON_CONNECTION
18026 field_addr.name = "value";
18027#endif /* FREECIV_JSON_CONNECTION */
18028 e = 0;
18029 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
18030 if (e) {
18031 log_packet_detailed("'value' field error detected");
18032 }
18033 }
18034 if (BV_ISSET(fields, 4)) {
18035 log_packet_detailed(" field 'direction' has changed");
18036#ifdef FREECIV_JSON_CONNECTION
18037 field_addr.name = "direction";
18038#endif /* FREECIV_JSON_CONNECTION */
18039 e = 0;
18040 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
18041 if (e) {
18042 log_packet_detailed("'direction' field error detected");
18043 }
18044 }
18045 if (BV_ISSET(fields, 5)) {
18046 log_packet_detailed(" field 'goods' has changed");
18047#ifdef FREECIV_JSON_CONNECTION
18048 field_addr.name = "goods";
18049#endif /* FREECIV_JSON_CONNECTION */
18050 e = 0;
18051 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
18052 if (e) {
18053 log_packet_detailed("'goods' field error detected");
18054 }
18055 }
18056
18057 *old = *real_packet;
18058#endif /* FREECIV_DELTA_PROTOCOL */
18059#ifndef FREECIV_DELTA_PROTOCOL
18060#ifdef FREECIV_JSON_CONNECTION
18061 field_addr.name = "city";
18062#endif /* FREECIV_JSON_CONNECTION */
18063 e = 0;
18064 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
18065 if (e) {
18066 log_packet_detailed("'city' field error detected");
18067 }
18068#ifdef FREECIV_JSON_CONNECTION
18069 field_addr.name = "index";
18070#endif /* FREECIV_JSON_CONNECTION */
18071 e = 0;
18072 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
18073 if (e) {
18074 log_packet_detailed("'index' field error detected");
18075 }
18076#ifdef FREECIV_JSON_CONNECTION
18077 field_addr.name = "partner";
18078#endif /* FREECIV_JSON_CONNECTION */
18079 e = 0;
18080 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
18081 if (e) {
18082 log_packet_detailed("'partner' field error detected");
18083 }
18084#ifdef FREECIV_JSON_CONNECTION
18085 field_addr.name = "value";
18086#endif /* FREECIV_JSON_CONNECTION */
18087 e = 0;
18088 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
18089 if (e) {
18090 log_packet_detailed("'value' field error detected");
18091 }
18092#ifdef FREECIV_JSON_CONNECTION
18093 field_addr.name = "direction";
18094#endif /* FREECIV_JSON_CONNECTION */
18095 e = 0;
18096 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
18097 if (e) {
18098 log_packet_detailed("'direction' field error detected");
18099 }
18100#ifdef FREECIV_JSON_CONNECTION
18101 field_addr.name = "goods";
18102#endif /* FREECIV_JSON_CONNECTION */
18103 e = 0;
18104 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
18105 if (e) {
18106 log_packet_detailed("'goods' field error detected");
18107 }
18108
18109#endif
18111}
18112
18114{
18115 if (!pc->used) {
18116 log_error("WARNING: trying to send data to the closed connection %s",
18118 return -1;
18119 }
18120 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet != NULL, -1,
18121 "Handler for PACKET_TRADE_ROUTE_INFO not installed");
18122 return pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet(pc, packet);
18123}
18124
18126{
18127 conn_list_iterate(dest, pconn) {
18130}
18131
18132#ifdef FREECIV_DELTA_PROTOCOL
18133#define hash_packet_city_sell_100 hash_const
18134
18135#define cmp_packet_city_sell_100 cmp_const
18136
18138#endif /* FREECIV_DELTA_PROTOCOL */
18139
18141{
18142#ifdef FREECIV_DELTA_PROTOCOL
18144 struct packet_city_sell *old;
18145 struct genhash **hash = pc->phs.received + PACKET_CITY_SELL;
18146#endif /* FREECIV_DELTA_PROTOCOL */
18148#ifdef FREECIV_JSON_CONNECTION
18149 struct plocation field_addr;
18150 {
18154 }
18155#endif /* FREECIV_JSON_CONNECTION */
18156
18157#ifdef FREECIV_DELTA_PROTOCOL
18158#ifdef FREECIV_JSON_CONNECTION
18159 field_addr.name = "fields";
18160#endif /* FREECIV_JSON_CONNECTION */
18161 DIO_BV_GET(&din, &field_addr, fields);
18162
18163#else /* FREECIV_DELTA_PROTOCOL */
18164#ifdef FREECIV_JSON_CONNECTION
18165 field_addr.name = "city_id";
18166#endif /* FREECIV_JSON_CONNECTION */
18167 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
18169 }
18170#ifdef FREECIV_JSON_CONNECTION
18171 field_addr.name = "build_id";
18172#endif /* FREECIV_JSON_CONNECTION */
18173 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
18175 }
18176#endif
18177 log_packet_detailed("packet_city_sell_100: got info about ()");
18178
18179#ifdef FREECIV_DELTA_PROTOCOL
18180 if (NULL == *hash) {
18182 NULL, NULL, NULL, free);
18183 }
18184
18185 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
18186 *real_packet = *old;
18187 } else {
18188 log_packet_detailed(" no old info");
18189 memset(real_packet, 0, sizeof(*real_packet));
18190 }
18191
18192 if (BV_ISSET(fields, 0)) {
18193 log_packet_detailed(" got field 'city_id'");
18194#ifdef FREECIV_JSON_CONNECTION
18195 field_addr.name = "city_id";
18196#endif /* FREECIV_JSON_CONNECTION */
18197 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
18199 }
18200 }
18201 if (BV_ISSET(fields, 1)) {
18202 log_packet_detailed(" got field 'build_id'");
18203#ifdef FREECIV_JSON_CONNECTION
18204 field_addr.name = "build_id";
18205#endif /* FREECIV_JSON_CONNECTION */
18206 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
18208 }
18209 }
18210
18211 if (NULL == old) {
18212 old = fc_malloc(sizeof(*old));
18213 *old = *real_packet;
18214 genhash_insert(*hash, old, old);
18215 } else {
18216 *old = *real_packet;
18217 }
18218
18219#endif /* FREECIV_DELTA_PROTOCOL */
18221}
18222
18223static int send_packet_city_sell_100(struct connection *pc, const struct packet_city_sell *packet)
18224{
18225 const struct packet_city_sell *real_packet = packet;
18226 int e;
18227#ifdef FREECIV_DELTA_PROTOCOL
18229 struct packet_city_sell *old;
18230 bool differ;
18231 struct genhash **hash = pc->phs.sent + PACKET_CITY_SELL;
18232#endif /* FREECIV_DELTA_PROTOCOL */
18234#ifdef FREECIV_JSON_CONNECTION
18235 struct plocation field_addr;
18236 {
18240 }
18241#endif /* FREECIV_JSON_CONNECTION */
18242
18243 log_packet_detailed("packet_city_sell_100: sending info about ()");
18244
18245#ifdef FREECIV_DELTA_PROTOCOL
18246 if (NULL == *hash) {
18248 NULL, NULL, NULL, free);
18249 }
18250 BV_CLR_ALL(fields);
18251
18252 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
18253 old = fc_malloc(sizeof(*old));
18254 *old = *real_packet;
18255 genhash_insert(*hash, old, old);
18256 memset(old, 0, sizeof(*old));
18257 }
18258 differ = (old->city_id != real_packet->city_id);
18259 if (differ) {
18260 BV_SET(fields, 0);
18261 }
18262
18263 differ = (old->build_id != real_packet->build_id);
18264 if (differ) {
18265 BV_SET(fields, 1);
18266 }
18267
18268
18269#ifdef FREECIV_JSON_CONNECTION
18270 field_addr.name = "fields";
18271#endif /* FREECIV_JSON_CONNECTION */
18272 e = 0;
18273 e |= DIO_BV_PUT(&dout, &field_addr, fields);
18274 if (e) {
18275 log_packet_detailed("fields bitvector error detected");
18276 }
18277
18278 if (BV_ISSET(fields, 0)) {
18279 log_packet_detailed(" field 'city_id' has changed");
18280#ifdef FREECIV_JSON_CONNECTION
18281 field_addr.name = "city_id";
18282#endif /* FREECIV_JSON_CONNECTION */
18283 e = 0;
18284 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
18285 if (e) {
18286 log_packet_detailed("'city_id' field error detected");
18287 }
18288 }
18289 if (BV_ISSET(fields, 1)) {
18290 log_packet_detailed(" field 'build_id' has changed");
18291#ifdef FREECIV_JSON_CONNECTION
18292 field_addr.name = "build_id";
18293#endif /* FREECIV_JSON_CONNECTION */
18294 e = 0;
18295 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
18296 if (e) {
18297 log_packet_detailed("'build_id' field error detected");
18298 }
18299 }
18300
18301 *old = *real_packet;
18302#endif /* FREECIV_DELTA_PROTOCOL */
18303#ifndef FREECIV_DELTA_PROTOCOL
18304#ifdef FREECIV_JSON_CONNECTION
18305 field_addr.name = "city_id";
18306#endif /* FREECIV_JSON_CONNECTION */
18307 e = 0;
18308 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
18309 if (e) {
18310 log_packet_detailed("'city_id' field error detected");
18311 }
18312#ifdef FREECIV_JSON_CONNECTION
18313 field_addr.name = "build_id";
18314#endif /* FREECIV_JSON_CONNECTION */
18315 e = 0;
18316 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
18317 if (e) {
18318 log_packet_detailed("'build_id' field error detected");
18319 }
18320
18321#endif
18323}
18324
18325int send_packet_city_sell(struct connection *pc, const struct packet_city_sell *packet)
18326{
18327 if (!pc->used) {
18328 log_error("WARNING: trying to send data to the closed connection %s",
18330 return -1;
18331 }
18332 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SELL].packet != NULL, -1,
18333 "Handler for PACKET_CITY_SELL not installed");
18334 return pc->phs.handlers->send[PACKET_CITY_SELL].packet(pc, packet);
18335}
18336
18337int dsend_packet_city_sell(struct connection *pc, int city_id, int build_id)
18338{
18339 struct packet_city_sell packet, *real_packet = &packet;
18340
18342 real_packet->build_id = build_id;
18343
18345}
18346
18347#ifdef FREECIV_DELTA_PROTOCOL
18348#define hash_packet_city_buy_100 hash_const
18349
18350#define cmp_packet_city_buy_100 cmp_const
18351
18353#endif /* FREECIV_DELTA_PROTOCOL */
18354
18356{
18357#ifdef FREECIV_DELTA_PROTOCOL
18359 struct packet_city_buy *old;
18360 struct genhash **hash = pc->phs.received + PACKET_CITY_BUY;
18361#endif /* FREECIV_DELTA_PROTOCOL */
18363#ifdef FREECIV_JSON_CONNECTION
18364 struct plocation field_addr;
18365 {
18369 }
18370#endif /* FREECIV_JSON_CONNECTION */
18371
18372#ifdef FREECIV_DELTA_PROTOCOL
18373#ifdef FREECIV_JSON_CONNECTION
18374 field_addr.name = "fields";
18375#endif /* FREECIV_JSON_CONNECTION */
18376 DIO_BV_GET(&din, &field_addr, fields);
18377
18378#else /* FREECIV_DELTA_PROTOCOL */
18379#ifdef FREECIV_JSON_CONNECTION
18380 field_addr.name = "city_id";
18381#endif /* FREECIV_JSON_CONNECTION */
18382 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
18384 }
18385#endif
18386 log_packet_detailed("packet_city_buy_100: got info about ()");
18387
18388#ifdef FREECIV_DELTA_PROTOCOL
18389 if (NULL == *hash) {
18391 NULL, NULL, NULL, free);
18392 }
18393
18394 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
18395 *real_packet = *old;
18396 } else {
18397 log_packet_detailed(" no old info");
18398 memset(real_packet, 0, sizeof(*real_packet));
18399 }
18400
18401 if (BV_ISSET(fields, 0)) {
18402 log_packet_detailed(" got field 'city_id'");
18403#ifdef FREECIV_JSON_CONNECTION
18404 field_addr.name = "city_id";
18405#endif /* FREECIV_JSON_CONNECTION */
18406 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
18408 }
18409 }
18410
18411 if (NULL == old) {
18412 old = fc_malloc(sizeof(*old));
18413 *old = *real_packet;
18414 genhash_insert(*hash, old, old);
18415 } else {
18416 *old = *real_packet;
18417 }
18418
18419#endif /* FREECIV_DELTA_PROTOCOL */
18421}
18422
18423static int send_packet_city_buy_100(struct connection *pc, const struct packet_city_buy *packet)
18424{
18425 const struct packet_city_buy *real_packet = packet;
18426 int e;
18427#ifdef FREECIV_DELTA_PROTOCOL
18429 struct packet_city_buy *old;
18430 bool differ;
18431 struct genhash **hash = pc->phs.sent + PACKET_CITY_BUY;
18432#endif /* FREECIV_DELTA_PROTOCOL */
18434#ifdef FREECIV_JSON_CONNECTION
18435 struct plocation field_addr;
18436 {
18440 }
18441#endif /* FREECIV_JSON_CONNECTION */
18442
18443 log_packet_detailed("packet_city_buy_100: sending info about ()");
18444
18445#ifdef FREECIV_DELTA_PROTOCOL
18446 if (NULL == *hash) {
18448 NULL, NULL, NULL, free);
18449 }
18450 BV_CLR_ALL(fields);
18451
18452 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
18453 old = fc_malloc(sizeof(*old));
18454 *old = *real_packet;
18455 genhash_insert(*hash, old, old);
18456 memset(old, 0, sizeof(*old));
18457 }
18458 differ = (old->city_id != real_packet->city_id);
18459 if (differ) {
18460 BV_SET(fields, 0);
18461 }
18462
18463
18464#ifdef FREECIV_JSON_CONNECTION
18465 field_addr.name = "fields";
18466#endif /* FREECIV_JSON_CONNECTION */
18467 e = 0;
18468 e |= DIO_BV_PUT(&dout, &field_addr, fields);
18469 if (e) {
18470 log_packet_detailed("fields bitvector error detected");
18471 }
18472
18473 if (BV_ISSET(fields, 0)) {
18474 log_packet_detailed(" field 'city_id' has changed");
18475#ifdef FREECIV_JSON_CONNECTION
18476 field_addr.name = "city_id";
18477#endif /* FREECIV_JSON_CONNECTION */
18478 e = 0;
18479 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
18480 if (e) {
18481 log_packet_detailed("'city_id' field error detected");
18482 }
18483 }
18484
18485 *old = *real_packet;
18486#endif /* FREECIV_DELTA_PROTOCOL */
18487#ifndef FREECIV_DELTA_PROTOCOL
18488#ifdef FREECIV_JSON_CONNECTION
18489 field_addr.name = "city_id";
18490#endif /* FREECIV_JSON_CONNECTION */
18491 e = 0;
18492 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
18493 if (e) {
18494 log_packet_detailed("'city_id' field error detected");
18495 }
18496
18497#endif
18499}
18500
18501int send_packet_city_buy(struct connection *pc, const struct packet_city_buy *packet)
18502{
18503 if (!pc->used) {
18504 log_error("WARNING: trying to send data to the closed connection %s",
18506 return -1;
18507 }
18508 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_BUY].packet != NULL, -1,
18509 "Handler for PACKET_CITY_BUY not installed");
18510 return pc->phs.handlers->send[PACKET_CITY_BUY].packet(pc, packet);
18511}
18512
18513int dsend_packet_city_buy(struct connection *pc, int city_id)
18514{
18515 struct packet_city_buy packet, *real_packet = &packet;
18516
18518
18520}
18521
18522#ifdef FREECIV_DELTA_PROTOCOL
18523#define hash_packet_city_change_100 hash_const
18524
18525#define cmp_packet_city_change_100 cmp_const
18526
18528#endif /* FREECIV_DELTA_PROTOCOL */
18529
18531{
18532#ifdef FREECIV_DELTA_PROTOCOL
18534 struct packet_city_change *old;
18535 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE;
18536#endif /* FREECIV_DELTA_PROTOCOL */
18538#ifdef FREECIV_JSON_CONNECTION
18539 struct plocation field_addr;
18540 {
18544 }
18545#endif /* FREECIV_JSON_CONNECTION */
18546
18547#ifdef FREECIV_DELTA_PROTOCOL
18548#ifdef FREECIV_JSON_CONNECTION
18549 field_addr.name = "fields";
18550#endif /* FREECIV_JSON_CONNECTION */
18551 DIO_BV_GET(&din, &field_addr, fields);
18552
18553#else /* FREECIV_DELTA_PROTOCOL */
18554#ifdef FREECIV_JSON_CONNECTION
18555 field_addr.name = "city_id";
18556#endif /* FREECIV_JSON_CONNECTION */
18557 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
18559 }
18560#ifdef FREECIV_JSON_CONNECTION
18561 field_addr.name = "production_kind";
18562#endif /* FREECIV_JSON_CONNECTION */
18563 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
18564 RECEIVE_PACKET_FIELD_ERROR(production_kind);
18565 }
18566#ifdef FREECIV_JSON_CONNECTION
18567 field_addr.name = "production_value";
18568#endif /* FREECIV_JSON_CONNECTION */
18569 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
18570 RECEIVE_PACKET_FIELD_ERROR(production_value);
18571 }
18572#endif
18573 log_packet_detailed("packet_city_change_100: got info about ()");
18574
18575#ifdef FREECIV_DELTA_PROTOCOL
18576 if (NULL == *hash) {
18578 NULL, NULL, NULL, free);
18579 }
18580
18581 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
18582 *real_packet = *old;
18583 } else {
18584 log_packet_detailed(" no old info");
18585 memset(real_packet, 0, sizeof(*real_packet));
18586 }
18587
18588 if (BV_ISSET(fields, 0)) {
18589 log_packet_detailed(" got field 'city_id'");
18590#ifdef FREECIV_JSON_CONNECTION
18591 field_addr.name = "city_id";
18592#endif /* FREECIV_JSON_CONNECTION */
18593 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
18595 }
18596 }
18597 if (BV_ISSET(fields, 1)) {
18598 log_packet_detailed(" got field 'production_kind'");
18599#ifdef FREECIV_JSON_CONNECTION
18600 field_addr.name = "production_kind";
18601#endif /* FREECIV_JSON_CONNECTION */
18602 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
18603 RECEIVE_PACKET_FIELD_ERROR(production_kind);
18604 }
18605 }
18606 if (BV_ISSET(fields, 2)) {
18607 log_packet_detailed(" got field 'production_value'");
18608#ifdef FREECIV_JSON_CONNECTION
18609 field_addr.name = "production_value";
18610#endif /* FREECIV_JSON_CONNECTION */
18611 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
18612 RECEIVE_PACKET_FIELD_ERROR(production_value);
18613 }
18614 }
18615
18616 if (NULL == old) {
18617 old = fc_malloc(sizeof(*old));
18618 *old = *real_packet;
18619 genhash_insert(*hash, old, old);
18620 } else {
18621 *old = *real_packet;
18622 }
18623
18624#endif /* FREECIV_DELTA_PROTOCOL */
18626}
18627
18628static int send_packet_city_change_100(struct connection *pc, const struct packet_city_change *packet)
18629{
18630 const struct packet_city_change *real_packet = packet;
18631 int e;
18632#ifdef FREECIV_DELTA_PROTOCOL
18634 struct packet_city_change *old;
18635 bool differ;
18636 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE;
18637#endif /* FREECIV_DELTA_PROTOCOL */
18639#ifdef FREECIV_JSON_CONNECTION
18640 struct plocation field_addr;
18641 {
18645 }
18646#endif /* FREECIV_JSON_CONNECTION */
18647
18648 log_packet_detailed("packet_city_change_100: sending info about ()");
18649
18650#ifdef FREECIV_DELTA_PROTOCOL
18651 if (NULL == *hash) {
18653 NULL, NULL, NULL, free);
18654 }
18655 BV_CLR_ALL(fields);
18656
18657 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
18658 old = fc_malloc(sizeof(*old));
18659 *old = *real_packet;
18660 genhash_insert(*hash, old, old);
18661 memset(old, 0, sizeof(*old));
18662 }
18663 differ = (old->city_id != real_packet->city_id);
18664 if (differ) {
18665 BV_SET(fields, 0);
18666 }
18667
18668 differ = (old->production_kind != real_packet->production_kind);
18669 if (differ) {
18670 BV_SET(fields, 1);
18671 }
18672
18673 differ = (old->production_value != real_packet->production_value);
18674 if (differ) {
18675 BV_SET(fields, 2);
18676 }
18677
18678
18679#ifdef FREECIV_JSON_CONNECTION
18680 field_addr.name = "fields";
18681#endif /* FREECIV_JSON_CONNECTION */
18682 e = 0;
18683 e |= DIO_BV_PUT(&dout, &field_addr, fields);
18684 if (e) {
18685 log_packet_detailed("fields bitvector error detected");
18686 }
18687
18688 if (BV_ISSET(fields, 0)) {
18689 log_packet_detailed(" field 'city_id' has changed");
18690#ifdef FREECIV_JSON_CONNECTION
18691 field_addr.name = "city_id";
18692#endif /* FREECIV_JSON_CONNECTION */
18693 e = 0;
18694 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
18695 if (e) {
18696 log_packet_detailed("'city_id' field error detected");
18697 }
18698 }
18699 if (BV_ISSET(fields, 1)) {
18700 log_packet_detailed(" field 'production_kind' has changed");
18701#ifdef FREECIV_JSON_CONNECTION
18702 field_addr.name = "production_kind";
18703#endif /* FREECIV_JSON_CONNECTION */
18704 e = 0;
18705 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
18706 if (e) {
18707 log_packet_detailed("'production_kind' field error detected");
18708 }
18709 }
18710 if (BV_ISSET(fields, 2)) {
18711 log_packet_detailed(" field 'production_value' has changed");
18712#ifdef FREECIV_JSON_CONNECTION
18713 field_addr.name = "production_value";
18714#endif /* FREECIV_JSON_CONNECTION */
18715 e = 0;
18716 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
18717 if (e) {
18718 log_packet_detailed("'production_value' field error detected");
18719 }
18720 }
18721
18722 *old = *real_packet;
18723#endif /* FREECIV_DELTA_PROTOCOL */
18724#ifndef FREECIV_DELTA_PROTOCOL
18725#ifdef FREECIV_JSON_CONNECTION
18726 field_addr.name = "city_id";
18727#endif /* FREECIV_JSON_CONNECTION */
18728 e = 0;
18729 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
18730 if (e) {
18731 log_packet_detailed("'city_id' field error detected");
18732 }
18733#ifdef FREECIV_JSON_CONNECTION
18734 field_addr.name = "production_kind";
18735#endif /* FREECIV_JSON_CONNECTION */
18736 e = 0;
18737 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
18738 if (e) {
18739 log_packet_detailed("'production_kind' field error detected");
18740 }
18741#ifdef FREECIV_JSON_CONNECTION
18742 field_addr.name = "production_value";
18743#endif /* FREECIV_JSON_CONNECTION */
18744 e = 0;
18745 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
18746 if (e) {
18747 log_packet_detailed("'production_value' field error detected");
18748 }
18749
18750#endif
18752}
18753
18755{
18756 if (!pc->used) {
18757 log_error("WARNING: trying to send data to the closed connection %s",
18759 return -1;
18760 }
18761 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE].packet != NULL, -1,
18762 "Handler for PACKET_CITY_CHANGE not installed");
18763 return pc->phs.handlers->send[PACKET_CITY_CHANGE].packet(pc, packet);
18764}
18765
18766int dsend_packet_city_change(struct connection *pc, int city_id, int production_kind, int production_value)
18767{
18768 struct packet_city_change packet, *real_packet = &packet;
18769
18771 real_packet->production_kind = production_kind;
18772 real_packet->production_value = production_value;
18773
18775}
18776
18777#ifdef FREECIV_DELTA_PROTOCOL
18778#define hash_packet_city_worklist_100 hash_const
18779
18780#define cmp_packet_city_worklist_100 cmp_const
18781
18783#endif /* FREECIV_DELTA_PROTOCOL */
18784
18786{
18787#ifdef FREECIV_DELTA_PROTOCOL
18789 struct packet_city_worklist *old;
18790 struct genhash **hash = pc->phs.received + PACKET_CITY_WORKLIST;
18791#endif /* FREECIV_DELTA_PROTOCOL */
18793#ifdef FREECIV_JSON_CONNECTION
18794 struct plocation field_addr;
18795 {
18799 }
18800#endif /* FREECIV_JSON_CONNECTION */
18801
18802#ifdef FREECIV_DELTA_PROTOCOL
18803#ifdef FREECIV_JSON_CONNECTION
18804 field_addr.name = "fields";
18805#endif /* FREECIV_JSON_CONNECTION */
18806 DIO_BV_GET(&din, &field_addr, fields);
18807
18808#else /* FREECIV_DELTA_PROTOCOL */
18809#ifdef FREECIV_JSON_CONNECTION
18810 field_addr.name = "city_id";
18811#endif /* FREECIV_JSON_CONNECTION */
18812 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
18814 }
18815#ifdef FREECIV_JSON_CONNECTION
18816 field_addr.name = "worklist";
18817#endif /* FREECIV_JSON_CONNECTION */
18818 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
18820 }
18821#endif
18822 log_packet_detailed("packet_city_worklist_100: got info about ()");
18823
18824#ifdef FREECIV_DELTA_PROTOCOL
18825 if (NULL == *hash) {
18827 NULL, NULL, NULL, free);
18828 }
18829
18830 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
18831 *real_packet = *old;
18832 } else {
18833 log_packet_detailed(" no old info");
18834 memset(real_packet, 0, sizeof(*real_packet));
18835 }
18836
18837 if (BV_ISSET(fields, 0)) {
18838 log_packet_detailed(" got field 'city_id'");
18839#ifdef FREECIV_JSON_CONNECTION
18840 field_addr.name = "city_id";
18841#endif /* FREECIV_JSON_CONNECTION */
18842 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
18844 }
18845 }
18846 if (BV_ISSET(fields, 1)) {
18847 log_packet_detailed(" got field 'worklist'");
18848#ifdef FREECIV_JSON_CONNECTION
18849 field_addr.name = "worklist";
18850#endif /* FREECIV_JSON_CONNECTION */
18851 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
18853 }
18854 }
18855
18856 if (NULL == old) {
18857 old = fc_malloc(sizeof(*old));
18858 *old = *real_packet;
18859 genhash_insert(*hash, old, old);
18860 } else {
18861 *old = *real_packet;
18862 }
18863
18864#endif /* FREECIV_DELTA_PROTOCOL */
18866}
18867
18868static int send_packet_city_worklist_100(struct connection *pc, const struct packet_city_worklist *packet)
18869{
18870 const struct packet_city_worklist *real_packet = packet;
18871 int e;
18872#ifdef FREECIV_DELTA_PROTOCOL
18874 struct packet_city_worklist *old;
18875 bool differ;
18876 struct genhash **hash = pc->phs.sent + PACKET_CITY_WORKLIST;
18877#endif /* FREECIV_DELTA_PROTOCOL */
18879#ifdef FREECIV_JSON_CONNECTION
18880 struct plocation field_addr;
18881 {
18885 }
18886#endif /* FREECIV_JSON_CONNECTION */
18887
18888 log_packet_detailed("packet_city_worklist_100: sending info about ()");
18889
18890#ifdef FREECIV_DELTA_PROTOCOL
18891 if (NULL == *hash) {
18893 NULL, NULL, NULL, free);
18894 }
18895 BV_CLR_ALL(fields);
18896
18897 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
18898 old = fc_malloc(sizeof(*old));
18899 *old = *real_packet;
18900 genhash_insert(*hash, old, old);
18901 memset(old, 0, sizeof(*old));
18902 }
18903 differ = (old->city_id != real_packet->city_id);
18904 if (differ) {
18905 BV_SET(fields, 0);
18906 }
18907
18908 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
18909 if (differ) {
18910 BV_SET(fields, 1);
18911 }
18912
18913
18914#ifdef FREECIV_JSON_CONNECTION
18915 field_addr.name = "fields";
18916#endif /* FREECIV_JSON_CONNECTION */
18917 e = 0;
18918 e |= DIO_BV_PUT(&dout, &field_addr, fields);
18919 if (e) {
18920 log_packet_detailed("fields bitvector error detected");
18921 }
18922
18923 if (BV_ISSET(fields, 0)) {
18924 log_packet_detailed(" field 'city_id' has changed");
18925#ifdef FREECIV_JSON_CONNECTION
18926 field_addr.name = "city_id";
18927#endif /* FREECIV_JSON_CONNECTION */
18928 e = 0;
18929 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
18930 if (e) {
18931 log_packet_detailed("'city_id' field error detected");
18932 }
18933 }
18934 if (BV_ISSET(fields, 1)) {
18935 log_packet_detailed(" field 'worklist' has changed");
18936#ifdef FREECIV_JSON_CONNECTION
18937 field_addr.name = "worklist";
18938#endif /* FREECIV_JSON_CONNECTION */
18939 e = 0;
18940 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
18941 if (e) {
18942 log_packet_detailed("'worklist' field error detected");
18943 }
18944 }
18945
18946 *old = *real_packet;
18947#endif /* FREECIV_DELTA_PROTOCOL */
18948#ifndef FREECIV_DELTA_PROTOCOL
18949#ifdef FREECIV_JSON_CONNECTION
18950 field_addr.name = "city_id";
18951#endif /* FREECIV_JSON_CONNECTION */
18952 e = 0;
18953 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
18954 if (e) {
18955 log_packet_detailed("'city_id' field error detected");
18956 }
18957#ifdef FREECIV_JSON_CONNECTION
18958 field_addr.name = "worklist";
18959#endif /* FREECIV_JSON_CONNECTION */
18960 e = 0;
18961 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
18962 if (e) {
18963 log_packet_detailed("'worklist' field error detected");
18964 }
18965
18966#endif
18968}
18969
18971{
18972 if (!pc->used) {
18973 log_error("WARNING: trying to send data to the closed connection %s",
18975 return -1;
18976 }
18977 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet != NULL, -1,
18978 "Handler for PACKET_CITY_WORKLIST not installed");
18979 return pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet(pc, packet);
18980}
18981
18982int dsend_packet_city_worklist(struct connection *pc, int city_id, const struct worklist *worklist)
18983{
18984 struct packet_city_worklist packet, *real_packet = &packet;
18985
18987 worklist_copy(&real_packet->worklist, worklist);
18988
18990}
18991
18992#ifdef FREECIV_DELTA_PROTOCOL
18993#define hash_packet_city_make_specialist_100 hash_const
18994
18995#define cmp_packet_city_make_specialist_100 cmp_const
18996
18998#endif /* FREECIV_DELTA_PROTOCOL */
18999
19001{
19002#ifdef FREECIV_DELTA_PROTOCOL
19004 struct packet_city_make_specialist *old;
19005 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_SPECIALIST;
19006#endif /* FREECIV_DELTA_PROTOCOL */
19008#ifdef FREECIV_JSON_CONNECTION
19009 struct plocation field_addr;
19010 {
19014 }
19015#endif /* FREECIV_JSON_CONNECTION */
19016
19017#ifdef FREECIV_DELTA_PROTOCOL
19018#ifdef FREECIV_JSON_CONNECTION
19019 field_addr.name = "fields";
19020#endif /* FREECIV_JSON_CONNECTION */
19021 DIO_BV_GET(&din, &field_addr, fields);
19022
19023#else /* FREECIV_DELTA_PROTOCOL */
19024#ifdef FREECIV_JSON_CONNECTION
19025 field_addr.name = "city_id";
19026#endif /* FREECIV_JSON_CONNECTION */
19027 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19029 }
19030#ifdef FREECIV_JSON_CONNECTION
19031 field_addr.name = "tile_id";
19032#endif /* FREECIV_JSON_CONNECTION */
19033 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
19035 }
19036#endif
19037 log_packet_detailed("packet_city_make_specialist_100: got info about ()");
19038
19039#ifdef FREECIV_DELTA_PROTOCOL
19040 if (NULL == *hash) {
19042 NULL, NULL, NULL, free);
19043 }
19044
19045 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19046 *real_packet = *old;
19047 } else {
19048 log_packet_detailed(" no old info");
19049 memset(real_packet, 0, sizeof(*real_packet));
19050 }
19051
19052 if (BV_ISSET(fields, 0)) {
19053 log_packet_detailed(" got field 'city_id'");
19054#ifdef FREECIV_JSON_CONNECTION
19055 field_addr.name = "city_id";
19056#endif /* FREECIV_JSON_CONNECTION */
19057 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19059 }
19060 }
19061 if (BV_ISSET(fields, 1)) {
19062 log_packet_detailed(" got field 'tile_id'");
19063#ifdef FREECIV_JSON_CONNECTION
19064 field_addr.name = "tile_id";
19065#endif /* FREECIV_JSON_CONNECTION */
19066 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
19068 }
19069 }
19070
19071 if (NULL == old) {
19072 old = fc_malloc(sizeof(*old));
19073 *old = *real_packet;
19074 genhash_insert(*hash, old, old);
19075 } else {
19076 *old = *real_packet;
19077 }
19078
19079#endif /* FREECIV_DELTA_PROTOCOL */
19081}
19082
19084{
19085 const struct packet_city_make_specialist *real_packet = packet;
19086 int e;
19087#ifdef FREECIV_DELTA_PROTOCOL
19089 struct packet_city_make_specialist *old;
19090 bool differ;
19091 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_SPECIALIST;
19092#endif /* FREECIV_DELTA_PROTOCOL */
19094#ifdef FREECIV_JSON_CONNECTION
19095 struct plocation field_addr;
19096 {
19100 }
19101#endif /* FREECIV_JSON_CONNECTION */
19102
19103 log_packet_detailed("packet_city_make_specialist_100: sending info about ()");
19104
19105#ifdef FREECIV_DELTA_PROTOCOL
19106 if (NULL == *hash) {
19108 NULL, NULL, NULL, free);
19109 }
19110 BV_CLR_ALL(fields);
19111
19112 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19113 old = fc_malloc(sizeof(*old));
19114 *old = *real_packet;
19115 genhash_insert(*hash, old, old);
19116 memset(old, 0, sizeof(*old));
19117 }
19118 differ = (old->city_id != real_packet->city_id);
19119 if (differ) {
19120 BV_SET(fields, 0);
19121 }
19122
19123 differ = (old->tile_id != real_packet->tile_id);
19124 if (differ) {
19125 BV_SET(fields, 1);
19126 }
19127
19128
19129#ifdef FREECIV_JSON_CONNECTION
19130 field_addr.name = "fields";
19131#endif /* FREECIV_JSON_CONNECTION */
19132 e = 0;
19133 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19134 if (e) {
19135 log_packet_detailed("fields bitvector error detected");
19136 }
19137
19138 if (BV_ISSET(fields, 0)) {
19139 log_packet_detailed(" field 'city_id' has changed");
19140#ifdef FREECIV_JSON_CONNECTION
19141 field_addr.name = "city_id";
19142#endif /* FREECIV_JSON_CONNECTION */
19143 e = 0;
19144 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
19145 if (e) {
19146 log_packet_detailed("'city_id' field error detected");
19147 }
19148 }
19149 if (BV_ISSET(fields, 1)) {
19150 log_packet_detailed(" field 'tile_id' has changed");
19151#ifdef FREECIV_JSON_CONNECTION
19152 field_addr.name = "tile_id";
19153#endif /* FREECIV_JSON_CONNECTION */
19154 e = 0;
19155 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
19156 if (e) {
19157 log_packet_detailed("'tile_id' field error detected");
19158 }
19159 }
19160
19161 *old = *real_packet;
19162#endif /* FREECIV_DELTA_PROTOCOL */
19163#ifndef FREECIV_DELTA_PROTOCOL
19164#ifdef FREECIV_JSON_CONNECTION
19165 field_addr.name = "city_id";
19166#endif /* FREECIV_JSON_CONNECTION */
19167 e = 0;
19168 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
19169 if (e) {
19170 log_packet_detailed("'city_id' field error detected");
19171 }
19172#ifdef FREECIV_JSON_CONNECTION
19173 field_addr.name = "tile_id";
19174#endif /* FREECIV_JSON_CONNECTION */
19175 e = 0;
19176 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
19177 if (e) {
19178 log_packet_detailed("'tile_id' field error detected");
19179 }
19180
19181#endif
19183}
19184
19186{
19187 if (!pc->used) {
19188 log_error("WARNING: trying to send data to the closed connection %s",
19190 return -1;
19191 }
19192 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet != NULL, -1,
19193 "Handler for PACKET_CITY_MAKE_SPECIALIST not installed");
19194 return pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet(pc, packet);
19195}
19196
19197int dsend_packet_city_make_specialist(struct connection *pc, int city_id, int tile_id)
19198{
19199 struct packet_city_make_specialist packet, *real_packet = &packet;
19200
19202 real_packet->tile_id = tile_id;
19203
19205}
19206
19207#ifdef FREECIV_DELTA_PROTOCOL
19208#define hash_packet_city_make_worker_100 hash_const
19209
19210#define cmp_packet_city_make_worker_100 cmp_const
19211
19213#endif /* FREECIV_DELTA_PROTOCOL */
19214
19216{
19217#ifdef FREECIV_DELTA_PROTOCOL
19219 struct packet_city_make_worker *old;
19220 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_WORKER;
19221#endif /* FREECIV_DELTA_PROTOCOL */
19223#ifdef FREECIV_JSON_CONNECTION
19224 struct plocation field_addr;
19225 {
19229 }
19230#endif /* FREECIV_JSON_CONNECTION */
19231
19232#ifdef FREECIV_DELTA_PROTOCOL
19233#ifdef FREECIV_JSON_CONNECTION
19234 field_addr.name = "fields";
19235#endif /* FREECIV_JSON_CONNECTION */
19236 DIO_BV_GET(&din, &field_addr, fields);
19237
19238#else /* FREECIV_DELTA_PROTOCOL */
19239#ifdef FREECIV_JSON_CONNECTION
19240 field_addr.name = "city_id";
19241#endif /* FREECIV_JSON_CONNECTION */
19242 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19244 }
19245#ifdef FREECIV_JSON_CONNECTION
19246 field_addr.name = "tile_id";
19247#endif /* FREECIV_JSON_CONNECTION */
19248 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
19250 }
19251#endif
19252 log_packet_detailed("packet_city_make_worker_100: got info about ()");
19253
19254#ifdef FREECIV_DELTA_PROTOCOL
19255 if (NULL == *hash) {
19257 NULL, NULL, NULL, free);
19258 }
19259
19260 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19261 *real_packet = *old;
19262 } else {
19263 log_packet_detailed(" no old info");
19264 memset(real_packet, 0, sizeof(*real_packet));
19265 }
19266
19267 if (BV_ISSET(fields, 0)) {
19268 log_packet_detailed(" got field 'city_id'");
19269#ifdef FREECIV_JSON_CONNECTION
19270 field_addr.name = "city_id";
19271#endif /* FREECIV_JSON_CONNECTION */
19272 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19274 }
19275 }
19276 if (BV_ISSET(fields, 1)) {
19277 log_packet_detailed(" got field 'tile_id'");
19278#ifdef FREECIV_JSON_CONNECTION
19279 field_addr.name = "tile_id";
19280#endif /* FREECIV_JSON_CONNECTION */
19281 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
19283 }
19284 }
19285
19286 if (NULL == old) {
19287 old = fc_malloc(sizeof(*old));
19288 *old = *real_packet;
19289 genhash_insert(*hash, old, old);
19290 } else {
19291 *old = *real_packet;
19292 }
19293
19294#endif /* FREECIV_DELTA_PROTOCOL */
19296}
19297
19299{
19300 const struct packet_city_make_worker *real_packet = packet;
19301 int e;
19302#ifdef FREECIV_DELTA_PROTOCOL
19304 struct packet_city_make_worker *old;
19305 bool differ;
19306 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_WORKER;
19307#endif /* FREECIV_DELTA_PROTOCOL */
19309#ifdef FREECIV_JSON_CONNECTION
19310 struct plocation field_addr;
19311 {
19315 }
19316#endif /* FREECIV_JSON_CONNECTION */
19317
19318 log_packet_detailed("packet_city_make_worker_100: sending info about ()");
19319
19320#ifdef FREECIV_DELTA_PROTOCOL
19321 if (NULL == *hash) {
19323 NULL, NULL, NULL, free);
19324 }
19325 BV_CLR_ALL(fields);
19326
19327 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19328 old = fc_malloc(sizeof(*old));
19329 *old = *real_packet;
19330 genhash_insert(*hash, old, old);
19331 memset(old, 0, sizeof(*old));
19332 }
19333 differ = (old->city_id != real_packet->city_id);
19334 if (differ) {
19335 BV_SET(fields, 0);
19336 }
19337
19338 differ = (old->tile_id != real_packet->tile_id);
19339 if (differ) {
19340 BV_SET(fields, 1);
19341 }
19342
19343
19344#ifdef FREECIV_JSON_CONNECTION
19345 field_addr.name = "fields";
19346#endif /* FREECIV_JSON_CONNECTION */
19347 e = 0;
19348 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19349 if (e) {
19350 log_packet_detailed("fields bitvector error detected");
19351 }
19352
19353 if (BV_ISSET(fields, 0)) {
19354 log_packet_detailed(" field 'city_id' has changed");
19355#ifdef FREECIV_JSON_CONNECTION
19356 field_addr.name = "city_id";
19357#endif /* FREECIV_JSON_CONNECTION */
19358 e = 0;
19359 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
19360 if (e) {
19361 log_packet_detailed("'city_id' field error detected");
19362 }
19363 }
19364 if (BV_ISSET(fields, 1)) {
19365 log_packet_detailed(" field 'tile_id' has changed");
19366#ifdef FREECIV_JSON_CONNECTION
19367 field_addr.name = "tile_id";
19368#endif /* FREECIV_JSON_CONNECTION */
19369 e = 0;
19370 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
19371 if (e) {
19372 log_packet_detailed("'tile_id' field error detected");
19373 }
19374 }
19375
19376 *old = *real_packet;
19377#endif /* FREECIV_DELTA_PROTOCOL */
19378#ifndef FREECIV_DELTA_PROTOCOL
19379#ifdef FREECIV_JSON_CONNECTION
19380 field_addr.name = "city_id";
19381#endif /* FREECIV_JSON_CONNECTION */
19382 e = 0;
19383 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
19384 if (e) {
19385 log_packet_detailed("'city_id' field error detected");
19386 }
19387#ifdef FREECIV_JSON_CONNECTION
19388 field_addr.name = "tile_id";
19389#endif /* FREECIV_JSON_CONNECTION */
19390 e = 0;
19391 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
19392 if (e) {
19393 log_packet_detailed("'tile_id' field error detected");
19394 }
19395
19396#endif
19398}
19399
19401{
19402 if (!pc->used) {
19403 log_error("WARNING: trying to send data to the closed connection %s",
19405 return -1;
19406 }
19407 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet != NULL, -1,
19408 "Handler for PACKET_CITY_MAKE_WORKER not installed");
19409 return pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet(pc, packet);
19410}
19411
19412int dsend_packet_city_make_worker(struct connection *pc, int city_id, int tile_id)
19413{
19414 struct packet_city_make_worker packet, *real_packet = &packet;
19415
19417 real_packet->tile_id = tile_id;
19418
19420}
19421
19422#ifdef FREECIV_DELTA_PROTOCOL
19423#define hash_packet_city_change_specialist_100 hash_const
19424
19425#define cmp_packet_city_change_specialist_100 cmp_const
19426
19428#endif /* FREECIV_DELTA_PROTOCOL */
19429
19431{
19432#ifdef FREECIV_DELTA_PROTOCOL
19435 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE_SPECIALIST;
19436#endif /* FREECIV_DELTA_PROTOCOL */
19438#ifdef FREECIV_JSON_CONNECTION
19439 struct plocation field_addr;
19440 {
19444 }
19445#endif /* FREECIV_JSON_CONNECTION */
19446
19447#ifdef FREECIV_DELTA_PROTOCOL
19448#ifdef FREECIV_JSON_CONNECTION
19449 field_addr.name = "fields";
19450#endif /* FREECIV_JSON_CONNECTION */
19451 DIO_BV_GET(&din, &field_addr, fields);
19452
19453#else /* FREECIV_DELTA_PROTOCOL */
19454#ifdef FREECIV_JSON_CONNECTION
19455 field_addr.name = "city_id";
19456#endif /* FREECIV_JSON_CONNECTION */
19457 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19459 }
19460#ifdef FREECIV_JSON_CONNECTION
19461 field_addr.name = "from";
19462#endif /* FREECIV_JSON_CONNECTION */
19463 {
19464 int readin;
19465
19466 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
19468 }
19469 real_packet->from = readin;
19470 }
19471#ifdef FREECIV_JSON_CONNECTION
19472 field_addr.name = "to";
19473#endif /* FREECIV_JSON_CONNECTION */
19474 {
19475 int readin;
19476
19477 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
19479 }
19480 real_packet->to = readin;
19481 }
19482#endif
19483 log_packet_detailed("packet_city_change_specialist_100: got info about ()");
19484
19485#ifdef FREECIV_DELTA_PROTOCOL
19486 if (NULL == *hash) {
19488 NULL, NULL, NULL, free);
19489 }
19490
19491 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19492 *real_packet = *old;
19493 } else {
19494 log_packet_detailed(" no old info");
19495 memset(real_packet, 0, sizeof(*real_packet));
19496 }
19497
19498 if (BV_ISSET(fields, 0)) {
19499 log_packet_detailed(" got field 'city_id'");
19500#ifdef FREECIV_JSON_CONNECTION
19501 field_addr.name = "city_id";
19502#endif /* FREECIV_JSON_CONNECTION */
19503 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19505 }
19506 }
19507 if (BV_ISSET(fields, 1)) {
19508 log_packet_detailed(" got field 'from'");
19509#ifdef FREECIV_JSON_CONNECTION
19510 field_addr.name = "from";
19511#endif /* FREECIV_JSON_CONNECTION */
19512 {
19513 int readin;
19514
19515 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
19517 }
19518 real_packet->from = readin;
19519 }
19520 }
19521 if (BV_ISSET(fields, 2)) {
19522 log_packet_detailed(" got field 'to'");
19523#ifdef FREECIV_JSON_CONNECTION
19524 field_addr.name = "to";
19525#endif /* FREECIV_JSON_CONNECTION */
19526 {
19527 int readin;
19528
19529 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
19531 }
19532 real_packet->to = readin;
19533 }
19534 }
19535
19536 if (NULL == old) {
19537 old = fc_malloc(sizeof(*old));
19538 *old = *real_packet;
19539 genhash_insert(*hash, old, old);
19540 } else {
19541 *old = *real_packet;
19542 }
19543
19544#endif /* FREECIV_DELTA_PROTOCOL */
19546}
19547
19549{
19550 const struct packet_city_change_specialist *real_packet = packet;
19551 int e;
19552#ifdef FREECIV_DELTA_PROTOCOL
19555 bool differ;
19556 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE_SPECIALIST;
19557#endif /* FREECIV_DELTA_PROTOCOL */
19559#ifdef FREECIV_JSON_CONNECTION
19560 struct plocation field_addr;
19561 {
19565 }
19566#endif /* FREECIV_JSON_CONNECTION */
19567
19568 log_packet_detailed("packet_city_change_specialist_100: sending info about ()");
19569
19570#ifdef FREECIV_DELTA_PROTOCOL
19571 if (NULL == *hash) {
19573 NULL, NULL, NULL, free);
19574 }
19575 BV_CLR_ALL(fields);
19576
19577 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19578 old = fc_malloc(sizeof(*old));
19579 *old = *real_packet;
19580 genhash_insert(*hash, old, old);
19581 memset(old, 0, sizeof(*old));
19582 }
19583 differ = (old->city_id != real_packet->city_id);
19584 if (differ) {
19585 BV_SET(fields, 0);
19586 }
19587
19588 differ = (old->from != real_packet->from);
19589 if (differ) {
19590 BV_SET(fields, 1);
19591 }
19592
19593 differ = (old->to != real_packet->to);
19594 if (differ) {
19595 BV_SET(fields, 2);
19596 }
19597
19598
19599#ifdef FREECIV_JSON_CONNECTION
19600 field_addr.name = "fields";
19601#endif /* FREECIV_JSON_CONNECTION */
19602 e = 0;
19603 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19604 if (e) {
19605 log_packet_detailed("fields bitvector error detected");
19606 }
19607
19608 if (BV_ISSET(fields, 0)) {
19609 log_packet_detailed(" field 'city_id' has changed");
19610#ifdef FREECIV_JSON_CONNECTION
19611 field_addr.name = "city_id";
19612#endif /* FREECIV_JSON_CONNECTION */
19613 e = 0;
19614 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
19615 if (e) {
19616 log_packet_detailed("'city_id' field error detected");
19617 }
19618 }
19619 if (BV_ISSET(fields, 1)) {
19620 log_packet_detailed(" field 'from' has changed");
19621#ifdef FREECIV_JSON_CONNECTION
19622 field_addr.name = "from";
19623#endif /* FREECIV_JSON_CONNECTION */
19624 e = 0;
19625 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
19626 if (e) {
19627 log_packet_detailed("'from' field error detected");
19628 }
19629 }
19630 if (BV_ISSET(fields, 2)) {
19631 log_packet_detailed(" field 'to' has changed");
19632#ifdef FREECIV_JSON_CONNECTION
19633 field_addr.name = "to";
19634#endif /* FREECIV_JSON_CONNECTION */
19635 e = 0;
19636 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
19637 if (e) {
19638 log_packet_detailed("'to' field error detected");
19639 }
19640 }
19641
19642 *old = *real_packet;
19643#endif /* FREECIV_DELTA_PROTOCOL */
19644#ifndef FREECIV_DELTA_PROTOCOL
19645#ifdef FREECIV_JSON_CONNECTION
19646 field_addr.name = "city_id";
19647#endif /* FREECIV_JSON_CONNECTION */
19648 e = 0;
19649 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
19650 if (e) {
19651 log_packet_detailed("'city_id' field error detected");
19652 }
19653#ifdef FREECIV_JSON_CONNECTION
19654 field_addr.name = "from";
19655#endif /* FREECIV_JSON_CONNECTION */
19656 e = 0;
19657 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
19658 if (e) {
19659 log_packet_detailed("'from' field error detected");
19660 }
19661#ifdef FREECIV_JSON_CONNECTION
19662 field_addr.name = "to";
19663#endif /* FREECIV_JSON_CONNECTION */
19664 e = 0;
19665 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
19666 if (e) {
19667 log_packet_detailed("'to' field error detected");
19668 }
19669
19670#endif
19672}
19673
19675{
19676 if (!pc->used) {
19677 log_error("WARNING: trying to send data to the closed connection %s",
19679 return -1;
19680 }
19681 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet != NULL, -1,
19682 "Handler for PACKET_CITY_CHANGE_SPECIALIST not installed");
19683 return pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet(pc, packet);
19684}
19685
19687{
19688 struct packet_city_change_specialist packet, *real_packet = &packet;
19689
19691 real_packet->from = from;
19692 real_packet->to = to;
19693
19695}
19696
19697#ifdef FREECIV_DELTA_PROTOCOL
19698#define hash_packet_city_rename_100 hash_const
19699
19700#define cmp_packet_city_rename_100 cmp_const
19701
19703#endif /* FREECIV_DELTA_PROTOCOL */
19704
19706{
19707#ifdef FREECIV_DELTA_PROTOCOL
19709 struct packet_city_rename *old;
19710 struct genhash **hash = pc->phs.received + PACKET_CITY_RENAME;
19711#endif /* FREECIV_DELTA_PROTOCOL */
19713#ifdef FREECIV_JSON_CONNECTION
19714 struct plocation field_addr;
19715 {
19719 }
19720#endif /* FREECIV_JSON_CONNECTION */
19721
19722#ifdef FREECIV_DELTA_PROTOCOL
19723#ifdef FREECIV_JSON_CONNECTION
19724 field_addr.name = "fields";
19725#endif /* FREECIV_JSON_CONNECTION */
19726 DIO_BV_GET(&din, &field_addr, fields);
19727
19728#else /* FREECIV_DELTA_PROTOCOL */
19729#ifdef FREECIV_JSON_CONNECTION
19730 field_addr.name = "city_id";
19731#endif /* FREECIV_JSON_CONNECTION */
19732 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19734 }
19735#ifdef FREECIV_JSON_CONNECTION
19736 field_addr.name = "name";
19737#endif /* FREECIV_JSON_CONNECTION */
19738 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
19740 }
19741#endif
19742 log_packet_detailed("packet_city_rename_100: got info about ()");
19743
19744#ifdef FREECIV_DELTA_PROTOCOL
19745 if (NULL == *hash) {
19747 NULL, NULL, NULL, free);
19748 }
19749
19750 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19751 *real_packet = *old;
19752 } else {
19753 log_packet_detailed(" no old info");
19754 memset(real_packet, 0, sizeof(*real_packet));
19755 }
19756
19757 if (BV_ISSET(fields, 0)) {
19758 log_packet_detailed(" got field 'city_id'");
19759#ifdef FREECIV_JSON_CONNECTION
19760 field_addr.name = "city_id";
19761#endif /* FREECIV_JSON_CONNECTION */
19762 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19764 }
19765 }
19766 if (BV_ISSET(fields, 1)) {
19767 log_packet_detailed(" got field 'name'");
19768#ifdef FREECIV_JSON_CONNECTION
19769 field_addr.name = "name";
19770#endif /* FREECIV_JSON_CONNECTION */
19771 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
19773 }
19774 }
19775
19776 if (NULL == old) {
19777 old = fc_malloc(sizeof(*old));
19778 *old = *real_packet;
19779 genhash_insert(*hash, old, old);
19780 } else {
19781 *old = *real_packet;
19782 }
19783
19784#endif /* FREECIV_DELTA_PROTOCOL */
19786}
19787
19788static int send_packet_city_rename_100(struct connection *pc, const struct packet_city_rename *packet)
19789{
19790 const struct packet_city_rename *real_packet = packet;
19791 int e;
19792#ifdef FREECIV_DELTA_PROTOCOL
19794 struct packet_city_rename *old;
19795 bool differ;
19796 struct genhash **hash = pc->phs.sent + PACKET_CITY_RENAME;
19797#endif /* FREECIV_DELTA_PROTOCOL */
19799#ifdef FREECIV_JSON_CONNECTION
19800 struct plocation field_addr;
19801 {
19805 }
19806#endif /* FREECIV_JSON_CONNECTION */
19807
19808 log_packet_detailed("packet_city_rename_100: sending info about ()");
19809
19810#ifdef FREECIV_DELTA_PROTOCOL
19811 if (NULL == *hash) {
19813 NULL, NULL, NULL, free);
19814 }
19815 BV_CLR_ALL(fields);
19816
19817 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19818 old = fc_malloc(sizeof(*old));
19819 *old = *real_packet;
19820 genhash_insert(*hash, old, old);
19821 memset(old, 0, sizeof(*old));
19822 }
19823 differ = (old->city_id != real_packet->city_id);
19824 if (differ) {
19825 BV_SET(fields, 0);
19826 }
19827
19828 differ = (strcmp(old->name, real_packet->name) != 0);
19829 if (differ) {
19830 BV_SET(fields, 1);
19831 }
19832
19833
19834#ifdef FREECIV_JSON_CONNECTION
19835 field_addr.name = "fields";
19836#endif /* FREECIV_JSON_CONNECTION */
19837 e = 0;
19838 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19839 if (e) {
19840 log_packet_detailed("fields bitvector error detected");
19841 }
19842
19843 if (BV_ISSET(fields, 0)) {
19844 log_packet_detailed(" field 'city_id' has changed");
19845#ifdef FREECIV_JSON_CONNECTION
19846 field_addr.name = "city_id";
19847#endif /* FREECIV_JSON_CONNECTION */
19848 e = 0;
19849 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
19850 if (e) {
19851 log_packet_detailed("'city_id' field error detected");
19852 }
19853 }
19854 if (BV_ISSET(fields, 1)) {
19855 log_packet_detailed(" field 'name' has changed");
19856#ifdef FREECIV_JSON_CONNECTION
19857 field_addr.name = "name";
19858#endif /* FREECIV_JSON_CONNECTION */
19859 e = 0;
19860 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
19861 if (e) {
19862 log_packet_detailed("'name' field error detected");
19863 }
19864 }
19865
19866 *old = *real_packet;
19867#endif /* FREECIV_DELTA_PROTOCOL */
19868#ifndef FREECIV_DELTA_PROTOCOL
19869#ifdef FREECIV_JSON_CONNECTION
19870 field_addr.name = "city_id";
19871#endif /* FREECIV_JSON_CONNECTION */
19872 e = 0;
19873 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
19874 if (e) {
19875 log_packet_detailed("'city_id' field error detected");
19876 }
19877#ifdef FREECIV_JSON_CONNECTION
19878 field_addr.name = "name";
19879#endif /* FREECIV_JSON_CONNECTION */
19880 e = 0;
19881 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
19882 if (e) {
19883 log_packet_detailed("'name' field error detected");
19884 }
19885
19886#endif
19888}
19889
19891{
19892 if (!pc->used) {
19893 log_error("WARNING: trying to send data to the closed connection %s",
19895 return -1;
19896 }
19897 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RENAME].packet != NULL, -1,
19898 "Handler for PACKET_CITY_RENAME not installed");
19899 return pc->phs.handlers->send[PACKET_CITY_RENAME].packet(pc, packet);
19900}
19901
19902int dsend_packet_city_rename(struct connection *pc, int city_id, const char *name)
19903{
19904 struct packet_city_rename packet, *real_packet = &packet;
19905
19907 sz_strlcpy(real_packet->name, name);
19908
19910}
19911
19912#ifdef FREECIV_DELTA_PROTOCOL
19913#define hash_packet_city_options_req_100 hash_const
19914
19915#define cmp_packet_city_options_req_100 cmp_const
19916
19918#endif /* FREECIV_DELTA_PROTOCOL */
19919
19921{
19922#ifdef FREECIV_DELTA_PROTOCOL
19924 struct packet_city_options_req *old;
19925 struct genhash **hash = pc->phs.received + PACKET_CITY_OPTIONS_REQ;
19926#endif /* FREECIV_DELTA_PROTOCOL */
19928#ifdef FREECIV_JSON_CONNECTION
19929 struct plocation field_addr;
19930 {
19934 }
19935#endif /* FREECIV_JSON_CONNECTION */
19936
19937#ifdef FREECIV_DELTA_PROTOCOL
19938#ifdef FREECIV_JSON_CONNECTION
19939 field_addr.name = "fields";
19940#endif /* FREECIV_JSON_CONNECTION */
19941 DIO_BV_GET(&din, &field_addr, fields);
19942
19943#else /* FREECIV_DELTA_PROTOCOL */
19944#ifdef FREECIV_JSON_CONNECTION
19945 field_addr.name = "city_id";
19946#endif /* FREECIV_JSON_CONNECTION */
19947 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19949 }
19950#ifdef FREECIV_JSON_CONNECTION
19951 field_addr.name = "options";
19952#endif /* FREECIV_JSON_CONNECTION */
19953 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
19955 }
19956#ifdef FREECIV_JSON_CONNECTION
19957 field_addr.name = "wl_cb";
19958#endif /* FREECIV_JSON_CONNECTION */
19959 {
19960 int readin;
19961
19962 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
19964 }
19965 real_packet->wl_cb = readin;
19966 }
19967#endif
19968 log_packet_detailed("packet_city_options_req_100: got info about ()");
19969
19970#ifdef FREECIV_DELTA_PROTOCOL
19971 if (NULL == *hash) {
19973 NULL, NULL, NULL, free);
19974 }
19975
19976 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19977 *real_packet = *old;
19978 } else {
19979 log_packet_detailed(" no old info");
19980 memset(real_packet, 0, sizeof(*real_packet));
19981 }
19982
19983 if (BV_ISSET(fields, 0)) {
19984 log_packet_detailed(" got field 'city_id'");
19985#ifdef FREECIV_JSON_CONNECTION
19986 field_addr.name = "city_id";
19987#endif /* FREECIV_JSON_CONNECTION */
19988 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
19990 }
19991 }
19992 if (BV_ISSET(fields, 1)) {
19993 log_packet_detailed(" got field 'options'");
19994#ifdef FREECIV_JSON_CONNECTION
19995 field_addr.name = "options";
19996#endif /* FREECIV_JSON_CONNECTION */
19997 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
19999 }
20000 }
20001 if (BV_ISSET(fields, 2)) {
20002 log_packet_detailed(" got field 'wl_cb'");
20003#ifdef FREECIV_JSON_CONNECTION
20004 field_addr.name = "wl_cb";
20005#endif /* FREECIV_JSON_CONNECTION */
20006 {
20007 int readin;
20008
20009 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20011 }
20012 real_packet->wl_cb = readin;
20013 }
20014 }
20015
20016 if (NULL == old) {
20017 old = fc_malloc(sizeof(*old));
20018 *old = *real_packet;
20019 genhash_insert(*hash, old, old);
20020 } else {
20021 *old = *real_packet;
20022 }
20023
20024#endif /* FREECIV_DELTA_PROTOCOL */
20026}
20027
20029{
20030 const struct packet_city_options_req *real_packet = packet;
20031 int e;
20032#ifdef FREECIV_DELTA_PROTOCOL
20034 struct packet_city_options_req *old;
20035 bool differ;
20036 struct genhash **hash = pc->phs.sent + PACKET_CITY_OPTIONS_REQ;
20037#endif /* FREECIV_DELTA_PROTOCOL */
20039#ifdef FREECIV_JSON_CONNECTION
20040 struct plocation field_addr;
20041 {
20045 }
20046#endif /* FREECIV_JSON_CONNECTION */
20047
20048 log_packet_detailed("packet_city_options_req_100: sending info about ()");
20049
20050#ifdef FREECIV_DELTA_PROTOCOL
20051 if (NULL == *hash) {
20053 NULL, NULL, NULL, free);
20054 }
20055 BV_CLR_ALL(fields);
20056
20057 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20058 old = fc_malloc(sizeof(*old));
20059 *old = *real_packet;
20060 genhash_insert(*hash, old, old);
20061 memset(old, 0, sizeof(*old));
20062 }
20063 differ = (old->city_id != real_packet->city_id);
20064 if (differ) {
20065 BV_SET(fields, 0);
20066 }
20067
20068 differ = !BV_ARE_EQUAL(old->options, real_packet->options);
20069 if (differ) {
20070 BV_SET(fields, 1);
20071 }
20072
20073 differ = (old->wl_cb != real_packet->wl_cb);
20074 if (differ) {
20075 BV_SET(fields, 2);
20076 }
20077
20078
20079#ifdef FREECIV_JSON_CONNECTION
20080 field_addr.name = "fields";
20081#endif /* FREECIV_JSON_CONNECTION */
20082 e = 0;
20083 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20084 if (e) {
20085 log_packet_detailed("fields bitvector error detected");
20086 }
20087
20088 if (BV_ISSET(fields, 0)) {
20089 log_packet_detailed(" field 'city_id' has changed");
20090#ifdef FREECIV_JSON_CONNECTION
20091 field_addr.name = "city_id";
20092#endif /* FREECIV_JSON_CONNECTION */
20093 e = 0;
20094 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
20095 if (e) {
20096 log_packet_detailed("'city_id' field error detected");
20097 }
20098 }
20099 if (BV_ISSET(fields, 1)) {
20100 log_packet_detailed(" field 'options' has changed");
20101#ifdef FREECIV_JSON_CONNECTION
20102 field_addr.name = "options";
20103#endif /* FREECIV_JSON_CONNECTION */
20104 e = 0;
20105 e |= DIO_BV_PUT(&dout, &field_addr, packet->options);
20106 if (e) {
20107 log_packet_detailed("'options' field error detected");
20108 }
20109 }
20110 if (BV_ISSET(fields, 2)) {
20111 log_packet_detailed(" field 'wl_cb' has changed");
20112#ifdef FREECIV_JSON_CONNECTION
20113 field_addr.name = "wl_cb";
20114#endif /* FREECIV_JSON_CONNECTION */
20115 e = 0;
20116 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
20117 if (e) {
20118 log_packet_detailed("'wl_cb' field error detected");
20119 }
20120 }
20121
20122 *old = *real_packet;
20123#endif /* FREECIV_DELTA_PROTOCOL */
20124#ifndef FREECIV_DELTA_PROTOCOL
20125#ifdef FREECIV_JSON_CONNECTION
20126 field_addr.name = "city_id";
20127#endif /* FREECIV_JSON_CONNECTION */
20128 e = 0;
20129 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
20130 if (e) {
20131 log_packet_detailed("'city_id' field error detected");
20132 }
20133#ifdef FREECIV_JSON_CONNECTION
20134 field_addr.name = "options";
20135#endif /* FREECIV_JSON_CONNECTION */
20136 e = 0;
20137 e |= DIO_BV_PUT(&dout, &field_addr, packet->options);
20138 if (e) {
20139 log_packet_detailed("'options' field error detected");
20140 }
20141#ifdef FREECIV_JSON_CONNECTION
20142 field_addr.name = "wl_cb";
20143#endif /* FREECIV_JSON_CONNECTION */
20144 e = 0;
20145 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
20146 if (e) {
20147 log_packet_detailed("'wl_cb' field error detected");
20148 }
20149
20150#endif
20152}
20153
20155{
20156 if (!pc->used) {
20157 log_error("WARNING: trying to send data to the closed connection %s",
20159 return -1;
20160 }
20161 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet != NULL, -1,
20162 "Handler for PACKET_CITY_OPTIONS_REQ not installed");
20163 return pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet(pc, packet);
20164}
20165
20167{
20168 struct packet_city_options_req packet, *real_packet = &packet;
20169
20171 real_packet->options = options;
20172 real_packet->wl_cb = wl_cb;
20173
20175}
20176
20177#ifdef FREECIV_DELTA_PROTOCOL
20178#define hash_packet_city_refresh_100 hash_const
20179
20180#define cmp_packet_city_refresh_100 cmp_const
20181
20183#endif /* FREECIV_DELTA_PROTOCOL */
20184
20186{
20187#ifdef FREECIV_DELTA_PROTOCOL
20189 struct packet_city_refresh *old;
20190 struct genhash **hash = pc->phs.received + PACKET_CITY_REFRESH;
20191#endif /* FREECIV_DELTA_PROTOCOL */
20193#ifdef FREECIV_JSON_CONNECTION
20194 struct plocation field_addr;
20195 {
20199 }
20200#endif /* FREECIV_JSON_CONNECTION */
20201
20202#ifdef FREECIV_DELTA_PROTOCOL
20203#ifdef FREECIV_JSON_CONNECTION
20204 field_addr.name = "fields";
20205#endif /* FREECIV_JSON_CONNECTION */
20206 DIO_BV_GET(&din, &field_addr, fields);
20207
20208#else /* FREECIV_DELTA_PROTOCOL */
20209#ifdef FREECIV_JSON_CONNECTION
20210 field_addr.name = "city_id";
20211#endif /* FREECIV_JSON_CONNECTION */
20212 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
20214 }
20215#endif
20216 log_packet_detailed("packet_city_refresh_100: got info about ()");
20217
20218#ifdef FREECIV_DELTA_PROTOCOL
20219 if (NULL == *hash) {
20221 NULL, NULL, NULL, free);
20222 }
20223
20224 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20225 *real_packet = *old;
20226 } else {
20227 log_packet_detailed(" no old info");
20228 memset(real_packet, 0, sizeof(*real_packet));
20229 }
20230
20231 if (BV_ISSET(fields, 0)) {
20232 log_packet_detailed(" got field 'city_id'");
20233#ifdef FREECIV_JSON_CONNECTION
20234 field_addr.name = "city_id";
20235#endif /* FREECIV_JSON_CONNECTION */
20236 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
20238 }
20239 }
20240
20241 if (NULL == old) {
20242 old = fc_malloc(sizeof(*old));
20243 *old = *real_packet;
20244 genhash_insert(*hash, old, old);
20245 } else {
20246 *old = *real_packet;
20247 }
20248
20249#endif /* FREECIV_DELTA_PROTOCOL */
20251}
20252
20253static int send_packet_city_refresh_100(struct connection *pc, const struct packet_city_refresh *packet)
20254{
20255 const struct packet_city_refresh *real_packet = packet;
20256 int e;
20257#ifdef FREECIV_DELTA_PROTOCOL
20259 struct packet_city_refresh *old;
20260 bool differ;
20261 struct genhash **hash = pc->phs.sent + PACKET_CITY_REFRESH;
20262#endif /* FREECIV_DELTA_PROTOCOL */
20264#ifdef FREECIV_JSON_CONNECTION
20265 struct plocation field_addr;
20266 {
20270 }
20271#endif /* FREECIV_JSON_CONNECTION */
20272
20273 log_packet_detailed("packet_city_refresh_100: sending info about ()");
20274
20275#ifdef FREECIV_DELTA_PROTOCOL
20276 if (NULL == *hash) {
20278 NULL, NULL, NULL, free);
20279 }
20280 BV_CLR_ALL(fields);
20281
20282 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20283 old = fc_malloc(sizeof(*old));
20284 *old = *real_packet;
20285 genhash_insert(*hash, old, old);
20286 memset(old, 0, sizeof(*old));
20287 }
20288 differ = (old->city_id != real_packet->city_id);
20289 if (differ) {
20290 BV_SET(fields, 0);
20291 }
20292
20293
20294#ifdef FREECIV_JSON_CONNECTION
20295 field_addr.name = "fields";
20296#endif /* FREECIV_JSON_CONNECTION */
20297 e = 0;
20298 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20299 if (e) {
20300 log_packet_detailed("fields bitvector error detected");
20301 }
20302
20303 if (BV_ISSET(fields, 0)) {
20304 log_packet_detailed(" field 'city_id' has changed");
20305#ifdef FREECIV_JSON_CONNECTION
20306 field_addr.name = "city_id";
20307#endif /* FREECIV_JSON_CONNECTION */
20308 e = 0;
20309 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
20310 if (e) {
20311 log_packet_detailed("'city_id' field error detected");
20312 }
20313 }
20314
20315 *old = *real_packet;
20316#endif /* FREECIV_DELTA_PROTOCOL */
20317#ifndef FREECIV_DELTA_PROTOCOL
20318#ifdef FREECIV_JSON_CONNECTION
20319 field_addr.name = "city_id";
20320#endif /* FREECIV_JSON_CONNECTION */
20321 e = 0;
20322 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
20323 if (e) {
20324 log_packet_detailed("'city_id' field error detected");
20325 }
20326
20327#endif
20329}
20330
20332{
20333 if (!pc->used) {
20334 log_error("WARNING: trying to send data to the closed connection %s",
20336 return -1;
20337 }
20338 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_REFRESH].packet != NULL, -1,
20339 "Handler for PACKET_CITY_REFRESH not installed");
20340 return pc->phs.handlers->send[PACKET_CITY_REFRESH].packet(pc, packet);
20341}
20342
20343int dsend_packet_city_refresh(struct connection *pc, int city_id)
20344{
20345 struct packet_city_refresh packet, *real_packet = &packet;
20346
20348
20350}
20351
20352#ifdef FREECIV_DELTA_PROTOCOL
20353#define hash_packet_city_name_suggestion_req_100 hash_const
20354
20355#define cmp_packet_city_name_suggestion_req_100 cmp_const
20356
20358#endif /* FREECIV_DELTA_PROTOCOL */
20359
20361{
20362#ifdef FREECIV_DELTA_PROTOCOL
20365 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_REQ;
20366#endif /* FREECIV_DELTA_PROTOCOL */
20368#ifdef FREECIV_JSON_CONNECTION
20369 struct plocation field_addr;
20370 {
20374 }
20375#endif /* FREECIV_JSON_CONNECTION */
20376
20377#ifdef FREECIV_DELTA_PROTOCOL
20378#ifdef FREECIV_JSON_CONNECTION
20379 field_addr.name = "fields";
20380#endif /* FREECIV_JSON_CONNECTION */
20381 DIO_BV_GET(&din, &field_addr, fields);
20382
20383#else /* FREECIV_DELTA_PROTOCOL */
20384#ifdef FREECIV_JSON_CONNECTION
20385 field_addr.name = "unit_id";
20386#endif /* FREECIV_JSON_CONNECTION */
20387 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
20389 }
20390#endif
20391 log_packet_detailed("packet_city_name_suggestion_req_100: got info about ()");
20392
20393#ifdef FREECIV_DELTA_PROTOCOL
20394 if (NULL == *hash) {
20396 NULL, NULL, NULL, free);
20397 }
20398
20399 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20400 *real_packet = *old;
20401 } else {
20402 log_packet_detailed(" no old info");
20403 memset(real_packet, 0, sizeof(*real_packet));
20404 }
20405
20406 if (BV_ISSET(fields, 0)) {
20407 log_packet_detailed(" got field 'unit_id'");
20408#ifdef FREECIV_JSON_CONNECTION
20409 field_addr.name = "unit_id";
20410#endif /* FREECIV_JSON_CONNECTION */
20411 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
20413 }
20414 }
20415
20416 if (NULL == old) {
20417 old = fc_malloc(sizeof(*old));
20418 *old = *real_packet;
20419 genhash_insert(*hash, old, old);
20420 } else {
20421 *old = *real_packet;
20422 }
20423
20424#endif /* FREECIV_DELTA_PROTOCOL */
20426}
20427
20429{
20430 const struct packet_city_name_suggestion_req *real_packet = packet;
20431 int e;
20432#ifdef FREECIV_DELTA_PROTOCOL
20435 bool differ;
20436 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_REQ;
20437#endif /* FREECIV_DELTA_PROTOCOL */
20439#ifdef FREECIV_JSON_CONNECTION
20440 struct plocation field_addr;
20441 {
20445 }
20446#endif /* FREECIV_JSON_CONNECTION */
20447
20448 log_packet_detailed("packet_city_name_suggestion_req_100: sending info about ()");
20449
20450#ifdef FREECIV_DELTA_PROTOCOL
20451 if (NULL == *hash) {
20453 NULL, NULL, NULL, free);
20454 }
20455 BV_CLR_ALL(fields);
20456
20457 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20458 old = fc_malloc(sizeof(*old));
20459 *old = *real_packet;
20460 genhash_insert(*hash, old, old);
20461 memset(old, 0, sizeof(*old));
20462 }
20463 differ = (old->unit_id != real_packet->unit_id);
20464 if (differ) {
20465 BV_SET(fields, 0);
20466 }
20467
20468
20469#ifdef FREECIV_JSON_CONNECTION
20470 field_addr.name = "fields";
20471#endif /* FREECIV_JSON_CONNECTION */
20472 e = 0;
20473 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20474 if (e) {
20475 log_packet_detailed("fields bitvector error detected");
20476 }
20477
20478 if (BV_ISSET(fields, 0)) {
20479 log_packet_detailed(" field 'unit_id' has changed");
20480#ifdef FREECIV_JSON_CONNECTION
20481 field_addr.name = "unit_id";
20482#endif /* FREECIV_JSON_CONNECTION */
20483 e = 0;
20484 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
20485 if (e) {
20486 log_packet_detailed("'unit_id' field error detected");
20487 }
20488 }
20489
20490 *old = *real_packet;
20491#endif /* FREECIV_DELTA_PROTOCOL */
20492#ifndef FREECIV_DELTA_PROTOCOL
20493#ifdef FREECIV_JSON_CONNECTION
20494 field_addr.name = "unit_id";
20495#endif /* FREECIV_JSON_CONNECTION */
20496 e = 0;
20497 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
20498 if (e) {
20499 log_packet_detailed("'unit_id' field error detected");
20500 }
20501
20502#endif
20504}
20505
20507{
20508 if (!pc->used) {
20509 log_error("WARNING: trying to send data to the closed connection %s",
20511 return -1;
20512 }
20513 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet != NULL, -1,
20514 "Handler for PACKET_CITY_NAME_SUGGESTION_REQ not installed");
20515 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet(pc, packet);
20516}
20517
20519{
20520 struct packet_city_name_suggestion_req packet, *real_packet = &packet;
20521
20523
20525}
20526
20527#ifdef FREECIV_DELTA_PROTOCOL
20528#define hash_packet_city_name_suggestion_info_100 hash_const
20529
20530#define cmp_packet_city_name_suggestion_info_100 cmp_const
20531
20533#endif /* FREECIV_DELTA_PROTOCOL */
20534
20536{
20537#ifdef FREECIV_DELTA_PROTOCOL
20540 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_INFO;
20541#endif /* FREECIV_DELTA_PROTOCOL */
20543#ifdef FREECIV_JSON_CONNECTION
20544 struct plocation field_addr;
20545 {
20549 }
20550#endif /* FREECIV_JSON_CONNECTION */
20551
20552#ifdef FREECIV_DELTA_PROTOCOL
20553#ifdef FREECIV_JSON_CONNECTION
20554 field_addr.name = "fields";
20555#endif /* FREECIV_JSON_CONNECTION */
20556 DIO_BV_GET(&din, &field_addr, fields);
20557
20558#else /* FREECIV_DELTA_PROTOCOL */
20559#ifdef FREECIV_JSON_CONNECTION
20560 field_addr.name = "unit_id";
20561#endif /* FREECIV_JSON_CONNECTION */
20562 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
20564 }
20565#ifdef FREECIV_JSON_CONNECTION
20566 field_addr.name = "name";
20567#endif /* FREECIV_JSON_CONNECTION */
20568 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20570 }
20571#endif
20572 log_packet_detailed("packet_city_name_suggestion_info_100: got info about ()");
20573
20574#ifdef FREECIV_DELTA_PROTOCOL
20575 if (NULL == *hash) {
20577 NULL, NULL, NULL, free);
20578 }
20579
20580 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20581 *real_packet = *old;
20582 } else {
20583 log_packet_detailed(" no old info");
20584 memset(real_packet, 0, sizeof(*real_packet));
20585 }
20586
20587 if (BV_ISSET(fields, 0)) {
20588 log_packet_detailed(" got field 'unit_id'");
20589#ifdef FREECIV_JSON_CONNECTION
20590 field_addr.name = "unit_id";
20591#endif /* FREECIV_JSON_CONNECTION */
20592 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
20594 }
20595 }
20596 if (BV_ISSET(fields, 1)) {
20597 log_packet_detailed(" got field 'name'");
20598#ifdef FREECIV_JSON_CONNECTION
20599 field_addr.name = "name";
20600#endif /* FREECIV_JSON_CONNECTION */
20601 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20603 }
20604 }
20605
20606 if (NULL == old) {
20607 old = fc_malloc(sizeof(*old));
20608 *old = *real_packet;
20609 genhash_insert(*hash, old, old);
20610 } else {
20611 *old = *real_packet;
20612 }
20613
20614#endif /* FREECIV_DELTA_PROTOCOL */
20616}
20617
20619{
20620 const struct packet_city_name_suggestion_info *real_packet = packet;
20621 int e;
20622#ifdef FREECIV_DELTA_PROTOCOL
20625 bool differ;
20626 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_INFO;
20627#endif /* FREECIV_DELTA_PROTOCOL */
20629#ifdef FREECIV_JSON_CONNECTION
20630 struct plocation field_addr;
20631 {
20635 }
20636#endif /* FREECIV_JSON_CONNECTION */
20637
20638 log_packet_detailed("packet_city_name_suggestion_info_100: sending info about ()");
20639
20640#ifdef FREECIV_DELTA_PROTOCOL
20641 if (NULL == *hash) {
20643 NULL, NULL, NULL, free);
20644 }
20645 BV_CLR_ALL(fields);
20646
20647 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20648 old = fc_malloc(sizeof(*old));
20649 *old = *real_packet;
20650 genhash_insert(*hash, old, old);
20651 memset(old, 0, sizeof(*old));
20652 }
20653 differ = (old->unit_id != real_packet->unit_id);
20654 if (differ) {
20655 BV_SET(fields, 0);
20656 }
20657
20658 differ = (strcmp(old->name, real_packet->name) != 0);
20659 if (differ) {
20660 BV_SET(fields, 1);
20661 }
20662
20663
20664#ifdef FREECIV_JSON_CONNECTION
20665 field_addr.name = "fields";
20666#endif /* FREECIV_JSON_CONNECTION */
20667 e = 0;
20668 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20669 if (e) {
20670 log_packet_detailed("fields bitvector error detected");
20671 }
20672
20673 if (BV_ISSET(fields, 0)) {
20674 log_packet_detailed(" field 'unit_id' has changed");
20675#ifdef FREECIV_JSON_CONNECTION
20676 field_addr.name = "unit_id";
20677#endif /* FREECIV_JSON_CONNECTION */
20678 e = 0;
20679 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
20680 if (e) {
20681 log_packet_detailed("'unit_id' field error detected");
20682 }
20683 }
20684 if (BV_ISSET(fields, 1)) {
20685 log_packet_detailed(" field 'name' has changed");
20686#ifdef FREECIV_JSON_CONNECTION
20687 field_addr.name = "name";
20688#endif /* FREECIV_JSON_CONNECTION */
20689 e = 0;
20690 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20691 if (e) {
20692 log_packet_detailed("'name' field error detected");
20693 }
20694 }
20695
20696 *old = *real_packet;
20697#endif /* FREECIV_DELTA_PROTOCOL */
20698#ifndef FREECIV_DELTA_PROTOCOL
20699#ifdef FREECIV_JSON_CONNECTION
20700 field_addr.name = "unit_id";
20701#endif /* FREECIV_JSON_CONNECTION */
20702 e = 0;
20703 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
20704 if (e) {
20705 log_packet_detailed("'unit_id' field error detected");
20706 }
20707#ifdef FREECIV_JSON_CONNECTION
20708 field_addr.name = "name";
20709#endif /* FREECIV_JSON_CONNECTION */
20710 e = 0;
20711 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20712 if (e) {
20713 log_packet_detailed("'name' field error detected");
20714 }
20715
20716#endif
20718}
20719
20721{
20722 if (!pc->used) {
20723 log_error("WARNING: trying to send data to the closed connection %s",
20725 return -1;
20726 }
20727 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet != NULL, -1,
20728 "Handler for PACKET_CITY_NAME_SUGGESTION_INFO not installed");
20729 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet(pc, packet);
20730}
20731
20738
20739int dsend_packet_city_name_suggestion_info(struct connection *pc, int unit_id, const char *name)
20740{
20741 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
20742
20744 sz_strlcpy(real_packet->name, name);
20745
20747}
20748
20750{
20751 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
20752
20754 sz_strlcpy(real_packet->name, name);
20755
20757}
20758
20759#ifdef FREECIV_DELTA_PROTOCOL
20760#define hash_packet_city_sabotage_list_100 hash_const
20761
20762#define cmp_packet_city_sabotage_list_100 cmp_const
20763
20765#endif /* FREECIV_DELTA_PROTOCOL */
20766
20768{
20769#ifdef FREECIV_DELTA_PROTOCOL
20771 struct packet_city_sabotage_list *old;
20772 struct genhash **hash = pc->phs.received + PACKET_CITY_SABOTAGE_LIST;
20773#endif /* FREECIV_DELTA_PROTOCOL */
20775#ifdef FREECIV_JSON_CONNECTION
20776 struct plocation field_addr;
20777 {
20781 }
20782#endif /* FREECIV_JSON_CONNECTION */
20783
20784#ifdef FREECIV_DELTA_PROTOCOL
20785#ifdef FREECIV_JSON_CONNECTION
20786 field_addr.name = "fields";
20787#endif /* FREECIV_JSON_CONNECTION */
20788 DIO_BV_GET(&din, &field_addr, fields);
20789
20790#else /* FREECIV_DELTA_PROTOCOL */
20791#ifdef FREECIV_JSON_CONNECTION
20792 field_addr.name = "actor_id";
20793#endif /* FREECIV_JSON_CONNECTION */
20794 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
20796 }
20797#ifdef FREECIV_JSON_CONNECTION
20798 field_addr.name = "city_id";
20799#endif /* FREECIV_JSON_CONNECTION */
20800 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
20802 }
20803#ifdef FREECIV_JSON_CONNECTION
20804 field_addr.name = "improvements";
20805#endif /* FREECIV_JSON_CONNECTION */
20806 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20807 RECEIVE_PACKET_FIELD_ERROR(improvements);
20808 }
20809#ifdef FREECIV_JSON_CONNECTION
20810 field_addr.name = "act_id";
20811#endif /* FREECIV_JSON_CONNECTION */
20812 {
20813 int readin;
20814
20815 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20817 }
20818 real_packet->act_id = readin;
20819 }
20820#ifdef FREECIV_JSON_CONNECTION
20821 field_addr.name = "request_kind";
20822#endif /* FREECIV_JSON_CONNECTION */
20823 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
20824 RECEIVE_PACKET_FIELD_ERROR(request_kind);
20825 }
20826#endif
20827 log_packet_detailed("packet_city_sabotage_list_100: got info about ()");
20828
20829#ifdef FREECIV_DELTA_PROTOCOL
20830 if (NULL == *hash) {
20832 NULL, NULL, NULL, free);
20833 }
20834
20835 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20836 *real_packet = *old;
20837 } else {
20838 log_packet_detailed(" no old info");
20839 memset(real_packet, 0, sizeof(*real_packet));
20840 }
20841
20842 if (BV_ISSET(fields, 0)) {
20843 log_packet_detailed(" got field 'actor_id'");
20844#ifdef FREECIV_JSON_CONNECTION
20845 field_addr.name = "actor_id";
20846#endif /* FREECIV_JSON_CONNECTION */
20847 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
20849 }
20850 }
20851 if (BV_ISSET(fields, 1)) {
20852 log_packet_detailed(" got field 'city_id'");
20853#ifdef FREECIV_JSON_CONNECTION
20854 field_addr.name = "city_id";
20855#endif /* FREECIV_JSON_CONNECTION */
20856 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
20858 }
20859 }
20860 if (BV_ISSET(fields, 2)) {
20861 log_packet_detailed(" got field 'improvements'");
20862#ifdef FREECIV_JSON_CONNECTION
20863 field_addr.name = "improvements";
20864#endif /* FREECIV_JSON_CONNECTION */
20865 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20866 RECEIVE_PACKET_FIELD_ERROR(improvements);
20867 }
20868 }
20869 if (BV_ISSET(fields, 3)) {
20870 log_packet_detailed(" got field 'act_id'");
20871#ifdef FREECIV_JSON_CONNECTION
20872 field_addr.name = "act_id";
20873#endif /* FREECIV_JSON_CONNECTION */
20874 {
20875 int readin;
20876
20877 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20879 }
20880 real_packet->act_id = readin;
20881 }
20882 }
20883 if (BV_ISSET(fields, 4)) {
20884 log_packet_detailed(" got field 'request_kind'");
20885#ifdef FREECIV_JSON_CONNECTION
20886 field_addr.name = "request_kind";
20887#endif /* FREECIV_JSON_CONNECTION */
20888 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
20889 RECEIVE_PACKET_FIELD_ERROR(request_kind);
20890 }
20891 }
20892
20893 if (NULL == old) {
20894 old = fc_malloc(sizeof(*old));
20895 *old = *real_packet;
20896 genhash_insert(*hash, old, old);
20897 } else {
20898 *old = *real_packet;
20899 }
20900
20901#endif /* FREECIV_DELTA_PROTOCOL */
20903}
20904
20906{
20907 const struct packet_city_sabotage_list *real_packet = packet;
20908 int e;
20909#ifdef FREECIV_DELTA_PROTOCOL
20911 struct packet_city_sabotage_list *old;
20912 bool differ;
20913 struct genhash **hash = pc->phs.sent + PACKET_CITY_SABOTAGE_LIST;
20914#endif /* FREECIV_DELTA_PROTOCOL */
20916#ifdef FREECIV_JSON_CONNECTION
20917 struct plocation field_addr;
20918 {
20922 }
20923#endif /* FREECIV_JSON_CONNECTION */
20924
20925 log_packet_detailed("packet_city_sabotage_list_100: sending info about ()");
20926
20927#ifdef FREECIV_DELTA_PROTOCOL
20928 if (NULL == *hash) {
20930 NULL, NULL, NULL, free);
20931 }
20932 BV_CLR_ALL(fields);
20933
20934 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20935 old = fc_malloc(sizeof(*old));
20936 *old = *real_packet;
20937 genhash_insert(*hash, old, old);
20938 memset(old, 0, sizeof(*old));
20939 }
20940 differ = (old->actor_id != real_packet->actor_id);
20941 if (differ) {
20942 BV_SET(fields, 0);
20943 }
20944
20945 differ = (old->city_id != real_packet->city_id);
20946 if (differ) {
20947 BV_SET(fields, 1);
20948 }
20949
20950 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
20951 if (differ) {
20952 BV_SET(fields, 2);
20953 }
20954
20955 differ = (old->act_id != real_packet->act_id);
20956 if (differ) {
20957 BV_SET(fields, 3);
20958 }
20959
20960 differ = (old->request_kind != real_packet->request_kind);
20961 if (differ) {
20962 BV_SET(fields, 4);
20963 }
20964
20965
20966#ifdef FREECIV_JSON_CONNECTION
20967 field_addr.name = "fields";
20968#endif /* FREECIV_JSON_CONNECTION */
20969 e = 0;
20970 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20971 if (e) {
20972 log_packet_detailed("fields bitvector error detected");
20973 }
20974
20975 if (BV_ISSET(fields, 0)) {
20976 log_packet_detailed(" field 'actor_id' has changed");
20977#ifdef FREECIV_JSON_CONNECTION
20978 field_addr.name = "actor_id";
20979#endif /* FREECIV_JSON_CONNECTION */
20980 e = 0;
20981 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
20982 if (e) {
20983 log_packet_detailed("'actor_id' field error detected");
20984 }
20985 }
20986 if (BV_ISSET(fields, 1)) {
20987 log_packet_detailed(" field 'city_id' has changed");
20988#ifdef FREECIV_JSON_CONNECTION
20989 field_addr.name = "city_id";
20990#endif /* FREECIV_JSON_CONNECTION */
20991 e = 0;
20992 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
20993 if (e) {
20994 log_packet_detailed("'city_id' field error detected");
20995 }
20996 }
20997 if (BV_ISSET(fields, 2)) {
20998 log_packet_detailed(" field 'improvements' has changed");
20999#ifdef FREECIV_JSON_CONNECTION
21000 field_addr.name = "improvements";
21001#endif /* FREECIV_JSON_CONNECTION */
21002 e = 0;
21003 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
21004 if (e) {
21005 log_packet_detailed("'improvements' field error detected");
21006 }
21007 }
21008 if (BV_ISSET(fields, 3)) {
21009 log_packet_detailed(" field 'act_id' has changed");
21010#ifdef FREECIV_JSON_CONNECTION
21011 field_addr.name = "act_id";
21012#endif /* FREECIV_JSON_CONNECTION */
21013 e = 0;
21014 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
21015 if (e) {
21016 log_packet_detailed("'act_id' field error detected");
21017 }
21018 }
21019 if (BV_ISSET(fields, 4)) {
21020 log_packet_detailed(" field 'request_kind' has changed");
21021#ifdef FREECIV_JSON_CONNECTION
21022 field_addr.name = "request_kind";
21023#endif /* FREECIV_JSON_CONNECTION */
21024 e = 0;
21025 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
21026 if (e) {
21027 log_packet_detailed("'request_kind' field error detected");
21028 }
21029 }
21030
21031 *old = *real_packet;
21032#endif /* FREECIV_DELTA_PROTOCOL */
21033#ifndef FREECIV_DELTA_PROTOCOL
21034#ifdef FREECIV_JSON_CONNECTION
21035 field_addr.name = "actor_id";
21036#endif /* FREECIV_JSON_CONNECTION */
21037 e = 0;
21038 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
21039 if (e) {
21040 log_packet_detailed("'actor_id' field error detected");
21041 }
21042#ifdef FREECIV_JSON_CONNECTION
21043 field_addr.name = "city_id";
21044#endif /* FREECIV_JSON_CONNECTION */
21045 e = 0;
21046 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21047 if (e) {
21048 log_packet_detailed("'city_id' field error detected");
21049 }
21050#ifdef FREECIV_JSON_CONNECTION
21051 field_addr.name = "improvements";
21052#endif /* FREECIV_JSON_CONNECTION */
21053 e = 0;
21054 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
21055 if (e) {
21056 log_packet_detailed("'improvements' field error detected");
21057 }
21058#ifdef FREECIV_JSON_CONNECTION
21059 field_addr.name = "act_id";
21060#endif /* FREECIV_JSON_CONNECTION */
21061 e = 0;
21062 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
21063 if (e) {
21064 log_packet_detailed("'act_id' field error detected");
21065 }
21066#ifdef FREECIV_JSON_CONNECTION
21067 field_addr.name = "request_kind";
21068#endif /* FREECIV_JSON_CONNECTION */
21069 e = 0;
21070 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
21071 if (e) {
21072 log_packet_detailed("'request_kind' field error detected");
21073 }
21074
21075#endif
21077}
21078
21080{
21081 if (!pc->used) {
21082 log_error("WARNING: trying to send data to the closed connection %s",
21084 return -1;
21085 }
21086 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet != NULL, -1,
21087 "Handler for PACKET_CITY_SABOTAGE_LIST not installed");
21088 return pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet(pc, packet);
21089}
21090
21092{
21093 conn_list_iterate(dest, pconn) {
21096}
21097
21098#ifdef FREECIV_DELTA_PROTOCOL
21099#define hash_packet_city_rally_point_100 hash_const
21100
21101#define cmp_packet_city_rally_point_100 cmp_const
21102
21104#endif /* FREECIV_DELTA_PROTOCOL */
21105
21107{
21108#ifdef FREECIV_DELTA_PROTOCOL
21110 struct packet_city_rally_point *old;
21111 struct genhash **hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
21112#endif /* FREECIV_DELTA_PROTOCOL */
21114#ifdef FREECIV_JSON_CONNECTION
21115 struct plocation field_addr;
21116 {
21120 }
21121#endif /* FREECIV_JSON_CONNECTION */
21122
21123#ifdef FREECIV_DELTA_PROTOCOL
21124#ifdef FREECIV_JSON_CONNECTION
21125 field_addr.name = "fields";
21126#endif /* FREECIV_JSON_CONNECTION */
21127 DIO_BV_GET(&din, &field_addr, fields);
21128
21129#else /* FREECIV_DELTA_PROTOCOL */
21130#ifdef FREECIV_JSON_CONNECTION
21131 field_addr.name = "id";
21132#endif /* FREECIV_JSON_CONNECTION */
21133 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
21135 }
21136#ifdef FREECIV_JSON_CONNECTION
21137 field_addr.name = "length";
21138#endif /* FREECIV_JSON_CONNECTION */
21139 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
21141 }
21142#ifdef FREECIV_JSON_CONNECTION
21143 field_addr.name = "persistent";
21144#endif /* FREECIV_JSON_CONNECTION */
21145 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->persistent)) {
21147 }
21148#ifdef FREECIV_JSON_CONNECTION
21149 field_addr.name = "vigilant";
21150#endif /* FREECIV_JSON_CONNECTION */
21151 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
21153 }
21154#ifdef FREECIV_JSON_CONNECTION
21155 field_addr.name = "orders";
21156#endif /* FREECIV_JSON_CONNECTION */
21157 if (real_packet->length > MAX_LEN_ROUTE) {
21158 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
21159 }
21160 {
21161 int i;
21162
21163#ifdef FREECIV_JSON_CONNECTION
21164 /* Enter array. */
21165 field_addr.sub_location = plocation_elem_new(0);
21166#endif /* FREECIV_JSON_CONNECTION */
21167
21168 for (i = 0; i < real_packet->length; i++) {
21169#ifdef FREECIV_JSON_CONNECTION
21170 field_addr.sub_location->number = i;
21171#endif /* FREECIV_JSON_CONNECTION */
21172
21173 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
21175 }
21176 }
21177
21178#ifdef FREECIV_JSON_CONNECTION
21179 /* Exit array. */
21180 FC_FREE(field_addr.sub_location);
21181#endif /* FREECIV_JSON_CONNECTION */
21182 }
21183#endif
21184 log_packet_detailed("packet_city_rally_point_100: got info about ()");
21185
21186#ifdef FREECIV_DELTA_PROTOCOL
21187 if (NULL == *hash) {
21189 NULL, NULL, NULL, free);
21190 }
21191
21192 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21193 *real_packet = *old;
21194 } else {
21195 log_packet_detailed(" no old info");
21196 memset(real_packet, 0, sizeof(*real_packet));
21197 }
21198
21199 if (BV_ISSET(fields, 0)) {
21200 log_packet_detailed(" got field 'id'");
21201#ifdef FREECIV_JSON_CONNECTION
21202 field_addr.name = "id";
21203#endif /* FREECIV_JSON_CONNECTION */
21204 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
21206 }
21207 }
21208 if (BV_ISSET(fields, 1)) {
21209 log_packet_detailed(" got field 'length'");
21210#ifdef FREECIV_JSON_CONNECTION
21211 field_addr.name = "length";
21212#endif /* FREECIV_JSON_CONNECTION */
21213 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
21215 }
21216 }
21217 real_packet->persistent = BV_ISSET(fields, 2);
21218 real_packet->vigilant = BV_ISSET(fields, 3);
21219 if (BV_ISSET(fields, 4)) {
21220 log_packet_detailed(" got field 'orders'");
21221#ifdef FREECIV_JSON_CONNECTION
21222 field_addr.name = "orders";
21223#endif /* FREECIV_JSON_CONNECTION */
21224 if (real_packet->length > MAX_LEN_ROUTE) {
21225 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
21226 }
21227 {
21228 int i;
21229
21230#ifdef FREECIV_JSON_CONNECTION
21231 /* Enter array. */
21232 field_addr.sub_location = plocation_elem_new(0);
21233#endif /* FREECIV_JSON_CONNECTION */
21234
21235 for (i = 0; i < real_packet->length; i++) {
21236#ifdef FREECIV_JSON_CONNECTION
21237 field_addr.sub_location->number = i;
21238#endif /* FREECIV_JSON_CONNECTION */
21239
21240 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
21242 }
21243 }
21244
21245#ifdef FREECIV_JSON_CONNECTION
21246 /* Exit array. */
21247 FC_FREE(field_addr.sub_location);
21248#endif /* FREECIV_JSON_CONNECTION */
21249 }
21250 }
21251
21252 if (NULL == old) {
21253 old = fc_malloc(sizeof(*old));
21254 *old = *real_packet;
21255 genhash_insert(*hash, old, old);
21256 } else {
21257 *old = *real_packet;
21258 }
21259
21260#endif /* FREECIV_DELTA_PROTOCOL */
21262}
21263
21264static int send_packet_city_rally_point_100(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
21265{
21266 const struct packet_city_rally_point *real_packet = packet;
21267 int e;
21268#ifdef FREECIV_DELTA_PROTOCOL
21270 struct packet_city_rally_point *old;
21271 bool differ;
21272 struct genhash **hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
21273 int different = force_to_send;
21274#endif /* FREECIV_DELTA_PROTOCOL */
21276#ifdef FREECIV_JSON_CONNECTION
21277 struct plocation field_addr;
21278 {
21282 }
21283#endif /* FREECIV_JSON_CONNECTION */
21284
21285 log_packet_detailed("packet_city_rally_point_100: sending info about ()");
21286
21287#ifdef FREECIV_DELTA_PROTOCOL
21288 if (NULL == *hash) {
21290 NULL, NULL, NULL, free);
21291 }
21292 BV_CLR_ALL(fields);
21293
21294 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21295 old = fc_malloc(sizeof(*old));
21296 *old = *real_packet;
21297 genhash_insert(*hash, old, old);
21298 memset(old, 0, sizeof(*old));
21299 different = 1; /* Force to send. */
21300 }
21301 differ = (old->id != real_packet->id);
21302 if (differ) {
21303 different++;
21304 BV_SET(fields, 0);
21305 }
21306
21307 differ = (old->length != real_packet->length);
21308 if (differ) {
21309 different++;
21310 BV_SET(fields, 1);
21311 }
21312
21313 differ = (old->persistent != real_packet->persistent);
21314 if (differ) {
21315 different++;
21316 }
21317 if (packet->persistent) {
21318 BV_SET(fields, 2);
21319 }
21320
21321 differ = (old->vigilant != real_packet->vigilant);
21322 if (differ) {
21323 different++;
21324 }
21325 if (packet->vigilant) {
21326 BV_SET(fields, 3);
21327 }
21328
21329 differ = (old->length != real_packet->length);
21330 if (!differ) {
21331 int i;
21332
21333 for (i = 0; i < real_packet->length; i++) {
21334 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
21335 if (differ) {
21336 break;
21337 }
21338 }
21339 }
21340 if (differ) {
21341 different++;
21342 BV_SET(fields, 4);
21343 }
21344
21345 if (different == 0) {
21346 log_packet_detailed(" no change -> discard");
21348 }
21349
21350#ifdef FREECIV_JSON_CONNECTION
21351 field_addr.name = "fields";
21352#endif /* FREECIV_JSON_CONNECTION */
21353 e = 0;
21354 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21355 if (e) {
21356 log_packet_detailed("fields bitvector error detected");
21357 }
21358
21359 if (BV_ISSET(fields, 0)) {
21360 log_packet_detailed(" field 'id' has changed");
21361#ifdef FREECIV_JSON_CONNECTION
21362 field_addr.name = "id";
21363#endif /* FREECIV_JSON_CONNECTION */
21364 e = 0;
21365 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
21366 if (e) {
21367 log_packet_detailed("'id' field error detected");
21368 }
21369 }
21370 if (BV_ISSET(fields, 1)) {
21371 log_packet_detailed(" field 'length' has changed");
21372#ifdef FREECIV_JSON_CONNECTION
21373 field_addr.name = "length";
21374#endif /* FREECIV_JSON_CONNECTION */
21375 e = 0;
21376 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
21377 if (e) {
21378 log_packet_detailed("'length' field error detected");
21379 }
21380 }
21381 /* field 2 is folded into the header */
21382 /* field 3 is folded into the header */
21383 if (BV_ISSET(fields, 4)) {
21384 log_packet_detailed(" field 'orders' has changed");
21385#ifdef FREECIV_JSON_CONNECTION
21386 field_addr.name = "orders";
21387#endif /* FREECIV_JSON_CONNECTION */
21388 e = 0;
21389 {
21390 int i;
21391
21392#ifdef FREECIV_JSON_CONNECTION
21393 /* Create the array. */
21394 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
21395
21396 /* Enter the array. */
21397 field_addr.sub_location = plocation_elem_new(0);
21398#endif /* FREECIV_JSON_CONNECTION */
21399
21400 for (i = 0; i < real_packet->length; i++) {
21401#ifdef FREECIV_JSON_CONNECTION
21402 /* Next array element. */
21403 field_addr.sub_location->number = i;
21404#endif /* FREECIV_JSON_CONNECTION */
21405
21406 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
21407 }
21408
21409#ifdef FREECIV_JSON_CONNECTION
21410 /* Exit array. */
21411 FC_FREE(field_addr.sub_location);
21412#endif /* FREECIV_JSON_CONNECTION */
21413 }
21414 if (e) {
21415 log_packet_detailed("'orders' field error detected");
21416 }
21417 }
21418
21419 *old = *real_packet;
21420#endif /* FREECIV_DELTA_PROTOCOL */
21421#ifndef FREECIV_DELTA_PROTOCOL
21422#ifdef FREECIV_JSON_CONNECTION
21423 field_addr.name = "id";
21424#endif /* FREECIV_JSON_CONNECTION */
21425 e = 0;
21426 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
21427 if (e) {
21428 log_packet_detailed("'id' field error detected");
21429 }
21430#ifdef FREECIV_JSON_CONNECTION
21431 field_addr.name = "length";
21432#endif /* FREECIV_JSON_CONNECTION */
21433 e = 0;
21434 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
21435 if (e) {
21436 log_packet_detailed("'length' field error detected");
21437 }
21438#ifdef FREECIV_JSON_CONNECTION
21439 field_addr.name = "persistent";
21440#endif /* FREECIV_JSON_CONNECTION */
21441 e = 0;
21442 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->persistent);
21443 if (e) {
21444 log_packet_detailed("'persistent' field error detected");
21445 }
21446#ifdef FREECIV_JSON_CONNECTION
21447 field_addr.name = "vigilant";
21448#endif /* FREECIV_JSON_CONNECTION */
21449 e = 0;
21450 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
21451 if (e) {
21452 log_packet_detailed("'vigilant' field error detected");
21453 }
21454#ifdef FREECIV_JSON_CONNECTION
21455 field_addr.name = "orders";
21456#endif /* FREECIV_JSON_CONNECTION */
21457 e = 0;
21458 {
21459 int i;
21460
21461#ifdef FREECIV_JSON_CONNECTION
21462 /* Create the array. */
21463 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
21464
21465 /* Enter the array. */
21466 field_addr.sub_location = plocation_elem_new(0);
21467#endif /* FREECIV_JSON_CONNECTION */
21468
21469 for (i = 0; i < real_packet->length; i++) {
21470#ifdef FREECIV_JSON_CONNECTION
21471 /* Next array element. */
21472 field_addr.sub_location->number = i;
21473#endif /* FREECIV_JSON_CONNECTION */
21474
21475 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
21476 }
21477
21478#ifdef FREECIV_JSON_CONNECTION
21479 /* Exit array. */
21480 FC_FREE(field_addr.sub_location);
21481#endif /* FREECIV_JSON_CONNECTION */
21482 }
21483 if (e) {
21484 log_packet_detailed("'orders' field error detected");
21485 }
21486
21487#endif
21489}
21490
21491int send_packet_city_rally_point(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
21492{
21493 if (!pc->used) {
21494 log_error("WARNING: trying to send data to the closed connection %s",
21496 return -1;
21497 }
21498 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send != NULL, -1,
21499 "Handler for PACKET_CITY_RALLY_POINT not installed");
21500 return pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send(pc, packet, force_to_send);
21501}
21502
21503void lsend_packet_city_rally_point(struct conn_list *dest, const struct packet_city_rally_point *packet, bool force_to_send)
21504{
21505 conn_list_iterate(dest, pconn) {
21506 send_packet_city_rally_point(pconn, packet, force_to_send);
21508}
21509
21510#ifdef FREECIV_DELTA_PROTOCOL
21511#define hash_packet_worker_task_100 hash_const
21512
21513#define cmp_packet_worker_task_100 cmp_const
21514
21516#endif /* FREECIV_DELTA_PROTOCOL */
21517
21519{
21520#ifdef FREECIV_DELTA_PROTOCOL
21522 struct packet_worker_task *old;
21523 struct genhash **hash = pc->phs.received + PACKET_WORKER_TASK;
21524#endif /* FREECIV_DELTA_PROTOCOL */
21526#ifdef FREECIV_JSON_CONNECTION
21527 struct plocation field_addr;
21528 {
21532 }
21533#endif /* FREECIV_JSON_CONNECTION */
21534
21535#ifdef FREECIV_DELTA_PROTOCOL
21536#ifdef FREECIV_JSON_CONNECTION
21537 field_addr.name = "fields";
21538#endif /* FREECIV_JSON_CONNECTION */
21539 DIO_BV_GET(&din, &field_addr, fields);
21540
21541#else /* FREECIV_DELTA_PROTOCOL */
21542#ifdef FREECIV_JSON_CONNECTION
21543 field_addr.name = "city_id";
21544#endif /* FREECIV_JSON_CONNECTION */
21545 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21547 }
21548#ifdef FREECIV_JSON_CONNECTION
21549 field_addr.name = "tile_id";
21550#endif /* FREECIV_JSON_CONNECTION */
21551 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
21553 }
21554#ifdef FREECIV_JSON_CONNECTION
21555 field_addr.name = "activity";
21556#endif /* FREECIV_JSON_CONNECTION */
21557 {
21558 int readin;
21559
21560 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
21562 }
21563 real_packet->activity = readin;
21564 }
21565#ifdef FREECIV_JSON_CONNECTION
21566 field_addr.name = "tgt";
21567#endif /* FREECIV_JSON_CONNECTION */
21568 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
21570 }
21571#ifdef FREECIV_JSON_CONNECTION
21572 field_addr.name = "want";
21573#endif /* FREECIV_JSON_CONNECTION */
21574 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
21576 }
21577#endif
21578 log_packet_detailed("packet_worker_task_100: got info about ()");
21579
21580#ifdef FREECIV_DELTA_PROTOCOL
21581 if (NULL == *hash) {
21583 NULL, NULL, NULL, free);
21584 }
21585
21586 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21587 *real_packet = *old;
21588 } else {
21589 log_packet_detailed(" no old info");
21590 memset(real_packet, 0, sizeof(*real_packet));
21591 }
21592
21593 if (BV_ISSET(fields, 0)) {
21594 log_packet_detailed(" got field 'city_id'");
21595#ifdef FREECIV_JSON_CONNECTION
21596 field_addr.name = "city_id";
21597#endif /* FREECIV_JSON_CONNECTION */
21598 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21600 }
21601 }
21602 if (BV_ISSET(fields, 1)) {
21603 log_packet_detailed(" got field 'tile_id'");
21604#ifdef FREECIV_JSON_CONNECTION
21605 field_addr.name = "tile_id";
21606#endif /* FREECIV_JSON_CONNECTION */
21607 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
21609 }
21610 }
21611 if (BV_ISSET(fields, 2)) {
21612 log_packet_detailed(" got field 'activity'");
21613#ifdef FREECIV_JSON_CONNECTION
21614 field_addr.name = "activity";
21615#endif /* FREECIV_JSON_CONNECTION */
21616 {
21617 int readin;
21618
21619 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
21621 }
21622 real_packet->activity = readin;
21623 }
21624 }
21625 if (BV_ISSET(fields, 3)) {
21626 log_packet_detailed(" got field 'tgt'");
21627#ifdef FREECIV_JSON_CONNECTION
21628 field_addr.name = "tgt";
21629#endif /* FREECIV_JSON_CONNECTION */
21630 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
21632 }
21633 }
21634 if (BV_ISSET(fields, 4)) {
21635 log_packet_detailed(" got field 'want'");
21636#ifdef FREECIV_JSON_CONNECTION
21637 field_addr.name = "want";
21638#endif /* FREECIV_JSON_CONNECTION */
21639 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
21641 }
21642 }
21643
21644 if (NULL == old) {
21645 old = fc_malloc(sizeof(*old));
21646 *old = *real_packet;
21647 genhash_insert(*hash, old, old);
21648 } else {
21649 *old = *real_packet;
21650 }
21651
21652#endif /* FREECIV_DELTA_PROTOCOL */
21654}
21655
21656static int send_packet_worker_task_100(struct connection *pc, const struct packet_worker_task *packet)
21657{
21658 const struct packet_worker_task *real_packet = packet;
21659 int e;
21660#ifdef FREECIV_DELTA_PROTOCOL
21662 struct packet_worker_task *old;
21663 bool differ;
21664 struct genhash **hash = pc->phs.sent + PACKET_WORKER_TASK;
21665#endif /* FREECIV_DELTA_PROTOCOL */
21667#ifdef FREECIV_JSON_CONNECTION
21668 struct plocation field_addr;
21669 {
21673 }
21674#endif /* FREECIV_JSON_CONNECTION */
21675
21676 log_packet_detailed("packet_worker_task_100: sending info about ()");
21677
21678#ifdef FREECIV_DELTA_PROTOCOL
21679 if (NULL == *hash) {
21681 NULL, NULL, NULL, free);
21682 }
21683 BV_CLR_ALL(fields);
21684
21685 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21686 old = fc_malloc(sizeof(*old));
21687 *old = *real_packet;
21688 genhash_insert(*hash, old, old);
21689 memset(old, 0, sizeof(*old));
21690 }
21691 differ = (old->city_id != real_packet->city_id);
21692 if (differ) {
21693 BV_SET(fields, 0);
21694 }
21695
21696 differ = (old->tile_id != real_packet->tile_id);
21697 if (differ) {
21698 BV_SET(fields, 1);
21699 }
21700
21701 differ = (old->activity != real_packet->activity);
21702 if (differ) {
21703 BV_SET(fields, 2);
21704 }
21705
21706 differ = (old->tgt != real_packet->tgt);
21707 if (differ) {
21708 BV_SET(fields, 3);
21709 }
21710
21711 differ = (old->want != real_packet->want);
21712 if (differ) {
21713 BV_SET(fields, 4);
21714 }
21715
21716
21717#ifdef FREECIV_JSON_CONNECTION
21718 field_addr.name = "fields";
21719#endif /* FREECIV_JSON_CONNECTION */
21720 e = 0;
21721 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21722 if (e) {
21723 log_packet_detailed("fields bitvector error detected");
21724 }
21725
21726 if (BV_ISSET(fields, 0)) {
21727 log_packet_detailed(" field 'city_id' has changed");
21728#ifdef FREECIV_JSON_CONNECTION
21729 field_addr.name = "city_id";
21730#endif /* FREECIV_JSON_CONNECTION */
21731 e = 0;
21732 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21733 if (e) {
21734 log_packet_detailed("'city_id' field error detected");
21735 }
21736 }
21737 if (BV_ISSET(fields, 1)) {
21738 log_packet_detailed(" field 'tile_id' has changed");
21739#ifdef FREECIV_JSON_CONNECTION
21740 field_addr.name = "tile_id";
21741#endif /* FREECIV_JSON_CONNECTION */
21742 e = 0;
21743 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
21744 if (e) {
21745 log_packet_detailed("'tile_id' field error detected");
21746 }
21747 }
21748 if (BV_ISSET(fields, 2)) {
21749 log_packet_detailed(" field 'activity' has changed");
21750#ifdef FREECIV_JSON_CONNECTION
21751 field_addr.name = "activity";
21752#endif /* FREECIV_JSON_CONNECTION */
21753 e = 0;
21754 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
21755 if (e) {
21756 log_packet_detailed("'activity' field error detected");
21757 }
21758 }
21759 if (BV_ISSET(fields, 3)) {
21760 log_packet_detailed(" field 'tgt' has changed");
21761#ifdef FREECIV_JSON_CONNECTION
21762 field_addr.name = "tgt";
21763#endif /* FREECIV_JSON_CONNECTION */
21764 e = 0;
21765 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
21766 if (e) {
21767 log_packet_detailed("'tgt' field error detected");
21768 }
21769 }
21770 if (BV_ISSET(fields, 4)) {
21771 log_packet_detailed(" field 'want' has changed");
21772#ifdef FREECIV_JSON_CONNECTION
21773 field_addr.name = "want";
21774#endif /* FREECIV_JSON_CONNECTION */
21775 e = 0;
21776 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
21777 if (e) {
21778 log_packet_detailed("'want' field error detected");
21779 }
21780 }
21781
21782 *old = *real_packet;
21783#endif /* FREECIV_DELTA_PROTOCOL */
21784#ifndef FREECIV_DELTA_PROTOCOL
21785#ifdef FREECIV_JSON_CONNECTION
21786 field_addr.name = "city_id";
21787#endif /* FREECIV_JSON_CONNECTION */
21788 e = 0;
21789 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21790 if (e) {
21791 log_packet_detailed("'city_id' field error detected");
21792 }
21793#ifdef FREECIV_JSON_CONNECTION
21794 field_addr.name = "tile_id";
21795#endif /* FREECIV_JSON_CONNECTION */
21796 e = 0;
21797 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
21798 if (e) {
21799 log_packet_detailed("'tile_id' field error detected");
21800 }
21801#ifdef FREECIV_JSON_CONNECTION
21802 field_addr.name = "activity";
21803#endif /* FREECIV_JSON_CONNECTION */
21804 e = 0;
21805 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
21806 if (e) {
21807 log_packet_detailed("'activity' field error detected");
21808 }
21809#ifdef FREECIV_JSON_CONNECTION
21810 field_addr.name = "tgt";
21811#endif /* FREECIV_JSON_CONNECTION */
21812 e = 0;
21813 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
21814 if (e) {
21815 log_packet_detailed("'tgt' field error detected");
21816 }
21817#ifdef FREECIV_JSON_CONNECTION
21818 field_addr.name = "want";
21819#endif /* FREECIV_JSON_CONNECTION */
21820 e = 0;
21821 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
21822 if (e) {
21823 log_packet_detailed("'want' field error detected");
21824 }
21825
21826#endif
21828}
21829
21831{
21832 if (!pc->used) {
21833 log_error("WARNING: trying to send data to the closed connection %s",
21835 return -1;
21836 }
21837 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WORKER_TASK].packet != NULL, -1,
21838 "Handler for PACKET_WORKER_TASK not installed");
21839 return pc->phs.handlers->send[PACKET_WORKER_TASK].packet(pc, packet);
21840}
21841
21842void lsend_packet_worker_task(struct conn_list *dest, const struct packet_worker_task *packet)
21843{
21844 conn_list_iterate(dest, pconn) {
21847}
21848
21849#ifdef FREECIV_DELTA_PROTOCOL
21850#define hash_packet_player_remove_100 hash_const
21851
21852#define cmp_packet_player_remove_100 cmp_const
21853
21855#endif /* FREECIV_DELTA_PROTOCOL */
21856
21858{
21859#ifdef FREECIV_DELTA_PROTOCOL
21861 struct packet_player_remove *old;
21862 struct genhash **hash = pc->phs.received + PACKET_PLAYER_REMOVE;
21863#endif /* FREECIV_DELTA_PROTOCOL */
21865#ifdef FREECIV_JSON_CONNECTION
21866 struct plocation field_addr;
21867 {
21871 }
21872#endif /* FREECIV_JSON_CONNECTION */
21873
21874#ifdef FREECIV_DELTA_PROTOCOL
21875#ifdef FREECIV_JSON_CONNECTION
21876 field_addr.name = "fields";
21877#endif /* FREECIV_JSON_CONNECTION */
21878 DIO_BV_GET(&din, &field_addr, fields);
21879
21880#else /* FREECIV_DELTA_PROTOCOL */
21881#ifdef FREECIV_JSON_CONNECTION
21882 field_addr.name = "playerno";
21883#endif /* FREECIV_JSON_CONNECTION */
21884 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
21886 }
21887#endif
21888 log_packet_detailed("packet_player_remove_100: got info about ()");
21889
21890#ifdef FREECIV_DELTA_PROTOCOL
21891 if (NULL == *hash) {
21893 NULL, NULL, NULL, free);
21894 }
21895
21896 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21897 *real_packet = *old;
21898 } else {
21899 log_packet_detailed(" no old info");
21900 memset(real_packet, 0, sizeof(*real_packet));
21901 }
21902
21903 if (BV_ISSET(fields, 0)) {
21904 log_packet_detailed(" got field 'playerno'");
21905#ifdef FREECIV_JSON_CONNECTION
21906 field_addr.name = "playerno";
21907#endif /* FREECIV_JSON_CONNECTION */
21908 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
21910 }
21911 }
21912
21913 if (NULL == old) {
21914 old = fc_malloc(sizeof(*old));
21915 *old = *real_packet;
21916 genhash_insert(*hash, old, old);
21917 } else {
21918 *old = *real_packet;
21919 }
21920
21921 hash = pc->phs.received + PACKET_PLAYER_INFO;
21922 if (NULL != *hash) {
21924 }
21925
21926#endif /* FREECIV_DELTA_PROTOCOL */
21928}
21929
21930static int send_packet_player_remove_100(struct connection *pc, const struct packet_player_remove *packet)
21931{
21932 const struct packet_player_remove *real_packet = packet;
21933 int e;
21934#ifdef FREECIV_DELTA_PROTOCOL
21936 struct packet_player_remove *old;
21937 bool differ;
21938 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_REMOVE;
21939#endif /* FREECIV_DELTA_PROTOCOL */
21941#ifdef FREECIV_JSON_CONNECTION
21942 struct plocation field_addr;
21943 {
21947 }
21948#endif /* FREECIV_JSON_CONNECTION */
21949
21950 log_packet_detailed("packet_player_remove_100: sending info about ()");
21951
21952#ifdef FREECIV_DELTA_PROTOCOL
21953 if (NULL == *hash) {
21955 NULL, NULL, NULL, free);
21956 }
21957 BV_CLR_ALL(fields);
21958
21959 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21960 old = fc_malloc(sizeof(*old));
21961 *old = *real_packet;
21962 genhash_insert(*hash, old, old);
21963 memset(old, 0, sizeof(*old));
21964 }
21965 differ = (old->playerno != real_packet->playerno);
21966 if (differ) {
21967 BV_SET(fields, 0);
21968 }
21969
21970
21971#ifdef FREECIV_JSON_CONNECTION
21972 field_addr.name = "fields";
21973#endif /* FREECIV_JSON_CONNECTION */
21974 e = 0;
21975 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21976 if (e) {
21977 log_packet_detailed("fields bitvector error detected");
21978 }
21979
21980 if (BV_ISSET(fields, 0)) {
21981 log_packet_detailed(" field 'playerno' has changed");
21982#ifdef FREECIV_JSON_CONNECTION
21983 field_addr.name = "playerno";
21984#endif /* FREECIV_JSON_CONNECTION */
21985 e = 0;
21986 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
21987 if (e) {
21988 log_packet_detailed("'playerno' field error detected");
21989 }
21990 }
21991
21992 *old = *real_packet;
21993
21994 hash = pc->phs.sent + PACKET_PLAYER_INFO;
21995 if (NULL != *hash) {
21997 }
21998#endif /* FREECIV_DELTA_PROTOCOL */
21999#ifndef FREECIV_DELTA_PROTOCOL
22000#ifdef FREECIV_JSON_CONNECTION
22001 field_addr.name = "playerno";
22002#endif /* FREECIV_JSON_CONNECTION */
22003 e = 0;
22004 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
22005 if (e) {
22006 log_packet_detailed("'playerno' field error detected");
22007 }
22008
22009#endif
22011}
22012
22014{
22015 if (!pc->used) {
22016 log_error("WARNING: trying to send data to the closed connection %s",
22018 return -1;
22019 }
22020 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet != NULL, -1,
22021 "Handler for PACKET_PLAYER_REMOVE not installed");
22022 return pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet(pc, packet);
22023}
22024
22025int dsend_packet_player_remove(struct connection *pc, int playerno)
22026{
22027 struct packet_player_remove packet, *real_packet = &packet;
22028
22030
22032}
22033
22034#ifdef FREECIV_DELTA_PROTOCOL
22036{
22037 const struct packet_player_info *key = (const struct packet_player_info *) vkey;
22038 genhash_val_t result = 0;
22039
22040 result += key->playerno;
22041
22042 result &= 0xFFFFFFFF;
22043 return result;
22044}
22045
22046static bool cmp_packet_player_info_100(const void *vkey1, const void *vkey2)
22047{
22048 const struct packet_player_info *old = (const struct packet_player_info *) vkey1;
22049 const struct packet_player_info *real_packet = (const struct packet_player_info *) vkey2;
22050 bool differ;
22051
22052 differ = (old->playerno != real_packet->playerno);
22053
22054 return !differ;
22055}
22057#endif /* FREECIV_DELTA_PROTOCOL */
22058
22060{
22061#ifdef FREECIV_DELTA_PROTOCOL
22063 struct packet_player_info *old;
22064 struct genhash **hash = pc->phs.received + PACKET_PLAYER_INFO;
22065#endif /* FREECIV_DELTA_PROTOCOL */
22067#ifdef FREECIV_JSON_CONNECTION
22068 struct plocation field_addr;
22069 {
22073 }
22074#endif /* FREECIV_JSON_CONNECTION */
22075
22076#ifdef FREECIV_DELTA_PROTOCOL
22077#ifdef FREECIV_JSON_CONNECTION
22078 field_addr.name = "fields";
22079#endif /* FREECIV_JSON_CONNECTION */
22080 DIO_BV_GET(&din, &field_addr, fields);
22081#ifdef FREECIV_JSON_CONNECTION
22082 field_addr.name = "playerno";
22083#endif /* FREECIV_JSON_CONNECTION */
22084 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
22086 }
22087
22088#else /* FREECIV_DELTA_PROTOCOL */
22089#ifdef FREECIV_JSON_CONNECTION
22090 field_addr.name = "playerno";
22091#endif /* FREECIV_JSON_CONNECTION */
22092 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
22094 }
22095#ifdef FREECIV_JSON_CONNECTION
22096 field_addr.name = "name";
22097#endif /* FREECIV_JSON_CONNECTION */
22098 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
22100 }
22101#ifdef FREECIV_JSON_CONNECTION
22102 field_addr.name = "username";
22103#endif /* FREECIV_JSON_CONNECTION */
22104 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
22106 }
22107#ifdef FREECIV_JSON_CONNECTION
22108 field_addr.name = "unassigned_user";
22109#endif /* FREECIV_JSON_CONNECTION */
22110 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unassigned_user)) {
22111 RECEIVE_PACKET_FIELD_ERROR(unassigned_user);
22112 }
22113#ifdef FREECIV_JSON_CONNECTION
22114 field_addr.name = "score";
22115#endif /* FREECIV_JSON_CONNECTION */
22116 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
22118 }
22119#ifdef FREECIV_JSON_CONNECTION
22120 field_addr.name = "is_male";
22121#endif /* FREECIV_JSON_CONNECTION */
22122 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
22124 }
22125#ifdef FREECIV_JSON_CONNECTION
22126 field_addr.name = "was_created";
22127#endif /* FREECIV_JSON_CONNECTION */
22128 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_created)) {
22129 RECEIVE_PACKET_FIELD_ERROR(was_created);
22130 }
22131#ifdef FREECIV_JSON_CONNECTION
22132 field_addr.name = "government";
22133#endif /* FREECIV_JSON_CONNECTION */
22134 {
22135 int readin;
22136
22137 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
22139 }
22140 real_packet->government = readin;
22141 }
22142#ifdef FREECIV_JSON_CONNECTION
22143 field_addr.name = "target_government";
22144#endif /* FREECIV_JSON_CONNECTION */
22145 {
22146 int readin;
22147
22148 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
22149 RECEIVE_PACKET_FIELD_ERROR(target_government);
22150 }
22151 real_packet->target_government = readin;
22152 }
22153#ifdef FREECIV_JSON_CONNECTION
22154 field_addr.name = "real_embassy";
22155#endif /* FREECIV_JSON_CONNECTION */
22156 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
22157 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
22158 }
22159#ifdef FREECIV_JSON_CONNECTION
22160 field_addr.name = "mood";
22161#endif /* FREECIV_JSON_CONNECTION */
22162 {
22163 int readin;
22164
22165 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22167 }
22168 real_packet->mood = readin;
22169 }
22170#ifdef FREECIV_JSON_CONNECTION
22171 field_addr.name = "style";
22172#endif /* FREECIV_JSON_CONNECTION */
22173 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
22175 }
22176#ifdef FREECIV_JSON_CONNECTION
22177 field_addr.name = "music_style";
22178#endif /* FREECIV_JSON_CONNECTION */
22179 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
22181 }
22182#ifdef FREECIV_JSON_CONNECTION
22183 field_addr.name = "nation";
22184#endif /* FREECIV_JSON_CONNECTION */
22185 {
22186 int readin;
22187
22188 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
22190 }
22191 real_packet->nation = readin;
22192 }
22193#ifdef FREECIV_JSON_CONNECTION
22194 field_addr.name = "team";
22195#endif /* FREECIV_JSON_CONNECTION */
22196 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
22198 }
22199#ifdef FREECIV_JSON_CONNECTION
22200 field_addr.name = "is_ready";
22201#endif /* FREECIV_JSON_CONNECTION */
22202 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
22204 }
22205#ifdef FREECIV_JSON_CONNECTION
22206 field_addr.name = "phase_done";
22207#endif /* FREECIV_JSON_CONNECTION */
22208 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
22209 RECEIVE_PACKET_FIELD_ERROR(phase_done);
22210 }
22211#ifdef FREECIV_JSON_CONNECTION
22212 field_addr.name = "nturns_idle";
22213#endif /* FREECIV_JSON_CONNECTION */
22214 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
22215 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
22216 }
22217#ifdef FREECIV_JSON_CONNECTION
22218 field_addr.name = "turns_alive";
22219#endif /* FREECIV_JSON_CONNECTION */
22220 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
22221 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
22222 }
22223#ifdef FREECIV_JSON_CONNECTION
22224 field_addr.name = "is_alive";
22225#endif /* FREECIV_JSON_CONNECTION */
22226 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
22228 }
22229#ifdef FREECIV_JSON_CONNECTION
22230 field_addr.name = "autoselect_weight";
22231#endif /* FREECIV_JSON_CONNECTION */
22232 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
22233 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
22234 }
22235#ifdef FREECIV_JSON_CONNECTION
22236 field_addr.name = "gold";
22237#endif /* FREECIV_JSON_CONNECTION */
22238 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
22240 }
22241#ifdef FREECIV_JSON_CONNECTION
22242 field_addr.name = "tax";
22243#endif /* FREECIV_JSON_CONNECTION */
22244 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
22246 }
22247#ifdef FREECIV_JSON_CONNECTION
22248 field_addr.name = "science";
22249#endif /* FREECIV_JSON_CONNECTION */
22250 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
22252 }
22253#ifdef FREECIV_JSON_CONNECTION
22254 field_addr.name = "luxury";
22255#endif /* FREECIV_JSON_CONNECTION */
22256 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
22258 }
22259#ifdef FREECIV_JSON_CONNECTION
22260 field_addr.name = "infrapoints";
22261#endif /* FREECIV_JSON_CONNECTION */
22262 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
22263 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
22264 }
22265#ifdef FREECIV_JSON_CONNECTION
22266 field_addr.name = "tech_upkeep_16";
22267#endif /* FREECIV_JSON_CONNECTION */
22268 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_16)) {
22269 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_16);
22270 }
22271#ifdef FREECIV_JSON_CONNECTION
22272 field_addr.name = "science_cost";
22273#endif /* FREECIV_JSON_CONNECTION */
22274 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
22275 RECEIVE_PACKET_FIELD_ERROR(science_cost);
22276 }
22277#ifdef FREECIV_JSON_CONNECTION
22278 field_addr.name = "is_connected";
22279#endif /* FREECIV_JSON_CONNECTION */
22280 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_connected)) {
22281 RECEIVE_PACKET_FIELD_ERROR(is_connected);
22282 }
22283#ifdef FREECIV_JSON_CONNECTION
22284 field_addr.name = "revolution_finishes";
22285#endif /* FREECIV_JSON_CONNECTION */
22286 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
22287 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
22288 }
22289#ifdef FREECIV_JSON_CONNECTION
22290 field_addr.name = "ai_skill_level";
22291#endif /* FREECIV_JSON_CONNECTION */
22292 {
22293 int readin;
22294
22295 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22296 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
22297 }
22298 real_packet->ai_skill_level = readin;
22299 }
22300#ifdef FREECIV_JSON_CONNECTION
22301 field_addr.name = "barbarian_type";
22302#endif /* FREECIV_JSON_CONNECTION */
22303 {
22304 int readin;
22305
22306 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22307 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
22308 }
22309 real_packet->barbarian_type = readin;
22310 }
22311#ifdef FREECIV_JSON_CONNECTION
22312 field_addr.name = "gives_shared_vision";
22313#endif /* FREECIV_JSON_CONNECTION */
22314 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
22316 }
22317#ifdef FREECIV_JSON_CONNECTION
22318 field_addr.name = "gives_shared_tiles";
22319#endif /* FREECIV_JSON_CONNECTION */
22320 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
22322 }
22323#ifdef FREECIV_JSON_CONNECTION
22324 field_addr.name = "history";
22325#endif /* FREECIV_JSON_CONNECTION */
22326 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
22328 }
22329#ifdef FREECIV_JSON_CONNECTION
22330 field_addr.name = "culture";
22331#endif /* FREECIV_JSON_CONNECTION */
22332 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
22334 }
22335#ifdef FREECIV_JSON_CONNECTION
22336 field_addr.name = "love";
22337#endif /* FREECIV_JSON_CONNECTION */
22338 {
22339 int i;
22340
22341#ifdef FREECIV_JSON_CONNECTION
22342 /* Enter array. */
22343 field_addr.sub_location = plocation_elem_new(0);
22344#endif /* FREECIV_JSON_CONNECTION */
22345
22346 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
22347#ifdef FREECIV_JSON_CONNECTION
22348 field_addr.sub_location->number = i;
22349#endif /* FREECIV_JSON_CONNECTION */
22350
22351 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
22353 }
22354 }
22355
22356#ifdef FREECIV_JSON_CONNECTION
22357 /* Exit array. */
22358 FC_FREE(field_addr.sub_location);
22359#endif /* FREECIV_JSON_CONNECTION */
22360 }
22361#ifdef FREECIV_JSON_CONNECTION
22362 field_addr.name = "color_valid";
22363#endif /* FREECIV_JSON_CONNECTION */
22364 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_valid)) {
22365 RECEIVE_PACKET_FIELD_ERROR(color_valid);
22366 }
22367#ifdef FREECIV_JSON_CONNECTION
22368 field_addr.name = "color_changeable";
22369#endif /* FREECIV_JSON_CONNECTION */
22370 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_changeable)) {
22371 RECEIVE_PACKET_FIELD_ERROR(color_changeable);
22372 }
22373#ifdef FREECIV_JSON_CONNECTION
22374 field_addr.name = "color_red";
22375#endif /* FREECIV_JSON_CONNECTION */
22376 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
22377 RECEIVE_PACKET_FIELD_ERROR(color_red);
22378 }
22379#ifdef FREECIV_JSON_CONNECTION
22380 field_addr.name = "color_green";
22381#endif /* FREECIV_JSON_CONNECTION */
22382 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
22383 RECEIVE_PACKET_FIELD_ERROR(color_green);
22384 }
22385#ifdef FREECIV_JSON_CONNECTION
22386 field_addr.name = "color_blue";
22387#endif /* FREECIV_JSON_CONNECTION */
22388 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
22389 RECEIVE_PACKET_FIELD_ERROR(color_blue);
22390 }
22391#ifdef FREECIV_JSON_CONNECTION
22392 field_addr.name = "flags";
22393#endif /* FREECIV_JSON_CONNECTION */
22394 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
22396 }
22397#ifdef FREECIV_JSON_CONNECTION
22398 field_addr.name = "wonders";
22399#endif /* FREECIV_JSON_CONNECTION */
22400 {
22401 int i;
22402
22403#ifdef FREECIV_JSON_CONNECTION
22404 /* Enter array. */
22405 field_addr.sub_location = plocation_elem_new(0);
22406#endif /* FREECIV_JSON_CONNECTION */
22407
22408 for (i = 0; i < B_LAST; i++) {
22409#ifdef FREECIV_JSON_CONNECTION
22410 field_addr.sub_location->number = i;
22411#endif /* FREECIV_JSON_CONNECTION */
22412
22413 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
22415 }
22416 }
22417
22418#ifdef FREECIV_JSON_CONNECTION
22419 /* Exit array. */
22420 FC_FREE(field_addr.sub_location);
22421#endif /* FREECIV_JSON_CONNECTION */
22422 }
22423#ifdef FREECIV_JSON_CONNECTION
22424 field_addr.name = "multip_count";
22425#endif /* FREECIV_JSON_CONNECTION */
22426 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
22427 RECEIVE_PACKET_FIELD_ERROR(multip_count);
22428 }
22429#ifdef FREECIV_JSON_CONNECTION
22430 field_addr.name = "multiplier";
22431#endif /* FREECIV_JSON_CONNECTION */
22432 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
22433 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": truncation array");
22434 }
22435 {
22436 int i;
22437
22438#ifdef FREECIV_JSON_CONNECTION
22439 /* Enter array. */
22440 field_addr.sub_location = plocation_elem_new(0);
22441#endif /* FREECIV_JSON_CONNECTION */
22442
22443 for (i = 0; i < real_packet->multip_count; i++) {
22444#ifdef FREECIV_JSON_CONNECTION
22445 field_addr.sub_location->number = i;
22446#endif /* FREECIV_JSON_CONNECTION */
22447
22448 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
22450 }
22451 }
22452
22453#ifdef FREECIV_JSON_CONNECTION
22454 /* Exit array. */
22455 FC_FREE(field_addr.sub_location);
22456#endif /* FREECIV_JSON_CONNECTION */
22457 }
22458#ifdef FREECIV_JSON_CONNECTION
22459 field_addr.name = "multiplier_target";
22460#endif /* FREECIV_JSON_CONNECTION */
22461 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
22462 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": truncation array");
22463 }
22464 {
22465 int i;
22466
22467#ifdef FREECIV_JSON_CONNECTION
22468 /* Enter array. */
22469 field_addr.sub_location = plocation_elem_new(0);
22470#endif /* FREECIV_JSON_CONNECTION */
22471
22472 for (i = 0; i < real_packet->multip_count; i++) {
22473#ifdef FREECIV_JSON_CONNECTION
22474 field_addr.sub_location->number = i;
22475#endif /* FREECIV_JSON_CONNECTION */
22476
22477 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
22478 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
22479 }
22480 }
22481
22482#ifdef FREECIV_JSON_CONNECTION
22483 /* Exit array. */
22484 FC_FREE(field_addr.sub_location);
22485#endif /* FREECIV_JSON_CONNECTION */
22486 }
22487#ifdef FREECIV_JSON_CONNECTION
22488 field_addr.name = "multiplier_changed";
22489#endif /* FREECIV_JSON_CONNECTION */
22490 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
22491 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": truncation array");
22492 }
22493 {
22494 int i;
22495
22496#ifdef FREECIV_JSON_CONNECTION
22497 /* Enter array. */
22498 field_addr.sub_location = plocation_elem_new(0);
22499#endif /* FREECIV_JSON_CONNECTION */
22500
22501 for (i = 0; i < real_packet->multip_count; i++) {
22502#ifdef FREECIV_JSON_CONNECTION
22503 field_addr.sub_location->number = i;
22504#endif /* FREECIV_JSON_CONNECTION */
22505
22506 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
22507 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
22508 }
22509 }
22510
22511#ifdef FREECIV_JSON_CONNECTION
22512 /* Exit array. */
22513 FC_FREE(field_addr.sub_location);
22514#endif /* FREECIV_JSON_CONNECTION */
22515 }
22516#endif
22517 log_packet_detailed("packet_player_info_100: got info about (%d)",
22518 real_packet->playerno);
22519
22520#ifdef FREECIV_DELTA_PROTOCOL
22521 if (NULL == *hash) {
22523 NULL, NULL, NULL, free);
22524 }
22525
22526 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22527 *real_packet = *old;
22528 } else {
22529 int playerno;
22530
22531 playerno = real_packet->playerno;
22532
22533 log_packet_detailed(" no old info");
22534 memset(real_packet, 0, sizeof(*real_packet));
22535
22536 real_packet->playerno = playerno;
22537 }
22538
22539 if (BV_ISSET(fields, 0)) {
22540 log_packet_detailed(" got field 'name'");
22541#ifdef FREECIV_JSON_CONNECTION
22542 field_addr.name = "name";
22543#endif /* FREECIV_JSON_CONNECTION */
22544 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
22546 }
22547 }
22548 if (BV_ISSET(fields, 1)) {
22549 log_packet_detailed(" got field 'username'");
22550#ifdef FREECIV_JSON_CONNECTION
22551 field_addr.name = "username";
22552#endif /* FREECIV_JSON_CONNECTION */
22553 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
22555 }
22556 }
22557 real_packet->unassigned_user = BV_ISSET(fields, 2);
22558 if (BV_ISSET(fields, 3)) {
22559 log_packet_detailed(" got field 'score'");
22560#ifdef FREECIV_JSON_CONNECTION
22561 field_addr.name = "score";
22562#endif /* FREECIV_JSON_CONNECTION */
22563 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
22565 }
22566 }
22567 real_packet->is_male = BV_ISSET(fields, 4);
22568 real_packet->was_created = BV_ISSET(fields, 5);
22569 if (BV_ISSET(fields, 6)) {
22570 log_packet_detailed(" got field 'government'");
22571#ifdef FREECIV_JSON_CONNECTION
22572 field_addr.name = "government";
22573#endif /* FREECIV_JSON_CONNECTION */
22574 {
22575 int readin;
22576
22577 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
22579 }
22580 real_packet->government = readin;
22581 }
22582 }
22583 if (BV_ISSET(fields, 7)) {
22584 log_packet_detailed(" got field 'target_government'");
22585#ifdef FREECIV_JSON_CONNECTION
22586 field_addr.name = "target_government";
22587#endif /* FREECIV_JSON_CONNECTION */
22588 {
22589 int readin;
22590
22591 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
22592 RECEIVE_PACKET_FIELD_ERROR(target_government);
22593 }
22594 real_packet->target_government = readin;
22595 }
22596 }
22597 if (BV_ISSET(fields, 8)) {
22598 log_packet_detailed(" got field 'real_embassy'");
22599#ifdef FREECIV_JSON_CONNECTION
22600 field_addr.name = "real_embassy";
22601#endif /* FREECIV_JSON_CONNECTION */
22602 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
22603 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
22604 }
22605 }
22606 if (BV_ISSET(fields, 9)) {
22607 log_packet_detailed(" got field 'mood'");
22608#ifdef FREECIV_JSON_CONNECTION
22609 field_addr.name = "mood";
22610#endif /* FREECIV_JSON_CONNECTION */
22611 {
22612 int readin;
22613
22614 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22616 }
22617 real_packet->mood = readin;
22618 }
22619 }
22620 if (BV_ISSET(fields, 10)) {
22621 log_packet_detailed(" got field 'style'");
22622#ifdef FREECIV_JSON_CONNECTION
22623 field_addr.name = "style";
22624#endif /* FREECIV_JSON_CONNECTION */
22625 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
22627 }
22628 }
22629 if (BV_ISSET(fields, 11)) {
22630 log_packet_detailed(" got field 'music_style'");
22631#ifdef FREECIV_JSON_CONNECTION
22632 field_addr.name = "music_style";
22633#endif /* FREECIV_JSON_CONNECTION */
22634 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
22636 }
22637 }
22638 if (BV_ISSET(fields, 12)) {
22639 log_packet_detailed(" got field 'nation'");
22640#ifdef FREECIV_JSON_CONNECTION
22641 field_addr.name = "nation";
22642#endif /* FREECIV_JSON_CONNECTION */
22643 {
22644 int readin;
22645
22646 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
22648 }
22649 real_packet->nation = readin;
22650 }
22651 }
22652 if (BV_ISSET(fields, 13)) {
22653 log_packet_detailed(" got field 'team'");
22654#ifdef FREECIV_JSON_CONNECTION
22655 field_addr.name = "team";
22656#endif /* FREECIV_JSON_CONNECTION */
22657 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
22659 }
22660 }
22661 real_packet->is_ready = BV_ISSET(fields, 14);
22662 real_packet->phase_done = BV_ISSET(fields, 15);
22663 if (BV_ISSET(fields, 16)) {
22664 log_packet_detailed(" got field 'nturns_idle'");
22665#ifdef FREECIV_JSON_CONNECTION
22666 field_addr.name = "nturns_idle";
22667#endif /* FREECIV_JSON_CONNECTION */
22668 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
22669 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
22670 }
22671 }
22672 if (BV_ISSET(fields, 17)) {
22673 log_packet_detailed(" got field 'turns_alive'");
22674#ifdef FREECIV_JSON_CONNECTION
22675 field_addr.name = "turns_alive";
22676#endif /* FREECIV_JSON_CONNECTION */
22677 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
22678 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
22679 }
22680 }
22681 real_packet->is_alive = BV_ISSET(fields, 18);
22682 if (BV_ISSET(fields, 19)) {
22683 log_packet_detailed(" got field 'autoselect_weight'");
22684#ifdef FREECIV_JSON_CONNECTION
22685 field_addr.name = "autoselect_weight";
22686#endif /* FREECIV_JSON_CONNECTION */
22687 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
22688 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
22689 }
22690 }
22691 if (BV_ISSET(fields, 20)) {
22692 log_packet_detailed(" got field 'gold'");
22693#ifdef FREECIV_JSON_CONNECTION
22694 field_addr.name = "gold";
22695#endif /* FREECIV_JSON_CONNECTION */
22696 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
22698 }
22699 }
22700 if (BV_ISSET(fields, 21)) {
22701 log_packet_detailed(" got field 'tax'");
22702#ifdef FREECIV_JSON_CONNECTION
22703 field_addr.name = "tax";
22704#endif /* FREECIV_JSON_CONNECTION */
22705 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
22707 }
22708 }
22709 if (BV_ISSET(fields, 22)) {
22710 log_packet_detailed(" got field 'science'");
22711#ifdef FREECIV_JSON_CONNECTION
22712 field_addr.name = "science";
22713#endif /* FREECIV_JSON_CONNECTION */
22714 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
22716 }
22717 }
22718 if (BV_ISSET(fields, 23)) {
22719 log_packet_detailed(" got field 'luxury'");
22720#ifdef FREECIV_JSON_CONNECTION
22721 field_addr.name = "luxury";
22722#endif /* FREECIV_JSON_CONNECTION */
22723 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
22725 }
22726 }
22727 if (BV_ISSET(fields, 24)) {
22728 log_packet_detailed(" got field 'infrapoints'");
22729#ifdef FREECIV_JSON_CONNECTION
22730 field_addr.name = "infrapoints";
22731#endif /* FREECIV_JSON_CONNECTION */
22732 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
22733 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
22734 }
22735 }
22736 if (BV_ISSET(fields, 25)) {
22737 log_packet_detailed(" got field 'tech_upkeep_16'");
22738#ifdef FREECIV_JSON_CONNECTION
22739 field_addr.name = "tech_upkeep_16";
22740#endif /* FREECIV_JSON_CONNECTION */
22741 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_16)) {
22742 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_16);
22743 }
22744 }
22745 if (BV_ISSET(fields, 26)) {
22746 log_packet_detailed(" got field 'science_cost'");
22747#ifdef FREECIV_JSON_CONNECTION
22748 field_addr.name = "science_cost";
22749#endif /* FREECIV_JSON_CONNECTION */
22750 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
22751 RECEIVE_PACKET_FIELD_ERROR(science_cost);
22752 }
22753 }
22754 real_packet->is_connected = BV_ISSET(fields, 27);
22755 if (BV_ISSET(fields, 28)) {
22756 log_packet_detailed(" got field 'revolution_finishes'");
22757#ifdef FREECIV_JSON_CONNECTION
22758 field_addr.name = "revolution_finishes";
22759#endif /* FREECIV_JSON_CONNECTION */
22760 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
22761 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
22762 }
22763 }
22764 if (BV_ISSET(fields, 29)) {
22765 log_packet_detailed(" got field 'ai_skill_level'");
22766#ifdef FREECIV_JSON_CONNECTION
22767 field_addr.name = "ai_skill_level";
22768#endif /* FREECIV_JSON_CONNECTION */
22769 {
22770 int readin;
22771
22772 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22773 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
22774 }
22775 real_packet->ai_skill_level = readin;
22776 }
22777 }
22778 if (BV_ISSET(fields, 30)) {
22779 log_packet_detailed(" got field 'barbarian_type'");
22780#ifdef FREECIV_JSON_CONNECTION
22781 field_addr.name = "barbarian_type";
22782#endif /* FREECIV_JSON_CONNECTION */
22783 {
22784 int readin;
22785
22786 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22787 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
22788 }
22789 real_packet->barbarian_type = readin;
22790 }
22791 }
22792 if (BV_ISSET(fields, 31)) {
22793 log_packet_detailed(" got field 'gives_shared_vision'");
22794#ifdef FREECIV_JSON_CONNECTION
22795 field_addr.name = "gives_shared_vision";
22796#endif /* FREECIV_JSON_CONNECTION */
22797 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
22799 }
22800 }
22801 if (BV_ISSET(fields, 32)) {
22802 log_packet_detailed(" got field 'gives_shared_tiles'");
22803#ifdef FREECIV_JSON_CONNECTION
22804 field_addr.name = "gives_shared_tiles";
22805#endif /* FREECIV_JSON_CONNECTION */
22806 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
22808 }
22809 }
22810 if (BV_ISSET(fields, 33)) {
22811 log_packet_detailed(" got field 'history'");
22812#ifdef FREECIV_JSON_CONNECTION
22813 field_addr.name = "history";
22814#endif /* FREECIV_JSON_CONNECTION */
22815 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
22817 }
22818 }
22819 if (BV_ISSET(fields, 34)) {
22820 log_packet_detailed(" got field 'culture'");
22821#ifdef FREECIV_JSON_CONNECTION
22822 field_addr.name = "culture";
22823#endif /* FREECIV_JSON_CONNECTION */
22824 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
22826 }
22827 }
22828 if (BV_ISSET(fields, 35)) {
22829 log_packet_detailed(" got field 'love'");
22830#ifdef FREECIV_JSON_CONNECTION
22831 field_addr.name = "love";
22832#endif /* FREECIV_JSON_CONNECTION */
22833 {
22834 int i;
22835
22836#ifdef FREECIV_JSON_CONNECTION
22837 /* Enter array. */
22838 field_addr.sub_location = plocation_elem_new(0);
22839#endif /* FREECIV_JSON_CONNECTION */
22840
22841 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
22842#ifdef FREECIV_JSON_CONNECTION
22843 field_addr.sub_location->number = i;
22844#endif /* FREECIV_JSON_CONNECTION */
22845
22846 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
22848 }
22849 }
22850
22851#ifdef FREECIV_JSON_CONNECTION
22852 /* Exit array. */
22853 FC_FREE(field_addr.sub_location);
22854#endif /* FREECIV_JSON_CONNECTION */
22855 }
22856 }
22857 real_packet->color_valid = BV_ISSET(fields, 36);
22858 real_packet->color_changeable = BV_ISSET(fields, 37);
22859 if (BV_ISSET(fields, 38)) {
22860 log_packet_detailed(" got field 'color_red'");
22861#ifdef FREECIV_JSON_CONNECTION
22862 field_addr.name = "color_red";
22863#endif /* FREECIV_JSON_CONNECTION */
22864 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
22865 RECEIVE_PACKET_FIELD_ERROR(color_red);
22866 }
22867 }
22868 if (BV_ISSET(fields, 39)) {
22869 log_packet_detailed(" got field 'color_green'");
22870#ifdef FREECIV_JSON_CONNECTION
22871 field_addr.name = "color_green";
22872#endif /* FREECIV_JSON_CONNECTION */
22873 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
22874 RECEIVE_PACKET_FIELD_ERROR(color_green);
22875 }
22876 }
22877 if (BV_ISSET(fields, 40)) {
22878 log_packet_detailed(" got field 'color_blue'");
22879#ifdef FREECIV_JSON_CONNECTION
22880 field_addr.name = "color_blue";
22881#endif /* FREECIV_JSON_CONNECTION */
22882 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
22883 RECEIVE_PACKET_FIELD_ERROR(color_blue);
22884 }
22885 }
22886 if (BV_ISSET(fields, 41)) {
22887 log_packet_detailed(" got field 'flags'");
22888#ifdef FREECIV_JSON_CONNECTION
22889 field_addr.name = "flags";
22890#endif /* FREECIV_JSON_CONNECTION */
22891 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
22893 }
22894 }
22895 if (BV_ISSET(fields, 42)) {
22896 log_packet_detailed(" got field 'wonders'");
22897#ifdef FREECIV_JSON_CONNECTION
22898 field_addr.name = "wonders";
22899#endif /* FREECIV_JSON_CONNECTION */
22901#ifdef FREECIV_JSON_CONNECTION
22902 /* Enter array (start at initial element). */
22903 field_addr.sub_location = plocation_elem_new(0);
22904 /* Enter diff array element (start at the index address). */
22905 field_addr.sub_location->sub_location = plocation_elem_new(0);
22906#endif /* FREECIV_JSON_CONNECTION */
22907
22908 while (TRUE) {
22909 int i;
22910
22911 /* Read next index */
22912#if B_LAST <= MAX_UINT8
22913 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
22914#else
22915 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
22916#endif
22918 }
22919
22920 if (i == B_LAST) {
22921 break;
22922 }
22923 if (i > B_LAST) {
22925 ": unexpected value %d "
22926 "(> B_LAST) in array diff",
22927 i);
22928 }
22929
22930#ifdef FREECIV_JSON_CONNECTION
22931 /* Content address. */
22932 field_addr.sub_location->sub_location->number = 1;
22933#endif /* FREECIV_JSON_CONNECTION */
22934
22935 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
22937 }
22938
22939#ifdef FREECIV_JSON_CONNECTION
22940 /* Move to the next diff array element. */
22941 field_addr.sub_location->number++;
22942 /* Back to the index address. */
22943 field_addr.sub_location->sub_location->number = 0;
22944#endif /* FREECIV_JSON_CONNECTION */
22945 }
22946
22947#ifdef FREECIV_JSON_CONNECTION
22948 /* Exit diff array element. */
22949 FC_FREE(field_addr.sub_location->sub_location);
22950 /* Exit array. */
22951 FC_FREE(field_addr.sub_location);
22952#endif /* FREECIV_JSON_CONNECTION */
22953 }
22954 if (BV_ISSET(fields, 43)) {
22955 log_packet_detailed(" got field 'multip_count'");
22956#ifdef FREECIV_JSON_CONNECTION
22957 field_addr.name = "multip_count";
22958#endif /* FREECIV_JSON_CONNECTION */
22959 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
22960 RECEIVE_PACKET_FIELD_ERROR(multip_count);
22961 }
22962 }
22963 if (BV_ISSET(fields, 44)) {
22964 log_packet_detailed(" got field 'multiplier'");
22965#ifdef FREECIV_JSON_CONNECTION
22966 field_addr.name = "multiplier";
22967#endif /* FREECIV_JSON_CONNECTION */
22968 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
22969 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": truncation array");
22970 }
22971 {
22972 int i;
22973
22974#ifdef FREECIV_JSON_CONNECTION
22975 /* Enter array. */
22976 field_addr.sub_location = plocation_elem_new(0);
22977#endif /* FREECIV_JSON_CONNECTION */
22978
22979 for (i = 0; i < real_packet->multip_count; i++) {
22980#ifdef FREECIV_JSON_CONNECTION
22981 field_addr.sub_location->number = i;
22982#endif /* FREECIV_JSON_CONNECTION */
22983
22984 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
22986 }
22987 }
22988
22989#ifdef FREECIV_JSON_CONNECTION
22990 /* Exit array. */
22991 FC_FREE(field_addr.sub_location);
22992#endif /* FREECIV_JSON_CONNECTION */
22993 }
22994 }
22995 if (BV_ISSET(fields, 45)) {
22996 log_packet_detailed(" got field 'multiplier_target'");
22997#ifdef FREECIV_JSON_CONNECTION
22998 field_addr.name = "multiplier_target";
22999#endif /* FREECIV_JSON_CONNECTION */
23000 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
23001 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": truncation array");
23002 }
23003 {
23004 int i;
23005
23006#ifdef FREECIV_JSON_CONNECTION
23007 /* Enter array. */
23008 field_addr.sub_location = plocation_elem_new(0);
23009#endif /* FREECIV_JSON_CONNECTION */
23010
23011 for (i = 0; i < real_packet->multip_count; i++) {
23012#ifdef FREECIV_JSON_CONNECTION
23013 field_addr.sub_location->number = i;
23014#endif /* FREECIV_JSON_CONNECTION */
23015
23016 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
23017 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
23018 }
23019 }
23020
23021#ifdef FREECIV_JSON_CONNECTION
23022 /* Exit array. */
23023 FC_FREE(field_addr.sub_location);
23024#endif /* FREECIV_JSON_CONNECTION */
23025 }
23026 }
23027 if (BV_ISSET(fields, 46)) {
23028 log_packet_detailed(" got field 'multiplier_changed'");
23029#ifdef FREECIV_JSON_CONNECTION
23030 field_addr.name = "multiplier_changed";
23031#endif /* FREECIV_JSON_CONNECTION */
23032 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
23033 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": truncation array");
23034 }
23035 {
23036 int i;
23037
23038#ifdef FREECIV_JSON_CONNECTION
23039 /* Enter array. */
23040 field_addr.sub_location = plocation_elem_new(0);
23041#endif /* FREECIV_JSON_CONNECTION */
23042
23043 for (i = 0; i < real_packet->multip_count; i++) {
23044#ifdef FREECIV_JSON_CONNECTION
23045 field_addr.sub_location->number = i;
23046#endif /* FREECIV_JSON_CONNECTION */
23047
23048 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
23049 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
23050 }
23051 }
23052
23053#ifdef FREECIV_JSON_CONNECTION
23054 /* Exit array. */
23055 FC_FREE(field_addr.sub_location);
23056#endif /* FREECIV_JSON_CONNECTION */
23057 }
23058 }
23059
23060 if (NULL == old) {
23061 old = fc_malloc(sizeof(*old));
23062 *old = *real_packet;
23063 genhash_insert(*hash, old, old);
23064 } else {
23065 *old = *real_packet;
23066 }
23067
23068#endif /* FREECIV_DELTA_PROTOCOL */
23070}
23071
23072static int send_packet_player_info_100(struct connection *pc, const struct packet_player_info *packet)
23073{
23074 const struct packet_player_info *real_packet = packet;
23075 int e;
23076#ifdef FREECIV_DELTA_PROTOCOL
23078 struct packet_player_info *old;
23079 bool differ;
23080 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_INFO;
23081 int different = 0;
23082#endif /* FREECIV_DELTA_PROTOCOL */
23084#ifdef FREECIV_JSON_CONNECTION
23085 struct plocation field_addr;
23086 {
23090 }
23091#endif /* FREECIV_JSON_CONNECTION */
23092
23093 log_packet_detailed("packet_player_info_100: sending info about (%d)",
23094 real_packet->playerno);
23095
23096#ifdef FREECIV_DELTA_PROTOCOL
23097 if (NULL == *hash) {
23099 NULL, NULL, NULL, free);
23100 }
23101 BV_CLR_ALL(fields);
23102
23103 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23104 old = fc_malloc(sizeof(*old));
23105 *old = *real_packet;
23106 genhash_insert(*hash, old, old);
23107 memset(old, 0, sizeof(*old));
23108 different = 1; /* Force to send. */
23109 }
23110 differ = (strcmp(old->name, real_packet->name) != 0);
23111 if (differ) {
23112 different++;
23113 BV_SET(fields, 0);
23114 }
23115
23116 differ = (strcmp(old->username, real_packet->username) != 0);
23117 if (differ) {
23118 different++;
23119 BV_SET(fields, 1);
23120 }
23121
23122 differ = (old->unassigned_user != real_packet->unassigned_user);
23123 if (differ) {
23124 different++;
23125 }
23126 if (packet->unassigned_user) {
23127 BV_SET(fields, 2);
23128 }
23129
23130 differ = (old->score != real_packet->score);
23131 if (differ) {
23132 different++;
23133 BV_SET(fields, 3);
23134 }
23135
23136 differ = (old->is_male != real_packet->is_male);
23137 if (differ) {
23138 different++;
23139 }
23140 if (packet->is_male) {
23141 BV_SET(fields, 4);
23142 }
23143
23144 differ = (old->was_created != real_packet->was_created);
23145 if (differ) {
23146 different++;
23147 }
23148 if (packet->was_created) {
23149 BV_SET(fields, 5);
23150 }
23151
23152 differ = (old->government != real_packet->government);
23153 if (differ) {
23154 different++;
23155 BV_SET(fields, 6);
23156 }
23157
23158 differ = (old->target_government != real_packet->target_government);
23159 if (differ) {
23160 different++;
23161 BV_SET(fields, 7);
23162 }
23163
23164 differ = !BV_ARE_EQUAL(old->real_embassy, real_packet->real_embassy);
23165 if (differ) {
23166 different++;
23167 BV_SET(fields, 8);
23168 }
23169
23170 differ = (old->mood != real_packet->mood);
23171 if (differ) {
23172 different++;
23173 BV_SET(fields, 9);
23174 }
23175
23176 differ = (old->style != real_packet->style);
23177 if (differ) {
23178 different++;
23179 BV_SET(fields, 10);
23180 }
23181
23182 differ = (old->music_style != real_packet->music_style);
23183 if (differ) {
23184 different++;
23185 BV_SET(fields, 11);
23186 }
23187
23188 differ = (old->nation != real_packet->nation);
23189 if (differ) {
23190 different++;
23191 BV_SET(fields, 12);
23192 }
23193
23194 differ = (old->team != real_packet->team);
23195 if (differ) {
23196 different++;
23197 BV_SET(fields, 13);
23198 }
23199
23200 differ = (old->is_ready != real_packet->is_ready);
23201 if (differ) {
23202 different++;
23203 }
23204 if (packet->is_ready) {
23205 BV_SET(fields, 14);
23206 }
23207
23208 differ = (old->phase_done != real_packet->phase_done);
23209 if (differ) {
23210 different++;
23211 }
23212 if (packet->phase_done) {
23213 BV_SET(fields, 15);
23214 }
23215
23216 differ = (old->nturns_idle != real_packet->nturns_idle);
23217 if (differ) {
23218 different++;
23219 BV_SET(fields, 16);
23220 }
23221
23222 differ = (old->turns_alive != real_packet->turns_alive);
23223 if (differ) {
23224 different++;
23225 BV_SET(fields, 17);
23226 }
23227
23228 differ = (old->is_alive != real_packet->is_alive);
23229 if (differ) {
23230 different++;
23231 }
23232 if (packet->is_alive) {
23233 BV_SET(fields, 18);
23234 }
23235
23236 differ = (old->autoselect_weight != real_packet->autoselect_weight);
23237 if (differ) {
23238 different++;
23239 BV_SET(fields, 19);
23240 }
23241
23242 differ = (old->gold != real_packet->gold);
23243 if (differ) {
23244 different++;
23245 BV_SET(fields, 20);
23246 }
23247
23248 differ = (old->tax != real_packet->tax);
23249 if (differ) {
23250 different++;
23251 BV_SET(fields, 21);
23252 }
23253
23254 differ = (old->science != real_packet->science);
23255 if (differ) {
23256 different++;
23257 BV_SET(fields, 22);
23258 }
23259
23260 differ = (old->luxury != real_packet->luxury);
23261 if (differ) {
23262 different++;
23263 BV_SET(fields, 23);
23264 }
23265
23266 differ = (old->infrapoints != real_packet->infrapoints);
23267 if (differ) {
23268 different++;
23269 BV_SET(fields, 24);
23270 }
23271
23272 differ = (old->tech_upkeep_16 != real_packet->tech_upkeep_16);
23273 if (differ) {
23274 different++;
23275 BV_SET(fields, 25);
23276 }
23277
23278 differ = (old->science_cost != real_packet->science_cost);
23279 if (differ) {
23280 different++;
23281 BV_SET(fields, 26);
23282 }
23283
23284 differ = (old->is_connected != real_packet->is_connected);
23285 if (differ) {
23286 different++;
23287 }
23288 if (packet->is_connected) {
23289 BV_SET(fields, 27);
23290 }
23291
23292 differ = (old->revolution_finishes != real_packet->revolution_finishes);
23293 if (differ) {
23294 different++;
23295 BV_SET(fields, 28);
23296 }
23297
23298 differ = (old->ai_skill_level != real_packet->ai_skill_level);
23299 if (differ) {
23300 different++;
23301 BV_SET(fields, 29);
23302 }
23303
23304 differ = (old->barbarian_type != real_packet->barbarian_type);
23305 if (differ) {
23306 different++;
23307 BV_SET(fields, 30);
23308 }
23309
23310 differ = !BV_ARE_EQUAL(old->gives_shared_vision, real_packet->gives_shared_vision);
23311 if (differ) {
23312 different++;
23313 BV_SET(fields, 31);
23314 }
23315
23316 differ = !BV_ARE_EQUAL(old->gives_shared_tiles, real_packet->gives_shared_tiles);
23317 if (differ) {
23318 different++;
23319 BV_SET(fields, 32);
23320 }
23321
23322 differ = (old->history != real_packet->history);
23323 if (differ) {
23324 different++;
23325 BV_SET(fields, 33);
23326 }
23327
23328 differ = (old->culture != real_packet->culture);
23329 if (differ) {
23330 different++;
23331 BV_SET(fields, 34);
23332 }
23333
23334 differ = FALSE;
23335 {
23336 int i;
23337
23338 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
23339 differ = (old->love[i] != real_packet->love[i]);
23340 if (differ) {
23341 break;
23342 }
23343 }
23344 }
23345 if (differ) {
23346 different++;
23347 BV_SET(fields, 35);
23348 }
23349
23350 differ = (old->color_valid != real_packet->color_valid);
23351 if (differ) {
23352 different++;
23353 }
23354 if (packet->color_valid) {
23355 BV_SET(fields, 36);
23356 }
23357
23358 differ = (old->color_changeable != real_packet->color_changeable);
23359 if (differ) {
23360 different++;
23361 }
23362 if (packet->color_changeable) {
23363 BV_SET(fields, 37);
23364 }
23365
23366 differ = (old->color_red != real_packet->color_red);
23367 if (differ) {
23368 different++;
23369 BV_SET(fields, 38);
23370 }
23371
23372 differ = (old->color_green != real_packet->color_green);
23373 if (differ) {
23374 different++;
23375 BV_SET(fields, 39);
23376 }
23377
23378 differ = (old->color_blue != real_packet->color_blue);
23379 if (differ) {
23380 different++;
23381 BV_SET(fields, 40);
23382 }
23383
23384 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
23385 if (differ) {
23386 different++;
23387 BV_SET(fields, 41);
23388 }
23389
23390 differ = FALSE;
23391 {
23392 int i;
23393
23394 for (i = 0; i < B_LAST; i++) {
23395 differ = (old->wonders[i] != real_packet->wonders[i]);
23396 if (differ) {
23397 break;
23398 }
23399 }
23400 }
23401 if (differ) {
23402 different++;
23403 BV_SET(fields, 42);
23404 }
23405
23406 differ = (old->multip_count != real_packet->multip_count);
23407 if (differ) {
23408 different++;
23409 BV_SET(fields, 43);
23410 }
23411
23412 differ = (old->multip_count != real_packet->multip_count);
23413 if (!differ) {
23414 int i;
23415
23416 for (i = 0; i < real_packet->multip_count; i++) {
23417 differ = (old->multiplier[i] != real_packet->multiplier[i]);
23418 if (differ) {
23419 break;
23420 }
23421 }
23422 }
23423 if (differ) {
23424 different++;
23425 BV_SET(fields, 44);
23426 }
23427
23428 differ = (old->multip_count != real_packet->multip_count);
23429 if (!differ) {
23430 int i;
23431
23432 for (i = 0; i < real_packet->multip_count; i++) {
23433 differ = (old->multiplier_target[i] != real_packet->multiplier_target[i]);
23434 if (differ) {
23435 break;
23436 }
23437 }
23438 }
23439 if (differ) {
23440 different++;
23441 BV_SET(fields, 45);
23442 }
23443
23444 differ = (old->multip_count != real_packet->multip_count);
23445 if (!differ) {
23446 int i;
23447
23448 for (i = 0; i < real_packet->multip_count; i++) {
23449 differ = (old->multiplier_changed[i] != real_packet->multiplier_changed[i]);
23450 if (differ) {
23451 break;
23452 }
23453 }
23454 }
23455 if (differ) {
23456 different++;
23457 BV_SET(fields, 46);
23458 }
23459
23460 if (different == 0) {
23461 log_packet_detailed(" no change -> discard");
23463 }
23464
23465#ifdef FREECIV_JSON_CONNECTION
23466 field_addr.name = "fields";
23467#endif /* FREECIV_JSON_CONNECTION */
23468 e = 0;
23469 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23470 if (e) {
23471 log_packet_detailed("fields bitvector error detected");
23472 }
23473#ifdef FREECIV_JSON_CONNECTION
23474 field_addr.name = "playerno";
23475#endif /* FREECIV_JSON_CONNECTION */
23476 e = 0;
23477 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
23478 if (e) {
23479 log_packet_detailed("'playerno' field error detected");
23480 }
23481
23482 if (BV_ISSET(fields, 0)) {
23483 log_packet_detailed(" field 'name' has changed");
23484#ifdef FREECIV_JSON_CONNECTION
23485 field_addr.name = "name";
23486#endif /* FREECIV_JSON_CONNECTION */
23487 e = 0;
23488 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
23489 if (e) {
23490 log_packet_detailed("'name' field error detected");
23491 }
23492 }
23493 if (BV_ISSET(fields, 1)) {
23494 log_packet_detailed(" field 'username' has changed");
23495#ifdef FREECIV_JSON_CONNECTION
23496 field_addr.name = "username";
23497#endif /* FREECIV_JSON_CONNECTION */
23498 e = 0;
23499 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
23500 if (e) {
23501 log_packet_detailed("'username' field error detected");
23502 }
23503 }
23504 /* field 2 is folded into the header */
23505 if (BV_ISSET(fields, 3)) {
23506 log_packet_detailed(" field 'score' has changed");
23507#ifdef FREECIV_JSON_CONNECTION
23508 field_addr.name = "score";
23509#endif /* FREECIV_JSON_CONNECTION */
23510 e = 0;
23511 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
23512 if (e) {
23513 log_packet_detailed("'score' field error detected");
23514 }
23515 }
23516 /* field 4 is folded into the header */
23517 /* field 5 is folded into the header */
23518 if (BV_ISSET(fields, 6)) {
23519 log_packet_detailed(" field 'government' has changed");
23520#ifdef FREECIV_JSON_CONNECTION
23521 field_addr.name = "government";
23522#endif /* FREECIV_JSON_CONNECTION */
23523 e = 0;
23524 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
23525 if (e) {
23526 log_packet_detailed("'government' field error detected");
23527 }
23528 }
23529 if (BV_ISSET(fields, 7)) {
23530 log_packet_detailed(" field 'target_government' has changed");
23531#ifdef FREECIV_JSON_CONNECTION
23532 field_addr.name = "target_government";
23533#endif /* FREECIV_JSON_CONNECTION */
23534 e = 0;
23535 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
23536 if (e) {
23537 log_packet_detailed("'target_government' field error detected");
23538 }
23539 }
23540 if (BV_ISSET(fields, 8)) {
23541 log_packet_detailed(" field 'real_embassy' has changed");
23542#ifdef FREECIV_JSON_CONNECTION
23543 field_addr.name = "real_embassy";
23544#endif /* FREECIV_JSON_CONNECTION */
23545 e = 0;
23546 e |= DIO_BV_PUT(&dout, &field_addr, packet->real_embassy);
23547 if (e) {
23548 log_packet_detailed("'real_embassy' field error detected");
23549 }
23550 }
23551 if (BV_ISSET(fields, 9)) {
23552 log_packet_detailed(" field 'mood' has changed");
23553#ifdef FREECIV_JSON_CONNECTION
23554 field_addr.name = "mood";
23555#endif /* FREECIV_JSON_CONNECTION */
23556 e = 0;
23557 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
23558 if (e) {
23559 log_packet_detailed("'mood' field error detected");
23560 }
23561 }
23562 if (BV_ISSET(fields, 10)) {
23563 log_packet_detailed(" field 'style' has changed");
23564#ifdef FREECIV_JSON_CONNECTION
23565 field_addr.name = "style";
23566#endif /* FREECIV_JSON_CONNECTION */
23567 e = 0;
23568 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
23569 if (e) {
23570 log_packet_detailed("'style' field error detected");
23571 }
23572 }
23573 if (BV_ISSET(fields, 11)) {
23574 log_packet_detailed(" field 'music_style' has changed");
23575#ifdef FREECIV_JSON_CONNECTION
23576 field_addr.name = "music_style";
23577#endif /* FREECIV_JSON_CONNECTION */
23578 e = 0;
23579 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
23580 if (e) {
23581 log_packet_detailed("'music_style' field error detected");
23582 }
23583 }
23584 if (BV_ISSET(fields, 12)) {
23585 log_packet_detailed(" field 'nation' has changed");
23586#ifdef FREECIV_JSON_CONNECTION
23587 field_addr.name = "nation";
23588#endif /* FREECIV_JSON_CONNECTION */
23589 e = 0;
23590 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
23591 if (e) {
23592 log_packet_detailed("'nation' field error detected");
23593 }
23594 }
23595 if (BV_ISSET(fields, 13)) {
23596 log_packet_detailed(" field 'team' has changed");
23597#ifdef FREECIV_JSON_CONNECTION
23598 field_addr.name = "team";
23599#endif /* FREECIV_JSON_CONNECTION */
23600 e = 0;
23601 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
23602 if (e) {
23603 log_packet_detailed("'team' field error detected");
23604 }
23605 }
23606 /* field 14 is folded into the header */
23607 /* field 15 is folded into the header */
23608 if (BV_ISSET(fields, 16)) {
23609 log_packet_detailed(" field 'nturns_idle' has changed");
23610#ifdef FREECIV_JSON_CONNECTION
23611 field_addr.name = "nturns_idle";
23612#endif /* FREECIV_JSON_CONNECTION */
23613 e = 0;
23614 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
23615 if (e) {
23616 log_packet_detailed("'nturns_idle' field error detected");
23617 }
23618 }
23619 if (BV_ISSET(fields, 17)) {
23620 log_packet_detailed(" field 'turns_alive' has changed");
23621#ifdef FREECIV_JSON_CONNECTION
23622 field_addr.name = "turns_alive";
23623#endif /* FREECIV_JSON_CONNECTION */
23624 e = 0;
23625 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
23626 if (e) {
23627 log_packet_detailed("'turns_alive' field error detected");
23628 }
23629 }
23630 /* field 18 is folded into the header */
23631 if (BV_ISSET(fields, 19)) {
23632 log_packet_detailed(" field 'autoselect_weight' has changed");
23633#ifdef FREECIV_JSON_CONNECTION
23634 field_addr.name = "autoselect_weight";
23635#endif /* FREECIV_JSON_CONNECTION */
23636 e = 0;
23637 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
23638 if (e) {
23639 log_packet_detailed("'autoselect_weight' field error detected");
23640 }
23641 }
23642 if (BV_ISSET(fields, 20)) {
23643 log_packet_detailed(" field 'gold' has changed");
23644#ifdef FREECIV_JSON_CONNECTION
23645 field_addr.name = "gold";
23646#endif /* FREECIV_JSON_CONNECTION */
23647 e = 0;
23648 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
23649 if (e) {
23650 log_packet_detailed("'gold' field error detected");
23651 }
23652 }
23653 if (BV_ISSET(fields, 21)) {
23654 log_packet_detailed(" field 'tax' has changed");
23655#ifdef FREECIV_JSON_CONNECTION
23656 field_addr.name = "tax";
23657#endif /* FREECIV_JSON_CONNECTION */
23658 e = 0;
23659 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
23660 if (e) {
23661 log_packet_detailed("'tax' field error detected");
23662 }
23663 }
23664 if (BV_ISSET(fields, 22)) {
23665 log_packet_detailed(" field 'science' has changed");
23666#ifdef FREECIV_JSON_CONNECTION
23667 field_addr.name = "science";
23668#endif /* FREECIV_JSON_CONNECTION */
23669 e = 0;
23670 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
23671 if (e) {
23672 log_packet_detailed("'science' field error detected");
23673 }
23674 }
23675 if (BV_ISSET(fields, 23)) {
23676 log_packet_detailed(" field 'luxury' has changed");
23677#ifdef FREECIV_JSON_CONNECTION
23678 field_addr.name = "luxury";
23679#endif /* FREECIV_JSON_CONNECTION */
23680 e = 0;
23681 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
23682 if (e) {
23683 log_packet_detailed("'luxury' field error detected");
23684 }
23685 }
23686 if (BV_ISSET(fields, 24)) {
23687 log_packet_detailed(" field 'infrapoints' has changed");
23688#ifdef FREECIV_JSON_CONNECTION
23689 field_addr.name = "infrapoints";
23690#endif /* FREECIV_JSON_CONNECTION */
23691 e = 0;
23692 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
23693 if (e) {
23694 log_packet_detailed("'infrapoints' field error detected");
23695 }
23696 }
23697 if (BV_ISSET(fields, 25)) {
23698 log_packet_detailed(" field 'tech_upkeep_16' has changed");
23699#ifdef FREECIV_JSON_CONNECTION
23700 field_addr.name = "tech_upkeep_16";
23701#endif /* FREECIV_JSON_CONNECTION */
23702 e = 0;
23703 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_16);
23704 if (e) {
23705 log_packet_detailed("'tech_upkeep_16' field error detected");
23706 }
23707 }
23708 if (BV_ISSET(fields, 26)) {
23709 log_packet_detailed(" field 'science_cost' has changed");
23710#ifdef FREECIV_JSON_CONNECTION
23711 field_addr.name = "science_cost";
23712#endif /* FREECIV_JSON_CONNECTION */
23713 e = 0;
23714 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
23715 if (e) {
23716 log_packet_detailed("'science_cost' field error detected");
23717 }
23718 }
23719 /* field 27 is folded into the header */
23720 if (BV_ISSET(fields, 28)) {
23721 log_packet_detailed(" field 'revolution_finishes' has changed");
23722#ifdef FREECIV_JSON_CONNECTION
23723 field_addr.name = "revolution_finishes";
23724#endif /* FREECIV_JSON_CONNECTION */
23725 e = 0;
23726 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
23727 if (e) {
23728 log_packet_detailed("'revolution_finishes' field error detected");
23729 }
23730 }
23731 if (BV_ISSET(fields, 29)) {
23732 log_packet_detailed(" field 'ai_skill_level' has changed");
23733#ifdef FREECIV_JSON_CONNECTION
23734 field_addr.name = "ai_skill_level";
23735#endif /* FREECIV_JSON_CONNECTION */
23736 e = 0;
23737 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
23738 if (e) {
23739 log_packet_detailed("'ai_skill_level' field error detected");
23740 }
23741 }
23742 if (BV_ISSET(fields, 30)) {
23743 log_packet_detailed(" field 'barbarian_type' has changed");
23744#ifdef FREECIV_JSON_CONNECTION
23745 field_addr.name = "barbarian_type";
23746#endif /* FREECIV_JSON_CONNECTION */
23747 e = 0;
23748 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
23749 if (e) {
23750 log_packet_detailed("'barbarian_type' field error detected");
23751 }
23752 }
23753 if (BV_ISSET(fields, 31)) {
23754 log_packet_detailed(" field 'gives_shared_vision' has changed");
23755#ifdef FREECIV_JSON_CONNECTION
23756 field_addr.name = "gives_shared_vision";
23757#endif /* FREECIV_JSON_CONNECTION */
23758 e = 0;
23760 if (e) {
23761 log_packet_detailed("'gives_shared_vision' field error detected");
23762 }
23763 }
23764 if (BV_ISSET(fields, 32)) {
23765 log_packet_detailed(" field 'gives_shared_tiles' has changed");
23766#ifdef FREECIV_JSON_CONNECTION
23767 field_addr.name = "gives_shared_tiles";
23768#endif /* FREECIV_JSON_CONNECTION */
23769 e = 0;
23770 e |= DIO_BV_PUT(&dout, &field_addr, packet->gives_shared_tiles);
23771 if (e) {
23772 log_packet_detailed("'gives_shared_tiles' field error detected");
23773 }
23774 }
23775 if (BV_ISSET(fields, 33)) {
23776 log_packet_detailed(" field 'history' has changed");
23777#ifdef FREECIV_JSON_CONNECTION
23778 field_addr.name = "history";
23779#endif /* FREECIV_JSON_CONNECTION */
23780 e = 0;
23781 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
23782 if (e) {
23783 log_packet_detailed("'history' field error detected");
23784 }
23785 }
23786 if (BV_ISSET(fields, 34)) {
23787 log_packet_detailed(" field 'culture' has changed");
23788#ifdef FREECIV_JSON_CONNECTION
23789 field_addr.name = "culture";
23790#endif /* FREECIV_JSON_CONNECTION */
23791 e = 0;
23792 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
23793 if (e) {
23794 log_packet_detailed("'culture' field error detected");
23795 }
23796 }
23797 if (BV_ISSET(fields, 35)) {
23798 log_packet_detailed(" field 'love' has changed");
23799#ifdef FREECIV_JSON_CONNECTION
23800 field_addr.name = "love";
23801#endif /* FREECIV_JSON_CONNECTION */
23802 e = 0;
23803 {
23804 int i;
23805
23806#ifdef FREECIV_JSON_CONNECTION
23807 /* Create the array. */
23809
23810 /* Enter the array. */
23811 field_addr.sub_location = plocation_elem_new(0);
23812#endif /* FREECIV_JSON_CONNECTION */
23813
23814 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
23815#ifdef FREECIV_JSON_CONNECTION
23816 /* Next array element. */
23817 field_addr.sub_location->number = i;
23818#endif /* FREECIV_JSON_CONNECTION */
23819
23820 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
23821 }
23822
23823#ifdef FREECIV_JSON_CONNECTION
23824 /* Exit array. */
23825 FC_FREE(field_addr.sub_location);
23826#endif /* FREECIV_JSON_CONNECTION */
23827 }
23828 if (e) {
23829 log_packet_detailed("'love' field error detected");
23830 }
23831 }
23832 /* field 36 is folded into the header */
23833 /* field 37 is folded into the header */
23834 if (BV_ISSET(fields, 38)) {
23835 log_packet_detailed(" field 'color_red' has changed");
23836#ifdef FREECIV_JSON_CONNECTION
23837 field_addr.name = "color_red";
23838#endif /* FREECIV_JSON_CONNECTION */
23839 e = 0;
23840 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
23841 if (e) {
23842 log_packet_detailed("'color_red' field error detected");
23843 }
23844 }
23845 if (BV_ISSET(fields, 39)) {
23846 log_packet_detailed(" field 'color_green' has changed");
23847#ifdef FREECIV_JSON_CONNECTION
23848 field_addr.name = "color_green";
23849#endif /* FREECIV_JSON_CONNECTION */
23850 e = 0;
23851 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
23852 if (e) {
23853 log_packet_detailed("'color_green' field error detected");
23854 }
23855 }
23856 if (BV_ISSET(fields, 40)) {
23857 log_packet_detailed(" field 'color_blue' has changed");
23858#ifdef FREECIV_JSON_CONNECTION
23859 field_addr.name = "color_blue";
23860#endif /* FREECIV_JSON_CONNECTION */
23861 e = 0;
23862 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
23863 if (e) {
23864 log_packet_detailed("'color_blue' field error detected");
23865 }
23866 }
23867 if (BV_ISSET(fields, 41)) {
23868 log_packet_detailed(" field 'flags' has changed");
23869#ifdef FREECIV_JSON_CONNECTION
23870 field_addr.name = "flags";
23871#endif /* FREECIV_JSON_CONNECTION */
23872 e = 0;
23873 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
23874 if (e) {
23875 log_packet_detailed("'flags' field error detected");
23876 }
23877 }
23878 if (BV_ISSET(fields, 42)) {
23879 log_packet_detailed(" field 'wonders' has changed");
23880#ifdef FREECIV_JSON_CONNECTION
23881 field_addr.name = "wonders";
23882#endif /* FREECIV_JSON_CONNECTION */
23883 e = 0;
23885 {
23886 int i;
23887
23888#ifdef FREECIV_JSON_CONNECTION
23889 size_t count_i = 0;
23890
23891 /* Create the array. */
23892 e |= DIO_PUT(farray, &dout, &field_addr, 0);
23893
23894 /* Enter array. */
23895 field_addr.sub_location = plocation_elem_new(0);
23896#endif /* FREECIV_JSON_CONNECTION */
23897
23898 for (i = 0; i < B_LAST; i++) {
23899 differ = (old->wonders[i] != real_packet->wonders[i]);
23900
23901 if (differ) {
23902#ifdef FREECIV_JSON_CONNECTION
23903 /* Append next diff array element. */
23904 field_addr.sub_location->number = -1;
23905
23906 /* Create the diff array element. */
23907 e |= DIO_PUT(farray, &dout, &field_addr, 2);
23908
23909 /* Enter diff array element (start at the index address). */
23910 field_addr.sub_location->number = count_i++;
23911 field_addr.sub_location->sub_location = plocation_elem_new(0);
23912#endif /* FREECIV_JSON_CONNECTION */
23913
23914 /* Write the index */
23915#if B_LAST <= MAX_UINT8
23916 e |= DIO_PUT(uint8, &dout, &field_addr, i);
23917#else
23918 e |= DIO_PUT(uint16, &dout, &field_addr, i);
23919#endif
23920
23921#ifdef FREECIV_JSON_CONNECTION
23922 /* Content address. */
23923 field_addr.sub_location->sub_location->number = 1;
23924#endif /* FREECIV_JSON_CONNECTION */
23925
23926 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
23927
23928#ifdef FREECIV_JSON_CONNECTION
23929 /* Exit diff array element. */
23930 FC_FREE(field_addr.sub_location->sub_location);
23931#endif /* FREECIV_JSON_CONNECTION */
23932 }
23933 }
23934
23935#ifdef FREECIV_JSON_CONNECTION
23936 /* Append diff array element. */
23937 field_addr.sub_location->number = -1;
23938
23939 /* Create the terminating diff array element. */
23940 e |= DIO_PUT(farray, &dout, &field_addr, 1);
23941
23942 /* Enter diff array element (start at the index address). */
23943 field_addr.sub_location->number = count_i;
23944 field_addr.sub_location->sub_location = plocation_elem_new(0);
23945#endif /* FREECIV_JSON_CONNECTION */
23946
23947 /* Write the sentinel value */
23948#if B_LAST <= MAX_UINT8
23949 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
23950#else
23951 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
23952#endif
23953
23954#ifdef FREECIV_JSON_CONNECTION
23955 /* Exit diff array element. */
23956 FC_FREE(field_addr.sub_location->sub_location);
23957
23958 /* Exit array. */
23959 FC_FREE(field_addr.sub_location);
23960#endif /* FREECIV_JSON_CONNECTION */
23961 }
23962 if (e) {
23963 log_packet_detailed("'wonders' field error detected");
23964 }
23965 }
23966 if (BV_ISSET(fields, 43)) {
23967 log_packet_detailed(" field 'multip_count' has changed");
23968#ifdef FREECIV_JSON_CONNECTION
23969 field_addr.name = "multip_count";
23970#endif /* FREECIV_JSON_CONNECTION */
23971 e = 0;
23972 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
23973 if (e) {
23974 log_packet_detailed("'multip_count' field error detected");
23975 }
23976 }
23977 if (BV_ISSET(fields, 44)) {
23978 log_packet_detailed(" field 'multiplier' has changed");
23979#ifdef FREECIV_JSON_CONNECTION
23980 field_addr.name = "multiplier";
23981#endif /* FREECIV_JSON_CONNECTION */
23982 e = 0;
23983 {
23984 int i;
23985
23986#ifdef FREECIV_JSON_CONNECTION
23987 /* Create the array. */
23988 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
23989
23990 /* Enter the array. */
23991 field_addr.sub_location = plocation_elem_new(0);
23992#endif /* FREECIV_JSON_CONNECTION */
23993
23994 for (i = 0; i < real_packet->multip_count; i++) {
23995#ifdef FREECIV_JSON_CONNECTION
23996 /* Next array element. */
23997 field_addr.sub_location->number = i;
23998#endif /* FREECIV_JSON_CONNECTION */
23999
24000 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
24001 }
24002
24003#ifdef FREECIV_JSON_CONNECTION
24004 /* Exit array. */
24005 FC_FREE(field_addr.sub_location);
24006#endif /* FREECIV_JSON_CONNECTION */
24007 }
24008 if (e) {
24009 log_packet_detailed("'multiplier' field error detected");
24010 }
24011 }
24012 if (BV_ISSET(fields, 45)) {
24013 log_packet_detailed(" field 'multiplier_target' has changed");
24014#ifdef FREECIV_JSON_CONNECTION
24015 field_addr.name = "multiplier_target";
24016#endif /* FREECIV_JSON_CONNECTION */
24017 e = 0;
24018 {
24019 int i;
24020
24021#ifdef FREECIV_JSON_CONNECTION
24022 /* Create the array. */
24023 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
24024
24025 /* Enter the array. */
24026 field_addr.sub_location = plocation_elem_new(0);
24027#endif /* FREECIV_JSON_CONNECTION */
24028
24029 for (i = 0; i < real_packet->multip_count; i++) {
24030#ifdef FREECIV_JSON_CONNECTION
24031 /* Next array element. */
24032 field_addr.sub_location->number = i;
24033#endif /* FREECIV_JSON_CONNECTION */
24034
24035 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
24036 }
24037
24038#ifdef FREECIV_JSON_CONNECTION
24039 /* Exit array. */
24040 FC_FREE(field_addr.sub_location);
24041#endif /* FREECIV_JSON_CONNECTION */
24042 }
24043 if (e) {
24044 log_packet_detailed("'multiplier_target' field error detected");
24045 }
24046 }
24047 if (BV_ISSET(fields, 46)) {
24048 log_packet_detailed(" field 'multiplier_changed' has changed");
24049#ifdef FREECIV_JSON_CONNECTION
24050 field_addr.name = "multiplier_changed";
24051#endif /* FREECIV_JSON_CONNECTION */
24052 e = 0;
24053 {
24054 int i;
24055
24056#ifdef FREECIV_JSON_CONNECTION
24057 /* Create the array. */
24058 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
24059
24060 /* Enter the array. */
24061 field_addr.sub_location = plocation_elem_new(0);
24062#endif /* FREECIV_JSON_CONNECTION */
24063
24064 for (i = 0; i < real_packet->multip_count; i++) {
24065#ifdef FREECIV_JSON_CONNECTION
24066 /* Next array element. */
24067 field_addr.sub_location->number = i;
24068#endif /* FREECIV_JSON_CONNECTION */
24069
24070 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
24071 }
24072
24073#ifdef FREECIV_JSON_CONNECTION
24074 /* Exit array. */
24075 FC_FREE(field_addr.sub_location);
24076#endif /* FREECIV_JSON_CONNECTION */
24077 }
24078 if (e) {
24079 log_packet_detailed("'multiplier_changed' field error detected");
24080 }
24081 }
24082
24083 *old = *real_packet;
24084#endif /* FREECIV_DELTA_PROTOCOL */
24085#ifndef FREECIV_DELTA_PROTOCOL
24086#ifdef FREECIV_JSON_CONNECTION
24087 field_addr.name = "playerno";
24088#endif /* FREECIV_JSON_CONNECTION */
24089 e = 0;
24090 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
24091 if (e) {
24092 log_packet_detailed("'playerno' field error detected");
24093 }
24094#ifdef FREECIV_JSON_CONNECTION
24095 field_addr.name = "name";
24096#endif /* FREECIV_JSON_CONNECTION */
24097 e = 0;
24098 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
24099 if (e) {
24100 log_packet_detailed("'name' field error detected");
24101 }
24102#ifdef FREECIV_JSON_CONNECTION
24103 field_addr.name = "username";
24104#endif /* FREECIV_JSON_CONNECTION */
24105 e = 0;
24106 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
24107 if (e) {
24108 log_packet_detailed("'username' field error detected");
24109 }
24110#ifdef FREECIV_JSON_CONNECTION
24111 field_addr.name = "unassigned_user";
24112#endif /* FREECIV_JSON_CONNECTION */
24113 e = 0;
24114 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unassigned_user);
24115 if (e) {
24116 log_packet_detailed("'unassigned_user' field error detected");
24117 }
24118#ifdef FREECIV_JSON_CONNECTION
24119 field_addr.name = "score";
24120#endif /* FREECIV_JSON_CONNECTION */
24121 e = 0;
24122 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
24123 if (e) {
24124 log_packet_detailed("'score' field error detected");
24125 }
24126#ifdef FREECIV_JSON_CONNECTION
24127 field_addr.name = "is_male";
24128#endif /* FREECIV_JSON_CONNECTION */
24129 e = 0;
24130 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
24131 if (e) {
24132 log_packet_detailed("'is_male' field error detected");
24133 }
24134#ifdef FREECIV_JSON_CONNECTION
24135 field_addr.name = "was_created";
24136#endif /* FREECIV_JSON_CONNECTION */
24137 e = 0;
24138 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_created);
24139 if (e) {
24140 log_packet_detailed("'was_created' field error detected");
24141 }
24142#ifdef FREECIV_JSON_CONNECTION
24143 field_addr.name = "government";
24144#endif /* FREECIV_JSON_CONNECTION */
24145 e = 0;
24146 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
24147 if (e) {
24148 log_packet_detailed("'government' field error detected");
24149 }
24150#ifdef FREECIV_JSON_CONNECTION
24151 field_addr.name = "target_government";
24152#endif /* FREECIV_JSON_CONNECTION */
24153 e = 0;
24154 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
24155 if (e) {
24156 log_packet_detailed("'target_government' field error detected");
24157 }
24158#ifdef FREECIV_JSON_CONNECTION
24159 field_addr.name = "real_embassy";
24160#endif /* FREECIV_JSON_CONNECTION */
24161 e = 0;
24162 e |= DIO_BV_PUT(&dout, &field_addr, packet->real_embassy);
24163 if (e) {
24164 log_packet_detailed("'real_embassy' field error detected");
24165 }
24166#ifdef FREECIV_JSON_CONNECTION
24167 field_addr.name = "mood";
24168#endif /* FREECIV_JSON_CONNECTION */
24169 e = 0;
24170 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
24171 if (e) {
24172 log_packet_detailed("'mood' field error detected");
24173 }
24174#ifdef FREECIV_JSON_CONNECTION
24175 field_addr.name = "style";
24176#endif /* FREECIV_JSON_CONNECTION */
24177 e = 0;
24178 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
24179 if (e) {
24180 log_packet_detailed("'style' field error detected");
24181 }
24182#ifdef FREECIV_JSON_CONNECTION
24183 field_addr.name = "music_style";
24184#endif /* FREECIV_JSON_CONNECTION */
24185 e = 0;
24186 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
24187 if (e) {
24188 log_packet_detailed("'music_style' field error detected");
24189 }
24190#ifdef FREECIV_JSON_CONNECTION
24191 field_addr.name = "nation";
24192#endif /* FREECIV_JSON_CONNECTION */
24193 e = 0;
24194 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
24195 if (e) {
24196 log_packet_detailed("'nation' field error detected");
24197 }
24198#ifdef FREECIV_JSON_CONNECTION
24199 field_addr.name = "team";
24200#endif /* FREECIV_JSON_CONNECTION */
24201 e = 0;
24202 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
24203 if (e) {
24204 log_packet_detailed("'team' field error detected");
24205 }
24206#ifdef FREECIV_JSON_CONNECTION
24207 field_addr.name = "is_ready";
24208#endif /* FREECIV_JSON_CONNECTION */
24209 e = 0;
24210 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
24211 if (e) {
24212 log_packet_detailed("'is_ready' field error detected");
24213 }
24214#ifdef FREECIV_JSON_CONNECTION
24215 field_addr.name = "phase_done";
24216#endif /* FREECIV_JSON_CONNECTION */
24217 e = 0;
24218 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
24219 if (e) {
24220 log_packet_detailed("'phase_done' field error detected");
24221 }
24222#ifdef FREECIV_JSON_CONNECTION
24223 field_addr.name = "nturns_idle";
24224#endif /* FREECIV_JSON_CONNECTION */
24225 e = 0;
24226 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
24227 if (e) {
24228 log_packet_detailed("'nturns_idle' field error detected");
24229 }
24230#ifdef FREECIV_JSON_CONNECTION
24231 field_addr.name = "turns_alive";
24232#endif /* FREECIV_JSON_CONNECTION */
24233 e = 0;
24234 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
24235 if (e) {
24236 log_packet_detailed("'turns_alive' field error detected");
24237 }
24238#ifdef FREECIV_JSON_CONNECTION
24239 field_addr.name = "is_alive";
24240#endif /* FREECIV_JSON_CONNECTION */
24241 e = 0;
24242 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
24243 if (e) {
24244 log_packet_detailed("'is_alive' field error detected");
24245 }
24246#ifdef FREECIV_JSON_CONNECTION
24247 field_addr.name = "autoselect_weight";
24248#endif /* FREECIV_JSON_CONNECTION */
24249 e = 0;
24250 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
24251 if (e) {
24252 log_packet_detailed("'autoselect_weight' field error detected");
24253 }
24254#ifdef FREECIV_JSON_CONNECTION
24255 field_addr.name = "gold";
24256#endif /* FREECIV_JSON_CONNECTION */
24257 e = 0;
24258 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
24259 if (e) {
24260 log_packet_detailed("'gold' field error detected");
24261 }
24262#ifdef FREECIV_JSON_CONNECTION
24263 field_addr.name = "tax";
24264#endif /* FREECIV_JSON_CONNECTION */
24265 e = 0;
24266 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
24267 if (e) {
24268 log_packet_detailed("'tax' field error detected");
24269 }
24270#ifdef FREECIV_JSON_CONNECTION
24271 field_addr.name = "science";
24272#endif /* FREECIV_JSON_CONNECTION */
24273 e = 0;
24274 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
24275 if (e) {
24276 log_packet_detailed("'science' field error detected");
24277 }
24278#ifdef FREECIV_JSON_CONNECTION
24279 field_addr.name = "luxury";
24280#endif /* FREECIV_JSON_CONNECTION */
24281 e = 0;
24282 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
24283 if (e) {
24284 log_packet_detailed("'luxury' field error detected");
24285 }
24286#ifdef FREECIV_JSON_CONNECTION
24287 field_addr.name = "infrapoints";
24288#endif /* FREECIV_JSON_CONNECTION */
24289 e = 0;
24290 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
24291 if (e) {
24292 log_packet_detailed("'infrapoints' field error detected");
24293 }
24294#ifdef FREECIV_JSON_CONNECTION
24295 field_addr.name = "tech_upkeep_16";
24296#endif /* FREECIV_JSON_CONNECTION */
24297 e = 0;
24298 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_16);
24299 if (e) {
24300 log_packet_detailed("'tech_upkeep_16' field error detected");
24301 }
24302#ifdef FREECIV_JSON_CONNECTION
24303 field_addr.name = "science_cost";
24304#endif /* FREECIV_JSON_CONNECTION */
24305 e = 0;
24306 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
24307 if (e) {
24308 log_packet_detailed("'science_cost' field error detected");
24309 }
24310#ifdef FREECIV_JSON_CONNECTION
24311 field_addr.name = "is_connected";
24312#endif /* FREECIV_JSON_CONNECTION */
24313 e = 0;
24314 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_connected);
24315 if (e) {
24316 log_packet_detailed("'is_connected' field error detected");
24317 }
24318#ifdef FREECIV_JSON_CONNECTION
24319 field_addr.name = "revolution_finishes";
24320#endif /* FREECIV_JSON_CONNECTION */
24321 e = 0;
24322 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
24323 if (e) {
24324 log_packet_detailed("'revolution_finishes' field error detected");
24325 }
24326#ifdef FREECIV_JSON_CONNECTION
24327 field_addr.name = "ai_skill_level";
24328#endif /* FREECIV_JSON_CONNECTION */
24329 e = 0;
24330 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
24331 if (e) {
24332 log_packet_detailed("'ai_skill_level' field error detected");
24333 }
24334#ifdef FREECIV_JSON_CONNECTION
24335 field_addr.name = "barbarian_type";
24336#endif /* FREECIV_JSON_CONNECTION */
24337 e = 0;
24338 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
24339 if (e) {
24340 log_packet_detailed("'barbarian_type' field error detected");
24341 }
24342#ifdef FREECIV_JSON_CONNECTION
24343 field_addr.name = "gives_shared_vision";
24344#endif /* FREECIV_JSON_CONNECTION */
24345 e = 0;
24347 if (e) {
24348 log_packet_detailed("'gives_shared_vision' field error detected");
24349 }
24350#ifdef FREECIV_JSON_CONNECTION
24351 field_addr.name = "gives_shared_tiles";
24352#endif /* FREECIV_JSON_CONNECTION */
24353 e = 0;
24354 e |= DIO_BV_PUT(&dout, &field_addr, packet->gives_shared_tiles);
24355 if (e) {
24356 log_packet_detailed("'gives_shared_tiles' field error detected");
24357 }
24358#ifdef FREECIV_JSON_CONNECTION
24359 field_addr.name = "history";
24360#endif /* FREECIV_JSON_CONNECTION */
24361 e = 0;
24362 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
24363 if (e) {
24364 log_packet_detailed("'history' field error detected");
24365 }
24366#ifdef FREECIV_JSON_CONNECTION
24367 field_addr.name = "culture";
24368#endif /* FREECIV_JSON_CONNECTION */
24369 e = 0;
24370 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
24371 if (e) {
24372 log_packet_detailed("'culture' field error detected");
24373 }
24374#ifdef FREECIV_JSON_CONNECTION
24375 field_addr.name = "love";
24376#endif /* FREECIV_JSON_CONNECTION */
24377 e = 0;
24378 {
24379 int i;
24380
24381#ifdef FREECIV_JSON_CONNECTION
24382 /* Create the array. */
24384
24385 /* Enter the array. */
24386 field_addr.sub_location = plocation_elem_new(0);
24387#endif /* FREECIV_JSON_CONNECTION */
24388
24389 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
24390#ifdef FREECIV_JSON_CONNECTION
24391 /* Next array element. */
24392 field_addr.sub_location->number = i;
24393#endif /* FREECIV_JSON_CONNECTION */
24394
24395 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
24396 }
24397
24398#ifdef FREECIV_JSON_CONNECTION
24399 /* Exit array. */
24400 FC_FREE(field_addr.sub_location);
24401#endif /* FREECIV_JSON_CONNECTION */
24402 }
24403 if (e) {
24404 log_packet_detailed("'love' field error detected");
24405 }
24406#ifdef FREECIV_JSON_CONNECTION
24407 field_addr.name = "color_valid";
24408#endif /* FREECIV_JSON_CONNECTION */
24409 e = 0;
24410 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_valid);
24411 if (e) {
24412 log_packet_detailed("'color_valid' field error detected");
24413 }
24414#ifdef FREECIV_JSON_CONNECTION
24415 field_addr.name = "color_changeable";
24416#endif /* FREECIV_JSON_CONNECTION */
24417 e = 0;
24418 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_changeable);
24419 if (e) {
24420 log_packet_detailed("'color_changeable' field error detected");
24421 }
24422#ifdef FREECIV_JSON_CONNECTION
24423 field_addr.name = "color_red";
24424#endif /* FREECIV_JSON_CONNECTION */
24425 e = 0;
24426 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
24427 if (e) {
24428 log_packet_detailed("'color_red' field error detected");
24429 }
24430#ifdef FREECIV_JSON_CONNECTION
24431 field_addr.name = "color_green";
24432#endif /* FREECIV_JSON_CONNECTION */
24433 e = 0;
24434 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
24435 if (e) {
24436 log_packet_detailed("'color_green' field error detected");
24437 }
24438#ifdef FREECIV_JSON_CONNECTION
24439 field_addr.name = "color_blue";
24440#endif /* FREECIV_JSON_CONNECTION */
24441 e = 0;
24442 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
24443 if (e) {
24444 log_packet_detailed("'color_blue' field error detected");
24445 }
24446#ifdef FREECIV_JSON_CONNECTION
24447 field_addr.name = "flags";
24448#endif /* FREECIV_JSON_CONNECTION */
24449 e = 0;
24450 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
24451 if (e) {
24452 log_packet_detailed("'flags' field error detected");
24453 }
24454#ifdef FREECIV_JSON_CONNECTION
24455 field_addr.name = "wonders";
24456#endif /* FREECIV_JSON_CONNECTION */
24457 e = 0;
24458 {
24459 int i;
24460
24461#ifdef FREECIV_JSON_CONNECTION
24462 /* Create the array. */
24463 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
24464
24465 /* Enter the array. */
24466 field_addr.sub_location = plocation_elem_new(0);
24467#endif /* FREECIV_JSON_CONNECTION */
24468
24469 for (i = 0; i < B_LAST; i++) {
24470#ifdef FREECIV_JSON_CONNECTION
24471 /* Next array element. */
24472 field_addr.sub_location->number = i;
24473#endif /* FREECIV_JSON_CONNECTION */
24474
24475 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
24476 }
24477
24478#ifdef FREECIV_JSON_CONNECTION
24479 /* Exit array. */
24480 FC_FREE(field_addr.sub_location);
24481#endif /* FREECIV_JSON_CONNECTION */
24482 }
24483 if (e) {
24484 log_packet_detailed("'wonders' field error detected");
24485 }
24486#ifdef FREECIV_JSON_CONNECTION
24487 field_addr.name = "multip_count";
24488#endif /* FREECIV_JSON_CONNECTION */
24489 e = 0;
24490 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
24491 if (e) {
24492 log_packet_detailed("'multip_count' field error detected");
24493 }
24494#ifdef FREECIV_JSON_CONNECTION
24495 field_addr.name = "multiplier";
24496#endif /* FREECIV_JSON_CONNECTION */
24497 e = 0;
24498 {
24499 int i;
24500
24501#ifdef FREECIV_JSON_CONNECTION
24502 /* Create the array. */
24503 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
24504
24505 /* Enter the array. */
24506 field_addr.sub_location = plocation_elem_new(0);
24507#endif /* FREECIV_JSON_CONNECTION */
24508
24509 for (i = 0; i < real_packet->multip_count; i++) {
24510#ifdef FREECIV_JSON_CONNECTION
24511 /* Next array element. */
24512 field_addr.sub_location->number = i;
24513#endif /* FREECIV_JSON_CONNECTION */
24514
24515 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
24516 }
24517
24518#ifdef FREECIV_JSON_CONNECTION
24519 /* Exit array. */
24520 FC_FREE(field_addr.sub_location);
24521#endif /* FREECIV_JSON_CONNECTION */
24522 }
24523 if (e) {
24524 log_packet_detailed("'multiplier' field error detected");
24525 }
24526#ifdef FREECIV_JSON_CONNECTION
24527 field_addr.name = "multiplier_target";
24528#endif /* FREECIV_JSON_CONNECTION */
24529 e = 0;
24530 {
24531 int i;
24532
24533#ifdef FREECIV_JSON_CONNECTION
24534 /* Create the array. */
24535 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
24536
24537 /* Enter the array. */
24538 field_addr.sub_location = plocation_elem_new(0);
24539#endif /* FREECIV_JSON_CONNECTION */
24540
24541 for (i = 0; i < real_packet->multip_count; i++) {
24542#ifdef FREECIV_JSON_CONNECTION
24543 /* Next array element. */
24544 field_addr.sub_location->number = i;
24545#endif /* FREECIV_JSON_CONNECTION */
24546
24547 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
24548 }
24549
24550#ifdef FREECIV_JSON_CONNECTION
24551 /* Exit array. */
24552 FC_FREE(field_addr.sub_location);
24553#endif /* FREECIV_JSON_CONNECTION */
24554 }
24555 if (e) {
24556 log_packet_detailed("'multiplier_target' field error detected");
24557 }
24558#ifdef FREECIV_JSON_CONNECTION
24559 field_addr.name = "multiplier_changed";
24560#endif /* FREECIV_JSON_CONNECTION */
24561 e = 0;
24562 {
24563 int i;
24564
24565#ifdef FREECIV_JSON_CONNECTION
24566 /* Create the array. */
24567 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
24568
24569 /* Enter the array. */
24570 field_addr.sub_location = plocation_elem_new(0);
24571#endif /* FREECIV_JSON_CONNECTION */
24572
24573 for (i = 0; i < real_packet->multip_count; i++) {
24574#ifdef FREECIV_JSON_CONNECTION
24575 /* Next array element. */
24576 field_addr.sub_location->number = i;
24577#endif /* FREECIV_JSON_CONNECTION */
24578
24579 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
24580 }
24581
24582#ifdef FREECIV_JSON_CONNECTION
24583 /* Exit array. */
24584 FC_FREE(field_addr.sub_location);
24585#endif /* FREECIV_JSON_CONNECTION */
24586 }
24587 if (e) {
24588 log_packet_detailed("'multiplier_changed' field error detected");
24589 }
24590
24591#endif
24593}
24594
24595#ifdef FREECIV_DELTA_PROTOCOL
24597{
24598 const struct packet_player_info *key = (const struct packet_player_info *) vkey;
24599 genhash_val_t result = 0;
24600
24601 result += key->playerno;
24602
24603 result &= 0xFFFFFFFF;
24604 return result;
24605}
24606
24607static bool cmp_packet_player_info_101(const void *vkey1, const void *vkey2)
24608{
24609 const struct packet_player_info *old = (const struct packet_player_info *) vkey1;
24610 const struct packet_player_info *real_packet = (const struct packet_player_info *) vkey2;
24611 bool differ;
24612
24613 differ = (old->playerno != real_packet->playerno);
24614
24615 return !differ;
24616}
24618#endif /* FREECIV_DELTA_PROTOCOL */
24619
24621{
24622#ifdef FREECIV_DELTA_PROTOCOL
24624 struct packet_player_info *old;
24625 struct genhash **hash = pc->phs.received + PACKET_PLAYER_INFO;
24626#endif /* FREECIV_DELTA_PROTOCOL */
24628#ifdef FREECIV_JSON_CONNECTION
24629 struct plocation field_addr;
24630 {
24634 }
24635#endif /* FREECIV_JSON_CONNECTION */
24636
24637#ifdef FREECIV_DELTA_PROTOCOL
24638#ifdef FREECIV_JSON_CONNECTION
24639 field_addr.name = "fields";
24640#endif /* FREECIV_JSON_CONNECTION */
24641 DIO_BV_GET(&din, &field_addr, fields);
24642#ifdef FREECIV_JSON_CONNECTION
24643 field_addr.name = "playerno";
24644#endif /* FREECIV_JSON_CONNECTION */
24645 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
24647 }
24648
24649#else /* FREECIV_DELTA_PROTOCOL */
24650#ifdef FREECIV_JSON_CONNECTION
24651 field_addr.name = "playerno";
24652#endif /* FREECIV_JSON_CONNECTION */
24653 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
24655 }
24656#ifdef FREECIV_JSON_CONNECTION
24657 field_addr.name = "name";
24658#endif /* FREECIV_JSON_CONNECTION */
24659 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
24661 }
24662#ifdef FREECIV_JSON_CONNECTION
24663 field_addr.name = "username";
24664#endif /* FREECIV_JSON_CONNECTION */
24665 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
24667 }
24668#ifdef FREECIV_JSON_CONNECTION
24669 field_addr.name = "unassigned_user";
24670#endif /* FREECIV_JSON_CONNECTION */
24671 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unassigned_user)) {
24672 RECEIVE_PACKET_FIELD_ERROR(unassigned_user);
24673 }
24674#ifdef FREECIV_JSON_CONNECTION
24675 field_addr.name = "score";
24676#endif /* FREECIV_JSON_CONNECTION */
24677 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
24679 }
24680#ifdef FREECIV_JSON_CONNECTION
24681 field_addr.name = "is_male";
24682#endif /* FREECIV_JSON_CONNECTION */
24683 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
24685 }
24686#ifdef FREECIV_JSON_CONNECTION
24687 field_addr.name = "was_created";
24688#endif /* FREECIV_JSON_CONNECTION */
24689 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_created)) {
24690 RECEIVE_PACKET_FIELD_ERROR(was_created);
24691 }
24692#ifdef FREECIV_JSON_CONNECTION
24693 field_addr.name = "government";
24694#endif /* FREECIV_JSON_CONNECTION */
24695 {
24696 int readin;
24697
24698 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
24700 }
24701 real_packet->government = readin;
24702 }
24703#ifdef FREECIV_JSON_CONNECTION
24704 field_addr.name = "target_government";
24705#endif /* FREECIV_JSON_CONNECTION */
24706 {
24707 int readin;
24708
24709 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
24710 RECEIVE_PACKET_FIELD_ERROR(target_government);
24711 }
24712 real_packet->target_government = readin;
24713 }
24714#ifdef FREECIV_JSON_CONNECTION
24715 field_addr.name = "real_embassy";
24716#endif /* FREECIV_JSON_CONNECTION */
24717 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
24718 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
24719 }
24720#ifdef FREECIV_JSON_CONNECTION
24721 field_addr.name = "mood";
24722#endif /* FREECIV_JSON_CONNECTION */
24723 {
24724 int readin;
24725
24726 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24728 }
24729 real_packet->mood = readin;
24730 }
24731#ifdef FREECIV_JSON_CONNECTION
24732 field_addr.name = "style";
24733#endif /* FREECIV_JSON_CONNECTION */
24734 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
24736 }
24737#ifdef FREECIV_JSON_CONNECTION
24738 field_addr.name = "music_style";
24739#endif /* FREECIV_JSON_CONNECTION */
24740 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
24742 }
24743#ifdef FREECIV_JSON_CONNECTION
24744 field_addr.name = "nation";
24745#endif /* FREECIV_JSON_CONNECTION */
24746 {
24747 int readin;
24748
24749 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
24751 }
24752 real_packet->nation = readin;
24753 }
24754#ifdef FREECIV_JSON_CONNECTION
24755 field_addr.name = "team";
24756#endif /* FREECIV_JSON_CONNECTION */
24757 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
24759 }
24760#ifdef FREECIV_JSON_CONNECTION
24761 field_addr.name = "is_ready";
24762#endif /* FREECIV_JSON_CONNECTION */
24763 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
24765 }
24766#ifdef FREECIV_JSON_CONNECTION
24767 field_addr.name = "phase_done";
24768#endif /* FREECIV_JSON_CONNECTION */
24769 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
24770 RECEIVE_PACKET_FIELD_ERROR(phase_done);
24771 }
24772#ifdef FREECIV_JSON_CONNECTION
24773 field_addr.name = "nturns_idle";
24774#endif /* FREECIV_JSON_CONNECTION */
24775 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
24776 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
24777 }
24778#ifdef FREECIV_JSON_CONNECTION
24779 field_addr.name = "turns_alive";
24780#endif /* FREECIV_JSON_CONNECTION */
24781 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
24782 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
24783 }
24784#ifdef FREECIV_JSON_CONNECTION
24785 field_addr.name = "is_alive";
24786#endif /* FREECIV_JSON_CONNECTION */
24787 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
24789 }
24790#ifdef FREECIV_JSON_CONNECTION
24791 field_addr.name = "autoselect_weight";
24792#endif /* FREECIV_JSON_CONNECTION */
24793 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
24794 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
24795 }
24796#ifdef FREECIV_JSON_CONNECTION
24797 field_addr.name = "gold";
24798#endif /* FREECIV_JSON_CONNECTION */
24799 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
24801 }
24802#ifdef FREECIV_JSON_CONNECTION
24803 field_addr.name = "tax";
24804#endif /* FREECIV_JSON_CONNECTION */
24805 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
24807 }
24808#ifdef FREECIV_JSON_CONNECTION
24809 field_addr.name = "science";
24810#endif /* FREECIV_JSON_CONNECTION */
24811 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
24813 }
24814#ifdef FREECIV_JSON_CONNECTION
24815 field_addr.name = "luxury";
24816#endif /* FREECIV_JSON_CONNECTION */
24817 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
24819 }
24820#ifdef FREECIV_JSON_CONNECTION
24821 field_addr.name = "infrapoints";
24822#endif /* FREECIV_JSON_CONNECTION */
24823 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
24824 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
24825 }
24826#ifdef FREECIV_JSON_CONNECTION
24827 field_addr.name = "tech_upkeep_32";
24828#endif /* FREECIV_JSON_CONNECTION */
24829 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep_32)) {
24830 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_32);
24831 }
24832#ifdef FREECIV_JSON_CONNECTION
24833 field_addr.name = "science_cost";
24834#endif /* FREECIV_JSON_CONNECTION */
24835 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
24836 RECEIVE_PACKET_FIELD_ERROR(science_cost);
24837 }
24838#ifdef FREECIV_JSON_CONNECTION
24839 field_addr.name = "is_connected";
24840#endif /* FREECIV_JSON_CONNECTION */
24841 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_connected)) {
24842 RECEIVE_PACKET_FIELD_ERROR(is_connected);
24843 }
24844#ifdef FREECIV_JSON_CONNECTION
24845 field_addr.name = "revolution_finishes";
24846#endif /* FREECIV_JSON_CONNECTION */
24847 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
24848 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
24849 }
24850#ifdef FREECIV_JSON_CONNECTION
24851 field_addr.name = "ai_skill_level";
24852#endif /* FREECIV_JSON_CONNECTION */
24853 {
24854 int readin;
24855
24856 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24857 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
24858 }
24859 real_packet->ai_skill_level = readin;
24860 }
24861#ifdef FREECIV_JSON_CONNECTION
24862 field_addr.name = "barbarian_type";
24863#endif /* FREECIV_JSON_CONNECTION */
24864 {
24865 int readin;
24866
24867 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24868 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
24869 }
24870 real_packet->barbarian_type = readin;
24871 }
24872#ifdef FREECIV_JSON_CONNECTION
24873 field_addr.name = "gives_shared_vision";
24874#endif /* FREECIV_JSON_CONNECTION */
24875 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
24877 }
24878#ifdef FREECIV_JSON_CONNECTION
24879 field_addr.name = "gives_shared_tiles";
24880#endif /* FREECIV_JSON_CONNECTION */
24881 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
24883 }
24884#ifdef FREECIV_JSON_CONNECTION
24885 field_addr.name = "history";
24886#endif /* FREECIV_JSON_CONNECTION */
24887 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
24889 }
24890#ifdef FREECIV_JSON_CONNECTION
24891 field_addr.name = "culture";
24892#endif /* FREECIV_JSON_CONNECTION */
24893 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
24895 }
24896#ifdef FREECIV_JSON_CONNECTION
24897 field_addr.name = "love";
24898#endif /* FREECIV_JSON_CONNECTION */
24899 {
24900 int i;
24901
24902#ifdef FREECIV_JSON_CONNECTION
24903 /* Enter array. */
24904 field_addr.sub_location = plocation_elem_new(0);
24905#endif /* FREECIV_JSON_CONNECTION */
24906
24907 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
24908#ifdef FREECIV_JSON_CONNECTION
24909 field_addr.sub_location->number = i;
24910#endif /* FREECIV_JSON_CONNECTION */
24911
24912 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
24914 }
24915 }
24916
24917#ifdef FREECIV_JSON_CONNECTION
24918 /* Exit array. */
24919 FC_FREE(field_addr.sub_location);
24920#endif /* FREECIV_JSON_CONNECTION */
24921 }
24922#ifdef FREECIV_JSON_CONNECTION
24923 field_addr.name = "color_valid";
24924#endif /* FREECIV_JSON_CONNECTION */
24925 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_valid)) {
24926 RECEIVE_PACKET_FIELD_ERROR(color_valid);
24927 }
24928#ifdef FREECIV_JSON_CONNECTION
24929 field_addr.name = "color_changeable";
24930#endif /* FREECIV_JSON_CONNECTION */
24931 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_changeable)) {
24932 RECEIVE_PACKET_FIELD_ERROR(color_changeable);
24933 }
24934#ifdef FREECIV_JSON_CONNECTION
24935 field_addr.name = "color_red";
24936#endif /* FREECIV_JSON_CONNECTION */
24937 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
24938 RECEIVE_PACKET_FIELD_ERROR(color_red);
24939 }
24940#ifdef FREECIV_JSON_CONNECTION
24941 field_addr.name = "color_green";
24942#endif /* FREECIV_JSON_CONNECTION */
24943 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
24944 RECEIVE_PACKET_FIELD_ERROR(color_green);
24945 }
24946#ifdef FREECIV_JSON_CONNECTION
24947 field_addr.name = "color_blue";
24948#endif /* FREECIV_JSON_CONNECTION */
24949 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
24950 RECEIVE_PACKET_FIELD_ERROR(color_blue);
24951 }
24952#ifdef FREECIV_JSON_CONNECTION
24953 field_addr.name = "flags";
24954#endif /* FREECIV_JSON_CONNECTION */
24955 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
24957 }
24958#ifdef FREECIV_JSON_CONNECTION
24959 field_addr.name = "wonders";
24960#endif /* FREECIV_JSON_CONNECTION */
24961 {
24962 int i;
24963
24964#ifdef FREECIV_JSON_CONNECTION
24965 /* Enter array. */
24966 field_addr.sub_location = plocation_elem_new(0);
24967#endif /* FREECIV_JSON_CONNECTION */
24968
24969 for (i = 0; i < B_LAST; i++) {
24970#ifdef FREECIV_JSON_CONNECTION
24971 field_addr.sub_location->number = i;
24972#endif /* FREECIV_JSON_CONNECTION */
24973
24974 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
24976 }
24977 }
24978
24979#ifdef FREECIV_JSON_CONNECTION
24980 /* Exit array. */
24981 FC_FREE(field_addr.sub_location);
24982#endif /* FREECIV_JSON_CONNECTION */
24983 }
24984#ifdef FREECIV_JSON_CONNECTION
24985 field_addr.name = "multip_count";
24986#endif /* FREECIV_JSON_CONNECTION */
24987 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
24988 RECEIVE_PACKET_FIELD_ERROR(multip_count);
24989 }
24990#ifdef FREECIV_JSON_CONNECTION
24991 field_addr.name = "multiplier";
24992#endif /* FREECIV_JSON_CONNECTION */
24993 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
24994 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": truncation array");
24995 }
24996 {
24997 int i;
24998
24999#ifdef FREECIV_JSON_CONNECTION
25000 /* Enter array. */
25001 field_addr.sub_location = plocation_elem_new(0);
25002#endif /* FREECIV_JSON_CONNECTION */
25003
25004 for (i = 0; i < real_packet->multip_count; i++) {
25005#ifdef FREECIV_JSON_CONNECTION
25006 field_addr.sub_location->number = i;
25007#endif /* FREECIV_JSON_CONNECTION */
25008
25009 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
25011 }
25012 }
25013
25014#ifdef FREECIV_JSON_CONNECTION
25015 /* Exit array. */
25016 FC_FREE(field_addr.sub_location);
25017#endif /* FREECIV_JSON_CONNECTION */
25018 }
25019#ifdef FREECIV_JSON_CONNECTION
25020 field_addr.name = "multiplier_target";
25021#endif /* FREECIV_JSON_CONNECTION */
25022 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
25023 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": truncation array");
25024 }
25025 {
25026 int i;
25027
25028#ifdef FREECIV_JSON_CONNECTION
25029 /* Enter array. */
25030 field_addr.sub_location = plocation_elem_new(0);
25031#endif /* FREECIV_JSON_CONNECTION */
25032
25033 for (i = 0; i < real_packet->multip_count; i++) {
25034#ifdef FREECIV_JSON_CONNECTION
25035 field_addr.sub_location->number = i;
25036#endif /* FREECIV_JSON_CONNECTION */
25037
25038 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
25039 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
25040 }
25041 }
25042
25043#ifdef FREECIV_JSON_CONNECTION
25044 /* Exit array. */
25045 FC_FREE(field_addr.sub_location);
25046#endif /* FREECIV_JSON_CONNECTION */
25047 }
25048#ifdef FREECIV_JSON_CONNECTION
25049 field_addr.name = "multiplier_changed";
25050#endif /* FREECIV_JSON_CONNECTION */
25051 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
25052 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": truncation array");
25053 }
25054 {
25055 int i;
25056
25057#ifdef FREECIV_JSON_CONNECTION
25058 /* Enter array. */
25059 field_addr.sub_location = plocation_elem_new(0);
25060#endif /* FREECIV_JSON_CONNECTION */
25061
25062 for (i = 0; i < real_packet->multip_count; i++) {
25063#ifdef FREECIV_JSON_CONNECTION
25064 field_addr.sub_location->number = i;
25065#endif /* FREECIV_JSON_CONNECTION */
25066
25067 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
25068 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
25069 }
25070 }
25071
25072#ifdef FREECIV_JSON_CONNECTION
25073 /* Exit array. */
25074 FC_FREE(field_addr.sub_location);
25075#endif /* FREECIV_JSON_CONNECTION */
25076 }
25077#endif
25078 log_packet_detailed("packet_player_info_101: got info about (%d)",
25079 real_packet->playerno);
25080
25081#ifdef FREECIV_DELTA_PROTOCOL
25082 if (NULL == *hash) {
25084 NULL, NULL, NULL, free);
25085 }
25086
25087 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25088 *real_packet = *old;
25089 } else {
25090 int playerno;
25091
25092 playerno = real_packet->playerno;
25093
25094 log_packet_detailed(" no old info");
25095 memset(real_packet, 0, sizeof(*real_packet));
25096
25097 real_packet->playerno = playerno;
25098 }
25099
25100 if (BV_ISSET(fields, 0)) {
25101 log_packet_detailed(" got field 'name'");
25102#ifdef FREECIV_JSON_CONNECTION
25103 field_addr.name = "name";
25104#endif /* FREECIV_JSON_CONNECTION */
25105 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
25107 }
25108 }
25109 if (BV_ISSET(fields, 1)) {
25110 log_packet_detailed(" got field 'username'");
25111#ifdef FREECIV_JSON_CONNECTION
25112 field_addr.name = "username";
25113#endif /* FREECIV_JSON_CONNECTION */
25114 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
25116 }
25117 }
25118 real_packet->unassigned_user = BV_ISSET(fields, 2);
25119 if (BV_ISSET(fields, 3)) {
25120 log_packet_detailed(" got field 'score'");
25121#ifdef FREECIV_JSON_CONNECTION
25122 field_addr.name = "score";
25123#endif /* FREECIV_JSON_CONNECTION */
25124 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
25126 }
25127 }
25128 real_packet->is_male = BV_ISSET(fields, 4);
25129 real_packet->was_created = BV_ISSET(fields, 5);
25130 if (BV_ISSET(fields, 6)) {
25131 log_packet_detailed(" got field 'government'");
25132#ifdef FREECIV_JSON_CONNECTION
25133 field_addr.name = "government";
25134#endif /* FREECIV_JSON_CONNECTION */
25135 {
25136 int readin;
25137
25138 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25140 }
25141 real_packet->government = readin;
25142 }
25143 }
25144 if (BV_ISSET(fields, 7)) {
25145 log_packet_detailed(" got field 'target_government'");
25146#ifdef FREECIV_JSON_CONNECTION
25147 field_addr.name = "target_government";
25148#endif /* FREECIV_JSON_CONNECTION */
25149 {
25150 int readin;
25151
25152 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25153 RECEIVE_PACKET_FIELD_ERROR(target_government);
25154 }
25155 real_packet->target_government = readin;
25156 }
25157 }
25158 if (BV_ISSET(fields, 8)) {
25159 log_packet_detailed(" got field 'real_embassy'");
25160#ifdef FREECIV_JSON_CONNECTION
25161 field_addr.name = "real_embassy";
25162#endif /* FREECIV_JSON_CONNECTION */
25163 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
25164 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
25165 }
25166 }
25167 if (BV_ISSET(fields, 9)) {
25168 log_packet_detailed(" got field 'mood'");
25169#ifdef FREECIV_JSON_CONNECTION
25170 field_addr.name = "mood";
25171#endif /* FREECIV_JSON_CONNECTION */
25172 {
25173 int readin;
25174
25175 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25177 }
25178 real_packet->mood = readin;
25179 }
25180 }
25181 if (BV_ISSET(fields, 10)) {
25182 log_packet_detailed(" got field 'style'");
25183#ifdef FREECIV_JSON_CONNECTION
25184 field_addr.name = "style";
25185#endif /* FREECIV_JSON_CONNECTION */
25186 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
25188 }
25189 }
25190 if (BV_ISSET(fields, 11)) {
25191 log_packet_detailed(" got field 'music_style'");
25192#ifdef FREECIV_JSON_CONNECTION
25193 field_addr.name = "music_style";
25194#endif /* FREECIV_JSON_CONNECTION */
25195 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
25197 }
25198 }
25199 if (BV_ISSET(fields, 12)) {
25200 log_packet_detailed(" got field 'nation'");
25201#ifdef FREECIV_JSON_CONNECTION
25202 field_addr.name = "nation";
25203#endif /* FREECIV_JSON_CONNECTION */
25204 {
25205 int readin;
25206
25207 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
25209 }
25210 real_packet->nation = readin;
25211 }
25212 }
25213 if (BV_ISSET(fields, 13)) {
25214 log_packet_detailed(" got field 'team'");
25215#ifdef FREECIV_JSON_CONNECTION
25216 field_addr.name = "team";
25217#endif /* FREECIV_JSON_CONNECTION */
25218 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
25220 }
25221 }
25222 real_packet->is_ready = BV_ISSET(fields, 14);
25223 real_packet->phase_done = BV_ISSET(fields, 15);
25224 if (BV_ISSET(fields, 16)) {
25225 log_packet_detailed(" got field 'nturns_idle'");
25226#ifdef FREECIV_JSON_CONNECTION
25227 field_addr.name = "nturns_idle";
25228#endif /* FREECIV_JSON_CONNECTION */
25229 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
25230 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
25231 }
25232 }
25233 if (BV_ISSET(fields, 17)) {
25234 log_packet_detailed(" got field 'turns_alive'");
25235#ifdef FREECIV_JSON_CONNECTION
25236 field_addr.name = "turns_alive";
25237#endif /* FREECIV_JSON_CONNECTION */
25238 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
25239 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
25240 }
25241 }
25242 real_packet->is_alive = BV_ISSET(fields, 18);
25243 if (BV_ISSET(fields, 19)) {
25244 log_packet_detailed(" got field 'autoselect_weight'");
25245#ifdef FREECIV_JSON_CONNECTION
25246 field_addr.name = "autoselect_weight";
25247#endif /* FREECIV_JSON_CONNECTION */
25248 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
25249 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
25250 }
25251 }
25252 if (BV_ISSET(fields, 20)) {
25253 log_packet_detailed(" got field 'gold'");
25254#ifdef FREECIV_JSON_CONNECTION
25255 field_addr.name = "gold";
25256#endif /* FREECIV_JSON_CONNECTION */
25257 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
25259 }
25260 }
25261 if (BV_ISSET(fields, 21)) {
25262 log_packet_detailed(" got field 'tax'");
25263#ifdef FREECIV_JSON_CONNECTION
25264 field_addr.name = "tax";
25265#endif /* FREECIV_JSON_CONNECTION */
25266 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
25268 }
25269 }
25270 if (BV_ISSET(fields, 22)) {
25271 log_packet_detailed(" got field 'science'");
25272#ifdef FREECIV_JSON_CONNECTION
25273 field_addr.name = "science";
25274#endif /* FREECIV_JSON_CONNECTION */
25275 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
25277 }
25278 }
25279 if (BV_ISSET(fields, 23)) {
25280 log_packet_detailed(" got field 'luxury'");
25281#ifdef FREECIV_JSON_CONNECTION
25282 field_addr.name = "luxury";
25283#endif /* FREECIV_JSON_CONNECTION */
25284 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
25286 }
25287 }
25288 if (BV_ISSET(fields, 24)) {
25289 log_packet_detailed(" got field 'infrapoints'");
25290#ifdef FREECIV_JSON_CONNECTION
25291 field_addr.name = "infrapoints";
25292#endif /* FREECIV_JSON_CONNECTION */
25293 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
25294 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
25295 }
25296 }
25297 if (BV_ISSET(fields, 25)) {
25298 log_packet_detailed(" got field 'tech_upkeep_32'");
25299#ifdef FREECIV_JSON_CONNECTION
25300 field_addr.name = "tech_upkeep_32";
25301#endif /* FREECIV_JSON_CONNECTION */
25302 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep_32)) {
25303 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_32);
25304 }
25305 }
25306 if (BV_ISSET(fields, 26)) {
25307 log_packet_detailed(" got field 'science_cost'");
25308#ifdef FREECIV_JSON_CONNECTION
25309 field_addr.name = "science_cost";
25310#endif /* FREECIV_JSON_CONNECTION */
25311 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
25312 RECEIVE_PACKET_FIELD_ERROR(science_cost);
25313 }
25314 }
25315 real_packet->is_connected = BV_ISSET(fields, 27);
25316 if (BV_ISSET(fields, 28)) {
25317 log_packet_detailed(" got field 'revolution_finishes'");
25318#ifdef FREECIV_JSON_CONNECTION
25319 field_addr.name = "revolution_finishes";
25320#endif /* FREECIV_JSON_CONNECTION */
25321 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
25322 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
25323 }
25324 }
25325 if (BV_ISSET(fields, 29)) {
25326 log_packet_detailed(" got field 'ai_skill_level'");
25327#ifdef FREECIV_JSON_CONNECTION
25328 field_addr.name = "ai_skill_level";
25329#endif /* FREECIV_JSON_CONNECTION */
25330 {
25331 int readin;
25332
25333 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25334 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
25335 }
25336 real_packet->ai_skill_level = readin;
25337 }
25338 }
25339 if (BV_ISSET(fields, 30)) {
25340 log_packet_detailed(" got field 'barbarian_type'");
25341#ifdef FREECIV_JSON_CONNECTION
25342 field_addr.name = "barbarian_type";
25343#endif /* FREECIV_JSON_CONNECTION */
25344 {
25345 int readin;
25346
25347 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25348 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
25349 }
25350 real_packet->barbarian_type = readin;
25351 }
25352 }
25353 if (BV_ISSET(fields, 31)) {
25354 log_packet_detailed(" got field 'gives_shared_vision'");
25355#ifdef FREECIV_JSON_CONNECTION
25356 field_addr.name = "gives_shared_vision";
25357#endif /* FREECIV_JSON_CONNECTION */
25358 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
25360 }
25361 }
25362 if (BV_ISSET(fields, 32)) {
25363 log_packet_detailed(" got field 'gives_shared_tiles'");
25364#ifdef FREECIV_JSON_CONNECTION
25365 field_addr.name = "gives_shared_tiles";
25366#endif /* FREECIV_JSON_CONNECTION */
25367 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
25369 }
25370 }
25371 if (BV_ISSET(fields, 33)) {
25372 log_packet_detailed(" got field 'history'");
25373#ifdef FREECIV_JSON_CONNECTION
25374 field_addr.name = "history";
25375#endif /* FREECIV_JSON_CONNECTION */
25376 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
25378 }
25379 }
25380 if (BV_ISSET(fields, 34)) {
25381 log_packet_detailed(" got field 'culture'");
25382#ifdef FREECIV_JSON_CONNECTION
25383 field_addr.name = "culture";
25384#endif /* FREECIV_JSON_CONNECTION */
25385 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
25387 }
25388 }
25389 if (BV_ISSET(fields, 35)) {
25390 log_packet_detailed(" got field 'love'");
25391#ifdef FREECIV_JSON_CONNECTION
25392 field_addr.name = "love";
25393#endif /* FREECIV_JSON_CONNECTION */
25394 {
25395 int i;
25396
25397#ifdef FREECIV_JSON_CONNECTION
25398 /* Enter array. */
25399 field_addr.sub_location = plocation_elem_new(0);
25400#endif /* FREECIV_JSON_CONNECTION */
25401
25402 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
25403#ifdef FREECIV_JSON_CONNECTION
25404 field_addr.sub_location->number = i;
25405#endif /* FREECIV_JSON_CONNECTION */
25406
25407 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
25409 }
25410 }
25411
25412#ifdef FREECIV_JSON_CONNECTION
25413 /* Exit array. */
25414 FC_FREE(field_addr.sub_location);
25415#endif /* FREECIV_JSON_CONNECTION */
25416 }
25417 }
25418 real_packet->color_valid = BV_ISSET(fields, 36);
25419 real_packet->color_changeable = BV_ISSET(fields, 37);
25420 if (BV_ISSET(fields, 38)) {
25421 log_packet_detailed(" got field 'color_red'");
25422#ifdef FREECIV_JSON_CONNECTION
25423 field_addr.name = "color_red";
25424#endif /* FREECIV_JSON_CONNECTION */
25425 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
25426 RECEIVE_PACKET_FIELD_ERROR(color_red);
25427 }
25428 }
25429 if (BV_ISSET(fields, 39)) {
25430 log_packet_detailed(" got field 'color_green'");
25431#ifdef FREECIV_JSON_CONNECTION
25432 field_addr.name = "color_green";
25433#endif /* FREECIV_JSON_CONNECTION */
25434 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
25435 RECEIVE_PACKET_FIELD_ERROR(color_green);
25436 }
25437 }
25438 if (BV_ISSET(fields, 40)) {
25439 log_packet_detailed(" got field 'color_blue'");
25440#ifdef FREECIV_JSON_CONNECTION
25441 field_addr.name = "color_blue";
25442#endif /* FREECIV_JSON_CONNECTION */
25443 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
25444 RECEIVE_PACKET_FIELD_ERROR(color_blue);
25445 }
25446 }
25447 if (BV_ISSET(fields, 41)) {
25448 log_packet_detailed(" got field 'flags'");
25449#ifdef FREECIV_JSON_CONNECTION
25450 field_addr.name = "flags";
25451#endif /* FREECIV_JSON_CONNECTION */
25452 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
25454 }
25455 }
25456 if (BV_ISSET(fields, 42)) {
25457 log_packet_detailed(" got field 'wonders'");
25458#ifdef FREECIV_JSON_CONNECTION
25459 field_addr.name = "wonders";
25460#endif /* FREECIV_JSON_CONNECTION */
25462#ifdef FREECIV_JSON_CONNECTION
25463 /* Enter array (start at initial element). */
25464 field_addr.sub_location = plocation_elem_new(0);
25465 /* Enter diff array element (start at the index address). */
25466 field_addr.sub_location->sub_location = plocation_elem_new(0);
25467#endif /* FREECIV_JSON_CONNECTION */
25468
25469 while (TRUE) {
25470 int i;
25471
25472 /* Read next index */
25473#if B_LAST <= MAX_UINT8
25474 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
25475#else
25476 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
25477#endif
25479 }
25480
25481 if (i == B_LAST) {
25482 break;
25483 }
25484 if (i > B_LAST) {
25486 ": unexpected value %d "
25487 "(> B_LAST) in array diff",
25488 i);
25489 }
25490
25491#ifdef FREECIV_JSON_CONNECTION
25492 /* Content address. */
25493 field_addr.sub_location->sub_location->number = 1;
25494#endif /* FREECIV_JSON_CONNECTION */
25495
25496 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
25498 }
25499
25500#ifdef FREECIV_JSON_CONNECTION
25501 /* Move to the next diff array element. */
25502 field_addr.sub_location->number++;
25503 /* Back to the index address. */
25504 field_addr.sub_location->sub_location->number = 0;
25505#endif /* FREECIV_JSON_CONNECTION */
25506 }
25507
25508#ifdef FREECIV_JSON_CONNECTION
25509 /* Exit diff array element. */
25510 FC_FREE(field_addr.sub_location->sub_location);
25511 /* Exit array. */
25512 FC_FREE(field_addr.sub_location);
25513#endif /* FREECIV_JSON_CONNECTION */
25514 }
25515 if (BV_ISSET(fields, 43)) {
25516 log_packet_detailed(" got field 'multip_count'");
25517#ifdef FREECIV_JSON_CONNECTION
25518 field_addr.name = "multip_count";
25519#endif /* FREECIV_JSON_CONNECTION */
25520 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
25521 RECEIVE_PACKET_FIELD_ERROR(multip_count);
25522 }
25523 }
25524 if (BV_ISSET(fields, 44)) {
25525 log_packet_detailed(" got field 'multiplier'");
25526#ifdef FREECIV_JSON_CONNECTION
25527 field_addr.name = "multiplier";
25528#endif /* FREECIV_JSON_CONNECTION */
25529 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
25530 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": truncation array");
25531 }
25532 {
25533 int i;
25534
25535#ifdef FREECIV_JSON_CONNECTION
25536 /* Enter array. */
25537 field_addr.sub_location = plocation_elem_new(0);
25538#endif /* FREECIV_JSON_CONNECTION */
25539
25540 for (i = 0; i < real_packet->multip_count; i++) {
25541#ifdef FREECIV_JSON_CONNECTION
25542 field_addr.sub_location->number = i;
25543#endif /* FREECIV_JSON_CONNECTION */
25544
25545 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
25547 }
25548 }
25549
25550#ifdef FREECIV_JSON_CONNECTION
25551 /* Exit array. */
25552 FC_FREE(field_addr.sub_location);
25553#endif /* FREECIV_JSON_CONNECTION */
25554 }
25555 }
25556 if (BV_ISSET(fields, 45)) {
25557 log_packet_detailed(" got field 'multiplier_target'");
25558#ifdef FREECIV_JSON_CONNECTION
25559 field_addr.name = "multiplier_target";
25560#endif /* FREECIV_JSON_CONNECTION */
25561 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
25562 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": truncation array");
25563 }
25564 {
25565 int i;
25566
25567#ifdef FREECIV_JSON_CONNECTION
25568 /* Enter array. */
25569 field_addr.sub_location = plocation_elem_new(0);
25570#endif /* FREECIV_JSON_CONNECTION */
25571
25572 for (i = 0; i < real_packet->multip_count; i++) {
25573#ifdef FREECIV_JSON_CONNECTION
25574 field_addr.sub_location->number = i;
25575#endif /* FREECIV_JSON_CONNECTION */
25576
25577 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
25578 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
25579 }
25580 }
25581
25582#ifdef FREECIV_JSON_CONNECTION
25583 /* Exit array. */
25584 FC_FREE(field_addr.sub_location);
25585#endif /* FREECIV_JSON_CONNECTION */
25586 }
25587 }
25588 if (BV_ISSET(fields, 46)) {
25589 log_packet_detailed(" got field 'multiplier_changed'");
25590#ifdef FREECIV_JSON_CONNECTION
25591 field_addr.name = "multiplier_changed";
25592#endif /* FREECIV_JSON_CONNECTION */
25593 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
25594 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": truncation array");
25595 }
25596 {
25597 int i;
25598
25599#ifdef FREECIV_JSON_CONNECTION
25600 /* Enter array. */
25601 field_addr.sub_location = plocation_elem_new(0);
25602#endif /* FREECIV_JSON_CONNECTION */
25603
25604 for (i = 0; i < real_packet->multip_count; i++) {
25605#ifdef FREECIV_JSON_CONNECTION
25606 field_addr.sub_location->number = i;
25607#endif /* FREECIV_JSON_CONNECTION */
25608
25609 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
25610 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
25611 }
25612 }
25613
25614#ifdef FREECIV_JSON_CONNECTION
25615 /* Exit array. */
25616 FC_FREE(field_addr.sub_location);
25617#endif /* FREECIV_JSON_CONNECTION */
25618 }
25619 }
25620
25621 if (NULL == old) {
25622 old = fc_malloc(sizeof(*old));
25623 *old = *real_packet;
25624 genhash_insert(*hash, old, old);
25625 } else {
25626 *old = *real_packet;
25627 }
25628
25629#endif /* FREECIV_DELTA_PROTOCOL */
25631}
25632
25633static int send_packet_player_info_101(struct connection *pc, const struct packet_player_info *packet)
25634{
25635 const struct packet_player_info *real_packet = packet;
25636 int e;
25637#ifdef FREECIV_DELTA_PROTOCOL
25639 struct packet_player_info *old;
25640 bool differ;
25641 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_INFO;
25642 int different = 0;
25643#endif /* FREECIV_DELTA_PROTOCOL */
25645#ifdef FREECIV_JSON_CONNECTION
25646 struct plocation field_addr;
25647 {
25651 }
25652#endif /* FREECIV_JSON_CONNECTION */
25653
25654 log_packet_detailed("packet_player_info_101: sending info about (%d)",
25655 real_packet->playerno);
25656
25657#ifdef FREECIV_DELTA_PROTOCOL
25658 if (NULL == *hash) {
25660 NULL, NULL, NULL, free);
25661 }
25662 BV_CLR_ALL(fields);
25663
25664 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25665 old = fc_malloc(sizeof(*old));
25666 *old = *real_packet;
25667 genhash_insert(*hash, old, old);
25668 memset(old, 0, sizeof(*old));
25669 different = 1; /* Force to send. */
25670 }
25671 differ = (strcmp(old->name, real_packet->name) != 0);
25672 if (differ) {
25673 different++;
25674 BV_SET(fields, 0);
25675 }
25676
25677 differ = (strcmp(old->username, real_packet->username) != 0);
25678 if (differ) {
25679 different++;
25680 BV_SET(fields, 1);
25681 }
25682
25683 differ = (old->unassigned_user != real_packet->unassigned_user);
25684 if (differ) {
25685 different++;
25686 }
25687 if (packet->unassigned_user) {
25688 BV_SET(fields, 2);
25689 }
25690
25691 differ = (old->score != real_packet->score);
25692 if (differ) {
25693 different++;
25694 BV_SET(fields, 3);
25695 }
25696
25697 differ = (old->is_male != real_packet->is_male);
25698 if (differ) {
25699 different++;
25700 }
25701 if (packet->is_male) {
25702 BV_SET(fields, 4);
25703 }
25704
25705 differ = (old->was_created != real_packet->was_created);
25706 if (differ) {
25707 different++;
25708 }
25709 if (packet->was_created) {
25710 BV_SET(fields, 5);
25711 }
25712
25713 differ = (old->government != real_packet->government);
25714 if (differ) {
25715 different++;
25716 BV_SET(fields, 6);
25717 }
25718
25719 differ = (old->target_government != real_packet->target_government);
25720 if (differ) {
25721 different++;
25722 BV_SET(fields, 7);
25723 }
25724
25725 differ = !BV_ARE_EQUAL(old->real_embassy, real_packet->real_embassy);
25726 if (differ) {
25727 different++;
25728 BV_SET(fields, 8);
25729 }
25730
25731 differ = (old->mood != real_packet->mood);
25732 if (differ) {
25733 different++;
25734 BV_SET(fields, 9);
25735 }
25736
25737 differ = (old->style != real_packet->style);
25738 if (differ) {
25739 different++;
25740 BV_SET(fields, 10);
25741 }
25742
25743 differ = (old->music_style != real_packet->music_style);
25744 if (differ) {
25745 different++;
25746 BV_SET(fields, 11);
25747 }
25748
25749 differ = (old->nation != real_packet->nation);
25750 if (differ) {
25751 different++;
25752 BV_SET(fields, 12);
25753 }
25754
25755 differ = (old->team != real_packet->team);
25756 if (differ) {
25757 different++;
25758 BV_SET(fields, 13);
25759 }
25760
25761 differ = (old->is_ready != real_packet->is_ready);
25762 if (differ) {
25763 different++;
25764 }
25765 if (packet->is_ready) {
25766 BV_SET(fields, 14);
25767 }
25768
25769 differ = (old->phase_done != real_packet->phase_done);
25770 if (differ) {
25771 different++;
25772 }
25773 if (packet->phase_done) {
25774 BV_SET(fields, 15);
25775 }
25776
25777 differ = (old->nturns_idle != real_packet->nturns_idle);
25778 if (differ) {
25779 different++;
25780 BV_SET(fields, 16);
25781 }
25782
25783 differ = (old->turns_alive != real_packet->turns_alive);
25784 if (differ) {
25785 different++;
25786 BV_SET(fields, 17);
25787 }
25788
25789 differ = (old->is_alive != real_packet->is_alive);
25790 if (differ) {
25791 different++;
25792 }
25793 if (packet->is_alive) {
25794 BV_SET(fields, 18);
25795 }
25796
25797 differ = (old->autoselect_weight != real_packet->autoselect_weight);
25798 if (differ) {
25799 different++;
25800 BV_SET(fields, 19);
25801 }
25802
25803 differ = (old->gold != real_packet->gold);
25804 if (differ) {
25805 different++;
25806 BV_SET(fields, 20);
25807 }
25808
25809 differ = (old->tax != real_packet->tax);
25810 if (differ) {
25811 different++;
25812 BV_SET(fields, 21);
25813 }
25814
25815 differ = (old->science != real_packet->science);
25816 if (differ) {
25817 different++;
25818 BV_SET(fields, 22);
25819 }
25820
25821 differ = (old->luxury != real_packet->luxury);
25822 if (differ) {
25823 different++;
25824 BV_SET(fields, 23);
25825 }
25826
25827 differ = (old->infrapoints != real_packet->infrapoints);
25828 if (differ) {
25829 different++;
25830 BV_SET(fields, 24);
25831 }
25832
25833 differ = (old->tech_upkeep_32 != real_packet->tech_upkeep_32);
25834 if (differ) {
25835 different++;
25836 BV_SET(fields, 25);
25837 }
25838
25839 differ = (old->science_cost != real_packet->science_cost);
25840 if (differ) {
25841 different++;
25842 BV_SET(fields, 26);
25843 }
25844
25845 differ = (old->is_connected != real_packet->is_connected);
25846 if (differ) {
25847 different++;
25848 }
25849 if (packet->is_connected) {
25850 BV_SET(fields, 27);
25851 }
25852
25853 differ = (old->revolution_finishes != real_packet->revolution_finishes);
25854 if (differ) {
25855 different++;
25856 BV_SET(fields, 28);
25857 }
25858
25859 differ = (old->ai_skill_level != real_packet->ai_skill_level);
25860 if (differ) {
25861 different++;
25862 BV_SET(fields, 29);
25863 }
25864
25865 differ = (old->barbarian_type != real_packet->barbarian_type);
25866 if (differ) {
25867 different++;
25868 BV_SET(fields, 30);
25869 }
25870
25871 differ = !BV_ARE_EQUAL(old->gives_shared_vision, real_packet->gives_shared_vision);
25872 if (differ) {
25873 different++;
25874 BV_SET(fields, 31);
25875 }
25876
25877 differ = !BV_ARE_EQUAL(old->gives_shared_tiles, real_packet->gives_shared_tiles);
25878 if (differ) {
25879 different++;
25880 BV_SET(fields, 32);
25881 }
25882
25883 differ = (old->history != real_packet->history);
25884 if (differ) {
25885 different++;
25886 BV_SET(fields, 33);
25887 }
25888
25889 differ = (old->culture != real_packet->culture);
25890 if (differ) {
25891 different++;
25892 BV_SET(fields, 34);
25893 }
25894
25895 differ = FALSE;
25896 {
25897 int i;
25898
25899 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
25900 differ = (old->love[i] != real_packet->love[i]);
25901 if (differ) {
25902 break;
25903 }
25904 }
25905 }
25906 if (differ) {
25907 different++;
25908 BV_SET(fields, 35);
25909 }
25910
25911 differ = (old->color_valid != real_packet->color_valid);
25912 if (differ) {
25913 different++;
25914 }
25915 if (packet->color_valid) {
25916 BV_SET(fields, 36);
25917 }
25918
25919 differ = (old->color_changeable != real_packet->color_changeable);
25920 if (differ) {
25921 different++;
25922 }
25923 if (packet->color_changeable) {
25924 BV_SET(fields, 37);
25925 }
25926
25927 differ = (old->color_red != real_packet->color_red);
25928 if (differ) {
25929 different++;
25930 BV_SET(fields, 38);
25931 }
25932
25933 differ = (old->color_green != real_packet->color_green);
25934 if (differ) {
25935 different++;
25936 BV_SET(fields, 39);
25937 }
25938
25939 differ = (old->color_blue != real_packet->color_blue);
25940 if (differ) {
25941 different++;
25942 BV_SET(fields, 40);
25943 }
25944
25945 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
25946 if (differ) {
25947 different++;
25948 BV_SET(fields, 41);
25949 }
25950
25951 differ = FALSE;
25952 {
25953 int i;
25954
25955 for (i = 0; i < B_LAST; i++) {
25956 differ = (old->wonders[i] != real_packet->wonders[i]);
25957 if (differ) {
25958 break;
25959 }
25960 }
25961 }
25962 if (differ) {
25963 different++;
25964 BV_SET(fields, 42);
25965 }
25966
25967 differ = (old->multip_count != real_packet->multip_count);
25968 if (differ) {
25969 different++;
25970 BV_SET(fields, 43);
25971 }
25972
25973 differ = (old->multip_count != real_packet->multip_count);
25974 if (!differ) {
25975 int i;
25976
25977 for (i = 0; i < real_packet->multip_count; i++) {
25978 differ = (old->multiplier[i] != real_packet->multiplier[i]);
25979 if (differ) {
25980 break;
25981 }
25982 }
25983 }
25984 if (differ) {
25985 different++;
25986 BV_SET(fields, 44);
25987 }
25988
25989 differ = (old->multip_count != real_packet->multip_count);
25990 if (!differ) {
25991 int i;
25992
25993 for (i = 0; i < real_packet->multip_count; i++) {
25994 differ = (old->multiplier_target[i] != real_packet->multiplier_target[i]);
25995 if (differ) {
25996 break;
25997 }
25998 }
25999 }
26000 if (differ) {
26001 different++;
26002 BV_SET(fields, 45);
26003 }
26004
26005 differ = (old->multip_count != real_packet->multip_count);
26006 if (!differ) {
26007 int i;
26008
26009 for (i = 0; i < real_packet->multip_count; i++) {
26010 differ = (old->multiplier_changed[i] != real_packet->multiplier_changed[i]);
26011 if (differ) {
26012 break;
26013 }
26014 }
26015 }
26016 if (differ) {
26017 different++;
26018 BV_SET(fields, 46);
26019 }
26020
26021 if (different == 0) {
26022 log_packet_detailed(" no change -> discard");
26024 }
26025
26026#ifdef FREECIV_JSON_CONNECTION
26027 field_addr.name = "fields";
26028#endif /* FREECIV_JSON_CONNECTION */
26029 e = 0;
26030 e |= DIO_BV_PUT(&dout, &field_addr, fields);
26031 if (e) {
26032 log_packet_detailed("fields bitvector error detected");
26033 }
26034#ifdef FREECIV_JSON_CONNECTION
26035 field_addr.name = "playerno";
26036#endif /* FREECIV_JSON_CONNECTION */
26037 e = 0;
26038 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
26039 if (e) {
26040 log_packet_detailed("'playerno' field error detected");
26041 }
26042
26043 if (BV_ISSET(fields, 0)) {
26044 log_packet_detailed(" field 'name' has changed");
26045#ifdef FREECIV_JSON_CONNECTION
26046 field_addr.name = "name";
26047#endif /* FREECIV_JSON_CONNECTION */
26048 e = 0;
26049 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
26050 if (e) {
26051 log_packet_detailed("'name' field error detected");
26052 }
26053 }
26054 if (BV_ISSET(fields, 1)) {
26055 log_packet_detailed(" field 'username' has changed");
26056#ifdef FREECIV_JSON_CONNECTION
26057 field_addr.name = "username";
26058#endif /* FREECIV_JSON_CONNECTION */
26059 e = 0;
26060 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
26061 if (e) {
26062 log_packet_detailed("'username' field error detected");
26063 }
26064 }
26065 /* field 2 is folded into the header */
26066 if (BV_ISSET(fields, 3)) {
26067 log_packet_detailed(" field 'score' has changed");
26068#ifdef FREECIV_JSON_CONNECTION
26069 field_addr.name = "score";
26070#endif /* FREECIV_JSON_CONNECTION */
26071 e = 0;
26072 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
26073 if (e) {
26074 log_packet_detailed("'score' field error detected");
26075 }
26076 }
26077 /* field 4 is folded into the header */
26078 /* field 5 is folded into the header */
26079 if (BV_ISSET(fields, 6)) {
26080 log_packet_detailed(" field 'government' has changed");
26081#ifdef FREECIV_JSON_CONNECTION
26082 field_addr.name = "government";
26083#endif /* FREECIV_JSON_CONNECTION */
26084 e = 0;
26085 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
26086 if (e) {
26087 log_packet_detailed("'government' field error detected");
26088 }
26089 }
26090 if (BV_ISSET(fields, 7)) {
26091 log_packet_detailed(" field 'target_government' has changed");
26092#ifdef FREECIV_JSON_CONNECTION
26093 field_addr.name = "target_government";
26094#endif /* FREECIV_JSON_CONNECTION */
26095 e = 0;
26096 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
26097 if (e) {
26098 log_packet_detailed("'target_government' field error detected");
26099 }
26100 }
26101 if (BV_ISSET(fields, 8)) {
26102 log_packet_detailed(" field 'real_embassy' has changed");
26103#ifdef FREECIV_JSON_CONNECTION
26104 field_addr.name = "real_embassy";
26105#endif /* FREECIV_JSON_CONNECTION */
26106 e = 0;
26107 e |= DIO_BV_PUT(&dout, &field_addr, packet->real_embassy);
26108 if (e) {
26109 log_packet_detailed("'real_embassy' field error detected");
26110 }
26111 }
26112 if (BV_ISSET(fields, 9)) {
26113 log_packet_detailed(" field 'mood' has changed");
26114#ifdef FREECIV_JSON_CONNECTION
26115 field_addr.name = "mood";
26116#endif /* FREECIV_JSON_CONNECTION */
26117 e = 0;
26118 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
26119 if (e) {
26120 log_packet_detailed("'mood' field error detected");
26121 }
26122 }
26123 if (BV_ISSET(fields, 10)) {
26124 log_packet_detailed(" field 'style' has changed");
26125#ifdef FREECIV_JSON_CONNECTION
26126 field_addr.name = "style";
26127#endif /* FREECIV_JSON_CONNECTION */
26128 e = 0;
26129 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
26130 if (e) {
26131 log_packet_detailed("'style' field error detected");
26132 }
26133 }
26134 if (BV_ISSET(fields, 11)) {
26135 log_packet_detailed(" field 'music_style' has changed");
26136#ifdef FREECIV_JSON_CONNECTION
26137 field_addr.name = "music_style";
26138#endif /* FREECIV_JSON_CONNECTION */
26139 e = 0;
26140 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
26141 if (e) {
26142 log_packet_detailed("'music_style' field error detected");
26143 }
26144 }
26145 if (BV_ISSET(fields, 12)) {
26146 log_packet_detailed(" field 'nation' has changed");
26147#ifdef FREECIV_JSON_CONNECTION
26148 field_addr.name = "nation";
26149#endif /* FREECIV_JSON_CONNECTION */
26150 e = 0;
26151 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
26152 if (e) {
26153 log_packet_detailed("'nation' field error detected");
26154 }
26155 }
26156 if (BV_ISSET(fields, 13)) {
26157 log_packet_detailed(" field 'team' has changed");
26158#ifdef FREECIV_JSON_CONNECTION
26159 field_addr.name = "team";
26160#endif /* FREECIV_JSON_CONNECTION */
26161 e = 0;
26162 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
26163 if (e) {
26164 log_packet_detailed("'team' field error detected");
26165 }
26166 }
26167 /* field 14 is folded into the header */
26168 /* field 15 is folded into the header */
26169 if (BV_ISSET(fields, 16)) {
26170 log_packet_detailed(" field 'nturns_idle' has changed");
26171#ifdef FREECIV_JSON_CONNECTION
26172 field_addr.name = "nturns_idle";
26173#endif /* FREECIV_JSON_CONNECTION */
26174 e = 0;
26175 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
26176 if (e) {
26177 log_packet_detailed("'nturns_idle' field error detected");
26178 }
26179 }
26180 if (BV_ISSET(fields, 17)) {
26181 log_packet_detailed(" field 'turns_alive' has changed");
26182#ifdef FREECIV_JSON_CONNECTION
26183 field_addr.name = "turns_alive";
26184#endif /* FREECIV_JSON_CONNECTION */
26185 e = 0;
26186 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
26187 if (e) {
26188 log_packet_detailed("'turns_alive' field error detected");
26189 }
26190 }
26191 /* field 18 is folded into the header */
26192 if (BV_ISSET(fields, 19)) {
26193 log_packet_detailed(" field 'autoselect_weight' has changed");
26194#ifdef FREECIV_JSON_CONNECTION
26195 field_addr.name = "autoselect_weight";
26196#endif /* FREECIV_JSON_CONNECTION */
26197 e = 0;
26198 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
26199 if (e) {
26200 log_packet_detailed("'autoselect_weight' field error detected");
26201 }
26202 }
26203 if (BV_ISSET(fields, 20)) {
26204 log_packet_detailed(" field 'gold' has changed");
26205#ifdef FREECIV_JSON_CONNECTION
26206 field_addr.name = "gold";
26207#endif /* FREECIV_JSON_CONNECTION */
26208 e = 0;
26209 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
26210 if (e) {
26211 log_packet_detailed("'gold' field error detected");
26212 }
26213 }
26214 if (BV_ISSET(fields, 21)) {
26215 log_packet_detailed(" field 'tax' has changed");
26216#ifdef FREECIV_JSON_CONNECTION
26217 field_addr.name = "tax";
26218#endif /* FREECIV_JSON_CONNECTION */
26219 e = 0;
26220 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
26221 if (e) {
26222 log_packet_detailed("'tax' field error detected");
26223 }
26224 }
26225 if (BV_ISSET(fields, 22)) {
26226 log_packet_detailed(" field 'science' has changed");
26227#ifdef FREECIV_JSON_CONNECTION
26228 field_addr.name = "science";
26229#endif /* FREECIV_JSON_CONNECTION */
26230 e = 0;
26231 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
26232 if (e) {
26233 log_packet_detailed("'science' field error detected");
26234 }
26235 }
26236 if (BV_ISSET(fields, 23)) {
26237 log_packet_detailed(" field 'luxury' has changed");
26238#ifdef FREECIV_JSON_CONNECTION
26239 field_addr.name = "luxury";
26240#endif /* FREECIV_JSON_CONNECTION */
26241 e = 0;
26242 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
26243 if (e) {
26244 log_packet_detailed("'luxury' field error detected");
26245 }
26246 }
26247 if (BV_ISSET(fields, 24)) {
26248 log_packet_detailed(" field 'infrapoints' has changed");
26249#ifdef FREECIV_JSON_CONNECTION
26250 field_addr.name = "infrapoints";
26251#endif /* FREECIV_JSON_CONNECTION */
26252 e = 0;
26253 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
26254 if (e) {
26255 log_packet_detailed("'infrapoints' field error detected");
26256 }
26257 }
26258 if (BV_ISSET(fields, 25)) {
26259 log_packet_detailed(" field 'tech_upkeep_32' has changed");
26260#ifdef FREECIV_JSON_CONNECTION
26261 field_addr.name = "tech_upkeep_32";
26262#endif /* FREECIV_JSON_CONNECTION */
26263 e = 0;
26264 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep_32);
26265 if (e) {
26266 log_packet_detailed("'tech_upkeep_32' field error detected");
26267 }
26268 }
26269 if (BV_ISSET(fields, 26)) {
26270 log_packet_detailed(" field 'science_cost' has changed");
26271#ifdef FREECIV_JSON_CONNECTION
26272 field_addr.name = "science_cost";
26273#endif /* FREECIV_JSON_CONNECTION */
26274 e = 0;
26275 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
26276 if (e) {
26277 log_packet_detailed("'science_cost' field error detected");
26278 }
26279 }
26280 /* field 27 is folded into the header */
26281 if (BV_ISSET(fields, 28)) {
26282 log_packet_detailed(" field 'revolution_finishes' has changed");
26283#ifdef FREECIV_JSON_CONNECTION
26284 field_addr.name = "revolution_finishes";
26285#endif /* FREECIV_JSON_CONNECTION */
26286 e = 0;
26287 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
26288 if (e) {
26289 log_packet_detailed("'revolution_finishes' field error detected");
26290 }
26291 }
26292 if (BV_ISSET(fields, 29)) {
26293 log_packet_detailed(" field 'ai_skill_level' has changed");
26294#ifdef FREECIV_JSON_CONNECTION
26295 field_addr.name = "ai_skill_level";
26296#endif /* FREECIV_JSON_CONNECTION */
26297 e = 0;
26298 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
26299 if (e) {
26300 log_packet_detailed("'ai_skill_level' field error detected");
26301 }
26302 }
26303 if (BV_ISSET(fields, 30)) {
26304 log_packet_detailed(" field 'barbarian_type' has changed");
26305#ifdef FREECIV_JSON_CONNECTION
26306 field_addr.name = "barbarian_type";
26307#endif /* FREECIV_JSON_CONNECTION */
26308 e = 0;
26309 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
26310 if (e) {
26311 log_packet_detailed("'barbarian_type' field error detected");
26312 }
26313 }
26314 if (BV_ISSET(fields, 31)) {
26315 log_packet_detailed(" field 'gives_shared_vision' has changed");
26316#ifdef FREECIV_JSON_CONNECTION
26317 field_addr.name = "gives_shared_vision";
26318#endif /* FREECIV_JSON_CONNECTION */
26319 e = 0;
26321 if (e) {
26322 log_packet_detailed("'gives_shared_vision' field error detected");
26323 }
26324 }
26325 if (BV_ISSET(fields, 32)) {
26326 log_packet_detailed(" field 'gives_shared_tiles' has changed");
26327#ifdef FREECIV_JSON_CONNECTION
26328 field_addr.name = "gives_shared_tiles";
26329#endif /* FREECIV_JSON_CONNECTION */
26330 e = 0;
26331 e |= DIO_BV_PUT(&dout, &field_addr, packet->gives_shared_tiles);
26332 if (e) {
26333 log_packet_detailed("'gives_shared_tiles' field error detected");
26334 }
26335 }
26336 if (BV_ISSET(fields, 33)) {
26337 log_packet_detailed(" field 'history' has changed");
26338#ifdef FREECIV_JSON_CONNECTION
26339 field_addr.name = "history";
26340#endif /* FREECIV_JSON_CONNECTION */
26341 e = 0;
26342 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
26343 if (e) {
26344 log_packet_detailed("'history' field error detected");
26345 }
26346 }
26347 if (BV_ISSET(fields, 34)) {
26348 log_packet_detailed(" field 'culture' has changed");
26349#ifdef FREECIV_JSON_CONNECTION
26350 field_addr.name = "culture";
26351#endif /* FREECIV_JSON_CONNECTION */
26352 e = 0;
26353 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
26354 if (e) {
26355 log_packet_detailed("'culture' field error detected");
26356 }
26357 }
26358 if (BV_ISSET(fields, 35)) {
26359 log_packet_detailed(" field 'love' has changed");
26360#ifdef FREECIV_JSON_CONNECTION
26361 field_addr.name = "love";
26362#endif /* FREECIV_JSON_CONNECTION */
26363 e = 0;
26364 {
26365 int i;
26366
26367#ifdef FREECIV_JSON_CONNECTION
26368 /* Create the array. */
26370
26371 /* Enter the array. */
26372 field_addr.sub_location = plocation_elem_new(0);
26373#endif /* FREECIV_JSON_CONNECTION */
26374
26375 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26376#ifdef FREECIV_JSON_CONNECTION
26377 /* Next array element. */
26378 field_addr.sub_location->number = i;
26379#endif /* FREECIV_JSON_CONNECTION */
26380
26381 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
26382 }
26383
26384#ifdef FREECIV_JSON_CONNECTION
26385 /* Exit array. */
26386 FC_FREE(field_addr.sub_location);
26387#endif /* FREECIV_JSON_CONNECTION */
26388 }
26389 if (e) {
26390 log_packet_detailed("'love' field error detected");
26391 }
26392 }
26393 /* field 36 is folded into the header */
26394 /* field 37 is folded into the header */
26395 if (BV_ISSET(fields, 38)) {
26396 log_packet_detailed(" field 'color_red' has changed");
26397#ifdef FREECIV_JSON_CONNECTION
26398 field_addr.name = "color_red";
26399#endif /* FREECIV_JSON_CONNECTION */
26400 e = 0;
26401 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
26402 if (e) {
26403 log_packet_detailed("'color_red' field error detected");
26404 }
26405 }
26406 if (BV_ISSET(fields, 39)) {
26407 log_packet_detailed(" field 'color_green' has changed");
26408#ifdef FREECIV_JSON_CONNECTION
26409 field_addr.name = "color_green";
26410#endif /* FREECIV_JSON_CONNECTION */
26411 e = 0;
26412 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
26413 if (e) {
26414 log_packet_detailed("'color_green' field error detected");
26415 }
26416 }
26417 if (BV_ISSET(fields, 40)) {
26418 log_packet_detailed(" field 'color_blue' has changed");
26419#ifdef FREECIV_JSON_CONNECTION
26420 field_addr.name = "color_blue";
26421#endif /* FREECIV_JSON_CONNECTION */
26422 e = 0;
26423 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
26424 if (e) {
26425 log_packet_detailed("'color_blue' field error detected");
26426 }
26427 }
26428 if (BV_ISSET(fields, 41)) {
26429 log_packet_detailed(" field 'flags' has changed");
26430#ifdef FREECIV_JSON_CONNECTION
26431 field_addr.name = "flags";
26432#endif /* FREECIV_JSON_CONNECTION */
26433 e = 0;
26434 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
26435 if (e) {
26436 log_packet_detailed("'flags' field error detected");
26437 }
26438 }
26439 if (BV_ISSET(fields, 42)) {
26440 log_packet_detailed(" field 'wonders' has changed");
26441#ifdef FREECIV_JSON_CONNECTION
26442 field_addr.name = "wonders";
26443#endif /* FREECIV_JSON_CONNECTION */
26444 e = 0;
26446 {
26447 int i;
26448
26449#ifdef FREECIV_JSON_CONNECTION
26450 size_t count_i = 0;
26451
26452 /* Create the array. */
26453 e |= DIO_PUT(farray, &dout, &field_addr, 0);
26454
26455 /* Enter array. */
26456 field_addr.sub_location = plocation_elem_new(0);
26457#endif /* FREECIV_JSON_CONNECTION */
26458
26459 for (i = 0; i < B_LAST; i++) {
26460 differ = (old->wonders[i] != real_packet->wonders[i]);
26461
26462 if (differ) {
26463#ifdef FREECIV_JSON_CONNECTION
26464 /* Append next diff array element. */
26465 field_addr.sub_location->number = -1;
26466
26467 /* Create the diff array element. */
26468 e |= DIO_PUT(farray, &dout, &field_addr, 2);
26469
26470 /* Enter diff array element (start at the index address). */
26471 field_addr.sub_location->number = count_i++;
26472 field_addr.sub_location->sub_location = plocation_elem_new(0);
26473#endif /* FREECIV_JSON_CONNECTION */
26474
26475 /* Write the index */
26476#if B_LAST <= MAX_UINT8
26477 e |= DIO_PUT(uint8, &dout, &field_addr, i);
26478#else
26479 e |= DIO_PUT(uint16, &dout, &field_addr, i);
26480#endif
26481
26482#ifdef FREECIV_JSON_CONNECTION
26483 /* Content address. */
26484 field_addr.sub_location->sub_location->number = 1;
26485#endif /* FREECIV_JSON_CONNECTION */
26486
26487 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
26488
26489#ifdef FREECIV_JSON_CONNECTION
26490 /* Exit diff array element. */
26491 FC_FREE(field_addr.sub_location->sub_location);
26492#endif /* FREECIV_JSON_CONNECTION */
26493 }
26494 }
26495
26496#ifdef FREECIV_JSON_CONNECTION
26497 /* Append diff array element. */
26498 field_addr.sub_location->number = -1;
26499
26500 /* Create the terminating diff array element. */
26501 e |= DIO_PUT(farray, &dout, &field_addr, 1);
26502
26503 /* Enter diff array element (start at the index address). */
26504 field_addr.sub_location->number = count_i;
26505 field_addr.sub_location->sub_location = plocation_elem_new(0);
26506#endif /* FREECIV_JSON_CONNECTION */
26507
26508 /* Write the sentinel value */
26509#if B_LAST <= MAX_UINT8
26510 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
26511#else
26512 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
26513#endif
26514
26515#ifdef FREECIV_JSON_CONNECTION
26516 /* Exit diff array element. */
26517 FC_FREE(field_addr.sub_location->sub_location);
26518
26519 /* Exit array. */
26520 FC_FREE(field_addr.sub_location);
26521#endif /* FREECIV_JSON_CONNECTION */
26522 }
26523 if (e) {
26524 log_packet_detailed("'wonders' field error detected");
26525 }
26526 }
26527 if (BV_ISSET(fields, 43)) {
26528 log_packet_detailed(" field 'multip_count' has changed");
26529#ifdef FREECIV_JSON_CONNECTION
26530 field_addr.name = "multip_count";
26531#endif /* FREECIV_JSON_CONNECTION */
26532 e = 0;
26533 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
26534 if (e) {
26535 log_packet_detailed("'multip_count' field error detected");
26536 }
26537 }
26538 if (BV_ISSET(fields, 44)) {
26539 log_packet_detailed(" field 'multiplier' has changed");
26540#ifdef FREECIV_JSON_CONNECTION
26541 field_addr.name = "multiplier";
26542#endif /* FREECIV_JSON_CONNECTION */
26543 e = 0;
26544 {
26545 int i;
26546
26547#ifdef FREECIV_JSON_CONNECTION
26548 /* Create the array. */
26549 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
26550
26551 /* Enter the array. */
26552 field_addr.sub_location = plocation_elem_new(0);
26553#endif /* FREECIV_JSON_CONNECTION */
26554
26555 for (i = 0; i < real_packet->multip_count; i++) {
26556#ifdef FREECIV_JSON_CONNECTION
26557 /* Next array element. */
26558 field_addr.sub_location->number = i;
26559#endif /* FREECIV_JSON_CONNECTION */
26560
26561 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
26562 }
26563
26564#ifdef FREECIV_JSON_CONNECTION
26565 /* Exit array. */
26566 FC_FREE(field_addr.sub_location);
26567#endif /* FREECIV_JSON_CONNECTION */
26568 }
26569 if (e) {
26570 log_packet_detailed("'multiplier' field error detected");
26571 }
26572 }
26573 if (BV_ISSET(fields, 45)) {
26574 log_packet_detailed(" field 'multiplier_target' has changed");
26575#ifdef FREECIV_JSON_CONNECTION
26576 field_addr.name = "multiplier_target";
26577#endif /* FREECIV_JSON_CONNECTION */
26578 e = 0;
26579 {
26580 int i;
26581
26582#ifdef FREECIV_JSON_CONNECTION
26583 /* Create the array. */
26584 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
26585
26586 /* Enter the array. */
26587 field_addr.sub_location = plocation_elem_new(0);
26588#endif /* FREECIV_JSON_CONNECTION */
26589
26590 for (i = 0; i < real_packet->multip_count; i++) {
26591#ifdef FREECIV_JSON_CONNECTION
26592 /* Next array element. */
26593 field_addr.sub_location->number = i;
26594#endif /* FREECIV_JSON_CONNECTION */
26595
26596 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
26597 }
26598
26599#ifdef FREECIV_JSON_CONNECTION
26600 /* Exit array. */
26601 FC_FREE(field_addr.sub_location);
26602#endif /* FREECIV_JSON_CONNECTION */
26603 }
26604 if (e) {
26605 log_packet_detailed("'multiplier_target' field error detected");
26606 }
26607 }
26608 if (BV_ISSET(fields, 46)) {
26609 log_packet_detailed(" field 'multiplier_changed' has changed");
26610#ifdef FREECIV_JSON_CONNECTION
26611 field_addr.name = "multiplier_changed";
26612#endif /* FREECIV_JSON_CONNECTION */
26613 e = 0;
26614 {
26615 int i;
26616
26617#ifdef FREECIV_JSON_CONNECTION
26618 /* Create the array. */
26619 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
26620
26621 /* Enter the array. */
26622 field_addr.sub_location = plocation_elem_new(0);
26623#endif /* FREECIV_JSON_CONNECTION */
26624
26625 for (i = 0; i < real_packet->multip_count; i++) {
26626#ifdef FREECIV_JSON_CONNECTION
26627 /* Next array element. */
26628 field_addr.sub_location->number = i;
26629#endif /* FREECIV_JSON_CONNECTION */
26630
26631 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
26632 }
26633
26634#ifdef FREECIV_JSON_CONNECTION
26635 /* Exit array. */
26636 FC_FREE(field_addr.sub_location);
26637#endif /* FREECIV_JSON_CONNECTION */
26638 }
26639 if (e) {
26640 log_packet_detailed("'multiplier_changed' field error detected");
26641 }
26642 }
26643
26644 *old = *real_packet;
26645#endif /* FREECIV_DELTA_PROTOCOL */
26646#ifndef FREECIV_DELTA_PROTOCOL
26647#ifdef FREECIV_JSON_CONNECTION
26648 field_addr.name = "playerno";
26649#endif /* FREECIV_JSON_CONNECTION */
26650 e = 0;
26651 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
26652 if (e) {
26653 log_packet_detailed("'playerno' field error detected");
26654 }
26655#ifdef FREECIV_JSON_CONNECTION
26656 field_addr.name = "name";
26657#endif /* FREECIV_JSON_CONNECTION */
26658 e = 0;
26659 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
26660 if (e) {
26661 log_packet_detailed("'name' field error detected");
26662 }
26663#ifdef FREECIV_JSON_CONNECTION
26664 field_addr.name = "username";
26665#endif /* FREECIV_JSON_CONNECTION */
26666 e = 0;
26667 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
26668 if (e) {
26669 log_packet_detailed("'username' field error detected");
26670 }
26671#ifdef FREECIV_JSON_CONNECTION
26672 field_addr.name = "unassigned_user";
26673#endif /* FREECIV_JSON_CONNECTION */
26674 e = 0;
26675 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unassigned_user);
26676 if (e) {
26677 log_packet_detailed("'unassigned_user' field error detected");
26678 }
26679#ifdef FREECIV_JSON_CONNECTION
26680 field_addr.name = "score";
26681#endif /* FREECIV_JSON_CONNECTION */
26682 e = 0;
26683 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
26684 if (e) {
26685 log_packet_detailed("'score' field error detected");
26686 }
26687#ifdef FREECIV_JSON_CONNECTION
26688 field_addr.name = "is_male";
26689#endif /* FREECIV_JSON_CONNECTION */
26690 e = 0;
26691 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
26692 if (e) {
26693 log_packet_detailed("'is_male' field error detected");
26694 }
26695#ifdef FREECIV_JSON_CONNECTION
26696 field_addr.name = "was_created";
26697#endif /* FREECIV_JSON_CONNECTION */
26698 e = 0;
26699 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_created);
26700 if (e) {
26701 log_packet_detailed("'was_created' field error detected");
26702 }
26703#ifdef FREECIV_JSON_CONNECTION
26704 field_addr.name = "government";
26705#endif /* FREECIV_JSON_CONNECTION */
26706 e = 0;
26707 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
26708 if (e) {
26709 log_packet_detailed("'government' field error detected");
26710 }
26711#ifdef FREECIV_JSON_CONNECTION
26712 field_addr.name = "target_government";
26713#endif /* FREECIV_JSON_CONNECTION */
26714 e = 0;
26715 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
26716 if (e) {
26717 log_packet_detailed("'target_government' field error detected");
26718 }
26719#ifdef FREECIV_JSON_CONNECTION
26720 field_addr.name = "real_embassy";
26721#endif /* FREECIV_JSON_CONNECTION */
26722 e = 0;
26723 e |= DIO_BV_PUT(&dout, &field_addr, packet->real_embassy);
26724 if (e) {
26725 log_packet_detailed("'real_embassy' field error detected");
26726 }
26727#ifdef FREECIV_JSON_CONNECTION
26728 field_addr.name = "mood";
26729#endif /* FREECIV_JSON_CONNECTION */
26730 e = 0;
26731 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
26732 if (e) {
26733 log_packet_detailed("'mood' field error detected");
26734 }
26735#ifdef FREECIV_JSON_CONNECTION
26736 field_addr.name = "style";
26737#endif /* FREECIV_JSON_CONNECTION */
26738 e = 0;
26739 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
26740 if (e) {
26741 log_packet_detailed("'style' field error detected");
26742 }
26743#ifdef FREECIV_JSON_CONNECTION
26744 field_addr.name = "music_style";
26745#endif /* FREECIV_JSON_CONNECTION */
26746 e = 0;
26747 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
26748 if (e) {
26749 log_packet_detailed("'music_style' field error detected");
26750 }
26751#ifdef FREECIV_JSON_CONNECTION
26752 field_addr.name = "nation";
26753#endif /* FREECIV_JSON_CONNECTION */
26754 e = 0;
26755 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
26756 if (e) {
26757 log_packet_detailed("'nation' field error detected");
26758 }
26759#ifdef FREECIV_JSON_CONNECTION
26760 field_addr.name = "team";
26761#endif /* FREECIV_JSON_CONNECTION */
26762 e = 0;
26763 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
26764 if (e) {
26765 log_packet_detailed("'team' field error detected");
26766 }
26767#ifdef FREECIV_JSON_CONNECTION
26768 field_addr.name = "is_ready";
26769#endif /* FREECIV_JSON_CONNECTION */
26770 e = 0;
26771 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
26772 if (e) {
26773 log_packet_detailed("'is_ready' field error detected");
26774 }
26775#ifdef FREECIV_JSON_CONNECTION
26776 field_addr.name = "phase_done";
26777#endif /* FREECIV_JSON_CONNECTION */
26778 e = 0;
26779 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
26780 if (e) {
26781 log_packet_detailed("'phase_done' field error detected");
26782 }
26783#ifdef FREECIV_JSON_CONNECTION
26784 field_addr.name = "nturns_idle";
26785#endif /* FREECIV_JSON_CONNECTION */
26786 e = 0;
26787 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
26788 if (e) {
26789 log_packet_detailed("'nturns_idle' field error detected");
26790 }
26791#ifdef FREECIV_JSON_CONNECTION
26792 field_addr.name = "turns_alive";
26793#endif /* FREECIV_JSON_CONNECTION */
26794 e = 0;
26795 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
26796 if (e) {
26797 log_packet_detailed("'turns_alive' field error detected");
26798 }
26799#ifdef FREECIV_JSON_CONNECTION
26800 field_addr.name = "is_alive";
26801#endif /* FREECIV_JSON_CONNECTION */
26802 e = 0;
26803 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
26804 if (e) {
26805 log_packet_detailed("'is_alive' field error detected");
26806 }
26807#ifdef FREECIV_JSON_CONNECTION
26808 field_addr.name = "autoselect_weight";
26809#endif /* FREECIV_JSON_CONNECTION */
26810 e = 0;
26811 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
26812 if (e) {
26813 log_packet_detailed("'autoselect_weight' field error detected");
26814 }
26815#ifdef FREECIV_JSON_CONNECTION
26816 field_addr.name = "gold";
26817#endif /* FREECIV_JSON_CONNECTION */
26818 e = 0;
26819 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
26820 if (e) {
26821 log_packet_detailed("'gold' field error detected");
26822 }
26823#ifdef FREECIV_JSON_CONNECTION
26824 field_addr.name = "tax";
26825#endif /* FREECIV_JSON_CONNECTION */
26826 e = 0;
26827 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
26828 if (e) {
26829 log_packet_detailed("'tax' field error detected");
26830 }
26831#ifdef FREECIV_JSON_CONNECTION
26832 field_addr.name = "science";
26833#endif /* FREECIV_JSON_CONNECTION */
26834 e = 0;
26835 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
26836 if (e) {
26837 log_packet_detailed("'science' field error detected");
26838 }
26839#ifdef FREECIV_JSON_CONNECTION
26840 field_addr.name = "luxury";
26841#endif /* FREECIV_JSON_CONNECTION */
26842 e = 0;
26843 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
26844 if (e) {
26845 log_packet_detailed("'luxury' field error detected");
26846 }
26847#ifdef FREECIV_JSON_CONNECTION
26848 field_addr.name = "infrapoints";
26849#endif /* FREECIV_JSON_CONNECTION */
26850 e = 0;
26851 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
26852 if (e) {
26853 log_packet_detailed("'infrapoints' field error detected");
26854 }
26855#ifdef FREECIV_JSON_CONNECTION
26856 field_addr.name = "tech_upkeep_32";
26857#endif /* FREECIV_JSON_CONNECTION */
26858 e = 0;
26859 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep_32);
26860 if (e) {
26861 log_packet_detailed("'tech_upkeep_32' field error detected");
26862 }
26863#ifdef FREECIV_JSON_CONNECTION
26864 field_addr.name = "science_cost";
26865#endif /* FREECIV_JSON_CONNECTION */
26866 e = 0;
26867 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
26868 if (e) {
26869 log_packet_detailed("'science_cost' field error detected");
26870 }
26871#ifdef FREECIV_JSON_CONNECTION
26872 field_addr.name = "is_connected";
26873#endif /* FREECIV_JSON_CONNECTION */
26874 e = 0;
26875 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_connected);
26876 if (e) {
26877 log_packet_detailed("'is_connected' field error detected");
26878 }
26879#ifdef FREECIV_JSON_CONNECTION
26880 field_addr.name = "revolution_finishes";
26881#endif /* FREECIV_JSON_CONNECTION */
26882 e = 0;
26883 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
26884 if (e) {
26885 log_packet_detailed("'revolution_finishes' field error detected");
26886 }
26887#ifdef FREECIV_JSON_CONNECTION
26888 field_addr.name = "ai_skill_level";
26889#endif /* FREECIV_JSON_CONNECTION */
26890 e = 0;
26891 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
26892 if (e) {
26893 log_packet_detailed("'ai_skill_level' field error detected");
26894 }
26895#ifdef FREECIV_JSON_CONNECTION
26896 field_addr.name = "barbarian_type";
26897#endif /* FREECIV_JSON_CONNECTION */
26898 e = 0;
26899 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
26900 if (e) {
26901 log_packet_detailed("'barbarian_type' field error detected");
26902 }
26903#ifdef FREECIV_JSON_CONNECTION
26904 field_addr.name = "gives_shared_vision";
26905#endif /* FREECIV_JSON_CONNECTION */
26906 e = 0;
26908 if (e) {
26909 log_packet_detailed("'gives_shared_vision' field error detected");
26910 }
26911#ifdef FREECIV_JSON_CONNECTION
26912 field_addr.name = "gives_shared_tiles";
26913#endif /* FREECIV_JSON_CONNECTION */
26914 e = 0;
26915 e |= DIO_BV_PUT(&dout, &field_addr, packet->gives_shared_tiles);
26916 if (e) {
26917 log_packet_detailed("'gives_shared_tiles' field error detected");
26918 }
26919#ifdef FREECIV_JSON_CONNECTION
26920 field_addr.name = "history";
26921#endif /* FREECIV_JSON_CONNECTION */
26922 e = 0;
26923 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
26924 if (e) {
26925 log_packet_detailed("'history' field error detected");
26926 }
26927#ifdef FREECIV_JSON_CONNECTION
26928 field_addr.name = "culture";
26929#endif /* FREECIV_JSON_CONNECTION */
26930 e = 0;
26931 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
26932 if (e) {
26933 log_packet_detailed("'culture' field error detected");
26934 }
26935#ifdef FREECIV_JSON_CONNECTION
26936 field_addr.name = "love";
26937#endif /* FREECIV_JSON_CONNECTION */
26938 e = 0;
26939 {
26940 int i;
26941
26942#ifdef FREECIV_JSON_CONNECTION
26943 /* Create the array. */
26945
26946 /* Enter the array. */
26947 field_addr.sub_location = plocation_elem_new(0);
26948#endif /* FREECIV_JSON_CONNECTION */
26949
26950 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26951#ifdef FREECIV_JSON_CONNECTION
26952 /* Next array element. */
26953 field_addr.sub_location->number = i;
26954#endif /* FREECIV_JSON_CONNECTION */
26955
26956 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
26957 }
26958
26959#ifdef FREECIV_JSON_CONNECTION
26960 /* Exit array. */
26961 FC_FREE(field_addr.sub_location);
26962#endif /* FREECIV_JSON_CONNECTION */
26963 }
26964 if (e) {
26965 log_packet_detailed("'love' field error detected");
26966 }
26967#ifdef FREECIV_JSON_CONNECTION
26968 field_addr.name = "color_valid";
26969#endif /* FREECIV_JSON_CONNECTION */
26970 e = 0;
26971 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_valid);
26972 if (e) {
26973 log_packet_detailed("'color_valid' field error detected");
26974 }
26975#ifdef FREECIV_JSON_CONNECTION
26976 field_addr.name = "color_changeable";
26977#endif /* FREECIV_JSON_CONNECTION */
26978 e = 0;
26979 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_changeable);
26980 if (e) {
26981 log_packet_detailed("'color_changeable' field error detected");
26982 }
26983#ifdef FREECIV_JSON_CONNECTION
26984 field_addr.name = "color_red";
26985#endif /* FREECIV_JSON_CONNECTION */
26986 e = 0;
26987 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
26988 if (e) {
26989 log_packet_detailed("'color_red' field error detected");
26990 }
26991#ifdef FREECIV_JSON_CONNECTION
26992 field_addr.name = "color_green";
26993#endif /* FREECIV_JSON_CONNECTION */
26994 e = 0;
26995 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
26996 if (e) {
26997 log_packet_detailed("'color_green' field error detected");
26998 }
26999#ifdef FREECIV_JSON_CONNECTION
27000 field_addr.name = "color_blue";
27001#endif /* FREECIV_JSON_CONNECTION */
27002 e = 0;
27003 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
27004 if (e) {
27005 log_packet_detailed("'color_blue' field error detected");
27006 }
27007#ifdef FREECIV_JSON_CONNECTION
27008 field_addr.name = "flags";
27009#endif /* FREECIV_JSON_CONNECTION */
27010 e = 0;
27011 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
27012 if (e) {
27013 log_packet_detailed("'flags' field error detected");
27014 }
27015#ifdef FREECIV_JSON_CONNECTION
27016 field_addr.name = "wonders";
27017#endif /* FREECIV_JSON_CONNECTION */
27018 e = 0;
27019 {
27020 int i;
27021
27022#ifdef FREECIV_JSON_CONNECTION
27023 /* Create the array. */
27024 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
27025
27026 /* Enter the array. */
27027 field_addr.sub_location = plocation_elem_new(0);
27028#endif /* FREECIV_JSON_CONNECTION */
27029
27030 for (i = 0; i < B_LAST; i++) {
27031#ifdef FREECIV_JSON_CONNECTION
27032 /* Next array element. */
27033 field_addr.sub_location->number = i;
27034#endif /* FREECIV_JSON_CONNECTION */
27035
27036 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
27037 }
27038
27039#ifdef FREECIV_JSON_CONNECTION
27040 /* Exit array. */
27041 FC_FREE(field_addr.sub_location);
27042#endif /* FREECIV_JSON_CONNECTION */
27043 }
27044 if (e) {
27045 log_packet_detailed("'wonders' field error detected");
27046 }
27047#ifdef FREECIV_JSON_CONNECTION
27048 field_addr.name = "multip_count";
27049#endif /* FREECIV_JSON_CONNECTION */
27050 e = 0;
27051 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
27052 if (e) {
27053 log_packet_detailed("'multip_count' field error detected");
27054 }
27055#ifdef FREECIV_JSON_CONNECTION
27056 field_addr.name = "multiplier";
27057#endif /* FREECIV_JSON_CONNECTION */
27058 e = 0;
27059 {
27060 int i;
27061
27062#ifdef FREECIV_JSON_CONNECTION
27063 /* Create the array. */
27064 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27065
27066 /* Enter the array. */
27067 field_addr.sub_location = plocation_elem_new(0);
27068#endif /* FREECIV_JSON_CONNECTION */
27069
27070 for (i = 0; i < real_packet->multip_count; i++) {
27071#ifdef FREECIV_JSON_CONNECTION
27072 /* Next array element. */
27073 field_addr.sub_location->number = i;
27074#endif /* FREECIV_JSON_CONNECTION */
27075
27076 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
27077 }
27078
27079#ifdef FREECIV_JSON_CONNECTION
27080 /* Exit array. */
27081 FC_FREE(field_addr.sub_location);
27082#endif /* FREECIV_JSON_CONNECTION */
27083 }
27084 if (e) {
27085 log_packet_detailed("'multiplier' field error detected");
27086 }
27087#ifdef FREECIV_JSON_CONNECTION
27088 field_addr.name = "multiplier_target";
27089#endif /* FREECIV_JSON_CONNECTION */
27090 e = 0;
27091 {
27092 int i;
27093
27094#ifdef FREECIV_JSON_CONNECTION
27095 /* Create the array. */
27096 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27097
27098 /* Enter the array. */
27099 field_addr.sub_location = plocation_elem_new(0);
27100#endif /* FREECIV_JSON_CONNECTION */
27101
27102 for (i = 0; i < real_packet->multip_count; i++) {
27103#ifdef FREECIV_JSON_CONNECTION
27104 /* Next array element. */
27105 field_addr.sub_location->number = i;
27106#endif /* FREECIV_JSON_CONNECTION */
27107
27108 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
27109 }
27110
27111#ifdef FREECIV_JSON_CONNECTION
27112 /* Exit array. */
27113 FC_FREE(field_addr.sub_location);
27114#endif /* FREECIV_JSON_CONNECTION */
27115 }
27116 if (e) {
27117 log_packet_detailed("'multiplier_target' field error detected");
27118 }
27119#ifdef FREECIV_JSON_CONNECTION
27120 field_addr.name = "multiplier_changed";
27121#endif /* FREECIV_JSON_CONNECTION */
27122 e = 0;
27123 {
27124 int i;
27125
27126#ifdef FREECIV_JSON_CONNECTION
27127 /* Create the array. */
27128 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27129
27130 /* Enter the array. */
27131 field_addr.sub_location = plocation_elem_new(0);
27132#endif /* FREECIV_JSON_CONNECTION */
27133
27134 for (i = 0; i < real_packet->multip_count; i++) {
27135#ifdef FREECIV_JSON_CONNECTION
27136 /* Next array element. */
27137 field_addr.sub_location->number = i;
27138#endif /* FREECIV_JSON_CONNECTION */
27139
27140 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
27141 }
27142
27143#ifdef FREECIV_JSON_CONNECTION
27144 /* Exit array. */
27145 FC_FREE(field_addr.sub_location);
27146#endif /* FREECIV_JSON_CONNECTION */
27147 }
27148 if (e) {
27149 log_packet_detailed("'multiplier_changed' field error detected");
27150 }
27151
27152#endif
27154}
27155
27157{
27158 if (!pc->used) {
27159 log_error("WARNING: trying to send data to the closed connection %s",
27161 return -1;
27162 }
27163 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_INFO].packet != NULL, -1,
27164 "Handler for PACKET_PLAYER_INFO not installed");
27165 return pc->phs.handlers->send[PACKET_PLAYER_INFO].packet(pc, packet);
27166}
27167
27168#ifdef FREECIV_DELTA_PROTOCOL
27169#define hash_packet_player_phase_done_100 hash_const
27170
27171#define cmp_packet_player_phase_done_100 cmp_const
27172
27174#endif /* FREECIV_DELTA_PROTOCOL */
27175
27177{
27178#ifdef FREECIV_DELTA_PROTOCOL
27180 struct packet_player_phase_done *old;
27181 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PHASE_DONE;
27182#endif /* FREECIV_DELTA_PROTOCOL */
27184#ifdef FREECIV_JSON_CONNECTION
27185 struct plocation field_addr;
27186 {
27190 }
27191#endif /* FREECIV_JSON_CONNECTION */
27192
27193#ifdef FREECIV_DELTA_PROTOCOL
27194#ifdef FREECIV_JSON_CONNECTION
27195 field_addr.name = "fields";
27196#endif /* FREECIV_JSON_CONNECTION */
27197 DIO_BV_GET(&din, &field_addr, fields);
27198
27199#else /* FREECIV_DELTA_PROTOCOL */
27200#ifdef FREECIV_JSON_CONNECTION
27201 field_addr.name = "turn";
27202#endif /* FREECIV_JSON_CONNECTION */
27203 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
27205 }
27206#endif
27207 log_packet_detailed("packet_player_phase_done_100: got info about ()");
27208
27209#ifdef FREECIV_DELTA_PROTOCOL
27210 if (NULL == *hash) {
27212 NULL, NULL, NULL, free);
27213 }
27214
27215 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
27216 *real_packet = *old;
27217 } else {
27218 log_packet_detailed(" no old info");
27219 memset(real_packet, 0, sizeof(*real_packet));
27220 }
27221
27222 if (BV_ISSET(fields, 0)) {
27223 log_packet_detailed(" got field 'turn'");
27224#ifdef FREECIV_JSON_CONNECTION
27225 field_addr.name = "turn";
27226#endif /* FREECIV_JSON_CONNECTION */
27227 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
27229 }
27230 }
27231
27232 if (NULL == old) {
27233 old = fc_malloc(sizeof(*old));
27234 *old = *real_packet;
27235 genhash_insert(*hash, old, old);
27236 } else {
27237 *old = *real_packet;
27238 }
27239
27240#endif /* FREECIV_DELTA_PROTOCOL */
27242}
27243
27245{
27246 const struct packet_player_phase_done *real_packet = packet;
27247 int e;
27248#ifdef FREECIV_DELTA_PROTOCOL
27250 struct packet_player_phase_done *old;
27251 bool differ;
27252 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PHASE_DONE;
27253#endif /* FREECIV_DELTA_PROTOCOL */
27255#ifdef FREECIV_JSON_CONNECTION
27256 struct plocation field_addr;
27257 {
27261 }
27262#endif /* FREECIV_JSON_CONNECTION */
27263
27264 log_packet_detailed("packet_player_phase_done_100: sending info about ()");
27265
27266#ifdef FREECIV_DELTA_PROTOCOL
27267 if (NULL == *hash) {
27269 NULL, NULL, NULL, free);
27270 }
27271 BV_CLR_ALL(fields);
27272
27273 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
27274 old = fc_malloc(sizeof(*old));
27275 *old = *real_packet;
27276 genhash_insert(*hash, old, old);
27277 memset(old, 0, sizeof(*old));
27278 }
27279 differ = (old->turn != real_packet->turn);
27280 if (differ) {
27281 BV_SET(fields, 0);
27282 }
27283
27284
27285#ifdef FREECIV_JSON_CONNECTION
27286 field_addr.name = "fields";
27287#endif /* FREECIV_JSON_CONNECTION */
27288 e = 0;
27289 e |= DIO_BV_PUT(&dout, &field_addr, fields);
27290 if (e) {
27291 log_packet_detailed("fields bitvector error detected");
27292 }
27293
27294 if (BV_ISSET(fields, 0)) {
27295 log_packet_detailed(" field 'turn' has changed");
27296#ifdef FREECIV_JSON_CONNECTION
27297 field_addr.name = "turn";
27298#endif /* FREECIV_JSON_CONNECTION */
27299 e = 0;
27300 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
27301 if (e) {
27302 log_packet_detailed("'turn' field error detected");
27303 }
27304 }
27305
27306 *old = *real_packet;
27307#endif /* FREECIV_DELTA_PROTOCOL */
27308#ifndef FREECIV_DELTA_PROTOCOL
27309#ifdef FREECIV_JSON_CONNECTION
27310 field_addr.name = "turn";
27311#endif /* FREECIV_JSON_CONNECTION */
27312 e = 0;
27313 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
27314 if (e) {
27315 log_packet_detailed("'turn' field error detected");
27316 }
27317
27318#endif
27320}
27321
27323{
27324 if (!pc->used) {
27325 log_error("WARNING: trying to send data to the closed connection %s",
27327 return -1;
27328 }
27329 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet != NULL, -1,
27330 "Handler for PACKET_PLAYER_PHASE_DONE not installed");
27331 return pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet(pc, packet);
27332}
27333
27335{
27336 struct packet_player_phase_done packet, *real_packet = &packet;
27337
27339
27341}
27342
27343#ifdef FREECIV_DELTA_PROTOCOL
27344#define hash_packet_player_rates_100 hash_const
27345
27346#define cmp_packet_player_rates_100 cmp_const
27347
27349#endif /* FREECIV_DELTA_PROTOCOL */
27350
27352{
27353#ifdef FREECIV_DELTA_PROTOCOL
27355 struct packet_player_rates *old;
27356 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RATES;
27357#endif /* FREECIV_DELTA_PROTOCOL */
27359#ifdef FREECIV_JSON_CONNECTION
27360 struct plocation field_addr;
27361 {
27365 }
27366#endif /* FREECIV_JSON_CONNECTION */
27367
27368#ifdef FREECIV_DELTA_PROTOCOL
27369#ifdef FREECIV_JSON_CONNECTION
27370 field_addr.name = "fields";
27371#endif /* FREECIV_JSON_CONNECTION */
27372 DIO_BV_GET(&din, &field_addr, fields);
27373
27374#else /* FREECIV_DELTA_PROTOCOL */
27375#ifdef FREECIV_JSON_CONNECTION
27376 field_addr.name = "tax";
27377#endif /* FREECIV_JSON_CONNECTION */
27378 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
27380 }
27381#ifdef FREECIV_JSON_CONNECTION
27382 field_addr.name = "luxury";
27383#endif /* FREECIV_JSON_CONNECTION */
27384 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
27386 }
27387#ifdef FREECIV_JSON_CONNECTION
27388 field_addr.name = "science";
27389#endif /* FREECIV_JSON_CONNECTION */
27390 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
27392 }
27393#endif
27394 log_packet_detailed("packet_player_rates_100: got info about ()");
27395
27396#ifdef FREECIV_DELTA_PROTOCOL
27397 if (NULL == *hash) {
27399 NULL, NULL, NULL, free);
27400 }
27401
27402 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
27403 *real_packet = *old;
27404 } else {
27405 log_packet_detailed(" no old info");
27406 memset(real_packet, 0, sizeof(*real_packet));
27407 }
27408
27409 if (BV_ISSET(fields, 0)) {
27410 log_packet_detailed(" got field 'tax'");
27411#ifdef FREECIV_JSON_CONNECTION
27412 field_addr.name = "tax";
27413#endif /* FREECIV_JSON_CONNECTION */
27414 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
27416 }
27417 }
27418 if (BV_ISSET(fields, 1)) {
27419 log_packet_detailed(" got field 'luxury'");
27420#ifdef FREECIV_JSON_CONNECTION
27421 field_addr.name = "luxury";
27422#endif /* FREECIV_JSON_CONNECTION */
27423 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
27425 }
27426 }
27427 if (BV_ISSET(fields, 2)) {
27428 log_packet_detailed(" got field 'science'");
27429#ifdef FREECIV_JSON_CONNECTION
27430 field_addr.name = "science";
27431#endif /* FREECIV_JSON_CONNECTION */
27432 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
27434 }
27435 }
27436
27437 if (NULL == old) {
27438 old = fc_malloc(sizeof(*old));
27439 *old = *real_packet;
27440 genhash_insert(*hash, old, old);
27441 } else {
27442 *old = *real_packet;
27443 }
27444
27445#endif /* FREECIV_DELTA_PROTOCOL */
27447}
27448
27449static int send_packet_player_rates_100(struct connection *pc, const struct packet_player_rates *packet)
27450{
27451 const struct packet_player_rates *real_packet = packet;
27452 int e;
27453#ifdef FREECIV_DELTA_PROTOCOL
27455 struct packet_player_rates *old;
27456 bool differ;
27457 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RATES;
27458#endif /* FREECIV_DELTA_PROTOCOL */
27460#ifdef FREECIV_JSON_CONNECTION
27461 struct plocation field_addr;
27462 {
27466 }
27467#endif /* FREECIV_JSON_CONNECTION */
27468
27469 log_packet_detailed("packet_player_rates_100: sending info about ()");
27470
27471#ifdef FREECIV_DELTA_PROTOCOL
27472 if (NULL == *hash) {
27474 NULL, NULL, NULL, free);
27475 }
27476 BV_CLR_ALL(fields);
27477
27478 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
27479 old = fc_malloc(sizeof(*old));
27480 *old = *real_packet;
27481 genhash_insert(*hash, old, old);
27482 memset(old, 0, sizeof(*old));
27483 }
27484 differ = (old->tax != real_packet->tax);
27485 if (differ) {
27486 BV_SET(fields, 0);
27487 }
27488
27489 differ = (old->luxury != real_packet->luxury);
27490 if (differ) {
27491 BV_SET(fields, 1);
27492 }
27493
27494 differ = (old->science != real_packet->science);
27495 if (differ) {
27496 BV_SET(fields, 2);
27497 }
27498
27499
27500#ifdef FREECIV_JSON_CONNECTION
27501 field_addr.name = "fields";
27502#endif /* FREECIV_JSON_CONNECTION */
27503 e = 0;
27504 e |= DIO_BV_PUT(&dout, &field_addr, fields);
27505 if (e) {
27506 log_packet_detailed("fields bitvector error detected");
27507 }
27508
27509 if (BV_ISSET(fields, 0)) {
27510 log_packet_detailed(" field 'tax' has changed");
27511#ifdef FREECIV_JSON_CONNECTION
27512 field_addr.name = "tax";
27513#endif /* FREECIV_JSON_CONNECTION */
27514 e = 0;
27515 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
27516 if (e) {
27517 log_packet_detailed("'tax' field error detected");
27518 }
27519 }
27520 if (BV_ISSET(fields, 1)) {
27521 log_packet_detailed(" field 'luxury' has changed");
27522#ifdef FREECIV_JSON_CONNECTION
27523 field_addr.name = "luxury";
27524#endif /* FREECIV_JSON_CONNECTION */
27525 e = 0;
27526 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
27527 if (e) {
27528 log_packet_detailed("'luxury' field error detected");
27529 }
27530 }
27531 if (BV_ISSET(fields, 2)) {
27532 log_packet_detailed(" field 'science' has changed");
27533#ifdef FREECIV_JSON_CONNECTION
27534 field_addr.name = "science";
27535#endif /* FREECIV_JSON_CONNECTION */
27536 e = 0;
27537 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
27538 if (e) {
27539 log_packet_detailed("'science' field error detected");
27540 }
27541 }
27542
27543 *old = *real_packet;
27544#endif /* FREECIV_DELTA_PROTOCOL */
27545#ifndef FREECIV_DELTA_PROTOCOL
27546#ifdef FREECIV_JSON_CONNECTION
27547 field_addr.name = "tax";
27548#endif /* FREECIV_JSON_CONNECTION */
27549 e = 0;
27550 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
27551 if (e) {
27552 log_packet_detailed("'tax' field error detected");
27553 }
27554#ifdef FREECIV_JSON_CONNECTION
27555 field_addr.name = "luxury";
27556#endif /* FREECIV_JSON_CONNECTION */
27557 e = 0;
27558 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
27559 if (e) {
27560 log_packet_detailed("'luxury' field error detected");
27561 }
27562#ifdef FREECIV_JSON_CONNECTION
27563 field_addr.name = "science";
27564#endif /* FREECIV_JSON_CONNECTION */
27565 e = 0;
27566 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
27567 if (e) {
27568 log_packet_detailed("'science' field error detected");
27569 }
27570
27571#endif
27573}
27574
27576{
27577 if (!pc->used) {
27578 log_error("WARNING: trying to send data to the closed connection %s",
27580 return -1;
27581 }
27582 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RATES].packet != NULL, -1,
27583 "Handler for PACKET_PLAYER_RATES not installed");
27584 return pc->phs.handlers->send[PACKET_PLAYER_RATES].packet(pc, packet);
27585}
27586
27587int dsend_packet_player_rates(struct connection *pc, int tax, int luxury, int science)
27588{
27589 struct packet_player_rates packet, *real_packet = &packet;
27590
27591 real_packet->tax = tax;
27592 real_packet->luxury = luxury;
27593 real_packet->science = science;
27594
27596}
27597
27598#ifdef FREECIV_DELTA_PROTOCOL
27599#define hash_packet_player_change_government_100 hash_const
27600
27601#define cmp_packet_player_change_government_100 cmp_const
27602
27604#endif /* FREECIV_DELTA_PROTOCOL */
27605
27607{
27608#ifdef FREECIV_DELTA_PROTOCOL
27611 struct genhash **hash = pc->phs.received + PACKET_PLAYER_CHANGE_GOVERNMENT;
27612#endif /* FREECIV_DELTA_PROTOCOL */
27614#ifdef FREECIV_JSON_CONNECTION
27615 struct plocation field_addr;
27616 {
27620 }
27621#endif /* FREECIV_JSON_CONNECTION */
27622
27623#ifdef FREECIV_DELTA_PROTOCOL
27624#ifdef FREECIV_JSON_CONNECTION
27625 field_addr.name = "fields";
27626#endif /* FREECIV_JSON_CONNECTION */
27627 DIO_BV_GET(&din, &field_addr, fields);
27628
27629#else /* FREECIV_DELTA_PROTOCOL */
27630#ifdef FREECIV_JSON_CONNECTION
27631 field_addr.name = "government";
27632#endif /* FREECIV_JSON_CONNECTION */
27633 {
27634 int readin;
27635
27636 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
27638 }
27639 real_packet->government = readin;
27640 }
27641#endif
27642 log_packet_detailed("packet_player_change_government_100: got info about ()");
27643
27644#ifdef FREECIV_DELTA_PROTOCOL
27645 if (NULL == *hash) {
27647 NULL, NULL, NULL, free);
27648 }
27649
27650 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
27651 *real_packet = *old;
27652 } else {
27653 log_packet_detailed(" no old info");
27654 memset(real_packet, 0, sizeof(*real_packet));
27655 }
27656
27657 if (BV_ISSET(fields, 0)) {
27658 log_packet_detailed(" got field 'government'");
27659#ifdef FREECIV_JSON_CONNECTION
27660 field_addr.name = "government";
27661#endif /* FREECIV_JSON_CONNECTION */
27662 {
27663 int readin;
27664
27665 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
27667 }
27668 real_packet->government = readin;
27669 }
27670 }
27671
27672 if (NULL == old) {
27673 old = fc_malloc(sizeof(*old));
27674 *old = *real_packet;
27675 genhash_insert(*hash, old, old);
27676 } else {
27677 *old = *real_packet;
27678 }
27679
27680#endif /* FREECIV_DELTA_PROTOCOL */
27682}
27683
27685{
27686 const struct packet_player_change_government *real_packet = packet;
27687 int e;
27688#ifdef FREECIV_DELTA_PROTOCOL
27691 bool differ;
27692 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_CHANGE_GOVERNMENT;
27693#endif /* FREECIV_DELTA_PROTOCOL */
27695#ifdef FREECIV_JSON_CONNECTION
27696 struct plocation field_addr;
27697 {
27701 }
27702#endif /* FREECIV_JSON_CONNECTION */
27703
27704 log_packet_detailed("packet_player_change_government_100: sending info about ()");
27705
27706#ifdef FREECIV_DELTA_PROTOCOL
27707 if (NULL == *hash) {
27709 NULL, NULL, NULL, free);
27710 }
27711 BV_CLR_ALL(fields);
27712
27713 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
27714 old = fc_malloc(sizeof(*old));
27715 *old = *real_packet;
27716 genhash_insert(*hash, old, old);
27717 memset(old, 0, sizeof(*old));
27718 }
27719 differ = (old->government != real_packet->government);
27720 if (differ) {
27721 BV_SET(fields, 0);
27722 }
27723
27724
27725#ifdef FREECIV_JSON_CONNECTION
27726 field_addr.name = "fields";
27727#endif /* FREECIV_JSON_CONNECTION */
27728 e = 0;
27729 e |= DIO_BV_PUT(&dout, &field_addr, fields);
27730 if (e) {
27731 log_packet_detailed("fields bitvector error detected");
27732 }
27733
27734 if (BV_ISSET(fields, 0)) {
27735 log_packet_detailed(" field 'government' has changed");
27736#ifdef FREECIV_JSON_CONNECTION
27737 field_addr.name = "government";
27738#endif /* FREECIV_JSON_CONNECTION */
27739 e = 0;
27740 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
27741 if (e) {
27742 log_packet_detailed("'government' field error detected");
27743 }
27744 }
27745
27746 *old = *real_packet;
27747#endif /* FREECIV_DELTA_PROTOCOL */
27748#ifndef FREECIV_DELTA_PROTOCOL
27749#ifdef FREECIV_JSON_CONNECTION
27750 field_addr.name = "government";
27751#endif /* FREECIV_JSON_CONNECTION */
27752 e = 0;
27753 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
27754 if (e) {
27755 log_packet_detailed("'government' field error detected");
27756 }
27757
27758#endif
27760}
27761
27763{
27764 if (!pc->used) {
27765 log_error("WARNING: trying to send data to the closed connection %s",
27767 return -1;
27768 }
27769 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet != NULL, -1,
27770 "Handler for PACKET_PLAYER_CHANGE_GOVERNMENT not installed");
27771 return pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet(pc, packet);
27772}
27773
27782
27783#ifdef FREECIV_DELTA_PROTOCOL
27784#define hash_packet_player_place_infra_100 hash_const
27785
27786#define cmp_packet_player_place_infra_100 cmp_const
27787
27789#endif /* FREECIV_DELTA_PROTOCOL */
27790
27792{
27793#ifdef FREECIV_DELTA_PROTOCOL
27795 struct packet_player_place_infra *old;
27796 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PLACE_INFRA;
27797#endif /* FREECIV_DELTA_PROTOCOL */
27799#ifdef FREECIV_JSON_CONNECTION
27800 struct plocation field_addr;
27801 {
27805 }
27806#endif /* FREECIV_JSON_CONNECTION */
27807
27808#ifdef FREECIV_DELTA_PROTOCOL
27809#ifdef FREECIV_JSON_CONNECTION
27810 field_addr.name = "fields";
27811#endif /* FREECIV_JSON_CONNECTION */
27812 DIO_BV_GET(&din, &field_addr, fields);
27813
27814#else /* FREECIV_DELTA_PROTOCOL */
27815#ifdef FREECIV_JSON_CONNECTION
27816 field_addr.name = "tile";
27817#endif /* FREECIV_JSON_CONNECTION */
27818 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
27820 }
27821#ifdef FREECIV_JSON_CONNECTION
27822 field_addr.name = "extra";
27823#endif /* FREECIV_JSON_CONNECTION */
27824 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
27826 }
27827#endif
27828 log_packet_detailed("packet_player_place_infra_100: got info about ()");
27829
27830#ifdef FREECIV_DELTA_PROTOCOL
27831 if (NULL == *hash) {
27833 NULL, NULL, NULL, free);
27834 }
27835
27836 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
27837 *real_packet = *old;
27838 } else {
27839 log_packet_detailed(" no old info");
27840 memset(real_packet, 0, sizeof(*real_packet));
27841 }
27842
27843 if (BV_ISSET(fields, 0)) {
27844 log_packet_detailed(" got field 'tile'");
27845#ifdef FREECIV_JSON_CONNECTION
27846 field_addr.name = "tile";
27847#endif /* FREECIV_JSON_CONNECTION */
27848 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
27850 }
27851 }
27852 if (BV_ISSET(fields, 1)) {
27853 log_packet_detailed(" got field 'extra'");
27854#ifdef FREECIV_JSON_CONNECTION
27855 field_addr.name = "extra";
27856#endif /* FREECIV_JSON_CONNECTION */
27857 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
27859 }
27860 }
27861
27862 if (NULL == old) {
27863 old = fc_malloc(sizeof(*old));
27864 *old = *real_packet;
27865 genhash_insert(*hash, old, old);
27866 } else {
27867 *old = *real_packet;
27868 }
27869
27870#endif /* FREECIV_DELTA_PROTOCOL */
27872}
27873
27875{
27876 const struct packet_player_place_infra *real_packet = packet;
27877 int e;
27878#ifdef FREECIV_DELTA_PROTOCOL
27880 struct packet_player_place_infra *old;
27881 bool differ;
27882 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PLACE_INFRA;
27883#endif /* FREECIV_DELTA_PROTOCOL */
27885#ifdef FREECIV_JSON_CONNECTION
27886 struct plocation field_addr;
27887 {
27891 }
27892#endif /* FREECIV_JSON_CONNECTION */
27893
27894 log_packet_detailed("packet_player_place_infra_100: sending info about ()");
27895
27896#ifdef FREECIV_DELTA_PROTOCOL
27897 if (NULL == *hash) {
27899 NULL, NULL, NULL, free);
27900 }
27901 BV_CLR_ALL(fields);
27902
27903 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
27904 old = fc_malloc(sizeof(*old));
27905 *old = *real_packet;
27906 genhash_insert(*hash, old, old);
27907 memset(old, 0, sizeof(*old));
27908 }
27909 differ = (old->tile != real_packet->tile);
27910 if (differ) {
27911 BV_SET(fields, 0);
27912 }
27913
27914 differ = (old->extra != real_packet->extra);
27915 if (differ) {
27916 BV_SET(fields, 1);
27917 }
27918
27919
27920#ifdef FREECIV_JSON_CONNECTION
27921 field_addr.name = "fields";
27922#endif /* FREECIV_JSON_CONNECTION */
27923 e = 0;
27924 e |= DIO_BV_PUT(&dout, &field_addr, fields);
27925 if (e) {
27926 log_packet_detailed("fields bitvector error detected");
27927 }
27928
27929 if (BV_ISSET(fields, 0)) {
27930 log_packet_detailed(" field 'tile' has changed");
27931#ifdef FREECIV_JSON_CONNECTION
27932 field_addr.name = "tile";
27933#endif /* FREECIV_JSON_CONNECTION */
27934 e = 0;
27935 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
27936 if (e) {
27937 log_packet_detailed("'tile' field error detected");
27938 }
27939 }
27940 if (BV_ISSET(fields, 1)) {
27941 log_packet_detailed(" field 'extra' has changed");
27942#ifdef FREECIV_JSON_CONNECTION
27943 field_addr.name = "extra";
27944#endif /* FREECIV_JSON_CONNECTION */
27945 e = 0;
27946 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
27947 if (e) {
27948 log_packet_detailed("'extra' field error detected");
27949 }
27950 }
27951
27952 *old = *real_packet;
27953#endif /* FREECIV_DELTA_PROTOCOL */
27954#ifndef FREECIV_DELTA_PROTOCOL
27955#ifdef FREECIV_JSON_CONNECTION
27956 field_addr.name = "tile";
27957#endif /* FREECIV_JSON_CONNECTION */
27958 e = 0;
27959 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
27960 if (e) {
27961 log_packet_detailed("'tile' field error detected");
27962 }
27963#ifdef FREECIV_JSON_CONNECTION
27964 field_addr.name = "extra";
27965#endif /* FREECIV_JSON_CONNECTION */
27966 e = 0;
27967 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
27968 if (e) {
27969 log_packet_detailed("'extra' field error detected");
27970 }
27971
27972#endif
27974}
27975
27977{
27978 if (!pc->used) {
27979 log_error("WARNING: trying to send data to the closed connection %s",
27981 return -1;
27982 }
27983 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet != NULL, -1,
27984 "Handler for PACKET_PLAYER_PLACE_INFRA not installed");
27985 return pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet(pc, packet);
27986}
27987
27989{
27990 struct packet_player_place_infra packet, *real_packet = &packet;
27991
27993 real_packet->extra = extra;
27994
27996}
27997
27999{
28001#if 1 /* To match endif */
28002 real_packet->__dummy = 0xff;
28003#endif
28004 log_packet_detailed("packet_player_attribute_block_100: got info about ()");
28006}
28007
28009{
28011
28012 log_packet_detailed("packet_player_attribute_block_100: sending info about ()");
28014}
28015
28017{
28018 if (!pc->used) {
28019 log_error("WARNING: trying to send data to the closed connection %s",
28021 return -1;
28022 }
28023 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet != NULL, -1,
28024 "Handler for PACKET_PLAYER_ATTRIBUTE_BLOCK not installed");
28025 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet(pc);
28026}
28027
28028#ifdef FREECIV_DELTA_PROTOCOL
28030{
28031 const struct packet_player_attribute_chunk *key = (const struct packet_player_attribute_chunk *) vkey;
28032 genhash_val_t result = 0;
28033
28034 result += key->offset;
28035
28036 result &= 0xFFFFFFFF;
28037 return result;
28038}
28039
28040static bool cmp_packet_player_attribute_chunk_100(const void *vkey1, const void *vkey2)
28041{
28042 const struct packet_player_attribute_chunk *old = (const struct packet_player_attribute_chunk *) vkey1;
28044 bool differ;
28045
28046 differ = (old->offset != real_packet->offset);
28047
28048 return !differ;
28049}
28051#endif /* FREECIV_DELTA_PROTOCOL */
28052
28054{
28055#ifdef FREECIV_DELTA_PROTOCOL
28058 struct genhash **hash = pc->phs.received + PACKET_PLAYER_ATTRIBUTE_CHUNK;
28059#endif /* FREECIV_DELTA_PROTOCOL */
28061#ifdef FREECIV_JSON_CONNECTION
28062 struct plocation field_addr;
28063 {
28067 }
28068#endif /* FREECIV_JSON_CONNECTION */
28069
28070#ifdef FREECIV_DELTA_PROTOCOL
28071#ifdef FREECIV_JSON_CONNECTION
28072 field_addr.name = "fields";
28073#endif /* FREECIV_JSON_CONNECTION */
28074 DIO_BV_GET(&din, &field_addr, fields);
28075#ifdef FREECIV_JSON_CONNECTION
28076 field_addr.name = "offset";
28077#endif /* FREECIV_JSON_CONNECTION */
28078 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->offset)) {
28080 }
28081
28082#else /* FREECIV_DELTA_PROTOCOL */
28083#ifdef FREECIV_JSON_CONNECTION
28084 field_addr.name = "offset";
28085#endif /* FREECIV_JSON_CONNECTION */
28086 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->offset)) {
28088 }
28089#ifdef FREECIV_JSON_CONNECTION
28090 field_addr.name = "total_length";
28091#endif /* FREECIV_JSON_CONNECTION */
28092 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
28093 RECEIVE_PACKET_FIELD_ERROR(total_length);
28094 }
28095#ifdef FREECIV_JSON_CONNECTION
28096 field_addr.name = "chunk_length";
28097#endif /* FREECIV_JSON_CONNECTION */
28098 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
28099 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
28100 }
28101#ifdef FREECIV_JSON_CONNECTION
28102 field_addr.name = "data";
28103#endif /* FREECIV_JSON_CONNECTION */
28104 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
28105 RECEIVE_PACKET_FIELD_ERROR(data, ": truncation array");
28106 }
28107 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
28109 }
28110#endif
28111 log_packet_detailed("packet_player_attribute_chunk_100: got info about (%d)",
28112 real_packet->offset);
28113
28114#ifdef FREECIV_DELTA_PROTOCOL
28115 if (NULL == *hash) {
28117 NULL, NULL, NULL, free);
28118 }
28119
28120 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28121 *real_packet = *old;
28122 } else {
28123 int offset;
28124
28125 offset = real_packet->offset;
28126
28127 log_packet_detailed(" no old info");
28128 memset(real_packet, 0, sizeof(*real_packet));
28129
28130 real_packet->offset = offset;
28131 }
28132
28133 if (BV_ISSET(fields, 0)) {
28134 log_packet_detailed(" got field 'total_length'");
28135#ifdef FREECIV_JSON_CONNECTION
28136 field_addr.name = "total_length";
28137#endif /* FREECIV_JSON_CONNECTION */
28138 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
28139 RECEIVE_PACKET_FIELD_ERROR(total_length);
28140 }
28141 }
28142 if (BV_ISSET(fields, 1)) {
28143 log_packet_detailed(" got field 'chunk_length'");
28144#ifdef FREECIV_JSON_CONNECTION
28145 field_addr.name = "chunk_length";
28146#endif /* FREECIV_JSON_CONNECTION */
28147 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
28148 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
28149 }
28150 }
28151 if (BV_ISSET(fields, 2)) {
28152 log_packet_detailed(" got field 'data'");
28153#ifdef FREECIV_JSON_CONNECTION
28154 field_addr.name = "data";
28155#endif /* FREECIV_JSON_CONNECTION */
28156 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
28157 RECEIVE_PACKET_FIELD_ERROR(data, ": truncation array");
28158 }
28159 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
28161 }
28162 }
28163
28164 if (NULL == old) {
28165 old = fc_malloc(sizeof(*old));
28166 *old = *real_packet;
28167 genhash_insert(*hash, old, old);
28168 } else {
28169 *old = *real_packet;
28170 }
28171
28172#endif /* FREECIV_DELTA_PROTOCOL */
28174}
28175
28177{
28178 /* copy packet for pre-send */
28181 int e;
28182#ifdef FREECIV_DELTA_PROTOCOL
28185 bool differ;
28186 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_ATTRIBUTE_CHUNK;
28187#endif /* FREECIV_DELTA_PROTOCOL */
28189#ifdef FREECIV_JSON_CONNECTION
28190 struct plocation field_addr;
28191 {
28195 }
28196#endif /* FREECIV_JSON_CONNECTION */
28197
28198 log_packet_detailed("packet_player_attribute_chunk_100: sending info about (%d)",
28199 real_packet->offset);
28200
28202
28203#ifdef FREECIV_DELTA_PROTOCOL
28204 if (NULL == *hash) {
28206 NULL, NULL, NULL, free);
28207 }
28208 BV_CLR_ALL(fields);
28209
28210 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
28211 old = fc_malloc(sizeof(*old));
28212 *old = *real_packet;
28213 genhash_insert(*hash, old, old);
28214 memset(old, 0, sizeof(*old));
28215 }
28216 differ = (old->total_length != real_packet->total_length);
28217 if (differ) {
28218 BV_SET(fields, 0);
28219 }
28220
28221 differ = (old->chunk_length != real_packet->chunk_length);
28222 if (differ) {
28223 BV_SET(fields, 1);
28224 }
28225
28226 differ = ((old->chunk_length != real_packet->chunk_length)
28227 || (memcmp(old->data, real_packet->data, real_packet->chunk_length) != 0));
28228 if (differ) {
28229 BV_SET(fields, 2);
28230 }
28231
28232
28233#ifdef FREECIV_JSON_CONNECTION
28234 field_addr.name = "fields";
28235#endif /* FREECIV_JSON_CONNECTION */
28236 e = 0;
28237 e |= DIO_BV_PUT(&dout, &field_addr, fields);
28238 if (e) {
28239 log_packet_detailed("fields bitvector error detected");
28240 }
28241#ifdef FREECIV_JSON_CONNECTION
28242 field_addr.name = "offset";
28243#endif /* FREECIV_JSON_CONNECTION */
28244 e = 0;
28245 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->offset);
28246 if (e) {
28247 log_packet_detailed("'offset' field error detected");
28248 }
28249
28250 if (BV_ISSET(fields, 0)) {
28251 log_packet_detailed(" field 'total_length' has changed");
28252#ifdef FREECIV_JSON_CONNECTION
28253 field_addr.name = "total_length";
28254#endif /* FREECIV_JSON_CONNECTION */
28255 e = 0;
28256 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
28257 if (e) {
28258 log_packet_detailed("'total_length' field error detected");
28259 }
28260 }
28261 if (BV_ISSET(fields, 1)) {
28262 log_packet_detailed(" field 'chunk_length' has changed");
28263#ifdef FREECIV_JSON_CONNECTION
28264 field_addr.name = "chunk_length";
28265#endif /* FREECIV_JSON_CONNECTION */
28266 e = 0;
28267 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
28268 if (e) {
28269 log_packet_detailed("'chunk_length' field error detected");
28270 }
28271 }
28272 if (BV_ISSET(fields, 2)) {
28273 log_packet_detailed(" field 'data' has changed");
28274#ifdef FREECIV_JSON_CONNECTION
28275 field_addr.name = "data";
28276#endif /* FREECIV_JSON_CONNECTION */
28277 e = 0;
28278 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
28279 if (e) {
28280 log_packet_detailed("'data' field error detected");
28281 }
28282 }
28283
28284 *old = *real_packet;
28285#endif /* FREECIV_DELTA_PROTOCOL */
28286#ifndef FREECIV_DELTA_PROTOCOL
28287#ifdef FREECIV_JSON_CONNECTION
28288 field_addr.name = "offset";
28289#endif /* FREECIV_JSON_CONNECTION */
28290 e = 0;
28291 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->offset);
28292 if (e) {
28293 log_packet_detailed("'offset' field error detected");
28294 }
28295#ifdef FREECIV_JSON_CONNECTION
28296 field_addr.name = "total_length";
28297#endif /* FREECIV_JSON_CONNECTION */
28298 e = 0;
28299 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
28300 if (e) {
28301 log_packet_detailed("'total_length' field error detected");
28302 }
28303#ifdef FREECIV_JSON_CONNECTION
28304 field_addr.name = "chunk_length";
28305#endif /* FREECIV_JSON_CONNECTION */
28306 e = 0;
28307 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
28308 if (e) {
28309 log_packet_detailed("'chunk_length' field error detected");
28310 }
28311#ifdef FREECIV_JSON_CONNECTION
28312 field_addr.name = "data";
28313#endif /* FREECIV_JSON_CONNECTION */
28314 e = 0;
28315 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
28316 if (e) {
28317 log_packet_detailed("'data' field error detected");
28318 }
28319
28320#endif
28322}
28323
28325{
28326 if (!pc->used) {
28327 log_error("WARNING: trying to send data to the closed connection %s",
28329 return -1;
28330 }
28331 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet != NULL, -1,
28332 "Handler for PACKET_PLAYER_ATTRIBUTE_CHUNK not installed");
28333 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet(pc, packet);
28334}
28335
28336#ifdef FREECIV_DELTA_PROTOCOL
28338{
28339 const struct packet_player_diplstate *key = (const struct packet_player_diplstate *) vkey;
28340 genhash_val_t result = 0;
28341
28342 result += key->diplstate_id;
28343
28344 result &= 0xFFFFFFFF;
28345 return result;
28346}
28347
28348static bool cmp_packet_player_diplstate_100(const void *vkey1, const void *vkey2)
28349{
28350 const struct packet_player_diplstate *old = (const struct packet_player_diplstate *) vkey1;
28351 const struct packet_player_diplstate *real_packet = (const struct packet_player_diplstate *) vkey2;
28352 bool differ;
28353
28354 differ = (old->diplstate_id != real_packet->diplstate_id);
28355
28356 return !differ;
28357}
28359#endif /* FREECIV_DELTA_PROTOCOL */
28360
28362{
28363#ifdef FREECIV_DELTA_PROTOCOL
28365 struct packet_player_diplstate *old;
28366 struct genhash **hash = pc->phs.received + PACKET_PLAYER_DIPLSTATE;
28367#endif /* FREECIV_DELTA_PROTOCOL */
28369#ifdef FREECIV_JSON_CONNECTION
28370 struct plocation field_addr;
28371 {
28375 }
28376#endif /* FREECIV_JSON_CONNECTION */
28377
28378#ifdef FREECIV_DELTA_PROTOCOL
28379#ifdef FREECIV_JSON_CONNECTION
28380 field_addr.name = "fields";
28381#endif /* FREECIV_JSON_CONNECTION */
28382 DIO_BV_GET(&din, &field_addr, fields);
28383#ifdef FREECIV_JSON_CONNECTION
28384 field_addr.name = "diplstate_id";
28385#endif /* FREECIV_JSON_CONNECTION */
28386 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->diplstate_id)) {
28387 RECEIVE_PACKET_FIELD_ERROR(diplstate_id);
28388 }
28389
28390#else /* FREECIV_DELTA_PROTOCOL */
28391#ifdef FREECIV_JSON_CONNECTION
28392 field_addr.name = "diplstate_id";
28393#endif /* FREECIV_JSON_CONNECTION */
28394 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->diplstate_id)) {
28395 RECEIVE_PACKET_FIELD_ERROR(diplstate_id);
28396 }
28397#ifdef FREECIV_JSON_CONNECTION
28398 field_addr.name = "plr1";
28399#endif /* FREECIV_JSON_CONNECTION */
28400 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->plr1)) {
28402 }
28403#ifdef FREECIV_JSON_CONNECTION
28404 field_addr.name = "plr2";
28405#endif /* FREECIV_JSON_CONNECTION */
28406 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->plr2)) {
28408 }
28409#ifdef FREECIV_JSON_CONNECTION
28410 field_addr.name = "type";
28411#endif /* FREECIV_JSON_CONNECTION */
28412 {
28413 int readin;
28414
28415 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
28417 }
28418 real_packet->type = readin;
28419 }
28420#ifdef FREECIV_JSON_CONNECTION
28421 field_addr.name = "turns_left";
28422#endif /* FREECIV_JSON_CONNECTION */
28423 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
28424 RECEIVE_PACKET_FIELD_ERROR(turns_left);
28425 }
28426#ifdef FREECIV_JSON_CONNECTION
28427 field_addr.name = "has_reason_to_cancel";
28428#endif /* FREECIV_JSON_CONNECTION */
28429 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
28430 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
28431 }
28432#ifdef FREECIV_JSON_CONNECTION
28433 field_addr.name = "contact_turns_left";
28434#endif /* FREECIV_JSON_CONNECTION */
28435 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
28436 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
28437 }
28438#endif
28439 log_packet_detailed("packet_player_diplstate_100: got info about (%d)",
28440 real_packet->diplstate_id);
28441
28442#ifdef FREECIV_DELTA_PROTOCOL
28443 if (NULL == *hash) {
28445 NULL, NULL, NULL, free);
28446 }
28447
28448 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28449 *real_packet = *old;
28450 } else {
28451 int diplstate_id;
28452
28453 diplstate_id = real_packet->diplstate_id;
28454
28455 log_packet_detailed(" no old info");
28456 memset(real_packet, 0, sizeof(*real_packet));
28457
28458 real_packet->diplstate_id = diplstate_id;
28459 }
28460
28461 if (BV_ISSET(fields, 0)) {
28462 log_packet_detailed(" got field 'plr1'");
28463#ifdef FREECIV_JSON_CONNECTION
28464 field_addr.name = "plr1";
28465#endif /* FREECIV_JSON_CONNECTION */
28466 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->plr1)) {
28468 }
28469 }
28470 if (BV_ISSET(fields, 1)) {
28471 log_packet_detailed(" got field 'plr2'");
28472#ifdef FREECIV_JSON_CONNECTION
28473 field_addr.name = "plr2";
28474#endif /* FREECIV_JSON_CONNECTION */
28475 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->plr2)) {
28477 }
28478 }
28479 if (BV_ISSET(fields, 2)) {
28480 log_packet_detailed(" got field 'type'");
28481#ifdef FREECIV_JSON_CONNECTION
28482 field_addr.name = "type";
28483#endif /* FREECIV_JSON_CONNECTION */
28484 {
28485 int readin;
28486
28487 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
28489 }
28490 real_packet->type = readin;
28491 }
28492 }
28493 if (BV_ISSET(fields, 3)) {
28494 log_packet_detailed(" got field 'turns_left'");
28495#ifdef FREECIV_JSON_CONNECTION
28496 field_addr.name = "turns_left";
28497#endif /* FREECIV_JSON_CONNECTION */
28498 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
28499 RECEIVE_PACKET_FIELD_ERROR(turns_left);
28500 }
28501 }
28502 if (BV_ISSET(fields, 4)) {
28503 log_packet_detailed(" got field 'has_reason_to_cancel'");
28504#ifdef FREECIV_JSON_CONNECTION
28505 field_addr.name = "has_reason_to_cancel";
28506#endif /* FREECIV_JSON_CONNECTION */
28507 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
28508 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
28509 }
28510 }
28511 if (BV_ISSET(fields, 5)) {
28512 log_packet_detailed(" got field 'contact_turns_left'");
28513#ifdef FREECIV_JSON_CONNECTION
28514 field_addr.name = "contact_turns_left";
28515#endif /* FREECIV_JSON_CONNECTION */
28516 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
28517 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
28518 }
28519 }
28520
28521 if (NULL == old) {
28522 old = fc_malloc(sizeof(*old));
28523 *old = *real_packet;
28524 genhash_insert(*hash, old, old);
28525 } else {
28526 *old = *real_packet;
28527 }
28528
28529#endif /* FREECIV_DELTA_PROTOCOL */
28531}
28532
28534{
28535 const struct packet_player_diplstate *real_packet = packet;
28536 int e;
28537#ifdef FREECIV_DELTA_PROTOCOL
28539 struct packet_player_diplstate *old;
28540 bool differ;
28541 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_DIPLSTATE;
28542#endif /* FREECIV_DELTA_PROTOCOL */
28544#ifdef FREECIV_JSON_CONNECTION
28545 struct plocation field_addr;
28546 {
28550 }
28551#endif /* FREECIV_JSON_CONNECTION */
28552
28553 log_packet_detailed("packet_player_diplstate_100: sending info about (%d)",
28554 real_packet->diplstate_id);
28555
28556#ifdef FREECIV_DELTA_PROTOCOL
28557 if (NULL == *hash) {
28559 NULL, NULL, NULL, free);
28560 }
28561 BV_CLR_ALL(fields);
28562
28563 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
28564 old = fc_malloc(sizeof(*old));
28565 *old = *real_packet;
28566 genhash_insert(*hash, old, old);
28567 memset(old, 0, sizeof(*old));
28568 }
28569 differ = (old->plr1 != real_packet->plr1);
28570 if (differ) {
28571 BV_SET(fields, 0);
28572 }
28573
28574 differ = (old->plr2 != real_packet->plr2);
28575 if (differ) {
28576 BV_SET(fields, 1);
28577 }
28578
28579 differ = (old->type != real_packet->type);
28580 if (differ) {
28581 BV_SET(fields, 2);
28582 }
28583
28584 differ = (old->turns_left != real_packet->turns_left);
28585 if (differ) {
28586 BV_SET(fields, 3);
28587 }
28588
28589 differ = (old->has_reason_to_cancel != real_packet->has_reason_to_cancel);
28590 if (differ) {
28591 BV_SET(fields, 4);
28592 }
28593
28594 differ = (old->contact_turns_left != real_packet->contact_turns_left);
28595 if (differ) {
28596 BV_SET(fields, 5);
28597 }
28598
28599
28600#ifdef FREECIV_JSON_CONNECTION
28601 field_addr.name = "fields";
28602#endif /* FREECIV_JSON_CONNECTION */
28603 e = 0;
28604 e |= DIO_BV_PUT(&dout, &field_addr, fields);
28605 if (e) {
28606 log_packet_detailed("fields bitvector error detected");
28607 }
28608#ifdef FREECIV_JSON_CONNECTION
28609 field_addr.name = "diplstate_id";
28610#endif /* FREECIV_JSON_CONNECTION */
28611 e = 0;
28612 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->diplstate_id);
28613 if (e) {
28614 log_packet_detailed("'diplstate_id' field error detected");
28615 }
28616
28617 if (BV_ISSET(fields, 0)) {
28618 log_packet_detailed(" field 'plr1' has changed");
28619#ifdef FREECIV_JSON_CONNECTION
28620 field_addr.name = "plr1";
28621#endif /* FREECIV_JSON_CONNECTION */
28622 e = 0;
28623 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->plr1);
28624 if (e) {
28625 log_packet_detailed("'plr1' field error detected");
28626 }
28627 }
28628 if (BV_ISSET(fields, 1)) {
28629 log_packet_detailed(" field 'plr2' has changed");
28630#ifdef FREECIV_JSON_CONNECTION
28631 field_addr.name = "plr2";
28632#endif /* FREECIV_JSON_CONNECTION */
28633 e = 0;
28634 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->plr2);
28635 if (e) {
28636 log_packet_detailed("'plr2' field error detected");
28637 }
28638 }
28639 if (BV_ISSET(fields, 2)) {
28640 log_packet_detailed(" field 'type' has changed");
28641#ifdef FREECIV_JSON_CONNECTION
28642 field_addr.name = "type";
28643#endif /* FREECIV_JSON_CONNECTION */
28644 e = 0;
28645 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
28646 if (e) {
28647 log_packet_detailed("'type' field error detected");
28648 }
28649 }
28650 if (BV_ISSET(fields, 3)) {
28651 log_packet_detailed(" field 'turns_left' has changed");
28652#ifdef FREECIV_JSON_CONNECTION
28653 field_addr.name = "turns_left";
28654#endif /* FREECIV_JSON_CONNECTION */
28655 e = 0;
28656 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
28657 if (e) {
28658 log_packet_detailed("'turns_left' field error detected");
28659 }
28660 }
28661 if (BV_ISSET(fields, 4)) {
28662 log_packet_detailed(" field 'has_reason_to_cancel' has changed");
28663#ifdef FREECIV_JSON_CONNECTION
28664 field_addr.name = "has_reason_to_cancel";
28665#endif /* FREECIV_JSON_CONNECTION */
28666 e = 0;
28667 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
28668 if (e) {
28669 log_packet_detailed("'has_reason_to_cancel' field error detected");
28670 }
28671 }
28672 if (BV_ISSET(fields, 5)) {
28673 log_packet_detailed(" field 'contact_turns_left' has changed");
28674#ifdef FREECIV_JSON_CONNECTION
28675 field_addr.name = "contact_turns_left";
28676#endif /* FREECIV_JSON_CONNECTION */
28677 e = 0;
28678 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
28679 if (e) {
28680 log_packet_detailed("'contact_turns_left' field error detected");
28681 }
28682 }
28683
28684 *old = *real_packet;
28685#endif /* FREECIV_DELTA_PROTOCOL */
28686#ifndef FREECIV_DELTA_PROTOCOL
28687#ifdef FREECIV_JSON_CONNECTION
28688 field_addr.name = "diplstate_id";
28689#endif /* FREECIV_JSON_CONNECTION */
28690 e = 0;
28691 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->diplstate_id);
28692 if (e) {
28693 log_packet_detailed("'diplstate_id' field error detected");
28694 }
28695#ifdef FREECIV_JSON_CONNECTION
28696 field_addr.name = "plr1";
28697#endif /* FREECIV_JSON_CONNECTION */
28698 e = 0;
28699 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->plr1);
28700 if (e) {
28701 log_packet_detailed("'plr1' field error detected");
28702 }
28703#ifdef FREECIV_JSON_CONNECTION
28704 field_addr.name = "plr2";
28705#endif /* FREECIV_JSON_CONNECTION */
28706 e = 0;
28707 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->plr2);
28708 if (e) {
28709 log_packet_detailed("'plr2' field error detected");
28710 }
28711#ifdef FREECIV_JSON_CONNECTION
28712 field_addr.name = "type";
28713#endif /* FREECIV_JSON_CONNECTION */
28714 e = 0;
28715 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
28716 if (e) {
28717 log_packet_detailed("'type' field error detected");
28718 }
28719#ifdef FREECIV_JSON_CONNECTION
28720 field_addr.name = "turns_left";
28721#endif /* FREECIV_JSON_CONNECTION */
28722 e = 0;
28723 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
28724 if (e) {
28725 log_packet_detailed("'turns_left' field error detected");
28726 }
28727#ifdef FREECIV_JSON_CONNECTION
28728 field_addr.name = "has_reason_to_cancel";
28729#endif /* FREECIV_JSON_CONNECTION */
28730 e = 0;
28731 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
28732 if (e) {
28733 log_packet_detailed("'has_reason_to_cancel' field error detected");
28734 }
28735#ifdef FREECIV_JSON_CONNECTION
28736 field_addr.name = "contact_turns_left";
28737#endif /* FREECIV_JSON_CONNECTION */
28738 e = 0;
28739 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
28740 if (e) {
28741 log_packet_detailed("'contact_turns_left' field error detected");
28742 }
28743
28744#endif
28746}
28747
28749{
28750 if (!pc->used) {
28751 log_error("WARNING: trying to send data to the closed connection %s",
28753 return -1;
28754 }
28755 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet != NULL, -1,
28756 "Handler for PACKET_PLAYER_DIPLSTATE not installed");
28757 return pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet(pc, packet);
28758}
28759
28760#ifdef FREECIV_DELTA_PROTOCOL
28761#define hash_packet_player_multiplier_100 hash_const
28762
28763#define cmp_packet_player_multiplier_100 cmp_const
28764
28766#endif /* FREECIV_DELTA_PROTOCOL */
28767
28769{
28770#ifdef FREECIV_DELTA_PROTOCOL
28772 struct packet_player_multiplier *old;
28773 struct genhash **hash = pc->phs.received + PACKET_PLAYER_MULTIPLIER;
28774#endif /* FREECIV_DELTA_PROTOCOL */
28776#ifdef FREECIV_JSON_CONNECTION
28777 struct plocation field_addr;
28778 {
28782 }
28783#endif /* FREECIV_JSON_CONNECTION */
28784
28785#ifdef FREECIV_DELTA_PROTOCOL
28786#ifdef FREECIV_JSON_CONNECTION
28787 field_addr.name = "fields";
28788#endif /* FREECIV_JSON_CONNECTION */
28789 DIO_BV_GET(&din, &field_addr, fields);
28790
28791#else /* FREECIV_DELTA_PROTOCOL */
28792#ifdef FREECIV_JSON_CONNECTION
28793 field_addr.name = "count";
28794#endif /* FREECIV_JSON_CONNECTION */
28795 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
28797 }
28798#ifdef FREECIV_JSON_CONNECTION
28799 field_addr.name = "multipliers";
28800#endif /* FREECIV_JSON_CONNECTION */
28801 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
28802 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": truncation array");
28803 }
28804 {
28805 int i;
28806
28807#ifdef FREECIV_JSON_CONNECTION
28808 /* Enter array. */
28809 field_addr.sub_location = plocation_elem_new(0);
28810#endif /* FREECIV_JSON_CONNECTION */
28811
28812 for (i = 0; i < real_packet->count; i++) {
28813#ifdef FREECIV_JSON_CONNECTION
28814 field_addr.sub_location->number = i;
28815#endif /* FREECIV_JSON_CONNECTION */
28816
28817 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
28819 }
28820 }
28821
28822#ifdef FREECIV_JSON_CONNECTION
28823 /* Exit array. */
28824 FC_FREE(field_addr.sub_location);
28825#endif /* FREECIV_JSON_CONNECTION */
28826 }
28827#endif
28828 log_packet_detailed("packet_player_multiplier_100: got info about ()");
28829
28830#ifdef FREECIV_DELTA_PROTOCOL
28831 if (NULL == *hash) {
28833 NULL, NULL, NULL, free);
28834 }
28835
28836 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28837 *real_packet = *old;
28838 } else {
28839 log_packet_detailed(" no old info");
28840 memset(real_packet, 0, sizeof(*real_packet));
28841 }
28842
28843 if (BV_ISSET(fields, 0)) {
28844 log_packet_detailed(" got field 'count'");
28845#ifdef FREECIV_JSON_CONNECTION
28846 field_addr.name = "count";
28847#endif /* FREECIV_JSON_CONNECTION */
28848 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
28850 }
28851 }
28852 if (BV_ISSET(fields, 1)) {
28853 log_packet_detailed(" got field 'multipliers'");
28854#ifdef FREECIV_JSON_CONNECTION
28855 field_addr.name = "multipliers";
28856#endif /* FREECIV_JSON_CONNECTION */
28857 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
28858 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": truncation array");
28859 }
28860 {
28861 int i;
28862
28863#ifdef FREECIV_JSON_CONNECTION
28864 /* Enter array. */
28865 field_addr.sub_location = plocation_elem_new(0);
28866#endif /* FREECIV_JSON_CONNECTION */
28867
28868 for (i = 0; i < real_packet->count; i++) {
28869#ifdef FREECIV_JSON_CONNECTION
28870 field_addr.sub_location->number = i;
28871#endif /* FREECIV_JSON_CONNECTION */
28872
28873 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
28875 }
28876 }
28877
28878#ifdef FREECIV_JSON_CONNECTION
28879 /* Exit array. */
28880 FC_FREE(field_addr.sub_location);
28881#endif /* FREECIV_JSON_CONNECTION */
28882 }
28883 }
28884
28885 if (NULL == old) {
28886 old = fc_malloc(sizeof(*old));
28887 *old = *real_packet;
28888 genhash_insert(*hash, old, old);
28889 } else {
28890 *old = *real_packet;
28891 }
28892
28893#endif /* FREECIV_DELTA_PROTOCOL */
28895}
28896
28898{
28899 const struct packet_player_multiplier *real_packet = packet;
28900 int e;
28901#ifdef FREECIV_DELTA_PROTOCOL
28903 struct packet_player_multiplier *old;
28904 bool differ;
28905 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_MULTIPLIER;
28906#endif /* FREECIV_DELTA_PROTOCOL */
28908#ifdef FREECIV_JSON_CONNECTION
28909 struct plocation field_addr;
28910 {
28914 }
28915#endif /* FREECIV_JSON_CONNECTION */
28916
28917 log_packet_detailed("packet_player_multiplier_100: sending info about ()");
28918
28919#ifdef FREECIV_DELTA_PROTOCOL
28920 if (NULL == *hash) {
28922 NULL, NULL, NULL, free);
28923 }
28924 BV_CLR_ALL(fields);
28925
28926 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
28927 old = fc_malloc(sizeof(*old));
28928 *old = *real_packet;
28929 genhash_insert(*hash, old, old);
28930 memset(old, 0, sizeof(*old));
28931 }
28932 differ = (old->count != real_packet->count);
28933 if (differ) {
28934 BV_SET(fields, 0);
28935 }
28936
28937 differ = (old->count != real_packet->count);
28938 if (!differ) {
28939 int i;
28940
28941 for (i = 0; i < real_packet->count; i++) {
28942 differ = (old->multipliers[i] != real_packet->multipliers[i]);
28943 if (differ) {
28944 break;
28945 }
28946 }
28947 }
28948 if (differ) {
28949 BV_SET(fields, 1);
28950 }
28951
28952
28953#ifdef FREECIV_JSON_CONNECTION
28954 field_addr.name = "fields";
28955#endif /* FREECIV_JSON_CONNECTION */
28956 e = 0;
28957 e |= DIO_BV_PUT(&dout, &field_addr, fields);
28958 if (e) {
28959 log_packet_detailed("fields bitvector error detected");
28960 }
28961
28962 if (BV_ISSET(fields, 0)) {
28963 log_packet_detailed(" field 'count' has changed");
28964#ifdef FREECIV_JSON_CONNECTION
28965 field_addr.name = "count";
28966#endif /* FREECIV_JSON_CONNECTION */
28967 e = 0;
28968 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
28969 if (e) {
28970 log_packet_detailed("'count' field error detected");
28971 }
28972 }
28973 if (BV_ISSET(fields, 1)) {
28974 log_packet_detailed(" field 'multipliers' has changed");
28975#ifdef FREECIV_JSON_CONNECTION
28976 field_addr.name = "multipliers";
28977#endif /* FREECIV_JSON_CONNECTION */
28978 e = 0;
28979 {
28980 int i;
28981
28982#ifdef FREECIV_JSON_CONNECTION
28983 /* Create the array. */
28984 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
28985
28986 /* Enter the array. */
28987 field_addr.sub_location = plocation_elem_new(0);
28988#endif /* FREECIV_JSON_CONNECTION */
28989
28990 for (i = 0; i < real_packet->count; i++) {
28991#ifdef FREECIV_JSON_CONNECTION
28992 /* Next array element. */
28993 field_addr.sub_location->number = i;
28994#endif /* FREECIV_JSON_CONNECTION */
28995
28996 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
28997 }
28998
28999#ifdef FREECIV_JSON_CONNECTION
29000 /* Exit array. */
29001 FC_FREE(field_addr.sub_location);
29002#endif /* FREECIV_JSON_CONNECTION */
29003 }
29004 if (e) {
29005 log_packet_detailed("'multipliers' field error detected");
29006 }
29007 }
29008
29009 *old = *real_packet;
29010#endif /* FREECIV_DELTA_PROTOCOL */
29011#ifndef FREECIV_DELTA_PROTOCOL
29012#ifdef FREECIV_JSON_CONNECTION
29013 field_addr.name = "count";
29014#endif /* FREECIV_JSON_CONNECTION */
29015 e = 0;
29016 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
29017 if (e) {
29018 log_packet_detailed("'count' field error detected");
29019 }
29020#ifdef FREECIV_JSON_CONNECTION
29021 field_addr.name = "multipliers";
29022#endif /* FREECIV_JSON_CONNECTION */
29023 e = 0;
29024 {
29025 int i;
29026
29027#ifdef FREECIV_JSON_CONNECTION
29028 /* Create the array. */
29029 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
29030
29031 /* Enter the array. */
29032 field_addr.sub_location = plocation_elem_new(0);
29033#endif /* FREECIV_JSON_CONNECTION */
29034
29035 for (i = 0; i < real_packet->count; i++) {
29036#ifdef FREECIV_JSON_CONNECTION
29037 /* Next array element. */
29038 field_addr.sub_location->number = i;
29039#endif /* FREECIV_JSON_CONNECTION */
29040
29041 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
29042 }
29043
29044#ifdef FREECIV_JSON_CONNECTION
29045 /* Exit array. */
29046 FC_FREE(field_addr.sub_location);
29047#endif /* FREECIV_JSON_CONNECTION */
29048 }
29049 if (e) {
29050 log_packet_detailed("'multipliers' field error detected");
29051 }
29052
29053#endif
29055}
29056
29058{
29059 if (!pc->used) {
29060 log_error("WARNING: trying to send data to the closed connection %s",
29062 return -1;
29063 }
29064 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet != NULL, -1,
29065 "Handler for PACKET_PLAYER_MULTIPLIER not installed");
29066 return pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet(pc, packet);
29067}
29068
29069#ifdef FREECIV_DELTA_PROTOCOL
29071{
29072 const struct packet_research_info *key = (const struct packet_research_info *) vkey;
29073 genhash_val_t result = 0;
29074
29075 result += key->id;
29076
29077 result &= 0xFFFFFFFF;
29078 return result;
29079}
29080
29081static bool cmp_packet_research_info_100(const void *vkey1, const void *vkey2)
29082{
29083 const struct packet_research_info *old = (const struct packet_research_info *) vkey1;
29084 const struct packet_research_info *real_packet = (const struct packet_research_info *) vkey2;
29085 bool differ;
29086
29087 differ = (old->id != real_packet->id);
29088
29089 return !differ;
29090}
29092#endif /* FREECIV_DELTA_PROTOCOL */
29093
29095{
29096#ifdef FREECIV_DELTA_PROTOCOL
29098 struct packet_research_info *old;
29099 struct genhash **hash = pc->phs.received + PACKET_RESEARCH_INFO;
29100#endif /* FREECIV_DELTA_PROTOCOL */
29102#ifdef FREECIV_JSON_CONNECTION
29103 struct plocation field_addr;
29104 {
29108 }
29109#endif /* FREECIV_JSON_CONNECTION */
29110
29111#ifdef FREECIV_DELTA_PROTOCOL
29112#ifdef FREECIV_JSON_CONNECTION
29113 field_addr.name = "fields";
29114#endif /* FREECIV_JSON_CONNECTION */
29115 DIO_BV_GET(&din, &field_addr, fields);
29116#ifdef FREECIV_JSON_CONNECTION
29117 field_addr.name = "id";
29118#endif /* FREECIV_JSON_CONNECTION */
29119 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
29121 }
29122
29123#else /* FREECIV_DELTA_PROTOCOL */
29124#ifdef FREECIV_JSON_CONNECTION
29125 field_addr.name = "id";
29126#endif /* FREECIV_JSON_CONNECTION */
29127 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
29129 }
29130#ifdef FREECIV_JSON_CONNECTION
29131 field_addr.name = "techs_researched";
29132#endif /* FREECIV_JSON_CONNECTION */
29133 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
29134 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
29135 }
29136#ifdef FREECIV_JSON_CONNECTION
29137 field_addr.name = "future_tech";
29138#endif /* FREECIV_JSON_CONNECTION */
29139 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
29140 RECEIVE_PACKET_FIELD_ERROR(future_tech);
29141 }
29142#ifdef FREECIV_JSON_CONNECTION
29143 field_addr.name = "researching";
29144#endif /* FREECIV_JSON_CONNECTION */
29145 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
29146 RECEIVE_PACKET_FIELD_ERROR(researching);
29147 }
29148#ifdef FREECIV_JSON_CONNECTION
29149 field_addr.name = "researching_cost";
29150#endif /* FREECIV_JSON_CONNECTION */
29151 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
29152 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
29153 }
29154#ifdef FREECIV_JSON_CONNECTION
29155 field_addr.name = "bulbs_researched";
29156#endif /* FREECIV_JSON_CONNECTION */
29157 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
29158 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
29159 }
29160#ifdef FREECIV_JSON_CONNECTION
29161 field_addr.name = "tech_goal";
29162#endif /* FREECIV_JSON_CONNECTION */
29163 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
29164 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
29165 }
29166#ifdef FREECIV_JSON_CONNECTION
29167 field_addr.name = "total_bulbs_prod";
29168#endif /* FREECIV_JSON_CONNECTION */
29169 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
29170 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
29171 }
29172#ifdef FREECIV_JSON_CONNECTION
29173 field_addr.name = "inventions";
29174#endif /* FREECIV_JSON_CONNECTION */
29175 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
29176 RECEIVE_PACKET_FIELD_ERROR(inventions);
29177 }
29178#endif
29179 log_packet_detailed("packet_research_info_100: got info about (%d)",
29180 real_packet->id);
29181
29182#ifdef FREECIV_DELTA_PROTOCOL
29183 if (NULL == *hash) {
29185 NULL, NULL, NULL, free);
29186 }
29187
29188 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29189 *real_packet = *old;
29190 } else {
29191 int id;
29192
29193 id = real_packet->id;
29194
29195 log_packet_detailed(" no old info");
29196 memset(real_packet, 0, sizeof(*real_packet));
29197
29198 real_packet->id = id;
29199 }
29200
29201 if (BV_ISSET(fields, 0)) {
29202 log_packet_detailed(" got field 'techs_researched'");
29203#ifdef FREECIV_JSON_CONNECTION
29204 field_addr.name = "techs_researched";
29205#endif /* FREECIV_JSON_CONNECTION */
29206 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
29207 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
29208 }
29209 }
29210 if (BV_ISSET(fields, 1)) {
29211 log_packet_detailed(" got field 'future_tech'");
29212#ifdef FREECIV_JSON_CONNECTION
29213 field_addr.name = "future_tech";
29214#endif /* FREECIV_JSON_CONNECTION */
29215 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
29216 RECEIVE_PACKET_FIELD_ERROR(future_tech);
29217 }
29218 }
29219 if (BV_ISSET(fields, 2)) {
29220 log_packet_detailed(" got field 'researching'");
29221#ifdef FREECIV_JSON_CONNECTION
29222 field_addr.name = "researching";
29223#endif /* FREECIV_JSON_CONNECTION */
29224 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
29225 RECEIVE_PACKET_FIELD_ERROR(researching);
29226 }
29227 }
29228 if (BV_ISSET(fields, 3)) {
29229 log_packet_detailed(" got field 'researching_cost'");
29230#ifdef FREECIV_JSON_CONNECTION
29231 field_addr.name = "researching_cost";
29232#endif /* FREECIV_JSON_CONNECTION */
29233 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
29234 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
29235 }
29236 }
29237 if (BV_ISSET(fields, 4)) {
29238 log_packet_detailed(" got field 'bulbs_researched'");
29239#ifdef FREECIV_JSON_CONNECTION
29240 field_addr.name = "bulbs_researched";
29241#endif /* FREECIV_JSON_CONNECTION */
29242 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
29243 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
29244 }
29245 }
29246 if (BV_ISSET(fields, 5)) {
29247 log_packet_detailed(" got field 'tech_goal'");
29248#ifdef FREECIV_JSON_CONNECTION
29249 field_addr.name = "tech_goal";
29250#endif /* FREECIV_JSON_CONNECTION */
29251 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
29252 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
29253 }
29254 }
29255 if (BV_ISSET(fields, 6)) {
29256 log_packet_detailed(" got field 'total_bulbs_prod'");
29257#ifdef FREECIV_JSON_CONNECTION
29258 field_addr.name = "total_bulbs_prod";
29259#endif /* FREECIV_JSON_CONNECTION */
29260 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
29261 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
29262 }
29263 }
29264 if (BV_ISSET(fields, 7)) {
29265 log_packet_detailed(" got field 'inventions'");
29266#ifdef FREECIV_JSON_CONNECTION
29267 field_addr.name = "inventions";
29268#endif /* FREECIV_JSON_CONNECTION */
29269 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
29270 RECEIVE_PACKET_FIELD_ERROR(inventions);
29271 }
29272 }
29273
29274 if (NULL == old) {
29275 old = fc_malloc(sizeof(*old));
29276 *old = *real_packet;
29277 genhash_insert(*hash, old, old);
29278 } else {
29279 *old = *real_packet;
29280 }
29281
29282#endif /* FREECIV_DELTA_PROTOCOL */
29284}
29285
29286static int send_packet_research_info_100(struct connection *pc, const struct packet_research_info *packet)
29287{
29288 const struct packet_research_info *real_packet = packet;
29289 int e;
29290#ifdef FREECIV_DELTA_PROTOCOL
29292 struct packet_research_info *old;
29293 bool differ;
29294 struct genhash **hash = pc->phs.sent + PACKET_RESEARCH_INFO;
29295 int different = 0;
29296#endif /* FREECIV_DELTA_PROTOCOL */
29298#ifdef FREECIV_JSON_CONNECTION
29299 struct plocation field_addr;
29300 {
29304 }
29305#endif /* FREECIV_JSON_CONNECTION */
29306
29307 log_packet_detailed("packet_research_info_100: sending info about (%d)",
29308 real_packet->id);
29309
29310#ifdef FREECIV_DELTA_PROTOCOL
29311 if (NULL == *hash) {
29313 NULL, NULL, NULL, free);
29314 }
29315 BV_CLR_ALL(fields);
29316
29317 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29318 old = fc_malloc(sizeof(*old));
29319 *old = *real_packet;
29320 genhash_insert(*hash, old, old);
29321 memset(old, 0, sizeof(*old));
29322 different = 1; /* Force to send. */
29323 }
29324 differ = (old->techs_researched != real_packet->techs_researched);
29325 if (differ) {
29326 different++;
29327 BV_SET(fields, 0);
29328 }
29329
29330 differ = (old->future_tech != real_packet->future_tech);
29331 if (differ) {
29332 different++;
29333 BV_SET(fields, 1);
29334 }
29335
29336 differ = (old->researching != real_packet->researching);
29337 if (differ) {
29338 different++;
29339 BV_SET(fields, 2);
29340 }
29341
29342 differ = (old->researching_cost != real_packet->researching_cost);
29343 if (differ) {
29344 different++;
29345 BV_SET(fields, 3);
29346 }
29347
29348 differ = (old->bulbs_researched != real_packet->bulbs_researched);
29349 if (differ) {
29350 different++;
29351 BV_SET(fields, 4);
29352 }
29353
29354 differ = (old->tech_goal != real_packet->tech_goal);
29355 if (differ) {
29356 different++;
29357 BV_SET(fields, 5);
29358 }
29359
29360 differ = (old->total_bulbs_prod != real_packet->total_bulbs_prod);
29361 if (differ) {
29362 different++;
29363 BV_SET(fields, 6);
29364 }
29365
29366 differ = (strcmp(old->inventions, real_packet->inventions) != 0);
29367 if (differ) {
29368 different++;
29369 BV_SET(fields, 7);
29370 }
29371
29372 if (different == 0) {
29373 log_packet_detailed(" no change -> discard");
29375 }
29376
29377#ifdef FREECIV_JSON_CONNECTION
29378 field_addr.name = "fields";
29379#endif /* FREECIV_JSON_CONNECTION */
29380 e = 0;
29381 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29382 if (e) {
29383 log_packet_detailed("fields bitvector error detected");
29384 }
29385#ifdef FREECIV_JSON_CONNECTION
29386 field_addr.name = "id";
29387#endif /* FREECIV_JSON_CONNECTION */
29388 e = 0;
29389 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
29390 if (e) {
29391 log_packet_detailed("'id' field error detected");
29392 }
29393
29394 if (BV_ISSET(fields, 0)) {
29395 log_packet_detailed(" field 'techs_researched' has changed");
29396#ifdef FREECIV_JSON_CONNECTION
29397 field_addr.name = "techs_researched";
29398#endif /* FREECIV_JSON_CONNECTION */
29399 e = 0;
29400 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
29401 if (e) {
29402 log_packet_detailed("'techs_researched' field error detected");
29403 }
29404 }
29405 if (BV_ISSET(fields, 1)) {
29406 log_packet_detailed(" field 'future_tech' has changed");
29407#ifdef FREECIV_JSON_CONNECTION
29408 field_addr.name = "future_tech";
29409#endif /* FREECIV_JSON_CONNECTION */
29410 e = 0;
29411 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
29412 if (e) {
29413 log_packet_detailed("'future_tech' field error detected");
29414 }
29415 }
29416 if (BV_ISSET(fields, 2)) {
29417 log_packet_detailed(" field 'researching' has changed");
29418#ifdef FREECIV_JSON_CONNECTION
29419 field_addr.name = "researching";
29420#endif /* FREECIV_JSON_CONNECTION */
29421 e = 0;
29422 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
29423 if (e) {
29424 log_packet_detailed("'researching' field error detected");
29425 }
29426 }
29427 if (BV_ISSET(fields, 3)) {
29428 log_packet_detailed(" field 'researching_cost' has changed");
29429#ifdef FREECIV_JSON_CONNECTION
29430 field_addr.name = "researching_cost";
29431#endif /* FREECIV_JSON_CONNECTION */
29432 e = 0;
29433 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
29434 if (e) {
29435 log_packet_detailed("'researching_cost' field error detected");
29436 }
29437 }
29438 if (BV_ISSET(fields, 4)) {
29439 log_packet_detailed(" field 'bulbs_researched' has changed");
29440#ifdef FREECIV_JSON_CONNECTION
29441 field_addr.name = "bulbs_researched";
29442#endif /* FREECIV_JSON_CONNECTION */
29443 e = 0;
29444 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
29445 if (e) {
29446 log_packet_detailed("'bulbs_researched' field error detected");
29447 }
29448 }
29449 if (BV_ISSET(fields, 5)) {
29450 log_packet_detailed(" field 'tech_goal' has changed");
29451#ifdef FREECIV_JSON_CONNECTION
29452 field_addr.name = "tech_goal";
29453#endif /* FREECIV_JSON_CONNECTION */
29454 e = 0;
29455 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
29456 if (e) {
29457 log_packet_detailed("'tech_goal' field error detected");
29458 }
29459 }
29460 if (BV_ISSET(fields, 6)) {
29461 log_packet_detailed(" field 'total_bulbs_prod' has changed");
29462#ifdef FREECIV_JSON_CONNECTION
29463 field_addr.name = "total_bulbs_prod";
29464#endif /* FREECIV_JSON_CONNECTION */
29465 e = 0;
29466 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
29467 if (e) {
29468 log_packet_detailed("'total_bulbs_prod' field error detected");
29469 }
29470 }
29471 if (BV_ISSET(fields, 7)) {
29472 log_packet_detailed(" field 'inventions' has changed");
29473#ifdef FREECIV_JSON_CONNECTION
29474 field_addr.name = "inventions";
29475#endif /* FREECIV_JSON_CONNECTION */
29476 e = 0;
29477 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
29478 if (e) {
29479 log_packet_detailed("'inventions' field error detected");
29480 }
29481 }
29482
29483 *old = *real_packet;
29484#endif /* FREECIV_DELTA_PROTOCOL */
29485#ifndef FREECIV_DELTA_PROTOCOL
29486#ifdef FREECIV_JSON_CONNECTION
29487 field_addr.name = "id";
29488#endif /* FREECIV_JSON_CONNECTION */
29489 e = 0;
29490 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
29491 if (e) {
29492 log_packet_detailed("'id' field error detected");
29493 }
29494#ifdef FREECIV_JSON_CONNECTION
29495 field_addr.name = "techs_researched";
29496#endif /* FREECIV_JSON_CONNECTION */
29497 e = 0;
29498 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
29499 if (e) {
29500 log_packet_detailed("'techs_researched' field error detected");
29501 }
29502#ifdef FREECIV_JSON_CONNECTION
29503 field_addr.name = "future_tech";
29504#endif /* FREECIV_JSON_CONNECTION */
29505 e = 0;
29506 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
29507 if (e) {
29508 log_packet_detailed("'future_tech' field error detected");
29509 }
29510#ifdef FREECIV_JSON_CONNECTION
29511 field_addr.name = "researching";
29512#endif /* FREECIV_JSON_CONNECTION */
29513 e = 0;
29514 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
29515 if (e) {
29516 log_packet_detailed("'researching' field error detected");
29517 }
29518#ifdef FREECIV_JSON_CONNECTION
29519 field_addr.name = "researching_cost";
29520#endif /* FREECIV_JSON_CONNECTION */
29521 e = 0;
29522 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
29523 if (e) {
29524 log_packet_detailed("'researching_cost' field error detected");
29525 }
29526#ifdef FREECIV_JSON_CONNECTION
29527 field_addr.name = "bulbs_researched";
29528#endif /* FREECIV_JSON_CONNECTION */
29529 e = 0;
29530 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
29531 if (e) {
29532 log_packet_detailed("'bulbs_researched' field error detected");
29533 }
29534#ifdef FREECIV_JSON_CONNECTION
29535 field_addr.name = "tech_goal";
29536#endif /* FREECIV_JSON_CONNECTION */
29537 e = 0;
29538 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
29539 if (e) {
29540 log_packet_detailed("'tech_goal' field error detected");
29541 }
29542#ifdef FREECIV_JSON_CONNECTION
29543 field_addr.name = "total_bulbs_prod";
29544#endif /* FREECIV_JSON_CONNECTION */
29545 e = 0;
29546 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
29547 if (e) {
29548 log_packet_detailed("'total_bulbs_prod' field error detected");
29549 }
29550#ifdef FREECIV_JSON_CONNECTION
29551 field_addr.name = "inventions";
29552#endif /* FREECIV_JSON_CONNECTION */
29553 e = 0;
29554 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
29555 if (e) {
29556 log_packet_detailed("'inventions' field error detected");
29557 }
29558
29559#endif
29561}
29562
29564{
29565 if (!pc->used) {
29566 log_error("WARNING: trying to send data to the closed connection %s",
29568 return -1;
29569 }
29570 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet != NULL, -1,
29571 "Handler for PACKET_RESEARCH_INFO not installed");
29572 return pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet(pc, packet);
29573}
29574
29575void lsend_packet_research_info(struct conn_list *dest, const struct packet_research_info *packet)
29576{
29577 conn_list_iterate(dest, pconn) {
29580}
29581
29582#ifdef FREECIV_DELTA_PROTOCOL
29583#define hash_packet_unknown_research_100 hash_const
29584
29585#define cmp_packet_unknown_research_100 cmp_const
29586
29588#endif /* FREECIV_DELTA_PROTOCOL */
29589
29591{
29592#ifdef FREECIV_DELTA_PROTOCOL
29594 struct packet_unknown_research *old;
29595 struct genhash **hash = pc->phs.received + PACKET_UNKNOWN_RESEARCH;
29596#endif /* FREECIV_DELTA_PROTOCOL */
29598#ifdef FREECIV_JSON_CONNECTION
29599 struct plocation field_addr;
29600 {
29604 }
29605#endif /* FREECIV_JSON_CONNECTION */
29606
29607#ifdef FREECIV_DELTA_PROTOCOL
29608#ifdef FREECIV_JSON_CONNECTION
29609 field_addr.name = "fields";
29610#endif /* FREECIV_JSON_CONNECTION */
29611 DIO_BV_GET(&din, &field_addr, fields);
29612
29613#else /* FREECIV_DELTA_PROTOCOL */
29614#ifdef FREECIV_JSON_CONNECTION
29615 field_addr.name = "id";
29616#endif /* FREECIV_JSON_CONNECTION */
29617 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
29619 }
29620#endif
29621 log_packet_detailed("packet_unknown_research_100: got info about ()");
29622
29623#ifdef FREECIV_DELTA_PROTOCOL
29624 if (NULL == *hash) {
29626 NULL, NULL, NULL, free);
29627 }
29628
29629 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29630 *real_packet = *old;
29631 } else {
29632 log_packet_detailed(" no old info");
29633 memset(real_packet, 0, sizeof(*real_packet));
29634 }
29635
29636 if (BV_ISSET(fields, 0)) {
29637 log_packet_detailed(" got field 'id'");
29638#ifdef FREECIV_JSON_CONNECTION
29639 field_addr.name = "id";
29640#endif /* FREECIV_JSON_CONNECTION */
29641 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
29643 }
29644 }
29645
29646 if (NULL == old) {
29647 old = fc_malloc(sizeof(*old));
29648 *old = *real_packet;
29649 genhash_insert(*hash, old, old);
29650 } else {
29651 *old = *real_packet;
29652 }
29653
29654 hash = pc->phs.received + PACKET_RESEARCH_INFO;
29655 if (NULL != *hash) {
29657 }
29658
29659#endif /* FREECIV_DELTA_PROTOCOL */
29661}
29662
29664{
29665 const struct packet_unknown_research *real_packet = packet;
29666 int e;
29667#ifdef FREECIV_DELTA_PROTOCOL
29669 struct packet_unknown_research *old;
29670 bool differ;
29671 struct genhash **hash = pc->phs.sent + PACKET_UNKNOWN_RESEARCH;
29672 int different = 0;
29673#endif /* FREECIV_DELTA_PROTOCOL */
29675#ifdef FREECIV_JSON_CONNECTION
29676 struct plocation field_addr;
29677 {
29681 }
29682#endif /* FREECIV_JSON_CONNECTION */
29683
29684 log_packet_detailed("packet_unknown_research_100: sending info about ()");
29685
29686#ifdef FREECIV_DELTA_PROTOCOL
29687 if (NULL == *hash) {
29689 NULL, NULL, NULL, free);
29690 }
29691 BV_CLR_ALL(fields);
29692
29693 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29694 old = fc_malloc(sizeof(*old));
29695 *old = *real_packet;
29696 genhash_insert(*hash, old, old);
29697 memset(old, 0, sizeof(*old));
29698 different = 1; /* Force to send. */
29699 }
29700 differ = (old->id != real_packet->id);
29701 if (differ) {
29702 different++;
29703 BV_SET(fields, 0);
29704 }
29705
29706 if (different == 0) {
29707 log_packet_detailed(" no change -> discard");
29709 }
29710
29711#ifdef FREECIV_JSON_CONNECTION
29712 field_addr.name = "fields";
29713#endif /* FREECIV_JSON_CONNECTION */
29714 e = 0;
29715 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29716 if (e) {
29717 log_packet_detailed("fields bitvector error detected");
29718 }
29719
29720 if (BV_ISSET(fields, 0)) {
29721 log_packet_detailed(" field 'id' has changed");
29722#ifdef FREECIV_JSON_CONNECTION
29723 field_addr.name = "id";
29724#endif /* FREECIV_JSON_CONNECTION */
29725 e = 0;
29726 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
29727 if (e) {
29728 log_packet_detailed("'id' field error detected");
29729 }
29730 }
29731
29732 *old = *real_packet;
29733
29734 hash = pc->phs.sent + PACKET_RESEARCH_INFO;
29735 if (NULL != *hash) {
29737 }
29738#endif /* FREECIV_DELTA_PROTOCOL */
29739#ifndef FREECIV_DELTA_PROTOCOL
29740#ifdef FREECIV_JSON_CONNECTION
29741 field_addr.name = "id";
29742#endif /* FREECIV_JSON_CONNECTION */
29743 e = 0;
29744 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
29745 if (e) {
29746 log_packet_detailed("'id' field error detected");
29747 }
29748
29749#endif
29751}
29752
29754{
29755 if (!pc->used) {
29756 log_error("WARNING: trying to send data to the closed connection %s",
29758 return -1;
29759 }
29760 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet != NULL, -1,
29761 "Handler for PACKET_UNKNOWN_RESEARCH not installed");
29762 return pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet(pc, packet);
29763}
29764
29765#ifdef FREECIV_DELTA_PROTOCOL
29766#define hash_packet_player_research_100 hash_const
29767
29768#define cmp_packet_player_research_100 cmp_const
29769
29771#endif /* FREECIV_DELTA_PROTOCOL */
29772
29774{
29775#ifdef FREECIV_DELTA_PROTOCOL
29777 struct packet_player_research *old;
29778 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RESEARCH;
29779#endif /* FREECIV_DELTA_PROTOCOL */
29781#ifdef FREECIV_JSON_CONNECTION
29782 struct plocation field_addr;
29783 {
29787 }
29788#endif /* FREECIV_JSON_CONNECTION */
29789
29790#ifdef FREECIV_DELTA_PROTOCOL
29791#ifdef FREECIV_JSON_CONNECTION
29792 field_addr.name = "fields";
29793#endif /* FREECIV_JSON_CONNECTION */
29794 DIO_BV_GET(&din, &field_addr, fields);
29795
29796#else /* FREECIV_DELTA_PROTOCOL */
29797#ifdef FREECIV_JSON_CONNECTION
29798 field_addr.name = "tech";
29799#endif /* FREECIV_JSON_CONNECTION */
29800 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
29802 }
29803#endif
29804 log_packet_detailed("packet_player_research_100: got info about ()");
29805
29806#ifdef FREECIV_DELTA_PROTOCOL
29807 if (NULL == *hash) {
29809 NULL, NULL, NULL, free);
29810 }
29811
29812 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29813 *real_packet = *old;
29814 } else {
29815 log_packet_detailed(" no old info");
29816 memset(real_packet, 0, sizeof(*real_packet));
29817 }
29818
29819 if (BV_ISSET(fields, 0)) {
29820 log_packet_detailed(" got field 'tech'");
29821#ifdef FREECIV_JSON_CONNECTION
29822 field_addr.name = "tech";
29823#endif /* FREECIV_JSON_CONNECTION */
29824 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
29826 }
29827 }
29828
29829 if (NULL == old) {
29830 old = fc_malloc(sizeof(*old));
29831 *old = *real_packet;
29832 genhash_insert(*hash, old, old);
29833 } else {
29834 *old = *real_packet;
29835 }
29836
29837#endif /* FREECIV_DELTA_PROTOCOL */
29839}
29840
29842{
29843 const struct packet_player_research *real_packet = packet;
29844 int e;
29845#ifdef FREECIV_DELTA_PROTOCOL
29847 struct packet_player_research *old;
29848 bool differ;
29849 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RESEARCH;
29850#endif /* FREECIV_DELTA_PROTOCOL */
29852#ifdef FREECIV_JSON_CONNECTION
29853 struct plocation field_addr;
29854 {
29858 }
29859#endif /* FREECIV_JSON_CONNECTION */
29860
29861 log_packet_detailed("packet_player_research_100: sending info about ()");
29862
29863#ifdef FREECIV_DELTA_PROTOCOL
29864 if (NULL == *hash) {
29866 NULL, NULL, NULL, free);
29867 }
29868 BV_CLR_ALL(fields);
29869
29870 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29871 old = fc_malloc(sizeof(*old));
29872 *old = *real_packet;
29873 genhash_insert(*hash, old, old);
29874 memset(old, 0, sizeof(*old));
29875 }
29876 differ = (old->tech != real_packet->tech);
29877 if (differ) {
29878 BV_SET(fields, 0);
29879 }
29880
29881
29882#ifdef FREECIV_JSON_CONNECTION
29883 field_addr.name = "fields";
29884#endif /* FREECIV_JSON_CONNECTION */
29885 e = 0;
29886 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29887 if (e) {
29888 log_packet_detailed("fields bitvector error detected");
29889 }
29890
29891 if (BV_ISSET(fields, 0)) {
29892 log_packet_detailed(" field 'tech' has changed");
29893#ifdef FREECIV_JSON_CONNECTION
29894 field_addr.name = "tech";
29895#endif /* FREECIV_JSON_CONNECTION */
29896 e = 0;
29897 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
29898 if (e) {
29899 log_packet_detailed("'tech' field error detected");
29900 }
29901 }
29902
29903 *old = *real_packet;
29904#endif /* FREECIV_DELTA_PROTOCOL */
29905#ifndef FREECIV_DELTA_PROTOCOL
29906#ifdef FREECIV_JSON_CONNECTION
29907 field_addr.name = "tech";
29908#endif /* FREECIV_JSON_CONNECTION */
29909 e = 0;
29910 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
29911 if (e) {
29912 log_packet_detailed("'tech' field error detected");
29913 }
29914
29915#endif
29917}
29918
29920{
29921 if (!pc->used) {
29922 log_error("WARNING: trying to send data to the closed connection %s",
29924 return -1;
29925 }
29926 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet != NULL, -1,
29927 "Handler for PACKET_PLAYER_RESEARCH not installed");
29928 return pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet(pc, packet);
29929}
29930
29932{
29933 struct packet_player_research packet, *real_packet = &packet;
29934
29936
29938}
29939
29940#ifdef FREECIV_DELTA_PROTOCOL
29941#define hash_packet_player_tech_goal_100 hash_const
29942
29943#define cmp_packet_player_tech_goal_100 cmp_const
29944
29946#endif /* FREECIV_DELTA_PROTOCOL */
29947
29949{
29950#ifdef FREECIV_DELTA_PROTOCOL
29952 struct packet_player_tech_goal *old;
29953 struct genhash **hash = pc->phs.received + PACKET_PLAYER_TECH_GOAL;
29954#endif /* FREECIV_DELTA_PROTOCOL */
29956#ifdef FREECIV_JSON_CONNECTION
29957 struct plocation field_addr;
29958 {
29962 }
29963#endif /* FREECIV_JSON_CONNECTION */
29964
29965#ifdef FREECIV_DELTA_PROTOCOL
29966#ifdef FREECIV_JSON_CONNECTION
29967 field_addr.name = "fields";
29968#endif /* FREECIV_JSON_CONNECTION */
29969 DIO_BV_GET(&din, &field_addr, fields);
29970
29971#else /* FREECIV_DELTA_PROTOCOL */
29972#ifdef FREECIV_JSON_CONNECTION
29973 field_addr.name = "tech";
29974#endif /* FREECIV_JSON_CONNECTION */
29975 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
29977 }
29978#endif
29979 log_packet_detailed("packet_player_tech_goal_100: got info about ()");
29980
29981#ifdef FREECIV_DELTA_PROTOCOL
29982 if (NULL == *hash) {
29984 NULL, NULL, NULL, free);
29985 }
29986
29987 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
29988 *real_packet = *old;
29989 } else {
29990 log_packet_detailed(" no old info");
29991 memset(real_packet, 0, sizeof(*real_packet));
29992 }
29993
29994 if (BV_ISSET(fields, 0)) {
29995 log_packet_detailed(" got field 'tech'");
29996#ifdef FREECIV_JSON_CONNECTION
29997 field_addr.name = "tech";
29998#endif /* FREECIV_JSON_CONNECTION */
29999 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
30001 }
30002 }
30003
30004 if (NULL == old) {
30005 old = fc_malloc(sizeof(*old));
30006 *old = *real_packet;
30007 genhash_insert(*hash, old, old);
30008 } else {
30009 *old = *real_packet;
30010 }
30011
30012#endif /* FREECIV_DELTA_PROTOCOL */
30014}
30015
30017{
30018 const struct packet_player_tech_goal *real_packet = packet;
30019 int e;
30020#ifdef FREECIV_DELTA_PROTOCOL
30022 struct packet_player_tech_goal *old;
30023 bool differ;
30024 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_TECH_GOAL;
30025#endif /* FREECIV_DELTA_PROTOCOL */
30027#ifdef FREECIV_JSON_CONNECTION
30028 struct plocation field_addr;
30029 {
30033 }
30034#endif /* FREECIV_JSON_CONNECTION */
30035
30036 log_packet_detailed("packet_player_tech_goal_100: sending info about ()");
30037
30038#ifdef FREECIV_DELTA_PROTOCOL
30039 if (NULL == *hash) {
30041 NULL, NULL, NULL, free);
30042 }
30043 BV_CLR_ALL(fields);
30044
30045 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30046 old = fc_malloc(sizeof(*old));
30047 *old = *real_packet;
30048 genhash_insert(*hash, old, old);
30049 memset(old, 0, sizeof(*old));
30050 }
30051 differ = (old->tech != real_packet->tech);
30052 if (differ) {
30053 BV_SET(fields, 0);
30054 }
30055
30056
30057#ifdef FREECIV_JSON_CONNECTION
30058 field_addr.name = "fields";
30059#endif /* FREECIV_JSON_CONNECTION */
30060 e = 0;
30061 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30062 if (e) {
30063 log_packet_detailed("fields bitvector error detected");
30064 }
30065
30066 if (BV_ISSET(fields, 0)) {
30067 log_packet_detailed(" field 'tech' has changed");
30068#ifdef FREECIV_JSON_CONNECTION
30069 field_addr.name = "tech";
30070#endif /* FREECIV_JSON_CONNECTION */
30071 e = 0;
30072 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
30073 if (e) {
30074 log_packet_detailed("'tech' field error detected");
30075 }
30076 }
30077
30078 *old = *real_packet;
30079#endif /* FREECIV_DELTA_PROTOCOL */
30080#ifndef FREECIV_DELTA_PROTOCOL
30081#ifdef FREECIV_JSON_CONNECTION
30082 field_addr.name = "tech";
30083#endif /* FREECIV_JSON_CONNECTION */
30084 e = 0;
30085 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
30086 if (e) {
30087 log_packet_detailed("'tech' field error detected");
30088 }
30089
30090#endif
30092}
30093
30095{
30096 if (!pc->used) {
30097 log_error("WARNING: trying to send data to the closed connection %s",
30099 return -1;
30100 }
30101 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet != NULL, -1,
30102 "Handler for PACKET_PLAYER_TECH_GOAL not installed");
30103 return pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet(pc, packet);
30104}
30105
30107{
30108 struct packet_player_tech_goal packet, *real_packet = &packet;
30109
30111
30113}
30114
30115#ifdef FREECIV_DELTA_PROTOCOL
30116#define hash_packet_unit_remove_100 hash_const
30117
30118#define cmp_packet_unit_remove_100 cmp_const
30119
30121#endif /* FREECIV_DELTA_PROTOCOL */
30122
30124{
30125#ifdef FREECIV_DELTA_PROTOCOL
30127 struct packet_unit_remove *old;
30128 struct genhash **hash = pc->phs.received + PACKET_UNIT_REMOVE;
30129#endif /* FREECIV_DELTA_PROTOCOL */
30131#ifdef FREECIV_JSON_CONNECTION
30132 struct plocation field_addr;
30133 {
30137 }
30138#endif /* FREECIV_JSON_CONNECTION */
30139
30140#ifdef FREECIV_DELTA_PROTOCOL
30141#ifdef FREECIV_JSON_CONNECTION
30142 field_addr.name = "fields";
30143#endif /* FREECIV_JSON_CONNECTION */
30144 DIO_BV_GET(&din, &field_addr, fields);
30145
30146#else /* FREECIV_DELTA_PROTOCOL */
30147#ifdef FREECIV_JSON_CONNECTION
30148 field_addr.name = "unit_id";
30149#endif /* FREECIV_JSON_CONNECTION */
30150 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
30152 }
30153#endif
30154 log_packet_detailed("packet_unit_remove_100: got info about ()");
30155
30156#ifdef FREECIV_DELTA_PROTOCOL
30157 if (NULL == *hash) {
30159 NULL, NULL, NULL, free);
30160 }
30161
30162 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30163 *real_packet = *old;
30164 } else {
30165 log_packet_detailed(" no old info");
30166 memset(real_packet, 0, sizeof(*real_packet));
30167 }
30168
30169 if (BV_ISSET(fields, 0)) {
30170 log_packet_detailed(" got field 'unit_id'");
30171#ifdef FREECIV_JSON_CONNECTION
30172 field_addr.name = "unit_id";
30173#endif /* FREECIV_JSON_CONNECTION */
30174 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
30176 }
30177 }
30178
30179 if (NULL == old) {
30180 old = fc_malloc(sizeof(*old));
30181 *old = *real_packet;
30182 genhash_insert(*hash, old, old);
30183 } else {
30184 *old = *real_packet;
30185 }
30186
30187 hash = pc->phs.received + PACKET_UNIT_INFO;
30188 if (NULL != *hash) {
30190 }
30191
30192 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
30193 if (NULL != *hash) {
30195 }
30196
30197#endif /* FREECIV_DELTA_PROTOCOL */
30199}
30200
30201static int send_packet_unit_remove_100(struct connection *pc, const struct packet_unit_remove *packet)
30202{
30203 const struct packet_unit_remove *real_packet = packet;
30204 int e;
30205#ifdef FREECIV_DELTA_PROTOCOL
30207 struct packet_unit_remove *old;
30208 bool differ;
30209 struct genhash **hash = pc->phs.sent + PACKET_UNIT_REMOVE;
30210#endif /* FREECIV_DELTA_PROTOCOL */
30212#ifdef FREECIV_JSON_CONNECTION
30213 struct plocation field_addr;
30214 {
30218 }
30219#endif /* FREECIV_JSON_CONNECTION */
30220
30221 log_packet_detailed("packet_unit_remove_100: sending info about ()");
30222
30223#ifdef FREECIV_DELTA_PROTOCOL
30224 if (NULL == *hash) {
30226 NULL, NULL, NULL, free);
30227 }
30228 BV_CLR_ALL(fields);
30229
30230 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30231 old = fc_malloc(sizeof(*old));
30232 *old = *real_packet;
30233 genhash_insert(*hash, old, old);
30234 memset(old, 0, sizeof(*old));
30235 }
30236 differ = (old->unit_id != real_packet->unit_id);
30237 if (differ) {
30238 BV_SET(fields, 0);
30239 }
30240
30241
30242#ifdef FREECIV_JSON_CONNECTION
30243 field_addr.name = "fields";
30244#endif /* FREECIV_JSON_CONNECTION */
30245 e = 0;
30246 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30247 if (e) {
30248 log_packet_detailed("fields bitvector error detected");
30249 }
30250
30251 if (BV_ISSET(fields, 0)) {
30252 log_packet_detailed(" field 'unit_id' has changed");
30253#ifdef FREECIV_JSON_CONNECTION
30254 field_addr.name = "unit_id";
30255#endif /* FREECIV_JSON_CONNECTION */
30256 e = 0;
30257 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
30258 if (e) {
30259 log_packet_detailed("'unit_id' field error detected");
30260 }
30261 }
30262
30263 *old = *real_packet;
30264
30265 hash = pc->phs.sent + PACKET_UNIT_INFO;
30266 if (NULL != *hash) {
30268 }
30269
30270 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
30271 if (NULL != *hash) {
30273 }
30274#endif /* FREECIV_DELTA_PROTOCOL */
30275#ifndef FREECIV_DELTA_PROTOCOL
30276#ifdef FREECIV_JSON_CONNECTION
30277 field_addr.name = "unit_id";
30278#endif /* FREECIV_JSON_CONNECTION */
30279 e = 0;
30280 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
30281 if (e) {
30282 log_packet_detailed("'unit_id' field error detected");
30283 }
30284
30285#endif
30287}
30288
30290{
30291 if (!pc->used) {
30292 log_error("WARNING: trying to send data to the closed connection %s",
30294 return -1;
30295 }
30296 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet != NULL, -1,
30297 "Handler for PACKET_UNIT_REMOVE not installed");
30298 return pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet(pc, packet);
30299}
30300
30301void lsend_packet_unit_remove(struct conn_list *dest, const struct packet_unit_remove *packet)
30302{
30303 conn_list_iterate(dest, pconn) {
30306}
30307
30308int dsend_packet_unit_remove(struct connection *pc, int unit_id)
30309{
30310 struct packet_unit_remove packet, *real_packet = &packet;
30311
30313
30315}
30316
30318{
30319 struct packet_unit_remove packet, *real_packet = &packet;
30320
30322
30324}
30325
30326#ifdef FREECIV_DELTA_PROTOCOL
30328{
30329 const struct packet_unit_info *key = (const struct packet_unit_info *) vkey;
30330 genhash_val_t result = 0;
30331
30332 result += key->id;
30333
30334 result &= 0xFFFFFFFF;
30335 return result;
30336}
30337
30338static bool cmp_packet_unit_info_100(const void *vkey1, const void *vkey2)
30339{
30340 const struct packet_unit_info *old = (const struct packet_unit_info *) vkey1;
30341 const struct packet_unit_info *real_packet = (const struct packet_unit_info *) vkey2;
30342 bool differ;
30343
30344 differ = (old->id != real_packet->id);
30345
30346 return !differ;
30347}
30349#endif /* FREECIV_DELTA_PROTOCOL */
30350
30352{
30353#ifdef FREECIV_DELTA_PROTOCOL
30355 struct packet_unit_info *old;
30356 struct genhash **hash = pc->phs.received + PACKET_UNIT_INFO;
30357#endif /* FREECIV_DELTA_PROTOCOL */
30359#ifdef FREECIV_JSON_CONNECTION
30360 struct plocation field_addr;
30361 {
30365 }
30366#endif /* FREECIV_JSON_CONNECTION */
30367
30368#ifdef FREECIV_DELTA_PROTOCOL
30369#ifdef FREECIV_JSON_CONNECTION
30370 field_addr.name = "fields";
30371#endif /* FREECIV_JSON_CONNECTION */
30372 DIO_BV_GET(&din, &field_addr, fields);
30373#ifdef FREECIV_JSON_CONNECTION
30374 field_addr.name = "id";
30375#endif /* FREECIV_JSON_CONNECTION */
30376 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
30378 }
30379
30380#else /* FREECIV_DELTA_PROTOCOL */
30381#ifdef FREECIV_JSON_CONNECTION
30382 field_addr.name = "id";
30383#endif /* FREECIV_JSON_CONNECTION */
30384 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
30386 }
30387#ifdef FREECIV_JSON_CONNECTION
30388 field_addr.name = "owner";
30389#endif /* FREECIV_JSON_CONNECTION */
30390 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
30392 }
30393#ifdef FREECIV_JSON_CONNECTION
30394 field_addr.name = "nationality";
30395#endif /* FREECIV_JSON_CONNECTION */
30396 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nationality)) {
30397 RECEIVE_PACKET_FIELD_ERROR(nationality);
30398 }
30399#ifdef FREECIV_JSON_CONNECTION
30400 field_addr.name = "tile";
30401#endif /* FREECIV_JSON_CONNECTION */
30402 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
30404 }
30405#ifdef FREECIV_JSON_CONNECTION
30406 field_addr.name = "facing";
30407#endif /* FREECIV_JSON_CONNECTION */
30408 {
30409 int readin;
30410
30411 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
30413 }
30414 real_packet->facing = readin;
30415 }
30416#ifdef FREECIV_JSON_CONNECTION
30417 field_addr.name = "homecity";
30418#endif /* FREECIV_JSON_CONNECTION */
30419 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
30421 }
30422#ifdef FREECIV_JSON_CONNECTION
30423 field_addr.name = "upkeep";
30424#endif /* FREECIV_JSON_CONNECTION */
30425 {
30426 int i;
30427
30428#ifdef FREECIV_JSON_CONNECTION
30429 /* Enter array. */
30430 field_addr.sub_location = plocation_elem_new(0);
30431#endif /* FREECIV_JSON_CONNECTION */
30432
30433 for (i = 0; i < O_LAST; i++) {
30434#ifdef FREECIV_JSON_CONNECTION
30435 field_addr.sub_location->number = i;
30436#endif /* FREECIV_JSON_CONNECTION */
30437
30438 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
30440 }
30441 }
30442
30443#ifdef FREECIV_JSON_CONNECTION
30444 /* Exit array. */
30445 FC_FREE(field_addr.sub_location);
30446#endif /* FREECIV_JSON_CONNECTION */
30447 }
30448#ifdef FREECIV_JSON_CONNECTION
30449 field_addr.name = "veteran";
30450#endif /* FREECIV_JSON_CONNECTION */
30451 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
30453 }
30454#ifdef FREECIV_JSON_CONNECTION
30455 field_addr.name = "ssa_controller";
30456#endif /* FREECIV_JSON_CONNECTION */
30457 {
30458 int readin;
30459
30460 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30461 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
30462 }
30463 real_packet->ssa_controller = readin;
30464 }
30465#ifdef FREECIV_JSON_CONNECTION
30466 field_addr.name = "paradropped";
30467#endif /* FREECIV_JSON_CONNECTION */
30468 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
30469 RECEIVE_PACKET_FIELD_ERROR(paradropped);
30470 }
30471#ifdef FREECIV_JSON_CONNECTION
30472 field_addr.name = "occupied";
30473#endif /* FREECIV_JSON_CONNECTION */
30474 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
30476 }
30477#ifdef FREECIV_JSON_CONNECTION
30478 field_addr.name = "transported";
30479#endif /* FREECIV_JSON_CONNECTION */
30480 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
30481 RECEIVE_PACKET_FIELD_ERROR(transported);
30482 }
30483#ifdef FREECIV_JSON_CONNECTION
30484 field_addr.name = "done_moving";
30485#endif /* FREECIV_JSON_CONNECTION */
30486 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
30487 RECEIVE_PACKET_FIELD_ERROR(done_moving);
30488 }
30489#ifdef FREECIV_JSON_CONNECTION
30490 field_addr.name = "stay";
30491#endif /* FREECIV_JSON_CONNECTION */
30492 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
30494 }
30495#ifdef FREECIV_JSON_CONNECTION
30496 field_addr.name = "birth_turn";
30497#endif /* FREECIV_JSON_CONNECTION */
30498 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
30499 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
30500 }
30501#ifdef FREECIV_JSON_CONNECTION
30502 field_addr.name = "current_form_turn";
30503#endif /* FREECIV_JSON_CONNECTION */
30504 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
30505 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
30506 }
30507#ifdef FREECIV_JSON_CONNECTION
30508 field_addr.name = "type";
30509#endif /* FREECIV_JSON_CONNECTION */
30510 {
30511 int readin;
30512
30513 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
30515 }
30516 real_packet->type = readin;
30517 }
30518#ifdef FREECIV_JSON_CONNECTION
30519 field_addr.name = "transported_by";
30520#endif /* FREECIV_JSON_CONNECTION */
30521 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
30522 RECEIVE_PACKET_FIELD_ERROR(transported_by);
30523 }
30524#ifdef FREECIV_JSON_CONNECTION
30525 field_addr.name = "carrying";
30526#endif /* FREECIV_JSON_CONNECTION */
30527 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
30529 }
30530#ifdef FREECIV_JSON_CONNECTION
30531 field_addr.name = "movesleft";
30532#endif /* FREECIV_JSON_CONNECTION */
30533 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
30534 RECEIVE_PACKET_FIELD_ERROR(movesleft);
30535 }
30536#ifdef FREECIV_JSON_CONNECTION
30537 field_addr.name = "hp";
30538#endif /* FREECIV_JSON_CONNECTION */
30539 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
30541 }
30542#ifdef FREECIV_JSON_CONNECTION
30543 field_addr.name = "fuel";
30544#endif /* FREECIV_JSON_CONNECTION */
30545 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
30547 }
30548#ifdef FREECIV_JSON_CONNECTION
30549 field_addr.name = "activity_count";
30550#endif /* FREECIV_JSON_CONNECTION */
30551 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
30552 RECEIVE_PACKET_FIELD_ERROR(activity_count);
30553 }
30554#ifdef FREECIV_JSON_CONNECTION
30555 field_addr.name = "changed_from_count";
30556#endif /* FREECIV_JSON_CONNECTION */
30557 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
30558 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
30559 }
30560#ifdef FREECIV_JSON_CONNECTION
30561 field_addr.name = "goto_tile";
30562#endif /* FREECIV_JSON_CONNECTION */
30563 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
30564 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
30565 }
30566#ifdef FREECIV_JSON_CONNECTION
30567 field_addr.name = "activity";
30568#endif /* FREECIV_JSON_CONNECTION */
30569 {
30570 int readin;
30571
30572 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30574 }
30575 real_packet->activity = readin;
30576 }
30577#ifdef FREECIV_JSON_CONNECTION
30578 field_addr.name = "activity_tgt";
30579#endif /* FREECIV_JSON_CONNECTION */
30580 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
30581 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
30582 }
30583#ifdef FREECIV_JSON_CONNECTION
30584 field_addr.name = "changed_from";
30585#endif /* FREECIV_JSON_CONNECTION */
30586 {
30587 int readin;
30588
30589 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30590 RECEIVE_PACKET_FIELD_ERROR(changed_from);
30591 }
30592 real_packet->changed_from = readin;
30593 }
30594#ifdef FREECIV_JSON_CONNECTION
30595 field_addr.name = "changed_from_tgt";
30596#endif /* FREECIV_JSON_CONNECTION */
30597 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
30598 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
30599 }
30600#ifdef FREECIV_JSON_CONNECTION
30601 field_addr.name = "battlegroup";
30602#endif /* FREECIV_JSON_CONNECTION */
30603 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
30604 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
30605 }
30606#ifdef FREECIV_JSON_CONNECTION
30607 field_addr.name = "has_orders";
30608#endif /* FREECIV_JSON_CONNECTION */
30609 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_orders)) {
30610 RECEIVE_PACKET_FIELD_ERROR(has_orders);
30611 }
30612#ifdef FREECIV_JSON_CONNECTION
30613 field_addr.name = "orders_length";
30614#endif /* FREECIV_JSON_CONNECTION */
30615 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
30616 RECEIVE_PACKET_FIELD_ERROR(orders_length);
30617 }
30618#ifdef FREECIV_JSON_CONNECTION
30619 field_addr.name = "orders_index";
30620#endif /* FREECIV_JSON_CONNECTION */
30621 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
30622 RECEIVE_PACKET_FIELD_ERROR(orders_index);
30623 }
30624#ifdef FREECIV_JSON_CONNECTION
30625 field_addr.name = "orders_repeat";
30626#endif /* FREECIV_JSON_CONNECTION */
30627 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_repeat)) {
30628 RECEIVE_PACKET_FIELD_ERROR(orders_repeat);
30629 }
30630#ifdef FREECIV_JSON_CONNECTION
30631 field_addr.name = "orders_vigilant";
30632#endif /* FREECIV_JSON_CONNECTION */
30633 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_vigilant)) {
30634 RECEIVE_PACKET_FIELD_ERROR(orders_vigilant);
30635 }
30636#ifdef FREECIV_JSON_CONNECTION
30637 field_addr.name = "orders";
30638#endif /* FREECIV_JSON_CONNECTION */
30639 if (real_packet->orders_length > MAX_LEN_ROUTE) {
30640 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
30641 }
30642 {
30643 int i;
30644
30645#ifdef FREECIV_JSON_CONNECTION
30646 /* Enter array. */
30647 field_addr.sub_location = plocation_elem_new(0);
30648#endif /* FREECIV_JSON_CONNECTION */
30649
30650 for (i = 0; i < real_packet->orders_length; i++) {
30651#ifdef FREECIV_JSON_CONNECTION
30652 field_addr.sub_location->number = i;
30653#endif /* FREECIV_JSON_CONNECTION */
30654
30655 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
30657 }
30658 }
30659
30660#ifdef FREECIV_JSON_CONNECTION
30661 /* Exit array. */
30662 FC_FREE(field_addr.sub_location);
30663#endif /* FREECIV_JSON_CONNECTION */
30664 }
30665#ifdef FREECIV_JSON_CONNECTION
30666 field_addr.name = "action_decision_want";
30667#endif /* FREECIV_JSON_CONNECTION */
30668 {
30669 int readin;
30670
30671 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30672 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
30673 }
30674 real_packet->action_decision_want = readin;
30675 }
30676#ifdef FREECIV_JSON_CONNECTION
30677 field_addr.name = "action_decision_tile";
30678#endif /* FREECIV_JSON_CONNECTION */
30679 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
30680 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
30681 }
30682#endif
30683 log_packet_detailed("packet_unit_info_100: got info about (%d)",
30684 real_packet->id);
30685
30686#ifdef FREECIV_DELTA_PROTOCOL
30687 if (NULL == *hash) {
30689 NULL, NULL, NULL, free);
30690 }
30691
30692 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30693 *real_packet = *old;
30694 } else {
30695 int id;
30696
30697 id = real_packet->id;
30698
30699 log_packet_detailed(" no old info");
30700 memset(real_packet, 0, sizeof(*real_packet));
30701
30702 real_packet->id = id;
30703 }
30704
30705 if (BV_ISSET(fields, 0)) {
30706 log_packet_detailed(" got field 'owner'");
30707#ifdef FREECIV_JSON_CONNECTION
30708 field_addr.name = "owner";
30709#endif /* FREECIV_JSON_CONNECTION */
30710 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
30712 }
30713 }
30714 if (BV_ISSET(fields, 1)) {
30715 log_packet_detailed(" got field 'nationality'");
30716#ifdef FREECIV_JSON_CONNECTION
30717 field_addr.name = "nationality";
30718#endif /* FREECIV_JSON_CONNECTION */
30719 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nationality)) {
30720 RECEIVE_PACKET_FIELD_ERROR(nationality);
30721 }
30722 }
30723 if (BV_ISSET(fields, 2)) {
30724 log_packet_detailed(" got field 'tile'");
30725#ifdef FREECIV_JSON_CONNECTION
30726 field_addr.name = "tile";
30727#endif /* FREECIV_JSON_CONNECTION */
30728 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
30730 }
30731 }
30732 if (BV_ISSET(fields, 3)) {
30733 log_packet_detailed(" got field 'facing'");
30734#ifdef FREECIV_JSON_CONNECTION
30735 field_addr.name = "facing";
30736#endif /* FREECIV_JSON_CONNECTION */
30737 {
30738 int readin;
30739
30740 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
30742 }
30743 real_packet->facing = readin;
30744 }
30745 }
30746 if (BV_ISSET(fields, 4)) {
30747 log_packet_detailed(" got field 'homecity'");
30748#ifdef FREECIV_JSON_CONNECTION
30749 field_addr.name = "homecity";
30750#endif /* FREECIV_JSON_CONNECTION */
30751 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
30753 }
30754 }
30755 if (BV_ISSET(fields, 5)) {
30756 log_packet_detailed(" got field 'upkeep'");
30757#ifdef FREECIV_JSON_CONNECTION
30758 field_addr.name = "upkeep";
30759#endif /* FREECIV_JSON_CONNECTION */
30760 {
30761 int i;
30762
30763#ifdef FREECIV_JSON_CONNECTION
30764 /* Enter array. */
30765 field_addr.sub_location = plocation_elem_new(0);
30766#endif /* FREECIV_JSON_CONNECTION */
30767
30768 for (i = 0; i < O_LAST; i++) {
30769#ifdef FREECIV_JSON_CONNECTION
30770 field_addr.sub_location->number = i;
30771#endif /* FREECIV_JSON_CONNECTION */
30772
30773 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
30775 }
30776 }
30777
30778#ifdef FREECIV_JSON_CONNECTION
30779 /* Exit array. */
30780 FC_FREE(field_addr.sub_location);
30781#endif /* FREECIV_JSON_CONNECTION */
30782 }
30783 }
30784 if (BV_ISSET(fields, 6)) {
30785 log_packet_detailed(" got field 'veteran'");
30786#ifdef FREECIV_JSON_CONNECTION
30787 field_addr.name = "veteran";
30788#endif /* FREECIV_JSON_CONNECTION */
30789 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
30791 }
30792 }
30793 if (BV_ISSET(fields, 7)) {
30794 log_packet_detailed(" got field 'ssa_controller'");
30795#ifdef FREECIV_JSON_CONNECTION
30796 field_addr.name = "ssa_controller";
30797#endif /* FREECIV_JSON_CONNECTION */
30798 {
30799 int readin;
30800
30801 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30802 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
30803 }
30804 real_packet->ssa_controller = readin;
30805 }
30806 }
30807 real_packet->paradropped = BV_ISSET(fields, 8);
30808 real_packet->occupied = BV_ISSET(fields, 9);
30809 real_packet->transported = BV_ISSET(fields, 10);
30810 real_packet->done_moving = BV_ISSET(fields, 11);
30811 real_packet->stay = BV_ISSET(fields, 12);
30812 if (BV_ISSET(fields, 13)) {
30813 log_packet_detailed(" got field 'birth_turn'");
30814#ifdef FREECIV_JSON_CONNECTION
30815 field_addr.name = "birth_turn";
30816#endif /* FREECIV_JSON_CONNECTION */
30817 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
30818 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
30819 }
30820 }
30821 if (BV_ISSET(fields, 14)) {
30822 log_packet_detailed(" got field 'current_form_turn'");
30823#ifdef FREECIV_JSON_CONNECTION
30824 field_addr.name = "current_form_turn";
30825#endif /* FREECIV_JSON_CONNECTION */
30826 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
30827 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
30828 }
30829 }
30830 if (BV_ISSET(fields, 15)) {
30831 log_packet_detailed(" got field 'type'");
30832#ifdef FREECIV_JSON_CONNECTION
30833 field_addr.name = "type";
30834#endif /* FREECIV_JSON_CONNECTION */
30835 {
30836 int readin;
30837
30838 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
30840 }
30841 real_packet->type = readin;
30842 }
30843 }
30844 if (BV_ISSET(fields, 16)) {
30845 log_packet_detailed(" got field 'transported_by'");
30846#ifdef FREECIV_JSON_CONNECTION
30847 field_addr.name = "transported_by";
30848#endif /* FREECIV_JSON_CONNECTION */
30849 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
30850 RECEIVE_PACKET_FIELD_ERROR(transported_by);
30851 }
30852 }
30853 if (BV_ISSET(fields, 17)) {
30854 log_packet_detailed(" got field 'carrying'");
30855#ifdef FREECIV_JSON_CONNECTION
30856 field_addr.name = "carrying";
30857#endif /* FREECIV_JSON_CONNECTION */
30858 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
30860 }
30861 }
30862 if (BV_ISSET(fields, 18)) {
30863 log_packet_detailed(" got field 'movesleft'");
30864#ifdef FREECIV_JSON_CONNECTION
30865 field_addr.name = "movesleft";
30866#endif /* FREECIV_JSON_CONNECTION */
30867 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
30868 RECEIVE_PACKET_FIELD_ERROR(movesleft);
30869 }
30870 }
30871 if (BV_ISSET(fields, 19)) {
30872 log_packet_detailed(" got field 'hp'");
30873#ifdef FREECIV_JSON_CONNECTION
30874 field_addr.name = "hp";
30875#endif /* FREECIV_JSON_CONNECTION */
30876 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
30878 }
30879 }
30880 if (BV_ISSET(fields, 20)) {
30881 log_packet_detailed(" got field 'fuel'");
30882#ifdef FREECIV_JSON_CONNECTION
30883 field_addr.name = "fuel";
30884#endif /* FREECIV_JSON_CONNECTION */
30885 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
30887 }
30888 }
30889 if (BV_ISSET(fields, 21)) {
30890 log_packet_detailed(" got field 'activity_count'");
30891#ifdef FREECIV_JSON_CONNECTION
30892 field_addr.name = "activity_count";
30893#endif /* FREECIV_JSON_CONNECTION */
30894 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
30895 RECEIVE_PACKET_FIELD_ERROR(activity_count);
30896 }
30897 }
30898 if (BV_ISSET(fields, 22)) {
30899 log_packet_detailed(" got field 'changed_from_count'");
30900#ifdef FREECIV_JSON_CONNECTION
30901 field_addr.name = "changed_from_count";
30902#endif /* FREECIV_JSON_CONNECTION */
30903 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
30904 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
30905 }
30906 }
30907 if (BV_ISSET(fields, 23)) {
30908 log_packet_detailed(" got field 'goto_tile'");
30909#ifdef FREECIV_JSON_CONNECTION
30910 field_addr.name = "goto_tile";
30911#endif /* FREECIV_JSON_CONNECTION */
30912 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
30913 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
30914 }
30915 }
30916 if (BV_ISSET(fields, 24)) {
30917 log_packet_detailed(" got field 'activity'");
30918#ifdef FREECIV_JSON_CONNECTION
30919 field_addr.name = "activity";
30920#endif /* FREECIV_JSON_CONNECTION */
30921 {
30922 int readin;
30923
30924 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30926 }
30927 real_packet->activity = readin;
30928 }
30929 }
30930 if (BV_ISSET(fields, 25)) {
30931 log_packet_detailed(" got field 'activity_tgt'");
30932#ifdef FREECIV_JSON_CONNECTION
30933 field_addr.name = "activity_tgt";
30934#endif /* FREECIV_JSON_CONNECTION */
30935 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
30936 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
30937 }
30938 }
30939 if (BV_ISSET(fields, 26)) {
30940 log_packet_detailed(" got field 'changed_from'");
30941#ifdef FREECIV_JSON_CONNECTION
30942 field_addr.name = "changed_from";
30943#endif /* FREECIV_JSON_CONNECTION */
30944 {
30945 int readin;
30946
30947 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
30948 RECEIVE_PACKET_FIELD_ERROR(changed_from);
30949 }
30950 real_packet->changed_from = readin;
30951 }
30952 }
30953 if (BV_ISSET(fields, 27)) {
30954 log_packet_detailed(" got field 'changed_from_tgt'");
30955#ifdef FREECIV_JSON_CONNECTION
30956 field_addr.name = "changed_from_tgt";
30957#endif /* FREECIV_JSON_CONNECTION */
30958 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
30959 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
30960 }
30961 }
30962 if (BV_ISSET(fields, 28)) {
30963 log_packet_detailed(" got field 'battlegroup'");
30964#ifdef FREECIV_JSON_CONNECTION
30965 field_addr.name = "battlegroup";
30966#endif /* FREECIV_JSON_CONNECTION */
30967 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
30968 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
30969 }
30970 }
30971 real_packet->has_orders = BV_ISSET(fields, 29);
30972 if (BV_ISSET(fields, 30)) {
30973 log_packet_detailed(" got field 'orders_length'");
30974#ifdef FREECIV_JSON_CONNECTION
30975 field_addr.name = "orders_length";
30976#endif /* FREECIV_JSON_CONNECTION */
30977 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
30978 RECEIVE_PACKET_FIELD_ERROR(orders_length);
30979 }
30980 }
30981 if (BV_ISSET(fields, 31)) {
30982 log_packet_detailed(" got field 'orders_index'");
30983#ifdef FREECIV_JSON_CONNECTION
30984 field_addr.name = "orders_index";
30985#endif /* FREECIV_JSON_CONNECTION */
30986 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
30987 RECEIVE_PACKET_FIELD_ERROR(orders_index);
30988 }
30989 }
30990 real_packet->orders_repeat = BV_ISSET(fields, 32);
30991 real_packet->orders_vigilant = BV_ISSET(fields, 33);
30992 if (BV_ISSET(fields, 34)) {
30993 log_packet_detailed(" got field 'orders'");
30994#ifdef FREECIV_JSON_CONNECTION
30995 field_addr.name = "orders";
30996#endif /* FREECIV_JSON_CONNECTION */
30997 if (real_packet->orders_length > MAX_LEN_ROUTE) {
30998 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
30999 }
31000 {
31001 int i;
31002
31003#ifdef FREECIV_JSON_CONNECTION
31004 /* Enter array. */
31005 field_addr.sub_location = plocation_elem_new(0);
31006#endif /* FREECIV_JSON_CONNECTION */
31007
31008 for (i = 0; i < real_packet->orders_length; i++) {
31009#ifdef FREECIV_JSON_CONNECTION
31010 field_addr.sub_location->number = i;
31011#endif /* FREECIV_JSON_CONNECTION */
31012
31013 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
31015 }
31016 }
31017
31018#ifdef FREECIV_JSON_CONNECTION
31019 /* Exit array. */
31020 FC_FREE(field_addr.sub_location);
31021#endif /* FREECIV_JSON_CONNECTION */
31022 }
31023 }
31024 if (BV_ISSET(fields, 35)) {
31025 log_packet_detailed(" got field 'action_decision_want'");
31026#ifdef FREECIV_JSON_CONNECTION
31027 field_addr.name = "action_decision_want";
31028#endif /* FREECIV_JSON_CONNECTION */
31029 {
31030 int readin;
31031
31032 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
31033 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
31034 }
31035 real_packet->action_decision_want = readin;
31036 }
31037 }
31038 if (BV_ISSET(fields, 36)) {
31039 log_packet_detailed(" got field 'action_decision_tile'");
31040#ifdef FREECIV_JSON_CONNECTION
31041 field_addr.name = "action_decision_tile";
31042#endif /* FREECIV_JSON_CONNECTION */
31043 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
31044 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
31045 }
31046 }
31047
31048 if (NULL == old) {
31049 old = fc_malloc(sizeof(*old));
31050 *old = *real_packet;
31051 genhash_insert(*hash, old, old);
31052 } else {
31053 *old = *real_packet;
31054 }
31055
31056 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
31057 if (NULL != *hash) {
31059 }
31060
31061#endif /* FREECIV_DELTA_PROTOCOL */
31063}
31064
31065static int send_packet_unit_info_100(struct connection *pc, const struct packet_unit_info *packet)
31066{
31067 const struct packet_unit_info *real_packet = packet;
31068 int e;
31069#ifdef FREECIV_DELTA_PROTOCOL
31071 struct packet_unit_info *old;
31072 bool differ;
31073 struct genhash **hash = pc->phs.sent + PACKET_UNIT_INFO;
31074 int different = 0;
31075#endif /* FREECIV_DELTA_PROTOCOL */
31077#ifdef FREECIV_JSON_CONNECTION
31078 struct plocation field_addr;
31079 {
31083 }
31084#endif /* FREECIV_JSON_CONNECTION */
31085
31086 log_packet_detailed("packet_unit_info_100: sending info about (%d)",
31087 real_packet->id);
31088
31089#ifdef FREECIV_DELTA_PROTOCOL
31090 if (NULL == *hash) {
31092 NULL, NULL, NULL, free);
31093 }
31094 BV_CLR_ALL(fields);
31095
31096 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31097 old = fc_malloc(sizeof(*old));
31098 *old = *real_packet;
31099 genhash_insert(*hash, old, old);
31100 memset(old, 0, sizeof(*old));
31101 different = 1; /* Force to send. */
31102 }
31103 differ = (old->owner != real_packet->owner);
31104 if (differ) {
31105 different++;
31106 BV_SET(fields, 0);
31107 }
31108
31109 differ = (old->nationality != real_packet->nationality);
31110 if (differ) {
31111 different++;
31112 BV_SET(fields, 1);
31113 }
31114
31115 differ = (old->tile != real_packet->tile);
31116 if (differ) {
31117 different++;
31118 BV_SET(fields, 2);
31119 }
31120
31121 differ = (old->facing != real_packet->facing);
31122 if (differ) {
31123 different++;
31124 BV_SET(fields, 3);
31125 }
31126
31127 differ = (old->homecity != real_packet->homecity);
31128 if (differ) {
31129 different++;
31130 BV_SET(fields, 4);
31131 }
31132
31133 differ = FALSE;
31134 {
31135 int i;
31136
31137 for (i = 0; i < O_LAST; i++) {
31138 differ = (old->upkeep[i] != real_packet->upkeep[i]);
31139 if (differ) {
31140 break;
31141 }
31142 }
31143 }
31144 if (differ) {
31145 different++;
31146 BV_SET(fields, 5);
31147 }
31148
31149 differ = (old->veteran != real_packet->veteran);
31150 if (differ) {
31151 different++;
31152 BV_SET(fields, 6);
31153 }
31154
31155 differ = (old->ssa_controller != real_packet->ssa_controller);
31156 if (differ) {
31157 different++;
31158 BV_SET(fields, 7);
31159 }
31160
31161 differ = (old->paradropped != real_packet->paradropped);
31162 if (differ) {
31163 different++;
31164 }
31165 if (packet->paradropped) {
31166 BV_SET(fields, 8);
31167 }
31168
31169 differ = (old->occupied != real_packet->occupied);
31170 if (differ) {
31171 different++;
31172 }
31173 if (packet->occupied) {
31174 BV_SET(fields, 9);
31175 }
31176
31177 differ = (old->transported != real_packet->transported);
31178 if (differ) {
31179 different++;
31180 }
31181 if (packet->transported) {
31182 BV_SET(fields, 10);
31183 }
31184
31185 differ = (old->done_moving != real_packet->done_moving);
31186 if (differ) {
31187 different++;
31188 }
31189 if (packet->done_moving) {
31190 BV_SET(fields, 11);
31191 }
31192
31193 differ = (old->stay != real_packet->stay);
31194 if (differ) {
31195 different++;
31196 }
31197 if (packet->stay) {
31198 BV_SET(fields, 12);
31199 }
31200
31201 differ = (old->birth_turn != real_packet->birth_turn);
31202 if (differ) {
31203 different++;
31204 BV_SET(fields, 13);
31205 }
31206
31207 differ = (old->current_form_turn != real_packet->current_form_turn);
31208 if (differ) {
31209 different++;
31210 BV_SET(fields, 14);
31211 }
31212
31213 differ = (old->type != real_packet->type);
31214 if (differ) {
31215 different++;
31216 BV_SET(fields, 15);
31217 }
31218
31219 differ = (old->transported_by != real_packet->transported_by);
31220 if (differ) {
31221 different++;
31222 BV_SET(fields, 16);
31223 }
31224
31225 differ = (old->carrying != real_packet->carrying);
31226 if (differ) {
31227 different++;
31228 BV_SET(fields, 17);
31229 }
31230
31231 differ = (old->movesleft != real_packet->movesleft);
31232 if (differ) {
31233 different++;
31234 BV_SET(fields, 18);
31235 }
31236
31237 differ = (old->hp != real_packet->hp);
31238 if (differ) {
31239 different++;
31240 BV_SET(fields, 19);
31241 }
31242
31243 differ = (old->fuel != real_packet->fuel);
31244 if (differ) {
31245 different++;
31246 BV_SET(fields, 20);
31247 }
31248
31249 differ = (old->activity_count != real_packet->activity_count);
31250 if (differ) {
31251 different++;
31252 BV_SET(fields, 21);
31253 }
31254
31255 differ = (old->changed_from_count != real_packet->changed_from_count);
31256 if (differ) {
31257 different++;
31258 BV_SET(fields, 22);
31259 }
31260
31261 differ = (old->goto_tile != real_packet->goto_tile);
31262 if (differ) {
31263 different++;
31264 BV_SET(fields, 23);
31265 }
31266
31267 differ = (old->activity != real_packet->activity);
31268 if (differ) {
31269 different++;
31270 BV_SET(fields, 24);
31271 }
31272
31273 differ = (old->activity_tgt != real_packet->activity_tgt);
31274 if (differ) {
31275 different++;
31276 BV_SET(fields, 25);
31277 }
31278
31279 differ = (old->changed_from != real_packet->changed_from);
31280 if (differ) {
31281 different++;
31282 BV_SET(fields, 26);
31283 }
31284
31285 differ = (old->changed_from_tgt != real_packet->changed_from_tgt);
31286 if (differ) {
31287 different++;
31288 BV_SET(fields, 27);
31289 }
31290
31291 differ = (old->battlegroup != real_packet->battlegroup);
31292 if (differ) {
31293 different++;
31294 BV_SET(fields, 28);
31295 }
31296
31297 differ = (old->has_orders != real_packet->has_orders);
31298 if (differ) {
31299 different++;
31300 }
31301 if (packet->has_orders) {
31302 BV_SET(fields, 29);
31303 }
31304
31305 differ = (old->orders_length != real_packet->orders_length);
31306 if (differ) {
31307 different++;
31308 BV_SET(fields, 30);
31309 }
31310
31311 differ = (old->orders_index != real_packet->orders_index);
31312 if (differ) {
31313 different++;
31314 BV_SET(fields, 31);
31315 }
31316
31317 differ = (old->orders_repeat != real_packet->orders_repeat);
31318 if (differ) {
31319 different++;
31320 }
31321 if (packet->orders_repeat) {
31322 BV_SET(fields, 32);
31323 }
31324
31325 differ = (old->orders_vigilant != real_packet->orders_vigilant);
31326 if (differ) {
31327 different++;
31328 }
31329 if (packet->orders_vigilant) {
31330 BV_SET(fields, 33);
31331 }
31332
31333 differ = (old->orders_length != real_packet->orders_length);
31334 if (!differ) {
31335 int i;
31336
31337 for (i = 0; i < real_packet->orders_length; i++) {
31338 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
31339 if (differ) {
31340 break;
31341 }
31342 }
31343 }
31344 if (differ) {
31345 different++;
31346 BV_SET(fields, 34);
31347 }
31348
31349 differ = (old->action_decision_want != real_packet->action_decision_want);
31350 if (differ) {
31351 different++;
31352 BV_SET(fields, 35);
31353 }
31354
31355 differ = (old->action_decision_tile != real_packet->action_decision_tile);
31356 if (differ) {
31357 different++;
31358 BV_SET(fields, 36);
31359 }
31360
31361 if (different == 0) {
31362 log_packet_detailed(" no change -> discard");
31364 }
31365
31366#ifdef FREECIV_JSON_CONNECTION
31367 field_addr.name = "fields";
31368#endif /* FREECIV_JSON_CONNECTION */
31369 e = 0;
31370 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31371 if (e) {
31372 log_packet_detailed("fields bitvector error detected");
31373 }
31374#ifdef FREECIV_JSON_CONNECTION
31375 field_addr.name = "id";
31376#endif /* FREECIV_JSON_CONNECTION */
31377 e = 0;
31378 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
31379 if (e) {
31380 log_packet_detailed("'id' field error detected");
31381 }
31382
31383 if (BV_ISSET(fields, 0)) {
31384 log_packet_detailed(" field 'owner' has changed");
31385#ifdef FREECIV_JSON_CONNECTION
31386 field_addr.name = "owner";
31387#endif /* FREECIV_JSON_CONNECTION */
31388 e = 0;
31389 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
31390 if (e) {
31391 log_packet_detailed("'owner' field error detected");
31392 }
31393 }
31394 if (BV_ISSET(fields, 1)) {
31395 log_packet_detailed(" field 'nationality' has changed");
31396#ifdef FREECIV_JSON_CONNECTION
31397 field_addr.name = "nationality";
31398#endif /* FREECIV_JSON_CONNECTION */
31399 e = 0;
31400 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nationality);
31401 if (e) {
31402 log_packet_detailed("'nationality' field error detected");
31403 }
31404 }
31405 if (BV_ISSET(fields, 2)) {
31406 log_packet_detailed(" field 'tile' has changed");
31407#ifdef FREECIV_JSON_CONNECTION
31408 field_addr.name = "tile";
31409#endif /* FREECIV_JSON_CONNECTION */
31410 e = 0;
31411 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
31412 if (e) {
31413 log_packet_detailed("'tile' field error detected");
31414 }
31415 }
31416 if (BV_ISSET(fields, 3)) {
31417 log_packet_detailed(" field 'facing' has changed");
31418#ifdef FREECIV_JSON_CONNECTION
31419 field_addr.name = "facing";
31420#endif /* FREECIV_JSON_CONNECTION */
31421 e = 0;
31422 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
31423 if (e) {
31424 log_packet_detailed("'facing' field error detected");
31425 }
31426 }
31427 if (BV_ISSET(fields, 4)) {
31428 log_packet_detailed(" field 'homecity' has changed");
31429#ifdef FREECIV_JSON_CONNECTION
31430 field_addr.name = "homecity";
31431#endif /* FREECIV_JSON_CONNECTION */
31432 e = 0;
31433 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
31434 if (e) {
31435 log_packet_detailed("'homecity' field error detected");
31436 }
31437 }
31438 if (BV_ISSET(fields, 5)) {
31439 log_packet_detailed(" field 'upkeep' has changed");
31440#ifdef FREECIV_JSON_CONNECTION
31441 field_addr.name = "upkeep";
31442#endif /* FREECIV_JSON_CONNECTION */
31443 e = 0;
31444 {
31445 int i;
31446
31447#ifdef FREECIV_JSON_CONNECTION
31448 /* Create the array. */
31449 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
31450
31451 /* Enter the array. */
31452 field_addr.sub_location = plocation_elem_new(0);
31453#endif /* FREECIV_JSON_CONNECTION */
31454
31455 for (i = 0; i < O_LAST; i++) {
31456#ifdef FREECIV_JSON_CONNECTION
31457 /* Next array element. */
31458 field_addr.sub_location->number = i;
31459#endif /* FREECIV_JSON_CONNECTION */
31460
31461 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
31462 }
31463
31464#ifdef FREECIV_JSON_CONNECTION
31465 /* Exit array. */
31466 FC_FREE(field_addr.sub_location);
31467#endif /* FREECIV_JSON_CONNECTION */
31468 }
31469 if (e) {
31470 log_packet_detailed("'upkeep' field error detected");
31471 }
31472 }
31473 if (BV_ISSET(fields, 6)) {
31474 log_packet_detailed(" field 'veteran' has changed");
31475#ifdef FREECIV_JSON_CONNECTION
31476 field_addr.name = "veteran";
31477#endif /* FREECIV_JSON_CONNECTION */
31478 e = 0;
31479 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
31480 if (e) {
31481 log_packet_detailed("'veteran' field error detected");
31482 }
31483 }
31484 if (BV_ISSET(fields, 7)) {
31485 log_packet_detailed(" field 'ssa_controller' has changed");
31486#ifdef FREECIV_JSON_CONNECTION
31487 field_addr.name = "ssa_controller";
31488#endif /* FREECIV_JSON_CONNECTION */
31489 e = 0;
31490 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
31491 if (e) {
31492 log_packet_detailed("'ssa_controller' field error detected");
31493 }
31494 }
31495 /* field 8 is folded into the header */
31496 /* field 9 is folded into the header */
31497 /* field 10 is folded into the header */
31498 /* field 11 is folded into the header */
31499 /* field 12 is folded into the header */
31500 if (BV_ISSET(fields, 13)) {
31501 log_packet_detailed(" field 'birth_turn' has changed");
31502#ifdef FREECIV_JSON_CONNECTION
31503 field_addr.name = "birth_turn";
31504#endif /* FREECIV_JSON_CONNECTION */
31505 e = 0;
31506 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
31507 if (e) {
31508 log_packet_detailed("'birth_turn' field error detected");
31509 }
31510 }
31511 if (BV_ISSET(fields, 14)) {
31512 log_packet_detailed(" field 'current_form_turn' has changed");
31513#ifdef FREECIV_JSON_CONNECTION
31514 field_addr.name = "current_form_turn";
31515#endif /* FREECIV_JSON_CONNECTION */
31516 e = 0;
31517 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
31518 if (e) {
31519 log_packet_detailed("'current_form_turn' field error detected");
31520 }
31521 }
31522 if (BV_ISSET(fields, 15)) {
31523 log_packet_detailed(" field 'type' has changed");
31524#ifdef FREECIV_JSON_CONNECTION
31525 field_addr.name = "type";
31526#endif /* FREECIV_JSON_CONNECTION */
31527 e = 0;
31528 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
31529 if (e) {
31530 log_packet_detailed("'type' field error detected");
31531 }
31532 }
31533 if (BV_ISSET(fields, 16)) {
31534 log_packet_detailed(" field 'transported_by' has changed");
31535#ifdef FREECIV_JSON_CONNECTION
31536 field_addr.name = "transported_by";
31537#endif /* FREECIV_JSON_CONNECTION */
31538 e = 0;
31539 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
31540 if (e) {
31541 log_packet_detailed("'transported_by' field error detected");
31542 }
31543 }
31544 if (BV_ISSET(fields, 17)) {
31545 log_packet_detailed(" field 'carrying' has changed");
31546#ifdef FREECIV_JSON_CONNECTION
31547 field_addr.name = "carrying";
31548#endif /* FREECIV_JSON_CONNECTION */
31549 e = 0;
31550 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
31551 if (e) {
31552 log_packet_detailed("'carrying' field error detected");
31553 }
31554 }
31555 if (BV_ISSET(fields, 18)) {
31556 log_packet_detailed(" field 'movesleft' has changed");
31557#ifdef FREECIV_JSON_CONNECTION
31558 field_addr.name = "movesleft";
31559#endif /* FREECIV_JSON_CONNECTION */
31560 e = 0;
31561 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
31562 if (e) {
31563 log_packet_detailed("'movesleft' field error detected");
31564 }
31565 }
31566 if (BV_ISSET(fields, 19)) {
31567 log_packet_detailed(" field 'hp' has changed");
31568#ifdef FREECIV_JSON_CONNECTION
31569 field_addr.name = "hp";
31570#endif /* FREECIV_JSON_CONNECTION */
31571 e = 0;
31572 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
31573 if (e) {
31574 log_packet_detailed("'hp' field error detected");
31575 }
31576 }
31577 if (BV_ISSET(fields, 20)) {
31578 log_packet_detailed(" field 'fuel' has changed");
31579#ifdef FREECIV_JSON_CONNECTION
31580 field_addr.name = "fuel";
31581#endif /* FREECIV_JSON_CONNECTION */
31582 e = 0;
31583 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
31584 if (e) {
31585 log_packet_detailed("'fuel' field error detected");
31586 }
31587 }
31588 if (BV_ISSET(fields, 21)) {
31589 log_packet_detailed(" field 'activity_count' has changed");
31590#ifdef FREECIV_JSON_CONNECTION
31591 field_addr.name = "activity_count";
31592#endif /* FREECIV_JSON_CONNECTION */
31593 e = 0;
31594 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
31595 if (e) {
31596 log_packet_detailed("'activity_count' field error detected");
31597 }
31598 }
31599 if (BV_ISSET(fields, 22)) {
31600 log_packet_detailed(" field 'changed_from_count' has changed");
31601#ifdef FREECIV_JSON_CONNECTION
31602 field_addr.name = "changed_from_count";
31603#endif /* FREECIV_JSON_CONNECTION */
31604 e = 0;
31605 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
31606 if (e) {
31607 log_packet_detailed("'changed_from_count' field error detected");
31608 }
31609 }
31610 if (BV_ISSET(fields, 23)) {
31611 log_packet_detailed(" field 'goto_tile' has changed");
31612#ifdef FREECIV_JSON_CONNECTION
31613 field_addr.name = "goto_tile";
31614#endif /* FREECIV_JSON_CONNECTION */
31615 e = 0;
31616 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
31617 if (e) {
31618 log_packet_detailed("'goto_tile' field error detected");
31619 }
31620 }
31621 if (BV_ISSET(fields, 24)) {
31622 log_packet_detailed(" field 'activity' has changed");
31623#ifdef FREECIV_JSON_CONNECTION
31624 field_addr.name = "activity";
31625#endif /* FREECIV_JSON_CONNECTION */
31626 e = 0;
31627 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
31628 if (e) {
31629 log_packet_detailed("'activity' field error detected");
31630 }
31631 }
31632 if (BV_ISSET(fields, 25)) {
31633 log_packet_detailed(" field 'activity_tgt' has changed");
31634#ifdef FREECIV_JSON_CONNECTION
31635 field_addr.name = "activity_tgt";
31636#endif /* FREECIV_JSON_CONNECTION */
31637 e = 0;
31638 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
31639 if (e) {
31640 log_packet_detailed("'activity_tgt' field error detected");
31641 }
31642 }
31643 if (BV_ISSET(fields, 26)) {
31644 log_packet_detailed(" field 'changed_from' has changed");
31645#ifdef FREECIV_JSON_CONNECTION
31646 field_addr.name = "changed_from";
31647#endif /* FREECIV_JSON_CONNECTION */
31648 e = 0;
31649 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
31650 if (e) {
31651 log_packet_detailed("'changed_from' field error detected");
31652 }
31653 }
31654 if (BV_ISSET(fields, 27)) {
31655 log_packet_detailed(" field 'changed_from_tgt' has changed");
31656#ifdef FREECIV_JSON_CONNECTION
31657 field_addr.name = "changed_from_tgt";
31658#endif /* FREECIV_JSON_CONNECTION */
31659 e = 0;
31660 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
31661 if (e) {
31662 log_packet_detailed("'changed_from_tgt' field error detected");
31663 }
31664 }
31665 if (BV_ISSET(fields, 28)) {
31666 log_packet_detailed(" field 'battlegroup' has changed");
31667#ifdef FREECIV_JSON_CONNECTION
31668 field_addr.name = "battlegroup";
31669#endif /* FREECIV_JSON_CONNECTION */
31670 e = 0;
31671 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
31672 if (e) {
31673 log_packet_detailed("'battlegroup' field error detected");
31674 }
31675 }
31676 /* field 29 is folded into the header */
31677 if (BV_ISSET(fields, 30)) {
31678 log_packet_detailed(" field 'orders_length' has changed");
31679#ifdef FREECIV_JSON_CONNECTION
31680 field_addr.name = "orders_length";
31681#endif /* FREECIV_JSON_CONNECTION */
31682 e = 0;
31683 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
31684 if (e) {
31685 log_packet_detailed("'orders_length' field error detected");
31686 }
31687 }
31688 if (BV_ISSET(fields, 31)) {
31689 log_packet_detailed(" field 'orders_index' has changed");
31690#ifdef FREECIV_JSON_CONNECTION
31691 field_addr.name = "orders_index";
31692#endif /* FREECIV_JSON_CONNECTION */
31693 e = 0;
31694 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
31695 if (e) {
31696 log_packet_detailed("'orders_index' field error detected");
31697 }
31698 }
31699 /* field 32 is folded into the header */
31700 /* field 33 is folded into the header */
31701 if (BV_ISSET(fields, 34)) {
31702 log_packet_detailed(" field 'orders' has changed");
31703#ifdef FREECIV_JSON_CONNECTION
31704 field_addr.name = "orders";
31705#endif /* FREECIV_JSON_CONNECTION */
31706 e = 0;
31707 {
31708 int i;
31709
31710#ifdef FREECIV_JSON_CONNECTION
31711 /* Create the array. */
31712 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
31713
31714 /* Enter the array. */
31715 field_addr.sub_location = plocation_elem_new(0);
31716#endif /* FREECIV_JSON_CONNECTION */
31717
31718 for (i = 0; i < real_packet->orders_length; i++) {
31719#ifdef FREECIV_JSON_CONNECTION
31720 /* Next array element. */
31721 field_addr.sub_location->number = i;
31722#endif /* FREECIV_JSON_CONNECTION */
31723
31724 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
31725 }
31726
31727#ifdef FREECIV_JSON_CONNECTION
31728 /* Exit array. */
31729 FC_FREE(field_addr.sub_location);
31730#endif /* FREECIV_JSON_CONNECTION */
31731 }
31732 if (e) {
31733 log_packet_detailed("'orders' field error detected");
31734 }
31735 }
31736 if (BV_ISSET(fields, 35)) {
31737 log_packet_detailed(" field 'action_decision_want' has changed");
31738#ifdef FREECIV_JSON_CONNECTION
31739 field_addr.name = "action_decision_want";
31740#endif /* FREECIV_JSON_CONNECTION */
31741 e = 0;
31742 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
31743 if (e) {
31744 log_packet_detailed("'action_decision_want' field error detected");
31745 }
31746 }
31747 if (BV_ISSET(fields, 36)) {
31748 log_packet_detailed(" field 'action_decision_tile' has changed");
31749#ifdef FREECIV_JSON_CONNECTION
31750 field_addr.name = "action_decision_tile";
31751#endif /* FREECIV_JSON_CONNECTION */
31752 e = 0;
31753 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
31754 if (e) {
31755 log_packet_detailed("'action_decision_tile' field error detected");
31756 }
31757 }
31758
31759 *old = *real_packet;
31760
31761 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
31762 if (NULL != *hash) {
31764 }
31765#endif /* FREECIV_DELTA_PROTOCOL */
31766#ifndef FREECIV_DELTA_PROTOCOL
31767#ifdef FREECIV_JSON_CONNECTION
31768 field_addr.name = "id";
31769#endif /* FREECIV_JSON_CONNECTION */
31770 e = 0;
31771 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
31772 if (e) {
31773 log_packet_detailed("'id' field error detected");
31774 }
31775#ifdef FREECIV_JSON_CONNECTION
31776 field_addr.name = "owner";
31777#endif /* FREECIV_JSON_CONNECTION */
31778 e = 0;
31779 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
31780 if (e) {
31781 log_packet_detailed("'owner' field error detected");
31782 }
31783#ifdef FREECIV_JSON_CONNECTION
31784 field_addr.name = "nationality";
31785#endif /* FREECIV_JSON_CONNECTION */
31786 e = 0;
31787 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nationality);
31788 if (e) {
31789 log_packet_detailed("'nationality' field error detected");
31790 }
31791#ifdef FREECIV_JSON_CONNECTION
31792 field_addr.name = "tile";
31793#endif /* FREECIV_JSON_CONNECTION */
31794 e = 0;
31795 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
31796 if (e) {
31797 log_packet_detailed("'tile' field error detected");
31798 }
31799#ifdef FREECIV_JSON_CONNECTION
31800 field_addr.name = "facing";
31801#endif /* FREECIV_JSON_CONNECTION */
31802 e = 0;
31803 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
31804 if (e) {
31805 log_packet_detailed("'facing' field error detected");
31806 }
31807#ifdef FREECIV_JSON_CONNECTION
31808 field_addr.name = "homecity";
31809#endif /* FREECIV_JSON_CONNECTION */
31810 e = 0;
31811 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
31812 if (e) {
31813 log_packet_detailed("'homecity' field error detected");
31814 }
31815#ifdef FREECIV_JSON_CONNECTION
31816 field_addr.name = "upkeep";
31817#endif /* FREECIV_JSON_CONNECTION */
31818 e = 0;
31819 {
31820 int i;
31821
31822#ifdef FREECIV_JSON_CONNECTION
31823 /* Create the array. */
31824 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
31825
31826 /* Enter the array. */
31827 field_addr.sub_location = plocation_elem_new(0);
31828#endif /* FREECIV_JSON_CONNECTION */
31829
31830 for (i = 0; i < O_LAST; i++) {
31831#ifdef FREECIV_JSON_CONNECTION
31832 /* Next array element. */
31833 field_addr.sub_location->number = i;
31834#endif /* FREECIV_JSON_CONNECTION */
31835
31836 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
31837 }
31838
31839#ifdef FREECIV_JSON_CONNECTION
31840 /* Exit array. */
31841 FC_FREE(field_addr.sub_location);
31842#endif /* FREECIV_JSON_CONNECTION */
31843 }
31844 if (e) {
31845 log_packet_detailed("'upkeep' field error detected");
31846 }
31847#ifdef FREECIV_JSON_CONNECTION
31848 field_addr.name = "veteran";
31849#endif /* FREECIV_JSON_CONNECTION */
31850 e = 0;
31851 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
31852 if (e) {
31853 log_packet_detailed("'veteran' field error detected");
31854 }
31855#ifdef FREECIV_JSON_CONNECTION
31856 field_addr.name = "ssa_controller";
31857#endif /* FREECIV_JSON_CONNECTION */
31858 e = 0;
31859 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
31860 if (e) {
31861 log_packet_detailed("'ssa_controller' field error detected");
31862 }
31863#ifdef FREECIV_JSON_CONNECTION
31864 field_addr.name = "paradropped";
31865#endif /* FREECIV_JSON_CONNECTION */
31866 e = 0;
31867 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
31868 if (e) {
31869 log_packet_detailed("'paradropped' field error detected");
31870 }
31871#ifdef FREECIV_JSON_CONNECTION
31872 field_addr.name = "occupied";
31873#endif /* FREECIV_JSON_CONNECTION */
31874 e = 0;
31875 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
31876 if (e) {
31877 log_packet_detailed("'occupied' field error detected");
31878 }
31879#ifdef FREECIV_JSON_CONNECTION
31880 field_addr.name = "transported";
31881#endif /* FREECIV_JSON_CONNECTION */
31882 e = 0;
31883 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
31884 if (e) {
31885 log_packet_detailed("'transported' field error detected");
31886 }
31887#ifdef FREECIV_JSON_CONNECTION
31888 field_addr.name = "done_moving";
31889#endif /* FREECIV_JSON_CONNECTION */
31890 e = 0;
31891 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
31892 if (e) {
31893 log_packet_detailed("'done_moving' field error detected");
31894 }
31895#ifdef FREECIV_JSON_CONNECTION
31896 field_addr.name = "stay";
31897#endif /* FREECIV_JSON_CONNECTION */
31898 e = 0;
31899 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
31900 if (e) {
31901 log_packet_detailed("'stay' field error detected");
31902 }
31903#ifdef FREECIV_JSON_CONNECTION
31904 field_addr.name = "birth_turn";
31905#endif /* FREECIV_JSON_CONNECTION */
31906 e = 0;
31907 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
31908 if (e) {
31909 log_packet_detailed("'birth_turn' field error detected");
31910 }
31911#ifdef FREECIV_JSON_CONNECTION
31912 field_addr.name = "current_form_turn";
31913#endif /* FREECIV_JSON_CONNECTION */
31914 e = 0;
31915 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
31916 if (e) {
31917 log_packet_detailed("'current_form_turn' field error detected");
31918 }
31919#ifdef FREECIV_JSON_CONNECTION
31920 field_addr.name = "type";
31921#endif /* FREECIV_JSON_CONNECTION */
31922 e = 0;
31923 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
31924 if (e) {
31925 log_packet_detailed("'type' field error detected");
31926 }
31927#ifdef FREECIV_JSON_CONNECTION
31928 field_addr.name = "transported_by";
31929#endif /* FREECIV_JSON_CONNECTION */
31930 e = 0;
31931 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
31932 if (e) {
31933 log_packet_detailed("'transported_by' field error detected");
31934 }
31935#ifdef FREECIV_JSON_CONNECTION
31936 field_addr.name = "carrying";
31937#endif /* FREECIV_JSON_CONNECTION */
31938 e = 0;
31939 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
31940 if (e) {
31941 log_packet_detailed("'carrying' field error detected");
31942 }
31943#ifdef FREECIV_JSON_CONNECTION
31944 field_addr.name = "movesleft";
31945#endif /* FREECIV_JSON_CONNECTION */
31946 e = 0;
31947 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
31948 if (e) {
31949 log_packet_detailed("'movesleft' field error detected");
31950 }
31951#ifdef FREECIV_JSON_CONNECTION
31952 field_addr.name = "hp";
31953#endif /* FREECIV_JSON_CONNECTION */
31954 e = 0;
31955 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
31956 if (e) {
31957 log_packet_detailed("'hp' field error detected");
31958 }
31959#ifdef FREECIV_JSON_CONNECTION
31960 field_addr.name = "fuel";
31961#endif /* FREECIV_JSON_CONNECTION */
31962 e = 0;
31963 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
31964 if (e) {
31965 log_packet_detailed("'fuel' field error detected");
31966 }
31967#ifdef FREECIV_JSON_CONNECTION
31968 field_addr.name = "activity_count";
31969#endif /* FREECIV_JSON_CONNECTION */
31970 e = 0;
31971 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
31972 if (e) {
31973 log_packet_detailed("'activity_count' field error detected");
31974 }
31975#ifdef FREECIV_JSON_CONNECTION
31976 field_addr.name = "changed_from_count";
31977#endif /* FREECIV_JSON_CONNECTION */
31978 e = 0;
31979 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
31980 if (e) {
31981 log_packet_detailed("'changed_from_count' field error detected");
31982 }
31983#ifdef FREECIV_JSON_CONNECTION
31984 field_addr.name = "goto_tile";
31985#endif /* FREECIV_JSON_CONNECTION */
31986 e = 0;
31987 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
31988 if (e) {
31989 log_packet_detailed("'goto_tile' field error detected");
31990 }
31991#ifdef FREECIV_JSON_CONNECTION
31992 field_addr.name = "activity";
31993#endif /* FREECIV_JSON_CONNECTION */
31994 e = 0;
31995 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
31996 if (e) {
31997 log_packet_detailed("'activity' field error detected");
31998 }
31999#ifdef FREECIV_JSON_CONNECTION
32000 field_addr.name = "activity_tgt";
32001#endif /* FREECIV_JSON_CONNECTION */
32002 e = 0;
32003 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
32004 if (e) {
32005 log_packet_detailed("'activity_tgt' field error detected");
32006 }
32007#ifdef FREECIV_JSON_CONNECTION
32008 field_addr.name = "changed_from";
32009#endif /* FREECIV_JSON_CONNECTION */
32010 e = 0;
32011 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
32012 if (e) {
32013 log_packet_detailed("'changed_from' field error detected");
32014 }
32015#ifdef FREECIV_JSON_CONNECTION
32016 field_addr.name = "changed_from_tgt";
32017#endif /* FREECIV_JSON_CONNECTION */
32018 e = 0;
32019 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
32020 if (e) {
32021 log_packet_detailed("'changed_from_tgt' field error detected");
32022 }
32023#ifdef FREECIV_JSON_CONNECTION
32024 field_addr.name = "battlegroup";
32025#endif /* FREECIV_JSON_CONNECTION */
32026 e = 0;
32027 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
32028 if (e) {
32029 log_packet_detailed("'battlegroup' field error detected");
32030 }
32031#ifdef FREECIV_JSON_CONNECTION
32032 field_addr.name = "has_orders";
32033#endif /* FREECIV_JSON_CONNECTION */
32034 e = 0;
32035 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_orders);
32036 if (e) {
32037 log_packet_detailed("'has_orders' field error detected");
32038 }
32039#ifdef FREECIV_JSON_CONNECTION
32040 field_addr.name = "orders_length";
32041#endif /* FREECIV_JSON_CONNECTION */
32042 e = 0;
32043 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
32044 if (e) {
32045 log_packet_detailed("'orders_length' field error detected");
32046 }
32047#ifdef FREECIV_JSON_CONNECTION
32048 field_addr.name = "orders_index";
32049#endif /* FREECIV_JSON_CONNECTION */
32050 e = 0;
32051 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
32052 if (e) {
32053 log_packet_detailed("'orders_index' field error detected");
32054 }
32055#ifdef FREECIV_JSON_CONNECTION
32056 field_addr.name = "orders_repeat";
32057#endif /* FREECIV_JSON_CONNECTION */
32058 e = 0;
32059 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_repeat);
32060 if (e) {
32061 log_packet_detailed("'orders_repeat' field error detected");
32062 }
32063#ifdef FREECIV_JSON_CONNECTION
32064 field_addr.name = "orders_vigilant";
32065#endif /* FREECIV_JSON_CONNECTION */
32066 e = 0;
32067 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_vigilant);
32068 if (e) {
32069 log_packet_detailed("'orders_vigilant' field error detected");
32070 }
32071#ifdef FREECIV_JSON_CONNECTION
32072 field_addr.name = "orders";
32073#endif /* FREECIV_JSON_CONNECTION */
32074 e = 0;
32075 {
32076 int i;
32077
32078#ifdef FREECIV_JSON_CONNECTION
32079 /* Create the array. */
32080 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
32081
32082 /* Enter the array. */
32083 field_addr.sub_location = plocation_elem_new(0);
32084#endif /* FREECIV_JSON_CONNECTION */
32085
32086 for (i = 0; i < real_packet->orders_length; i++) {
32087#ifdef FREECIV_JSON_CONNECTION
32088 /* Next array element. */
32089 field_addr.sub_location->number = i;
32090#endif /* FREECIV_JSON_CONNECTION */
32091
32092 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
32093 }
32094
32095#ifdef FREECIV_JSON_CONNECTION
32096 /* Exit array. */
32097 FC_FREE(field_addr.sub_location);
32098#endif /* FREECIV_JSON_CONNECTION */
32099 }
32100 if (e) {
32101 log_packet_detailed("'orders' field error detected");
32102 }
32103#ifdef FREECIV_JSON_CONNECTION
32104 field_addr.name = "action_decision_want";
32105#endif /* FREECIV_JSON_CONNECTION */
32106 e = 0;
32107 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
32108 if (e) {
32109 log_packet_detailed("'action_decision_want' field error detected");
32110 }
32111#ifdef FREECIV_JSON_CONNECTION
32112 field_addr.name = "action_decision_tile";
32113#endif /* FREECIV_JSON_CONNECTION */
32114 e = 0;
32115 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
32116 if (e) {
32117 log_packet_detailed("'action_decision_tile' field error detected");
32118 }
32119
32120#endif
32122}
32123
32124int send_packet_unit_info(struct connection *pc, const struct packet_unit_info *packet)
32125{
32126 if (!pc->used) {
32127 log_error("WARNING: trying to send data to the closed connection %s",
32129 return -1;
32130 }
32131 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_INFO].packet != NULL, -1,
32132 "Handler for PACKET_UNIT_INFO not installed");
32133 return pc->phs.handlers->send[PACKET_UNIT_INFO].packet(pc, packet);
32134}
32135
32136void lsend_packet_unit_info(struct conn_list *dest, const struct packet_unit_info *packet)
32137{
32138 conn_list_iterate(dest, pconn) {
32141}
32142
32143#ifdef FREECIV_DELTA_PROTOCOL
32145{
32146 const struct packet_unit_short_info *key = (const struct packet_unit_short_info *) vkey;
32147 genhash_val_t result = 0;
32148
32149 result += key->id;
32150
32151 result &= 0xFFFFFFFF;
32152 return result;
32153}
32154
32155static bool cmp_packet_unit_short_info_100(const void *vkey1, const void *vkey2)
32156{
32157 const struct packet_unit_short_info *old = (const struct packet_unit_short_info *) vkey1;
32158 const struct packet_unit_short_info *real_packet = (const struct packet_unit_short_info *) vkey2;
32159 bool differ;
32160
32161 differ = (old->id != real_packet->id);
32162
32163 return !differ;
32164}
32166#endif /* FREECIV_DELTA_PROTOCOL */
32167
32169{
32170#ifdef FREECIV_DELTA_PROTOCOL
32172 struct packet_unit_short_info *old;
32173 struct genhash **hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
32174#endif /* FREECIV_DELTA_PROTOCOL */
32176#ifdef FREECIV_JSON_CONNECTION
32177 struct plocation field_addr;
32178 {
32182 }
32183#endif /* FREECIV_JSON_CONNECTION */
32184
32185#ifdef FREECIV_DELTA_PROTOCOL
32186#ifdef FREECIV_JSON_CONNECTION
32187 field_addr.name = "fields";
32188#endif /* FREECIV_JSON_CONNECTION */
32189 DIO_BV_GET(&din, &field_addr, fields);
32190#ifdef FREECIV_JSON_CONNECTION
32191 field_addr.name = "id";
32192#endif /* FREECIV_JSON_CONNECTION */
32193 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
32195 }
32196
32197#else /* FREECIV_DELTA_PROTOCOL */
32198#ifdef FREECIV_JSON_CONNECTION
32199 field_addr.name = "id";
32200#endif /* FREECIV_JSON_CONNECTION */
32201 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
32203 }
32204#ifdef FREECIV_JSON_CONNECTION
32205 field_addr.name = "owner";
32206#endif /* FREECIV_JSON_CONNECTION */
32207 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
32209 }
32210#ifdef FREECIV_JSON_CONNECTION
32211 field_addr.name = "tile";
32212#endif /* FREECIV_JSON_CONNECTION */
32213 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
32215 }
32216#ifdef FREECIV_JSON_CONNECTION
32217 field_addr.name = "facing";
32218#endif /* FREECIV_JSON_CONNECTION */
32219 {
32220 int readin;
32221
32222 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
32224 }
32225 real_packet->facing = readin;
32226 }
32227#ifdef FREECIV_JSON_CONNECTION
32228 field_addr.name = "type";
32229#endif /* FREECIV_JSON_CONNECTION */
32230 {
32231 int readin;
32232
32233 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
32235 }
32236 real_packet->type = readin;
32237 }
32238#ifdef FREECIV_JSON_CONNECTION
32239 field_addr.name = "veteran";
32240#endif /* FREECIV_JSON_CONNECTION */
32241 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
32243 }
32244#ifdef FREECIV_JSON_CONNECTION
32245 field_addr.name = "occupied";
32246#endif /* FREECIV_JSON_CONNECTION */
32247 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
32249 }
32250#ifdef FREECIV_JSON_CONNECTION
32251 field_addr.name = "transported";
32252#endif /* FREECIV_JSON_CONNECTION */
32253 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
32254 RECEIVE_PACKET_FIELD_ERROR(transported);
32255 }
32256#ifdef FREECIV_JSON_CONNECTION
32257 field_addr.name = "hp";
32258#endif /* FREECIV_JSON_CONNECTION */
32259 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
32261 }
32262#ifdef FREECIV_JSON_CONNECTION
32263 field_addr.name = "activity";
32264#endif /* FREECIV_JSON_CONNECTION */
32265 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
32267 }
32268#ifdef FREECIV_JSON_CONNECTION
32269 field_addr.name = "activity_tgt";
32270#endif /* FREECIV_JSON_CONNECTION */
32271 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
32272 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
32273 }
32274#ifdef FREECIV_JSON_CONNECTION
32275 field_addr.name = "transported_by";
32276#endif /* FREECIV_JSON_CONNECTION */
32277 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
32278 RECEIVE_PACKET_FIELD_ERROR(transported_by);
32279 }
32280#ifdef FREECIV_JSON_CONNECTION
32281 field_addr.name = "packet_use";
32282#endif /* FREECIV_JSON_CONNECTION */
32283 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
32284 RECEIVE_PACKET_FIELD_ERROR(packet_use);
32285 }
32286#ifdef FREECIV_JSON_CONNECTION
32287 field_addr.name = "info_city_id";
32288#endif /* FREECIV_JSON_CONNECTION */
32289 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
32290 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
32291 }
32292#endif
32293 log_packet_detailed("packet_unit_short_info_100: got info about (%d)",
32294 real_packet->id);
32295
32296#ifdef FREECIV_DELTA_PROTOCOL
32297 if (NULL == *hash) {
32299 NULL, NULL, NULL, free);
32300 }
32301
32302 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32303 *real_packet = *old;
32304 } else {
32305 int id;
32306
32307 id = real_packet->id;
32308
32309 log_packet_detailed(" no old info");
32310 memset(real_packet, 0, sizeof(*real_packet));
32311
32312 real_packet->id = id;
32313 }
32314
32315 if (BV_ISSET(fields, 0)) {
32316 log_packet_detailed(" got field 'owner'");
32317#ifdef FREECIV_JSON_CONNECTION
32318 field_addr.name = "owner";
32319#endif /* FREECIV_JSON_CONNECTION */
32320 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
32322 }
32323 }
32324 if (BV_ISSET(fields, 1)) {
32325 log_packet_detailed(" got field 'tile'");
32326#ifdef FREECIV_JSON_CONNECTION
32327 field_addr.name = "tile";
32328#endif /* FREECIV_JSON_CONNECTION */
32329 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
32331 }
32332 }
32333 if (BV_ISSET(fields, 2)) {
32334 log_packet_detailed(" got field 'facing'");
32335#ifdef FREECIV_JSON_CONNECTION
32336 field_addr.name = "facing";
32337#endif /* FREECIV_JSON_CONNECTION */
32338 {
32339 int readin;
32340
32341 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
32343 }
32344 real_packet->facing = readin;
32345 }
32346 }
32347 if (BV_ISSET(fields, 3)) {
32348 log_packet_detailed(" got field 'type'");
32349#ifdef FREECIV_JSON_CONNECTION
32350 field_addr.name = "type";
32351#endif /* FREECIV_JSON_CONNECTION */
32352 {
32353 int readin;
32354
32355 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
32357 }
32358 real_packet->type = readin;
32359 }
32360 }
32361 if (BV_ISSET(fields, 4)) {
32362 log_packet_detailed(" got field 'veteran'");
32363#ifdef FREECIV_JSON_CONNECTION
32364 field_addr.name = "veteran";
32365#endif /* FREECIV_JSON_CONNECTION */
32366 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
32368 }
32369 }
32370 real_packet->occupied = BV_ISSET(fields, 5);
32371 real_packet->transported = BV_ISSET(fields, 6);
32372 if (BV_ISSET(fields, 7)) {
32373 log_packet_detailed(" got field 'hp'");
32374#ifdef FREECIV_JSON_CONNECTION
32375 field_addr.name = "hp";
32376#endif /* FREECIV_JSON_CONNECTION */
32377 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
32379 }
32380 }
32381 if (BV_ISSET(fields, 8)) {
32382 log_packet_detailed(" got field 'activity'");
32383#ifdef FREECIV_JSON_CONNECTION
32384 field_addr.name = "activity";
32385#endif /* FREECIV_JSON_CONNECTION */
32386 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
32388 }
32389 }
32390 if (BV_ISSET(fields, 9)) {
32391 log_packet_detailed(" got field 'activity_tgt'");
32392#ifdef FREECIV_JSON_CONNECTION
32393 field_addr.name = "activity_tgt";
32394#endif /* FREECIV_JSON_CONNECTION */
32395 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
32396 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
32397 }
32398 }
32399 if (BV_ISSET(fields, 10)) {
32400 log_packet_detailed(" got field 'transported_by'");
32401#ifdef FREECIV_JSON_CONNECTION
32402 field_addr.name = "transported_by";
32403#endif /* FREECIV_JSON_CONNECTION */
32404 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
32405 RECEIVE_PACKET_FIELD_ERROR(transported_by);
32406 }
32407 }
32408 if (BV_ISSET(fields, 11)) {
32409 log_packet_detailed(" got field 'packet_use'");
32410#ifdef FREECIV_JSON_CONNECTION
32411 field_addr.name = "packet_use";
32412#endif /* FREECIV_JSON_CONNECTION */
32413 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
32414 RECEIVE_PACKET_FIELD_ERROR(packet_use);
32415 }
32416 }
32417 if (BV_ISSET(fields, 12)) {
32418 log_packet_detailed(" got field 'info_city_id'");
32419#ifdef FREECIV_JSON_CONNECTION
32420 field_addr.name = "info_city_id";
32421#endif /* FREECIV_JSON_CONNECTION */
32422 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
32423 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
32424 }
32425 }
32426
32427 if (NULL == old) {
32428 old = fc_malloc(sizeof(*old));
32429 *old = *real_packet;
32430 genhash_insert(*hash, old, old);
32431 } else {
32432 *old = *real_packet;
32433 }
32434
32435 hash = pc->phs.received + PACKET_UNIT_INFO;
32436 if (NULL != *hash) {
32438 }
32439
32440#endif /* FREECIV_DELTA_PROTOCOL */
32442}
32443
32444static int send_packet_unit_short_info_100(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
32445{
32446 const struct packet_unit_short_info *real_packet = packet;
32447 int e;
32448#ifdef FREECIV_DELTA_PROTOCOL
32450 struct packet_unit_short_info *old;
32451 bool differ;
32452 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
32453 int different = force_to_send;
32454#endif /* FREECIV_DELTA_PROTOCOL */
32456#ifdef FREECIV_JSON_CONNECTION
32457 struct plocation field_addr;
32458 {
32462 }
32463#endif /* FREECIV_JSON_CONNECTION */
32464
32465 log_packet_detailed("packet_unit_short_info_100: sending info about (%d)",
32466 real_packet->id);
32467
32468#ifdef FREECIV_DELTA_PROTOCOL
32469 if (NULL == *hash) {
32471 NULL, NULL, NULL, free);
32472 }
32473 BV_CLR_ALL(fields);
32474
32475 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
32476 old = fc_malloc(sizeof(*old));
32477 *old = *real_packet;
32478 genhash_insert(*hash, old, old);
32479 memset(old, 0, sizeof(*old));
32480 different = 1; /* Force to send. */
32481 }
32482 differ = (old->owner != real_packet->owner);
32483 if (differ) {
32484 different++;
32485 BV_SET(fields, 0);
32486 }
32487
32488 differ = (old->tile != real_packet->tile);
32489 if (differ) {
32490 different++;
32491 BV_SET(fields, 1);
32492 }
32493
32494 differ = (old->facing != real_packet->facing);
32495 if (differ) {
32496 different++;
32497 BV_SET(fields, 2);
32498 }
32499
32500 differ = (old->type != real_packet->type);
32501 if (differ) {
32502 different++;
32503 BV_SET(fields, 3);
32504 }
32505
32506 differ = (old->veteran != real_packet->veteran);
32507 if (differ) {
32508 different++;
32509 BV_SET(fields, 4);
32510 }
32511
32512 differ = (old->occupied != real_packet->occupied);
32513 if (differ) {
32514 different++;
32515 }
32516 if (packet->occupied) {
32517 BV_SET(fields, 5);
32518 }
32519
32520 differ = (old->transported != real_packet->transported);
32521 if (differ) {
32522 different++;
32523 }
32524 if (packet->transported) {
32525 BV_SET(fields, 6);
32526 }
32527
32528 differ = (old->hp != real_packet->hp);
32529 if (differ) {
32530 different++;
32531 BV_SET(fields, 7);
32532 }
32533
32534 differ = (old->activity != real_packet->activity);
32535 if (differ) {
32536 different++;
32537 BV_SET(fields, 8);
32538 }
32539
32540 differ = (old->activity_tgt != real_packet->activity_tgt);
32541 if (differ) {
32542 different++;
32543 BV_SET(fields, 9);
32544 }
32545
32546 differ = (old->transported_by != real_packet->transported_by);
32547 if (differ) {
32548 different++;
32549 BV_SET(fields, 10);
32550 }
32551
32552 differ = (old->packet_use != real_packet->packet_use);
32553 if (differ) {
32554 different++;
32555 BV_SET(fields, 11);
32556 }
32557
32558 differ = (old->info_city_id != real_packet->info_city_id);
32559 if (differ) {
32560 different++;
32561 BV_SET(fields, 12);
32562 }
32563
32564 if (different == 0) {
32565 log_packet_detailed(" no change -> discard");
32567 }
32568
32569#ifdef FREECIV_JSON_CONNECTION
32570 field_addr.name = "fields";
32571#endif /* FREECIV_JSON_CONNECTION */
32572 e = 0;
32573 e |= DIO_BV_PUT(&dout, &field_addr, fields);
32574 if (e) {
32575 log_packet_detailed("fields bitvector error detected");
32576 }
32577#ifdef FREECIV_JSON_CONNECTION
32578 field_addr.name = "id";
32579#endif /* FREECIV_JSON_CONNECTION */
32580 e = 0;
32581 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
32582 if (e) {
32583 log_packet_detailed("'id' field error detected");
32584 }
32585
32586 if (BV_ISSET(fields, 0)) {
32587 log_packet_detailed(" field 'owner' has changed");
32588#ifdef FREECIV_JSON_CONNECTION
32589 field_addr.name = "owner";
32590#endif /* FREECIV_JSON_CONNECTION */
32591 e = 0;
32592 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
32593 if (e) {
32594 log_packet_detailed("'owner' field error detected");
32595 }
32596 }
32597 if (BV_ISSET(fields, 1)) {
32598 log_packet_detailed(" field 'tile' has changed");
32599#ifdef FREECIV_JSON_CONNECTION
32600 field_addr.name = "tile";
32601#endif /* FREECIV_JSON_CONNECTION */
32602 e = 0;
32603 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
32604 if (e) {
32605 log_packet_detailed("'tile' field error detected");
32606 }
32607 }
32608 if (BV_ISSET(fields, 2)) {
32609 log_packet_detailed(" field 'facing' has changed");
32610#ifdef FREECIV_JSON_CONNECTION
32611 field_addr.name = "facing";
32612#endif /* FREECIV_JSON_CONNECTION */
32613 e = 0;
32614 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
32615 if (e) {
32616 log_packet_detailed("'facing' field error detected");
32617 }
32618 }
32619 if (BV_ISSET(fields, 3)) {
32620 log_packet_detailed(" field 'type' has changed");
32621#ifdef FREECIV_JSON_CONNECTION
32622 field_addr.name = "type";
32623#endif /* FREECIV_JSON_CONNECTION */
32624 e = 0;
32625 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
32626 if (e) {
32627 log_packet_detailed("'type' field error detected");
32628 }
32629 }
32630 if (BV_ISSET(fields, 4)) {
32631 log_packet_detailed(" field 'veteran' has changed");
32632#ifdef FREECIV_JSON_CONNECTION
32633 field_addr.name = "veteran";
32634#endif /* FREECIV_JSON_CONNECTION */
32635 e = 0;
32636 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
32637 if (e) {
32638 log_packet_detailed("'veteran' field error detected");
32639 }
32640 }
32641 /* field 5 is folded into the header */
32642 /* field 6 is folded into the header */
32643 if (BV_ISSET(fields, 7)) {
32644 log_packet_detailed(" field 'hp' has changed");
32645#ifdef FREECIV_JSON_CONNECTION
32646 field_addr.name = "hp";
32647#endif /* FREECIV_JSON_CONNECTION */
32648 e = 0;
32649 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
32650 if (e) {
32651 log_packet_detailed("'hp' field error detected");
32652 }
32653 }
32654 if (BV_ISSET(fields, 8)) {
32655 log_packet_detailed(" field 'activity' has changed");
32656#ifdef FREECIV_JSON_CONNECTION
32657 field_addr.name = "activity";
32658#endif /* FREECIV_JSON_CONNECTION */
32659 e = 0;
32660 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
32661 if (e) {
32662 log_packet_detailed("'activity' field error detected");
32663 }
32664 }
32665 if (BV_ISSET(fields, 9)) {
32666 log_packet_detailed(" field 'activity_tgt' has changed");
32667#ifdef FREECIV_JSON_CONNECTION
32668 field_addr.name = "activity_tgt";
32669#endif /* FREECIV_JSON_CONNECTION */
32670 e = 0;
32671 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
32672 if (e) {
32673 log_packet_detailed("'activity_tgt' field error detected");
32674 }
32675 }
32676 if (BV_ISSET(fields, 10)) {
32677 log_packet_detailed(" field 'transported_by' has changed");
32678#ifdef FREECIV_JSON_CONNECTION
32679 field_addr.name = "transported_by";
32680#endif /* FREECIV_JSON_CONNECTION */
32681 e = 0;
32682 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
32683 if (e) {
32684 log_packet_detailed("'transported_by' field error detected");
32685 }
32686 }
32687 if (BV_ISSET(fields, 11)) {
32688 log_packet_detailed(" field 'packet_use' has changed");
32689#ifdef FREECIV_JSON_CONNECTION
32690 field_addr.name = "packet_use";
32691#endif /* FREECIV_JSON_CONNECTION */
32692 e = 0;
32693 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
32694 if (e) {
32695 log_packet_detailed("'packet_use' field error detected");
32696 }
32697 }
32698 if (BV_ISSET(fields, 12)) {
32699 log_packet_detailed(" field 'info_city_id' has changed");
32700#ifdef FREECIV_JSON_CONNECTION
32701 field_addr.name = "info_city_id";
32702#endif /* FREECIV_JSON_CONNECTION */
32703 e = 0;
32704 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
32705 if (e) {
32706 log_packet_detailed("'info_city_id' field error detected");
32707 }
32708 }
32709
32710 *old = *real_packet;
32711
32712 hash = pc->phs.sent + PACKET_UNIT_INFO;
32713 if (NULL != *hash) {
32715 }
32716#endif /* FREECIV_DELTA_PROTOCOL */
32717#ifndef FREECIV_DELTA_PROTOCOL
32718#ifdef FREECIV_JSON_CONNECTION
32719 field_addr.name = "id";
32720#endif /* FREECIV_JSON_CONNECTION */
32721 e = 0;
32722 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
32723 if (e) {
32724 log_packet_detailed("'id' field error detected");
32725 }
32726#ifdef FREECIV_JSON_CONNECTION
32727 field_addr.name = "owner";
32728#endif /* FREECIV_JSON_CONNECTION */
32729 e = 0;
32730 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
32731 if (e) {
32732 log_packet_detailed("'owner' field error detected");
32733 }
32734#ifdef FREECIV_JSON_CONNECTION
32735 field_addr.name = "tile";
32736#endif /* FREECIV_JSON_CONNECTION */
32737 e = 0;
32738 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
32739 if (e) {
32740 log_packet_detailed("'tile' field error detected");
32741 }
32742#ifdef FREECIV_JSON_CONNECTION
32743 field_addr.name = "facing";
32744#endif /* FREECIV_JSON_CONNECTION */
32745 e = 0;
32746 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
32747 if (e) {
32748 log_packet_detailed("'facing' field error detected");
32749 }
32750#ifdef FREECIV_JSON_CONNECTION
32751 field_addr.name = "type";
32752#endif /* FREECIV_JSON_CONNECTION */
32753 e = 0;
32754 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
32755 if (e) {
32756 log_packet_detailed("'type' field error detected");
32757 }
32758#ifdef FREECIV_JSON_CONNECTION
32759 field_addr.name = "veteran";
32760#endif /* FREECIV_JSON_CONNECTION */
32761 e = 0;
32762 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
32763 if (e) {
32764 log_packet_detailed("'veteran' field error detected");
32765 }
32766#ifdef FREECIV_JSON_CONNECTION
32767 field_addr.name = "occupied";
32768#endif /* FREECIV_JSON_CONNECTION */
32769 e = 0;
32770 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
32771 if (e) {
32772 log_packet_detailed("'occupied' field error detected");
32773 }
32774#ifdef FREECIV_JSON_CONNECTION
32775 field_addr.name = "transported";
32776#endif /* FREECIV_JSON_CONNECTION */
32777 e = 0;
32778 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
32779 if (e) {
32780 log_packet_detailed("'transported' field error detected");
32781 }
32782#ifdef FREECIV_JSON_CONNECTION
32783 field_addr.name = "hp";
32784#endif /* FREECIV_JSON_CONNECTION */
32785 e = 0;
32786 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
32787 if (e) {
32788 log_packet_detailed("'hp' field error detected");
32789 }
32790#ifdef FREECIV_JSON_CONNECTION
32791 field_addr.name = "activity";
32792#endif /* FREECIV_JSON_CONNECTION */
32793 e = 0;
32794 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
32795 if (e) {
32796 log_packet_detailed("'activity' field error detected");
32797 }
32798#ifdef FREECIV_JSON_CONNECTION
32799 field_addr.name = "activity_tgt";
32800#endif /* FREECIV_JSON_CONNECTION */
32801 e = 0;
32802 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
32803 if (e) {
32804 log_packet_detailed("'activity_tgt' field error detected");
32805 }
32806#ifdef FREECIV_JSON_CONNECTION
32807 field_addr.name = "transported_by";
32808#endif /* FREECIV_JSON_CONNECTION */
32809 e = 0;
32810 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
32811 if (e) {
32812 log_packet_detailed("'transported_by' field error detected");
32813 }
32814#ifdef FREECIV_JSON_CONNECTION
32815 field_addr.name = "packet_use";
32816#endif /* FREECIV_JSON_CONNECTION */
32817 e = 0;
32818 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
32819 if (e) {
32820 log_packet_detailed("'packet_use' field error detected");
32821 }
32822#ifdef FREECIV_JSON_CONNECTION
32823 field_addr.name = "info_city_id";
32824#endif /* FREECIV_JSON_CONNECTION */
32825 e = 0;
32826 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
32827 if (e) {
32828 log_packet_detailed("'info_city_id' field error detected");
32829 }
32830
32831#endif
32833}
32834
32835int send_packet_unit_short_info(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
32836{
32837 if (!pc->used) {
32838 log_error("WARNING: trying to send data to the closed connection %s",
32840 return -1;
32841 }
32842 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send != NULL, -1,
32843 "Handler for PACKET_UNIT_SHORT_INFO not installed");
32844 return pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send(pc, packet, force_to_send);
32845}
32846
32847void lsend_packet_unit_short_info(struct conn_list *dest, const struct packet_unit_short_info *packet, bool force_to_send)
32848{
32849 conn_list_iterate(dest, pconn) {
32850 send_packet_unit_short_info(pconn, packet, force_to_send);
32852}
32853
32854#ifdef FREECIV_DELTA_PROTOCOL
32855#define hash_packet_unit_combat_info_100 hash_const
32856
32857#define cmp_packet_unit_combat_info_100 cmp_const
32858
32860#endif /* FREECIV_DELTA_PROTOCOL */
32861
32863{
32864#ifdef FREECIV_DELTA_PROTOCOL
32866 struct packet_unit_combat_info *old;
32867 struct genhash **hash = pc->phs.received + PACKET_UNIT_COMBAT_INFO;
32868#endif /* FREECIV_DELTA_PROTOCOL */
32870#ifdef FREECIV_JSON_CONNECTION
32871 struct plocation field_addr;
32872 {
32876 }
32877#endif /* FREECIV_JSON_CONNECTION */
32878
32879#ifdef FREECIV_DELTA_PROTOCOL
32880#ifdef FREECIV_JSON_CONNECTION
32881 field_addr.name = "fields";
32882#endif /* FREECIV_JSON_CONNECTION */
32883 DIO_BV_GET(&din, &field_addr, fields);
32884
32885#else /* FREECIV_DELTA_PROTOCOL */
32886#ifdef FREECIV_JSON_CONNECTION
32887 field_addr.name = "attacker_unit_id";
32888#endif /* FREECIV_JSON_CONNECTION */
32889 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
32890 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
32891 }
32892#ifdef FREECIV_JSON_CONNECTION
32893 field_addr.name = "defender_unit_id";
32894#endif /* FREECIV_JSON_CONNECTION */
32895 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
32896 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
32897 }
32898#ifdef FREECIV_JSON_CONNECTION
32899 field_addr.name = "attacker_hp";
32900#endif /* FREECIV_JSON_CONNECTION */
32901 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
32902 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
32903 }
32904#ifdef FREECIV_JSON_CONNECTION
32905 field_addr.name = "defender_hp";
32906#endif /* FREECIV_JSON_CONNECTION */
32907 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
32908 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
32909 }
32910#ifdef FREECIV_JSON_CONNECTION
32911 field_addr.name = "make_att_veteran";
32912#endif /* FREECIV_JSON_CONNECTION */
32913 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_att_veteran)) {
32914 RECEIVE_PACKET_FIELD_ERROR(make_att_veteran);
32915 }
32916#ifdef FREECIV_JSON_CONNECTION
32917 field_addr.name = "make_def_veteran";
32918#endif /* FREECIV_JSON_CONNECTION */
32919 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_def_veteran)) {
32920 RECEIVE_PACKET_FIELD_ERROR(make_def_veteran);
32921 }
32922#endif
32923 log_packet_detailed("packet_unit_combat_info_100: got info about ()");
32924
32925#ifdef FREECIV_DELTA_PROTOCOL
32926 if (NULL == *hash) {
32928 NULL, NULL, NULL, free);
32929 }
32930
32931 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32932 *real_packet = *old;
32933 } else {
32934 log_packet_detailed(" no old info");
32935 memset(real_packet, 0, sizeof(*real_packet));
32936 }
32937
32938 if (BV_ISSET(fields, 0)) {
32939 log_packet_detailed(" got field 'attacker_unit_id'");
32940#ifdef FREECIV_JSON_CONNECTION
32941 field_addr.name = "attacker_unit_id";
32942#endif /* FREECIV_JSON_CONNECTION */
32943 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
32944 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
32945 }
32946 }
32947 if (BV_ISSET(fields, 1)) {
32948 log_packet_detailed(" got field 'defender_unit_id'");
32949#ifdef FREECIV_JSON_CONNECTION
32950 field_addr.name = "defender_unit_id";
32951#endif /* FREECIV_JSON_CONNECTION */
32952 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
32953 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
32954 }
32955 }
32956 if (BV_ISSET(fields, 2)) {
32957 log_packet_detailed(" got field 'attacker_hp'");
32958#ifdef FREECIV_JSON_CONNECTION
32959 field_addr.name = "attacker_hp";
32960#endif /* FREECIV_JSON_CONNECTION */
32961 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
32962 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
32963 }
32964 }
32965 if (BV_ISSET(fields, 3)) {
32966 log_packet_detailed(" got field 'defender_hp'");
32967#ifdef FREECIV_JSON_CONNECTION
32968 field_addr.name = "defender_hp";
32969#endif /* FREECIV_JSON_CONNECTION */
32970 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
32971 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
32972 }
32973 }
32974 real_packet->make_att_veteran = BV_ISSET(fields, 4);
32975 real_packet->make_def_veteran = BV_ISSET(fields, 5);
32976
32977 if (NULL == old) {
32978 old = fc_malloc(sizeof(*old));
32979 *old = *real_packet;
32980 genhash_insert(*hash, old, old);
32981 } else {
32982 *old = *real_packet;
32983 }
32984
32985#endif /* FREECIV_DELTA_PROTOCOL */
32987}
32988
32990{
32991 const struct packet_unit_combat_info *real_packet = packet;
32992 int e;
32993#ifdef FREECIV_DELTA_PROTOCOL
32995 struct packet_unit_combat_info *old;
32996 bool differ;
32997 struct genhash **hash = pc->phs.sent + PACKET_UNIT_COMBAT_INFO;
32998#endif /* FREECIV_DELTA_PROTOCOL */
33000#ifdef FREECIV_JSON_CONNECTION
33001 struct plocation field_addr;
33002 {
33006 }
33007#endif /* FREECIV_JSON_CONNECTION */
33008
33009 log_packet_detailed("packet_unit_combat_info_100: sending info about ()");
33010
33011#ifdef FREECIV_DELTA_PROTOCOL
33012 if (NULL == *hash) {
33014 NULL, NULL, NULL, free);
33015 }
33016 BV_CLR_ALL(fields);
33017
33018 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33019 old = fc_malloc(sizeof(*old));
33020 *old = *real_packet;
33021 genhash_insert(*hash, old, old);
33022 memset(old, 0, sizeof(*old));
33023 }
33024 differ = (old->attacker_unit_id != real_packet->attacker_unit_id);
33025 if (differ) {
33026 BV_SET(fields, 0);
33027 }
33028
33029 differ = (old->defender_unit_id != real_packet->defender_unit_id);
33030 if (differ) {
33031 BV_SET(fields, 1);
33032 }
33033
33034 differ = (old->attacker_hp != real_packet->attacker_hp);
33035 if (differ) {
33036 BV_SET(fields, 2);
33037 }
33038
33039 differ = (old->defender_hp != real_packet->defender_hp);
33040 if (differ) {
33041 BV_SET(fields, 3);
33042 }
33043
33044 if (packet->make_att_veteran) {
33045 BV_SET(fields, 4);
33046 }
33047
33048 if (packet->make_def_veteran) {
33049 BV_SET(fields, 5);
33050 }
33051
33052
33053#ifdef FREECIV_JSON_CONNECTION
33054 field_addr.name = "fields";
33055#endif /* FREECIV_JSON_CONNECTION */
33056 e = 0;
33057 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33058 if (e) {
33059 log_packet_detailed("fields bitvector error detected");
33060 }
33061
33062 if (BV_ISSET(fields, 0)) {
33063 log_packet_detailed(" field 'attacker_unit_id' has changed");
33064#ifdef FREECIV_JSON_CONNECTION
33065 field_addr.name = "attacker_unit_id";
33066#endif /* FREECIV_JSON_CONNECTION */
33067 e = 0;
33068 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
33069 if (e) {
33070 log_packet_detailed("'attacker_unit_id' field error detected");
33071 }
33072 }
33073 if (BV_ISSET(fields, 1)) {
33074 log_packet_detailed(" field 'defender_unit_id' has changed");
33075#ifdef FREECIV_JSON_CONNECTION
33076 field_addr.name = "defender_unit_id";
33077#endif /* FREECIV_JSON_CONNECTION */
33078 e = 0;
33079 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
33080 if (e) {
33081 log_packet_detailed("'defender_unit_id' field error detected");
33082 }
33083 }
33084 if (BV_ISSET(fields, 2)) {
33085 log_packet_detailed(" field 'attacker_hp' has changed");
33086#ifdef FREECIV_JSON_CONNECTION
33087 field_addr.name = "attacker_hp";
33088#endif /* FREECIV_JSON_CONNECTION */
33089 e = 0;
33090 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
33091 if (e) {
33092 log_packet_detailed("'attacker_hp' field error detected");
33093 }
33094 }
33095 if (BV_ISSET(fields, 3)) {
33096 log_packet_detailed(" field 'defender_hp' has changed");
33097#ifdef FREECIV_JSON_CONNECTION
33098 field_addr.name = "defender_hp";
33099#endif /* FREECIV_JSON_CONNECTION */
33100 e = 0;
33101 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
33102 if (e) {
33103 log_packet_detailed("'defender_hp' field error detected");
33104 }
33105 }
33106 /* field 4 is folded into the header */
33107 /* field 5 is folded into the header */
33108
33109 *old = *real_packet;
33110#endif /* FREECIV_DELTA_PROTOCOL */
33111#ifndef FREECIV_DELTA_PROTOCOL
33112#ifdef FREECIV_JSON_CONNECTION
33113 field_addr.name = "attacker_unit_id";
33114#endif /* FREECIV_JSON_CONNECTION */
33115 e = 0;
33116 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
33117 if (e) {
33118 log_packet_detailed("'attacker_unit_id' field error detected");
33119 }
33120#ifdef FREECIV_JSON_CONNECTION
33121 field_addr.name = "defender_unit_id";
33122#endif /* FREECIV_JSON_CONNECTION */
33123 e = 0;
33124 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
33125 if (e) {
33126 log_packet_detailed("'defender_unit_id' field error detected");
33127 }
33128#ifdef FREECIV_JSON_CONNECTION
33129 field_addr.name = "attacker_hp";
33130#endif /* FREECIV_JSON_CONNECTION */
33131 e = 0;
33132 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
33133 if (e) {
33134 log_packet_detailed("'attacker_hp' field error detected");
33135 }
33136#ifdef FREECIV_JSON_CONNECTION
33137 field_addr.name = "defender_hp";
33138#endif /* FREECIV_JSON_CONNECTION */
33139 e = 0;
33140 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
33141 if (e) {
33142 log_packet_detailed("'defender_hp' field error detected");
33143 }
33144#ifdef FREECIV_JSON_CONNECTION
33145 field_addr.name = "make_att_veteran";
33146#endif /* FREECIV_JSON_CONNECTION */
33147 e = 0;
33148 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_att_veteran);
33149 if (e) {
33150 log_packet_detailed("'make_att_veteran' field error detected");
33151 }
33152#ifdef FREECIV_JSON_CONNECTION
33153 field_addr.name = "make_def_veteran";
33154#endif /* FREECIV_JSON_CONNECTION */
33155 e = 0;
33156 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_def_veteran);
33157 if (e) {
33158 log_packet_detailed("'make_def_veteran' field error detected");
33159 }
33160
33161#endif
33163}
33164
33166{
33167 if (!pc->used) {
33168 log_error("WARNING: trying to send data to the closed connection %s",
33170 return -1;
33171 }
33172 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet != NULL, -1,
33173 "Handler for PACKET_UNIT_COMBAT_INFO not installed");
33174 return pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet(pc, packet);
33175}
33176
33178{
33179 conn_list_iterate(dest, pconn) {
33182}
33183
33184#ifdef FREECIV_DELTA_PROTOCOL
33185#define hash_packet_unit_sscs_set_100 hash_const
33186
33187#define cmp_packet_unit_sscs_set_100 cmp_const
33188
33190#endif /* FREECIV_DELTA_PROTOCOL */
33191
33193{
33194#ifdef FREECIV_DELTA_PROTOCOL
33196 struct packet_unit_sscs_set *old;
33197 struct genhash **hash = pc->phs.received + PACKET_UNIT_SSCS_SET;
33198#endif /* FREECIV_DELTA_PROTOCOL */
33200#ifdef FREECIV_JSON_CONNECTION
33201 struct plocation field_addr;
33202 {
33206 }
33207#endif /* FREECIV_JSON_CONNECTION */
33208
33209#ifdef FREECIV_DELTA_PROTOCOL
33210#ifdef FREECIV_JSON_CONNECTION
33211 field_addr.name = "fields";
33212#endif /* FREECIV_JSON_CONNECTION */
33213 DIO_BV_GET(&din, &field_addr, fields);
33214
33215#else /* FREECIV_DELTA_PROTOCOL */
33216#ifdef FREECIV_JSON_CONNECTION
33217 field_addr.name = "unit_id";
33218#endif /* FREECIV_JSON_CONNECTION */
33219 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
33221 }
33222#ifdef FREECIV_JSON_CONNECTION
33223 field_addr.name = "type";
33224#endif /* FREECIV_JSON_CONNECTION */
33225 {
33226 int readin;
33227
33228 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33230 }
33231 real_packet->type = readin;
33232 }
33233#ifdef FREECIV_JSON_CONNECTION
33234 field_addr.name = "value";
33235#endif /* FREECIV_JSON_CONNECTION */
33236 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
33238 }
33239#endif
33240 log_packet_detailed("packet_unit_sscs_set_100: got info about ()");
33241
33242#ifdef FREECIV_DELTA_PROTOCOL
33243 if (NULL == *hash) {
33245 NULL, NULL, NULL, free);
33246 }
33247
33248 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
33249 *real_packet = *old;
33250 } else {
33251 log_packet_detailed(" no old info");
33252 memset(real_packet, 0, sizeof(*real_packet));
33253 }
33254
33255 if (BV_ISSET(fields, 0)) {
33256 log_packet_detailed(" got field 'unit_id'");
33257#ifdef FREECIV_JSON_CONNECTION
33258 field_addr.name = "unit_id";
33259#endif /* FREECIV_JSON_CONNECTION */
33260 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
33262 }
33263 }
33264 if (BV_ISSET(fields, 1)) {
33265 log_packet_detailed(" got field 'type'");
33266#ifdef FREECIV_JSON_CONNECTION
33267 field_addr.name = "type";
33268#endif /* FREECIV_JSON_CONNECTION */
33269 {
33270 int readin;
33271
33272 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33274 }
33275 real_packet->type = readin;
33276 }
33277 }
33278 if (BV_ISSET(fields, 2)) {
33279 log_packet_detailed(" got field 'value'");
33280#ifdef FREECIV_JSON_CONNECTION
33281 field_addr.name = "value";
33282#endif /* FREECIV_JSON_CONNECTION */
33283 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
33285 }
33286 }
33287
33288 if (NULL == old) {
33289 old = fc_malloc(sizeof(*old));
33290 *old = *real_packet;
33291 genhash_insert(*hash, old, old);
33292 } else {
33293 *old = *real_packet;
33294 }
33295
33296#endif /* FREECIV_DELTA_PROTOCOL */
33298}
33299
33300static int send_packet_unit_sscs_set_100(struct connection *pc, const struct packet_unit_sscs_set *packet)
33301{
33302 const struct packet_unit_sscs_set *real_packet = packet;
33303 int e;
33304#ifdef FREECIV_DELTA_PROTOCOL
33306 struct packet_unit_sscs_set *old;
33307 bool differ;
33308 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SSCS_SET;
33309#endif /* FREECIV_DELTA_PROTOCOL */
33311#ifdef FREECIV_JSON_CONNECTION
33312 struct plocation field_addr;
33313 {
33317 }
33318#endif /* FREECIV_JSON_CONNECTION */
33319
33320 log_packet_detailed("packet_unit_sscs_set_100: sending info about ()");
33321
33322#ifdef FREECIV_DELTA_PROTOCOL
33323 if (NULL == *hash) {
33325 NULL, NULL, NULL, free);
33326 }
33327 BV_CLR_ALL(fields);
33328
33329 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33330 old = fc_malloc(sizeof(*old));
33331 *old = *real_packet;
33332 genhash_insert(*hash, old, old);
33333 memset(old, 0, sizeof(*old));
33334 }
33335 differ = (old->unit_id != real_packet->unit_id);
33336 if (differ) {
33337 BV_SET(fields, 0);
33338 }
33339
33340 differ = (old->type != real_packet->type);
33341 if (differ) {
33342 BV_SET(fields, 1);
33343 }
33344
33345 differ = (old->value != real_packet->value);
33346 if (differ) {
33347 BV_SET(fields, 2);
33348 }
33349
33350
33351#ifdef FREECIV_JSON_CONNECTION
33352 field_addr.name = "fields";
33353#endif /* FREECIV_JSON_CONNECTION */
33354 e = 0;
33355 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33356 if (e) {
33357 log_packet_detailed("fields bitvector error detected");
33358 }
33359
33360 if (BV_ISSET(fields, 0)) {
33361 log_packet_detailed(" field 'unit_id' has changed");
33362#ifdef FREECIV_JSON_CONNECTION
33363 field_addr.name = "unit_id";
33364#endif /* FREECIV_JSON_CONNECTION */
33365 e = 0;
33366 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
33367 if (e) {
33368 log_packet_detailed("'unit_id' field error detected");
33369 }
33370 }
33371 if (BV_ISSET(fields, 1)) {
33372 log_packet_detailed(" field 'type' has changed");
33373#ifdef FREECIV_JSON_CONNECTION
33374 field_addr.name = "type";
33375#endif /* FREECIV_JSON_CONNECTION */
33376 e = 0;
33377 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
33378 if (e) {
33379 log_packet_detailed("'type' field error detected");
33380 }
33381 }
33382 if (BV_ISSET(fields, 2)) {
33383 log_packet_detailed(" field 'value' has changed");
33384#ifdef FREECIV_JSON_CONNECTION
33385 field_addr.name = "value";
33386#endif /* FREECIV_JSON_CONNECTION */
33387 e = 0;
33388 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
33389 if (e) {
33390 log_packet_detailed("'value' field error detected");
33391 }
33392 }
33393
33394 *old = *real_packet;
33395#endif /* FREECIV_DELTA_PROTOCOL */
33396#ifndef FREECIV_DELTA_PROTOCOL
33397#ifdef FREECIV_JSON_CONNECTION
33398 field_addr.name = "unit_id";
33399#endif /* FREECIV_JSON_CONNECTION */
33400 e = 0;
33401 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
33402 if (e) {
33403 log_packet_detailed("'unit_id' field error detected");
33404 }
33405#ifdef FREECIV_JSON_CONNECTION
33406 field_addr.name = "type";
33407#endif /* FREECIV_JSON_CONNECTION */
33408 e = 0;
33409 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
33410 if (e) {
33411 log_packet_detailed("'type' field error detected");
33412 }
33413#ifdef FREECIV_JSON_CONNECTION
33414 field_addr.name = "value";
33415#endif /* FREECIV_JSON_CONNECTION */
33416 e = 0;
33417 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
33418 if (e) {
33419 log_packet_detailed("'value' field error detected");
33420 }
33421
33422#endif
33424}
33425
33427{
33428 if (!pc->used) {
33429 log_error("WARNING: trying to send data to the closed connection %s",
33431 return -1;
33432 }
33433 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet != NULL, -1,
33434 "Handler for PACKET_UNIT_SSCS_SET not installed");
33435 return pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet(pc, packet);
33436}
33437
33438int dsend_packet_unit_sscs_set(struct connection *pc, int unit_id, enum unit_ss_data_type type, int value)
33439{
33440 struct packet_unit_sscs_set packet, *real_packet = &packet;
33441
33443 real_packet->type = type;
33444 real_packet->value = value;
33445
33447}
33448
33449#ifdef FREECIV_DELTA_PROTOCOL
33450#define hash_packet_unit_orders_100 hash_const
33451
33452#define cmp_packet_unit_orders_100 cmp_const
33453
33455#endif /* FREECIV_DELTA_PROTOCOL */
33456
33458{
33459#ifdef FREECIV_DELTA_PROTOCOL
33461 struct packet_unit_orders *old;
33462 struct genhash **hash = pc->phs.received + PACKET_UNIT_ORDERS;
33463#endif /* FREECIV_DELTA_PROTOCOL */
33465#ifdef FREECIV_JSON_CONNECTION
33466 struct plocation field_addr;
33467 {
33471 }
33472#endif /* FREECIV_JSON_CONNECTION */
33473
33474#ifdef FREECIV_DELTA_PROTOCOL
33475#ifdef FREECIV_JSON_CONNECTION
33476 field_addr.name = "fields";
33477#endif /* FREECIV_JSON_CONNECTION */
33478 DIO_BV_GET(&din, &field_addr, fields);
33479
33480#else /* FREECIV_DELTA_PROTOCOL */
33481#ifdef FREECIV_JSON_CONNECTION
33482 field_addr.name = "unit_id";
33483#endif /* FREECIV_JSON_CONNECTION */
33484 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
33486 }
33487#ifdef FREECIV_JSON_CONNECTION
33488 field_addr.name = "src_tile";
33489#endif /* FREECIV_JSON_CONNECTION */
33490 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
33492 }
33493#ifdef FREECIV_JSON_CONNECTION
33494 field_addr.name = "length";
33495#endif /* FREECIV_JSON_CONNECTION */
33496 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
33498 }
33499#ifdef FREECIV_JSON_CONNECTION
33500 field_addr.name = "repeat";
33501#endif /* FREECIV_JSON_CONNECTION */
33502 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->repeat)) {
33504 }
33505#ifdef FREECIV_JSON_CONNECTION
33506 field_addr.name = "vigilant";
33507#endif /* FREECIV_JSON_CONNECTION */
33508 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
33510 }
33511#ifdef FREECIV_JSON_CONNECTION
33512 field_addr.name = "orders";
33513#endif /* FREECIV_JSON_CONNECTION */
33514 if (real_packet->length > MAX_LEN_ROUTE) {
33515 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
33516 }
33517 {
33518 int i;
33519
33520#ifdef FREECIV_JSON_CONNECTION
33521 /* Enter array. */
33522 field_addr.sub_location = plocation_elem_new(0);
33523#endif /* FREECIV_JSON_CONNECTION */
33524
33525 for (i = 0; i < real_packet->length; i++) {
33526#ifdef FREECIV_JSON_CONNECTION
33527 field_addr.sub_location->number = i;
33528#endif /* FREECIV_JSON_CONNECTION */
33529
33530 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
33532 }
33533 }
33534
33535#ifdef FREECIV_JSON_CONNECTION
33536 /* Exit array. */
33537 FC_FREE(field_addr.sub_location);
33538#endif /* FREECIV_JSON_CONNECTION */
33539 }
33540#ifdef FREECIV_JSON_CONNECTION
33541 field_addr.name = "dest_tile";
33542#endif /* FREECIV_JSON_CONNECTION */
33543 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
33544 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
33545 }
33546#endif
33547 log_packet_detailed("packet_unit_orders_100: got info about ()");
33548
33549#ifdef FREECIV_DELTA_PROTOCOL
33550 if (NULL == *hash) {
33552 NULL, NULL, NULL, free);
33553 }
33554
33555 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
33556 *real_packet = *old;
33557 } else {
33558 log_packet_detailed(" no old info");
33559 memset(real_packet, 0, sizeof(*real_packet));
33560 }
33561
33562 if (BV_ISSET(fields, 0)) {
33563 log_packet_detailed(" got field 'unit_id'");
33564#ifdef FREECIV_JSON_CONNECTION
33565 field_addr.name = "unit_id";
33566#endif /* FREECIV_JSON_CONNECTION */
33567 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
33569 }
33570 }
33571 if (BV_ISSET(fields, 1)) {
33572 log_packet_detailed(" got field 'src_tile'");
33573#ifdef FREECIV_JSON_CONNECTION
33574 field_addr.name = "src_tile";
33575#endif /* FREECIV_JSON_CONNECTION */
33576 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
33578 }
33579 }
33580 if (BV_ISSET(fields, 2)) {
33581 log_packet_detailed(" got field 'length'");
33582#ifdef FREECIV_JSON_CONNECTION
33583 field_addr.name = "length";
33584#endif /* FREECIV_JSON_CONNECTION */
33585 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
33587 }
33588 }
33589 real_packet->repeat = BV_ISSET(fields, 3);
33590 real_packet->vigilant = BV_ISSET(fields, 4);
33591 if (BV_ISSET(fields, 5)) {
33592 log_packet_detailed(" got field 'orders'");
33593#ifdef FREECIV_JSON_CONNECTION
33594 field_addr.name = "orders";
33595#endif /* FREECIV_JSON_CONNECTION */
33596 if (real_packet->length > MAX_LEN_ROUTE) {
33597 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
33598 }
33599 {
33600 int i;
33601
33602#ifdef FREECIV_JSON_CONNECTION
33603 /* Enter array. */
33604 field_addr.sub_location = plocation_elem_new(0);
33605#endif /* FREECIV_JSON_CONNECTION */
33606
33607 for (i = 0; i < real_packet->length; i++) {
33608#ifdef FREECIV_JSON_CONNECTION
33609 field_addr.sub_location->number = i;
33610#endif /* FREECIV_JSON_CONNECTION */
33611
33612 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
33614 }
33615 }
33616
33617#ifdef FREECIV_JSON_CONNECTION
33618 /* Exit array. */
33619 FC_FREE(field_addr.sub_location);
33620#endif /* FREECIV_JSON_CONNECTION */
33621 }
33622 }
33623 if (BV_ISSET(fields, 6)) {
33624 log_packet_detailed(" got field 'dest_tile'");
33625#ifdef FREECIV_JSON_CONNECTION
33626 field_addr.name = "dest_tile";
33627#endif /* FREECIV_JSON_CONNECTION */
33628 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
33629 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
33630 }
33631 }
33632
33633 if (NULL == old) {
33634 old = fc_malloc(sizeof(*old));
33635 *old = *real_packet;
33636 genhash_insert(*hash, old, old);
33637 } else {
33638 *old = *real_packet;
33639 }
33640
33641#endif /* FREECIV_DELTA_PROTOCOL */
33643}
33644
33645static int send_packet_unit_orders_100(struct connection *pc, const struct packet_unit_orders *packet)
33646{
33647 const struct packet_unit_orders *real_packet = packet;
33648 int e;
33649#ifdef FREECIV_DELTA_PROTOCOL
33651 struct packet_unit_orders *old;
33652 bool differ;
33653 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ORDERS;
33654#endif /* FREECIV_DELTA_PROTOCOL */
33656#ifdef FREECIV_JSON_CONNECTION
33657 struct plocation field_addr;
33658 {
33662 }
33663#endif /* FREECIV_JSON_CONNECTION */
33664
33665 log_packet_detailed("packet_unit_orders_100: sending info about ()");
33666
33667#ifdef FREECIV_DELTA_PROTOCOL
33668 if (NULL == *hash) {
33670 NULL, NULL, NULL, free);
33671 }
33672 BV_CLR_ALL(fields);
33673
33674 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33675 old = fc_malloc(sizeof(*old));
33676 *old = *real_packet;
33677 genhash_insert(*hash, old, old);
33678 memset(old, 0, sizeof(*old));
33679 }
33680 differ = (old->unit_id != real_packet->unit_id);
33681 if (differ) {
33682 BV_SET(fields, 0);
33683 }
33684
33685 differ = (old->src_tile != real_packet->src_tile);
33686 if (differ) {
33687 BV_SET(fields, 1);
33688 }
33689
33690 differ = (old->length != real_packet->length);
33691 if (differ) {
33692 BV_SET(fields, 2);
33693 }
33694
33695 if (packet->repeat) {
33696 BV_SET(fields, 3);
33697 }
33698
33699 if (packet->vigilant) {
33700 BV_SET(fields, 4);
33701 }
33702
33703 differ = (old->length != real_packet->length);
33704 if (!differ) {
33705 int i;
33706
33707 for (i = 0; i < real_packet->length; i++) {
33708 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
33709 if (differ) {
33710 break;
33711 }
33712 }
33713 }
33714 if (differ) {
33715 BV_SET(fields, 5);
33716 }
33717
33718 differ = (old->dest_tile != real_packet->dest_tile);
33719 if (differ) {
33720 BV_SET(fields, 6);
33721 }
33722
33723
33724#ifdef FREECIV_JSON_CONNECTION
33725 field_addr.name = "fields";
33726#endif /* FREECIV_JSON_CONNECTION */
33727 e = 0;
33728 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33729 if (e) {
33730 log_packet_detailed("fields bitvector error detected");
33731 }
33732
33733 if (BV_ISSET(fields, 0)) {
33734 log_packet_detailed(" field 'unit_id' has changed");
33735#ifdef FREECIV_JSON_CONNECTION
33736 field_addr.name = "unit_id";
33737#endif /* FREECIV_JSON_CONNECTION */
33738 e = 0;
33739 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
33740 if (e) {
33741 log_packet_detailed("'unit_id' field error detected");
33742 }
33743 }
33744 if (BV_ISSET(fields, 1)) {
33745 log_packet_detailed(" field 'src_tile' has changed");
33746#ifdef FREECIV_JSON_CONNECTION
33747 field_addr.name = "src_tile";
33748#endif /* FREECIV_JSON_CONNECTION */
33749 e = 0;
33750 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
33751 if (e) {
33752 log_packet_detailed("'src_tile' field error detected");
33753 }
33754 }
33755 if (BV_ISSET(fields, 2)) {
33756 log_packet_detailed(" field 'length' has changed");
33757#ifdef FREECIV_JSON_CONNECTION
33758 field_addr.name = "length";
33759#endif /* FREECIV_JSON_CONNECTION */
33760 e = 0;
33761 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
33762 if (e) {
33763 log_packet_detailed("'length' field error detected");
33764 }
33765 }
33766 /* field 3 is folded into the header */
33767 /* field 4 is folded into the header */
33768 if (BV_ISSET(fields, 5)) {
33769 log_packet_detailed(" field 'orders' has changed");
33770#ifdef FREECIV_JSON_CONNECTION
33771 field_addr.name = "orders";
33772#endif /* FREECIV_JSON_CONNECTION */
33773 e = 0;
33774 {
33775 int i;
33776
33777#ifdef FREECIV_JSON_CONNECTION
33778 /* Create the array. */
33779 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
33780
33781 /* Enter the array. */
33782 field_addr.sub_location = plocation_elem_new(0);
33783#endif /* FREECIV_JSON_CONNECTION */
33784
33785 for (i = 0; i < real_packet->length; i++) {
33786#ifdef FREECIV_JSON_CONNECTION
33787 /* Next array element. */
33788 field_addr.sub_location->number = i;
33789#endif /* FREECIV_JSON_CONNECTION */
33790
33791 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
33792 }
33793
33794#ifdef FREECIV_JSON_CONNECTION
33795 /* Exit array. */
33796 FC_FREE(field_addr.sub_location);
33797#endif /* FREECIV_JSON_CONNECTION */
33798 }
33799 if (e) {
33800 log_packet_detailed("'orders' field error detected");
33801 }
33802 }
33803 if (BV_ISSET(fields, 6)) {
33804 log_packet_detailed(" field 'dest_tile' has changed");
33805#ifdef FREECIV_JSON_CONNECTION
33806 field_addr.name = "dest_tile";
33807#endif /* FREECIV_JSON_CONNECTION */
33808 e = 0;
33809 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
33810 if (e) {
33811 log_packet_detailed("'dest_tile' field error detected");
33812 }
33813 }
33814
33815 *old = *real_packet;
33816#endif /* FREECIV_DELTA_PROTOCOL */
33817#ifndef FREECIV_DELTA_PROTOCOL
33818#ifdef FREECIV_JSON_CONNECTION
33819 field_addr.name = "unit_id";
33820#endif /* FREECIV_JSON_CONNECTION */
33821 e = 0;
33822 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
33823 if (e) {
33824 log_packet_detailed("'unit_id' field error detected");
33825 }
33826#ifdef FREECIV_JSON_CONNECTION
33827 field_addr.name = "src_tile";
33828#endif /* FREECIV_JSON_CONNECTION */
33829 e = 0;
33830 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
33831 if (e) {
33832 log_packet_detailed("'src_tile' field error detected");
33833 }
33834#ifdef FREECIV_JSON_CONNECTION
33835 field_addr.name = "length";
33836#endif /* FREECIV_JSON_CONNECTION */
33837 e = 0;
33838 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
33839 if (e) {
33840 log_packet_detailed("'length' field error detected");
33841 }
33842#ifdef FREECIV_JSON_CONNECTION
33843 field_addr.name = "repeat";
33844#endif /* FREECIV_JSON_CONNECTION */
33845 e = 0;
33846 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->repeat);
33847 if (e) {
33848 log_packet_detailed("'repeat' field error detected");
33849 }
33850#ifdef FREECIV_JSON_CONNECTION
33851 field_addr.name = "vigilant";
33852#endif /* FREECIV_JSON_CONNECTION */
33853 e = 0;
33854 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
33855 if (e) {
33856 log_packet_detailed("'vigilant' field error detected");
33857 }
33858#ifdef FREECIV_JSON_CONNECTION
33859 field_addr.name = "orders";
33860#endif /* FREECIV_JSON_CONNECTION */
33861 e = 0;
33862 {
33863 int i;
33864
33865#ifdef FREECIV_JSON_CONNECTION
33866 /* Create the array. */
33867 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
33868
33869 /* Enter the array. */
33870 field_addr.sub_location = plocation_elem_new(0);
33871#endif /* FREECIV_JSON_CONNECTION */
33872
33873 for (i = 0; i < real_packet->length; i++) {
33874#ifdef FREECIV_JSON_CONNECTION
33875 /* Next array element. */
33876 field_addr.sub_location->number = i;
33877#endif /* FREECIV_JSON_CONNECTION */
33878
33879 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
33880 }
33881
33882#ifdef FREECIV_JSON_CONNECTION
33883 /* Exit array. */
33884 FC_FREE(field_addr.sub_location);
33885#endif /* FREECIV_JSON_CONNECTION */
33886 }
33887 if (e) {
33888 log_packet_detailed("'orders' field error detected");
33889 }
33890#ifdef FREECIV_JSON_CONNECTION
33891 field_addr.name = "dest_tile";
33892#endif /* FREECIV_JSON_CONNECTION */
33893 e = 0;
33894 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
33895 if (e) {
33896 log_packet_detailed("'dest_tile' field error detected");
33897 }
33898
33899#endif
33901}
33902
33904{
33905 if (!pc->used) {
33906 log_error("WARNING: trying to send data to the closed connection %s",
33908 return -1;
33909 }
33910 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet != NULL, -1,
33911 "Handler for PACKET_UNIT_ORDERS not installed");
33912 return pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet(pc, packet);
33913}
33914
33915#ifdef FREECIV_DELTA_PROTOCOL
33916#define hash_packet_unit_server_side_agent_set_100 hash_const
33917
33918#define cmp_packet_unit_server_side_agent_set_100 cmp_const
33919
33921#endif /* FREECIV_DELTA_PROTOCOL */
33922
33924{
33925#ifdef FREECIV_DELTA_PROTOCOL
33928 struct genhash **hash = pc->phs.received + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
33929#endif /* FREECIV_DELTA_PROTOCOL */
33931#ifdef FREECIV_JSON_CONNECTION
33932 struct plocation field_addr;
33933 {
33937 }
33938#endif /* FREECIV_JSON_CONNECTION */
33939
33940#ifdef FREECIV_DELTA_PROTOCOL
33941#ifdef FREECIV_JSON_CONNECTION
33942 field_addr.name = "fields";
33943#endif /* FREECIV_JSON_CONNECTION */
33944 DIO_BV_GET(&din, &field_addr, fields);
33945
33946#else /* FREECIV_DELTA_PROTOCOL */
33947#ifdef FREECIV_JSON_CONNECTION
33948 field_addr.name = "unit_id";
33949#endif /* FREECIV_JSON_CONNECTION */
33950 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
33952 }
33953#ifdef FREECIV_JSON_CONNECTION
33954 field_addr.name = "agent";
33955#endif /* FREECIV_JSON_CONNECTION */
33956 {
33957 int readin;
33958
33959 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33961 }
33962 real_packet->agent = readin;
33963 }
33964#endif
33965 log_packet_detailed("packet_unit_server_side_agent_set_100: got info about ()");
33966
33967#ifdef FREECIV_DELTA_PROTOCOL
33968 if (NULL == *hash) {
33970 NULL, NULL, NULL, free);
33971 }
33972
33973 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
33974 *real_packet = *old;
33975 } else {
33976 log_packet_detailed(" no old info");
33977 memset(real_packet, 0, sizeof(*real_packet));
33978 }
33979
33980 if (BV_ISSET(fields, 0)) {
33981 log_packet_detailed(" got field 'unit_id'");
33982#ifdef FREECIV_JSON_CONNECTION
33983 field_addr.name = "unit_id";
33984#endif /* FREECIV_JSON_CONNECTION */
33985 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
33987 }
33988 }
33989 if (BV_ISSET(fields, 1)) {
33990 log_packet_detailed(" got field 'agent'");
33991#ifdef FREECIV_JSON_CONNECTION
33992 field_addr.name = "agent";
33993#endif /* FREECIV_JSON_CONNECTION */
33994 {
33995 int readin;
33996
33997 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33999 }
34000 real_packet->agent = readin;
34001 }
34002 }
34003
34004 if (NULL == old) {
34005 old = fc_malloc(sizeof(*old));
34006 *old = *real_packet;
34007 genhash_insert(*hash, old, old);
34008 } else {
34009 *old = *real_packet;
34010 }
34011
34012#endif /* FREECIV_DELTA_PROTOCOL */
34014}
34015
34017{
34018 const struct packet_unit_server_side_agent_set *real_packet = packet;
34019 int e;
34020#ifdef FREECIV_DELTA_PROTOCOL
34023 bool differ;
34024 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
34025#endif /* FREECIV_DELTA_PROTOCOL */
34027#ifdef FREECIV_JSON_CONNECTION
34028 struct plocation field_addr;
34029 {
34033 }
34034#endif /* FREECIV_JSON_CONNECTION */
34035
34036 log_packet_detailed("packet_unit_server_side_agent_set_100: sending info about ()");
34037
34038#ifdef FREECIV_DELTA_PROTOCOL
34039 if (NULL == *hash) {
34041 NULL, NULL, NULL, free);
34042 }
34043 BV_CLR_ALL(fields);
34044
34045 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
34046 old = fc_malloc(sizeof(*old));
34047 *old = *real_packet;
34048 genhash_insert(*hash, old, old);
34049 memset(old, 0, sizeof(*old));
34050 }
34051 differ = (old->unit_id != real_packet->unit_id);
34052 if (differ) {
34053 BV_SET(fields, 0);
34054 }
34055
34056 differ = (old->agent != real_packet->agent);
34057 if (differ) {
34058 BV_SET(fields, 1);
34059 }
34060
34061
34062#ifdef FREECIV_JSON_CONNECTION
34063 field_addr.name = "fields";
34064#endif /* FREECIV_JSON_CONNECTION */
34065 e = 0;
34066 e |= DIO_BV_PUT(&dout, &field_addr, fields);
34067 if (e) {
34068 log_packet_detailed("fields bitvector error detected");
34069 }
34070
34071 if (BV_ISSET(fields, 0)) {
34072 log_packet_detailed(" field 'unit_id' has changed");
34073#ifdef FREECIV_JSON_CONNECTION
34074 field_addr.name = "unit_id";
34075#endif /* FREECIV_JSON_CONNECTION */
34076 e = 0;
34077 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
34078 if (e) {
34079 log_packet_detailed("'unit_id' field error detected");
34080 }
34081 }
34082 if (BV_ISSET(fields, 1)) {
34083 log_packet_detailed(" field 'agent' has changed");
34084#ifdef FREECIV_JSON_CONNECTION
34085 field_addr.name = "agent";
34086#endif /* FREECIV_JSON_CONNECTION */
34087 e = 0;
34088 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
34089 if (e) {
34090 log_packet_detailed("'agent' field error detected");
34091 }
34092 }
34093
34094 *old = *real_packet;
34095#endif /* FREECIV_DELTA_PROTOCOL */
34096#ifndef FREECIV_DELTA_PROTOCOL
34097#ifdef FREECIV_JSON_CONNECTION
34098 field_addr.name = "unit_id";
34099#endif /* FREECIV_JSON_CONNECTION */
34100 e = 0;
34101 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
34102 if (e) {
34103 log_packet_detailed("'unit_id' field error detected");
34104 }
34105#ifdef FREECIV_JSON_CONNECTION
34106 field_addr.name = "agent";
34107#endif /* FREECIV_JSON_CONNECTION */
34108 e = 0;
34109 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
34110 if (e) {
34111 log_packet_detailed("'agent' field error detected");
34112 }
34113
34114#endif
34116}
34117
34119{
34120 if (!pc->used) {
34121 log_error("WARNING: trying to send data to the closed connection %s",
34123 return -1;
34124 }
34125 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet != NULL, -1,
34126 "Handler for PACKET_UNIT_SERVER_SIDE_AGENT_SET not installed");
34127 return pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet(pc, packet);
34128}
34129
34131{
34132 struct packet_unit_server_side_agent_set packet, *real_packet = &packet;
34133
34135 real_packet->agent = agent;
34136
34138}
34139
34140#ifdef FREECIV_DELTA_PROTOCOL
34141#define hash_packet_unit_action_query_100 hash_const
34142
34143#define cmp_packet_unit_action_query_100 cmp_const
34144
34146#endif /* FREECIV_DELTA_PROTOCOL */
34147
34149{
34150#ifdef FREECIV_DELTA_PROTOCOL
34152 struct packet_unit_action_query *old;
34153 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_QUERY;
34154#endif /* FREECIV_DELTA_PROTOCOL */
34156#ifdef FREECIV_JSON_CONNECTION
34157 struct plocation field_addr;
34158 {
34162 }
34163#endif /* FREECIV_JSON_CONNECTION */
34164
34165#ifdef FREECIV_DELTA_PROTOCOL
34166#ifdef FREECIV_JSON_CONNECTION
34167 field_addr.name = "fields";
34168#endif /* FREECIV_JSON_CONNECTION */
34169 DIO_BV_GET(&din, &field_addr, fields);
34170
34171#else /* FREECIV_DELTA_PROTOCOL */
34172#ifdef FREECIV_JSON_CONNECTION
34173 field_addr.name = "actor_id";
34174#endif /* FREECIV_JSON_CONNECTION */
34175 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
34177 }
34178#ifdef FREECIV_JSON_CONNECTION
34179 field_addr.name = "target_id";
34180#endif /* FREECIV_JSON_CONNECTION */
34181 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
34182 RECEIVE_PACKET_FIELD_ERROR(target_id);
34183 }
34184#ifdef FREECIV_JSON_CONNECTION
34185 field_addr.name = "action_type";
34186#endif /* FREECIV_JSON_CONNECTION */
34187 {
34188 int readin;
34189
34190 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34191 RECEIVE_PACKET_FIELD_ERROR(action_type);
34192 }
34193 real_packet->action_type = readin;
34194 }
34195#ifdef FREECIV_JSON_CONNECTION
34196 field_addr.name = "request_kind";
34197#endif /* FREECIV_JSON_CONNECTION */
34198 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
34199 RECEIVE_PACKET_FIELD_ERROR(request_kind);
34200 }
34201#endif
34202 log_packet_detailed("packet_unit_action_query_100: got info about ()");
34203
34204#ifdef FREECIV_DELTA_PROTOCOL
34205 if (NULL == *hash) {
34207 NULL, NULL, NULL, free);
34208 }
34209
34210 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
34211 *real_packet = *old;
34212 } else {
34213 log_packet_detailed(" no old info");
34214 memset(real_packet, 0, sizeof(*real_packet));
34215 }
34216
34217 if (BV_ISSET(fields, 0)) {
34218 log_packet_detailed(" got field 'actor_id'");
34219#ifdef FREECIV_JSON_CONNECTION
34220 field_addr.name = "actor_id";
34221#endif /* FREECIV_JSON_CONNECTION */
34222 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
34224 }
34225 }
34226 if (BV_ISSET(fields, 1)) {
34227 log_packet_detailed(" got field 'target_id'");
34228#ifdef FREECIV_JSON_CONNECTION
34229 field_addr.name = "target_id";
34230#endif /* FREECIV_JSON_CONNECTION */
34231 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
34232 RECEIVE_PACKET_FIELD_ERROR(target_id);
34233 }
34234 }
34235 if (BV_ISSET(fields, 2)) {
34236 log_packet_detailed(" got field 'action_type'");
34237#ifdef FREECIV_JSON_CONNECTION
34238 field_addr.name = "action_type";
34239#endif /* FREECIV_JSON_CONNECTION */
34240 {
34241 int readin;
34242
34243 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34244 RECEIVE_PACKET_FIELD_ERROR(action_type);
34245 }
34246 real_packet->action_type = readin;
34247 }
34248 }
34249 if (BV_ISSET(fields, 3)) {
34250 log_packet_detailed(" got field 'request_kind'");
34251#ifdef FREECIV_JSON_CONNECTION
34252 field_addr.name = "request_kind";
34253#endif /* FREECIV_JSON_CONNECTION */
34254 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
34255 RECEIVE_PACKET_FIELD_ERROR(request_kind);
34256 }
34257 }
34258
34259 if (NULL == old) {
34260 old = fc_malloc(sizeof(*old));
34261 *old = *real_packet;
34262 genhash_insert(*hash, old, old);
34263 } else {
34264 *old = *real_packet;
34265 }
34266
34267#endif /* FREECIV_DELTA_PROTOCOL */
34269}
34270
34272{
34273 const struct packet_unit_action_query *real_packet = packet;
34274 int e;
34275#ifdef FREECIV_DELTA_PROTOCOL
34277 struct packet_unit_action_query *old;
34278 bool differ;
34279 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_QUERY;
34280#endif /* FREECIV_DELTA_PROTOCOL */
34282#ifdef FREECIV_JSON_CONNECTION
34283 struct plocation field_addr;
34284 {
34288 }
34289#endif /* FREECIV_JSON_CONNECTION */
34290
34291 log_packet_detailed("packet_unit_action_query_100: sending info about ()");
34292
34293#ifdef FREECIV_DELTA_PROTOCOL
34294 if (NULL == *hash) {
34296 NULL, NULL, NULL, free);
34297 }
34298 BV_CLR_ALL(fields);
34299
34300 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
34301 old = fc_malloc(sizeof(*old));
34302 *old = *real_packet;
34303 genhash_insert(*hash, old, old);
34304 memset(old, 0, sizeof(*old));
34305 }
34306 differ = (old->actor_id != real_packet->actor_id);
34307 if (differ) {
34308 BV_SET(fields, 0);
34309 }
34310
34311 differ = (old->target_id != real_packet->target_id);
34312 if (differ) {
34313 BV_SET(fields, 1);
34314 }
34315
34316 differ = (old->action_type != real_packet->action_type);
34317 if (differ) {
34318 BV_SET(fields, 2);
34319 }
34320
34321 differ = (old->request_kind != real_packet->request_kind);
34322 if (differ) {
34323 BV_SET(fields, 3);
34324 }
34325
34326
34327#ifdef FREECIV_JSON_CONNECTION
34328 field_addr.name = "fields";
34329#endif /* FREECIV_JSON_CONNECTION */
34330 e = 0;
34331 e |= DIO_BV_PUT(&dout, &field_addr, fields);
34332 if (e) {
34333 log_packet_detailed("fields bitvector error detected");
34334 }
34335
34336 if (BV_ISSET(fields, 0)) {
34337 log_packet_detailed(" field 'actor_id' has changed");
34338#ifdef FREECIV_JSON_CONNECTION
34339 field_addr.name = "actor_id";
34340#endif /* FREECIV_JSON_CONNECTION */
34341 e = 0;
34342 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
34343 if (e) {
34344 log_packet_detailed("'actor_id' field error detected");
34345 }
34346 }
34347 if (BV_ISSET(fields, 1)) {
34348 log_packet_detailed(" field 'target_id' has changed");
34349#ifdef FREECIV_JSON_CONNECTION
34350 field_addr.name = "target_id";
34351#endif /* FREECIV_JSON_CONNECTION */
34352 e = 0;
34353 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
34354 if (e) {
34355 log_packet_detailed("'target_id' field error detected");
34356 }
34357 }
34358 if (BV_ISSET(fields, 2)) {
34359 log_packet_detailed(" field 'action_type' has changed");
34360#ifdef FREECIV_JSON_CONNECTION
34361 field_addr.name = "action_type";
34362#endif /* FREECIV_JSON_CONNECTION */
34363 e = 0;
34364 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
34365 if (e) {
34366 log_packet_detailed("'action_type' field error detected");
34367 }
34368 }
34369 if (BV_ISSET(fields, 3)) {
34370 log_packet_detailed(" field 'request_kind' has changed");
34371#ifdef FREECIV_JSON_CONNECTION
34372 field_addr.name = "request_kind";
34373#endif /* FREECIV_JSON_CONNECTION */
34374 e = 0;
34375 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
34376 if (e) {
34377 log_packet_detailed("'request_kind' field error detected");
34378 }
34379 }
34380
34381 *old = *real_packet;
34382#endif /* FREECIV_DELTA_PROTOCOL */
34383#ifndef FREECIV_DELTA_PROTOCOL
34384#ifdef FREECIV_JSON_CONNECTION
34385 field_addr.name = "actor_id";
34386#endif /* FREECIV_JSON_CONNECTION */
34387 e = 0;
34388 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
34389 if (e) {
34390 log_packet_detailed("'actor_id' field error detected");
34391 }
34392#ifdef FREECIV_JSON_CONNECTION
34393 field_addr.name = "target_id";
34394#endif /* FREECIV_JSON_CONNECTION */
34395 e = 0;
34396 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
34397 if (e) {
34398 log_packet_detailed("'target_id' field error detected");
34399 }
34400#ifdef FREECIV_JSON_CONNECTION
34401 field_addr.name = "action_type";
34402#endif /* FREECIV_JSON_CONNECTION */
34403 e = 0;
34404 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
34405 if (e) {
34406 log_packet_detailed("'action_type' field error detected");
34407 }
34408#ifdef FREECIV_JSON_CONNECTION
34409 field_addr.name = "request_kind";
34410#endif /* FREECIV_JSON_CONNECTION */
34411 e = 0;
34412 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
34413 if (e) {
34414 log_packet_detailed("'request_kind' field error detected");
34415 }
34416
34417#endif
34419}
34420
34422{
34423 if (!pc->used) {
34424 log_error("WARNING: trying to send data to the closed connection %s",
34426 return -1;
34427 }
34428 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet != NULL, -1,
34429 "Handler for PACKET_UNIT_ACTION_QUERY not installed");
34430 return pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet(pc, packet);
34431}
34432
34433int dsend_packet_unit_action_query(struct connection *pc, int actor_id, int target_id, action_id action_type, int request_kind)
34434{
34435 struct packet_unit_action_query packet, *real_packet = &packet;
34436
34438 real_packet->target_id = target_id;
34439 real_packet->action_type = action_type;
34440 real_packet->request_kind = request_kind;
34441
34443}
34444
34445#ifdef FREECIV_DELTA_PROTOCOL
34446#define hash_packet_unit_type_upgrade_100 hash_const
34447
34448#define cmp_packet_unit_type_upgrade_100 cmp_const
34449
34451#endif /* FREECIV_DELTA_PROTOCOL */
34452
34454{
34455#ifdef FREECIV_DELTA_PROTOCOL
34457 struct packet_unit_type_upgrade *old;
34458 struct genhash **hash = pc->phs.received + PACKET_UNIT_TYPE_UPGRADE;
34459#endif /* FREECIV_DELTA_PROTOCOL */
34461#ifdef FREECIV_JSON_CONNECTION
34462 struct plocation field_addr;
34463 {
34467 }
34468#endif /* FREECIV_JSON_CONNECTION */
34469
34470#ifdef FREECIV_DELTA_PROTOCOL
34471#ifdef FREECIV_JSON_CONNECTION
34472 field_addr.name = "fields";
34473#endif /* FREECIV_JSON_CONNECTION */
34474 DIO_BV_GET(&din, &field_addr, fields);
34475
34476#else /* FREECIV_DELTA_PROTOCOL */
34477#ifdef FREECIV_JSON_CONNECTION
34478 field_addr.name = "type";
34479#endif /* FREECIV_JSON_CONNECTION */
34480 {
34481 int readin;
34482
34483 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34485 }
34486 real_packet->type = readin;
34487 }
34488#endif
34489 log_packet_detailed("packet_unit_type_upgrade_100: got info about ()");
34490
34491#ifdef FREECIV_DELTA_PROTOCOL
34492 if (NULL == *hash) {
34494 NULL, NULL, NULL, free);
34495 }
34496
34497 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
34498 *real_packet = *old;
34499 } else {
34500 log_packet_detailed(" no old info");
34501 memset(real_packet, 0, sizeof(*real_packet));
34502 }
34503
34504 if (BV_ISSET(fields, 0)) {
34505 log_packet_detailed(" got field 'type'");
34506#ifdef FREECIV_JSON_CONNECTION
34507 field_addr.name = "type";
34508#endif /* FREECIV_JSON_CONNECTION */
34509 {
34510 int readin;
34511
34512 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34514 }
34515 real_packet->type = readin;
34516 }
34517 }
34518
34519 if (NULL == old) {
34520 old = fc_malloc(sizeof(*old));
34521 *old = *real_packet;
34522 genhash_insert(*hash, old, old);
34523 } else {
34524 *old = *real_packet;
34525 }
34526
34527#endif /* FREECIV_DELTA_PROTOCOL */
34529}
34530
34532{
34533 const struct packet_unit_type_upgrade *real_packet = packet;
34534 int e;
34535#ifdef FREECIV_DELTA_PROTOCOL
34537 struct packet_unit_type_upgrade *old;
34538 bool differ;
34539 struct genhash **hash = pc->phs.sent + PACKET_UNIT_TYPE_UPGRADE;
34540#endif /* FREECIV_DELTA_PROTOCOL */
34542#ifdef FREECIV_JSON_CONNECTION
34543 struct plocation field_addr;
34544 {
34548 }
34549#endif /* FREECIV_JSON_CONNECTION */
34550
34551 log_packet_detailed("packet_unit_type_upgrade_100: sending info about ()");
34552
34553#ifdef FREECIV_DELTA_PROTOCOL
34554 if (NULL == *hash) {
34556 NULL, NULL, NULL, free);
34557 }
34558 BV_CLR_ALL(fields);
34559
34560 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
34561 old = fc_malloc(sizeof(*old));
34562 *old = *real_packet;
34563 genhash_insert(*hash, old, old);
34564 memset(old, 0, sizeof(*old));
34565 }
34566 differ = (old->type != real_packet->type);
34567 if (differ) {
34568 BV_SET(fields, 0);
34569 }
34570
34571
34572#ifdef FREECIV_JSON_CONNECTION
34573 field_addr.name = "fields";
34574#endif /* FREECIV_JSON_CONNECTION */
34575 e = 0;
34576 e |= DIO_BV_PUT(&dout, &field_addr, fields);
34577 if (e) {
34578 log_packet_detailed("fields bitvector error detected");
34579 }
34580
34581 if (BV_ISSET(fields, 0)) {
34582 log_packet_detailed(" field 'type' has changed");
34583#ifdef FREECIV_JSON_CONNECTION
34584 field_addr.name = "type";
34585#endif /* FREECIV_JSON_CONNECTION */
34586 e = 0;
34587 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
34588 if (e) {
34589 log_packet_detailed("'type' field error detected");
34590 }
34591 }
34592
34593 *old = *real_packet;
34594#endif /* FREECIV_DELTA_PROTOCOL */
34595#ifndef FREECIV_DELTA_PROTOCOL
34596#ifdef FREECIV_JSON_CONNECTION
34597 field_addr.name = "type";
34598#endif /* FREECIV_JSON_CONNECTION */
34599 e = 0;
34600 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
34601 if (e) {
34602 log_packet_detailed("'type' field error detected");
34603 }
34604
34605#endif
34607}
34608
34610{
34611 if (!pc->used) {
34612 log_error("WARNING: trying to send data to the closed connection %s",
34614 return -1;
34615 }
34616 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet != NULL, -1,
34617 "Handler for PACKET_UNIT_TYPE_UPGRADE not installed");
34618 return pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet(pc, packet);
34619}
34620
34622{
34623 struct packet_unit_type_upgrade packet, *real_packet = &packet;
34624
34626
34628}
34629
34630#ifdef FREECIV_DELTA_PROTOCOL
34631#define hash_packet_unit_do_action_100 hash_const
34632
34633#define cmp_packet_unit_do_action_100 cmp_const
34634
34636#endif /* FREECIV_DELTA_PROTOCOL */
34637
34639{
34640#ifdef FREECIV_DELTA_PROTOCOL
34642 struct packet_unit_do_action *old;
34643 struct genhash **hash = pc->phs.received + PACKET_UNIT_DO_ACTION;
34644#endif /* FREECIV_DELTA_PROTOCOL */
34646#ifdef FREECIV_JSON_CONNECTION
34647 struct plocation field_addr;
34648 {
34652 }
34653#endif /* FREECIV_JSON_CONNECTION */
34654
34655#ifdef FREECIV_DELTA_PROTOCOL
34656#ifdef FREECIV_JSON_CONNECTION
34657 field_addr.name = "fields";
34658#endif /* FREECIV_JSON_CONNECTION */
34659 DIO_BV_GET(&din, &field_addr, fields);
34660
34661#else /* FREECIV_DELTA_PROTOCOL */
34662#ifdef FREECIV_JSON_CONNECTION
34663 field_addr.name = "actor_id";
34664#endif /* FREECIV_JSON_CONNECTION */
34665 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
34667 }
34668#ifdef FREECIV_JSON_CONNECTION
34669 field_addr.name = "target_id";
34670#endif /* FREECIV_JSON_CONNECTION */
34671 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
34672 RECEIVE_PACKET_FIELD_ERROR(target_id);
34673 }
34674#ifdef FREECIV_JSON_CONNECTION
34675 field_addr.name = "sub_tgt_id";
34676#endif /* FREECIV_JSON_CONNECTION */
34677 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
34678 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
34679 }
34680#ifdef FREECIV_JSON_CONNECTION
34681 field_addr.name = "name";
34682#endif /* FREECIV_JSON_CONNECTION */
34683 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
34685 }
34686#ifdef FREECIV_JSON_CONNECTION
34687 field_addr.name = "action_type";
34688#endif /* FREECIV_JSON_CONNECTION */
34689 {
34690 int readin;
34691
34692 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34693 RECEIVE_PACKET_FIELD_ERROR(action_type);
34694 }
34695 real_packet->action_type = readin;
34696 }
34697#endif
34698 log_packet_detailed("packet_unit_do_action_100: got info about ()");
34699
34700#ifdef FREECIV_DELTA_PROTOCOL
34701 if (NULL == *hash) {
34703 NULL, NULL, NULL, free);
34704 }
34705
34706 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
34707 *real_packet = *old;
34708 } else {
34709 log_packet_detailed(" no old info");
34710 memset(real_packet, 0, sizeof(*real_packet));
34711 }
34712
34713 if (BV_ISSET(fields, 0)) {
34714 log_packet_detailed(" got field 'actor_id'");
34715#ifdef FREECIV_JSON_CONNECTION
34716 field_addr.name = "actor_id";
34717#endif /* FREECIV_JSON_CONNECTION */
34718 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
34720 }
34721 }
34722 if (BV_ISSET(fields, 1)) {
34723 log_packet_detailed(" got field 'target_id'");
34724#ifdef FREECIV_JSON_CONNECTION
34725 field_addr.name = "target_id";
34726#endif /* FREECIV_JSON_CONNECTION */
34727 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
34728 RECEIVE_PACKET_FIELD_ERROR(target_id);
34729 }
34730 }
34731 if (BV_ISSET(fields, 2)) {
34732 log_packet_detailed(" got field 'sub_tgt_id'");
34733#ifdef FREECIV_JSON_CONNECTION
34734 field_addr.name = "sub_tgt_id";
34735#endif /* FREECIV_JSON_CONNECTION */
34736 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
34737 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
34738 }
34739 }
34740 if (BV_ISSET(fields, 3)) {
34741 log_packet_detailed(" got field 'name'");
34742#ifdef FREECIV_JSON_CONNECTION
34743 field_addr.name = "name";
34744#endif /* FREECIV_JSON_CONNECTION */
34745 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
34747 }
34748 }
34749 if (BV_ISSET(fields, 4)) {
34750 log_packet_detailed(" got field 'action_type'");
34751#ifdef FREECIV_JSON_CONNECTION
34752 field_addr.name = "action_type";
34753#endif /* FREECIV_JSON_CONNECTION */
34754 {
34755 int readin;
34756
34757 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34758 RECEIVE_PACKET_FIELD_ERROR(action_type);
34759 }
34760 real_packet->action_type = readin;
34761 }
34762 }
34763
34764 if (NULL == old) {
34765 old = fc_malloc(sizeof(*old));
34766 *old = *real_packet;
34767 genhash_insert(*hash, old, old);
34768 } else {
34769 *old = *real_packet;
34770 }
34771
34772#endif /* FREECIV_DELTA_PROTOCOL */
34774}
34775
34777{
34778 const struct packet_unit_do_action *real_packet = packet;
34779 int e;
34780#ifdef FREECIV_DELTA_PROTOCOL
34782 struct packet_unit_do_action *old;
34783 bool differ;
34784 struct genhash **hash = pc->phs.sent + PACKET_UNIT_DO_ACTION;
34785#endif /* FREECIV_DELTA_PROTOCOL */
34787#ifdef FREECIV_JSON_CONNECTION
34788 struct plocation field_addr;
34789 {
34793 }
34794#endif /* FREECIV_JSON_CONNECTION */
34795
34796 log_packet_detailed("packet_unit_do_action_100: sending info about ()");
34797
34798#ifdef FREECIV_DELTA_PROTOCOL
34799 if (NULL == *hash) {
34801 NULL, NULL, NULL, free);
34802 }
34803 BV_CLR_ALL(fields);
34804
34805 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
34806 old = fc_malloc(sizeof(*old));
34807 *old = *real_packet;
34808 genhash_insert(*hash, old, old);
34809 memset(old, 0, sizeof(*old));
34810 }
34811 differ = (old->actor_id != real_packet->actor_id);
34812 if (differ) {
34813 BV_SET(fields, 0);
34814 }
34815
34816 differ = (old->target_id != real_packet->target_id);
34817 if (differ) {
34818 BV_SET(fields, 1);
34819 }
34820
34821 differ = (old->sub_tgt_id != real_packet->sub_tgt_id);
34822 if (differ) {
34823 BV_SET(fields, 2);
34824 }
34825
34826 differ = (strcmp(old->name, real_packet->name) != 0);
34827 if (differ) {
34828 BV_SET(fields, 3);
34829 }
34830
34831 differ = (old->action_type != real_packet->action_type);
34832 if (differ) {
34833 BV_SET(fields, 4);
34834 }
34835
34836
34837#ifdef FREECIV_JSON_CONNECTION
34838 field_addr.name = "fields";
34839#endif /* FREECIV_JSON_CONNECTION */
34840 e = 0;
34841 e |= DIO_BV_PUT(&dout, &field_addr, fields);
34842 if (e) {
34843 log_packet_detailed("fields bitvector error detected");
34844 }
34845
34846 if (BV_ISSET(fields, 0)) {
34847 log_packet_detailed(" field 'actor_id' has changed");
34848#ifdef FREECIV_JSON_CONNECTION
34849 field_addr.name = "actor_id";
34850#endif /* FREECIV_JSON_CONNECTION */
34851 e = 0;
34852 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
34853 if (e) {
34854 log_packet_detailed("'actor_id' field error detected");
34855 }
34856 }
34857 if (BV_ISSET(fields, 1)) {
34858 log_packet_detailed(" field 'target_id' has changed");
34859#ifdef FREECIV_JSON_CONNECTION
34860 field_addr.name = "target_id";
34861#endif /* FREECIV_JSON_CONNECTION */
34862 e = 0;
34863 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
34864 if (e) {
34865 log_packet_detailed("'target_id' field error detected");
34866 }
34867 }
34868 if (BV_ISSET(fields, 2)) {
34869 log_packet_detailed(" field 'sub_tgt_id' has changed");
34870#ifdef FREECIV_JSON_CONNECTION
34871 field_addr.name = "sub_tgt_id";
34872#endif /* FREECIV_JSON_CONNECTION */
34873 e = 0;
34874 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
34875 if (e) {
34876 log_packet_detailed("'sub_tgt_id' field error detected");
34877 }
34878 }
34879 if (BV_ISSET(fields, 3)) {
34880 log_packet_detailed(" field 'name' has changed");
34881#ifdef FREECIV_JSON_CONNECTION
34882 field_addr.name = "name";
34883#endif /* FREECIV_JSON_CONNECTION */
34884 e = 0;
34885 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
34886 if (e) {
34887 log_packet_detailed("'name' field error detected");
34888 }
34889 }
34890 if (BV_ISSET(fields, 4)) {
34891 log_packet_detailed(" field 'action_type' has changed");
34892#ifdef FREECIV_JSON_CONNECTION
34893 field_addr.name = "action_type";
34894#endif /* FREECIV_JSON_CONNECTION */
34895 e = 0;
34896 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
34897 if (e) {
34898 log_packet_detailed("'action_type' field error detected");
34899 }
34900 }
34901
34902 *old = *real_packet;
34903#endif /* FREECIV_DELTA_PROTOCOL */
34904#ifndef FREECIV_DELTA_PROTOCOL
34905#ifdef FREECIV_JSON_CONNECTION
34906 field_addr.name = "actor_id";
34907#endif /* FREECIV_JSON_CONNECTION */
34908 e = 0;
34909 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
34910 if (e) {
34911 log_packet_detailed("'actor_id' field error detected");
34912 }
34913#ifdef FREECIV_JSON_CONNECTION
34914 field_addr.name = "target_id";
34915#endif /* FREECIV_JSON_CONNECTION */
34916 e = 0;
34917 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
34918 if (e) {
34919 log_packet_detailed("'target_id' field error detected");
34920 }
34921#ifdef FREECIV_JSON_CONNECTION
34922 field_addr.name = "sub_tgt_id";
34923#endif /* FREECIV_JSON_CONNECTION */
34924 e = 0;
34925 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
34926 if (e) {
34927 log_packet_detailed("'sub_tgt_id' field error detected");
34928 }
34929#ifdef FREECIV_JSON_CONNECTION
34930 field_addr.name = "name";
34931#endif /* FREECIV_JSON_CONNECTION */
34932 e = 0;
34933 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
34934 if (e) {
34935 log_packet_detailed("'name' field error detected");
34936 }
34937#ifdef FREECIV_JSON_CONNECTION
34938 field_addr.name = "action_type";
34939#endif /* FREECIV_JSON_CONNECTION */
34940 e = 0;
34941 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
34942 if (e) {
34943 log_packet_detailed("'action_type' field error detected");
34944 }
34945
34946#endif
34948}
34949
34951{
34952 if (!pc->used) {
34953 log_error("WARNING: trying to send data to the closed connection %s",
34955 return -1;
34956 }
34957 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet != NULL, -1,
34958 "Handler for PACKET_UNIT_DO_ACTION not installed");
34959 return pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet(pc, packet);
34960}
34961
34962int dsend_packet_unit_do_action(struct connection *pc, int actor_id, int target_id, int sub_tgt_id, const char *name, action_id action_type)
34963{
34964 struct packet_unit_do_action packet, *real_packet = &packet;
34965
34967 real_packet->target_id = target_id;
34968 real_packet->sub_tgt_id = sub_tgt_id;
34969 sz_strlcpy(real_packet->name, name);
34970 real_packet->action_type = action_type;
34971
34973}
34974
34975#ifdef FREECIV_DELTA_PROTOCOL
34976#define hash_packet_unit_action_answer_100 hash_const
34977
34978#define cmp_packet_unit_action_answer_100 cmp_const
34979
34981#endif /* FREECIV_DELTA_PROTOCOL */
34982
34984{
34985#ifdef FREECIV_DELTA_PROTOCOL
34987 struct packet_unit_action_answer *old;
34988 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_ANSWER;
34989#endif /* FREECIV_DELTA_PROTOCOL */
34991#ifdef FREECIV_JSON_CONNECTION
34992 struct plocation field_addr;
34993 {
34997 }
34998#endif /* FREECIV_JSON_CONNECTION */
34999
35000#ifdef FREECIV_DELTA_PROTOCOL
35001#ifdef FREECIV_JSON_CONNECTION
35002 field_addr.name = "fields";
35003#endif /* FREECIV_JSON_CONNECTION */
35004 DIO_BV_GET(&din, &field_addr, fields);
35005
35006#else /* FREECIV_DELTA_PROTOCOL */
35007#ifdef FREECIV_JSON_CONNECTION
35008 field_addr.name = "actor_id";
35009#endif /* FREECIV_JSON_CONNECTION */
35010 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
35012 }
35013#ifdef FREECIV_JSON_CONNECTION
35014 field_addr.name = "target_id";
35015#endif /* FREECIV_JSON_CONNECTION */
35016 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
35017 RECEIVE_PACKET_FIELD_ERROR(target_id);
35018 }
35019#ifdef FREECIV_JSON_CONNECTION
35020 field_addr.name = "cost";
35021#endif /* FREECIV_JSON_CONNECTION */
35022 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
35024 }
35025#ifdef FREECIV_JSON_CONNECTION
35026 field_addr.name = "action_type";
35027#endif /* FREECIV_JSON_CONNECTION */
35028 {
35029 int readin;
35030
35031 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
35032 RECEIVE_PACKET_FIELD_ERROR(action_type);
35033 }
35034 real_packet->action_type = readin;
35035 }
35036#ifdef FREECIV_JSON_CONNECTION
35037 field_addr.name = "request_kind";
35038#endif /* FREECIV_JSON_CONNECTION */
35039 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
35040 RECEIVE_PACKET_FIELD_ERROR(request_kind);
35041 }
35042#endif
35043 log_packet_detailed("packet_unit_action_answer_100: got info about ()");
35044
35045#ifdef FREECIV_DELTA_PROTOCOL
35046 if (NULL == *hash) {
35048 NULL, NULL, NULL, free);
35049 }
35050
35051 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35052 *real_packet = *old;
35053 } else {
35054 log_packet_detailed(" no old info");
35055 memset(real_packet, 0, sizeof(*real_packet));
35056 }
35057
35058 if (BV_ISSET(fields, 0)) {
35059 log_packet_detailed(" got field 'actor_id'");
35060#ifdef FREECIV_JSON_CONNECTION
35061 field_addr.name = "actor_id";
35062#endif /* FREECIV_JSON_CONNECTION */
35063 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
35065 }
35066 }
35067 if (BV_ISSET(fields, 1)) {
35068 log_packet_detailed(" got field 'target_id'");
35069#ifdef FREECIV_JSON_CONNECTION
35070 field_addr.name = "target_id";
35071#endif /* FREECIV_JSON_CONNECTION */
35072 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
35073 RECEIVE_PACKET_FIELD_ERROR(target_id);
35074 }
35075 }
35076 if (BV_ISSET(fields, 2)) {
35077 log_packet_detailed(" got field 'cost'");
35078#ifdef FREECIV_JSON_CONNECTION
35079 field_addr.name = "cost";
35080#endif /* FREECIV_JSON_CONNECTION */
35081 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
35083 }
35084 }
35085 if (BV_ISSET(fields, 3)) {
35086 log_packet_detailed(" got field 'action_type'");
35087#ifdef FREECIV_JSON_CONNECTION
35088 field_addr.name = "action_type";
35089#endif /* FREECIV_JSON_CONNECTION */
35090 {
35091 int readin;
35092
35093 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
35094 RECEIVE_PACKET_FIELD_ERROR(action_type);
35095 }
35096 real_packet->action_type = readin;
35097 }
35098 }
35099 if (BV_ISSET(fields, 4)) {
35100 log_packet_detailed(" got field 'request_kind'");
35101#ifdef FREECIV_JSON_CONNECTION
35102 field_addr.name = "request_kind";
35103#endif /* FREECIV_JSON_CONNECTION */
35104 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
35105 RECEIVE_PACKET_FIELD_ERROR(request_kind);
35106 }
35107 }
35108
35109 if (NULL == old) {
35110 old = fc_malloc(sizeof(*old));
35111 *old = *real_packet;
35112 genhash_insert(*hash, old, old);
35113 } else {
35114 *old = *real_packet;
35115 }
35116
35117#endif /* FREECIV_DELTA_PROTOCOL */
35119}
35120
35122{
35123 const struct packet_unit_action_answer *real_packet = packet;
35124 int e;
35125#ifdef FREECIV_DELTA_PROTOCOL
35127 struct packet_unit_action_answer *old;
35128 bool differ;
35129 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_ANSWER;
35130#endif /* FREECIV_DELTA_PROTOCOL */
35132#ifdef FREECIV_JSON_CONNECTION
35133 struct plocation field_addr;
35134 {
35138 }
35139#endif /* FREECIV_JSON_CONNECTION */
35140
35141 log_packet_detailed("packet_unit_action_answer_100: sending info about ()");
35142
35143#ifdef FREECIV_DELTA_PROTOCOL
35144 if (NULL == *hash) {
35146 NULL, NULL, NULL, free);
35147 }
35148 BV_CLR_ALL(fields);
35149
35150 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35151 old = fc_malloc(sizeof(*old));
35152 *old = *real_packet;
35153 genhash_insert(*hash, old, old);
35154 memset(old, 0, sizeof(*old));
35155 }
35156 differ = (old->actor_id != real_packet->actor_id);
35157 if (differ) {
35158 BV_SET(fields, 0);
35159 }
35160
35161 differ = (old->target_id != real_packet->target_id);
35162 if (differ) {
35163 BV_SET(fields, 1);
35164 }
35165
35166 differ = (old->cost != real_packet->cost);
35167 if (differ) {
35168 BV_SET(fields, 2);
35169 }
35170
35171 differ = (old->action_type != real_packet->action_type);
35172 if (differ) {
35173 BV_SET(fields, 3);
35174 }
35175
35176 differ = (old->request_kind != real_packet->request_kind);
35177 if (differ) {
35178 BV_SET(fields, 4);
35179 }
35180
35181
35182#ifdef FREECIV_JSON_CONNECTION
35183 field_addr.name = "fields";
35184#endif /* FREECIV_JSON_CONNECTION */
35185 e = 0;
35186 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35187 if (e) {
35188 log_packet_detailed("fields bitvector error detected");
35189 }
35190
35191 if (BV_ISSET(fields, 0)) {
35192 log_packet_detailed(" field 'actor_id' has changed");
35193#ifdef FREECIV_JSON_CONNECTION
35194 field_addr.name = "actor_id";
35195#endif /* FREECIV_JSON_CONNECTION */
35196 e = 0;
35197 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
35198 if (e) {
35199 log_packet_detailed("'actor_id' field error detected");
35200 }
35201 }
35202 if (BV_ISSET(fields, 1)) {
35203 log_packet_detailed(" field 'target_id' has changed");
35204#ifdef FREECIV_JSON_CONNECTION
35205 field_addr.name = "target_id";
35206#endif /* FREECIV_JSON_CONNECTION */
35207 e = 0;
35208 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
35209 if (e) {
35210 log_packet_detailed("'target_id' field error detected");
35211 }
35212 }
35213 if (BV_ISSET(fields, 2)) {
35214 log_packet_detailed(" field 'cost' has changed");
35215#ifdef FREECIV_JSON_CONNECTION
35216 field_addr.name = "cost";
35217#endif /* FREECIV_JSON_CONNECTION */
35218 e = 0;
35219 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
35220 if (e) {
35221 log_packet_detailed("'cost' field error detected");
35222 }
35223 }
35224 if (BV_ISSET(fields, 3)) {
35225 log_packet_detailed(" field 'action_type' has changed");
35226#ifdef FREECIV_JSON_CONNECTION
35227 field_addr.name = "action_type";
35228#endif /* FREECIV_JSON_CONNECTION */
35229 e = 0;
35230 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
35231 if (e) {
35232 log_packet_detailed("'action_type' field error detected");
35233 }
35234 }
35235 if (BV_ISSET(fields, 4)) {
35236 log_packet_detailed(" field 'request_kind' has changed");
35237#ifdef FREECIV_JSON_CONNECTION
35238 field_addr.name = "request_kind";
35239#endif /* FREECIV_JSON_CONNECTION */
35240 e = 0;
35241 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
35242 if (e) {
35243 log_packet_detailed("'request_kind' field error detected");
35244 }
35245 }
35246
35247 *old = *real_packet;
35248#endif /* FREECIV_DELTA_PROTOCOL */
35249#ifndef FREECIV_DELTA_PROTOCOL
35250#ifdef FREECIV_JSON_CONNECTION
35251 field_addr.name = "actor_id";
35252#endif /* FREECIV_JSON_CONNECTION */
35253 e = 0;
35254 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
35255 if (e) {
35256 log_packet_detailed("'actor_id' field error detected");
35257 }
35258#ifdef FREECIV_JSON_CONNECTION
35259 field_addr.name = "target_id";
35260#endif /* FREECIV_JSON_CONNECTION */
35261 e = 0;
35262 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
35263 if (e) {
35264 log_packet_detailed("'target_id' field error detected");
35265 }
35266#ifdef FREECIV_JSON_CONNECTION
35267 field_addr.name = "cost";
35268#endif /* FREECIV_JSON_CONNECTION */
35269 e = 0;
35270 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
35271 if (e) {
35272 log_packet_detailed("'cost' field error detected");
35273 }
35274#ifdef FREECIV_JSON_CONNECTION
35275 field_addr.name = "action_type";
35276#endif /* FREECIV_JSON_CONNECTION */
35277 e = 0;
35278 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
35279 if (e) {
35280 log_packet_detailed("'action_type' field error detected");
35281 }
35282#ifdef FREECIV_JSON_CONNECTION
35283 field_addr.name = "request_kind";
35284#endif /* FREECIV_JSON_CONNECTION */
35285 e = 0;
35286 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
35287 if (e) {
35288 log_packet_detailed("'request_kind' field error detected");
35289 }
35290
35291#endif
35293}
35294
35296{
35297 if (!pc->used) {
35298 log_error("WARNING: trying to send data to the closed connection %s",
35300 return -1;
35301 }
35302 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet != NULL, -1,
35303 "Handler for PACKET_UNIT_ACTION_ANSWER not installed");
35304 return pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet(pc, packet);
35305}
35306
35307int dsend_packet_unit_action_answer(struct connection *pc, int actor_id, int target_id, int cost, action_id action_type, int request_kind)
35308{
35309 struct packet_unit_action_answer packet, *real_packet = &packet;
35310
35312 real_packet->target_id = target_id;
35313 real_packet->cost = cost;
35314 real_packet->action_type = action_type;
35315 real_packet->request_kind = request_kind;
35316
35318}
35319
35320#ifdef FREECIV_DELTA_PROTOCOL
35321#define hash_packet_unit_get_actions_100 hash_const
35322
35323#define cmp_packet_unit_get_actions_100 cmp_const
35324
35326#endif /* FREECIV_DELTA_PROTOCOL */
35327
35329{
35330#ifdef FREECIV_DELTA_PROTOCOL
35332 struct packet_unit_get_actions *old;
35333 struct genhash **hash = pc->phs.received + PACKET_UNIT_GET_ACTIONS;
35334#endif /* FREECIV_DELTA_PROTOCOL */
35336#ifdef FREECIV_JSON_CONNECTION
35337 struct plocation field_addr;
35338 {
35342 }
35343#endif /* FREECIV_JSON_CONNECTION */
35344
35345#ifdef FREECIV_DELTA_PROTOCOL
35346#ifdef FREECIV_JSON_CONNECTION
35347 field_addr.name = "fields";
35348#endif /* FREECIV_JSON_CONNECTION */
35349 DIO_BV_GET(&din, &field_addr, fields);
35350
35351#else /* FREECIV_DELTA_PROTOCOL */
35352#ifdef FREECIV_JSON_CONNECTION
35353 field_addr.name = "actor_unit_id";
35354#endif /* FREECIV_JSON_CONNECTION */
35355 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
35357 }
35358#ifdef FREECIV_JSON_CONNECTION
35359 field_addr.name = "target_unit_id";
35360#endif /* FREECIV_JSON_CONNECTION */
35361 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
35362 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
35363 }
35364#ifdef FREECIV_JSON_CONNECTION
35365 field_addr.name = "target_tile_id";
35366#endif /* FREECIV_JSON_CONNECTION */
35367 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
35368 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
35369 }
35370#ifdef FREECIV_JSON_CONNECTION
35371 field_addr.name = "target_extra_id";
35372#endif /* FREECIV_JSON_CONNECTION */
35373 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
35375 }
35376#ifdef FREECIV_JSON_CONNECTION
35377 field_addr.name = "request_kind";
35378#endif /* FREECIV_JSON_CONNECTION */
35379 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
35380 RECEIVE_PACKET_FIELD_ERROR(request_kind);
35381 }
35382#endif
35383 log_packet_detailed("packet_unit_get_actions_100: got info about ()");
35384
35385#ifdef FREECIV_DELTA_PROTOCOL
35386 if (NULL == *hash) {
35388 NULL, NULL, NULL, free);
35389 }
35390
35391 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35392 *real_packet = *old;
35393 } else {
35394 log_packet_detailed(" no old info");
35395 memset(real_packet, 0, sizeof(*real_packet));
35396 }
35397
35398 if (BV_ISSET(fields, 0)) {
35399 log_packet_detailed(" got field 'actor_unit_id'");
35400#ifdef FREECIV_JSON_CONNECTION
35401 field_addr.name = "actor_unit_id";
35402#endif /* FREECIV_JSON_CONNECTION */
35403 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
35405 }
35406 }
35407 if (BV_ISSET(fields, 1)) {
35408 log_packet_detailed(" got field 'target_unit_id'");
35409#ifdef FREECIV_JSON_CONNECTION
35410 field_addr.name = "target_unit_id";
35411#endif /* FREECIV_JSON_CONNECTION */
35412 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
35413 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
35414 }
35415 }
35416 if (BV_ISSET(fields, 2)) {
35417 log_packet_detailed(" got field 'target_tile_id'");
35418#ifdef FREECIV_JSON_CONNECTION
35419 field_addr.name = "target_tile_id";
35420#endif /* FREECIV_JSON_CONNECTION */
35421 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
35422 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
35423 }
35424 }
35425 if (BV_ISSET(fields, 3)) {
35426 log_packet_detailed(" got field 'target_extra_id'");
35427#ifdef FREECIV_JSON_CONNECTION
35428 field_addr.name = "target_extra_id";
35429#endif /* FREECIV_JSON_CONNECTION */
35430 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
35432 }
35433 }
35434 if (BV_ISSET(fields, 4)) {
35435 log_packet_detailed(" got field 'request_kind'");
35436#ifdef FREECIV_JSON_CONNECTION
35437 field_addr.name = "request_kind";
35438#endif /* FREECIV_JSON_CONNECTION */
35439 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
35440 RECEIVE_PACKET_FIELD_ERROR(request_kind);
35441 }
35442 }
35443
35444 if (NULL == old) {
35445 old = fc_malloc(sizeof(*old));
35446 *old = *real_packet;
35447 genhash_insert(*hash, old, old);
35448 } else {
35449 *old = *real_packet;
35450 }
35451
35452#endif /* FREECIV_DELTA_PROTOCOL */
35454}
35455
35457{
35458 const struct packet_unit_get_actions *real_packet = packet;
35459 int e;
35460#ifdef FREECIV_DELTA_PROTOCOL
35462 struct packet_unit_get_actions *old;
35463 bool differ;
35464 struct genhash **hash = pc->phs.sent + PACKET_UNIT_GET_ACTIONS;
35465#endif /* FREECIV_DELTA_PROTOCOL */
35467#ifdef FREECIV_JSON_CONNECTION
35468 struct plocation field_addr;
35469 {
35473 }
35474#endif /* FREECIV_JSON_CONNECTION */
35475
35476 log_packet_detailed("packet_unit_get_actions_100: sending info about ()");
35477
35478#ifdef FREECIV_DELTA_PROTOCOL
35479 if (NULL == *hash) {
35481 NULL, NULL, NULL, free);
35482 }
35483 BV_CLR_ALL(fields);
35484
35485 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35486 old = fc_malloc(sizeof(*old));
35487 *old = *real_packet;
35488 genhash_insert(*hash, old, old);
35489 memset(old, 0, sizeof(*old));
35490 }
35491 differ = (old->actor_unit_id != real_packet->actor_unit_id);
35492 if (differ) {
35493 BV_SET(fields, 0);
35494 }
35495
35496 differ = (old->target_unit_id != real_packet->target_unit_id);
35497 if (differ) {
35498 BV_SET(fields, 1);
35499 }
35500
35501 differ = (old->target_tile_id != real_packet->target_tile_id);
35502 if (differ) {
35503 BV_SET(fields, 2);
35504 }
35505
35506 differ = (old->target_extra_id != real_packet->target_extra_id);
35507 if (differ) {
35508 BV_SET(fields, 3);
35509 }
35510
35511 differ = (old->request_kind != real_packet->request_kind);
35512 if (differ) {
35513 BV_SET(fields, 4);
35514 }
35515
35516
35517#ifdef FREECIV_JSON_CONNECTION
35518 field_addr.name = "fields";
35519#endif /* FREECIV_JSON_CONNECTION */
35520 e = 0;
35521 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35522 if (e) {
35523 log_packet_detailed("fields bitvector error detected");
35524 }
35525
35526 if (BV_ISSET(fields, 0)) {
35527 log_packet_detailed(" field 'actor_unit_id' has changed");
35528#ifdef FREECIV_JSON_CONNECTION
35529 field_addr.name = "actor_unit_id";
35530#endif /* FREECIV_JSON_CONNECTION */
35531 e = 0;
35532 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
35533 if (e) {
35534 log_packet_detailed("'actor_unit_id' field error detected");
35535 }
35536 }
35537 if (BV_ISSET(fields, 1)) {
35538 log_packet_detailed(" field 'target_unit_id' has changed");
35539#ifdef FREECIV_JSON_CONNECTION
35540 field_addr.name = "target_unit_id";
35541#endif /* FREECIV_JSON_CONNECTION */
35542 e = 0;
35543 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
35544 if (e) {
35545 log_packet_detailed("'target_unit_id' field error detected");
35546 }
35547 }
35548 if (BV_ISSET(fields, 2)) {
35549 log_packet_detailed(" field 'target_tile_id' has changed");
35550#ifdef FREECIV_JSON_CONNECTION
35551 field_addr.name = "target_tile_id";
35552#endif /* FREECIV_JSON_CONNECTION */
35553 e = 0;
35554 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
35555 if (e) {
35556 log_packet_detailed("'target_tile_id' field error detected");
35557 }
35558 }
35559 if (BV_ISSET(fields, 3)) {
35560 log_packet_detailed(" field 'target_extra_id' has changed");
35561#ifdef FREECIV_JSON_CONNECTION
35562 field_addr.name = "target_extra_id";
35563#endif /* FREECIV_JSON_CONNECTION */
35564 e = 0;
35565 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
35566 if (e) {
35567 log_packet_detailed("'target_extra_id' field error detected");
35568 }
35569 }
35570 if (BV_ISSET(fields, 4)) {
35571 log_packet_detailed(" field 'request_kind' has changed");
35572#ifdef FREECIV_JSON_CONNECTION
35573 field_addr.name = "request_kind";
35574#endif /* FREECIV_JSON_CONNECTION */
35575 e = 0;
35576 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
35577 if (e) {
35578 log_packet_detailed("'request_kind' field error detected");
35579 }
35580 }
35581
35582 *old = *real_packet;
35583#endif /* FREECIV_DELTA_PROTOCOL */
35584#ifndef FREECIV_DELTA_PROTOCOL
35585#ifdef FREECIV_JSON_CONNECTION
35586 field_addr.name = "actor_unit_id";
35587#endif /* FREECIV_JSON_CONNECTION */
35588 e = 0;
35589 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
35590 if (e) {
35591 log_packet_detailed("'actor_unit_id' field error detected");
35592 }
35593#ifdef FREECIV_JSON_CONNECTION
35594 field_addr.name = "target_unit_id";
35595#endif /* FREECIV_JSON_CONNECTION */
35596 e = 0;
35597 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
35598 if (e) {
35599 log_packet_detailed("'target_unit_id' field error detected");
35600 }
35601#ifdef FREECIV_JSON_CONNECTION
35602 field_addr.name = "target_tile_id";
35603#endif /* FREECIV_JSON_CONNECTION */
35604 e = 0;
35605 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
35606 if (e) {
35607 log_packet_detailed("'target_tile_id' field error detected");
35608 }
35609#ifdef FREECIV_JSON_CONNECTION
35610 field_addr.name = "target_extra_id";
35611#endif /* FREECIV_JSON_CONNECTION */
35612 e = 0;
35613 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
35614 if (e) {
35615 log_packet_detailed("'target_extra_id' field error detected");
35616 }
35617#ifdef FREECIV_JSON_CONNECTION
35618 field_addr.name = "request_kind";
35619#endif /* FREECIV_JSON_CONNECTION */
35620 e = 0;
35621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
35622 if (e) {
35623 log_packet_detailed("'request_kind' field error detected");
35624 }
35625
35626#endif
35628}
35629
35631{
35632 if (!pc->used) {
35633 log_error("WARNING: trying to send data to the closed connection %s",
35635 return -1;
35636 }
35637 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet != NULL, -1,
35638 "Handler for PACKET_UNIT_GET_ACTIONS not installed");
35639 return pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet(pc, packet);
35640}
35641
35642int dsend_packet_unit_get_actions(struct connection *pc, int actor_unit_id, int target_unit_id, int target_tile_id, int target_extra_id, int request_kind)
35643{
35644 struct packet_unit_get_actions packet, *real_packet = &packet;
35645
35647 real_packet->target_unit_id = target_unit_id;
35648 real_packet->target_tile_id = target_tile_id;
35649 real_packet->target_extra_id = target_extra_id;
35650 real_packet->request_kind = request_kind;
35651
35653}
35654
35655#ifdef FREECIV_DELTA_PROTOCOL
35656#define hash_packet_unit_actions_100 hash_const
35657
35658#define cmp_packet_unit_actions_100 cmp_const
35659
35661#endif /* FREECIV_DELTA_PROTOCOL */
35662
35664{
35665#ifdef FREECIV_DELTA_PROTOCOL
35667 struct packet_unit_actions *old;
35668 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTIONS;
35669#endif /* FREECIV_DELTA_PROTOCOL */
35671#ifdef FREECIV_JSON_CONNECTION
35672 struct plocation field_addr;
35673 {
35677 }
35678#endif /* FREECIV_JSON_CONNECTION */
35679
35680#ifdef FREECIV_DELTA_PROTOCOL
35681#ifdef FREECIV_JSON_CONNECTION
35682 field_addr.name = "fields";
35683#endif /* FREECIV_JSON_CONNECTION */
35684 DIO_BV_GET(&din, &field_addr, fields);
35685
35686#else /* FREECIV_DELTA_PROTOCOL */
35687#ifdef FREECIV_JSON_CONNECTION
35688 field_addr.name = "actor_unit_id";
35689#endif /* FREECIV_JSON_CONNECTION */
35690 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
35692 }
35693#ifdef FREECIV_JSON_CONNECTION
35694 field_addr.name = "target_unit_id";
35695#endif /* FREECIV_JSON_CONNECTION */
35696 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
35697 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
35698 }
35699#ifdef FREECIV_JSON_CONNECTION
35700 field_addr.name = "target_city_id";
35701#endif /* FREECIV_JSON_CONNECTION */
35702 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
35703 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
35704 }
35705#ifdef FREECIV_JSON_CONNECTION
35706 field_addr.name = "target_tile_id";
35707#endif /* FREECIV_JSON_CONNECTION */
35708 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
35709 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
35710 }
35711#ifdef FREECIV_JSON_CONNECTION
35712 field_addr.name = "target_extra_id";
35713#endif /* FREECIV_JSON_CONNECTION */
35714 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
35716 }
35717#ifdef FREECIV_JSON_CONNECTION
35718 field_addr.name = "request_kind";
35719#endif /* FREECIV_JSON_CONNECTION */
35720 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
35721 RECEIVE_PACKET_FIELD_ERROR(request_kind);
35722 }
35723#ifdef FREECIV_JSON_CONNECTION
35724 field_addr.name = "action_probabilities";
35725#endif /* FREECIV_JSON_CONNECTION */
35726 {
35727 int i;
35728
35729#ifdef FREECIV_JSON_CONNECTION
35730 /* Enter array. */
35731 field_addr.sub_location = plocation_elem_new(0);
35732#endif /* FREECIV_JSON_CONNECTION */
35733
35734 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
35735#ifdef FREECIV_JSON_CONNECTION
35736 field_addr.sub_location->number = i;
35737#endif /* FREECIV_JSON_CONNECTION */
35738
35739 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
35740 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
35741 }
35742 }
35743
35744#ifdef FREECIV_JSON_CONNECTION
35745 /* Exit array. */
35746 FC_FREE(field_addr.sub_location);
35747#endif /* FREECIV_JSON_CONNECTION */
35748 }
35749#endif
35750 log_packet_detailed("packet_unit_actions_100: got info about ()");
35751
35752#ifdef FREECIV_DELTA_PROTOCOL
35753 if (NULL == *hash) {
35755 NULL, NULL, NULL, free);
35756 }
35757
35758 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35759 *real_packet = *old;
35760 } else {
35761 log_packet_detailed(" no old info");
35762 memset(real_packet, 0, sizeof(*real_packet));
35763 }
35764
35765 if (BV_ISSET(fields, 0)) {
35766 log_packet_detailed(" got field 'actor_unit_id'");
35767#ifdef FREECIV_JSON_CONNECTION
35768 field_addr.name = "actor_unit_id";
35769#endif /* FREECIV_JSON_CONNECTION */
35770 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
35772 }
35773 }
35774 if (BV_ISSET(fields, 1)) {
35775 log_packet_detailed(" got field 'target_unit_id'");
35776#ifdef FREECIV_JSON_CONNECTION
35777 field_addr.name = "target_unit_id";
35778#endif /* FREECIV_JSON_CONNECTION */
35779 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
35780 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
35781 }
35782 }
35783 if (BV_ISSET(fields, 2)) {
35784 log_packet_detailed(" got field 'target_city_id'");
35785#ifdef FREECIV_JSON_CONNECTION
35786 field_addr.name = "target_city_id";
35787#endif /* FREECIV_JSON_CONNECTION */
35788 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
35789 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
35790 }
35791 }
35792 if (BV_ISSET(fields, 3)) {
35793 log_packet_detailed(" got field 'target_tile_id'");
35794#ifdef FREECIV_JSON_CONNECTION
35795 field_addr.name = "target_tile_id";
35796#endif /* FREECIV_JSON_CONNECTION */
35797 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
35798 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
35799 }
35800 }
35801 if (BV_ISSET(fields, 4)) {
35802 log_packet_detailed(" got field 'target_extra_id'");
35803#ifdef FREECIV_JSON_CONNECTION
35804 field_addr.name = "target_extra_id";
35805#endif /* FREECIV_JSON_CONNECTION */
35806 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
35808 }
35809 }
35810 if (BV_ISSET(fields, 5)) {
35811 log_packet_detailed(" got field 'request_kind'");
35812#ifdef FREECIV_JSON_CONNECTION
35813 field_addr.name = "request_kind";
35814#endif /* FREECIV_JSON_CONNECTION */
35815 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
35816 RECEIVE_PACKET_FIELD_ERROR(request_kind);
35817 }
35818 }
35819 if (BV_ISSET(fields, 6)) {
35820 log_packet_detailed(" got field 'action_probabilities'");
35821#ifdef FREECIV_JSON_CONNECTION
35822 field_addr.name = "action_probabilities";
35823#endif /* FREECIV_JSON_CONNECTION */
35824 {
35825 int i;
35826
35827#ifdef FREECIV_JSON_CONNECTION
35828 /* Enter array. */
35829 field_addr.sub_location = plocation_elem_new(0);
35830#endif /* FREECIV_JSON_CONNECTION */
35831
35832 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
35833#ifdef FREECIV_JSON_CONNECTION
35834 field_addr.sub_location->number = i;
35835#endif /* FREECIV_JSON_CONNECTION */
35836
35837 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
35838 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
35839 }
35840 }
35841
35842#ifdef FREECIV_JSON_CONNECTION
35843 /* Exit array. */
35844 FC_FREE(field_addr.sub_location);
35845#endif /* FREECIV_JSON_CONNECTION */
35846 }
35847 }
35848
35849 if (NULL == old) {
35850 old = fc_malloc(sizeof(*old));
35851 *old = *real_packet;
35852 genhash_insert(*hash, old, old);
35853 } else {
35854 *old = *real_packet;
35855 }
35856
35857#endif /* FREECIV_DELTA_PROTOCOL */
35859}
35860
35861static int send_packet_unit_actions_100(struct connection *pc, const struct packet_unit_actions *packet)
35862{
35863 const struct packet_unit_actions *real_packet = packet;
35864 int e;
35865#ifdef FREECIV_DELTA_PROTOCOL
35867 struct packet_unit_actions *old;
35868 bool differ;
35869 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTIONS;
35870#endif /* FREECIV_DELTA_PROTOCOL */
35872#ifdef FREECIV_JSON_CONNECTION
35873 struct plocation field_addr;
35874 {
35878 }
35879#endif /* FREECIV_JSON_CONNECTION */
35880
35881 log_packet_detailed("packet_unit_actions_100: sending info about ()");
35882
35883#ifdef FREECIV_DELTA_PROTOCOL
35884 if (NULL == *hash) {
35886 NULL, NULL, NULL, free);
35887 }
35888 BV_CLR_ALL(fields);
35889
35890 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35891 old = fc_malloc(sizeof(*old));
35892 *old = *real_packet;
35893 genhash_insert(*hash, old, old);
35894 memset(old, 0, sizeof(*old));
35895 }
35896 differ = (old->actor_unit_id != real_packet->actor_unit_id);
35897 if (differ) {
35898 BV_SET(fields, 0);
35899 }
35900
35901 differ = (old->target_unit_id != real_packet->target_unit_id);
35902 if (differ) {
35903 BV_SET(fields, 1);
35904 }
35905
35906 differ = (old->target_city_id != real_packet->target_city_id);
35907 if (differ) {
35908 BV_SET(fields, 2);
35909 }
35910
35911 differ = (old->target_tile_id != real_packet->target_tile_id);
35912 if (differ) {
35913 BV_SET(fields, 3);
35914 }
35915
35916 differ = (old->target_extra_id != real_packet->target_extra_id);
35917 if (differ) {
35918 BV_SET(fields, 4);
35919 }
35920
35921 differ = (old->request_kind != real_packet->request_kind);
35922 if (differ) {
35923 BV_SET(fields, 5);
35924 }
35925
35926 differ = FALSE;
35927 {
35928 int i;
35929
35930 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
35931 differ = !are_action_probabilitys_equal(&old->action_probabilities[i], &real_packet->action_probabilities[i]);
35932 if (differ) {
35933 break;
35934 }
35935 }
35936 }
35937 if (differ) {
35938 BV_SET(fields, 6);
35939 }
35940
35941
35942#ifdef FREECIV_JSON_CONNECTION
35943 field_addr.name = "fields";
35944#endif /* FREECIV_JSON_CONNECTION */
35945 e = 0;
35946 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35947 if (e) {
35948 log_packet_detailed("fields bitvector error detected");
35949 }
35950
35951 if (BV_ISSET(fields, 0)) {
35952 log_packet_detailed(" field 'actor_unit_id' has changed");
35953#ifdef FREECIV_JSON_CONNECTION
35954 field_addr.name = "actor_unit_id";
35955#endif /* FREECIV_JSON_CONNECTION */
35956 e = 0;
35957 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
35958 if (e) {
35959 log_packet_detailed("'actor_unit_id' field error detected");
35960 }
35961 }
35962 if (BV_ISSET(fields, 1)) {
35963 log_packet_detailed(" field 'target_unit_id' has changed");
35964#ifdef FREECIV_JSON_CONNECTION
35965 field_addr.name = "target_unit_id";
35966#endif /* FREECIV_JSON_CONNECTION */
35967 e = 0;
35968 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
35969 if (e) {
35970 log_packet_detailed("'target_unit_id' field error detected");
35971 }
35972 }
35973 if (BV_ISSET(fields, 2)) {
35974 log_packet_detailed(" field 'target_city_id' has changed");
35975#ifdef FREECIV_JSON_CONNECTION
35976 field_addr.name = "target_city_id";
35977#endif /* FREECIV_JSON_CONNECTION */
35978 e = 0;
35979 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
35980 if (e) {
35981 log_packet_detailed("'target_city_id' field error detected");
35982 }
35983 }
35984 if (BV_ISSET(fields, 3)) {
35985 log_packet_detailed(" field 'target_tile_id' has changed");
35986#ifdef FREECIV_JSON_CONNECTION
35987 field_addr.name = "target_tile_id";
35988#endif /* FREECIV_JSON_CONNECTION */
35989 e = 0;
35990 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
35991 if (e) {
35992 log_packet_detailed("'target_tile_id' field error detected");
35993 }
35994 }
35995 if (BV_ISSET(fields, 4)) {
35996 log_packet_detailed(" field 'target_extra_id' has changed");
35997#ifdef FREECIV_JSON_CONNECTION
35998 field_addr.name = "target_extra_id";
35999#endif /* FREECIV_JSON_CONNECTION */
36000 e = 0;
36001 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
36002 if (e) {
36003 log_packet_detailed("'target_extra_id' field error detected");
36004 }
36005 }
36006 if (BV_ISSET(fields, 5)) {
36007 log_packet_detailed(" field 'request_kind' has changed");
36008#ifdef FREECIV_JSON_CONNECTION
36009 field_addr.name = "request_kind";
36010#endif /* FREECIV_JSON_CONNECTION */
36011 e = 0;
36012 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
36013 if (e) {
36014 log_packet_detailed("'request_kind' field error detected");
36015 }
36016 }
36017 if (BV_ISSET(fields, 6)) {
36018 log_packet_detailed(" field 'action_probabilities' has changed");
36019#ifdef FREECIV_JSON_CONNECTION
36020 field_addr.name = "action_probabilities";
36021#endif /* FREECIV_JSON_CONNECTION */
36022 e = 0;
36023 {
36024 int i;
36025
36026#ifdef FREECIV_JSON_CONNECTION
36027 /* Create the array. */
36029
36030 /* Enter the array. */
36031 field_addr.sub_location = plocation_elem_new(0);
36032#endif /* FREECIV_JSON_CONNECTION */
36033
36034 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
36035#ifdef FREECIV_JSON_CONNECTION
36036 /* Next array element. */
36037 field_addr.sub_location->number = i;
36038#endif /* FREECIV_JSON_CONNECTION */
36039
36040 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
36041 }
36042
36043#ifdef FREECIV_JSON_CONNECTION
36044 /* Exit array. */
36045 FC_FREE(field_addr.sub_location);
36046#endif /* FREECIV_JSON_CONNECTION */
36047 }
36048 if (e) {
36049 log_packet_detailed("'action_probabilities' field error detected");
36050 }
36051 }
36052
36053 *old = *real_packet;
36054#endif /* FREECIV_DELTA_PROTOCOL */
36055#ifndef FREECIV_DELTA_PROTOCOL
36056#ifdef FREECIV_JSON_CONNECTION
36057 field_addr.name = "actor_unit_id";
36058#endif /* FREECIV_JSON_CONNECTION */
36059 e = 0;
36060 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
36061 if (e) {
36062 log_packet_detailed("'actor_unit_id' field error detected");
36063 }
36064#ifdef FREECIV_JSON_CONNECTION
36065 field_addr.name = "target_unit_id";
36066#endif /* FREECIV_JSON_CONNECTION */
36067 e = 0;
36068 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
36069 if (e) {
36070 log_packet_detailed("'target_unit_id' field error detected");
36071 }
36072#ifdef FREECIV_JSON_CONNECTION
36073 field_addr.name = "target_city_id";
36074#endif /* FREECIV_JSON_CONNECTION */
36075 e = 0;
36076 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
36077 if (e) {
36078 log_packet_detailed("'target_city_id' field error detected");
36079 }
36080#ifdef FREECIV_JSON_CONNECTION
36081 field_addr.name = "target_tile_id";
36082#endif /* FREECIV_JSON_CONNECTION */
36083 e = 0;
36084 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
36085 if (e) {
36086 log_packet_detailed("'target_tile_id' field error detected");
36087 }
36088#ifdef FREECIV_JSON_CONNECTION
36089 field_addr.name = "target_extra_id";
36090#endif /* FREECIV_JSON_CONNECTION */
36091 e = 0;
36092 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
36093 if (e) {
36094 log_packet_detailed("'target_extra_id' field error detected");
36095 }
36096#ifdef FREECIV_JSON_CONNECTION
36097 field_addr.name = "request_kind";
36098#endif /* FREECIV_JSON_CONNECTION */
36099 e = 0;
36100 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
36101 if (e) {
36102 log_packet_detailed("'request_kind' field error detected");
36103 }
36104#ifdef FREECIV_JSON_CONNECTION
36105 field_addr.name = "action_probabilities";
36106#endif /* FREECIV_JSON_CONNECTION */
36107 e = 0;
36108 {
36109 int i;
36110
36111#ifdef FREECIV_JSON_CONNECTION
36112 /* Create the array. */
36114
36115 /* Enter the array. */
36116 field_addr.sub_location = plocation_elem_new(0);
36117#endif /* FREECIV_JSON_CONNECTION */
36118
36119 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
36120#ifdef FREECIV_JSON_CONNECTION
36121 /* Next array element. */
36122 field_addr.sub_location->number = i;
36123#endif /* FREECIV_JSON_CONNECTION */
36124
36125 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
36126 }
36127
36128#ifdef FREECIV_JSON_CONNECTION
36129 /* Exit array. */
36130 FC_FREE(field_addr.sub_location);
36131#endif /* FREECIV_JSON_CONNECTION */
36132 }
36133 if (e) {
36134 log_packet_detailed("'action_probabilities' field error detected");
36135 }
36136
36137#endif
36139}
36140
36142{
36143 if (!pc->used) {
36144 log_error("WARNING: trying to send data to the closed connection %s",
36146 return -1;
36147 }
36148 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet != NULL, -1,
36149 "Handler for PACKET_UNIT_ACTIONS not installed");
36150 return pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet(pc, packet);
36151}
36152
36153int dsend_packet_unit_actions(struct connection *pc, int actor_unit_id, int target_unit_id, int target_city_id, int target_tile_id, int target_extra_id, int request_kind, const struct act_prob *action_probabilities)
36154{
36155 struct packet_unit_actions packet, *real_packet = &packet;
36156
36158 real_packet->target_unit_id = target_unit_id;
36159 real_packet->target_city_id = target_city_id;
36160 real_packet->target_tile_id = target_tile_id;
36161 real_packet->target_extra_id = target_extra_id;
36162 real_packet->request_kind = request_kind;
36163 {
36164 int i;
36165
36166 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
36167 real_packet->action_probabilities[i] = action_probabilities[i];
36168 }
36169 }
36170
36172}
36173
36174#ifdef FREECIV_DELTA_PROTOCOL
36175#define hash_packet_unit_change_activity_100 hash_const
36176
36177#define cmp_packet_unit_change_activity_100 cmp_const
36178
36180#endif /* FREECIV_DELTA_PROTOCOL */
36181
36183{
36184#ifdef FREECIV_DELTA_PROTOCOL
36186 struct packet_unit_change_activity *old;
36187 struct genhash **hash = pc->phs.received + PACKET_UNIT_CHANGE_ACTIVITY;
36188#endif /* FREECIV_DELTA_PROTOCOL */
36190#ifdef FREECIV_JSON_CONNECTION
36191 struct plocation field_addr;
36192 {
36196 }
36197#endif /* FREECIV_JSON_CONNECTION */
36198
36199#ifdef FREECIV_DELTA_PROTOCOL
36200#ifdef FREECIV_JSON_CONNECTION
36201 field_addr.name = "fields";
36202#endif /* FREECIV_JSON_CONNECTION */
36203 DIO_BV_GET(&din, &field_addr, fields);
36204
36205#else /* FREECIV_DELTA_PROTOCOL */
36206#ifdef FREECIV_JSON_CONNECTION
36207 field_addr.name = "unit_id";
36208#endif /* FREECIV_JSON_CONNECTION */
36209 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36211 }
36212#ifdef FREECIV_JSON_CONNECTION
36213 field_addr.name = "activity";
36214#endif /* FREECIV_JSON_CONNECTION */
36215 {
36216 int readin;
36217
36218 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36220 }
36221 real_packet->activity = readin;
36222 }
36223#ifdef FREECIV_JSON_CONNECTION
36224 field_addr.name = "target";
36225#endif /* FREECIV_JSON_CONNECTION */
36226 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
36228 }
36229#endif
36230 log_packet_detailed("packet_unit_change_activity_100: got info about ()");
36231
36232#ifdef FREECIV_DELTA_PROTOCOL
36233 if (NULL == *hash) {
36235 NULL, NULL, NULL, free);
36236 }
36237
36238 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36239 *real_packet = *old;
36240 } else {
36241 log_packet_detailed(" no old info");
36242 memset(real_packet, 0, sizeof(*real_packet));
36243 }
36244
36245 if (BV_ISSET(fields, 0)) {
36246 log_packet_detailed(" got field 'unit_id'");
36247#ifdef FREECIV_JSON_CONNECTION
36248 field_addr.name = "unit_id";
36249#endif /* FREECIV_JSON_CONNECTION */
36250 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36252 }
36253 }
36254 if (BV_ISSET(fields, 1)) {
36255 log_packet_detailed(" got field 'activity'");
36256#ifdef FREECIV_JSON_CONNECTION
36257 field_addr.name = "activity";
36258#endif /* FREECIV_JSON_CONNECTION */
36259 {
36260 int readin;
36261
36262 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36264 }
36265 real_packet->activity = readin;
36266 }
36267 }
36268 if (BV_ISSET(fields, 2)) {
36269 log_packet_detailed(" got field 'target'");
36270#ifdef FREECIV_JSON_CONNECTION
36271 field_addr.name = "target";
36272#endif /* FREECIV_JSON_CONNECTION */
36273 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
36275 }
36276 }
36277
36278 if (NULL == old) {
36279 old = fc_malloc(sizeof(*old));
36280 *old = *real_packet;
36281 genhash_insert(*hash, old, old);
36282 } else {
36283 *old = *real_packet;
36284 }
36285
36286#endif /* FREECIV_DELTA_PROTOCOL */
36288}
36289
36291{
36292 const struct packet_unit_change_activity *real_packet = packet;
36293 int e;
36294#ifdef FREECIV_DELTA_PROTOCOL
36296 struct packet_unit_change_activity *old;
36297 bool differ;
36298 struct genhash **hash = pc->phs.sent + PACKET_UNIT_CHANGE_ACTIVITY;
36299#endif /* FREECIV_DELTA_PROTOCOL */
36301#ifdef FREECIV_JSON_CONNECTION
36302 struct plocation field_addr;
36303 {
36307 }
36308#endif /* FREECIV_JSON_CONNECTION */
36309
36310 log_packet_detailed("packet_unit_change_activity_100: sending info about ()");
36311
36312#ifdef FREECIV_DELTA_PROTOCOL
36313 if (NULL == *hash) {
36315 NULL, NULL, NULL, free);
36316 }
36317 BV_CLR_ALL(fields);
36318
36319 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36320 old = fc_malloc(sizeof(*old));
36321 *old = *real_packet;
36322 genhash_insert(*hash, old, old);
36323 memset(old, 0, sizeof(*old));
36324 }
36325 differ = (old->unit_id != real_packet->unit_id);
36326 if (differ) {
36327 BV_SET(fields, 0);
36328 }
36329
36330 differ = (old->activity != real_packet->activity);
36331 if (differ) {
36332 BV_SET(fields, 1);
36333 }
36334
36335 differ = (old->target != real_packet->target);
36336 if (differ) {
36337 BV_SET(fields, 2);
36338 }
36339
36340
36341#ifdef FREECIV_JSON_CONNECTION
36342 field_addr.name = "fields";
36343#endif /* FREECIV_JSON_CONNECTION */
36344 e = 0;
36345 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36346 if (e) {
36347 log_packet_detailed("fields bitvector error detected");
36348 }
36349
36350 if (BV_ISSET(fields, 0)) {
36351 log_packet_detailed(" field 'unit_id' has changed");
36352#ifdef FREECIV_JSON_CONNECTION
36353 field_addr.name = "unit_id";
36354#endif /* FREECIV_JSON_CONNECTION */
36355 e = 0;
36356 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36357 if (e) {
36358 log_packet_detailed("'unit_id' field error detected");
36359 }
36360 }
36361 if (BV_ISSET(fields, 1)) {
36362 log_packet_detailed(" field 'activity' has changed");
36363#ifdef FREECIV_JSON_CONNECTION
36364 field_addr.name = "activity";
36365#endif /* FREECIV_JSON_CONNECTION */
36366 e = 0;
36367 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
36368 if (e) {
36369 log_packet_detailed("'activity' field error detected");
36370 }
36371 }
36372 if (BV_ISSET(fields, 2)) {
36373 log_packet_detailed(" field 'target' has changed");
36374#ifdef FREECIV_JSON_CONNECTION
36375 field_addr.name = "target";
36376#endif /* FREECIV_JSON_CONNECTION */
36377 e = 0;
36378 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
36379 if (e) {
36380 log_packet_detailed("'target' field error detected");
36381 }
36382 }
36383
36384 *old = *real_packet;
36385#endif /* FREECIV_DELTA_PROTOCOL */
36386#ifndef FREECIV_DELTA_PROTOCOL
36387#ifdef FREECIV_JSON_CONNECTION
36388 field_addr.name = "unit_id";
36389#endif /* FREECIV_JSON_CONNECTION */
36390 e = 0;
36391 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36392 if (e) {
36393 log_packet_detailed("'unit_id' field error detected");
36394 }
36395#ifdef FREECIV_JSON_CONNECTION
36396 field_addr.name = "activity";
36397#endif /* FREECIV_JSON_CONNECTION */
36398 e = 0;
36399 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
36400 if (e) {
36401 log_packet_detailed("'activity' field error detected");
36402 }
36403#ifdef FREECIV_JSON_CONNECTION
36404 field_addr.name = "target";
36405#endif /* FREECIV_JSON_CONNECTION */
36406 e = 0;
36407 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
36408 if (e) {
36409 log_packet_detailed("'target' field error detected");
36410 }
36411
36412#endif
36414}
36415
36417{
36418 if (!pc->used) {
36419 log_error("WARNING: trying to send data to the closed connection %s",
36421 return -1;
36422 }
36423 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet != NULL, -1,
36424 "Handler for PACKET_UNIT_CHANGE_ACTIVITY not installed");
36425 return pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet(pc, packet);
36426}
36427
36428int dsend_packet_unit_change_activity(struct connection *pc, int unit_id, enum unit_activity activity, int target)
36429{
36430 struct packet_unit_change_activity packet, *real_packet = &packet;
36431
36433 real_packet->activity = activity;
36434 real_packet->target = target;
36435
36437}
36438
36439#ifdef FREECIV_DELTA_PROTOCOL
36440#define hash_packet_diplomacy_init_meeting_req_100 hash_const
36441
36442#define cmp_packet_diplomacy_init_meeting_req_100 cmp_const
36443
36445#endif /* FREECIV_DELTA_PROTOCOL */
36446
36448{
36449#ifdef FREECIV_DELTA_PROTOCOL
36452 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING_REQ;
36453#endif /* FREECIV_DELTA_PROTOCOL */
36455#ifdef FREECIV_JSON_CONNECTION
36456 struct plocation field_addr;
36457 {
36461 }
36462#endif /* FREECIV_JSON_CONNECTION */
36463
36464#ifdef FREECIV_DELTA_PROTOCOL
36465#ifdef FREECIV_JSON_CONNECTION
36466 field_addr.name = "fields";
36467#endif /* FREECIV_JSON_CONNECTION */
36468 DIO_BV_GET(&din, &field_addr, fields);
36469
36470#else /* FREECIV_DELTA_PROTOCOL */
36471#ifdef FREECIV_JSON_CONNECTION
36472 field_addr.name = "counterpart";
36473#endif /* FREECIV_JSON_CONNECTION */
36474 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
36475 RECEIVE_PACKET_FIELD_ERROR(counterpart);
36476 }
36477#endif
36478 log_packet_detailed("packet_diplomacy_init_meeting_req_100: got info about ()");
36479
36480#ifdef FREECIV_DELTA_PROTOCOL
36481 if (NULL == *hash) {
36483 NULL, NULL, NULL, free);
36484 }
36485
36486 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36487 *real_packet = *old;
36488 } else {
36489 log_packet_detailed(" no old info");
36490 memset(real_packet, 0, sizeof(*real_packet));
36491 }
36492
36493 if (BV_ISSET(fields, 0)) {
36494 log_packet_detailed(" got field 'counterpart'");
36495#ifdef FREECIV_JSON_CONNECTION
36496 field_addr.name = "counterpart";
36497#endif /* FREECIV_JSON_CONNECTION */
36498 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
36499 RECEIVE_PACKET_FIELD_ERROR(counterpart);
36500 }
36501 }
36502
36503 if (NULL == old) {
36504 old = fc_malloc(sizeof(*old));
36505 *old = *real_packet;
36506 genhash_insert(*hash, old, old);
36507 } else {
36508 *old = *real_packet;
36509 }
36510
36511#endif /* FREECIV_DELTA_PROTOCOL */
36513}
36514
36516{
36517 const struct packet_diplomacy_init_meeting_req *real_packet = packet;
36518 int e;
36519#ifdef FREECIV_DELTA_PROTOCOL
36522 bool differ;
36523 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING_REQ;
36524#endif /* FREECIV_DELTA_PROTOCOL */
36526#ifdef FREECIV_JSON_CONNECTION
36527 struct plocation field_addr;
36528 {
36532 }
36533#endif /* FREECIV_JSON_CONNECTION */
36534
36535 log_packet_detailed("packet_diplomacy_init_meeting_req_100: sending info about ()");
36536
36537#ifdef FREECIV_DELTA_PROTOCOL
36538 if (NULL == *hash) {
36540 NULL, NULL, NULL, free);
36541 }
36542 BV_CLR_ALL(fields);
36543
36544 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36545 old = fc_malloc(sizeof(*old));
36546 *old = *real_packet;
36547 genhash_insert(*hash, old, old);
36548 memset(old, 0, sizeof(*old));
36549 }
36550 differ = (old->counterpart != real_packet->counterpart);
36551 if (differ) {
36552 BV_SET(fields, 0);
36553 }
36554
36555
36556#ifdef FREECIV_JSON_CONNECTION
36557 field_addr.name = "fields";
36558#endif /* FREECIV_JSON_CONNECTION */
36559 e = 0;
36560 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36561 if (e) {
36562 log_packet_detailed("fields bitvector error detected");
36563 }
36564
36565 if (BV_ISSET(fields, 0)) {
36566 log_packet_detailed(" field 'counterpart' has changed");
36567#ifdef FREECIV_JSON_CONNECTION
36568 field_addr.name = "counterpart";
36569#endif /* FREECIV_JSON_CONNECTION */
36570 e = 0;
36571 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
36572 if (e) {
36573 log_packet_detailed("'counterpart' field error detected");
36574 }
36575 }
36576
36577 *old = *real_packet;
36578#endif /* FREECIV_DELTA_PROTOCOL */
36579#ifndef FREECIV_DELTA_PROTOCOL
36580#ifdef FREECIV_JSON_CONNECTION
36581 field_addr.name = "counterpart";
36582#endif /* FREECIV_JSON_CONNECTION */
36583 e = 0;
36584 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
36585 if (e) {
36586 log_packet_detailed("'counterpart' field error detected");
36587 }
36588
36589#endif
36591}
36592
36594{
36595 if (!pc->used) {
36596 log_error("WARNING: trying to send data to the closed connection %s",
36598 return -1;
36599 }
36600 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet != NULL, -1,
36601 "Handler for PACKET_DIPLOMACY_INIT_MEETING_REQ not installed");
36602 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet(pc, packet);
36603}
36604
36606{
36607 struct packet_diplomacy_init_meeting_req packet, *real_packet = &packet;
36608
36610
36612}
36613
36614#ifdef FREECIV_DELTA_PROTOCOL
36615#define hash_packet_diplomacy_init_meeting_100 hash_const
36616
36617#define cmp_packet_diplomacy_init_meeting_100 cmp_const
36618
36620#endif /* FREECIV_DELTA_PROTOCOL */
36621
36623{
36624#ifdef FREECIV_DELTA_PROTOCOL
36627 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING;
36628#endif /* FREECIV_DELTA_PROTOCOL */
36630#ifdef FREECIV_JSON_CONNECTION
36631 struct plocation field_addr;
36632 {
36636 }
36637#endif /* FREECIV_JSON_CONNECTION */
36638
36639#ifdef FREECIV_DELTA_PROTOCOL
36640#ifdef FREECIV_JSON_CONNECTION
36641 field_addr.name = "fields";
36642#endif /* FREECIV_JSON_CONNECTION */
36643 DIO_BV_GET(&din, &field_addr, fields);
36644
36645#else /* FREECIV_DELTA_PROTOCOL */
36646#ifdef FREECIV_JSON_CONNECTION
36647 field_addr.name = "counterpart";
36648#endif /* FREECIV_JSON_CONNECTION */
36649 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
36650 RECEIVE_PACKET_FIELD_ERROR(counterpart);
36651 }
36652#ifdef FREECIV_JSON_CONNECTION
36653 field_addr.name = "initiated_from";
36654#endif /* FREECIV_JSON_CONNECTION */
36655 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->initiated_from)) {
36656 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
36657 }
36658#endif
36659 log_packet_detailed("packet_diplomacy_init_meeting_100: got info about ()");
36660
36661#ifdef FREECIV_DELTA_PROTOCOL
36662 if (NULL == *hash) {
36664 NULL, NULL, NULL, free);
36665 }
36666
36667 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36668 *real_packet = *old;
36669 } else {
36670 log_packet_detailed(" no old info");
36671 memset(real_packet, 0, sizeof(*real_packet));
36672 }
36673
36674 if (BV_ISSET(fields, 0)) {
36675 log_packet_detailed(" got field 'counterpart'");
36676#ifdef FREECIV_JSON_CONNECTION
36677 field_addr.name = "counterpart";
36678#endif /* FREECIV_JSON_CONNECTION */
36679 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
36680 RECEIVE_PACKET_FIELD_ERROR(counterpart);
36681 }
36682 }
36683 if (BV_ISSET(fields, 1)) {
36684 log_packet_detailed(" got field 'initiated_from'");
36685#ifdef FREECIV_JSON_CONNECTION
36686 field_addr.name = "initiated_from";
36687#endif /* FREECIV_JSON_CONNECTION */
36688 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->initiated_from)) {
36689 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
36690 }
36691 }
36692
36693 if (NULL == old) {
36694 old = fc_malloc(sizeof(*old));
36695 *old = *real_packet;
36696 genhash_insert(*hash, old, old);
36697 } else {
36698 *old = *real_packet;
36699 }
36700
36701#endif /* FREECIV_DELTA_PROTOCOL */
36703}
36704
36706{
36707 const struct packet_diplomacy_init_meeting *real_packet = packet;
36708 int e;
36709#ifdef FREECIV_DELTA_PROTOCOL
36712 bool differ;
36713 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING;
36714#endif /* FREECIV_DELTA_PROTOCOL */
36716#ifdef FREECIV_JSON_CONNECTION
36717 struct plocation field_addr;
36718 {
36722 }
36723#endif /* FREECIV_JSON_CONNECTION */
36724
36725 log_packet_detailed("packet_diplomacy_init_meeting_100: sending info about ()");
36726
36727#ifdef FREECIV_DELTA_PROTOCOL
36728 if (NULL == *hash) {
36730 NULL, NULL, NULL, free);
36731 }
36732 BV_CLR_ALL(fields);
36733
36734 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36735 old = fc_malloc(sizeof(*old));
36736 *old = *real_packet;
36737 genhash_insert(*hash, old, old);
36738 memset(old, 0, sizeof(*old));
36739 }
36740 differ = (old->counterpart != real_packet->counterpart);
36741 if (differ) {
36742 BV_SET(fields, 0);
36743 }
36744
36745 differ = (old->initiated_from != real_packet->initiated_from);
36746 if (differ) {
36747 BV_SET(fields, 1);
36748 }
36749
36750
36751#ifdef FREECIV_JSON_CONNECTION
36752 field_addr.name = "fields";
36753#endif /* FREECIV_JSON_CONNECTION */
36754 e = 0;
36755 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36756 if (e) {
36757 log_packet_detailed("fields bitvector error detected");
36758 }
36759
36760 if (BV_ISSET(fields, 0)) {
36761 log_packet_detailed(" field 'counterpart' has changed");
36762#ifdef FREECIV_JSON_CONNECTION
36763 field_addr.name = "counterpart";
36764#endif /* FREECIV_JSON_CONNECTION */
36765 e = 0;
36766 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
36767 if (e) {
36768 log_packet_detailed("'counterpart' field error detected");
36769 }
36770 }
36771 if (BV_ISSET(fields, 1)) {
36772 log_packet_detailed(" field 'initiated_from' has changed");
36773#ifdef FREECIV_JSON_CONNECTION
36774 field_addr.name = "initiated_from";
36775#endif /* FREECIV_JSON_CONNECTION */
36776 e = 0;
36777 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->initiated_from);
36778 if (e) {
36779 log_packet_detailed("'initiated_from' field error detected");
36780 }
36781 }
36782
36783 *old = *real_packet;
36784#endif /* FREECIV_DELTA_PROTOCOL */
36785#ifndef FREECIV_DELTA_PROTOCOL
36786#ifdef FREECIV_JSON_CONNECTION
36787 field_addr.name = "counterpart";
36788#endif /* FREECIV_JSON_CONNECTION */
36789 e = 0;
36790 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
36791 if (e) {
36792 log_packet_detailed("'counterpart' field error detected");
36793 }
36794#ifdef FREECIV_JSON_CONNECTION
36795 field_addr.name = "initiated_from";
36796#endif /* FREECIV_JSON_CONNECTION */
36797 e = 0;
36798 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->initiated_from);
36799 if (e) {
36800 log_packet_detailed("'initiated_from' field error detected");
36801 }
36802
36803#endif
36805}
36806
36808{
36809 if (!pc->used) {
36810 log_error("WARNING: trying to send data to the closed connection %s",
36812 return -1;
36813 }
36814 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet != NULL, -1,
36815 "Handler for PACKET_DIPLOMACY_INIT_MEETING not installed");
36816 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet(pc, packet);
36817}
36818
36825
36826int dsend_packet_diplomacy_init_meeting(struct connection *pc, int counterpart, int initiated_from)
36827{
36828 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
36829
36831 real_packet->initiated_from = initiated_from;
36832
36834}
36835
36837{
36838 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
36839
36841 real_packet->initiated_from = initiated_from;
36842
36844}
36845
36846#ifdef FREECIV_DELTA_PROTOCOL
36847#define hash_packet_diplomacy_cancel_meeting_req_100 hash_const
36848
36849#define cmp_packet_diplomacy_cancel_meeting_req_100 cmp_const
36850
36852#endif /* FREECIV_DELTA_PROTOCOL */
36853
36855{
36856#ifdef FREECIV_DELTA_PROTOCOL
36859 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
36860#endif /* FREECIV_DELTA_PROTOCOL */
36862#ifdef FREECIV_JSON_CONNECTION
36863 struct plocation field_addr;
36864 {
36868 }
36869#endif /* FREECIV_JSON_CONNECTION */
36870
36871#ifdef FREECIV_DELTA_PROTOCOL
36872#ifdef FREECIV_JSON_CONNECTION
36873 field_addr.name = "fields";
36874#endif /* FREECIV_JSON_CONNECTION */
36875 DIO_BV_GET(&din, &field_addr, fields);
36876
36877#else /* FREECIV_DELTA_PROTOCOL */
36878#ifdef FREECIV_JSON_CONNECTION
36879 field_addr.name = "counterpart";
36880#endif /* FREECIV_JSON_CONNECTION */
36881 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
36882 RECEIVE_PACKET_FIELD_ERROR(counterpart);
36883 }
36884#endif
36885 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: got info about ()");
36886
36887#ifdef FREECIV_DELTA_PROTOCOL
36888 if (NULL == *hash) {
36890 NULL, NULL, NULL, free);
36891 }
36892
36893 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36894 *real_packet = *old;
36895 } else {
36896 log_packet_detailed(" no old info");
36897 memset(real_packet, 0, sizeof(*real_packet));
36898 }
36899
36900 if (BV_ISSET(fields, 0)) {
36901 log_packet_detailed(" got field 'counterpart'");
36902#ifdef FREECIV_JSON_CONNECTION
36903 field_addr.name = "counterpart";
36904#endif /* FREECIV_JSON_CONNECTION */
36905 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
36906 RECEIVE_PACKET_FIELD_ERROR(counterpart);
36907 }
36908 }
36909
36910 if (NULL == old) {
36911 old = fc_malloc(sizeof(*old));
36912 *old = *real_packet;
36913 genhash_insert(*hash, old, old);
36914 } else {
36915 *old = *real_packet;
36916 }
36917
36918#endif /* FREECIV_DELTA_PROTOCOL */
36920}
36921
36923{
36924 const struct packet_diplomacy_cancel_meeting_req *real_packet = packet;
36925 int e;
36926#ifdef FREECIV_DELTA_PROTOCOL
36929 bool differ;
36930 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
36931#endif /* FREECIV_DELTA_PROTOCOL */
36933#ifdef FREECIV_JSON_CONNECTION
36934 struct plocation field_addr;
36935 {
36939 }
36940#endif /* FREECIV_JSON_CONNECTION */
36941
36942 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: sending info about ()");
36943
36944#ifdef FREECIV_DELTA_PROTOCOL
36945 if (NULL == *hash) {
36947 NULL, NULL, NULL, free);
36948 }
36949 BV_CLR_ALL(fields);
36950
36951 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36952 old = fc_malloc(sizeof(*old));
36953 *old = *real_packet;
36954 genhash_insert(*hash, old, old);
36955 memset(old, 0, sizeof(*old));
36956 }
36957 differ = (old->counterpart != real_packet->counterpart);
36958 if (differ) {
36959 BV_SET(fields, 0);
36960 }
36961
36962
36963#ifdef FREECIV_JSON_CONNECTION
36964 field_addr.name = "fields";
36965#endif /* FREECIV_JSON_CONNECTION */
36966 e = 0;
36967 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36968 if (e) {
36969 log_packet_detailed("fields bitvector error detected");
36970 }
36971
36972 if (BV_ISSET(fields, 0)) {
36973 log_packet_detailed(" field 'counterpart' has changed");
36974#ifdef FREECIV_JSON_CONNECTION
36975 field_addr.name = "counterpart";
36976#endif /* FREECIV_JSON_CONNECTION */
36977 e = 0;
36978 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
36979 if (e) {
36980 log_packet_detailed("'counterpart' field error detected");
36981 }
36982 }
36983
36984 *old = *real_packet;
36985#endif /* FREECIV_DELTA_PROTOCOL */
36986#ifndef FREECIV_DELTA_PROTOCOL
36987#ifdef FREECIV_JSON_CONNECTION
36988 field_addr.name = "counterpart";
36989#endif /* FREECIV_JSON_CONNECTION */
36990 e = 0;
36991 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
36992 if (e) {
36993 log_packet_detailed("'counterpart' field error detected");
36994 }
36995
36996#endif
36998}
36999
37001{
37002 if (!pc->used) {
37003 log_error("WARNING: trying to send data to the closed connection %s",
37005 return -1;
37006 }
37007 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet != NULL, -1,
37008 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING_REQ not installed");
37009 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet(pc, packet);
37010}
37011
37013{
37014 struct packet_diplomacy_cancel_meeting_req packet, *real_packet = &packet;
37015
37017
37019}
37020
37021#ifdef FREECIV_DELTA_PROTOCOL
37022#define hash_packet_diplomacy_cancel_meeting_100 hash_const
37023
37024#define cmp_packet_diplomacy_cancel_meeting_100 cmp_const
37025
37027#endif /* FREECIV_DELTA_PROTOCOL */
37028
37030{
37031#ifdef FREECIV_DELTA_PROTOCOL
37034 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING;
37035#endif /* FREECIV_DELTA_PROTOCOL */
37037#ifdef FREECIV_JSON_CONNECTION
37038 struct plocation field_addr;
37039 {
37043 }
37044#endif /* FREECIV_JSON_CONNECTION */
37045
37046#ifdef FREECIV_DELTA_PROTOCOL
37047#ifdef FREECIV_JSON_CONNECTION
37048 field_addr.name = "fields";
37049#endif /* FREECIV_JSON_CONNECTION */
37050 DIO_BV_GET(&din, &field_addr, fields);
37051
37052#else /* FREECIV_DELTA_PROTOCOL */
37053#ifdef FREECIV_JSON_CONNECTION
37054 field_addr.name = "counterpart";
37055#endif /* FREECIV_JSON_CONNECTION */
37056 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
37057 RECEIVE_PACKET_FIELD_ERROR(counterpart);
37058 }
37059#ifdef FREECIV_JSON_CONNECTION
37060 field_addr.name = "initiated_from";
37061#endif /* FREECIV_JSON_CONNECTION */
37062 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->initiated_from)) {
37063 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
37064 }
37065#endif
37066 log_packet_detailed("packet_diplomacy_cancel_meeting_100: got info about ()");
37067
37068#ifdef FREECIV_DELTA_PROTOCOL
37069 if (NULL == *hash) {
37071 NULL, NULL, NULL, free);
37072 }
37073
37074 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37075 *real_packet = *old;
37076 } else {
37077 log_packet_detailed(" no old info");
37078 memset(real_packet, 0, sizeof(*real_packet));
37079 }
37080
37081 if (BV_ISSET(fields, 0)) {
37082 log_packet_detailed(" got field 'counterpart'");
37083#ifdef FREECIV_JSON_CONNECTION
37084 field_addr.name = "counterpart";
37085#endif /* FREECIV_JSON_CONNECTION */
37086 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
37087 RECEIVE_PACKET_FIELD_ERROR(counterpart);
37088 }
37089 }
37090 if (BV_ISSET(fields, 1)) {
37091 log_packet_detailed(" got field 'initiated_from'");
37092#ifdef FREECIV_JSON_CONNECTION
37093 field_addr.name = "initiated_from";
37094#endif /* FREECIV_JSON_CONNECTION */
37095 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->initiated_from)) {
37096 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
37097 }
37098 }
37099
37100 if (NULL == old) {
37101 old = fc_malloc(sizeof(*old));
37102 *old = *real_packet;
37103 genhash_insert(*hash, old, old);
37104 } else {
37105 *old = *real_packet;
37106 }
37107
37108#endif /* FREECIV_DELTA_PROTOCOL */
37110}
37111
37113{
37114 const struct packet_diplomacy_cancel_meeting *real_packet = packet;
37115 int e;
37116#ifdef FREECIV_DELTA_PROTOCOL
37119 bool differ;
37120 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING;
37121#endif /* FREECIV_DELTA_PROTOCOL */
37123#ifdef FREECIV_JSON_CONNECTION
37124 struct plocation field_addr;
37125 {
37129 }
37130#endif /* FREECIV_JSON_CONNECTION */
37131
37132 log_packet_detailed("packet_diplomacy_cancel_meeting_100: sending info about ()");
37133
37134#ifdef FREECIV_DELTA_PROTOCOL
37135 if (NULL == *hash) {
37137 NULL, NULL, NULL, free);
37138 }
37139 BV_CLR_ALL(fields);
37140
37141 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37142 old = fc_malloc(sizeof(*old));
37143 *old = *real_packet;
37144 genhash_insert(*hash, old, old);
37145 memset(old, 0, sizeof(*old));
37146 }
37147 differ = (old->counterpart != real_packet->counterpart);
37148 if (differ) {
37149 BV_SET(fields, 0);
37150 }
37151
37152 differ = (old->initiated_from != real_packet->initiated_from);
37153 if (differ) {
37154 BV_SET(fields, 1);
37155 }
37156
37157
37158#ifdef FREECIV_JSON_CONNECTION
37159 field_addr.name = "fields";
37160#endif /* FREECIV_JSON_CONNECTION */
37161 e = 0;
37162 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37163 if (e) {
37164 log_packet_detailed("fields bitvector error detected");
37165 }
37166
37167 if (BV_ISSET(fields, 0)) {
37168 log_packet_detailed(" field 'counterpart' has changed");
37169#ifdef FREECIV_JSON_CONNECTION
37170 field_addr.name = "counterpart";
37171#endif /* FREECIV_JSON_CONNECTION */
37172 e = 0;
37173 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
37174 if (e) {
37175 log_packet_detailed("'counterpart' field error detected");
37176 }
37177 }
37178 if (BV_ISSET(fields, 1)) {
37179 log_packet_detailed(" field 'initiated_from' has changed");
37180#ifdef FREECIV_JSON_CONNECTION
37181 field_addr.name = "initiated_from";
37182#endif /* FREECIV_JSON_CONNECTION */
37183 e = 0;
37184 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->initiated_from);
37185 if (e) {
37186 log_packet_detailed("'initiated_from' field error detected");
37187 }
37188 }
37189
37190 *old = *real_packet;
37191#endif /* FREECIV_DELTA_PROTOCOL */
37192#ifndef FREECIV_DELTA_PROTOCOL
37193#ifdef FREECIV_JSON_CONNECTION
37194 field_addr.name = "counterpart";
37195#endif /* FREECIV_JSON_CONNECTION */
37196 e = 0;
37197 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
37198 if (e) {
37199 log_packet_detailed("'counterpart' field error detected");
37200 }
37201#ifdef FREECIV_JSON_CONNECTION
37202 field_addr.name = "initiated_from";
37203#endif /* FREECIV_JSON_CONNECTION */
37204 e = 0;
37205 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->initiated_from);
37206 if (e) {
37207 log_packet_detailed("'initiated_from' field error detected");
37208 }
37209
37210#endif
37212}
37213
37215{
37216 if (!pc->used) {
37217 log_error("WARNING: trying to send data to the closed connection %s",
37219 return -1;
37220 }
37221 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet != NULL, -1,
37222 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING not installed");
37223 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet(pc, packet);
37224}
37225
37232
37233int dsend_packet_diplomacy_cancel_meeting(struct connection *pc, int counterpart, int initiated_from)
37234{
37235 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
37236
37238 real_packet->initiated_from = initiated_from;
37239
37241}
37242
37244{
37245 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
37246
37248 real_packet->initiated_from = initiated_from;
37249
37251}
37252
37253#ifdef FREECIV_DELTA_PROTOCOL
37254#define hash_packet_diplomacy_create_clause_req_100 hash_const
37255
37256#define cmp_packet_diplomacy_create_clause_req_100 cmp_const
37257
37259#endif /* FREECIV_DELTA_PROTOCOL */
37260
37262{
37263#ifdef FREECIV_DELTA_PROTOCOL
37266 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
37267#endif /* FREECIV_DELTA_PROTOCOL */
37269#ifdef FREECIV_JSON_CONNECTION
37270 struct plocation field_addr;
37271 {
37275 }
37276#endif /* FREECIV_JSON_CONNECTION */
37277
37278#ifdef FREECIV_DELTA_PROTOCOL
37279#ifdef FREECIV_JSON_CONNECTION
37280 field_addr.name = "fields";
37281#endif /* FREECIV_JSON_CONNECTION */
37282 DIO_BV_GET(&din, &field_addr, fields);
37283
37284#else /* FREECIV_DELTA_PROTOCOL */
37285#ifdef FREECIV_JSON_CONNECTION
37286 field_addr.name = "counterpart";
37287#endif /* FREECIV_JSON_CONNECTION */
37288 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
37289 RECEIVE_PACKET_FIELD_ERROR(counterpart);
37290 }
37291#ifdef FREECIV_JSON_CONNECTION
37292 field_addr.name = "giver";
37293#endif /* FREECIV_JSON_CONNECTION */
37294 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
37296 }
37297#ifdef FREECIV_JSON_CONNECTION
37298 field_addr.name = "type";
37299#endif /* FREECIV_JSON_CONNECTION */
37300 {
37301 int readin;
37302
37303 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37305 }
37306 real_packet->type = readin;
37307 }
37308#ifdef FREECIV_JSON_CONNECTION
37309 field_addr.name = "value";
37310#endif /* FREECIV_JSON_CONNECTION */
37311 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
37313 }
37314#endif
37315 log_packet_detailed("packet_diplomacy_create_clause_req_100: got info about ()");
37316
37317#ifdef FREECIV_DELTA_PROTOCOL
37318 if (NULL == *hash) {
37320 NULL, NULL, NULL, free);
37321 }
37322
37323 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37324 *real_packet = *old;
37325 } else {
37326 log_packet_detailed(" no old info");
37327 memset(real_packet, 0, sizeof(*real_packet));
37328 }
37329
37330 if (BV_ISSET(fields, 0)) {
37331 log_packet_detailed(" got field 'counterpart'");
37332#ifdef FREECIV_JSON_CONNECTION
37333 field_addr.name = "counterpart";
37334#endif /* FREECIV_JSON_CONNECTION */
37335 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
37336 RECEIVE_PACKET_FIELD_ERROR(counterpart);
37337 }
37338 }
37339 if (BV_ISSET(fields, 1)) {
37340 log_packet_detailed(" got field 'giver'");
37341#ifdef FREECIV_JSON_CONNECTION
37342 field_addr.name = "giver";
37343#endif /* FREECIV_JSON_CONNECTION */
37344 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
37346 }
37347 }
37348 if (BV_ISSET(fields, 2)) {
37349 log_packet_detailed(" got field 'type'");
37350#ifdef FREECIV_JSON_CONNECTION
37351 field_addr.name = "type";
37352#endif /* FREECIV_JSON_CONNECTION */
37353 {
37354 int readin;
37355
37356 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37358 }
37359 real_packet->type = readin;
37360 }
37361 }
37362 if (BV_ISSET(fields, 3)) {
37363 log_packet_detailed(" got field 'value'");
37364#ifdef FREECIV_JSON_CONNECTION
37365 field_addr.name = "value";
37366#endif /* FREECIV_JSON_CONNECTION */
37367 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
37369 }
37370 }
37371
37372 if (NULL == old) {
37373 old = fc_malloc(sizeof(*old));
37374 *old = *real_packet;
37375 genhash_insert(*hash, old, old);
37376 } else {
37377 *old = *real_packet;
37378 }
37379
37380#endif /* FREECIV_DELTA_PROTOCOL */
37382}
37383
37385{
37386 const struct packet_diplomacy_create_clause_req *real_packet = packet;
37387 int e;
37388#ifdef FREECIV_DELTA_PROTOCOL
37391 bool differ;
37392 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
37393#endif /* FREECIV_DELTA_PROTOCOL */
37395#ifdef FREECIV_JSON_CONNECTION
37396 struct plocation field_addr;
37397 {
37401 }
37402#endif /* FREECIV_JSON_CONNECTION */
37403
37404 log_packet_detailed("packet_diplomacy_create_clause_req_100: sending info about ()");
37405
37406#ifdef FREECIV_DELTA_PROTOCOL
37407 if (NULL == *hash) {
37409 NULL, NULL, NULL, free);
37410 }
37411 BV_CLR_ALL(fields);
37412
37413 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37414 old = fc_malloc(sizeof(*old));
37415 *old = *real_packet;
37416 genhash_insert(*hash, old, old);
37417 memset(old, 0, sizeof(*old));
37418 }
37419 differ = (old->counterpart != real_packet->counterpart);
37420 if (differ) {
37421 BV_SET(fields, 0);
37422 }
37423
37424 differ = (old->giver != real_packet->giver);
37425 if (differ) {
37426 BV_SET(fields, 1);
37427 }
37428
37429 differ = (old->type != real_packet->type);
37430 if (differ) {
37431 BV_SET(fields, 2);
37432 }
37433
37434 differ = (old->value != real_packet->value);
37435 if (differ) {
37436 BV_SET(fields, 3);
37437 }
37438
37439
37440#ifdef FREECIV_JSON_CONNECTION
37441 field_addr.name = "fields";
37442#endif /* FREECIV_JSON_CONNECTION */
37443 e = 0;
37444 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37445 if (e) {
37446 log_packet_detailed("fields bitvector error detected");
37447 }
37448
37449 if (BV_ISSET(fields, 0)) {
37450 log_packet_detailed(" field 'counterpart' has changed");
37451#ifdef FREECIV_JSON_CONNECTION
37452 field_addr.name = "counterpart";
37453#endif /* FREECIV_JSON_CONNECTION */
37454 e = 0;
37455 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
37456 if (e) {
37457 log_packet_detailed("'counterpart' field error detected");
37458 }
37459 }
37460 if (BV_ISSET(fields, 1)) {
37461 log_packet_detailed(" field 'giver' has changed");
37462#ifdef FREECIV_JSON_CONNECTION
37463 field_addr.name = "giver";
37464#endif /* FREECIV_JSON_CONNECTION */
37465 e = 0;
37466 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
37467 if (e) {
37468 log_packet_detailed("'giver' field error detected");
37469 }
37470 }
37471 if (BV_ISSET(fields, 2)) {
37472 log_packet_detailed(" field 'type' has changed");
37473#ifdef FREECIV_JSON_CONNECTION
37474 field_addr.name = "type";
37475#endif /* FREECIV_JSON_CONNECTION */
37476 e = 0;
37477 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
37478 if (e) {
37479 log_packet_detailed("'type' field error detected");
37480 }
37481 }
37482 if (BV_ISSET(fields, 3)) {
37483 log_packet_detailed(" field 'value' has changed");
37484#ifdef FREECIV_JSON_CONNECTION
37485 field_addr.name = "value";
37486#endif /* FREECIV_JSON_CONNECTION */
37487 e = 0;
37488 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
37489 if (e) {
37490 log_packet_detailed("'value' field error detected");
37491 }
37492 }
37493
37494 *old = *real_packet;
37495#endif /* FREECIV_DELTA_PROTOCOL */
37496#ifndef FREECIV_DELTA_PROTOCOL
37497#ifdef FREECIV_JSON_CONNECTION
37498 field_addr.name = "counterpart";
37499#endif /* FREECIV_JSON_CONNECTION */
37500 e = 0;
37501 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
37502 if (e) {
37503 log_packet_detailed("'counterpart' field error detected");
37504 }
37505#ifdef FREECIV_JSON_CONNECTION
37506 field_addr.name = "giver";
37507#endif /* FREECIV_JSON_CONNECTION */
37508 e = 0;
37509 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
37510 if (e) {
37511 log_packet_detailed("'giver' field error detected");
37512 }
37513#ifdef FREECIV_JSON_CONNECTION
37514 field_addr.name = "type";
37515#endif /* FREECIV_JSON_CONNECTION */
37516 e = 0;
37517 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
37518 if (e) {
37519 log_packet_detailed("'type' field error detected");
37520 }
37521#ifdef FREECIV_JSON_CONNECTION
37522 field_addr.name = "value";
37523#endif /* FREECIV_JSON_CONNECTION */
37524 e = 0;
37525 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
37526 if (e) {
37527 log_packet_detailed("'value' field error detected");
37528 }
37529
37530#endif
37532}
37533
37535{
37536 if (!pc->used) {
37537 log_error("WARNING: trying to send data to the closed connection %s",
37539 return -1;
37540 }
37541 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet != NULL, -1,
37542 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE_REQ not installed");
37543 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet(pc, packet);
37544}
37545
37546int dsend_packet_diplomacy_create_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
37547{
37548 struct packet_diplomacy_create_clause_req packet, *real_packet = &packet;
37549
37551 real_packet->giver = giver;
37552 real_packet->type = type;
37553 real_packet->value = value;
37554
37556}
37557
37558#ifdef FREECIV_DELTA_PROTOCOL
37559#define hash_packet_diplomacy_create_clause_100 hash_const
37560
37561#define cmp_packet_diplomacy_create_clause_100 cmp_const
37562
37564#endif /* FREECIV_DELTA_PROTOCOL */
37565
37567{
37568#ifdef FREECIV_DELTA_PROTOCOL
37571 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE;
37572#endif /* FREECIV_DELTA_PROTOCOL */
37574#ifdef FREECIV_JSON_CONNECTION
37575 struct plocation field_addr;
37576 {
37580 }
37581#endif /* FREECIV_JSON_CONNECTION */
37582
37583#ifdef FREECIV_DELTA_PROTOCOL
37584#ifdef FREECIV_JSON_CONNECTION
37585 field_addr.name = "fields";
37586#endif /* FREECIV_JSON_CONNECTION */
37587 DIO_BV_GET(&din, &field_addr, fields);
37588
37589#else /* FREECIV_DELTA_PROTOCOL */
37590#ifdef FREECIV_JSON_CONNECTION
37591 field_addr.name = "counterpart";
37592#endif /* FREECIV_JSON_CONNECTION */
37593 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
37594 RECEIVE_PACKET_FIELD_ERROR(counterpart);
37595 }
37596#ifdef FREECIV_JSON_CONNECTION
37597 field_addr.name = "giver";
37598#endif /* FREECIV_JSON_CONNECTION */
37599 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
37601 }
37602#ifdef FREECIV_JSON_CONNECTION
37603 field_addr.name = "type";
37604#endif /* FREECIV_JSON_CONNECTION */
37605 {
37606 int readin;
37607
37608 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37610 }
37611 real_packet->type = readin;
37612 }
37613#ifdef FREECIV_JSON_CONNECTION
37614 field_addr.name = "value";
37615#endif /* FREECIV_JSON_CONNECTION */
37616 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
37618 }
37619#endif
37620 log_packet_detailed("packet_diplomacy_create_clause_100: got info about ()");
37621
37622#ifdef FREECIV_DELTA_PROTOCOL
37623 if (NULL == *hash) {
37625 NULL, NULL, NULL, free);
37626 }
37627
37628 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37629 *real_packet = *old;
37630 } else {
37631 log_packet_detailed(" no old info");
37632 memset(real_packet, 0, sizeof(*real_packet));
37633 }
37634
37635 if (BV_ISSET(fields, 0)) {
37636 log_packet_detailed(" got field 'counterpart'");
37637#ifdef FREECIV_JSON_CONNECTION
37638 field_addr.name = "counterpart";
37639#endif /* FREECIV_JSON_CONNECTION */
37640 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
37641 RECEIVE_PACKET_FIELD_ERROR(counterpart);
37642 }
37643 }
37644 if (BV_ISSET(fields, 1)) {
37645 log_packet_detailed(" got field 'giver'");
37646#ifdef FREECIV_JSON_CONNECTION
37647 field_addr.name = "giver";
37648#endif /* FREECIV_JSON_CONNECTION */
37649 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
37651 }
37652 }
37653 if (BV_ISSET(fields, 2)) {
37654 log_packet_detailed(" got field 'type'");
37655#ifdef FREECIV_JSON_CONNECTION
37656 field_addr.name = "type";
37657#endif /* FREECIV_JSON_CONNECTION */
37658 {
37659 int readin;
37660
37661 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37663 }
37664 real_packet->type = readin;
37665 }
37666 }
37667 if (BV_ISSET(fields, 3)) {
37668 log_packet_detailed(" got field 'value'");
37669#ifdef FREECIV_JSON_CONNECTION
37670 field_addr.name = "value";
37671#endif /* FREECIV_JSON_CONNECTION */
37672 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
37674 }
37675 }
37676
37677 if (NULL == old) {
37678 old = fc_malloc(sizeof(*old));
37679 *old = *real_packet;
37680 genhash_insert(*hash, old, old);
37681 } else {
37682 *old = *real_packet;
37683 }
37684
37685#endif /* FREECIV_DELTA_PROTOCOL */
37687}
37688
37690{
37691 const struct packet_diplomacy_create_clause *real_packet = packet;
37692 int e;
37693#ifdef FREECIV_DELTA_PROTOCOL
37696 bool differ;
37697 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE;
37698#endif /* FREECIV_DELTA_PROTOCOL */
37700#ifdef FREECIV_JSON_CONNECTION
37701 struct plocation field_addr;
37702 {
37706 }
37707#endif /* FREECIV_JSON_CONNECTION */
37708
37709 log_packet_detailed("packet_diplomacy_create_clause_100: sending info about ()");
37710
37711#ifdef FREECIV_DELTA_PROTOCOL
37712 if (NULL == *hash) {
37714 NULL, NULL, NULL, free);
37715 }
37716 BV_CLR_ALL(fields);
37717
37718 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37719 old = fc_malloc(sizeof(*old));
37720 *old = *real_packet;
37721 genhash_insert(*hash, old, old);
37722 memset(old, 0, sizeof(*old));
37723 }
37724 differ = (old->counterpart != real_packet->counterpart);
37725 if (differ) {
37726 BV_SET(fields, 0);
37727 }
37728
37729 differ = (old->giver != real_packet->giver);
37730 if (differ) {
37731 BV_SET(fields, 1);
37732 }
37733
37734 differ = (old->type != real_packet->type);
37735 if (differ) {
37736 BV_SET(fields, 2);
37737 }
37738
37739 differ = (old->value != real_packet->value);
37740 if (differ) {
37741 BV_SET(fields, 3);
37742 }
37743
37744
37745#ifdef FREECIV_JSON_CONNECTION
37746 field_addr.name = "fields";
37747#endif /* FREECIV_JSON_CONNECTION */
37748 e = 0;
37749 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37750 if (e) {
37751 log_packet_detailed("fields bitvector error detected");
37752 }
37753
37754 if (BV_ISSET(fields, 0)) {
37755 log_packet_detailed(" field 'counterpart' has changed");
37756#ifdef FREECIV_JSON_CONNECTION
37757 field_addr.name = "counterpart";
37758#endif /* FREECIV_JSON_CONNECTION */
37759 e = 0;
37760 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
37761 if (e) {
37762 log_packet_detailed("'counterpart' field error detected");
37763 }
37764 }
37765 if (BV_ISSET(fields, 1)) {
37766 log_packet_detailed(" field 'giver' has changed");
37767#ifdef FREECIV_JSON_CONNECTION
37768 field_addr.name = "giver";
37769#endif /* FREECIV_JSON_CONNECTION */
37770 e = 0;
37771 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
37772 if (e) {
37773 log_packet_detailed("'giver' field error detected");
37774 }
37775 }
37776 if (BV_ISSET(fields, 2)) {
37777 log_packet_detailed(" field 'type' has changed");
37778#ifdef FREECIV_JSON_CONNECTION
37779 field_addr.name = "type";
37780#endif /* FREECIV_JSON_CONNECTION */
37781 e = 0;
37782 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
37783 if (e) {
37784 log_packet_detailed("'type' field error detected");
37785 }
37786 }
37787 if (BV_ISSET(fields, 3)) {
37788 log_packet_detailed(" field 'value' has changed");
37789#ifdef FREECIV_JSON_CONNECTION
37790 field_addr.name = "value";
37791#endif /* FREECIV_JSON_CONNECTION */
37792 e = 0;
37793 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
37794 if (e) {
37795 log_packet_detailed("'value' field error detected");
37796 }
37797 }
37798
37799 *old = *real_packet;
37800#endif /* FREECIV_DELTA_PROTOCOL */
37801#ifndef FREECIV_DELTA_PROTOCOL
37802#ifdef FREECIV_JSON_CONNECTION
37803 field_addr.name = "counterpart";
37804#endif /* FREECIV_JSON_CONNECTION */
37805 e = 0;
37806 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
37807 if (e) {
37808 log_packet_detailed("'counterpart' field error detected");
37809 }
37810#ifdef FREECIV_JSON_CONNECTION
37811 field_addr.name = "giver";
37812#endif /* FREECIV_JSON_CONNECTION */
37813 e = 0;
37814 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
37815 if (e) {
37816 log_packet_detailed("'giver' field error detected");
37817 }
37818#ifdef FREECIV_JSON_CONNECTION
37819 field_addr.name = "type";
37820#endif /* FREECIV_JSON_CONNECTION */
37821 e = 0;
37822 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
37823 if (e) {
37824 log_packet_detailed("'type' field error detected");
37825 }
37826#ifdef FREECIV_JSON_CONNECTION
37827 field_addr.name = "value";
37828#endif /* FREECIV_JSON_CONNECTION */
37829 e = 0;
37830 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
37831 if (e) {
37832 log_packet_detailed("'value' field error detected");
37833 }
37834
37835#endif
37837}
37838
37840{
37841 if (!pc->used) {
37842 log_error("WARNING: trying to send data to the closed connection %s",
37844 return -1;
37845 }
37846 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet != NULL, -1,
37847 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE not installed");
37848 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet(pc, packet);
37849}
37850
37857
37858int dsend_packet_diplomacy_create_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
37859{
37860 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
37861
37863 real_packet->giver = giver;
37864 real_packet->type = type;
37865 real_packet->value = value;
37866
37868}
37869
37871{
37872 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
37873
37875 real_packet->giver = giver;
37876 real_packet->type = type;
37877 real_packet->value = value;
37878
37880}
37881
37882#ifdef FREECIV_DELTA_PROTOCOL
37883#define hash_packet_diplomacy_remove_clause_req_100 hash_const
37884
37885#define cmp_packet_diplomacy_remove_clause_req_100 cmp_const
37886
37888#endif /* FREECIV_DELTA_PROTOCOL */
37889
37891{
37892#ifdef FREECIV_DELTA_PROTOCOL
37895 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
37896#endif /* FREECIV_DELTA_PROTOCOL */
37898#ifdef FREECIV_JSON_CONNECTION
37899 struct plocation field_addr;
37900 {
37904 }
37905#endif /* FREECIV_JSON_CONNECTION */
37906
37907#ifdef FREECIV_DELTA_PROTOCOL
37908#ifdef FREECIV_JSON_CONNECTION
37909 field_addr.name = "fields";
37910#endif /* FREECIV_JSON_CONNECTION */
37911 DIO_BV_GET(&din, &field_addr, fields);
37912
37913#else /* FREECIV_DELTA_PROTOCOL */
37914#ifdef FREECIV_JSON_CONNECTION
37915 field_addr.name = "counterpart";
37916#endif /* FREECIV_JSON_CONNECTION */
37917 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
37918 RECEIVE_PACKET_FIELD_ERROR(counterpart);
37919 }
37920#ifdef FREECIV_JSON_CONNECTION
37921 field_addr.name = "giver";
37922#endif /* FREECIV_JSON_CONNECTION */
37923 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
37925 }
37926#ifdef FREECIV_JSON_CONNECTION
37927 field_addr.name = "type";
37928#endif /* FREECIV_JSON_CONNECTION */
37929 {
37930 int readin;
37931
37932 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37934 }
37935 real_packet->type = readin;
37936 }
37937#ifdef FREECIV_JSON_CONNECTION
37938 field_addr.name = "value";
37939#endif /* FREECIV_JSON_CONNECTION */
37940 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
37942 }
37943#endif
37944 log_packet_detailed("packet_diplomacy_remove_clause_req_100: got info about ()");
37945
37946#ifdef FREECIV_DELTA_PROTOCOL
37947 if (NULL == *hash) {
37949 NULL, NULL, NULL, free);
37950 }
37951
37952 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37953 *real_packet = *old;
37954 } else {
37955 log_packet_detailed(" no old info");
37956 memset(real_packet, 0, sizeof(*real_packet));
37957 }
37958
37959 if (BV_ISSET(fields, 0)) {
37960 log_packet_detailed(" got field 'counterpart'");
37961#ifdef FREECIV_JSON_CONNECTION
37962 field_addr.name = "counterpart";
37963#endif /* FREECIV_JSON_CONNECTION */
37964 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
37965 RECEIVE_PACKET_FIELD_ERROR(counterpart);
37966 }
37967 }
37968 if (BV_ISSET(fields, 1)) {
37969 log_packet_detailed(" got field 'giver'");
37970#ifdef FREECIV_JSON_CONNECTION
37971 field_addr.name = "giver";
37972#endif /* FREECIV_JSON_CONNECTION */
37973 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
37975 }
37976 }
37977 if (BV_ISSET(fields, 2)) {
37978 log_packet_detailed(" got field 'type'");
37979#ifdef FREECIV_JSON_CONNECTION
37980 field_addr.name = "type";
37981#endif /* FREECIV_JSON_CONNECTION */
37982 {
37983 int readin;
37984
37985 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37987 }
37988 real_packet->type = readin;
37989 }
37990 }
37991 if (BV_ISSET(fields, 3)) {
37992 log_packet_detailed(" got field 'value'");
37993#ifdef FREECIV_JSON_CONNECTION
37994 field_addr.name = "value";
37995#endif /* FREECIV_JSON_CONNECTION */
37996 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
37998 }
37999 }
38000
38001 if (NULL == old) {
38002 old = fc_malloc(sizeof(*old));
38003 *old = *real_packet;
38004 genhash_insert(*hash, old, old);
38005 } else {
38006 *old = *real_packet;
38007 }
38008
38009#endif /* FREECIV_DELTA_PROTOCOL */
38011}
38012
38014{
38015 const struct packet_diplomacy_remove_clause_req *real_packet = packet;
38016 int e;
38017#ifdef FREECIV_DELTA_PROTOCOL
38020 bool differ;
38021 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
38022#endif /* FREECIV_DELTA_PROTOCOL */
38024#ifdef FREECIV_JSON_CONNECTION
38025 struct plocation field_addr;
38026 {
38030 }
38031#endif /* FREECIV_JSON_CONNECTION */
38032
38033 log_packet_detailed("packet_diplomacy_remove_clause_req_100: sending info about ()");
38034
38035#ifdef FREECIV_DELTA_PROTOCOL
38036 if (NULL == *hash) {
38038 NULL, NULL, NULL, free);
38039 }
38040 BV_CLR_ALL(fields);
38041
38042 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38043 old = fc_malloc(sizeof(*old));
38044 *old = *real_packet;
38045 genhash_insert(*hash, old, old);
38046 memset(old, 0, sizeof(*old));
38047 }
38048 differ = (old->counterpart != real_packet->counterpart);
38049 if (differ) {
38050 BV_SET(fields, 0);
38051 }
38052
38053 differ = (old->giver != real_packet->giver);
38054 if (differ) {
38055 BV_SET(fields, 1);
38056 }
38057
38058 differ = (old->type != real_packet->type);
38059 if (differ) {
38060 BV_SET(fields, 2);
38061 }
38062
38063 differ = (old->value != real_packet->value);
38064 if (differ) {
38065 BV_SET(fields, 3);
38066 }
38067
38068
38069#ifdef FREECIV_JSON_CONNECTION
38070 field_addr.name = "fields";
38071#endif /* FREECIV_JSON_CONNECTION */
38072 e = 0;
38073 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38074 if (e) {
38075 log_packet_detailed("fields bitvector error detected");
38076 }
38077
38078 if (BV_ISSET(fields, 0)) {
38079 log_packet_detailed(" field 'counterpart' has changed");
38080#ifdef FREECIV_JSON_CONNECTION
38081 field_addr.name = "counterpart";
38082#endif /* FREECIV_JSON_CONNECTION */
38083 e = 0;
38084 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
38085 if (e) {
38086 log_packet_detailed("'counterpart' field error detected");
38087 }
38088 }
38089 if (BV_ISSET(fields, 1)) {
38090 log_packet_detailed(" field 'giver' has changed");
38091#ifdef FREECIV_JSON_CONNECTION
38092 field_addr.name = "giver";
38093#endif /* FREECIV_JSON_CONNECTION */
38094 e = 0;
38095 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
38096 if (e) {
38097 log_packet_detailed("'giver' field error detected");
38098 }
38099 }
38100 if (BV_ISSET(fields, 2)) {
38101 log_packet_detailed(" field 'type' has changed");
38102#ifdef FREECIV_JSON_CONNECTION
38103 field_addr.name = "type";
38104#endif /* FREECIV_JSON_CONNECTION */
38105 e = 0;
38106 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
38107 if (e) {
38108 log_packet_detailed("'type' field error detected");
38109 }
38110 }
38111 if (BV_ISSET(fields, 3)) {
38112 log_packet_detailed(" field 'value' has changed");
38113#ifdef FREECIV_JSON_CONNECTION
38114 field_addr.name = "value";
38115#endif /* FREECIV_JSON_CONNECTION */
38116 e = 0;
38117 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
38118 if (e) {
38119 log_packet_detailed("'value' field error detected");
38120 }
38121 }
38122
38123 *old = *real_packet;
38124#endif /* FREECIV_DELTA_PROTOCOL */
38125#ifndef FREECIV_DELTA_PROTOCOL
38126#ifdef FREECIV_JSON_CONNECTION
38127 field_addr.name = "counterpart";
38128#endif /* FREECIV_JSON_CONNECTION */
38129 e = 0;
38130 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
38131 if (e) {
38132 log_packet_detailed("'counterpart' field error detected");
38133 }
38134#ifdef FREECIV_JSON_CONNECTION
38135 field_addr.name = "giver";
38136#endif /* FREECIV_JSON_CONNECTION */
38137 e = 0;
38138 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
38139 if (e) {
38140 log_packet_detailed("'giver' field error detected");
38141 }
38142#ifdef FREECIV_JSON_CONNECTION
38143 field_addr.name = "type";
38144#endif /* FREECIV_JSON_CONNECTION */
38145 e = 0;
38146 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
38147 if (e) {
38148 log_packet_detailed("'type' field error detected");
38149 }
38150#ifdef FREECIV_JSON_CONNECTION
38151 field_addr.name = "value";
38152#endif /* FREECIV_JSON_CONNECTION */
38153 e = 0;
38154 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
38155 if (e) {
38156 log_packet_detailed("'value' field error detected");
38157 }
38158
38159#endif
38161}
38162
38164{
38165 if (!pc->used) {
38166 log_error("WARNING: trying to send data to the closed connection %s",
38168 return -1;
38169 }
38170 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet != NULL, -1,
38171 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ not installed");
38172 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet(pc, packet);
38173}
38174
38175int dsend_packet_diplomacy_remove_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
38176{
38177 struct packet_diplomacy_remove_clause_req packet, *real_packet = &packet;
38178
38180 real_packet->giver = giver;
38181 real_packet->type = type;
38182 real_packet->value = value;
38183
38185}
38186
38187#ifdef FREECIV_DELTA_PROTOCOL
38188#define hash_packet_diplomacy_remove_clause_100 hash_const
38189
38190#define cmp_packet_diplomacy_remove_clause_100 cmp_const
38191
38193#endif /* FREECIV_DELTA_PROTOCOL */
38194
38196{
38197#ifdef FREECIV_DELTA_PROTOCOL
38200 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE;
38201#endif /* FREECIV_DELTA_PROTOCOL */
38203#ifdef FREECIV_JSON_CONNECTION
38204 struct plocation field_addr;
38205 {
38209 }
38210#endif /* FREECIV_JSON_CONNECTION */
38211
38212#ifdef FREECIV_DELTA_PROTOCOL
38213#ifdef FREECIV_JSON_CONNECTION
38214 field_addr.name = "fields";
38215#endif /* FREECIV_JSON_CONNECTION */
38216 DIO_BV_GET(&din, &field_addr, fields);
38217
38218#else /* FREECIV_DELTA_PROTOCOL */
38219#ifdef FREECIV_JSON_CONNECTION
38220 field_addr.name = "counterpart";
38221#endif /* FREECIV_JSON_CONNECTION */
38222 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
38223 RECEIVE_PACKET_FIELD_ERROR(counterpart);
38224 }
38225#ifdef FREECIV_JSON_CONNECTION
38226 field_addr.name = "giver";
38227#endif /* FREECIV_JSON_CONNECTION */
38228 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
38230 }
38231#ifdef FREECIV_JSON_CONNECTION
38232 field_addr.name = "type";
38233#endif /* FREECIV_JSON_CONNECTION */
38234 {
38235 int readin;
38236
38237 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38239 }
38240 real_packet->type = readin;
38241 }
38242#ifdef FREECIV_JSON_CONNECTION
38243 field_addr.name = "value";
38244#endif /* FREECIV_JSON_CONNECTION */
38245 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
38247 }
38248#endif
38249 log_packet_detailed("packet_diplomacy_remove_clause_100: got info about ()");
38250
38251#ifdef FREECIV_DELTA_PROTOCOL
38252 if (NULL == *hash) {
38254 NULL, NULL, NULL, free);
38255 }
38256
38257 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38258 *real_packet = *old;
38259 } else {
38260 log_packet_detailed(" no old info");
38261 memset(real_packet, 0, sizeof(*real_packet));
38262 }
38263
38264 if (BV_ISSET(fields, 0)) {
38265 log_packet_detailed(" got field 'counterpart'");
38266#ifdef FREECIV_JSON_CONNECTION
38267 field_addr.name = "counterpart";
38268#endif /* FREECIV_JSON_CONNECTION */
38269 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
38270 RECEIVE_PACKET_FIELD_ERROR(counterpart);
38271 }
38272 }
38273 if (BV_ISSET(fields, 1)) {
38274 log_packet_detailed(" got field 'giver'");
38275#ifdef FREECIV_JSON_CONNECTION
38276 field_addr.name = "giver";
38277#endif /* FREECIV_JSON_CONNECTION */
38278 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
38280 }
38281 }
38282 if (BV_ISSET(fields, 2)) {
38283 log_packet_detailed(" got field 'type'");
38284#ifdef FREECIV_JSON_CONNECTION
38285 field_addr.name = "type";
38286#endif /* FREECIV_JSON_CONNECTION */
38287 {
38288 int readin;
38289
38290 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38292 }
38293 real_packet->type = readin;
38294 }
38295 }
38296 if (BV_ISSET(fields, 3)) {
38297 log_packet_detailed(" got field 'value'");
38298#ifdef FREECIV_JSON_CONNECTION
38299 field_addr.name = "value";
38300#endif /* FREECIV_JSON_CONNECTION */
38301 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
38303 }
38304 }
38305
38306 if (NULL == old) {
38307 old = fc_malloc(sizeof(*old));
38308 *old = *real_packet;
38309 genhash_insert(*hash, old, old);
38310 } else {
38311 *old = *real_packet;
38312 }
38313
38314#endif /* FREECIV_DELTA_PROTOCOL */
38316}
38317
38319{
38320 const struct packet_diplomacy_remove_clause *real_packet = packet;
38321 int e;
38322#ifdef FREECIV_DELTA_PROTOCOL
38325 bool differ;
38326 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE;
38327#endif /* FREECIV_DELTA_PROTOCOL */
38329#ifdef FREECIV_JSON_CONNECTION
38330 struct plocation field_addr;
38331 {
38335 }
38336#endif /* FREECIV_JSON_CONNECTION */
38337
38338 log_packet_detailed("packet_diplomacy_remove_clause_100: sending info about ()");
38339
38340#ifdef FREECIV_DELTA_PROTOCOL
38341 if (NULL == *hash) {
38343 NULL, NULL, NULL, free);
38344 }
38345 BV_CLR_ALL(fields);
38346
38347 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38348 old = fc_malloc(sizeof(*old));
38349 *old = *real_packet;
38350 genhash_insert(*hash, old, old);
38351 memset(old, 0, sizeof(*old));
38352 }
38353 differ = (old->counterpart != real_packet->counterpart);
38354 if (differ) {
38355 BV_SET(fields, 0);
38356 }
38357
38358 differ = (old->giver != real_packet->giver);
38359 if (differ) {
38360 BV_SET(fields, 1);
38361 }
38362
38363 differ = (old->type != real_packet->type);
38364 if (differ) {
38365 BV_SET(fields, 2);
38366 }
38367
38368 differ = (old->value != real_packet->value);
38369 if (differ) {
38370 BV_SET(fields, 3);
38371 }
38372
38373
38374#ifdef FREECIV_JSON_CONNECTION
38375 field_addr.name = "fields";
38376#endif /* FREECIV_JSON_CONNECTION */
38377 e = 0;
38378 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38379 if (e) {
38380 log_packet_detailed("fields bitvector error detected");
38381 }
38382
38383 if (BV_ISSET(fields, 0)) {
38384 log_packet_detailed(" field 'counterpart' has changed");
38385#ifdef FREECIV_JSON_CONNECTION
38386 field_addr.name = "counterpart";
38387#endif /* FREECIV_JSON_CONNECTION */
38388 e = 0;
38389 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
38390 if (e) {
38391 log_packet_detailed("'counterpart' field error detected");
38392 }
38393 }
38394 if (BV_ISSET(fields, 1)) {
38395 log_packet_detailed(" field 'giver' has changed");
38396#ifdef FREECIV_JSON_CONNECTION
38397 field_addr.name = "giver";
38398#endif /* FREECIV_JSON_CONNECTION */
38399 e = 0;
38400 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
38401 if (e) {
38402 log_packet_detailed("'giver' field error detected");
38403 }
38404 }
38405 if (BV_ISSET(fields, 2)) {
38406 log_packet_detailed(" field 'type' has changed");
38407#ifdef FREECIV_JSON_CONNECTION
38408 field_addr.name = "type";
38409#endif /* FREECIV_JSON_CONNECTION */
38410 e = 0;
38411 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
38412 if (e) {
38413 log_packet_detailed("'type' field error detected");
38414 }
38415 }
38416 if (BV_ISSET(fields, 3)) {
38417 log_packet_detailed(" field 'value' has changed");
38418#ifdef FREECIV_JSON_CONNECTION
38419 field_addr.name = "value";
38420#endif /* FREECIV_JSON_CONNECTION */
38421 e = 0;
38422 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
38423 if (e) {
38424 log_packet_detailed("'value' field error detected");
38425 }
38426 }
38427
38428 *old = *real_packet;
38429#endif /* FREECIV_DELTA_PROTOCOL */
38430#ifndef FREECIV_DELTA_PROTOCOL
38431#ifdef FREECIV_JSON_CONNECTION
38432 field_addr.name = "counterpart";
38433#endif /* FREECIV_JSON_CONNECTION */
38434 e = 0;
38435 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
38436 if (e) {
38437 log_packet_detailed("'counterpart' field error detected");
38438 }
38439#ifdef FREECIV_JSON_CONNECTION
38440 field_addr.name = "giver";
38441#endif /* FREECIV_JSON_CONNECTION */
38442 e = 0;
38443 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
38444 if (e) {
38445 log_packet_detailed("'giver' field error detected");
38446 }
38447#ifdef FREECIV_JSON_CONNECTION
38448 field_addr.name = "type";
38449#endif /* FREECIV_JSON_CONNECTION */
38450 e = 0;
38451 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
38452 if (e) {
38453 log_packet_detailed("'type' field error detected");
38454 }
38455#ifdef FREECIV_JSON_CONNECTION
38456 field_addr.name = "value";
38457#endif /* FREECIV_JSON_CONNECTION */
38458 e = 0;
38459 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
38460 if (e) {
38461 log_packet_detailed("'value' field error detected");
38462 }
38463
38464#endif
38466}
38467
38469{
38470 if (!pc->used) {
38471 log_error("WARNING: trying to send data to the closed connection %s",
38473 return -1;
38474 }
38475 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet != NULL, -1,
38476 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE not installed");
38477 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet(pc, packet);
38478}
38479
38486
38487int dsend_packet_diplomacy_remove_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
38488{
38489 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
38490
38492 real_packet->giver = giver;
38493 real_packet->type = type;
38494 real_packet->value = value;
38495
38497}
38498
38500{
38501 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
38502
38504 real_packet->giver = giver;
38505 real_packet->type = type;
38506 real_packet->value = value;
38507
38509}
38510
38511#ifdef FREECIV_DELTA_PROTOCOL
38512#define hash_packet_diplomacy_accept_treaty_req_100 hash_const
38513
38514#define cmp_packet_diplomacy_accept_treaty_req_100 cmp_const
38515
38517#endif /* FREECIV_DELTA_PROTOCOL */
38518
38520{
38521#ifdef FREECIV_DELTA_PROTOCOL
38524 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
38525#endif /* FREECIV_DELTA_PROTOCOL */
38527#ifdef FREECIV_JSON_CONNECTION
38528 struct plocation field_addr;
38529 {
38533 }
38534#endif /* FREECIV_JSON_CONNECTION */
38535
38536#ifdef FREECIV_DELTA_PROTOCOL
38537#ifdef FREECIV_JSON_CONNECTION
38538 field_addr.name = "fields";
38539#endif /* FREECIV_JSON_CONNECTION */
38540 DIO_BV_GET(&din, &field_addr, fields);
38541
38542#else /* FREECIV_DELTA_PROTOCOL */
38543#ifdef FREECIV_JSON_CONNECTION
38544 field_addr.name = "counterpart";
38545#endif /* FREECIV_JSON_CONNECTION */
38546 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
38547 RECEIVE_PACKET_FIELD_ERROR(counterpart);
38548 }
38549#endif
38550 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: got info about ()");
38551
38552#ifdef FREECIV_DELTA_PROTOCOL
38553 if (NULL == *hash) {
38555 NULL, NULL, NULL, free);
38556 }
38557
38558 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38559 *real_packet = *old;
38560 } else {
38561 log_packet_detailed(" no old info");
38562 memset(real_packet, 0, sizeof(*real_packet));
38563 }
38564
38565 if (BV_ISSET(fields, 0)) {
38566 log_packet_detailed(" got field 'counterpart'");
38567#ifdef FREECIV_JSON_CONNECTION
38568 field_addr.name = "counterpart";
38569#endif /* FREECIV_JSON_CONNECTION */
38570 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
38571 RECEIVE_PACKET_FIELD_ERROR(counterpart);
38572 }
38573 }
38574
38575 if (NULL == old) {
38576 old = fc_malloc(sizeof(*old));
38577 *old = *real_packet;
38578 genhash_insert(*hash, old, old);
38579 } else {
38580 *old = *real_packet;
38581 }
38582
38583#endif /* FREECIV_DELTA_PROTOCOL */
38585}
38586
38588{
38589 const struct packet_diplomacy_accept_treaty_req *real_packet = packet;
38590 int e;
38591#ifdef FREECIV_DELTA_PROTOCOL
38594 bool differ;
38595 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
38596#endif /* FREECIV_DELTA_PROTOCOL */
38598#ifdef FREECIV_JSON_CONNECTION
38599 struct plocation field_addr;
38600 {
38604 }
38605#endif /* FREECIV_JSON_CONNECTION */
38606
38607 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: sending info about ()");
38608
38609#ifdef FREECIV_DELTA_PROTOCOL
38610 if (NULL == *hash) {
38612 NULL, NULL, NULL, free);
38613 }
38614 BV_CLR_ALL(fields);
38615
38616 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38617 old = fc_malloc(sizeof(*old));
38618 *old = *real_packet;
38619 genhash_insert(*hash, old, old);
38620 memset(old, 0, sizeof(*old));
38621 }
38622 differ = (old->counterpart != real_packet->counterpart);
38623 if (differ) {
38624 BV_SET(fields, 0);
38625 }
38626
38627
38628#ifdef FREECIV_JSON_CONNECTION
38629 field_addr.name = "fields";
38630#endif /* FREECIV_JSON_CONNECTION */
38631 e = 0;
38632 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38633 if (e) {
38634 log_packet_detailed("fields bitvector error detected");
38635 }
38636
38637 if (BV_ISSET(fields, 0)) {
38638 log_packet_detailed(" field 'counterpart' has changed");
38639#ifdef FREECIV_JSON_CONNECTION
38640 field_addr.name = "counterpart";
38641#endif /* FREECIV_JSON_CONNECTION */
38642 e = 0;
38643 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
38644 if (e) {
38645 log_packet_detailed("'counterpart' field error detected");
38646 }
38647 }
38648
38649 *old = *real_packet;
38650#endif /* FREECIV_DELTA_PROTOCOL */
38651#ifndef FREECIV_DELTA_PROTOCOL
38652#ifdef FREECIV_JSON_CONNECTION
38653 field_addr.name = "counterpart";
38654#endif /* FREECIV_JSON_CONNECTION */
38655 e = 0;
38656 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
38657 if (e) {
38658 log_packet_detailed("'counterpart' field error detected");
38659 }
38660
38661#endif
38663}
38664
38666{
38667 if (!pc->used) {
38668 log_error("WARNING: trying to send data to the closed connection %s",
38670 return -1;
38671 }
38672 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet != NULL, -1,
38673 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY_REQ not installed");
38674 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet(pc, packet);
38675}
38676
38678{
38679 struct packet_diplomacy_accept_treaty_req packet, *real_packet = &packet;
38680
38682
38684}
38685
38686#ifdef FREECIV_DELTA_PROTOCOL
38687#define hash_packet_diplomacy_accept_treaty_100 hash_const
38688
38689#define cmp_packet_diplomacy_accept_treaty_100 cmp_const
38690
38692#endif /* FREECIV_DELTA_PROTOCOL */
38693
38695{
38696#ifdef FREECIV_DELTA_PROTOCOL
38699 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY;
38700#endif /* FREECIV_DELTA_PROTOCOL */
38702#ifdef FREECIV_JSON_CONNECTION
38703 struct plocation field_addr;
38704 {
38708 }
38709#endif /* FREECIV_JSON_CONNECTION */
38710
38711#ifdef FREECIV_DELTA_PROTOCOL
38712#ifdef FREECIV_JSON_CONNECTION
38713 field_addr.name = "fields";
38714#endif /* FREECIV_JSON_CONNECTION */
38715 DIO_BV_GET(&din, &field_addr, fields);
38716
38717#else /* FREECIV_DELTA_PROTOCOL */
38718#ifdef FREECIV_JSON_CONNECTION
38719 field_addr.name = "counterpart";
38720#endif /* FREECIV_JSON_CONNECTION */
38721 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
38722 RECEIVE_PACKET_FIELD_ERROR(counterpart);
38723 }
38724#ifdef FREECIV_JSON_CONNECTION
38725 field_addr.name = "I_accepted";
38726#endif /* FREECIV_JSON_CONNECTION */
38727 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->I_accepted)) {
38728 RECEIVE_PACKET_FIELD_ERROR(I_accepted);
38729 }
38730#ifdef FREECIV_JSON_CONNECTION
38731 field_addr.name = "other_accepted";
38732#endif /* FREECIV_JSON_CONNECTION */
38733 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->other_accepted)) {
38734 RECEIVE_PACKET_FIELD_ERROR(other_accepted);
38735 }
38736#endif
38737 log_packet_detailed("packet_diplomacy_accept_treaty_100: got info about ()");
38738
38739#ifdef FREECIV_DELTA_PROTOCOL
38740 if (NULL == *hash) {
38742 NULL, NULL, NULL, free);
38743 }
38744
38745 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38746 *real_packet = *old;
38747 } else {
38748 log_packet_detailed(" no old info");
38749 memset(real_packet, 0, sizeof(*real_packet));
38750 }
38751
38752 if (BV_ISSET(fields, 0)) {
38753 log_packet_detailed(" got field 'counterpart'");
38754#ifdef FREECIV_JSON_CONNECTION
38755 field_addr.name = "counterpart";
38756#endif /* FREECIV_JSON_CONNECTION */
38757 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
38758 RECEIVE_PACKET_FIELD_ERROR(counterpart);
38759 }
38760 }
38761 real_packet->I_accepted = BV_ISSET(fields, 1);
38762 real_packet->other_accepted = BV_ISSET(fields, 2);
38763
38764 if (NULL == old) {
38765 old = fc_malloc(sizeof(*old));
38766 *old = *real_packet;
38767 genhash_insert(*hash, old, old);
38768 } else {
38769 *old = *real_packet;
38770 }
38771
38772#endif /* FREECIV_DELTA_PROTOCOL */
38774}
38775
38777{
38778 const struct packet_diplomacy_accept_treaty *real_packet = packet;
38779 int e;
38780#ifdef FREECIV_DELTA_PROTOCOL
38783 bool differ;
38784 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY;
38785#endif /* FREECIV_DELTA_PROTOCOL */
38787#ifdef FREECIV_JSON_CONNECTION
38788 struct plocation field_addr;
38789 {
38793 }
38794#endif /* FREECIV_JSON_CONNECTION */
38795
38796 log_packet_detailed("packet_diplomacy_accept_treaty_100: sending info about ()");
38797
38798#ifdef FREECIV_DELTA_PROTOCOL
38799 if (NULL == *hash) {
38801 NULL, NULL, NULL, free);
38802 }
38803 BV_CLR_ALL(fields);
38804
38805 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38806 old = fc_malloc(sizeof(*old));
38807 *old = *real_packet;
38808 genhash_insert(*hash, old, old);
38809 memset(old, 0, sizeof(*old));
38810 }
38811 differ = (old->counterpart != real_packet->counterpart);
38812 if (differ) {
38813 BV_SET(fields, 0);
38814 }
38815
38816 if (packet->I_accepted) {
38817 BV_SET(fields, 1);
38818 }
38819
38820 if (packet->other_accepted) {
38821 BV_SET(fields, 2);
38822 }
38823
38824
38825#ifdef FREECIV_JSON_CONNECTION
38826 field_addr.name = "fields";
38827#endif /* FREECIV_JSON_CONNECTION */
38828 e = 0;
38829 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38830 if (e) {
38831 log_packet_detailed("fields bitvector error detected");
38832 }
38833
38834 if (BV_ISSET(fields, 0)) {
38835 log_packet_detailed(" field 'counterpart' has changed");
38836#ifdef FREECIV_JSON_CONNECTION
38837 field_addr.name = "counterpart";
38838#endif /* FREECIV_JSON_CONNECTION */
38839 e = 0;
38840 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
38841 if (e) {
38842 log_packet_detailed("'counterpart' field error detected");
38843 }
38844 }
38845 /* field 1 is folded into the header */
38846 /* field 2 is folded into the header */
38847
38848 *old = *real_packet;
38849#endif /* FREECIV_DELTA_PROTOCOL */
38850#ifndef FREECIV_DELTA_PROTOCOL
38851#ifdef FREECIV_JSON_CONNECTION
38852 field_addr.name = "counterpart";
38853#endif /* FREECIV_JSON_CONNECTION */
38854 e = 0;
38855 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
38856 if (e) {
38857 log_packet_detailed("'counterpart' field error detected");
38858 }
38859#ifdef FREECIV_JSON_CONNECTION
38860 field_addr.name = "I_accepted";
38861#endif /* FREECIV_JSON_CONNECTION */
38862 e = 0;
38863 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->I_accepted);
38864 if (e) {
38865 log_packet_detailed("'I_accepted' field error detected");
38866 }
38867#ifdef FREECIV_JSON_CONNECTION
38868 field_addr.name = "other_accepted";
38869#endif /* FREECIV_JSON_CONNECTION */
38870 e = 0;
38871 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->other_accepted);
38872 if (e) {
38873 log_packet_detailed("'other_accepted' field error detected");
38874 }
38875
38876#endif
38878}
38879
38881{
38882 if (!pc->used) {
38883 log_error("WARNING: trying to send data to the closed connection %s",
38885 return -1;
38886 }
38887 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet != NULL, -1,
38888 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY not installed");
38889 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet(pc, packet);
38890}
38891
38898
38899int dsend_packet_diplomacy_accept_treaty(struct connection *pc, int counterpart, bool I_accepted, bool other_accepted)
38900{
38901 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
38902
38904 real_packet->I_accepted = I_accepted;
38905 real_packet->other_accepted = other_accepted;
38906
38908}
38909
38911{
38912 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
38913
38915 real_packet->I_accepted = I_accepted;
38916 real_packet->other_accepted = other_accepted;
38917
38919}
38920
38921#ifdef FREECIV_DELTA_PROTOCOL
38922#define hash_packet_diplomacy_cancel_pact_100 hash_const
38923
38924#define cmp_packet_diplomacy_cancel_pact_100 cmp_const
38925
38927#endif /* FREECIV_DELTA_PROTOCOL */
38928
38930{
38931#ifdef FREECIV_DELTA_PROTOCOL
38933 struct packet_diplomacy_cancel_pact *old;
38934 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_PACT;
38935#endif /* FREECIV_DELTA_PROTOCOL */
38937#ifdef FREECIV_JSON_CONNECTION
38938 struct plocation field_addr;
38939 {
38943 }
38944#endif /* FREECIV_JSON_CONNECTION */
38945
38946#ifdef FREECIV_DELTA_PROTOCOL
38947#ifdef FREECIV_JSON_CONNECTION
38948 field_addr.name = "fields";
38949#endif /* FREECIV_JSON_CONNECTION */
38950 DIO_BV_GET(&din, &field_addr, fields);
38951
38952#else /* FREECIV_DELTA_PROTOCOL */
38953#ifdef FREECIV_JSON_CONNECTION
38954 field_addr.name = "other_player_id";
38955#endif /* FREECIV_JSON_CONNECTION */
38956 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->other_player_id)) {
38957 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
38958 }
38959#ifdef FREECIV_JSON_CONNECTION
38960 field_addr.name = "clause";
38961#endif /* FREECIV_JSON_CONNECTION */
38962 {
38963 int readin;
38964
38965 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38967 }
38968 real_packet->clause = readin;
38969 }
38970#endif
38971 log_packet_detailed("packet_diplomacy_cancel_pact_100: got info about ()");
38972
38973#ifdef FREECIV_DELTA_PROTOCOL
38974 if (NULL == *hash) {
38976 NULL, NULL, NULL, free);
38977 }
38978
38979 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38980 *real_packet = *old;
38981 } else {
38982 log_packet_detailed(" no old info");
38983 memset(real_packet, 0, sizeof(*real_packet));
38984 }
38985
38986 if (BV_ISSET(fields, 0)) {
38987 log_packet_detailed(" got field 'other_player_id'");
38988#ifdef FREECIV_JSON_CONNECTION
38989 field_addr.name = "other_player_id";
38990#endif /* FREECIV_JSON_CONNECTION */
38991 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->other_player_id)) {
38992 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
38993 }
38994 }
38995 if (BV_ISSET(fields, 1)) {
38996 log_packet_detailed(" got field 'clause'");
38997#ifdef FREECIV_JSON_CONNECTION
38998 field_addr.name = "clause";
38999#endif /* FREECIV_JSON_CONNECTION */
39000 {
39001 int readin;
39002
39003 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39005 }
39006 real_packet->clause = readin;
39007 }
39008 }
39009
39010 if (NULL == old) {
39011 old = fc_malloc(sizeof(*old));
39012 *old = *real_packet;
39013 genhash_insert(*hash, old, old);
39014 } else {
39015 *old = *real_packet;
39016 }
39017
39018#endif /* FREECIV_DELTA_PROTOCOL */
39020}
39021
39023{
39024 const struct packet_diplomacy_cancel_pact *real_packet = packet;
39025 int e;
39026#ifdef FREECIV_DELTA_PROTOCOL
39028 struct packet_diplomacy_cancel_pact *old;
39029 bool differ;
39030 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_PACT;
39031#endif /* FREECIV_DELTA_PROTOCOL */
39033#ifdef FREECIV_JSON_CONNECTION
39034 struct plocation field_addr;
39035 {
39039 }
39040#endif /* FREECIV_JSON_CONNECTION */
39041
39042 log_packet_detailed("packet_diplomacy_cancel_pact_100: sending info about ()");
39043
39044#ifdef FREECIV_DELTA_PROTOCOL
39045 if (NULL == *hash) {
39047 NULL, NULL, NULL, free);
39048 }
39049 BV_CLR_ALL(fields);
39050
39051 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39052 old = fc_malloc(sizeof(*old));
39053 *old = *real_packet;
39054 genhash_insert(*hash, old, old);
39055 memset(old, 0, sizeof(*old));
39056 }
39057 differ = (old->other_player_id != real_packet->other_player_id);
39058 if (differ) {
39059 BV_SET(fields, 0);
39060 }
39061
39062 differ = (old->clause != real_packet->clause);
39063 if (differ) {
39064 BV_SET(fields, 1);
39065 }
39066
39067
39068#ifdef FREECIV_JSON_CONNECTION
39069 field_addr.name = "fields";
39070#endif /* FREECIV_JSON_CONNECTION */
39071 e = 0;
39072 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39073 if (e) {
39074 log_packet_detailed("fields bitvector error detected");
39075 }
39076
39077 if (BV_ISSET(fields, 0)) {
39078 log_packet_detailed(" field 'other_player_id' has changed");
39079#ifdef FREECIV_JSON_CONNECTION
39080 field_addr.name = "other_player_id";
39081#endif /* FREECIV_JSON_CONNECTION */
39082 e = 0;
39083 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->other_player_id);
39084 if (e) {
39085 log_packet_detailed("'other_player_id' field error detected");
39086 }
39087 }
39088 if (BV_ISSET(fields, 1)) {
39089 log_packet_detailed(" field 'clause' has changed");
39090#ifdef FREECIV_JSON_CONNECTION
39091 field_addr.name = "clause";
39092#endif /* FREECIV_JSON_CONNECTION */
39093 e = 0;
39094 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
39095 if (e) {
39096 log_packet_detailed("'clause' field error detected");
39097 }
39098 }
39099
39100 *old = *real_packet;
39101#endif /* FREECIV_DELTA_PROTOCOL */
39102#ifndef FREECIV_DELTA_PROTOCOL
39103#ifdef FREECIV_JSON_CONNECTION
39104 field_addr.name = "other_player_id";
39105#endif /* FREECIV_JSON_CONNECTION */
39106 e = 0;
39107 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->other_player_id);
39108 if (e) {
39109 log_packet_detailed("'other_player_id' field error detected");
39110 }
39111#ifdef FREECIV_JSON_CONNECTION
39112 field_addr.name = "clause";
39113#endif /* FREECIV_JSON_CONNECTION */
39114 e = 0;
39115 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
39116 if (e) {
39117 log_packet_detailed("'clause' field error detected");
39118 }
39119
39120#endif
39122}
39123
39125{
39126 if (!pc->used) {
39127 log_error("WARNING: trying to send data to the closed connection %s",
39129 return -1;
39130 }
39131 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet != NULL, -1,
39132 "Handler for PACKET_DIPLOMACY_CANCEL_PACT not installed");
39133 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet(pc, packet);
39134}
39135
39136int dsend_packet_diplomacy_cancel_pact(struct connection *pc, int other_player_id, enum clause_type clause)
39137{
39138 struct packet_diplomacy_cancel_pact packet, *real_packet = &packet;
39139
39141 real_packet->clause = clause;
39142
39144}
39145
39146#ifdef FREECIV_DELTA_PROTOCOL
39147#define hash_packet_page_msg_100 hash_const
39148
39149#define cmp_packet_page_msg_100 cmp_const
39150
39152#endif /* FREECIV_DELTA_PROTOCOL */
39153
39155{
39156#ifdef FREECIV_DELTA_PROTOCOL
39158 struct packet_page_msg *old;
39159 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG;
39160#endif /* FREECIV_DELTA_PROTOCOL */
39162#ifdef FREECIV_JSON_CONNECTION
39163 struct plocation field_addr;
39164 {
39168 }
39169#endif /* FREECIV_JSON_CONNECTION */
39170
39171#ifdef FREECIV_DELTA_PROTOCOL
39172#ifdef FREECIV_JSON_CONNECTION
39173 field_addr.name = "fields";
39174#endif /* FREECIV_JSON_CONNECTION */
39175 DIO_BV_GET(&din, &field_addr, fields);
39176
39177#else /* FREECIV_DELTA_PROTOCOL */
39178#ifdef FREECIV_JSON_CONNECTION
39179 field_addr.name = "caption";
39180#endif /* FREECIV_JSON_CONNECTION */
39181 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
39183 }
39184#ifdef FREECIV_JSON_CONNECTION
39185 field_addr.name = "headline";
39186#endif /* FREECIV_JSON_CONNECTION */
39187 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
39189 }
39190#ifdef FREECIV_JSON_CONNECTION
39191 field_addr.name = "event";
39192#endif /* FREECIV_JSON_CONNECTION */
39193 {
39194 int readin;
39195
39196 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
39198 }
39199 real_packet->event = readin;
39200 }
39201#ifdef FREECIV_JSON_CONNECTION
39202 field_addr.name = "len";
39203#endif /* FREECIV_JSON_CONNECTION */
39204 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
39206 }
39207#ifdef FREECIV_JSON_CONNECTION
39208 field_addr.name = "parts";
39209#endif /* FREECIV_JSON_CONNECTION */
39210 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
39212 }
39213#endif
39214 log_packet_detailed("packet_page_msg_100: got info about ()");
39215
39216#ifdef FREECIV_DELTA_PROTOCOL
39217 if (NULL == *hash) {
39219 NULL, NULL, NULL, free);
39220 }
39221
39222 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39223 *real_packet = *old;
39224 } else {
39225 log_packet_detailed(" no old info");
39226 memset(real_packet, 0, sizeof(*real_packet));
39227 }
39228
39229 if (BV_ISSET(fields, 0)) {
39230 log_packet_detailed(" got field 'caption'");
39231#ifdef FREECIV_JSON_CONNECTION
39232 field_addr.name = "caption";
39233#endif /* FREECIV_JSON_CONNECTION */
39234 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
39236 }
39237 }
39238 if (BV_ISSET(fields, 1)) {
39239 log_packet_detailed(" got field 'headline'");
39240#ifdef FREECIV_JSON_CONNECTION
39241 field_addr.name = "headline";
39242#endif /* FREECIV_JSON_CONNECTION */
39243 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
39245 }
39246 }
39247 if (BV_ISSET(fields, 2)) {
39248 log_packet_detailed(" got field 'event'");
39249#ifdef FREECIV_JSON_CONNECTION
39250 field_addr.name = "event";
39251#endif /* FREECIV_JSON_CONNECTION */
39252 {
39253 int readin;
39254
39255 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
39257 }
39258 real_packet->event = readin;
39259 }
39260 }
39261 if (BV_ISSET(fields, 3)) {
39262 log_packet_detailed(" got field 'len'");
39263#ifdef FREECIV_JSON_CONNECTION
39264 field_addr.name = "len";
39265#endif /* FREECIV_JSON_CONNECTION */
39266 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
39268 }
39269 }
39270 if (BV_ISSET(fields, 4)) {
39271 log_packet_detailed(" got field 'parts'");
39272#ifdef FREECIV_JSON_CONNECTION
39273 field_addr.name = "parts";
39274#endif /* FREECIV_JSON_CONNECTION */
39275 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
39277 }
39278 }
39279
39280 if (NULL == old) {
39281 old = fc_malloc(sizeof(*old));
39282 *old = *real_packet;
39283 genhash_insert(*hash, old, old);
39284 } else {
39285 *old = *real_packet;
39286 }
39287
39288#endif /* FREECIV_DELTA_PROTOCOL */
39290}
39291
39292static int send_packet_page_msg_100(struct connection *pc, const struct packet_page_msg *packet)
39293{
39294 const struct packet_page_msg *real_packet = packet;
39295 int e;
39296#ifdef FREECIV_DELTA_PROTOCOL
39298 struct packet_page_msg *old;
39299 bool differ;
39300 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG;
39301#endif /* FREECIV_DELTA_PROTOCOL */
39303#ifdef FREECIV_JSON_CONNECTION
39304 struct plocation field_addr;
39305 {
39309 }
39310#endif /* FREECIV_JSON_CONNECTION */
39311
39312 log_packet_detailed("packet_page_msg_100: sending info about ()");
39313
39314#ifdef FREECIV_DELTA_PROTOCOL
39315 if (NULL == *hash) {
39317 NULL, NULL, NULL, free);
39318 }
39319 BV_CLR_ALL(fields);
39320
39321 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39322 old = fc_malloc(sizeof(*old));
39323 *old = *real_packet;
39324 genhash_insert(*hash, old, old);
39325 memset(old, 0, sizeof(*old));
39326 }
39327 differ = (strcmp(old->caption, real_packet->caption) != 0);
39328 if (differ) {
39329 BV_SET(fields, 0);
39330 }
39331
39332 differ = (strcmp(old->headline, real_packet->headline) != 0);
39333 if (differ) {
39334 BV_SET(fields, 1);
39335 }
39336
39337 differ = (old->event != real_packet->event);
39338 if (differ) {
39339 BV_SET(fields, 2);
39340 }
39341
39342 differ = (old->len != real_packet->len);
39343 if (differ) {
39344 BV_SET(fields, 3);
39345 }
39346
39347 differ = (old->parts != real_packet->parts);
39348 if (differ) {
39349 BV_SET(fields, 4);
39350 }
39351
39352
39353#ifdef FREECIV_JSON_CONNECTION
39354 field_addr.name = "fields";
39355#endif /* FREECIV_JSON_CONNECTION */
39356 e = 0;
39357 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39358 if (e) {
39359 log_packet_detailed("fields bitvector error detected");
39360 }
39361
39362 if (BV_ISSET(fields, 0)) {
39363 log_packet_detailed(" field 'caption' has changed");
39364#ifdef FREECIV_JSON_CONNECTION
39365 field_addr.name = "caption";
39366#endif /* FREECIV_JSON_CONNECTION */
39367 e = 0;
39368 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
39369 if (e) {
39370 log_packet_detailed("'caption' field error detected");
39371 }
39372 }
39373 if (BV_ISSET(fields, 1)) {
39374 log_packet_detailed(" field 'headline' has changed");
39375#ifdef FREECIV_JSON_CONNECTION
39376 field_addr.name = "headline";
39377#endif /* FREECIV_JSON_CONNECTION */
39378 e = 0;
39379 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
39380 if (e) {
39381 log_packet_detailed("'headline' field error detected");
39382 }
39383 }
39384 if (BV_ISSET(fields, 2)) {
39385 log_packet_detailed(" field 'event' has changed");
39386#ifdef FREECIV_JSON_CONNECTION
39387 field_addr.name = "event";
39388#endif /* FREECIV_JSON_CONNECTION */
39389 e = 0;
39390 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
39391 if (e) {
39392 log_packet_detailed("'event' field error detected");
39393 }
39394 }
39395 if (BV_ISSET(fields, 3)) {
39396 log_packet_detailed(" field 'len' has changed");
39397#ifdef FREECIV_JSON_CONNECTION
39398 field_addr.name = "len";
39399#endif /* FREECIV_JSON_CONNECTION */
39400 e = 0;
39401 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
39402 if (e) {
39403 log_packet_detailed("'len' field error detected");
39404 }
39405 }
39406 if (BV_ISSET(fields, 4)) {
39407 log_packet_detailed(" field 'parts' has changed");
39408#ifdef FREECIV_JSON_CONNECTION
39409 field_addr.name = "parts";
39410#endif /* FREECIV_JSON_CONNECTION */
39411 e = 0;
39412 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
39413 if (e) {
39414 log_packet_detailed("'parts' field error detected");
39415 }
39416 }
39417
39418 *old = *real_packet;
39419#endif /* FREECIV_DELTA_PROTOCOL */
39420#ifndef FREECIV_DELTA_PROTOCOL
39421#ifdef FREECIV_JSON_CONNECTION
39422 field_addr.name = "caption";
39423#endif /* FREECIV_JSON_CONNECTION */
39424 e = 0;
39425 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
39426 if (e) {
39427 log_packet_detailed("'caption' field error detected");
39428 }
39429#ifdef FREECIV_JSON_CONNECTION
39430 field_addr.name = "headline";
39431#endif /* FREECIV_JSON_CONNECTION */
39432 e = 0;
39433 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
39434 if (e) {
39435 log_packet_detailed("'headline' field error detected");
39436 }
39437#ifdef FREECIV_JSON_CONNECTION
39438 field_addr.name = "event";
39439#endif /* FREECIV_JSON_CONNECTION */
39440 e = 0;
39441 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
39442 if (e) {
39443 log_packet_detailed("'event' field error detected");
39444 }
39445#ifdef FREECIV_JSON_CONNECTION
39446 field_addr.name = "len";
39447#endif /* FREECIV_JSON_CONNECTION */
39448 e = 0;
39449 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
39450 if (e) {
39451 log_packet_detailed("'len' field error detected");
39452 }
39453#ifdef FREECIV_JSON_CONNECTION
39454 field_addr.name = "parts";
39455#endif /* FREECIV_JSON_CONNECTION */
39456 e = 0;
39457 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
39458 if (e) {
39459 log_packet_detailed("'parts' field error detected");
39460 }
39461
39462#endif
39464}
39465
39466int send_packet_page_msg(struct connection *pc, const struct packet_page_msg *packet)
39467{
39468 if (!pc->used) {
39469 log_error("WARNING: trying to send data to the closed connection %s",
39471 return -1;
39472 }
39473 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG].packet != NULL, -1,
39474 "Handler for PACKET_PAGE_MSG not installed");
39475 return pc->phs.handlers->send[PACKET_PAGE_MSG].packet(pc, packet);
39476}
39477
39478void lsend_packet_page_msg(struct conn_list *dest, const struct packet_page_msg *packet)
39479{
39480 conn_list_iterate(dest, pconn) {
39481 send_packet_page_msg(pconn, packet);
39483}
39484
39485#ifdef FREECIV_DELTA_PROTOCOL
39486#define hash_packet_page_msg_part_100 hash_const
39487
39488#define cmp_packet_page_msg_part_100 cmp_const
39489
39491#endif /* FREECIV_DELTA_PROTOCOL */
39492
39494{
39495#ifdef FREECIV_DELTA_PROTOCOL
39497 struct packet_page_msg_part *old;
39498 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG_PART;
39499#endif /* FREECIV_DELTA_PROTOCOL */
39501#ifdef FREECIV_JSON_CONNECTION
39502 struct plocation field_addr;
39503 {
39507 }
39508#endif /* FREECIV_JSON_CONNECTION */
39509
39510#ifdef FREECIV_DELTA_PROTOCOL
39511#ifdef FREECIV_JSON_CONNECTION
39512 field_addr.name = "fields";
39513#endif /* FREECIV_JSON_CONNECTION */
39514 DIO_BV_GET(&din, &field_addr, fields);
39515
39516#else /* FREECIV_DELTA_PROTOCOL */
39517#ifdef FREECIV_JSON_CONNECTION
39518 field_addr.name = "lines";
39519#endif /* FREECIV_JSON_CONNECTION */
39520 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
39522 }
39523#endif
39524 log_packet_detailed("packet_page_msg_part_100: got info about ()");
39525
39526#ifdef FREECIV_DELTA_PROTOCOL
39527 if (NULL == *hash) {
39529 NULL, NULL, NULL, free);
39530 }
39531
39532 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39533 *real_packet = *old;
39534 } else {
39535 log_packet_detailed(" no old info");
39536 memset(real_packet, 0, sizeof(*real_packet));
39537 }
39538
39539 if (BV_ISSET(fields, 0)) {
39540 log_packet_detailed(" got field 'lines'");
39541#ifdef FREECIV_JSON_CONNECTION
39542 field_addr.name = "lines";
39543#endif /* FREECIV_JSON_CONNECTION */
39544 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
39546 }
39547 }
39548
39549 if (NULL == old) {
39550 old = fc_malloc(sizeof(*old));
39551 *old = *real_packet;
39552 genhash_insert(*hash, old, old);
39553 } else {
39554 *old = *real_packet;
39555 }
39556
39557#endif /* FREECIV_DELTA_PROTOCOL */
39559}
39560
39561static int send_packet_page_msg_part_100(struct connection *pc, const struct packet_page_msg_part *packet)
39562{
39563 const struct packet_page_msg_part *real_packet = packet;
39564 int e;
39565#ifdef FREECIV_DELTA_PROTOCOL
39567 struct packet_page_msg_part *old;
39568 bool differ;
39569 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG_PART;
39570#endif /* FREECIV_DELTA_PROTOCOL */
39572#ifdef FREECIV_JSON_CONNECTION
39573 struct plocation field_addr;
39574 {
39578 }
39579#endif /* FREECIV_JSON_CONNECTION */
39580
39581 log_packet_detailed("packet_page_msg_part_100: sending info about ()");
39582
39583#ifdef FREECIV_DELTA_PROTOCOL
39584 if (NULL == *hash) {
39586 NULL, NULL, NULL, free);
39587 }
39588 BV_CLR_ALL(fields);
39589
39590 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39591 old = fc_malloc(sizeof(*old));
39592 *old = *real_packet;
39593 genhash_insert(*hash, old, old);
39594 memset(old, 0, sizeof(*old));
39595 }
39596 differ = (strcmp(old->lines, real_packet->lines) != 0);
39597 if (differ) {
39598 BV_SET(fields, 0);
39599 }
39600
39601
39602#ifdef FREECIV_JSON_CONNECTION
39603 field_addr.name = "fields";
39604#endif /* FREECIV_JSON_CONNECTION */
39605 e = 0;
39606 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39607 if (e) {
39608 log_packet_detailed("fields bitvector error detected");
39609 }
39610
39611 if (BV_ISSET(fields, 0)) {
39612 log_packet_detailed(" field 'lines' has changed");
39613#ifdef FREECIV_JSON_CONNECTION
39614 field_addr.name = "lines";
39615#endif /* FREECIV_JSON_CONNECTION */
39616 e = 0;
39617 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
39618 if (e) {
39619 log_packet_detailed("'lines' field error detected");
39620 }
39621 }
39622
39623 *old = *real_packet;
39624#endif /* FREECIV_DELTA_PROTOCOL */
39625#ifndef FREECIV_DELTA_PROTOCOL
39626#ifdef FREECIV_JSON_CONNECTION
39627 field_addr.name = "lines";
39628#endif /* FREECIV_JSON_CONNECTION */
39629 e = 0;
39630 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
39631 if (e) {
39632 log_packet_detailed("'lines' field error detected");
39633 }
39634
39635#endif
39637}
39638
39640{
39641 if (!pc->used) {
39642 log_error("WARNING: trying to send data to the closed connection %s",
39644 return -1;
39645 }
39646 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet != NULL, -1,
39647 "Handler for PACKET_PAGE_MSG_PART not installed");
39648 return pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet(pc, packet);
39649}
39650
39651void lsend_packet_page_msg_part(struct conn_list *dest, const struct packet_page_msg_part *packet)
39652{
39653 conn_list_iterate(dest, pconn) {
39656}
39657
39658#ifdef FREECIV_DELTA_PROTOCOL
39659#define hash_packet_report_req_100 hash_const
39660
39661#define cmp_packet_report_req_100 cmp_const
39662
39664#endif /* FREECIV_DELTA_PROTOCOL */
39665
39667{
39668#ifdef FREECIV_DELTA_PROTOCOL
39670 struct packet_report_req *old;
39671 struct genhash **hash = pc->phs.received + PACKET_REPORT_REQ;
39672#endif /* FREECIV_DELTA_PROTOCOL */
39674#ifdef FREECIV_JSON_CONNECTION
39675 struct plocation field_addr;
39676 {
39680 }
39681#endif /* FREECIV_JSON_CONNECTION */
39682
39683#ifdef FREECIV_DELTA_PROTOCOL
39684#ifdef FREECIV_JSON_CONNECTION
39685 field_addr.name = "fields";
39686#endif /* FREECIV_JSON_CONNECTION */
39687 DIO_BV_GET(&din, &field_addr, fields);
39688
39689#else /* FREECIV_DELTA_PROTOCOL */
39690#ifdef FREECIV_JSON_CONNECTION
39691 field_addr.name = "type";
39692#endif /* FREECIV_JSON_CONNECTION */
39693 {
39694 int readin;
39695
39696 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39698 }
39699 real_packet->type = readin;
39700 }
39701#endif
39702 log_packet_detailed("packet_report_req_100: got info about ()");
39703
39704#ifdef FREECIV_DELTA_PROTOCOL
39705 if (NULL == *hash) {
39707 NULL, NULL, NULL, free);
39708 }
39709
39710 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39711 *real_packet = *old;
39712 } else {
39713 log_packet_detailed(" no old info");
39714 memset(real_packet, 0, sizeof(*real_packet));
39715 }
39716
39717 if (BV_ISSET(fields, 0)) {
39718 log_packet_detailed(" got field 'type'");
39719#ifdef FREECIV_JSON_CONNECTION
39720 field_addr.name = "type";
39721#endif /* FREECIV_JSON_CONNECTION */
39722 {
39723 int readin;
39724
39725 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39727 }
39728 real_packet->type = readin;
39729 }
39730 }
39731
39732 if (NULL == old) {
39733 old = fc_malloc(sizeof(*old));
39734 *old = *real_packet;
39735 genhash_insert(*hash, old, old);
39736 } else {
39737 *old = *real_packet;
39738 }
39739
39740#endif /* FREECIV_DELTA_PROTOCOL */
39742}
39743
39744static int send_packet_report_req_100(struct connection *pc, const struct packet_report_req *packet)
39745{
39746 const struct packet_report_req *real_packet = packet;
39747 int e;
39748#ifdef FREECIV_DELTA_PROTOCOL
39750 struct packet_report_req *old;
39751 bool differ;
39752 struct genhash **hash = pc->phs.sent + PACKET_REPORT_REQ;
39753#endif /* FREECIV_DELTA_PROTOCOL */
39755#ifdef FREECIV_JSON_CONNECTION
39756 struct plocation field_addr;
39757 {
39761 }
39762#endif /* FREECIV_JSON_CONNECTION */
39763
39764 log_packet_detailed("packet_report_req_100: sending info about ()");
39765
39766#ifdef FREECIV_DELTA_PROTOCOL
39767 if (NULL == *hash) {
39769 NULL, NULL, NULL, free);
39770 }
39771 BV_CLR_ALL(fields);
39772
39773 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39774 old = fc_malloc(sizeof(*old));
39775 *old = *real_packet;
39776 genhash_insert(*hash, old, old);
39777 memset(old, 0, sizeof(*old));
39778 }
39779 differ = (old->type != real_packet->type);
39780 if (differ) {
39781 BV_SET(fields, 0);
39782 }
39783
39784
39785#ifdef FREECIV_JSON_CONNECTION
39786 field_addr.name = "fields";
39787#endif /* FREECIV_JSON_CONNECTION */
39788 e = 0;
39789 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39790 if (e) {
39791 log_packet_detailed("fields bitvector error detected");
39792 }
39793
39794 if (BV_ISSET(fields, 0)) {
39795 log_packet_detailed(" field 'type' has changed");
39796#ifdef FREECIV_JSON_CONNECTION
39797 field_addr.name = "type";
39798#endif /* FREECIV_JSON_CONNECTION */
39799 e = 0;
39800 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
39801 if (e) {
39802 log_packet_detailed("'type' field error detected");
39803 }
39804 }
39805
39806 *old = *real_packet;
39807#endif /* FREECIV_DELTA_PROTOCOL */
39808#ifndef FREECIV_DELTA_PROTOCOL
39809#ifdef FREECIV_JSON_CONNECTION
39810 field_addr.name = "type";
39811#endif /* FREECIV_JSON_CONNECTION */
39812 e = 0;
39813 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
39814 if (e) {
39815 log_packet_detailed("'type' field error detected");
39816 }
39817
39818#endif
39820}
39821
39822int send_packet_report_req(struct connection *pc, const struct packet_report_req *packet)
39823{
39824 if (!pc->used) {
39825 log_error("WARNING: trying to send data to the closed connection %s",
39827 return -1;
39828 }
39829 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_REPORT_REQ].packet != NULL, -1,
39830 "Handler for PACKET_REPORT_REQ not installed");
39831 return pc->phs.handlers->send[PACKET_REPORT_REQ].packet(pc, packet);
39832}
39833
39835{
39836 struct packet_report_req packet, *real_packet = &packet;
39837
39839
39841}
39842
39843#ifdef FREECIV_DELTA_PROTOCOL
39845{
39846 const struct packet_conn_info *key = (const struct packet_conn_info *) vkey;
39847 genhash_val_t result = 0;
39848
39849 result += key->id;
39850
39851 result &= 0xFFFFFFFF;
39852 return result;
39853}
39854
39855static bool cmp_packet_conn_info_100(const void *vkey1, const void *vkey2)
39856{
39857 const struct packet_conn_info *old = (const struct packet_conn_info *) vkey1;
39858 const struct packet_conn_info *real_packet = (const struct packet_conn_info *) vkey2;
39859 bool differ;
39860
39861 differ = (old->id != real_packet->id);
39862
39863 return !differ;
39864}
39866#endif /* FREECIV_DELTA_PROTOCOL */
39867
39869{
39870#ifdef FREECIV_DELTA_PROTOCOL
39872 struct packet_conn_info *old;
39873 struct genhash **hash = pc->phs.received + PACKET_CONN_INFO;
39874#endif /* FREECIV_DELTA_PROTOCOL */
39876#ifdef FREECIV_JSON_CONNECTION
39877 struct plocation field_addr;
39878 {
39882 }
39883#endif /* FREECIV_JSON_CONNECTION */
39884
39885#ifdef FREECIV_DELTA_PROTOCOL
39886#ifdef FREECIV_JSON_CONNECTION
39887 field_addr.name = "fields";
39888#endif /* FREECIV_JSON_CONNECTION */
39889 DIO_BV_GET(&din, &field_addr, fields);
39890#ifdef FREECIV_JSON_CONNECTION
39891 field_addr.name = "id";
39892#endif /* FREECIV_JSON_CONNECTION */
39893 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
39895 }
39896
39897#else /* FREECIV_DELTA_PROTOCOL */
39898#ifdef FREECIV_JSON_CONNECTION
39899 field_addr.name = "id";
39900#endif /* FREECIV_JSON_CONNECTION */
39901 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
39903 }
39904#ifdef FREECIV_JSON_CONNECTION
39905 field_addr.name = "used";
39906#endif /* FREECIV_JSON_CONNECTION */
39907 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->used)) {
39909 }
39910#ifdef FREECIV_JSON_CONNECTION
39911 field_addr.name = "established";
39912#endif /* FREECIV_JSON_CONNECTION */
39913 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->established)) {
39914 RECEIVE_PACKET_FIELD_ERROR(established);
39915 }
39916#ifdef FREECIV_JSON_CONNECTION
39917 field_addr.name = "observer";
39918#endif /* FREECIV_JSON_CONNECTION */
39919 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->observer)) {
39921 }
39922#ifdef FREECIV_JSON_CONNECTION
39923 field_addr.name = "player_num";
39924#endif /* FREECIV_JSON_CONNECTION */
39925 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
39926 RECEIVE_PACKET_FIELD_ERROR(player_num);
39927 }
39928#ifdef FREECIV_JSON_CONNECTION
39929 field_addr.name = "access_level";
39930#endif /* FREECIV_JSON_CONNECTION */
39931 {
39932 int readin;
39933
39934 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39935 RECEIVE_PACKET_FIELD_ERROR(access_level);
39936 }
39937 real_packet->access_level = readin;
39938 }
39939#ifdef FREECIV_JSON_CONNECTION
39940 field_addr.name = "username";
39941#endif /* FREECIV_JSON_CONNECTION */
39942 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
39944 }
39945#ifdef FREECIV_JSON_CONNECTION
39946 field_addr.name = "addr";
39947#endif /* FREECIV_JSON_CONNECTION */
39948 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
39950 }
39951#ifdef FREECIV_JSON_CONNECTION
39952 field_addr.name = "capability";
39953#endif /* FREECIV_JSON_CONNECTION */
39954 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
39955 RECEIVE_PACKET_FIELD_ERROR(capability);
39956 }
39957#endif
39958 log_packet_detailed("packet_conn_info_100: got info about (%d)",
39959 real_packet->id);
39960
39961#ifdef FREECIV_DELTA_PROTOCOL
39962 if (NULL == *hash) {
39964 NULL, NULL, NULL, free);
39965 }
39966
39967 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39968 *real_packet = *old;
39969 } else {
39970 int id;
39971
39972 id = real_packet->id;
39973
39974 log_packet_detailed(" no old info");
39975 memset(real_packet, 0, sizeof(*real_packet));
39976
39977 real_packet->id = id;
39978 }
39979
39980 real_packet->used = BV_ISSET(fields, 0);
39981 real_packet->established = BV_ISSET(fields, 1);
39982 real_packet->observer = BV_ISSET(fields, 2);
39983 if (BV_ISSET(fields, 3)) {
39984 log_packet_detailed(" got field 'player_num'");
39985#ifdef FREECIV_JSON_CONNECTION
39986 field_addr.name = "player_num";
39987#endif /* FREECIV_JSON_CONNECTION */
39988 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
39989 RECEIVE_PACKET_FIELD_ERROR(player_num);
39990 }
39991 }
39992 if (BV_ISSET(fields, 4)) {
39993 log_packet_detailed(" got field 'access_level'");
39994#ifdef FREECIV_JSON_CONNECTION
39995 field_addr.name = "access_level";
39996#endif /* FREECIV_JSON_CONNECTION */
39997 {
39998 int readin;
39999
40000 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40001 RECEIVE_PACKET_FIELD_ERROR(access_level);
40002 }
40003 real_packet->access_level = readin;
40004 }
40005 }
40006 if (BV_ISSET(fields, 5)) {
40007 log_packet_detailed(" got field 'username'");
40008#ifdef FREECIV_JSON_CONNECTION
40009 field_addr.name = "username";
40010#endif /* FREECIV_JSON_CONNECTION */
40011 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
40013 }
40014 }
40015 if (BV_ISSET(fields, 6)) {
40016 log_packet_detailed(" got field 'addr'");
40017#ifdef FREECIV_JSON_CONNECTION
40018 field_addr.name = "addr";
40019#endif /* FREECIV_JSON_CONNECTION */
40020 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
40022 }
40023 }
40024 if (BV_ISSET(fields, 7)) {
40025 log_packet_detailed(" got field 'capability'");
40026#ifdef FREECIV_JSON_CONNECTION
40027 field_addr.name = "capability";
40028#endif /* FREECIV_JSON_CONNECTION */
40029 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
40030 RECEIVE_PACKET_FIELD_ERROR(capability);
40031 }
40032 }
40033
40034 if (NULL == old) {
40035 old = fc_malloc(sizeof(*old));
40036 *old = *real_packet;
40037 genhash_insert(*hash, old, old);
40038 } else {
40039 *old = *real_packet;
40040 }
40041
40042#endif /* FREECIV_DELTA_PROTOCOL */
40044}
40045
40046static int send_packet_conn_info_100(struct connection *pc, const struct packet_conn_info *packet)
40047{
40048 const struct packet_conn_info *real_packet = packet;
40049 int e;
40050#ifdef FREECIV_DELTA_PROTOCOL
40052 struct packet_conn_info *old;
40053 bool differ;
40054 struct genhash **hash = pc->phs.sent + PACKET_CONN_INFO;
40055 int different = 0;
40056#endif /* FREECIV_DELTA_PROTOCOL */
40058#ifdef FREECIV_JSON_CONNECTION
40059 struct plocation field_addr;
40060 {
40064 }
40065#endif /* FREECIV_JSON_CONNECTION */
40066
40067 log_packet_detailed("packet_conn_info_100: sending info about (%d)",
40068 real_packet->id);
40069
40070#ifdef FREECIV_DELTA_PROTOCOL
40071 if (NULL == *hash) {
40073 NULL, NULL, NULL, free);
40074 }
40075 BV_CLR_ALL(fields);
40076
40077 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40078 old = fc_malloc(sizeof(*old));
40079 *old = *real_packet;
40080 genhash_insert(*hash, old, old);
40081 memset(old, 0, sizeof(*old));
40082 different = 1; /* Force to send. */
40083 }
40084 differ = (old->used != real_packet->used);
40085 if (differ) {
40086 different++;
40087 }
40088 if (packet->used) {
40089 BV_SET(fields, 0);
40090 }
40091
40092 differ = (old->established != real_packet->established);
40093 if (differ) {
40094 different++;
40095 }
40096 if (packet->established) {
40097 BV_SET(fields, 1);
40098 }
40099
40100 differ = (old->observer != real_packet->observer);
40101 if (differ) {
40102 different++;
40103 }
40104 if (packet->observer) {
40105 BV_SET(fields, 2);
40106 }
40107
40108 differ = (old->player_num != real_packet->player_num);
40109 if (differ) {
40110 different++;
40111 BV_SET(fields, 3);
40112 }
40113
40114 differ = (old->access_level != real_packet->access_level);
40115 if (differ) {
40116 different++;
40117 BV_SET(fields, 4);
40118 }
40119
40120 differ = (strcmp(old->username, real_packet->username) != 0);
40121 if (differ) {
40122 different++;
40123 BV_SET(fields, 5);
40124 }
40125
40126 differ = (strcmp(old->addr, real_packet->addr) != 0);
40127 if (differ) {
40128 different++;
40129 BV_SET(fields, 6);
40130 }
40131
40132 differ = (strcmp(old->capability, real_packet->capability) != 0);
40133 if (differ) {
40134 different++;
40135 BV_SET(fields, 7);
40136 }
40137
40138 if (different == 0) {
40139 log_packet_detailed(" no change -> discard");
40141 }
40142
40143#ifdef FREECIV_JSON_CONNECTION
40144 field_addr.name = "fields";
40145#endif /* FREECIV_JSON_CONNECTION */
40146 e = 0;
40147 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40148 if (e) {
40149 log_packet_detailed("fields bitvector error detected");
40150 }
40151#ifdef FREECIV_JSON_CONNECTION
40152 field_addr.name = "id";
40153#endif /* FREECIV_JSON_CONNECTION */
40154 e = 0;
40155 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
40156 if (e) {
40157 log_packet_detailed("'id' field error detected");
40158 }
40159
40160 /* field 0 is folded into the header */
40161 /* field 1 is folded into the header */
40162 /* field 2 is folded into the header */
40163 if (BV_ISSET(fields, 3)) {
40164 log_packet_detailed(" field 'player_num' has changed");
40165#ifdef FREECIV_JSON_CONNECTION
40166 field_addr.name = "player_num";
40167#endif /* FREECIV_JSON_CONNECTION */
40168 e = 0;
40169 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
40170 if (e) {
40171 log_packet_detailed("'player_num' field error detected");
40172 }
40173 }
40174 if (BV_ISSET(fields, 4)) {
40175 log_packet_detailed(" field 'access_level' has changed");
40176#ifdef FREECIV_JSON_CONNECTION
40177 field_addr.name = "access_level";
40178#endif /* FREECIV_JSON_CONNECTION */
40179 e = 0;
40180 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
40181 if (e) {
40182 log_packet_detailed("'access_level' field error detected");
40183 }
40184 }
40185 if (BV_ISSET(fields, 5)) {
40186 log_packet_detailed(" field 'username' has changed");
40187#ifdef FREECIV_JSON_CONNECTION
40188 field_addr.name = "username";
40189#endif /* FREECIV_JSON_CONNECTION */
40190 e = 0;
40191 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
40192 if (e) {
40193 log_packet_detailed("'username' field error detected");
40194 }
40195 }
40196 if (BV_ISSET(fields, 6)) {
40197 log_packet_detailed(" field 'addr' has changed");
40198#ifdef FREECIV_JSON_CONNECTION
40199 field_addr.name = "addr";
40200#endif /* FREECIV_JSON_CONNECTION */
40201 e = 0;
40202 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
40203 if (e) {
40204 log_packet_detailed("'addr' field error detected");
40205 }
40206 }
40207 if (BV_ISSET(fields, 7)) {
40208 log_packet_detailed(" field 'capability' has changed");
40209#ifdef FREECIV_JSON_CONNECTION
40210 field_addr.name = "capability";
40211#endif /* FREECIV_JSON_CONNECTION */
40212 e = 0;
40213 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
40214 if (e) {
40215 log_packet_detailed("'capability' field error detected");
40216 }
40217 }
40218
40219 *old = *real_packet;
40220#endif /* FREECIV_DELTA_PROTOCOL */
40221#ifndef FREECIV_DELTA_PROTOCOL
40222#ifdef FREECIV_JSON_CONNECTION
40223 field_addr.name = "id";
40224#endif /* FREECIV_JSON_CONNECTION */
40225 e = 0;
40226 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
40227 if (e) {
40228 log_packet_detailed("'id' field error detected");
40229 }
40230#ifdef FREECIV_JSON_CONNECTION
40231 field_addr.name = "used";
40232#endif /* FREECIV_JSON_CONNECTION */
40233 e = 0;
40234 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->used);
40235 if (e) {
40236 log_packet_detailed("'used' field error detected");
40237 }
40238#ifdef FREECIV_JSON_CONNECTION
40239 field_addr.name = "established";
40240#endif /* FREECIV_JSON_CONNECTION */
40241 e = 0;
40242 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->established);
40243 if (e) {
40244 log_packet_detailed("'established' field error detected");
40245 }
40246#ifdef FREECIV_JSON_CONNECTION
40247 field_addr.name = "observer";
40248#endif /* FREECIV_JSON_CONNECTION */
40249 e = 0;
40250 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->observer);
40251 if (e) {
40252 log_packet_detailed("'observer' field error detected");
40253 }
40254#ifdef FREECIV_JSON_CONNECTION
40255 field_addr.name = "player_num";
40256#endif /* FREECIV_JSON_CONNECTION */
40257 e = 0;
40258 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
40259 if (e) {
40260 log_packet_detailed("'player_num' field error detected");
40261 }
40262#ifdef FREECIV_JSON_CONNECTION
40263 field_addr.name = "access_level";
40264#endif /* FREECIV_JSON_CONNECTION */
40265 e = 0;
40266 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
40267 if (e) {
40268 log_packet_detailed("'access_level' field error detected");
40269 }
40270#ifdef FREECIV_JSON_CONNECTION
40271 field_addr.name = "username";
40272#endif /* FREECIV_JSON_CONNECTION */
40273 e = 0;
40274 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
40275 if (e) {
40276 log_packet_detailed("'username' field error detected");
40277 }
40278#ifdef FREECIV_JSON_CONNECTION
40279 field_addr.name = "addr";
40280#endif /* FREECIV_JSON_CONNECTION */
40281 e = 0;
40282 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
40283 if (e) {
40284 log_packet_detailed("'addr' field error detected");
40285 }
40286#ifdef FREECIV_JSON_CONNECTION
40287 field_addr.name = "capability";
40288#endif /* FREECIV_JSON_CONNECTION */
40289 e = 0;
40290 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
40291 if (e) {
40292 log_packet_detailed("'capability' field error detected");
40293 }
40294
40295#endif
40297}
40298
40299int send_packet_conn_info(struct connection *pc, const struct packet_conn_info *packet)
40300{
40301 if (!pc->used) {
40302 log_error("WARNING: trying to send data to the closed connection %s",
40304 return -1;
40305 }
40306 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_INFO].packet != NULL, -1,
40307 "Handler for PACKET_CONN_INFO not installed");
40308 return pc->phs.handlers->send[PACKET_CONN_INFO].packet(pc, packet);
40309}
40310
40311void lsend_packet_conn_info(struct conn_list *dest, const struct packet_conn_info *packet)
40312{
40313 conn_list_iterate(dest, pconn) {
40316}
40317
40318#ifdef FREECIV_DELTA_PROTOCOL
40319#define hash_packet_conn_ping_info_100 hash_const
40320
40321#define cmp_packet_conn_ping_info_100 cmp_const
40322
40324#endif /* FREECIV_DELTA_PROTOCOL */
40325
40327{
40328#ifdef FREECIV_DELTA_PROTOCOL
40330 struct packet_conn_ping_info *old;
40331 struct genhash **hash = pc->phs.received + PACKET_CONN_PING_INFO;
40332#endif /* FREECIV_DELTA_PROTOCOL */
40334#ifdef FREECIV_JSON_CONNECTION
40335 struct plocation field_addr;
40336 {
40340 }
40341#endif /* FREECIV_JSON_CONNECTION */
40342
40343#ifdef FREECIV_DELTA_PROTOCOL
40344#ifdef FREECIV_JSON_CONNECTION
40345 field_addr.name = "fields";
40346#endif /* FREECIV_JSON_CONNECTION */
40347 DIO_BV_GET(&din, &field_addr, fields);
40348
40349#else /* FREECIV_DELTA_PROTOCOL */
40350#ifdef FREECIV_JSON_CONNECTION
40351 field_addr.name = "connections";
40352#endif /* FREECIV_JSON_CONNECTION */
40353 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
40355 }
40356#ifdef FREECIV_JSON_CONNECTION
40357 field_addr.name = "conn_id";
40358#endif /* FREECIV_JSON_CONNECTION */
40359 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
40360 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": truncation array");
40361 }
40362 {
40363 int i;
40364
40365#ifdef FREECIV_JSON_CONNECTION
40366 /* Enter array. */
40367 field_addr.sub_location = plocation_elem_new(0);
40368#endif /* FREECIV_JSON_CONNECTION */
40369
40370 for (i = 0; i < real_packet->connections; i++) {
40371#ifdef FREECIV_JSON_CONNECTION
40372 field_addr.sub_location->number = i;
40373#endif /* FREECIV_JSON_CONNECTION */
40374
40375 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
40377 }
40378 }
40379
40380#ifdef FREECIV_JSON_CONNECTION
40381 /* Exit array. */
40382 FC_FREE(field_addr.sub_location);
40383#endif /* FREECIV_JSON_CONNECTION */
40384 }
40385#ifdef FREECIV_JSON_CONNECTION
40386 field_addr.name = "ping_time";
40387#endif /* FREECIV_JSON_CONNECTION */
40388 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
40389 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": truncation array");
40390 }
40391 {
40392 int i;
40393
40394#ifdef FREECIV_JSON_CONNECTION
40395 /* Enter array. */
40396 field_addr.sub_location = plocation_elem_new(0);
40397#endif /* FREECIV_JSON_CONNECTION */
40398
40399 for (i = 0; i < real_packet->connections; i++) {
40400#ifdef FREECIV_JSON_CONNECTION
40401 field_addr.sub_location->number = i;
40402#endif /* FREECIV_JSON_CONNECTION */
40403
40404 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
40405 RECEIVE_PACKET_FIELD_ERROR(ping_time);
40406 }
40407 }
40408
40409#ifdef FREECIV_JSON_CONNECTION
40410 /* Exit array. */
40411 FC_FREE(field_addr.sub_location);
40412#endif /* FREECIV_JSON_CONNECTION */
40413 }
40414#endif
40415 log_packet_detailed("packet_conn_ping_info_100: got info about ()");
40416
40417#ifdef FREECIV_DELTA_PROTOCOL
40418 if (NULL == *hash) {
40420 NULL, NULL, NULL, free);
40421 }
40422
40423 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40424 *real_packet = *old;
40425 } else {
40426 log_packet_detailed(" no old info");
40427 memset(real_packet, 0, sizeof(*real_packet));
40428 }
40429
40430 if (BV_ISSET(fields, 0)) {
40431 log_packet_detailed(" got field 'connections'");
40432#ifdef FREECIV_JSON_CONNECTION
40433 field_addr.name = "connections";
40434#endif /* FREECIV_JSON_CONNECTION */
40435 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
40437 }
40438 }
40439 if (BV_ISSET(fields, 1)) {
40440 log_packet_detailed(" got field 'conn_id'");
40441#ifdef FREECIV_JSON_CONNECTION
40442 field_addr.name = "conn_id";
40443#endif /* FREECIV_JSON_CONNECTION */
40444 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
40445 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": truncation array");
40446 }
40447 {
40448 int i;
40449
40450#ifdef FREECIV_JSON_CONNECTION
40451 /* Enter array. */
40452 field_addr.sub_location = plocation_elem_new(0);
40453#endif /* FREECIV_JSON_CONNECTION */
40454
40455 for (i = 0; i < real_packet->connections; i++) {
40456#ifdef FREECIV_JSON_CONNECTION
40457 field_addr.sub_location->number = i;
40458#endif /* FREECIV_JSON_CONNECTION */
40459
40460 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
40462 }
40463 }
40464
40465#ifdef FREECIV_JSON_CONNECTION
40466 /* Exit array. */
40467 FC_FREE(field_addr.sub_location);
40468#endif /* FREECIV_JSON_CONNECTION */
40469 }
40470 }
40471 if (BV_ISSET(fields, 2)) {
40472 log_packet_detailed(" got field 'ping_time'");
40473#ifdef FREECIV_JSON_CONNECTION
40474 field_addr.name = "ping_time";
40475#endif /* FREECIV_JSON_CONNECTION */
40476 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
40477 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": truncation array");
40478 }
40479 {
40480 int i;
40481
40482#ifdef FREECIV_JSON_CONNECTION
40483 /* Enter array. */
40484 field_addr.sub_location = plocation_elem_new(0);
40485#endif /* FREECIV_JSON_CONNECTION */
40486
40487 for (i = 0; i < real_packet->connections; i++) {
40488#ifdef FREECIV_JSON_CONNECTION
40489 field_addr.sub_location->number = i;
40490#endif /* FREECIV_JSON_CONNECTION */
40491
40492 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
40493 RECEIVE_PACKET_FIELD_ERROR(ping_time);
40494 }
40495 }
40496
40497#ifdef FREECIV_JSON_CONNECTION
40498 /* Exit array. */
40499 FC_FREE(field_addr.sub_location);
40500#endif /* FREECIV_JSON_CONNECTION */
40501 }
40502 }
40503
40504 if (NULL == old) {
40505 old = fc_malloc(sizeof(*old));
40506 *old = *real_packet;
40507 genhash_insert(*hash, old, old);
40508 } else {
40509 *old = *real_packet;
40510 }
40511
40512#endif /* FREECIV_DELTA_PROTOCOL */
40514}
40515
40517{
40518 const struct packet_conn_ping_info *real_packet = packet;
40519 int e;
40520#ifdef FREECIV_DELTA_PROTOCOL
40522 struct packet_conn_ping_info *old;
40523 bool differ;
40524 struct genhash **hash = pc->phs.sent + PACKET_CONN_PING_INFO;
40525#endif /* FREECIV_DELTA_PROTOCOL */
40527#ifdef FREECIV_JSON_CONNECTION
40528 struct plocation field_addr;
40529 {
40533 }
40534#endif /* FREECIV_JSON_CONNECTION */
40535
40536 log_packet_detailed("packet_conn_ping_info_100: sending info about ()");
40537
40538#ifdef FREECIV_DELTA_PROTOCOL
40539 if (NULL == *hash) {
40541 NULL, NULL, NULL, free);
40542 }
40543 BV_CLR_ALL(fields);
40544
40545 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40546 old = fc_malloc(sizeof(*old));
40547 *old = *real_packet;
40548 genhash_insert(*hash, old, old);
40549 memset(old, 0, sizeof(*old));
40550 }
40551 differ = (old->connections != real_packet->connections);
40552 if (differ) {
40553 BV_SET(fields, 0);
40554 }
40555
40556 differ = (old->connections != real_packet->connections);
40557 if (!differ) {
40558 int i;
40559
40560 for (i = 0; i < real_packet->connections; i++) {
40561 differ = (old->conn_id[i] != real_packet->conn_id[i]);
40562 if (differ) {
40563 break;
40564 }
40565 }
40566 }
40567 if (differ) {
40568 BV_SET(fields, 1);
40569 }
40570
40571 differ = (old->connections != real_packet->connections);
40572 if (!differ) {
40573 int i;
40574
40575 for (i = 0; i < real_packet->connections; i++) {
40576 differ = (old->ping_time[i] != real_packet->ping_time[i]);
40577 if (differ) {
40578 break;
40579 }
40580 }
40581 }
40582 if (differ) {
40583 BV_SET(fields, 2);
40584 }
40585
40586
40587#ifdef FREECIV_JSON_CONNECTION
40588 field_addr.name = "fields";
40589#endif /* FREECIV_JSON_CONNECTION */
40590 e = 0;
40591 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40592 if (e) {
40593 log_packet_detailed("fields bitvector error detected");
40594 }
40595
40596 if (BV_ISSET(fields, 0)) {
40597 log_packet_detailed(" field 'connections' has changed");
40598#ifdef FREECIV_JSON_CONNECTION
40599 field_addr.name = "connections";
40600#endif /* FREECIV_JSON_CONNECTION */
40601 e = 0;
40602 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
40603 if (e) {
40604 log_packet_detailed("'connections' field error detected");
40605 }
40606 }
40607 if (BV_ISSET(fields, 1)) {
40608 log_packet_detailed(" field 'conn_id' has changed");
40609#ifdef FREECIV_JSON_CONNECTION
40610 field_addr.name = "conn_id";
40611#endif /* FREECIV_JSON_CONNECTION */
40612 e = 0;
40613 {
40614 int i;
40615
40616#ifdef FREECIV_JSON_CONNECTION
40617 /* Create the array. */
40618 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
40619
40620 /* Enter the array. */
40621 field_addr.sub_location = plocation_elem_new(0);
40622#endif /* FREECIV_JSON_CONNECTION */
40623
40624 for (i = 0; i < real_packet->connections; i++) {
40625#ifdef FREECIV_JSON_CONNECTION
40626 /* Next array element. */
40627 field_addr.sub_location->number = i;
40628#endif /* FREECIV_JSON_CONNECTION */
40629
40630 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
40631 }
40632
40633#ifdef FREECIV_JSON_CONNECTION
40634 /* Exit array. */
40635 FC_FREE(field_addr.sub_location);
40636#endif /* FREECIV_JSON_CONNECTION */
40637 }
40638 if (e) {
40639 log_packet_detailed("'conn_id' field error detected");
40640 }
40641 }
40642 if (BV_ISSET(fields, 2)) {
40643 log_packet_detailed(" field 'ping_time' has changed");
40644#ifdef FREECIV_JSON_CONNECTION
40645 field_addr.name = "ping_time";
40646#endif /* FREECIV_JSON_CONNECTION */
40647 e = 0;
40648 {
40649 int i;
40650
40651#ifdef FREECIV_JSON_CONNECTION
40652 /* Create the array. */
40653 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
40654
40655 /* Enter the array. */
40656 field_addr.sub_location = plocation_elem_new(0);
40657#endif /* FREECIV_JSON_CONNECTION */
40658
40659 for (i = 0; i < real_packet->connections; i++) {
40660#ifdef FREECIV_JSON_CONNECTION
40661 /* Next array element. */
40662 field_addr.sub_location->number = i;
40663#endif /* FREECIV_JSON_CONNECTION */
40664
40665 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
40666 }
40667
40668#ifdef FREECIV_JSON_CONNECTION
40669 /* Exit array. */
40670 FC_FREE(field_addr.sub_location);
40671#endif /* FREECIV_JSON_CONNECTION */
40672 }
40673 if (e) {
40674 log_packet_detailed("'ping_time' field error detected");
40675 }
40676 }
40677
40678 *old = *real_packet;
40679#endif /* FREECIV_DELTA_PROTOCOL */
40680#ifndef FREECIV_DELTA_PROTOCOL
40681#ifdef FREECIV_JSON_CONNECTION
40682 field_addr.name = "connections";
40683#endif /* FREECIV_JSON_CONNECTION */
40684 e = 0;
40685 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
40686 if (e) {
40687 log_packet_detailed("'connections' field error detected");
40688 }
40689#ifdef FREECIV_JSON_CONNECTION
40690 field_addr.name = "conn_id";
40691#endif /* FREECIV_JSON_CONNECTION */
40692 e = 0;
40693 {
40694 int i;
40695
40696#ifdef FREECIV_JSON_CONNECTION
40697 /* Create the array. */
40698 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
40699
40700 /* Enter the array. */
40701 field_addr.sub_location = plocation_elem_new(0);
40702#endif /* FREECIV_JSON_CONNECTION */
40703
40704 for (i = 0; i < real_packet->connections; i++) {
40705#ifdef FREECIV_JSON_CONNECTION
40706 /* Next array element. */
40707 field_addr.sub_location->number = i;
40708#endif /* FREECIV_JSON_CONNECTION */
40709
40710 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
40711 }
40712
40713#ifdef FREECIV_JSON_CONNECTION
40714 /* Exit array. */
40715 FC_FREE(field_addr.sub_location);
40716#endif /* FREECIV_JSON_CONNECTION */
40717 }
40718 if (e) {
40719 log_packet_detailed("'conn_id' field error detected");
40720 }
40721#ifdef FREECIV_JSON_CONNECTION
40722 field_addr.name = "ping_time";
40723#endif /* FREECIV_JSON_CONNECTION */
40724 e = 0;
40725 {
40726 int i;
40727
40728#ifdef FREECIV_JSON_CONNECTION
40729 /* Create the array. */
40730 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
40731
40732 /* Enter the array. */
40733 field_addr.sub_location = plocation_elem_new(0);
40734#endif /* FREECIV_JSON_CONNECTION */
40735
40736 for (i = 0; i < real_packet->connections; i++) {
40737#ifdef FREECIV_JSON_CONNECTION
40738 /* Next array element. */
40739 field_addr.sub_location->number = i;
40740#endif /* FREECIV_JSON_CONNECTION */
40741
40742 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
40743 }
40744
40745#ifdef FREECIV_JSON_CONNECTION
40746 /* Exit array. */
40747 FC_FREE(field_addr.sub_location);
40748#endif /* FREECIV_JSON_CONNECTION */
40749 }
40750 if (e) {
40751 log_packet_detailed("'ping_time' field error detected");
40752 }
40753
40754#endif
40756}
40757
40759{
40760 if (!pc->used) {
40761 log_error("WARNING: trying to send data to the closed connection %s",
40763 return -1;
40764 }
40765 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet != NULL, -1,
40766 "Handler for PACKET_CONN_PING_INFO not installed");
40767 return pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet(pc, packet);
40768}
40769
40770void lsend_packet_conn_ping_info(struct conn_list *dest, const struct packet_conn_ping_info *packet)
40771{
40772 conn_list_iterate(dest, pconn) {
40775}
40776
40778{
40780#if 1 /* To match endif */
40781 real_packet->__dummy = 0xff;
40782#endif
40783 log_packet_detailed("packet_conn_ping_100: got info about ()");
40785}
40786
40788{
40790
40791 log_packet_detailed("packet_conn_ping_100: sending info about ()");
40793}
40794
40796{
40797 if (!pc->used) {
40798 log_error("WARNING: trying to send data to the closed connection %s",
40800 return -1;
40801 }
40802 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING].no_packet != NULL, -1,
40803 "Handler for PACKET_CONN_PING not installed");
40804 return pc->phs.handlers->send[PACKET_CONN_PING].no_packet(pc);
40805}
40806
40808{
40810#if 1 /* To match endif */
40811 real_packet->__dummy = 0xff;
40812#endif
40813 log_packet_detailed("packet_conn_pong_100: got info about ()");
40815}
40816
40818{
40820
40821 log_packet_detailed("packet_conn_pong_100: sending info about ()");
40823}
40824
40826{
40827 if (!pc->used) {
40828 log_error("WARNING: trying to send data to the closed connection %s",
40830 return -1;
40831 }
40832 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PONG].no_packet != NULL, -1,
40833 "Handler for PACKET_CONN_PONG not installed");
40834 return pc->phs.handlers->send[PACKET_CONN_PONG].no_packet(pc);
40835}
40836
40838{
40840#if 1 /* To match endif */
40841 real_packet->__dummy = 0xff;
40842#endif
40843 log_packet_detailed("packet_client_heartbeat_100: got info about ()");
40845}
40846
40848{
40850
40851 log_packet_detailed("packet_client_heartbeat_100: sending info about ()");
40853}
40854
40856{
40857 if (!pc->used) {
40858 log_error("WARNING: trying to send data to the closed connection %s",
40860 return -1;
40861 }
40862 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet != NULL, -1,
40863 "Handler for PACKET_CLIENT_HEARTBEAT not installed");
40864 return pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet(pc);
40865}
40866
40867#ifdef FREECIV_DELTA_PROTOCOL
40868#define hash_packet_client_info_100 hash_const
40869
40870#define cmp_packet_client_info_100 cmp_const
40871
40873#endif /* FREECIV_DELTA_PROTOCOL */
40874
40876{
40877#ifdef FREECIV_DELTA_PROTOCOL
40879 struct packet_client_info *old;
40880 struct genhash **hash = pc->phs.received + PACKET_CLIENT_INFO;
40881#endif /* FREECIV_DELTA_PROTOCOL */
40883#ifdef FREECIV_JSON_CONNECTION
40884 struct plocation field_addr;
40885 {
40889 }
40890#endif /* FREECIV_JSON_CONNECTION */
40891
40892#ifdef FREECIV_DELTA_PROTOCOL
40893#ifdef FREECIV_JSON_CONNECTION
40894 field_addr.name = "fields";
40895#endif /* FREECIV_JSON_CONNECTION */
40896 DIO_BV_GET(&din, &field_addr, fields);
40897
40898#else /* FREECIV_DELTA_PROTOCOL */
40899#ifdef FREECIV_JSON_CONNECTION
40900 field_addr.name = "gui";
40901#endif /* FREECIV_JSON_CONNECTION */
40902 {
40903 int readin;
40904
40905 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40907 }
40908 real_packet->gui = readin;
40909 }
40910#ifdef FREECIV_JSON_CONNECTION
40911 field_addr.name = "emerg_version";
40912#endif /* FREECIV_JSON_CONNECTION */
40913 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
40914 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
40915 }
40916#ifdef FREECIV_JSON_CONNECTION
40917 field_addr.name = "distribution";
40918#endif /* FREECIV_JSON_CONNECTION */
40919 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
40920 RECEIVE_PACKET_FIELD_ERROR(distribution);
40921 }
40922#endif
40923 log_packet_detailed("packet_client_info_100: got info about ()");
40924
40925#ifdef FREECIV_DELTA_PROTOCOL
40926 if (NULL == *hash) {
40928 NULL, NULL, NULL, free);
40929 }
40930
40931 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40932 *real_packet = *old;
40933 } else {
40934 log_packet_detailed(" no old info");
40935 memset(real_packet, 0, sizeof(*real_packet));
40936 }
40937
40938 if (BV_ISSET(fields, 0)) {
40939 log_packet_detailed(" got field 'gui'");
40940#ifdef FREECIV_JSON_CONNECTION
40941 field_addr.name = "gui";
40942#endif /* FREECIV_JSON_CONNECTION */
40943 {
40944 int readin;
40945
40946 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40948 }
40949 real_packet->gui = readin;
40950 }
40951 }
40952 if (BV_ISSET(fields, 1)) {
40953 log_packet_detailed(" got field 'emerg_version'");
40954#ifdef FREECIV_JSON_CONNECTION
40955 field_addr.name = "emerg_version";
40956#endif /* FREECIV_JSON_CONNECTION */
40957 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
40958 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
40959 }
40960 }
40961 if (BV_ISSET(fields, 2)) {
40962 log_packet_detailed(" got field 'distribution'");
40963#ifdef FREECIV_JSON_CONNECTION
40964 field_addr.name = "distribution";
40965#endif /* FREECIV_JSON_CONNECTION */
40966 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
40967 RECEIVE_PACKET_FIELD_ERROR(distribution);
40968 }
40969 }
40970
40971 if (NULL == old) {
40972 old = fc_malloc(sizeof(*old));
40973 *old = *real_packet;
40974 genhash_insert(*hash, old, old);
40975 } else {
40976 *old = *real_packet;
40977 }
40978
40979#endif /* FREECIV_DELTA_PROTOCOL */
40981}
40982
40983static int send_packet_client_info_100(struct connection *pc, const struct packet_client_info *packet)
40984{
40985 const struct packet_client_info *real_packet = packet;
40986 int e;
40987#ifdef FREECIV_DELTA_PROTOCOL
40989 struct packet_client_info *old;
40990 bool differ;
40991 struct genhash **hash = pc->phs.sent + PACKET_CLIENT_INFO;
40992#endif /* FREECIV_DELTA_PROTOCOL */
40994#ifdef FREECIV_JSON_CONNECTION
40995 struct plocation field_addr;
40996 {
41000 }
41001#endif /* FREECIV_JSON_CONNECTION */
41002
41003 log_packet_detailed("packet_client_info_100: sending info about ()");
41004
41005#ifdef FREECIV_DELTA_PROTOCOL
41006 if (NULL == *hash) {
41008 NULL, NULL, NULL, free);
41009 }
41010 BV_CLR_ALL(fields);
41011
41012 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41013 old = fc_malloc(sizeof(*old));
41014 *old = *real_packet;
41015 genhash_insert(*hash, old, old);
41016 memset(old, 0, sizeof(*old));
41017 }
41018 differ = (old->gui != real_packet->gui);
41019 if (differ) {
41020 BV_SET(fields, 0);
41021 }
41022
41023 differ = (old->emerg_version != real_packet->emerg_version);
41024 if (differ) {
41025 BV_SET(fields, 1);
41026 }
41027
41028 differ = (strcmp(old->distribution, real_packet->distribution) != 0);
41029 if (differ) {
41030 BV_SET(fields, 2);
41031 }
41032
41033
41034#ifdef FREECIV_JSON_CONNECTION
41035 field_addr.name = "fields";
41036#endif /* FREECIV_JSON_CONNECTION */
41037 e = 0;
41038 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41039 if (e) {
41040 log_packet_detailed("fields bitvector error detected");
41041 }
41042
41043 if (BV_ISSET(fields, 0)) {
41044 log_packet_detailed(" field 'gui' has changed");
41045#ifdef FREECIV_JSON_CONNECTION
41046 field_addr.name = "gui";
41047#endif /* FREECIV_JSON_CONNECTION */
41048 e = 0;
41049 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
41050 if (e) {
41051 log_packet_detailed("'gui' field error detected");
41052 }
41053 }
41054 if (BV_ISSET(fields, 1)) {
41055 log_packet_detailed(" field 'emerg_version' has changed");
41056#ifdef FREECIV_JSON_CONNECTION
41057 field_addr.name = "emerg_version";
41058#endif /* FREECIV_JSON_CONNECTION */
41059 e = 0;
41060 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
41061 if (e) {
41062 log_packet_detailed("'emerg_version' field error detected");
41063 }
41064 }
41065 if (BV_ISSET(fields, 2)) {
41066 log_packet_detailed(" field 'distribution' has changed");
41067#ifdef FREECIV_JSON_CONNECTION
41068 field_addr.name = "distribution";
41069#endif /* FREECIV_JSON_CONNECTION */
41070 e = 0;
41071 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
41072 if (e) {
41073 log_packet_detailed("'distribution' field error detected");
41074 }
41075 }
41076
41077 *old = *real_packet;
41078#endif /* FREECIV_DELTA_PROTOCOL */
41079#ifndef FREECIV_DELTA_PROTOCOL
41080#ifdef FREECIV_JSON_CONNECTION
41081 field_addr.name = "gui";
41082#endif /* FREECIV_JSON_CONNECTION */
41083 e = 0;
41084 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
41085 if (e) {
41086 log_packet_detailed("'gui' field error detected");
41087 }
41088#ifdef FREECIV_JSON_CONNECTION
41089 field_addr.name = "emerg_version";
41090#endif /* FREECIV_JSON_CONNECTION */
41091 e = 0;
41092 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
41093 if (e) {
41094 log_packet_detailed("'emerg_version' field error detected");
41095 }
41096#ifdef FREECIV_JSON_CONNECTION
41097 field_addr.name = "distribution";
41098#endif /* FREECIV_JSON_CONNECTION */
41099 e = 0;
41100 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
41101 if (e) {
41102 log_packet_detailed("'distribution' field error detected");
41103 }
41104
41105#endif
41107}
41108
41110{
41111 if (!pc->used) {
41112 log_error("WARNING: trying to send data to the closed connection %s",
41114 return -1;
41115 }
41116 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_INFO].packet != NULL, -1,
41117 "Handler for PACKET_CLIENT_INFO not installed");
41118 return pc->phs.handlers->send[PACKET_CLIENT_INFO].packet(pc, packet);
41119}
41120
41122{
41124#if 1 /* To match endif */
41125 real_packet->__dummy = 0xff;
41126#endif
41127 log_packet_detailed("packet_end_phase_100: got info about ()");
41129}
41130
41132{
41134
41135 log_packet_detailed("packet_end_phase_100: sending info about ()");
41137}
41138
41140{
41141 if (!pc->used) {
41142 log_error("WARNING: trying to send data to the closed connection %s",
41144 return -1;
41145 }
41146 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_PHASE].no_packet != NULL, -1,
41147 "Handler for PACKET_END_PHASE not installed");
41148 return pc->phs.handlers->send[PACKET_END_PHASE].no_packet(pc);
41149}
41150
41152{
41153 conn_list_iterate(dest, pconn) {
41156}
41157
41158#ifdef FREECIV_DELTA_PROTOCOL
41159#define hash_packet_start_phase_100 hash_const
41160
41161#define cmp_packet_start_phase_100 cmp_const
41162
41164#endif /* FREECIV_DELTA_PROTOCOL */
41165
41167{
41168#ifdef FREECIV_DELTA_PROTOCOL
41170 struct packet_start_phase *old;
41171 struct genhash **hash = pc->phs.received + PACKET_START_PHASE;
41172#endif /* FREECIV_DELTA_PROTOCOL */
41174#ifdef FREECIV_JSON_CONNECTION
41175 struct plocation field_addr;
41176 {
41180 }
41181#endif /* FREECIV_JSON_CONNECTION */
41182
41183#ifdef FREECIV_DELTA_PROTOCOL
41184#ifdef FREECIV_JSON_CONNECTION
41185 field_addr.name = "fields";
41186#endif /* FREECIV_JSON_CONNECTION */
41187 DIO_BV_GET(&din, &field_addr, fields);
41188
41189#else /* FREECIV_DELTA_PROTOCOL */
41190#ifdef FREECIV_JSON_CONNECTION
41191 field_addr.name = "phase";
41192#endif /* FREECIV_JSON_CONNECTION */
41193 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
41195 }
41196#endif
41197 log_packet_detailed("packet_start_phase_100: got info about ()");
41198
41199#ifdef FREECIV_DELTA_PROTOCOL
41200 if (NULL == *hash) {
41202 NULL, NULL, NULL, free);
41203 }
41204
41205 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41206 *real_packet = *old;
41207 } else {
41208 log_packet_detailed(" no old info");
41209 memset(real_packet, 0, sizeof(*real_packet));
41210 }
41211
41212 if (BV_ISSET(fields, 0)) {
41213 log_packet_detailed(" got field 'phase'");
41214#ifdef FREECIV_JSON_CONNECTION
41215 field_addr.name = "phase";
41216#endif /* FREECIV_JSON_CONNECTION */
41217 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
41219 }
41220 }
41221
41222 if (NULL == old) {
41223 old = fc_malloc(sizeof(*old));
41224 *old = *real_packet;
41225 genhash_insert(*hash, old, old);
41226 } else {
41227 *old = *real_packet;
41228 }
41229
41230#endif /* FREECIV_DELTA_PROTOCOL */
41232}
41233
41234static int send_packet_start_phase_100(struct connection *pc, const struct packet_start_phase *packet)
41235{
41236 const struct packet_start_phase *real_packet = packet;
41237 int e;
41238#ifdef FREECIV_DELTA_PROTOCOL
41240 struct packet_start_phase *old;
41241 bool differ;
41242 struct genhash **hash = pc->phs.sent + PACKET_START_PHASE;
41243#endif /* FREECIV_DELTA_PROTOCOL */
41245#ifdef FREECIV_JSON_CONNECTION
41246 struct plocation field_addr;
41247 {
41251 }
41252#endif /* FREECIV_JSON_CONNECTION */
41253
41254 log_packet_detailed("packet_start_phase_100: sending info about ()");
41255
41256#ifdef FREECIV_DELTA_PROTOCOL
41257 if (NULL == *hash) {
41259 NULL, NULL, NULL, free);
41260 }
41261 BV_CLR_ALL(fields);
41262
41263 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41264 old = fc_malloc(sizeof(*old));
41265 *old = *real_packet;
41266 genhash_insert(*hash, old, old);
41267 memset(old, 0, sizeof(*old));
41268 }
41269 differ = (old->phase != real_packet->phase);
41270 if (differ) {
41271 BV_SET(fields, 0);
41272 }
41273
41274
41275#ifdef FREECIV_JSON_CONNECTION
41276 field_addr.name = "fields";
41277#endif /* FREECIV_JSON_CONNECTION */
41278 e = 0;
41279 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41280 if (e) {
41281 log_packet_detailed("fields bitvector error detected");
41282 }
41283
41284 if (BV_ISSET(fields, 0)) {
41285 log_packet_detailed(" field 'phase' has changed");
41286#ifdef FREECIV_JSON_CONNECTION
41287 field_addr.name = "phase";
41288#endif /* FREECIV_JSON_CONNECTION */
41289 e = 0;
41290 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
41291 if (e) {
41292 log_packet_detailed("'phase' field error detected");
41293 }
41294 }
41295
41296 *old = *real_packet;
41297#endif /* FREECIV_DELTA_PROTOCOL */
41298#ifndef FREECIV_DELTA_PROTOCOL
41299#ifdef FREECIV_JSON_CONNECTION
41300 field_addr.name = "phase";
41301#endif /* FREECIV_JSON_CONNECTION */
41302 e = 0;
41303 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
41304 if (e) {
41305 log_packet_detailed("'phase' field error detected");
41306 }
41307
41308#endif
41310}
41311
41313{
41314 if (!pc->used) {
41315 log_error("WARNING: trying to send data to the closed connection %s",
41317 return -1;
41318 }
41319 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_START_PHASE].packet != NULL, -1,
41320 "Handler for PACKET_START_PHASE not installed");
41321 return pc->phs.handlers->send[PACKET_START_PHASE].packet(pc, packet);
41322}
41323
41324void lsend_packet_start_phase(struct conn_list *dest, const struct packet_start_phase *packet)
41325{
41326 conn_list_iterate(dest, pconn) {
41329}
41330
41332{
41333 struct packet_start_phase packet, *real_packet = &packet;
41334
41336
41338}
41339
41341{
41342 struct packet_start_phase packet, *real_packet = &packet;
41343
41345
41347}
41348
41349#ifdef FREECIV_DELTA_PROTOCOL
41350#define hash_packet_new_year_100 hash_const
41351
41352#define cmp_packet_new_year_100 cmp_const
41353
41355#endif /* FREECIV_DELTA_PROTOCOL */
41356
41358{
41359#ifdef FREECIV_DELTA_PROTOCOL
41361 struct packet_new_year *old;
41362 struct genhash **hash = pc->phs.received + PACKET_NEW_YEAR;
41363#endif /* FREECIV_DELTA_PROTOCOL */
41365#ifdef FREECIV_JSON_CONNECTION
41366 struct plocation field_addr;
41367 {
41371 }
41372#endif /* FREECIV_JSON_CONNECTION */
41373
41374#ifdef FREECIV_DELTA_PROTOCOL
41375#ifdef FREECIV_JSON_CONNECTION
41376 field_addr.name = "fields";
41377#endif /* FREECIV_JSON_CONNECTION */
41378 DIO_BV_GET(&din, &field_addr, fields);
41379
41380#else /* FREECIV_DELTA_PROTOCOL */
41381#ifdef FREECIV_JSON_CONNECTION
41382 field_addr.name = "year";
41383#endif /* FREECIV_JSON_CONNECTION */
41384 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
41386 }
41387#ifdef FREECIV_JSON_CONNECTION
41388 field_addr.name = "fragments";
41389#endif /* FREECIV_JSON_CONNECTION */
41390 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
41391 RECEIVE_PACKET_FIELD_ERROR(fragments);
41392 }
41393#ifdef FREECIV_JSON_CONNECTION
41394 field_addr.name = "turn";
41395#endif /* FREECIV_JSON_CONNECTION */
41396 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
41398 }
41399#endif
41400 log_packet_detailed("packet_new_year_100: got info about ()");
41401
41402#ifdef FREECIV_DELTA_PROTOCOL
41403 if (NULL == *hash) {
41405 NULL, NULL, NULL, free);
41406 }
41407
41408 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41409 *real_packet = *old;
41410 } else {
41411 log_packet_detailed(" no old info");
41412 memset(real_packet, 0, sizeof(*real_packet));
41413 }
41414
41415 if (BV_ISSET(fields, 0)) {
41416 log_packet_detailed(" got field 'year'");
41417#ifdef FREECIV_JSON_CONNECTION
41418 field_addr.name = "year";
41419#endif /* FREECIV_JSON_CONNECTION */
41420 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
41422 }
41423 }
41424 if (BV_ISSET(fields, 1)) {
41425 log_packet_detailed(" got field 'fragments'");
41426#ifdef FREECIV_JSON_CONNECTION
41427 field_addr.name = "fragments";
41428#endif /* FREECIV_JSON_CONNECTION */
41429 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
41430 RECEIVE_PACKET_FIELD_ERROR(fragments);
41431 }
41432 }
41433 if (BV_ISSET(fields, 2)) {
41434 log_packet_detailed(" got field 'turn'");
41435#ifdef FREECIV_JSON_CONNECTION
41436 field_addr.name = "turn";
41437#endif /* FREECIV_JSON_CONNECTION */
41438 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
41440 }
41441 }
41442
41443 if (NULL == old) {
41444 old = fc_malloc(sizeof(*old));
41445 *old = *real_packet;
41446 genhash_insert(*hash, old, old);
41447 } else {
41448 *old = *real_packet;
41449 }
41450
41451#endif /* FREECIV_DELTA_PROTOCOL */
41453}
41454
41455static int send_packet_new_year_100(struct connection *pc, const struct packet_new_year *packet)
41456{
41457 const struct packet_new_year *real_packet = packet;
41458 int e;
41459#ifdef FREECIV_DELTA_PROTOCOL
41461 struct packet_new_year *old;
41462 bool differ;
41463 struct genhash **hash = pc->phs.sent + PACKET_NEW_YEAR;
41464#endif /* FREECIV_DELTA_PROTOCOL */
41466#ifdef FREECIV_JSON_CONNECTION
41467 struct plocation field_addr;
41468 {
41472 }
41473#endif /* FREECIV_JSON_CONNECTION */
41474
41475 log_packet_detailed("packet_new_year_100: sending info about ()");
41476
41477#ifdef FREECIV_DELTA_PROTOCOL
41478 if (NULL == *hash) {
41480 NULL, NULL, NULL, free);
41481 }
41482 BV_CLR_ALL(fields);
41483
41484 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41485 old = fc_malloc(sizeof(*old));
41486 *old = *real_packet;
41487 genhash_insert(*hash, old, old);
41488 memset(old, 0, sizeof(*old));
41489 }
41490 differ = (old->year != real_packet->year);
41491 if (differ) {
41492 BV_SET(fields, 0);
41493 }
41494
41495 differ = (old->fragments != real_packet->fragments);
41496 if (differ) {
41497 BV_SET(fields, 1);
41498 }
41499
41500 differ = (old->turn != real_packet->turn);
41501 if (differ) {
41502 BV_SET(fields, 2);
41503 }
41504
41505
41506#ifdef FREECIV_JSON_CONNECTION
41507 field_addr.name = "fields";
41508#endif /* FREECIV_JSON_CONNECTION */
41509 e = 0;
41510 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41511 if (e) {
41512 log_packet_detailed("fields bitvector error detected");
41513 }
41514
41515 if (BV_ISSET(fields, 0)) {
41516 log_packet_detailed(" field 'year' has changed");
41517#ifdef FREECIV_JSON_CONNECTION
41518 field_addr.name = "year";
41519#endif /* FREECIV_JSON_CONNECTION */
41520 e = 0;
41521 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
41522 if (e) {
41523 log_packet_detailed("'year' field error detected");
41524 }
41525 }
41526 if (BV_ISSET(fields, 1)) {
41527 log_packet_detailed(" field 'fragments' has changed");
41528#ifdef FREECIV_JSON_CONNECTION
41529 field_addr.name = "fragments";
41530#endif /* FREECIV_JSON_CONNECTION */
41531 e = 0;
41532 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
41533 if (e) {
41534 log_packet_detailed("'fragments' field error detected");
41535 }
41536 }
41537 if (BV_ISSET(fields, 2)) {
41538 log_packet_detailed(" field 'turn' has changed");
41539#ifdef FREECIV_JSON_CONNECTION
41540 field_addr.name = "turn";
41541#endif /* FREECIV_JSON_CONNECTION */
41542 e = 0;
41543 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
41544 if (e) {
41545 log_packet_detailed("'turn' field error detected");
41546 }
41547 }
41548
41549 *old = *real_packet;
41550#endif /* FREECIV_DELTA_PROTOCOL */
41551#ifndef FREECIV_DELTA_PROTOCOL
41552#ifdef FREECIV_JSON_CONNECTION
41553 field_addr.name = "year";
41554#endif /* FREECIV_JSON_CONNECTION */
41555 e = 0;
41556 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
41557 if (e) {
41558 log_packet_detailed("'year' field error detected");
41559 }
41560#ifdef FREECIV_JSON_CONNECTION
41561 field_addr.name = "fragments";
41562#endif /* FREECIV_JSON_CONNECTION */
41563 e = 0;
41564 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
41565 if (e) {
41566 log_packet_detailed("'fragments' field error detected");
41567 }
41568#ifdef FREECIV_JSON_CONNECTION
41569 field_addr.name = "turn";
41570#endif /* FREECIV_JSON_CONNECTION */
41571 e = 0;
41572 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
41573 if (e) {
41574 log_packet_detailed("'turn' field error detected");
41575 }
41576
41577#endif
41579}
41580
41581int send_packet_new_year(struct connection *pc, const struct packet_new_year *packet)
41582{
41583 if (!pc->used) {
41584 log_error("WARNING: trying to send data to the closed connection %s",
41586 return -1;
41587 }
41588 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NEW_YEAR].packet != NULL, -1,
41589 "Handler for PACKET_NEW_YEAR not installed");
41590 return pc->phs.handlers->send[PACKET_NEW_YEAR].packet(pc, packet);
41591}
41592
41593void lsend_packet_new_year(struct conn_list *dest, const struct packet_new_year *packet)
41594{
41595 conn_list_iterate(dest, pconn) {
41596 send_packet_new_year(pconn, packet);
41598}
41599
41601{
41603#if 1 /* To match endif */
41604 real_packet->__dummy = 0xff;
41605#endif
41606 log_packet_detailed("packet_begin_turn_100: got info about ()");
41608}
41609
41611{
41613
41614 log_packet_detailed("packet_begin_turn_100: sending info about ()");
41616}
41617
41619{
41620 if (!pc->used) {
41621 log_error("WARNING: trying to send data to the closed connection %s",
41623 return -1;
41624 }
41625 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet != NULL, -1,
41626 "Handler for PACKET_BEGIN_TURN not installed");
41627 return pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet(pc);
41628}
41629
41631{
41632 conn_list_iterate(dest, pconn) {
41635}
41636
41638{
41640#if 1 /* To match endif */
41641 real_packet->__dummy = 0xff;
41642#endif
41643 log_packet_detailed("packet_end_turn_100: got info about ()");
41645}
41646
41648{
41650
41651 log_packet_detailed("packet_end_turn_100: sending info about ()");
41653}
41654
41656{
41657 if (!pc->used) {
41658 log_error("WARNING: trying to send data to the closed connection %s",
41660 return -1;
41661 }
41662 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_TURN].no_packet != NULL, -1,
41663 "Handler for PACKET_END_TURN not installed");
41664 return pc->phs.handlers->send[PACKET_END_TURN].no_packet(pc);
41665}
41666
41668{
41669 conn_list_iterate(dest, pconn) {
41672}
41673
41675{
41677#if 1 /* To match endif */
41678 real_packet->__dummy = 0xff;
41679#endif
41680 log_packet_detailed("packet_freeze_client_100: got info about ()");
41682}
41683
41685{
41687
41688 log_packet_detailed("packet_freeze_client_100: sending info about ()");
41690}
41691
41693{
41694 if (!pc->used) {
41695 log_error("WARNING: trying to send data to the closed connection %s",
41697 return -1;
41698 }
41699 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet != NULL, -1,
41700 "Handler for PACKET_FREEZE_CLIENT not installed");
41701 return pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet(pc);
41702}
41703
41710
41712{
41714#if 1 /* To match endif */
41715 real_packet->__dummy = 0xff;
41716#endif
41717 log_packet_detailed("packet_thaw_client_100: got info about ()");
41719}
41720
41722{
41724
41725 log_packet_detailed("packet_thaw_client_100: sending info about ()");
41727}
41728
41730{
41731 if (!pc->used) {
41732 log_error("WARNING: trying to send data to the closed connection %s",
41734 return -1;
41735 }
41736 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet != NULL, -1,
41737 "Handler for PACKET_THAW_CLIENT not installed");
41738 return pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet(pc);
41739}
41740
41742{
41743 conn_list_iterate(dest, pconn) {
41746}
41747
41749{
41751#if 1 /* To match endif */
41752 real_packet->__dummy = 0xff;
41753#endif
41754 log_packet_detailed("packet_spaceship_launch_100: got info about ()");
41756}
41757
41759{
41761
41762 log_packet_detailed("packet_spaceship_launch_100: sending info about ()");
41764}
41765
41767{
41768 if (!pc->used) {
41769 log_error("WARNING: trying to send data to the closed connection %s",
41771 return -1;
41772 }
41773 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet != NULL, -1,
41774 "Handler for PACKET_SPACESHIP_LAUNCH not installed");
41775 return pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet(pc);
41776}
41777
41778#ifdef FREECIV_DELTA_PROTOCOL
41779#define hash_packet_spaceship_place_100 hash_const
41780
41781#define cmp_packet_spaceship_place_100 cmp_const
41782
41784#endif /* FREECIV_DELTA_PROTOCOL */
41785
41787{
41788#ifdef FREECIV_DELTA_PROTOCOL
41790 struct packet_spaceship_place *old;
41791 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_PLACE;
41792#endif /* FREECIV_DELTA_PROTOCOL */
41794#ifdef FREECIV_JSON_CONNECTION
41795 struct plocation field_addr;
41796 {
41800 }
41801#endif /* FREECIV_JSON_CONNECTION */
41802
41803#ifdef FREECIV_DELTA_PROTOCOL
41804#ifdef FREECIV_JSON_CONNECTION
41805 field_addr.name = "fields";
41806#endif /* FREECIV_JSON_CONNECTION */
41807 DIO_BV_GET(&din, &field_addr, fields);
41808
41809#else /* FREECIV_DELTA_PROTOCOL */
41810#ifdef FREECIV_JSON_CONNECTION
41811 field_addr.name = "type";
41812#endif /* FREECIV_JSON_CONNECTION */
41813 {
41814 int readin;
41815
41816 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41818 }
41819 real_packet->type = readin;
41820 }
41821#ifdef FREECIV_JSON_CONNECTION
41822 field_addr.name = "num";
41823#endif /* FREECIV_JSON_CONNECTION */
41824 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
41826 }
41827#endif
41828 log_packet_detailed("packet_spaceship_place_100: got info about ()");
41829
41830#ifdef FREECIV_DELTA_PROTOCOL
41831 if (NULL == *hash) {
41833 NULL, NULL, NULL, free);
41834 }
41835
41836 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41837 *real_packet = *old;
41838 } else {
41839 log_packet_detailed(" no old info");
41840 memset(real_packet, 0, sizeof(*real_packet));
41841 }
41842
41843 if (BV_ISSET(fields, 0)) {
41844 log_packet_detailed(" got field 'type'");
41845#ifdef FREECIV_JSON_CONNECTION
41846 field_addr.name = "type";
41847#endif /* FREECIV_JSON_CONNECTION */
41848 {
41849 int readin;
41850
41851 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41853 }
41854 real_packet->type = readin;
41855 }
41856 }
41857 if (BV_ISSET(fields, 1)) {
41858 log_packet_detailed(" got field 'num'");
41859#ifdef FREECIV_JSON_CONNECTION
41860 field_addr.name = "num";
41861#endif /* FREECIV_JSON_CONNECTION */
41862 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
41864 }
41865 }
41866
41867 if (NULL == old) {
41868 old = fc_malloc(sizeof(*old));
41869 *old = *real_packet;
41870 genhash_insert(*hash, old, old);
41871 } else {
41872 *old = *real_packet;
41873 }
41874
41875#endif /* FREECIV_DELTA_PROTOCOL */
41877}
41878
41880{
41881 const struct packet_spaceship_place *real_packet = packet;
41882 int e;
41883#ifdef FREECIV_DELTA_PROTOCOL
41885 struct packet_spaceship_place *old;
41886 bool differ;
41887 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_PLACE;
41888#endif /* FREECIV_DELTA_PROTOCOL */
41890#ifdef FREECIV_JSON_CONNECTION
41891 struct plocation field_addr;
41892 {
41896 }
41897#endif /* FREECIV_JSON_CONNECTION */
41898
41899 log_packet_detailed("packet_spaceship_place_100: sending info about ()");
41900
41901#ifdef FREECIV_DELTA_PROTOCOL
41902 if (NULL == *hash) {
41904 NULL, NULL, NULL, free);
41905 }
41906 BV_CLR_ALL(fields);
41907
41908 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41909 old = fc_malloc(sizeof(*old));
41910 *old = *real_packet;
41911 genhash_insert(*hash, old, old);
41912 memset(old, 0, sizeof(*old));
41913 }
41914 differ = (old->type != real_packet->type);
41915 if (differ) {
41916 BV_SET(fields, 0);
41917 }
41918
41919 differ = (old->num != real_packet->num);
41920 if (differ) {
41921 BV_SET(fields, 1);
41922 }
41923
41924
41925#ifdef FREECIV_JSON_CONNECTION
41926 field_addr.name = "fields";
41927#endif /* FREECIV_JSON_CONNECTION */
41928 e = 0;
41929 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41930 if (e) {
41931 log_packet_detailed("fields bitvector error detected");
41932 }
41933
41934 if (BV_ISSET(fields, 0)) {
41935 log_packet_detailed(" field 'type' has changed");
41936#ifdef FREECIV_JSON_CONNECTION
41937 field_addr.name = "type";
41938#endif /* FREECIV_JSON_CONNECTION */
41939 e = 0;
41940 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41941 if (e) {
41942 log_packet_detailed("'type' field error detected");
41943 }
41944 }
41945 if (BV_ISSET(fields, 1)) {
41946 log_packet_detailed(" field 'num' has changed");
41947#ifdef FREECIV_JSON_CONNECTION
41948 field_addr.name = "num";
41949#endif /* FREECIV_JSON_CONNECTION */
41950 e = 0;
41951 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
41952 if (e) {
41953 log_packet_detailed("'num' field error detected");
41954 }
41955 }
41956
41957 *old = *real_packet;
41958#endif /* FREECIV_DELTA_PROTOCOL */
41959#ifndef FREECIV_DELTA_PROTOCOL
41960#ifdef FREECIV_JSON_CONNECTION
41961 field_addr.name = "type";
41962#endif /* FREECIV_JSON_CONNECTION */
41963 e = 0;
41964 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41965 if (e) {
41966 log_packet_detailed("'type' field error detected");
41967 }
41968#ifdef FREECIV_JSON_CONNECTION
41969 field_addr.name = "num";
41970#endif /* FREECIV_JSON_CONNECTION */
41971 e = 0;
41972 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
41973 if (e) {
41974 log_packet_detailed("'num' field error detected");
41975 }
41976
41977#endif
41979}
41980
41982{
41983 if (!pc->used) {
41984 log_error("WARNING: trying to send data to the closed connection %s",
41986 return -1;
41987 }
41988 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet != NULL, -1,
41989 "Handler for PACKET_SPACESHIP_PLACE not installed");
41990 return pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet(pc, packet);
41991}
41992
41994{
41995 struct packet_spaceship_place packet, *real_packet = &packet;
41996
41998 real_packet->num = num;
41999
42001}
42002
42003#ifdef FREECIV_DELTA_PROTOCOL
42005{
42006 const struct packet_spaceship_info *key = (const struct packet_spaceship_info *) vkey;
42007 genhash_val_t result = 0;
42008
42009 result += key->player_num;
42010
42011 result &= 0xFFFFFFFF;
42012 return result;
42013}
42014
42015static bool cmp_packet_spaceship_info_100(const void *vkey1, const void *vkey2)
42016{
42017 const struct packet_spaceship_info *old = (const struct packet_spaceship_info *) vkey1;
42018 const struct packet_spaceship_info *real_packet = (const struct packet_spaceship_info *) vkey2;
42019 bool differ;
42020
42021 differ = (old->player_num != real_packet->player_num);
42022
42023 return !differ;
42024}
42026#endif /* FREECIV_DELTA_PROTOCOL */
42027
42029{
42030#ifdef FREECIV_DELTA_PROTOCOL
42032 struct packet_spaceship_info *old;
42033 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_INFO;
42034#endif /* FREECIV_DELTA_PROTOCOL */
42036#ifdef FREECIV_JSON_CONNECTION
42037 struct plocation field_addr;
42038 {
42042 }
42043#endif /* FREECIV_JSON_CONNECTION */
42044
42045#ifdef FREECIV_DELTA_PROTOCOL
42046#ifdef FREECIV_JSON_CONNECTION
42047 field_addr.name = "fields";
42048#endif /* FREECIV_JSON_CONNECTION */
42049 DIO_BV_GET(&din, &field_addr, fields);
42050#ifdef FREECIV_JSON_CONNECTION
42051 field_addr.name = "player_num";
42052#endif /* FREECIV_JSON_CONNECTION */
42053 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
42054 RECEIVE_PACKET_FIELD_ERROR(player_num);
42055 }
42056
42057#else /* FREECIV_DELTA_PROTOCOL */
42058#ifdef FREECIV_JSON_CONNECTION
42059 field_addr.name = "player_num";
42060#endif /* FREECIV_JSON_CONNECTION */
42061 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
42062 RECEIVE_PACKET_FIELD_ERROR(player_num);
42063 }
42064#ifdef FREECIV_JSON_CONNECTION
42065 field_addr.name = "sship_state";
42066#endif /* FREECIV_JSON_CONNECTION */
42067 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
42068 RECEIVE_PACKET_FIELD_ERROR(sship_state);
42069 }
42070#ifdef FREECIV_JSON_CONNECTION
42071 field_addr.name = "structurals";
42072#endif /* FREECIV_JSON_CONNECTION */
42073 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
42074 RECEIVE_PACKET_FIELD_ERROR(structurals);
42075 }
42076#ifdef FREECIV_JSON_CONNECTION
42077 field_addr.name = "components";
42078#endif /* FREECIV_JSON_CONNECTION */
42079 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
42080 RECEIVE_PACKET_FIELD_ERROR(components);
42081 }
42082#ifdef FREECIV_JSON_CONNECTION
42083 field_addr.name = "modules";
42084#endif /* FREECIV_JSON_CONNECTION */
42085 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
42087 }
42088#ifdef FREECIV_JSON_CONNECTION
42089 field_addr.name = "fuel";
42090#endif /* FREECIV_JSON_CONNECTION */
42091 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
42093 }
42094#ifdef FREECIV_JSON_CONNECTION
42095 field_addr.name = "propulsion";
42096#endif /* FREECIV_JSON_CONNECTION */
42097 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
42098 RECEIVE_PACKET_FIELD_ERROR(propulsion);
42099 }
42100#ifdef FREECIV_JSON_CONNECTION
42101 field_addr.name = "habitation";
42102#endif /* FREECIV_JSON_CONNECTION */
42103 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
42104 RECEIVE_PACKET_FIELD_ERROR(habitation);
42105 }
42106#ifdef FREECIV_JSON_CONNECTION
42107 field_addr.name = "life_support";
42108#endif /* FREECIV_JSON_CONNECTION */
42109 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
42110 RECEIVE_PACKET_FIELD_ERROR(life_support);
42111 }
42112#ifdef FREECIV_JSON_CONNECTION
42113 field_addr.name = "solar_panels";
42114#endif /* FREECIV_JSON_CONNECTION */
42115 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
42116 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
42117 }
42118#ifdef FREECIV_JSON_CONNECTION
42119 field_addr.name = "launch_year";
42120#endif /* FREECIV_JSON_CONNECTION */
42121 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
42122 RECEIVE_PACKET_FIELD_ERROR(launch_year);
42123 }
42124#ifdef FREECIV_JSON_CONNECTION
42125 field_addr.name = "population";
42126#endif /* FREECIV_JSON_CONNECTION */
42127 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
42128 RECEIVE_PACKET_FIELD_ERROR(population);
42129 }
42130#ifdef FREECIV_JSON_CONNECTION
42131 field_addr.name = "mass";
42132#endif /* FREECIV_JSON_CONNECTION */
42133 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
42135 }
42136#ifdef FREECIV_JSON_CONNECTION
42137 field_addr.name = "structure";
42138#endif /* FREECIV_JSON_CONNECTION */
42139 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
42140 RECEIVE_PACKET_FIELD_ERROR(structure);
42141 }
42142#ifdef FREECIV_JSON_CONNECTION
42143 field_addr.name = "support_rate";
42144#endif /* FREECIV_JSON_CONNECTION */
42145 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
42146 RECEIVE_PACKET_FIELD_ERROR(support_rate);
42147 }
42148#ifdef FREECIV_JSON_CONNECTION
42149 field_addr.name = "energy_rate";
42150#endif /* FREECIV_JSON_CONNECTION */
42151 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
42152 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
42153 }
42154#ifdef FREECIV_JSON_CONNECTION
42155 field_addr.name = "success_rate";
42156#endif /* FREECIV_JSON_CONNECTION */
42157 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
42158 RECEIVE_PACKET_FIELD_ERROR(success_rate);
42159 }
42160#ifdef FREECIV_JSON_CONNECTION
42161 field_addr.name = "travel_time";
42162#endif /* FREECIV_JSON_CONNECTION */
42163 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
42164 RECEIVE_PACKET_FIELD_ERROR(travel_time);
42165 }
42166#endif
42167 log_packet_detailed("packet_spaceship_info_100: got info about (%d)",
42168 real_packet->player_num);
42169
42170#ifdef FREECIV_DELTA_PROTOCOL
42171 if (NULL == *hash) {
42173 NULL, NULL, NULL, free);
42174 }
42175
42176 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42177 *real_packet = *old;
42178 } else {
42179 int player_num;
42180
42181 player_num = real_packet->player_num;
42182
42183 log_packet_detailed(" no old info");
42184 memset(real_packet, 0, sizeof(*real_packet));
42185
42186 real_packet->player_num = player_num;
42187 }
42188
42189 if (BV_ISSET(fields, 0)) {
42190 log_packet_detailed(" got field 'sship_state'");
42191#ifdef FREECIV_JSON_CONNECTION
42192 field_addr.name = "sship_state";
42193#endif /* FREECIV_JSON_CONNECTION */
42194 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
42195 RECEIVE_PACKET_FIELD_ERROR(sship_state);
42196 }
42197 }
42198 if (BV_ISSET(fields, 1)) {
42199 log_packet_detailed(" got field 'structurals'");
42200#ifdef FREECIV_JSON_CONNECTION
42201 field_addr.name = "structurals";
42202#endif /* FREECIV_JSON_CONNECTION */
42203 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
42204 RECEIVE_PACKET_FIELD_ERROR(structurals);
42205 }
42206 }
42207 if (BV_ISSET(fields, 2)) {
42208 log_packet_detailed(" got field 'components'");
42209#ifdef FREECIV_JSON_CONNECTION
42210 field_addr.name = "components";
42211#endif /* FREECIV_JSON_CONNECTION */
42212 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
42213 RECEIVE_PACKET_FIELD_ERROR(components);
42214 }
42215 }
42216 if (BV_ISSET(fields, 3)) {
42217 log_packet_detailed(" got field 'modules'");
42218#ifdef FREECIV_JSON_CONNECTION
42219 field_addr.name = "modules";
42220#endif /* FREECIV_JSON_CONNECTION */
42221 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
42223 }
42224 }
42225 if (BV_ISSET(fields, 4)) {
42226 log_packet_detailed(" got field 'fuel'");
42227#ifdef FREECIV_JSON_CONNECTION
42228 field_addr.name = "fuel";
42229#endif /* FREECIV_JSON_CONNECTION */
42230 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
42232 }
42233 }
42234 if (BV_ISSET(fields, 5)) {
42235 log_packet_detailed(" got field 'propulsion'");
42236#ifdef FREECIV_JSON_CONNECTION
42237 field_addr.name = "propulsion";
42238#endif /* FREECIV_JSON_CONNECTION */
42239 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
42240 RECEIVE_PACKET_FIELD_ERROR(propulsion);
42241 }
42242 }
42243 if (BV_ISSET(fields, 6)) {
42244 log_packet_detailed(" got field 'habitation'");
42245#ifdef FREECIV_JSON_CONNECTION
42246 field_addr.name = "habitation";
42247#endif /* FREECIV_JSON_CONNECTION */
42248 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
42249 RECEIVE_PACKET_FIELD_ERROR(habitation);
42250 }
42251 }
42252 if (BV_ISSET(fields, 7)) {
42253 log_packet_detailed(" got field 'life_support'");
42254#ifdef FREECIV_JSON_CONNECTION
42255 field_addr.name = "life_support";
42256#endif /* FREECIV_JSON_CONNECTION */
42257 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
42258 RECEIVE_PACKET_FIELD_ERROR(life_support);
42259 }
42260 }
42261 if (BV_ISSET(fields, 8)) {
42262 log_packet_detailed(" got field 'solar_panels'");
42263#ifdef FREECIV_JSON_CONNECTION
42264 field_addr.name = "solar_panels";
42265#endif /* FREECIV_JSON_CONNECTION */
42266 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
42267 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
42268 }
42269 }
42270 if (BV_ISSET(fields, 9)) {
42271 log_packet_detailed(" got field 'launch_year'");
42272#ifdef FREECIV_JSON_CONNECTION
42273 field_addr.name = "launch_year";
42274#endif /* FREECIV_JSON_CONNECTION */
42275 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
42276 RECEIVE_PACKET_FIELD_ERROR(launch_year);
42277 }
42278 }
42279 if (BV_ISSET(fields, 10)) {
42280 log_packet_detailed(" got field 'population'");
42281#ifdef FREECIV_JSON_CONNECTION
42282 field_addr.name = "population";
42283#endif /* FREECIV_JSON_CONNECTION */
42284 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
42285 RECEIVE_PACKET_FIELD_ERROR(population);
42286 }
42287 }
42288 if (BV_ISSET(fields, 11)) {
42289 log_packet_detailed(" got field 'mass'");
42290#ifdef FREECIV_JSON_CONNECTION
42291 field_addr.name = "mass";
42292#endif /* FREECIV_JSON_CONNECTION */
42293 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
42295 }
42296 }
42297 if (BV_ISSET(fields, 12)) {
42298 log_packet_detailed(" got field 'structure'");
42299#ifdef FREECIV_JSON_CONNECTION
42300 field_addr.name = "structure";
42301#endif /* FREECIV_JSON_CONNECTION */
42302 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
42303 RECEIVE_PACKET_FIELD_ERROR(structure);
42304 }
42305 }
42306 if (BV_ISSET(fields, 13)) {
42307 log_packet_detailed(" got field 'support_rate'");
42308#ifdef FREECIV_JSON_CONNECTION
42309 field_addr.name = "support_rate";
42310#endif /* FREECIV_JSON_CONNECTION */
42311 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
42312 RECEIVE_PACKET_FIELD_ERROR(support_rate);
42313 }
42314 }
42315 if (BV_ISSET(fields, 14)) {
42316 log_packet_detailed(" got field 'energy_rate'");
42317#ifdef FREECIV_JSON_CONNECTION
42318 field_addr.name = "energy_rate";
42319#endif /* FREECIV_JSON_CONNECTION */
42320 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
42321 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
42322 }
42323 }
42324 if (BV_ISSET(fields, 15)) {
42325 log_packet_detailed(" got field 'success_rate'");
42326#ifdef FREECIV_JSON_CONNECTION
42327 field_addr.name = "success_rate";
42328#endif /* FREECIV_JSON_CONNECTION */
42329 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
42330 RECEIVE_PACKET_FIELD_ERROR(success_rate);
42331 }
42332 }
42333 if (BV_ISSET(fields, 16)) {
42334 log_packet_detailed(" got field 'travel_time'");
42335#ifdef FREECIV_JSON_CONNECTION
42336 field_addr.name = "travel_time";
42337#endif /* FREECIV_JSON_CONNECTION */
42338 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
42339 RECEIVE_PACKET_FIELD_ERROR(travel_time);
42340 }
42341 }
42342
42343 if (NULL == old) {
42344 old = fc_malloc(sizeof(*old));
42345 *old = *real_packet;
42346 genhash_insert(*hash, old, old);
42347 } else {
42348 *old = *real_packet;
42349 }
42350
42351#endif /* FREECIV_DELTA_PROTOCOL */
42353}
42354
42356{
42357 const struct packet_spaceship_info *real_packet = packet;
42358 int e;
42359#ifdef FREECIV_DELTA_PROTOCOL
42361 struct packet_spaceship_info *old;
42362 bool differ;
42363 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_INFO;
42364 int different = 0;
42365#endif /* FREECIV_DELTA_PROTOCOL */
42367#ifdef FREECIV_JSON_CONNECTION
42368 struct plocation field_addr;
42369 {
42373 }
42374#endif /* FREECIV_JSON_CONNECTION */
42375
42376 log_packet_detailed("packet_spaceship_info_100: sending info about (%d)",
42377 real_packet->player_num);
42378
42379#ifdef FREECIV_DELTA_PROTOCOL
42380 if (NULL == *hash) {
42382 NULL, NULL, NULL, free);
42383 }
42384 BV_CLR_ALL(fields);
42385
42386 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42387 old = fc_malloc(sizeof(*old));
42388 *old = *real_packet;
42389 genhash_insert(*hash, old, old);
42390 memset(old, 0, sizeof(*old));
42391 different = 1; /* Force to send. */
42392 }
42393 differ = (old->sship_state != real_packet->sship_state);
42394 if (differ) {
42395 different++;
42396 BV_SET(fields, 0);
42397 }
42398
42399 differ = (old->structurals != real_packet->structurals);
42400 if (differ) {
42401 different++;
42402 BV_SET(fields, 1);
42403 }
42404
42405 differ = (old->components != real_packet->components);
42406 if (differ) {
42407 different++;
42408 BV_SET(fields, 2);
42409 }
42410
42411 differ = (old->modules != real_packet->modules);
42412 if (differ) {
42413 different++;
42414 BV_SET(fields, 3);
42415 }
42416
42417 differ = (old->fuel != real_packet->fuel);
42418 if (differ) {
42419 different++;
42420 BV_SET(fields, 4);
42421 }
42422
42423 differ = (old->propulsion != real_packet->propulsion);
42424 if (differ) {
42425 different++;
42426 BV_SET(fields, 5);
42427 }
42428
42429 differ = (old->habitation != real_packet->habitation);
42430 if (differ) {
42431 different++;
42432 BV_SET(fields, 6);
42433 }
42434
42435 differ = (old->life_support != real_packet->life_support);
42436 if (differ) {
42437 different++;
42438 BV_SET(fields, 7);
42439 }
42440
42441 differ = (old->solar_panels != real_packet->solar_panels);
42442 if (differ) {
42443 different++;
42444 BV_SET(fields, 8);
42445 }
42446
42447 differ = (old->launch_year != real_packet->launch_year);
42448 if (differ) {
42449 different++;
42450 BV_SET(fields, 9);
42451 }
42452
42453 differ = (old->population != real_packet->population);
42454 if (differ) {
42455 different++;
42456 BV_SET(fields, 10);
42457 }
42458
42459 differ = (old->mass != real_packet->mass);
42460 if (differ) {
42461 different++;
42462 BV_SET(fields, 11);
42463 }
42464
42465 differ = !BV_ARE_EQUAL(old->structure, real_packet->structure);
42466 if (differ) {
42467 different++;
42468 BV_SET(fields, 12);
42469 }
42470
42471 differ = (old->support_rate != real_packet->support_rate);
42472 if (differ) {
42473 different++;
42474 BV_SET(fields, 13);
42475 }
42476
42477 differ = (old->energy_rate != real_packet->energy_rate);
42478 if (differ) {
42479 different++;
42480 BV_SET(fields, 14);
42481 }
42482
42483 differ = (old->success_rate != real_packet->success_rate);
42484 if (differ) {
42485 different++;
42486 BV_SET(fields, 15);
42487 }
42488
42489 differ = (old->travel_time != real_packet->travel_time);
42490 if (differ) {
42491 different++;
42492 BV_SET(fields, 16);
42493 }
42494
42495 if (different == 0) {
42496 log_packet_detailed(" no change -> discard");
42498 }
42499
42500#ifdef FREECIV_JSON_CONNECTION
42501 field_addr.name = "fields";
42502#endif /* FREECIV_JSON_CONNECTION */
42503 e = 0;
42504 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42505 if (e) {
42506 log_packet_detailed("fields bitvector error detected");
42507 }
42508#ifdef FREECIV_JSON_CONNECTION
42509 field_addr.name = "player_num";
42510#endif /* FREECIV_JSON_CONNECTION */
42511 e = 0;
42512 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
42513 if (e) {
42514 log_packet_detailed("'player_num' field error detected");
42515 }
42516
42517 if (BV_ISSET(fields, 0)) {
42518 log_packet_detailed(" field 'sship_state' has changed");
42519#ifdef FREECIV_JSON_CONNECTION
42520 field_addr.name = "sship_state";
42521#endif /* FREECIV_JSON_CONNECTION */
42522 e = 0;
42523 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
42524 if (e) {
42525 log_packet_detailed("'sship_state' field error detected");
42526 }
42527 }
42528 if (BV_ISSET(fields, 1)) {
42529 log_packet_detailed(" field 'structurals' has changed");
42530#ifdef FREECIV_JSON_CONNECTION
42531 field_addr.name = "structurals";
42532#endif /* FREECIV_JSON_CONNECTION */
42533 e = 0;
42534 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
42535 if (e) {
42536 log_packet_detailed("'structurals' field error detected");
42537 }
42538 }
42539 if (BV_ISSET(fields, 2)) {
42540 log_packet_detailed(" field 'components' has changed");
42541#ifdef FREECIV_JSON_CONNECTION
42542 field_addr.name = "components";
42543#endif /* FREECIV_JSON_CONNECTION */
42544 e = 0;
42545 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
42546 if (e) {
42547 log_packet_detailed("'components' field error detected");
42548 }
42549 }
42550 if (BV_ISSET(fields, 3)) {
42551 log_packet_detailed(" field 'modules' has changed");
42552#ifdef FREECIV_JSON_CONNECTION
42553 field_addr.name = "modules";
42554#endif /* FREECIV_JSON_CONNECTION */
42555 e = 0;
42556 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
42557 if (e) {
42558 log_packet_detailed("'modules' field error detected");
42559 }
42560 }
42561 if (BV_ISSET(fields, 4)) {
42562 log_packet_detailed(" field 'fuel' has changed");
42563#ifdef FREECIV_JSON_CONNECTION
42564 field_addr.name = "fuel";
42565#endif /* FREECIV_JSON_CONNECTION */
42566 e = 0;
42567 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
42568 if (e) {
42569 log_packet_detailed("'fuel' field error detected");
42570 }
42571 }
42572 if (BV_ISSET(fields, 5)) {
42573 log_packet_detailed(" field 'propulsion' has changed");
42574#ifdef FREECIV_JSON_CONNECTION
42575 field_addr.name = "propulsion";
42576#endif /* FREECIV_JSON_CONNECTION */
42577 e = 0;
42578 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
42579 if (e) {
42580 log_packet_detailed("'propulsion' field error detected");
42581 }
42582 }
42583 if (BV_ISSET(fields, 6)) {
42584 log_packet_detailed(" field 'habitation' has changed");
42585#ifdef FREECIV_JSON_CONNECTION
42586 field_addr.name = "habitation";
42587#endif /* FREECIV_JSON_CONNECTION */
42588 e = 0;
42589 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
42590 if (e) {
42591 log_packet_detailed("'habitation' field error detected");
42592 }
42593 }
42594 if (BV_ISSET(fields, 7)) {
42595 log_packet_detailed(" field 'life_support' has changed");
42596#ifdef FREECIV_JSON_CONNECTION
42597 field_addr.name = "life_support";
42598#endif /* FREECIV_JSON_CONNECTION */
42599 e = 0;
42600 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
42601 if (e) {
42602 log_packet_detailed("'life_support' field error detected");
42603 }
42604 }
42605 if (BV_ISSET(fields, 8)) {
42606 log_packet_detailed(" field 'solar_panels' has changed");
42607#ifdef FREECIV_JSON_CONNECTION
42608 field_addr.name = "solar_panels";
42609#endif /* FREECIV_JSON_CONNECTION */
42610 e = 0;
42611 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
42612 if (e) {
42613 log_packet_detailed("'solar_panels' field error detected");
42614 }
42615 }
42616 if (BV_ISSET(fields, 9)) {
42617 log_packet_detailed(" field 'launch_year' has changed");
42618#ifdef FREECIV_JSON_CONNECTION
42619 field_addr.name = "launch_year";
42620#endif /* FREECIV_JSON_CONNECTION */
42621 e = 0;
42622 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
42623 if (e) {
42624 log_packet_detailed("'launch_year' field error detected");
42625 }
42626 }
42627 if (BV_ISSET(fields, 10)) {
42628 log_packet_detailed(" field 'population' has changed");
42629#ifdef FREECIV_JSON_CONNECTION
42630 field_addr.name = "population";
42631#endif /* FREECIV_JSON_CONNECTION */
42632 e = 0;
42633 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
42634 if (e) {
42635 log_packet_detailed("'population' field error detected");
42636 }
42637 }
42638 if (BV_ISSET(fields, 11)) {
42639 log_packet_detailed(" field 'mass' has changed");
42640#ifdef FREECIV_JSON_CONNECTION
42641 field_addr.name = "mass";
42642#endif /* FREECIV_JSON_CONNECTION */
42643 e = 0;
42644 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
42645 if (e) {
42646 log_packet_detailed("'mass' field error detected");
42647 }
42648 }
42649 if (BV_ISSET(fields, 12)) {
42650 log_packet_detailed(" field 'structure' has changed");
42651#ifdef FREECIV_JSON_CONNECTION
42652 field_addr.name = "structure";
42653#endif /* FREECIV_JSON_CONNECTION */
42654 e = 0;
42655 e |= DIO_BV_PUT(&dout, &field_addr, packet->structure);
42656 if (e) {
42657 log_packet_detailed("'structure' field error detected");
42658 }
42659 }
42660 if (BV_ISSET(fields, 13)) {
42661 log_packet_detailed(" field 'support_rate' has changed");
42662#ifdef FREECIV_JSON_CONNECTION
42663 field_addr.name = "support_rate";
42664#endif /* FREECIV_JSON_CONNECTION */
42665 e = 0;
42666 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
42667 if (e) {
42668 log_packet_detailed("'support_rate' field error detected");
42669 }
42670 }
42671 if (BV_ISSET(fields, 14)) {
42672 log_packet_detailed(" field 'energy_rate' has changed");
42673#ifdef FREECIV_JSON_CONNECTION
42674 field_addr.name = "energy_rate";
42675#endif /* FREECIV_JSON_CONNECTION */
42676 e = 0;
42677 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
42678 if (e) {
42679 log_packet_detailed("'energy_rate' field error detected");
42680 }
42681 }
42682 if (BV_ISSET(fields, 15)) {
42683 log_packet_detailed(" field 'success_rate' has changed");
42684#ifdef FREECIV_JSON_CONNECTION
42685 field_addr.name = "success_rate";
42686#endif /* FREECIV_JSON_CONNECTION */
42687 e = 0;
42688 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
42689 if (e) {
42690 log_packet_detailed("'success_rate' field error detected");
42691 }
42692 }
42693 if (BV_ISSET(fields, 16)) {
42694 log_packet_detailed(" field 'travel_time' has changed");
42695#ifdef FREECIV_JSON_CONNECTION
42696 field_addr.name = "travel_time";
42697#endif /* FREECIV_JSON_CONNECTION */
42698 e = 0;
42699 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
42700 if (e) {
42701 log_packet_detailed("'travel_time' field error detected");
42702 }
42703 }
42704
42705 *old = *real_packet;
42706#endif /* FREECIV_DELTA_PROTOCOL */
42707#ifndef FREECIV_DELTA_PROTOCOL
42708#ifdef FREECIV_JSON_CONNECTION
42709 field_addr.name = "player_num";
42710#endif /* FREECIV_JSON_CONNECTION */
42711 e = 0;
42712 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
42713 if (e) {
42714 log_packet_detailed("'player_num' field error detected");
42715 }
42716#ifdef FREECIV_JSON_CONNECTION
42717 field_addr.name = "sship_state";
42718#endif /* FREECIV_JSON_CONNECTION */
42719 e = 0;
42720 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
42721 if (e) {
42722 log_packet_detailed("'sship_state' field error detected");
42723 }
42724#ifdef FREECIV_JSON_CONNECTION
42725 field_addr.name = "structurals";
42726#endif /* FREECIV_JSON_CONNECTION */
42727 e = 0;
42728 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
42729 if (e) {
42730 log_packet_detailed("'structurals' field error detected");
42731 }
42732#ifdef FREECIV_JSON_CONNECTION
42733 field_addr.name = "components";
42734#endif /* FREECIV_JSON_CONNECTION */
42735 e = 0;
42736 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
42737 if (e) {
42738 log_packet_detailed("'components' field error detected");
42739 }
42740#ifdef FREECIV_JSON_CONNECTION
42741 field_addr.name = "modules";
42742#endif /* FREECIV_JSON_CONNECTION */
42743 e = 0;
42744 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
42745 if (e) {
42746 log_packet_detailed("'modules' field error detected");
42747 }
42748#ifdef FREECIV_JSON_CONNECTION
42749 field_addr.name = "fuel";
42750#endif /* FREECIV_JSON_CONNECTION */
42751 e = 0;
42752 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
42753 if (e) {
42754 log_packet_detailed("'fuel' field error detected");
42755 }
42756#ifdef FREECIV_JSON_CONNECTION
42757 field_addr.name = "propulsion";
42758#endif /* FREECIV_JSON_CONNECTION */
42759 e = 0;
42760 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
42761 if (e) {
42762 log_packet_detailed("'propulsion' field error detected");
42763 }
42764#ifdef FREECIV_JSON_CONNECTION
42765 field_addr.name = "habitation";
42766#endif /* FREECIV_JSON_CONNECTION */
42767 e = 0;
42768 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
42769 if (e) {
42770 log_packet_detailed("'habitation' field error detected");
42771 }
42772#ifdef FREECIV_JSON_CONNECTION
42773 field_addr.name = "life_support";
42774#endif /* FREECIV_JSON_CONNECTION */
42775 e = 0;
42776 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
42777 if (e) {
42778 log_packet_detailed("'life_support' field error detected");
42779 }
42780#ifdef FREECIV_JSON_CONNECTION
42781 field_addr.name = "solar_panels";
42782#endif /* FREECIV_JSON_CONNECTION */
42783 e = 0;
42784 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
42785 if (e) {
42786 log_packet_detailed("'solar_panels' field error detected");
42787 }
42788#ifdef FREECIV_JSON_CONNECTION
42789 field_addr.name = "launch_year";
42790#endif /* FREECIV_JSON_CONNECTION */
42791 e = 0;
42792 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
42793 if (e) {
42794 log_packet_detailed("'launch_year' field error detected");
42795 }
42796#ifdef FREECIV_JSON_CONNECTION
42797 field_addr.name = "population";
42798#endif /* FREECIV_JSON_CONNECTION */
42799 e = 0;
42800 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
42801 if (e) {
42802 log_packet_detailed("'population' field error detected");
42803 }
42804#ifdef FREECIV_JSON_CONNECTION
42805 field_addr.name = "mass";
42806#endif /* FREECIV_JSON_CONNECTION */
42807 e = 0;
42808 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
42809 if (e) {
42810 log_packet_detailed("'mass' field error detected");
42811 }
42812#ifdef FREECIV_JSON_CONNECTION
42813 field_addr.name = "structure";
42814#endif /* FREECIV_JSON_CONNECTION */
42815 e = 0;
42816 e |= DIO_BV_PUT(&dout, &field_addr, packet->structure);
42817 if (e) {
42818 log_packet_detailed("'structure' field error detected");
42819 }
42820#ifdef FREECIV_JSON_CONNECTION
42821 field_addr.name = "support_rate";
42822#endif /* FREECIV_JSON_CONNECTION */
42823 e = 0;
42824 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
42825 if (e) {
42826 log_packet_detailed("'support_rate' field error detected");
42827 }
42828#ifdef FREECIV_JSON_CONNECTION
42829 field_addr.name = "energy_rate";
42830#endif /* FREECIV_JSON_CONNECTION */
42831 e = 0;
42832 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
42833 if (e) {
42834 log_packet_detailed("'energy_rate' field error detected");
42835 }
42836#ifdef FREECIV_JSON_CONNECTION
42837 field_addr.name = "success_rate";
42838#endif /* FREECIV_JSON_CONNECTION */
42839 e = 0;
42840 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
42841 if (e) {
42842 log_packet_detailed("'success_rate' field error detected");
42843 }
42844#ifdef FREECIV_JSON_CONNECTION
42845 field_addr.name = "travel_time";
42846#endif /* FREECIV_JSON_CONNECTION */
42847 e = 0;
42848 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
42849 if (e) {
42850 log_packet_detailed("'travel_time' field error detected");
42851 }
42852
42853#endif
42855}
42856
42858{
42859 if (!pc->used) {
42860 log_error("WARNING: trying to send data to the closed connection %s",
42862 return -1;
42863 }
42864 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet != NULL, -1,
42865 "Handler for PACKET_SPACESHIP_INFO not installed");
42866 return pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet(pc, packet);
42867}
42868
42869void lsend_packet_spaceship_info(struct conn_list *dest, const struct packet_spaceship_info *packet)
42870{
42871 conn_list_iterate(dest, pconn) {
42874}
42875
42876#ifdef FREECIV_DELTA_PROTOCOL
42877#define hash_packet_ruleset_unit_100 hash_const
42878
42879#define cmp_packet_ruleset_unit_100 cmp_const
42880
42882#endif /* FREECIV_DELTA_PROTOCOL */
42883
42885{
42886#ifdef FREECIV_DELTA_PROTOCOL
42888 struct packet_ruleset_unit *old;
42889 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT;
42890#endif /* FREECIV_DELTA_PROTOCOL */
42892#ifdef FREECIV_JSON_CONNECTION
42893 struct plocation field_addr;
42894 {
42898 }
42899#endif /* FREECIV_JSON_CONNECTION */
42900
42901#ifdef FREECIV_DELTA_PROTOCOL
42902#ifdef FREECIV_JSON_CONNECTION
42903 field_addr.name = "fields";
42904#endif /* FREECIV_JSON_CONNECTION */
42905 DIO_BV_GET(&din, &field_addr, fields);
42906
42907#else /* FREECIV_DELTA_PROTOCOL */
42908#ifdef FREECIV_JSON_CONNECTION
42909 field_addr.name = "id";
42910#endif /* FREECIV_JSON_CONNECTION */
42911 {
42912 int readin;
42913
42914 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
42916 }
42917 real_packet->id = readin;
42918 }
42919#ifdef FREECIV_JSON_CONNECTION
42920 field_addr.name = "name";
42921#endif /* FREECIV_JSON_CONNECTION */
42922 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
42924 }
42925#ifdef FREECIV_JSON_CONNECTION
42926 field_addr.name = "rule_name";
42927#endif /* FREECIV_JSON_CONNECTION */
42928 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
42929 RECEIVE_PACKET_FIELD_ERROR(rule_name);
42930 }
42931#ifdef FREECIV_JSON_CONNECTION
42932 field_addr.name = "graphic_str";
42933#endif /* FREECIV_JSON_CONNECTION */
42934 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
42935 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
42936 }
42937#ifdef FREECIV_JSON_CONNECTION
42938 field_addr.name = "graphic_alt";
42939#endif /* FREECIV_JSON_CONNECTION */
42940 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
42941 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
42942 }
42943#ifdef FREECIV_JSON_CONNECTION
42944 field_addr.name = "graphic_alt2";
42945#endif /* FREECIV_JSON_CONNECTION */
42946 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
42947 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
42948 }
42949#ifdef FREECIV_JSON_CONNECTION
42950 field_addr.name = "sound_move";
42951#endif /* FREECIV_JSON_CONNECTION */
42952 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
42953 RECEIVE_PACKET_FIELD_ERROR(sound_move);
42954 }
42955#ifdef FREECIV_JSON_CONNECTION
42956 field_addr.name = "sound_move_alt";
42957#endif /* FREECIV_JSON_CONNECTION */
42958 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
42959 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
42960 }
42961#ifdef FREECIV_JSON_CONNECTION
42962 field_addr.name = "sound_fight";
42963#endif /* FREECIV_JSON_CONNECTION */
42964 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
42965 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
42966 }
42967#ifdef FREECIV_JSON_CONNECTION
42968 field_addr.name = "sound_fight_alt";
42969#endif /* FREECIV_JSON_CONNECTION */
42970 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
42971 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
42972 }
42973#ifdef FREECIV_JSON_CONNECTION
42974 field_addr.name = "unit_class_id";
42975#endif /* FREECIV_JSON_CONNECTION */
42976 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
42977 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
42978 }
42979#ifdef FREECIV_JSON_CONNECTION
42980 field_addr.name = "build_cost";
42981#endif /* FREECIV_JSON_CONNECTION */
42982 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
42983 RECEIVE_PACKET_FIELD_ERROR(build_cost);
42984 }
42985#ifdef FREECIV_JSON_CONNECTION
42986 field_addr.name = "pop_cost";
42987#endif /* FREECIV_JSON_CONNECTION */
42988 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
42990 }
42991#ifdef FREECIV_JSON_CONNECTION
42992 field_addr.name = "attack_strength";
42993#endif /* FREECIV_JSON_CONNECTION */
42994 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
42995 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
42996 }
42997#ifdef FREECIV_JSON_CONNECTION
42998 field_addr.name = "defense_strength";
42999#endif /* FREECIV_JSON_CONNECTION */
43000 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
43001 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
43002 }
43003#ifdef FREECIV_JSON_CONNECTION
43004 field_addr.name = "move_rate";
43005#endif /* FREECIV_JSON_CONNECTION */
43006 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
43007 RECEIVE_PACKET_FIELD_ERROR(move_rate);
43008 }
43009#ifdef FREECIV_JSON_CONNECTION
43010 field_addr.name = "build_reqs_count";
43011#endif /* FREECIV_JSON_CONNECTION */
43012 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_reqs_count)) {
43013 RECEIVE_PACKET_FIELD_ERROR(build_reqs_count);
43014 }
43015#ifdef FREECIV_JSON_CONNECTION
43016 field_addr.name = "build_reqs";
43017#endif /* FREECIV_JSON_CONNECTION */
43018 if (real_packet->build_reqs_count > MAX_NUM_REQS) {
43019 RECEIVE_PACKET_FIELD_ERROR(build_reqs, ": truncation array");
43020 }
43021 {
43022 int i;
43023
43024#ifdef FREECIV_JSON_CONNECTION
43025 /* Enter array. */
43026 field_addr.sub_location = plocation_elem_new(0);
43027#endif /* FREECIV_JSON_CONNECTION */
43028
43029 for (i = 0; i < real_packet->build_reqs_count; i++) {
43030#ifdef FREECIV_JSON_CONNECTION
43031 field_addr.sub_location->number = i;
43032#endif /* FREECIV_JSON_CONNECTION */
43033
43034 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs[i])) {
43035 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
43036 }
43037 }
43038
43039#ifdef FREECIV_JSON_CONNECTION
43040 /* Exit array. */
43041 FC_FREE(field_addr.sub_location);
43042#endif /* FREECIV_JSON_CONNECTION */
43043 }
43044#ifdef FREECIV_JSON_CONNECTION
43045 field_addr.name = "vision_radius_sq";
43046#endif /* FREECIV_JSON_CONNECTION */
43047 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
43048 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
43049 }
43050#ifdef FREECIV_JSON_CONNECTION
43051 field_addr.name = "transport_capacity";
43052#endif /* FREECIV_JSON_CONNECTION */
43053 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
43054 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
43055 }
43056#ifdef FREECIV_JSON_CONNECTION
43057 field_addr.name = "hp";
43058#endif /* FREECIV_JSON_CONNECTION */
43059 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
43061 }
43062#ifdef FREECIV_JSON_CONNECTION
43063 field_addr.name = "firepower";
43064#endif /* FREECIV_JSON_CONNECTION */
43065 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
43066 RECEIVE_PACKET_FIELD_ERROR(firepower);
43067 }
43068#ifdef FREECIV_JSON_CONNECTION
43069 field_addr.name = "obsoleted_by";
43070#endif /* FREECIV_JSON_CONNECTION */
43071 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
43072 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
43073 }
43074#ifdef FREECIV_JSON_CONNECTION
43075 field_addr.name = "converted_to";
43076#endif /* FREECIV_JSON_CONNECTION */
43077 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
43078 RECEIVE_PACKET_FIELD_ERROR(converted_to);
43079 }
43080#ifdef FREECIV_JSON_CONNECTION
43081 field_addr.name = "convert_time";
43082#endif /* FREECIV_JSON_CONNECTION */
43083 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
43084 RECEIVE_PACKET_FIELD_ERROR(convert_time);
43085 }
43086#ifdef FREECIV_JSON_CONNECTION
43087 field_addr.name = "fuel";
43088#endif /* FREECIV_JSON_CONNECTION */
43089 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
43091 }
43092#ifdef FREECIV_JSON_CONNECTION
43093 field_addr.name = "happy_cost";
43094#endif /* FREECIV_JSON_CONNECTION */
43095 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
43096 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
43097 }
43098#ifdef FREECIV_JSON_CONNECTION
43099 field_addr.name = "upkeep";
43100#endif /* FREECIV_JSON_CONNECTION */
43101 {
43102 int i;
43103
43104#ifdef FREECIV_JSON_CONNECTION
43105 /* Enter array. */
43106 field_addr.sub_location = plocation_elem_new(0);
43107#endif /* FREECIV_JSON_CONNECTION */
43108
43109 for (i = 0; i < O_LAST; i++) {
43110#ifdef FREECIV_JSON_CONNECTION
43111 field_addr.sub_location->number = i;
43112#endif /* FREECIV_JSON_CONNECTION */
43113
43114 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
43116 }
43117 }
43118
43119#ifdef FREECIV_JSON_CONNECTION
43120 /* Exit array. */
43121 FC_FREE(field_addr.sub_location);
43122#endif /* FREECIV_JSON_CONNECTION */
43123 }
43124#ifdef FREECIV_JSON_CONNECTION
43125 field_addr.name = "paratroopers_range";
43126#endif /* FREECIV_JSON_CONNECTION */
43127 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
43128 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
43129 }
43130#ifdef FREECIV_JSON_CONNECTION
43131 field_addr.name = "veteran_levels";
43132#endif /* FREECIV_JSON_CONNECTION */
43133 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
43134 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
43135 }
43136#ifdef FREECIV_JSON_CONNECTION
43137 field_addr.name = "veteran_name";
43138#endif /* FREECIV_JSON_CONNECTION */
43139 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43140 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": truncation array");
43141 }
43142 {
43143 int i;
43144
43145#ifdef FREECIV_JSON_CONNECTION
43146 /* Enter array. */
43147 field_addr.sub_location = plocation_elem_new(0);
43148#endif /* FREECIV_JSON_CONNECTION */
43149
43150 for (i = 0; i < real_packet->veteran_levels; i++) {
43151#ifdef FREECIV_JSON_CONNECTION
43152 field_addr.sub_location->number = i;
43153#endif /* FREECIV_JSON_CONNECTION */
43154
43155 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
43156 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
43157 }
43158 }
43159
43160#ifdef FREECIV_JSON_CONNECTION
43161 /* Exit array. */
43162 FC_FREE(field_addr.sub_location);
43163#endif /* FREECIV_JSON_CONNECTION */
43164 }
43165#ifdef FREECIV_JSON_CONNECTION
43166 field_addr.name = "power_fact";
43167#endif /* FREECIV_JSON_CONNECTION */
43168 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43169 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": truncation array");
43170 }
43171 {
43172 int i;
43173
43174#ifdef FREECIV_JSON_CONNECTION
43175 /* Enter array. */
43176 field_addr.sub_location = plocation_elem_new(0);
43177#endif /* FREECIV_JSON_CONNECTION */
43178
43179 for (i = 0; i < real_packet->veteran_levels; i++) {
43180#ifdef FREECIV_JSON_CONNECTION
43181 field_addr.sub_location->number = i;
43182#endif /* FREECIV_JSON_CONNECTION */
43183
43184 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
43185 RECEIVE_PACKET_FIELD_ERROR(power_fact);
43186 }
43187 }
43188
43189#ifdef FREECIV_JSON_CONNECTION
43190 /* Exit array. */
43191 FC_FREE(field_addr.sub_location);
43192#endif /* FREECIV_JSON_CONNECTION */
43193 }
43194#ifdef FREECIV_JSON_CONNECTION
43195 field_addr.name = "move_bonus";
43196#endif /* FREECIV_JSON_CONNECTION */
43197 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43198 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": truncation array");
43199 }
43200 {
43201 int i;
43202
43203#ifdef FREECIV_JSON_CONNECTION
43204 /* Enter array. */
43205 field_addr.sub_location = plocation_elem_new(0);
43206#endif /* FREECIV_JSON_CONNECTION */
43207
43208 for (i = 0; i < real_packet->veteran_levels; i++) {
43209#ifdef FREECIV_JSON_CONNECTION
43210 field_addr.sub_location->number = i;
43211#endif /* FREECIV_JSON_CONNECTION */
43212
43213 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
43214 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
43215 }
43216 }
43217
43218#ifdef FREECIV_JSON_CONNECTION
43219 /* Exit array. */
43220 FC_FREE(field_addr.sub_location);
43221#endif /* FREECIV_JSON_CONNECTION */
43222 }
43223#ifdef FREECIV_JSON_CONNECTION
43224 field_addr.name = "base_raise_chance";
43225#endif /* FREECIV_JSON_CONNECTION */
43226 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43227 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": truncation array");
43228 }
43229 {
43230 int i;
43231
43232#ifdef FREECIV_JSON_CONNECTION
43233 /* Enter array. */
43234 field_addr.sub_location = plocation_elem_new(0);
43235#endif /* FREECIV_JSON_CONNECTION */
43236
43237 for (i = 0; i < real_packet->veteran_levels; i++) {
43238#ifdef FREECIV_JSON_CONNECTION
43239 field_addr.sub_location->number = i;
43240#endif /* FREECIV_JSON_CONNECTION */
43241
43242 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
43243 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
43244 }
43245 }
43246
43247#ifdef FREECIV_JSON_CONNECTION
43248 /* Exit array. */
43249 FC_FREE(field_addr.sub_location);
43250#endif /* FREECIV_JSON_CONNECTION */
43251 }
43252#ifdef FREECIV_JSON_CONNECTION
43253 field_addr.name = "work_raise_chance";
43254#endif /* FREECIV_JSON_CONNECTION */
43255 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43256 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": truncation array");
43257 }
43258 {
43259 int i;
43260
43261#ifdef FREECIV_JSON_CONNECTION
43262 /* Enter array. */
43263 field_addr.sub_location = plocation_elem_new(0);
43264#endif /* FREECIV_JSON_CONNECTION */
43265
43266 for (i = 0; i < real_packet->veteran_levels; i++) {
43267#ifdef FREECIV_JSON_CONNECTION
43268 field_addr.sub_location->number = i;
43269#endif /* FREECIV_JSON_CONNECTION */
43270
43271 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
43272 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
43273 }
43274 }
43275
43276#ifdef FREECIV_JSON_CONNECTION
43277 /* Exit array. */
43278 FC_FREE(field_addr.sub_location);
43279#endif /* FREECIV_JSON_CONNECTION */
43280 }
43281#ifdef FREECIV_JSON_CONNECTION
43282 field_addr.name = "bombard_rate";
43283#endif /* FREECIV_JSON_CONNECTION */
43284 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
43285 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
43286 }
43287#ifdef FREECIV_JSON_CONNECTION
43288 field_addr.name = "city_size";
43289#endif /* FREECIV_JSON_CONNECTION */
43290 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
43291 RECEIVE_PACKET_FIELD_ERROR(city_size);
43292 }
43293#ifdef FREECIV_JSON_CONNECTION
43294 field_addr.name = "city_slots";
43295#endif /* FREECIV_JSON_CONNECTION */
43296 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
43297 RECEIVE_PACKET_FIELD_ERROR(city_slots);
43298 }
43299#ifdef FREECIV_JSON_CONNECTION
43300 field_addr.name = "tp_defense";
43301#endif /* FREECIV_JSON_CONNECTION */
43302 {
43303 int readin;
43304
43305 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43306 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
43307 }
43308 real_packet->tp_defense = readin;
43309 }
43310#ifdef FREECIV_JSON_CONNECTION
43311 field_addr.name = "cargo";
43312#endif /* FREECIV_JSON_CONNECTION */
43313 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
43315 }
43316#ifdef FREECIV_JSON_CONNECTION
43317 field_addr.name = "targets";
43318#endif /* FREECIV_JSON_CONNECTION */
43319 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
43321 }
43322#ifdef FREECIV_JSON_CONNECTION
43323 field_addr.name = "embarks";
43324#endif /* FREECIV_JSON_CONNECTION */
43325 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
43327 }
43328#ifdef FREECIV_JSON_CONNECTION
43329 field_addr.name = "disembarks";
43330#endif /* FREECIV_JSON_CONNECTION */
43331 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
43332 RECEIVE_PACKET_FIELD_ERROR(disembarks);
43333 }
43334#ifdef FREECIV_JSON_CONNECTION
43335 field_addr.name = "vlayer";
43336#endif /* FREECIV_JSON_CONNECTION */
43337 {
43338 int readin;
43339
43340 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43342 }
43343 real_packet->vlayer = readin;
43344 }
43345#ifdef FREECIV_JSON_CONNECTION
43346 field_addr.name = "helptext";
43347#endif /* FREECIV_JSON_CONNECTION */
43348 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
43350 }
43351#ifdef FREECIV_JSON_CONNECTION
43352 field_addr.name = "flags";
43353#endif /* FREECIV_JSON_CONNECTION */
43354 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
43356 }
43357#ifdef FREECIV_JSON_CONNECTION
43358 field_addr.name = "roles";
43359#endif /* FREECIV_JSON_CONNECTION */
43360 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
43362 }
43363#ifdef FREECIV_JSON_CONNECTION
43364 field_addr.name = "worker";
43365#endif /* FREECIV_JSON_CONNECTION */
43366 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->worker)) {
43368 }
43369#endif
43370 log_packet_detailed("packet_ruleset_unit_100: got info about ()");
43371
43372#ifdef FREECIV_DELTA_PROTOCOL
43373 if (NULL == *hash) {
43375 NULL, NULL, NULL, free);
43376 }
43377
43378 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43379 *real_packet = *old;
43380 } else {
43381 log_packet_detailed(" no old info");
43382 memset(real_packet, 0, sizeof(*real_packet));
43383 }
43384
43385 if (BV_ISSET(fields, 0)) {
43386 log_packet_detailed(" got field 'id'");
43387#ifdef FREECIV_JSON_CONNECTION
43388 field_addr.name = "id";
43389#endif /* FREECIV_JSON_CONNECTION */
43390 {
43391 int readin;
43392
43393 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
43395 }
43396 real_packet->id = readin;
43397 }
43398 }
43399 if (BV_ISSET(fields, 1)) {
43400 log_packet_detailed(" got field 'name'");
43401#ifdef FREECIV_JSON_CONNECTION
43402 field_addr.name = "name";
43403#endif /* FREECIV_JSON_CONNECTION */
43404 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
43406 }
43407 }
43408 if (BV_ISSET(fields, 2)) {
43409 log_packet_detailed(" got field 'rule_name'");
43410#ifdef FREECIV_JSON_CONNECTION
43411 field_addr.name = "rule_name";
43412#endif /* FREECIV_JSON_CONNECTION */
43413 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
43414 RECEIVE_PACKET_FIELD_ERROR(rule_name);
43415 }
43416 }
43417 if (BV_ISSET(fields, 3)) {
43418 log_packet_detailed(" got field 'graphic_str'");
43419#ifdef FREECIV_JSON_CONNECTION
43420 field_addr.name = "graphic_str";
43421#endif /* FREECIV_JSON_CONNECTION */
43422 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
43423 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
43424 }
43425 }
43426 if (BV_ISSET(fields, 4)) {
43427 log_packet_detailed(" got field 'graphic_alt'");
43428#ifdef FREECIV_JSON_CONNECTION
43429 field_addr.name = "graphic_alt";
43430#endif /* FREECIV_JSON_CONNECTION */
43431 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
43432 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
43433 }
43434 }
43435 if (BV_ISSET(fields, 5)) {
43436 log_packet_detailed(" got field 'graphic_alt2'");
43437#ifdef FREECIV_JSON_CONNECTION
43438 field_addr.name = "graphic_alt2";
43439#endif /* FREECIV_JSON_CONNECTION */
43440 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
43441 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
43442 }
43443 }
43444 if (BV_ISSET(fields, 6)) {
43445 log_packet_detailed(" got field 'sound_move'");
43446#ifdef FREECIV_JSON_CONNECTION
43447 field_addr.name = "sound_move";
43448#endif /* FREECIV_JSON_CONNECTION */
43449 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
43450 RECEIVE_PACKET_FIELD_ERROR(sound_move);
43451 }
43452 }
43453 if (BV_ISSET(fields, 7)) {
43454 log_packet_detailed(" got field 'sound_move_alt'");
43455#ifdef FREECIV_JSON_CONNECTION
43456 field_addr.name = "sound_move_alt";
43457#endif /* FREECIV_JSON_CONNECTION */
43458 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
43459 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
43460 }
43461 }
43462 if (BV_ISSET(fields, 8)) {
43463 log_packet_detailed(" got field 'sound_fight'");
43464#ifdef FREECIV_JSON_CONNECTION
43465 field_addr.name = "sound_fight";
43466#endif /* FREECIV_JSON_CONNECTION */
43467 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
43468 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
43469 }
43470 }
43471 if (BV_ISSET(fields, 9)) {
43472 log_packet_detailed(" got field 'sound_fight_alt'");
43473#ifdef FREECIV_JSON_CONNECTION
43474 field_addr.name = "sound_fight_alt";
43475#endif /* FREECIV_JSON_CONNECTION */
43476 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
43477 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
43478 }
43479 }
43480 if (BV_ISSET(fields, 10)) {
43481 log_packet_detailed(" got field 'unit_class_id'");
43482#ifdef FREECIV_JSON_CONNECTION
43483 field_addr.name = "unit_class_id";
43484#endif /* FREECIV_JSON_CONNECTION */
43485 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
43486 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
43487 }
43488 }
43489 if (BV_ISSET(fields, 11)) {
43490 log_packet_detailed(" got field 'build_cost'");
43491#ifdef FREECIV_JSON_CONNECTION
43492 field_addr.name = "build_cost";
43493#endif /* FREECIV_JSON_CONNECTION */
43494 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
43495 RECEIVE_PACKET_FIELD_ERROR(build_cost);
43496 }
43497 }
43498 if (BV_ISSET(fields, 12)) {
43499 log_packet_detailed(" got field 'pop_cost'");
43500#ifdef FREECIV_JSON_CONNECTION
43501 field_addr.name = "pop_cost";
43502#endif /* FREECIV_JSON_CONNECTION */
43503 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
43505 }
43506 }
43507 if (BV_ISSET(fields, 13)) {
43508 log_packet_detailed(" got field 'attack_strength'");
43509#ifdef FREECIV_JSON_CONNECTION
43510 field_addr.name = "attack_strength";
43511#endif /* FREECIV_JSON_CONNECTION */
43512 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
43513 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
43514 }
43515 }
43516 if (BV_ISSET(fields, 14)) {
43517 log_packet_detailed(" got field 'defense_strength'");
43518#ifdef FREECIV_JSON_CONNECTION
43519 field_addr.name = "defense_strength";
43520#endif /* FREECIV_JSON_CONNECTION */
43521 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
43522 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
43523 }
43524 }
43525 if (BV_ISSET(fields, 15)) {
43526 log_packet_detailed(" got field 'move_rate'");
43527#ifdef FREECIV_JSON_CONNECTION
43528 field_addr.name = "move_rate";
43529#endif /* FREECIV_JSON_CONNECTION */
43530 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
43531 RECEIVE_PACKET_FIELD_ERROR(move_rate);
43532 }
43533 }
43534 if (BV_ISSET(fields, 16)) {
43535 log_packet_detailed(" got field 'build_reqs_count'");
43536#ifdef FREECIV_JSON_CONNECTION
43537 field_addr.name = "build_reqs_count";
43538#endif /* FREECIV_JSON_CONNECTION */
43539 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_reqs_count)) {
43540 RECEIVE_PACKET_FIELD_ERROR(build_reqs_count);
43541 }
43542 }
43543 if (BV_ISSET(fields, 17)) {
43544 log_packet_detailed(" got field 'build_reqs'");
43545#ifdef FREECIV_JSON_CONNECTION
43546 field_addr.name = "build_reqs";
43547#endif /* FREECIV_JSON_CONNECTION */
43548 if (real_packet->build_reqs_count > MAX_NUM_REQS) {
43549 RECEIVE_PACKET_FIELD_ERROR(build_reqs, ": truncation array");
43550 }
43551 {
43552 int i;
43553
43554#ifdef FREECIV_JSON_CONNECTION
43555 /* Enter array. */
43556 field_addr.sub_location = plocation_elem_new(0);
43557#endif /* FREECIV_JSON_CONNECTION */
43558
43559 for (i = 0; i < real_packet->build_reqs_count; i++) {
43560#ifdef FREECIV_JSON_CONNECTION
43561 field_addr.sub_location->number = i;
43562#endif /* FREECIV_JSON_CONNECTION */
43563
43564 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs[i])) {
43565 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
43566 }
43567 }
43568
43569#ifdef FREECIV_JSON_CONNECTION
43570 /* Exit array. */
43571 FC_FREE(field_addr.sub_location);
43572#endif /* FREECIV_JSON_CONNECTION */
43573 }
43574 }
43575 if (BV_ISSET(fields, 18)) {
43576 log_packet_detailed(" got field 'vision_radius_sq'");
43577#ifdef FREECIV_JSON_CONNECTION
43578 field_addr.name = "vision_radius_sq";
43579#endif /* FREECIV_JSON_CONNECTION */
43580 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
43581 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
43582 }
43583 }
43584 if (BV_ISSET(fields, 19)) {
43585 log_packet_detailed(" got field 'transport_capacity'");
43586#ifdef FREECIV_JSON_CONNECTION
43587 field_addr.name = "transport_capacity";
43588#endif /* FREECIV_JSON_CONNECTION */
43589 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
43590 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
43591 }
43592 }
43593 if (BV_ISSET(fields, 20)) {
43594 log_packet_detailed(" got field 'hp'");
43595#ifdef FREECIV_JSON_CONNECTION
43596 field_addr.name = "hp";
43597#endif /* FREECIV_JSON_CONNECTION */
43598 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
43600 }
43601 }
43602 if (BV_ISSET(fields, 21)) {
43603 log_packet_detailed(" got field 'firepower'");
43604#ifdef FREECIV_JSON_CONNECTION
43605 field_addr.name = "firepower";
43606#endif /* FREECIV_JSON_CONNECTION */
43607 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
43608 RECEIVE_PACKET_FIELD_ERROR(firepower);
43609 }
43610 }
43611 if (BV_ISSET(fields, 22)) {
43612 log_packet_detailed(" got field 'obsoleted_by'");
43613#ifdef FREECIV_JSON_CONNECTION
43614 field_addr.name = "obsoleted_by";
43615#endif /* FREECIV_JSON_CONNECTION */
43616 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
43617 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
43618 }
43619 }
43620 if (BV_ISSET(fields, 23)) {
43621 log_packet_detailed(" got field 'converted_to'");
43622#ifdef FREECIV_JSON_CONNECTION
43623 field_addr.name = "converted_to";
43624#endif /* FREECIV_JSON_CONNECTION */
43625 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
43626 RECEIVE_PACKET_FIELD_ERROR(converted_to);
43627 }
43628 }
43629 if (BV_ISSET(fields, 24)) {
43630 log_packet_detailed(" got field 'convert_time'");
43631#ifdef FREECIV_JSON_CONNECTION
43632 field_addr.name = "convert_time";
43633#endif /* FREECIV_JSON_CONNECTION */
43634 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
43635 RECEIVE_PACKET_FIELD_ERROR(convert_time);
43636 }
43637 }
43638 if (BV_ISSET(fields, 25)) {
43639 log_packet_detailed(" got field 'fuel'");
43640#ifdef FREECIV_JSON_CONNECTION
43641 field_addr.name = "fuel";
43642#endif /* FREECIV_JSON_CONNECTION */
43643 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
43645 }
43646 }
43647 if (BV_ISSET(fields, 26)) {
43648 log_packet_detailed(" got field 'happy_cost'");
43649#ifdef FREECIV_JSON_CONNECTION
43650 field_addr.name = "happy_cost";
43651#endif /* FREECIV_JSON_CONNECTION */
43652 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
43653 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
43654 }
43655 }
43656 if (BV_ISSET(fields, 27)) {
43657 log_packet_detailed(" got field 'upkeep'");
43658#ifdef FREECIV_JSON_CONNECTION
43659 field_addr.name = "upkeep";
43660#endif /* FREECIV_JSON_CONNECTION */
43661 {
43662 int i;
43663
43664#ifdef FREECIV_JSON_CONNECTION
43665 /* Enter array. */
43666 field_addr.sub_location = plocation_elem_new(0);
43667#endif /* FREECIV_JSON_CONNECTION */
43668
43669 for (i = 0; i < O_LAST; i++) {
43670#ifdef FREECIV_JSON_CONNECTION
43671 field_addr.sub_location->number = i;
43672#endif /* FREECIV_JSON_CONNECTION */
43673
43674 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
43676 }
43677 }
43678
43679#ifdef FREECIV_JSON_CONNECTION
43680 /* Exit array. */
43681 FC_FREE(field_addr.sub_location);
43682#endif /* FREECIV_JSON_CONNECTION */
43683 }
43684 }
43685 if (BV_ISSET(fields, 28)) {
43686 log_packet_detailed(" got field 'paratroopers_range'");
43687#ifdef FREECIV_JSON_CONNECTION
43688 field_addr.name = "paratroopers_range";
43689#endif /* FREECIV_JSON_CONNECTION */
43690 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
43691 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
43692 }
43693 }
43694 if (BV_ISSET(fields, 29)) {
43695 log_packet_detailed(" got field 'veteran_levels'");
43696#ifdef FREECIV_JSON_CONNECTION
43697 field_addr.name = "veteran_levels";
43698#endif /* FREECIV_JSON_CONNECTION */
43699 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
43700 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
43701 }
43702 }
43703 if (BV_ISSET(fields, 30)) {
43704 log_packet_detailed(" got field 'veteran_name'");
43705#ifdef FREECIV_JSON_CONNECTION
43706 field_addr.name = "veteran_name";
43707#endif /* FREECIV_JSON_CONNECTION */
43708 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43709 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": truncation array");
43710 }
43711 {
43712 int i;
43713
43714#ifdef FREECIV_JSON_CONNECTION
43715 /* Enter array. */
43716 field_addr.sub_location = plocation_elem_new(0);
43717#endif /* FREECIV_JSON_CONNECTION */
43718
43719 for (i = 0; i < real_packet->veteran_levels; i++) {
43720#ifdef FREECIV_JSON_CONNECTION
43721 field_addr.sub_location->number = i;
43722#endif /* FREECIV_JSON_CONNECTION */
43723
43724 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
43725 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
43726 }
43727 }
43728
43729#ifdef FREECIV_JSON_CONNECTION
43730 /* Exit array. */
43731 FC_FREE(field_addr.sub_location);
43732#endif /* FREECIV_JSON_CONNECTION */
43733 }
43734 }
43735 if (BV_ISSET(fields, 31)) {
43736 log_packet_detailed(" got field 'power_fact'");
43737#ifdef FREECIV_JSON_CONNECTION
43738 field_addr.name = "power_fact";
43739#endif /* FREECIV_JSON_CONNECTION */
43740 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43741 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": truncation array");
43742 }
43743 {
43744 int i;
43745
43746#ifdef FREECIV_JSON_CONNECTION
43747 /* Enter array. */
43748 field_addr.sub_location = plocation_elem_new(0);
43749#endif /* FREECIV_JSON_CONNECTION */
43750
43751 for (i = 0; i < real_packet->veteran_levels; i++) {
43752#ifdef FREECIV_JSON_CONNECTION
43753 field_addr.sub_location->number = i;
43754#endif /* FREECIV_JSON_CONNECTION */
43755
43756 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
43757 RECEIVE_PACKET_FIELD_ERROR(power_fact);
43758 }
43759 }
43760
43761#ifdef FREECIV_JSON_CONNECTION
43762 /* Exit array. */
43763 FC_FREE(field_addr.sub_location);
43764#endif /* FREECIV_JSON_CONNECTION */
43765 }
43766 }
43767 if (BV_ISSET(fields, 32)) {
43768 log_packet_detailed(" got field 'move_bonus'");
43769#ifdef FREECIV_JSON_CONNECTION
43770 field_addr.name = "move_bonus";
43771#endif /* FREECIV_JSON_CONNECTION */
43772 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43773 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": truncation array");
43774 }
43775 {
43776 int i;
43777
43778#ifdef FREECIV_JSON_CONNECTION
43779 /* Enter array. */
43780 field_addr.sub_location = plocation_elem_new(0);
43781#endif /* FREECIV_JSON_CONNECTION */
43782
43783 for (i = 0; i < real_packet->veteran_levels; i++) {
43784#ifdef FREECIV_JSON_CONNECTION
43785 field_addr.sub_location->number = i;
43786#endif /* FREECIV_JSON_CONNECTION */
43787
43788 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
43789 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
43790 }
43791 }
43792
43793#ifdef FREECIV_JSON_CONNECTION
43794 /* Exit array. */
43795 FC_FREE(field_addr.sub_location);
43796#endif /* FREECIV_JSON_CONNECTION */
43797 }
43798 }
43799 if (BV_ISSET(fields, 33)) {
43800 log_packet_detailed(" got field 'base_raise_chance'");
43801#ifdef FREECIV_JSON_CONNECTION
43802 field_addr.name = "base_raise_chance";
43803#endif /* FREECIV_JSON_CONNECTION */
43804 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43805 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": truncation array");
43806 }
43807 {
43808 int i;
43809
43810#ifdef FREECIV_JSON_CONNECTION
43811 /* Enter array. */
43812 field_addr.sub_location = plocation_elem_new(0);
43813#endif /* FREECIV_JSON_CONNECTION */
43814
43815 for (i = 0; i < real_packet->veteran_levels; i++) {
43816#ifdef FREECIV_JSON_CONNECTION
43817 field_addr.sub_location->number = i;
43818#endif /* FREECIV_JSON_CONNECTION */
43819
43820 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
43821 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
43822 }
43823 }
43824
43825#ifdef FREECIV_JSON_CONNECTION
43826 /* Exit array. */
43827 FC_FREE(field_addr.sub_location);
43828#endif /* FREECIV_JSON_CONNECTION */
43829 }
43830 }
43831 if (BV_ISSET(fields, 34)) {
43832 log_packet_detailed(" got field 'work_raise_chance'");
43833#ifdef FREECIV_JSON_CONNECTION
43834 field_addr.name = "work_raise_chance";
43835#endif /* FREECIV_JSON_CONNECTION */
43836 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
43837 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": truncation array");
43838 }
43839 {
43840 int i;
43841
43842#ifdef FREECIV_JSON_CONNECTION
43843 /* Enter array. */
43844 field_addr.sub_location = plocation_elem_new(0);
43845#endif /* FREECIV_JSON_CONNECTION */
43846
43847 for (i = 0; i < real_packet->veteran_levels; i++) {
43848#ifdef FREECIV_JSON_CONNECTION
43849 field_addr.sub_location->number = i;
43850#endif /* FREECIV_JSON_CONNECTION */
43851
43852 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
43853 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
43854 }
43855 }
43856
43857#ifdef FREECIV_JSON_CONNECTION
43858 /* Exit array. */
43859 FC_FREE(field_addr.sub_location);
43860#endif /* FREECIV_JSON_CONNECTION */
43861 }
43862 }
43863 if (BV_ISSET(fields, 35)) {
43864 log_packet_detailed(" got field 'bombard_rate'");
43865#ifdef FREECIV_JSON_CONNECTION
43866 field_addr.name = "bombard_rate";
43867#endif /* FREECIV_JSON_CONNECTION */
43868 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
43869 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
43870 }
43871 }
43872 if (BV_ISSET(fields, 36)) {
43873 log_packet_detailed(" got field 'city_size'");
43874#ifdef FREECIV_JSON_CONNECTION
43875 field_addr.name = "city_size";
43876#endif /* FREECIV_JSON_CONNECTION */
43877 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
43878 RECEIVE_PACKET_FIELD_ERROR(city_size);
43879 }
43880 }
43881 if (BV_ISSET(fields, 37)) {
43882 log_packet_detailed(" got field 'city_slots'");
43883#ifdef FREECIV_JSON_CONNECTION
43884 field_addr.name = "city_slots";
43885#endif /* FREECIV_JSON_CONNECTION */
43886 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
43887 RECEIVE_PACKET_FIELD_ERROR(city_slots);
43888 }
43889 }
43890 if (BV_ISSET(fields, 38)) {
43891 log_packet_detailed(" got field 'tp_defense'");
43892#ifdef FREECIV_JSON_CONNECTION
43893 field_addr.name = "tp_defense";
43894#endif /* FREECIV_JSON_CONNECTION */
43895 {
43896 int readin;
43897
43898 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43899 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
43900 }
43901 real_packet->tp_defense = readin;
43902 }
43903 }
43904 if (BV_ISSET(fields, 39)) {
43905 log_packet_detailed(" got field 'cargo'");
43906#ifdef FREECIV_JSON_CONNECTION
43907 field_addr.name = "cargo";
43908#endif /* FREECIV_JSON_CONNECTION */
43909 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
43911 }
43912 }
43913 if (BV_ISSET(fields, 40)) {
43914 log_packet_detailed(" got field 'targets'");
43915#ifdef FREECIV_JSON_CONNECTION
43916 field_addr.name = "targets";
43917#endif /* FREECIV_JSON_CONNECTION */
43918 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
43920 }
43921 }
43922 if (BV_ISSET(fields, 41)) {
43923 log_packet_detailed(" got field 'embarks'");
43924#ifdef FREECIV_JSON_CONNECTION
43925 field_addr.name = "embarks";
43926#endif /* FREECIV_JSON_CONNECTION */
43927 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
43929 }
43930 }
43931 if (BV_ISSET(fields, 42)) {
43932 log_packet_detailed(" got field 'disembarks'");
43933#ifdef FREECIV_JSON_CONNECTION
43934 field_addr.name = "disembarks";
43935#endif /* FREECIV_JSON_CONNECTION */
43936 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
43937 RECEIVE_PACKET_FIELD_ERROR(disembarks);
43938 }
43939 }
43940 if (BV_ISSET(fields, 43)) {
43941 log_packet_detailed(" got field 'vlayer'");
43942#ifdef FREECIV_JSON_CONNECTION
43943 field_addr.name = "vlayer";
43944#endif /* FREECIV_JSON_CONNECTION */
43945 {
43946 int readin;
43947
43948 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43950 }
43951 real_packet->vlayer = readin;
43952 }
43953 }
43954 if (BV_ISSET(fields, 44)) {
43955 log_packet_detailed(" got field 'helptext'");
43956#ifdef FREECIV_JSON_CONNECTION
43957 field_addr.name = "helptext";
43958#endif /* FREECIV_JSON_CONNECTION */
43959 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
43961 }
43962 }
43963 if (BV_ISSET(fields, 45)) {
43964 log_packet_detailed(" got field 'flags'");
43965#ifdef FREECIV_JSON_CONNECTION
43966 field_addr.name = "flags";
43967#endif /* FREECIV_JSON_CONNECTION */
43968 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
43970 }
43971 }
43972 if (BV_ISSET(fields, 46)) {
43973 log_packet_detailed(" got field 'roles'");
43974#ifdef FREECIV_JSON_CONNECTION
43975 field_addr.name = "roles";
43976#endif /* FREECIV_JSON_CONNECTION */
43977 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
43979 }
43980 }
43981 real_packet->worker = BV_ISSET(fields, 47);
43982
43983 if (NULL == old) {
43984 old = fc_malloc(sizeof(*old));
43985 *old = *real_packet;
43986 genhash_insert(*hash, old, old);
43987 } else {
43988 *old = *real_packet;
43989 }
43990
43991#endif /* FREECIV_DELTA_PROTOCOL */
43993}
43994
43995static int send_packet_ruleset_unit_100(struct connection *pc, const struct packet_ruleset_unit *packet)
43996{
43997 const struct packet_ruleset_unit *real_packet = packet;
43998 int e;
43999#ifdef FREECIV_DELTA_PROTOCOL
44001 struct packet_ruleset_unit *old;
44002 bool differ;
44003 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT;
44004#endif /* FREECIV_DELTA_PROTOCOL */
44006#ifdef FREECIV_JSON_CONNECTION
44007 struct plocation field_addr;
44008 {
44012 }
44013#endif /* FREECIV_JSON_CONNECTION */
44014
44015 log_packet_detailed("packet_ruleset_unit_100: sending info about ()");
44016
44017#ifdef FREECIV_DELTA_PROTOCOL
44018 if (NULL == *hash) {
44020 NULL, NULL, NULL, free);
44021 }
44022 BV_CLR_ALL(fields);
44023
44024 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44025 old = fc_malloc(sizeof(*old));
44026 *old = *real_packet;
44027 genhash_insert(*hash, old, old);
44028 memset(old, 0, sizeof(*old));
44029 }
44030 differ = (old->id != real_packet->id);
44031 if (differ) {
44032 BV_SET(fields, 0);
44033 }
44034
44035 differ = (strcmp(old->name, real_packet->name) != 0);
44036 if (differ) {
44037 BV_SET(fields, 1);
44038 }
44039
44040 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
44041 if (differ) {
44042 BV_SET(fields, 2);
44043 }
44044
44045 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
44046 if (differ) {
44047 BV_SET(fields, 3);
44048 }
44049
44050 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
44051 if (differ) {
44052 BV_SET(fields, 4);
44053 }
44054
44055 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
44056 if (differ) {
44057 BV_SET(fields, 5);
44058 }
44059
44060 differ = (strcmp(old->sound_move, real_packet->sound_move) != 0);
44061 if (differ) {
44062 BV_SET(fields, 6);
44063 }
44064
44065 differ = (strcmp(old->sound_move_alt, real_packet->sound_move_alt) != 0);
44066 if (differ) {
44067 BV_SET(fields, 7);
44068 }
44069
44070 differ = (strcmp(old->sound_fight, real_packet->sound_fight) != 0);
44071 if (differ) {
44072 BV_SET(fields, 8);
44073 }
44074
44075 differ = (strcmp(old->sound_fight_alt, real_packet->sound_fight_alt) != 0);
44076 if (differ) {
44077 BV_SET(fields, 9);
44078 }
44079
44080 differ = (old->unit_class_id != real_packet->unit_class_id);
44081 if (differ) {
44082 BV_SET(fields, 10);
44083 }
44084
44085 differ = (old->build_cost != real_packet->build_cost);
44086 if (differ) {
44087 BV_SET(fields, 11);
44088 }
44089
44090 differ = (old->pop_cost != real_packet->pop_cost);
44091 if (differ) {
44092 BV_SET(fields, 12);
44093 }
44094
44095 differ = (old->attack_strength != real_packet->attack_strength);
44096 if (differ) {
44097 BV_SET(fields, 13);
44098 }
44099
44100 differ = (old->defense_strength != real_packet->defense_strength);
44101 if (differ) {
44102 BV_SET(fields, 14);
44103 }
44104
44105 differ = (old->move_rate != real_packet->move_rate);
44106 if (differ) {
44107 BV_SET(fields, 15);
44108 }
44109
44110 differ = (old->build_reqs_count != real_packet->build_reqs_count);
44111 if (differ) {
44112 BV_SET(fields, 16);
44113 }
44114
44115 differ = (old->build_reqs_count != real_packet->build_reqs_count);
44116 if (!differ) {
44117 int i;
44118
44119 for (i = 0; i < real_packet->build_reqs_count; i++) {
44120 differ = !are_requirements_equal(&old->build_reqs[i], &real_packet->build_reqs[i]);
44121 if (differ) {
44122 break;
44123 }
44124 }
44125 }
44126 if (differ) {
44127 BV_SET(fields, 17);
44128 }
44129
44130 differ = (old->vision_radius_sq != real_packet->vision_radius_sq);
44131 if (differ) {
44132 BV_SET(fields, 18);
44133 }
44134
44135 differ = (old->transport_capacity != real_packet->transport_capacity);
44136 if (differ) {
44137 BV_SET(fields, 19);
44138 }
44139
44140 differ = (old->hp != real_packet->hp);
44141 if (differ) {
44142 BV_SET(fields, 20);
44143 }
44144
44145 differ = (old->firepower != real_packet->firepower);
44146 if (differ) {
44147 BV_SET(fields, 21);
44148 }
44149
44150 differ = (old->obsoleted_by != real_packet->obsoleted_by);
44151 if (differ) {
44152 BV_SET(fields, 22);
44153 }
44154
44155 differ = (old->converted_to != real_packet->converted_to);
44156 if (differ) {
44157 BV_SET(fields, 23);
44158 }
44159
44160 differ = (old->convert_time != real_packet->convert_time);
44161 if (differ) {
44162 BV_SET(fields, 24);
44163 }
44164
44165 differ = (old->fuel != real_packet->fuel);
44166 if (differ) {
44167 BV_SET(fields, 25);
44168 }
44169
44170 differ = (old->happy_cost != real_packet->happy_cost);
44171 if (differ) {
44172 BV_SET(fields, 26);
44173 }
44174
44175 differ = FALSE;
44176 {
44177 int i;
44178
44179 for (i = 0; i < O_LAST; i++) {
44180 differ = (old->upkeep[i] != real_packet->upkeep[i]);
44181 if (differ) {
44182 break;
44183 }
44184 }
44185 }
44186 if (differ) {
44187 BV_SET(fields, 27);
44188 }
44189
44190 differ = (old->paratroopers_range != real_packet->paratroopers_range);
44191 if (differ) {
44192 BV_SET(fields, 28);
44193 }
44194
44195 differ = (old->veteran_levels != real_packet->veteran_levels);
44196 if (differ) {
44197 BV_SET(fields, 29);
44198 }
44199
44200 differ = (old->veteran_levels != real_packet->veteran_levels);
44201 if (!differ) {
44202 int i;
44203
44204 for (i = 0; i < real_packet->veteran_levels; i++) {
44205 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
44206 if (differ) {
44207 break;
44208 }
44209 }
44210 }
44211 if (differ) {
44212 BV_SET(fields, 30);
44213 }
44214
44215 differ = (old->veteran_levels != real_packet->veteran_levels);
44216 if (!differ) {
44217 int i;
44218
44219 for (i = 0; i < real_packet->veteran_levels; i++) {
44220 differ = (old->power_fact[i] != real_packet->power_fact[i]);
44221 if (differ) {
44222 break;
44223 }
44224 }
44225 }
44226 if (differ) {
44227 BV_SET(fields, 31);
44228 }
44229
44230 differ = (old->veteran_levels != real_packet->veteran_levels);
44231 if (!differ) {
44232 int i;
44233
44234 for (i = 0; i < real_packet->veteran_levels; i++) {
44235 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
44236 if (differ) {
44237 break;
44238 }
44239 }
44240 }
44241 if (differ) {
44242 BV_SET(fields, 32);
44243 }
44244
44245 differ = (old->veteran_levels != real_packet->veteran_levels);
44246 if (!differ) {
44247 int i;
44248
44249 for (i = 0; i < real_packet->veteran_levels; i++) {
44250 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
44251 if (differ) {
44252 break;
44253 }
44254 }
44255 }
44256 if (differ) {
44257 BV_SET(fields, 33);
44258 }
44259
44260 differ = (old->veteran_levels != real_packet->veteran_levels);
44261 if (!differ) {
44262 int i;
44263
44264 for (i = 0; i < real_packet->veteran_levels; i++) {
44265 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
44266 if (differ) {
44267 break;
44268 }
44269 }
44270 }
44271 if (differ) {
44272 BV_SET(fields, 34);
44273 }
44274
44275 differ = (old->bombard_rate != real_packet->bombard_rate);
44276 if (differ) {
44277 BV_SET(fields, 35);
44278 }
44279
44280 differ = (old->city_size != real_packet->city_size);
44281 if (differ) {
44282 BV_SET(fields, 36);
44283 }
44284
44285 differ = (old->city_slots != real_packet->city_slots);
44286 if (differ) {
44287 BV_SET(fields, 37);
44288 }
44289
44290 differ = (old->tp_defense != real_packet->tp_defense);
44291 if (differ) {
44292 BV_SET(fields, 38);
44293 }
44294
44295 differ = !BV_ARE_EQUAL(old->cargo, real_packet->cargo);
44296 if (differ) {
44297 BV_SET(fields, 39);
44298 }
44299
44300 differ = !BV_ARE_EQUAL(old->targets, real_packet->targets);
44301 if (differ) {
44302 BV_SET(fields, 40);
44303 }
44304
44305 differ = !BV_ARE_EQUAL(old->embarks, real_packet->embarks);
44306 if (differ) {
44307 BV_SET(fields, 41);
44308 }
44309
44310 differ = !BV_ARE_EQUAL(old->disembarks, real_packet->disembarks);
44311 if (differ) {
44312 BV_SET(fields, 42);
44313 }
44314
44315 differ = (old->vlayer != real_packet->vlayer);
44316 if (differ) {
44317 BV_SET(fields, 43);
44318 }
44319
44320 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
44321 if (differ) {
44322 BV_SET(fields, 44);
44323 }
44324
44325 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
44326 if (differ) {
44327 BV_SET(fields, 45);
44328 }
44329
44330 differ = !BV_ARE_EQUAL(old->roles, real_packet->roles);
44331 if (differ) {
44332 BV_SET(fields, 46);
44333 }
44334
44335 if (packet->worker) {
44336 BV_SET(fields, 47);
44337 }
44338
44339
44340#ifdef FREECIV_JSON_CONNECTION
44341 field_addr.name = "fields";
44342#endif /* FREECIV_JSON_CONNECTION */
44343 e = 0;
44344 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44345 if (e) {
44346 log_packet_detailed("fields bitvector error detected");
44347 }
44348
44349 if (BV_ISSET(fields, 0)) {
44350 log_packet_detailed(" field 'id' has changed");
44351#ifdef FREECIV_JSON_CONNECTION
44352 field_addr.name = "id";
44353#endif /* FREECIV_JSON_CONNECTION */
44354 e = 0;
44355 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
44356 if (e) {
44357 log_packet_detailed("'id' field error detected");
44358 }
44359 }
44360 if (BV_ISSET(fields, 1)) {
44361 log_packet_detailed(" field 'name' has changed");
44362#ifdef FREECIV_JSON_CONNECTION
44363 field_addr.name = "name";
44364#endif /* FREECIV_JSON_CONNECTION */
44365 e = 0;
44366 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
44367 if (e) {
44368 log_packet_detailed("'name' field error detected");
44369 }
44370 }
44371 if (BV_ISSET(fields, 2)) {
44372 log_packet_detailed(" field 'rule_name' has changed");
44373#ifdef FREECIV_JSON_CONNECTION
44374 field_addr.name = "rule_name";
44375#endif /* FREECIV_JSON_CONNECTION */
44376 e = 0;
44377 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
44378 if (e) {
44379 log_packet_detailed("'rule_name' field error detected");
44380 }
44381 }
44382 if (BV_ISSET(fields, 3)) {
44383 log_packet_detailed(" field 'graphic_str' has changed");
44384#ifdef FREECIV_JSON_CONNECTION
44385 field_addr.name = "graphic_str";
44386#endif /* FREECIV_JSON_CONNECTION */
44387 e = 0;
44388 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
44389 if (e) {
44390 log_packet_detailed("'graphic_str' field error detected");
44391 }
44392 }
44393 if (BV_ISSET(fields, 4)) {
44394 log_packet_detailed(" field 'graphic_alt' has changed");
44395#ifdef FREECIV_JSON_CONNECTION
44396 field_addr.name = "graphic_alt";
44397#endif /* FREECIV_JSON_CONNECTION */
44398 e = 0;
44399 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
44400 if (e) {
44401 log_packet_detailed("'graphic_alt' field error detected");
44402 }
44403 }
44404 if (BV_ISSET(fields, 5)) {
44405 log_packet_detailed(" field 'graphic_alt2' has changed");
44406#ifdef FREECIV_JSON_CONNECTION
44407 field_addr.name = "graphic_alt2";
44408#endif /* FREECIV_JSON_CONNECTION */
44409 e = 0;
44410 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
44411 if (e) {
44412 log_packet_detailed("'graphic_alt2' field error detected");
44413 }
44414 }
44415 if (BV_ISSET(fields, 6)) {
44416 log_packet_detailed(" field 'sound_move' has changed");
44417#ifdef FREECIV_JSON_CONNECTION
44418 field_addr.name = "sound_move";
44419#endif /* FREECIV_JSON_CONNECTION */
44420 e = 0;
44421 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
44422 if (e) {
44423 log_packet_detailed("'sound_move' field error detected");
44424 }
44425 }
44426 if (BV_ISSET(fields, 7)) {
44427 log_packet_detailed(" field 'sound_move_alt' has changed");
44428#ifdef FREECIV_JSON_CONNECTION
44429 field_addr.name = "sound_move_alt";
44430#endif /* FREECIV_JSON_CONNECTION */
44431 e = 0;
44432 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
44433 if (e) {
44434 log_packet_detailed("'sound_move_alt' field error detected");
44435 }
44436 }
44437 if (BV_ISSET(fields, 8)) {
44438 log_packet_detailed(" field 'sound_fight' has changed");
44439#ifdef FREECIV_JSON_CONNECTION
44440 field_addr.name = "sound_fight";
44441#endif /* FREECIV_JSON_CONNECTION */
44442 e = 0;
44443 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
44444 if (e) {
44445 log_packet_detailed("'sound_fight' field error detected");
44446 }
44447 }
44448 if (BV_ISSET(fields, 9)) {
44449 log_packet_detailed(" field 'sound_fight_alt' has changed");
44450#ifdef FREECIV_JSON_CONNECTION
44451 field_addr.name = "sound_fight_alt";
44452#endif /* FREECIV_JSON_CONNECTION */
44453 e = 0;
44454 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
44455 if (e) {
44456 log_packet_detailed("'sound_fight_alt' field error detected");
44457 }
44458 }
44459 if (BV_ISSET(fields, 10)) {
44460 log_packet_detailed(" field 'unit_class_id' has changed");
44461#ifdef FREECIV_JSON_CONNECTION
44462 field_addr.name = "unit_class_id";
44463#endif /* FREECIV_JSON_CONNECTION */
44464 e = 0;
44465 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
44466 if (e) {
44467 log_packet_detailed("'unit_class_id' field error detected");
44468 }
44469 }
44470 if (BV_ISSET(fields, 11)) {
44471 log_packet_detailed(" field 'build_cost' has changed");
44472#ifdef FREECIV_JSON_CONNECTION
44473 field_addr.name = "build_cost";
44474#endif /* FREECIV_JSON_CONNECTION */
44475 e = 0;
44476 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
44477 if (e) {
44478 log_packet_detailed("'build_cost' field error detected");
44479 }
44480 }
44481 if (BV_ISSET(fields, 12)) {
44482 log_packet_detailed(" field 'pop_cost' has changed");
44483#ifdef FREECIV_JSON_CONNECTION
44484 field_addr.name = "pop_cost";
44485#endif /* FREECIV_JSON_CONNECTION */
44486 e = 0;
44487 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
44488 if (e) {
44489 log_packet_detailed("'pop_cost' field error detected");
44490 }
44491 }
44492 if (BV_ISSET(fields, 13)) {
44493 log_packet_detailed(" field 'attack_strength' has changed");
44494#ifdef FREECIV_JSON_CONNECTION
44495 field_addr.name = "attack_strength";
44496#endif /* FREECIV_JSON_CONNECTION */
44497 e = 0;
44498 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
44499 if (e) {
44500 log_packet_detailed("'attack_strength' field error detected");
44501 }
44502 }
44503 if (BV_ISSET(fields, 14)) {
44504 log_packet_detailed(" field 'defense_strength' has changed");
44505#ifdef FREECIV_JSON_CONNECTION
44506 field_addr.name = "defense_strength";
44507#endif /* FREECIV_JSON_CONNECTION */
44508 e = 0;
44509 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
44510 if (e) {
44511 log_packet_detailed("'defense_strength' field error detected");
44512 }
44513 }
44514 if (BV_ISSET(fields, 15)) {
44515 log_packet_detailed(" field 'move_rate' has changed");
44516#ifdef FREECIV_JSON_CONNECTION
44517 field_addr.name = "move_rate";
44518#endif /* FREECIV_JSON_CONNECTION */
44519 e = 0;
44520 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
44521 if (e) {
44522 log_packet_detailed("'move_rate' field error detected");
44523 }
44524 }
44525 if (BV_ISSET(fields, 16)) {
44526 log_packet_detailed(" field 'build_reqs_count' has changed");
44527#ifdef FREECIV_JSON_CONNECTION
44528 field_addr.name = "build_reqs_count";
44529#endif /* FREECIV_JSON_CONNECTION */
44530 e = 0;
44531 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_reqs_count);
44532 if (e) {
44533 log_packet_detailed("'build_reqs_count' field error detected");
44534 }
44535 }
44536 if (BV_ISSET(fields, 17)) {
44537 log_packet_detailed(" field 'build_reqs' has changed");
44538#ifdef FREECIV_JSON_CONNECTION
44539 field_addr.name = "build_reqs";
44540#endif /* FREECIV_JSON_CONNECTION */
44541 e = 0;
44542 {
44543 int i;
44544
44545#ifdef FREECIV_JSON_CONNECTION
44546 /* Create the array. */
44547 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->build_reqs_count);
44548
44549 /* Enter the array. */
44550 field_addr.sub_location = plocation_elem_new(0);
44551#endif /* FREECIV_JSON_CONNECTION */
44552
44553 for (i = 0; i < real_packet->build_reqs_count; i++) {
44554#ifdef FREECIV_JSON_CONNECTION
44555 /* Next array element. */
44556 field_addr.sub_location->number = i;
44557#endif /* FREECIV_JSON_CONNECTION */
44558
44559 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs[i]);
44560 }
44561
44562#ifdef FREECIV_JSON_CONNECTION
44563 /* Exit array. */
44564 FC_FREE(field_addr.sub_location);
44565#endif /* FREECIV_JSON_CONNECTION */
44566 }
44567 if (e) {
44568 log_packet_detailed("'build_reqs' field error detected");
44569 }
44570 }
44571 if (BV_ISSET(fields, 18)) {
44572 log_packet_detailed(" field 'vision_radius_sq' has changed");
44573#ifdef FREECIV_JSON_CONNECTION
44574 field_addr.name = "vision_radius_sq";
44575#endif /* FREECIV_JSON_CONNECTION */
44576 e = 0;
44577 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
44578 if (e) {
44579 log_packet_detailed("'vision_radius_sq' field error detected");
44580 }
44581 }
44582 if (BV_ISSET(fields, 19)) {
44583 log_packet_detailed(" field 'transport_capacity' has changed");
44584#ifdef FREECIV_JSON_CONNECTION
44585 field_addr.name = "transport_capacity";
44586#endif /* FREECIV_JSON_CONNECTION */
44587 e = 0;
44588 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
44589 if (e) {
44590 log_packet_detailed("'transport_capacity' field error detected");
44591 }
44592 }
44593 if (BV_ISSET(fields, 20)) {
44594 log_packet_detailed(" field 'hp' has changed");
44595#ifdef FREECIV_JSON_CONNECTION
44596 field_addr.name = "hp";
44597#endif /* FREECIV_JSON_CONNECTION */
44598 e = 0;
44599 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
44600 if (e) {
44601 log_packet_detailed("'hp' field error detected");
44602 }
44603 }
44604 if (BV_ISSET(fields, 21)) {
44605 log_packet_detailed(" field 'firepower' has changed");
44606#ifdef FREECIV_JSON_CONNECTION
44607 field_addr.name = "firepower";
44608#endif /* FREECIV_JSON_CONNECTION */
44609 e = 0;
44610 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
44611 if (e) {
44612 log_packet_detailed("'firepower' field error detected");
44613 }
44614 }
44615 if (BV_ISSET(fields, 22)) {
44616 log_packet_detailed(" field 'obsoleted_by' has changed");
44617#ifdef FREECIV_JSON_CONNECTION
44618 field_addr.name = "obsoleted_by";
44619#endif /* FREECIV_JSON_CONNECTION */
44620 e = 0;
44621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
44622 if (e) {
44623 log_packet_detailed("'obsoleted_by' field error detected");
44624 }
44625 }
44626 if (BV_ISSET(fields, 23)) {
44627 log_packet_detailed(" field 'converted_to' has changed");
44628#ifdef FREECIV_JSON_CONNECTION
44629 field_addr.name = "converted_to";
44630#endif /* FREECIV_JSON_CONNECTION */
44631 e = 0;
44632 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
44633 if (e) {
44634 log_packet_detailed("'converted_to' field error detected");
44635 }
44636 }
44637 if (BV_ISSET(fields, 24)) {
44638 log_packet_detailed(" field 'convert_time' has changed");
44639#ifdef FREECIV_JSON_CONNECTION
44640 field_addr.name = "convert_time";
44641#endif /* FREECIV_JSON_CONNECTION */
44642 e = 0;
44643 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
44644 if (e) {
44645 log_packet_detailed("'convert_time' field error detected");
44646 }
44647 }
44648 if (BV_ISSET(fields, 25)) {
44649 log_packet_detailed(" field 'fuel' has changed");
44650#ifdef FREECIV_JSON_CONNECTION
44651 field_addr.name = "fuel";
44652#endif /* FREECIV_JSON_CONNECTION */
44653 e = 0;
44654 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
44655 if (e) {
44656 log_packet_detailed("'fuel' field error detected");
44657 }
44658 }
44659 if (BV_ISSET(fields, 26)) {
44660 log_packet_detailed(" field 'happy_cost' has changed");
44661#ifdef FREECIV_JSON_CONNECTION
44662 field_addr.name = "happy_cost";
44663#endif /* FREECIV_JSON_CONNECTION */
44664 e = 0;
44665 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
44666 if (e) {
44667 log_packet_detailed("'happy_cost' field error detected");
44668 }
44669 }
44670 if (BV_ISSET(fields, 27)) {
44671 log_packet_detailed(" field 'upkeep' has changed");
44672#ifdef FREECIV_JSON_CONNECTION
44673 field_addr.name = "upkeep";
44674#endif /* FREECIV_JSON_CONNECTION */
44675 e = 0;
44676 {
44677 int i;
44678
44679#ifdef FREECIV_JSON_CONNECTION
44680 /* Create the array. */
44681 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
44682
44683 /* Enter the array. */
44684 field_addr.sub_location = plocation_elem_new(0);
44685#endif /* FREECIV_JSON_CONNECTION */
44686
44687 for (i = 0; i < O_LAST; i++) {
44688#ifdef FREECIV_JSON_CONNECTION
44689 /* Next array element. */
44690 field_addr.sub_location->number = i;
44691#endif /* FREECIV_JSON_CONNECTION */
44692
44693 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
44694 }
44695
44696#ifdef FREECIV_JSON_CONNECTION
44697 /* Exit array. */
44698 FC_FREE(field_addr.sub_location);
44699#endif /* FREECIV_JSON_CONNECTION */
44700 }
44701 if (e) {
44702 log_packet_detailed("'upkeep' field error detected");
44703 }
44704 }
44705 if (BV_ISSET(fields, 28)) {
44706 log_packet_detailed(" field 'paratroopers_range' has changed");
44707#ifdef FREECIV_JSON_CONNECTION
44708 field_addr.name = "paratroopers_range";
44709#endif /* FREECIV_JSON_CONNECTION */
44710 e = 0;
44711 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
44712 if (e) {
44713 log_packet_detailed("'paratroopers_range' field error detected");
44714 }
44715 }
44716 if (BV_ISSET(fields, 29)) {
44717 log_packet_detailed(" field 'veteran_levels' has changed");
44718#ifdef FREECIV_JSON_CONNECTION
44719 field_addr.name = "veteran_levels";
44720#endif /* FREECIV_JSON_CONNECTION */
44721 e = 0;
44722 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
44723 if (e) {
44724 log_packet_detailed("'veteran_levels' field error detected");
44725 }
44726 }
44727 if (BV_ISSET(fields, 30)) {
44728 log_packet_detailed(" field 'veteran_name' has changed");
44729#ifdef FREECIV_JSON_CONNECTION
44730 field_addr.name = "veteran_name";
44731#endif /* FREECIV_JSON_CONNECTION */
44732 e = 0;
44733 {
44734 int i;
44735
44736#ifdef FREECIV_JSON_CONNECTION
44737 /* Create the array. */
44738 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
44739
44740 /* Enter the array. */
44741 field_addr.sub_location = plocation_elem_new(0);
44742#endif /* FREECIV_JSON_CONNECTION */
44743
44744 for (i = 0; i < real_packet->veteran_levels; i++) {
44745#ifdef FREECIV_JSON_CONNECTION
44746 /* Next array element. */
44747 field_addr.sub_location->number = i;
44748#endif /* FREECIV_JSON_CONNECTION */
44749
44750 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
44751 }
44752
44753#ifdef FREECIV_JSON_CONNECTION
44754 /* Exit array. */
44755 FC_FREE(field_addr.sub_location);
44756#endif /* FREECIV_JSON_CONNECTION */
44757 }
44758 if (e) {
44759 log_packet_detailed("'veteran_name' field error detected");
44760 }
44761 }
44762 if (BV_ISSET(fields, 31)) {
44763 log_packet_detailed(" field 'power_fact' has changed");
44764#ifdef FREECIV_JSON_CONNECTION
44765 field_addr.name = "power_fact";
44766#endif /* FREECIV_JSON_CONNECTION */
44767 e = 0;
44768 {
44769 int i;
44770
44771#ifdef FREECIV_JSON_CONNECTION
44772 /* Create the array. */
44773 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
44774
44775 /* Enter the array. */
44776 field_addr.sub_location = plocation_elem_new(0);
44777#endif /* FREECIV_JSON_CONNECTION */
44778
44779 for (i = 0; i < real_packet->veteran_levels; i++) {
44780#ifdef FREECIV_JSON_CONNECTION
44781 /* Next array element. */
44782 field_addr.sub_location->number = i;
44783#endif /* FREECIV_JSON_CONNECTION */
44784
44785 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
44786 }
44787
44788#ifdef FREECIV_JSON_CONNECTION
44789 /* Exit array. */
44790 FC_FREE(field_addr.sub_location);
44791#endif /* FREECIV_JSON_CONNECTION */
44792 }
44793 if (e) {
44794 log_packet_detailed("'power_fact' field error detected");
44795 }
44796 }
44797 if (BV_ISSET(fields, 32)) {
44798 log_packet_detailed(" field 'move_bonus' has changed");
44799#ifdef FREECIV_JSON_CONNECTION
44800 field_addr.name = "move_bonus";
44801#endif /* FREECIV_JSON_CONNECTION */
44802 e = 0;
44803 {
44804 int i;
44805
44806#ifdef FREECIV_JSON_CONNECTION
44807 /* Create the array. */
44808 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
44809
44810 /* Enter the array. */
44811 field_addr.sub_location = plocation_elem_new(0);
44812#endif /* FREECIV_JSON_CONNECTION */
44813
44814 for (i = 0; i < real_packet->veteran_levels; i++) {
44815#ifdef FREECIV_JSON_CONNECTION
44816 /* Next array element. */
44817 field_addr.sub_location->number = i;
44818#endif /* FREECIV_JSON_CONNECTION */
44819
44820 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
44821 }
44822
44823#ifdef FREECIV_JSON_CONNECTION
44824 /* Exit array. */
44825 FC_FREE(field_addr.sub_location);
44826#endif /* FREECIV_JSON_CONNECTION */
44827 }
44828 if (e) {
44829 log_packet_detailed("'move_bonus' field error detected");
44830 }
44831 }
44832 if (BV_ISSET(fields, 33)) {
44833 log_packet_detailed(" field 'base_raise_chance' has changed");
44834#ifdef FREECIV_JSON_CONNECTION
44835 field_addr.name = "base_raise_chance";
44836#endif /* FREECIV_JSON_CONNECTION */
44837 e = 0;
44838 {
44839 int i;
44840
44841#ifdef FREECIV_JSON_CONNECTION
44842 /* Create the array. */
44843 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
44844
44845 /* Enter the array. */
44846 field_addr.sub_location = plocation_elem_new(0);
44847#endif /* FREECIV_JSON_CONNECTION */
44848
44849 for (i = 0; i < real_packet->veteran_levels; i++) {
44850#ifdef FREECIV_JSON_CONNECTION
44851 /* Next array element. */
44852 field_addr.sub_location->number = i;
44853#endif /* FREECIV_JSON_CONNECTION */
44854
44855 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
44856 }
44857
44858#ifdef FREECIV_JSON_CONNECTION
44859 /* Exit array. */
44860 FC_FREE(field_addr.sub_location);
44861#endif /* FREECIV_JSON_CONNECTION */
44862 }
44863 if (e) {
44864 log_packet_detailed("'base_raise_chance' field error detected");
44865 }
44866 }
44867 if (BV_ISSET(fields, 34)) {
44868 log_packet_detailed(" field 'work_raise_chance' has changed");
44869#ifdef FREECIV_JSON_CONNECTION
44870 field_addr.name = "work_raise_chance";
44871#endif /* FREECIV_JSON_CONNECTION */
44872 e = 0;
44873 {
44874 int i;
44875
44876#ifdef FREECIV_JSON_CONNECTION
44877 /* Create the array. */
44878 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
44879
44880 /* Enter the array. */
44881 field_addr.sub_location = plocation_elem_new(0);
44882#endif /* FREECIV_JSON_CONNECTION */
44883
44884 for (i = 0; i < real_packet->veteran_levels; i++) {
44885#ifdef FREECIV_JSON_CONNECTION
44886 /* Next array element. */
44887 field_addr.sub_location->number = i;
44888#endif /* FREECIV_JSON_CONNECTION */
44889
44890 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
44891 }
44892
44893#ifdef FREECIV_JSON_CONNECTION
44894 /* Exit array. */
44895 FC_FREE(field_addr.sub_location);
44896#endif /* FREECIV_JSON_CONNECTION */
44897 }
44898 if (e) {
44899 log_packet_detailed("'work_raise_chance' field error detected");
44900 }
44901 }
44902 if (BV_ISSET(fields, 35)) {
44903 log_packet_detailed(" field 'bombard_rate' has changed");
44904#ifdef FREECIV_JSON_CONNECTION
44905 field_addr.name = "bombard_rate";
44906#endif /* FREECIV_JSON_CONNECTION */
44907 e = 0;
44908 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
44909 if (e) {
44910 log_packet_detailed("'bombard_rate' field error detected");
44911 }
44912 }
44913 if (BV_ISSET(fields, 36)) {
44914 log_packet_detailed(" field 'city_size' has changed");
44915#ifdef FREECIV_JSON_CONNECTION
44916 field_addr.name = "city_size";
44917#endif /* FREECIV_JSON_CONNECTION */
44918 e = 0;
44919 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
44920 if (e) {
44921 log_packet_detailed("'city_size' field error detected");
44922 }
44923 }
44924 if (BV_ISSET(fields, 37)) {
44925 log_packet_detailed(" field 'city_slots' has changed");
44926#ifdef FREECIV_JSON_CONNECTION
44927 field_addr.name = "city_slots";
44928#endif /* FREECIV_JSON_CONNECTION */
44929 e = 0;
44930 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
44931 if (e) {
44932 log_packet_detailed("'city_slots' field error detected");
44933 }
44934 }
44935 if (BV_ISSET(fields, 38)) {
44936 log_packet_detailed(" field 'tp_defense' has changed");
44937#ifdef FREECIV_JSON_CONNECTION
44938 field_addr.name = "tp_defense";
44939#endif /* FREECIV_JSON_CONNECTION */
44940 e = 0;
44941 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
44942 if (e) {
44943 log_packet_detailed("'tp_defense' field error detected");
44944 }
44945 }
44946 if (BV_ISSET(fields, 39)) {
44947 log_packet_detailed(" field 'cargo' has changed");
44948#ifdef FREECIV_JSON_CONNECTION
44949 field_addr.name = "cargo";
44950#endif /* FREECIV_JSON_CONNECTION */
44951 e = 0;
44952 e |= DIO_BV_PUT(&dout, &field_addr, packet->cargo);
44953 if (e) {
44954 log_packet_detailed("'cargo' field error detected");
44955 }
44956 }
44957 if (BV_ISSET(fields, 40)) {
44958 log_packet_detailed(" field 'targets' has changed");
44959#ifdef FREECIV_JSON_CONNECTION
44960 field_addr.name = "targets";
44961#endif /* FREECIV_JSON_CONNECTION */
44962 e = 0;
44963 e |= DIO_BV_PUT(&dout, &field_addr, packet->targets);
44964 if (e) {
44965 log_packet_detailed("'targets' field error detected");
44966 }
44967 }
44968 if (BV_ISSET(fields, 41)) {
44969 log_packet_detailed(" field 'embarks' has changed");
44970#ifdef FREECIV_JSON_CONNECTION
44971 field_addr.name = "embarks";
44972#endif /* FREECIV_JSON_CONNECTION */
44973 e = 0;
44974 e |= DIO_BV_PUT(&dout, &field_addr, packet->embarks);
44975 if (e) {
44976 log_packet_detailed("'embarks' field error detected");
44977 }
44978 }
44979 if (BV_ISSET(fields, 42)) {
44980 log_packet_detailed(" field 'disembarks' has changed");
44981#ifdef FREECIV_JSON_CONNECTION
44982 field_addr.name = "disembarks";
44983#endif /* FREECIV_JSON_CONNECTION */
44984 e = 0;
44985 e |= DIO_BV_PUT(&dout, &field_addr, packet->disembarks);
44986 if (e) {
44987 log_packet_detailed("'disembarks' field error detected");
44988 }
44989 }
44990 if (BV_ISSET(fields, 43)) {
44991 log_packet_detailed(" field 'vlayer' has changed");
44992#ifdef FREECIV_JSON_CONNECTION
44993 field_addr.name = "vlayer";
44994#endif /* FREECIV_JSON_CONNECTION */
44995 e = 0;
44996 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
44997 if (e) {
44998 log_packet_detailed("'vlayer' field error detected");
44999 }
45000 }
45001 if (BV_ISSET(fields, 44)) {
45002 log_packet_detailed(" field 'helptext' has changed");
45003#ifdef FREECIV_JSON_CONNECTION
45004 field_addr.name = "helptext";
45005#endif /* FREECIV_JSON_CONNECTION */
45006 e = 0;
45007 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
45008 if (e) {
45009 log_packet_detailed("'helptext' field error detected");
45010 }
45011 }
45012 if (BV_ISSET(fields, 45)) {
45013 log_packet_detailed(" field 'flags' has changed");
45014#ifdef FREECIV_JSON_CONNECTION
45015 field_addr.name = "flags";
45016#endif /* FREECIV_JSON_CONNECTION */
45017 e = 0;
45018 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
45019 if (e) {
45020 log_packet_detailed("'flags' field error detected");
45021 }
45022 }
45023 if (BV_ISSET(fields, 46)) {
45024 log_packet_detailed(" field 'roles' has changed");
45025#ifdef FREECIV_JSON_CONNECTION
45026 field_addr.name = "roles";
45027#endif /* FREECIV_JSON_CONNECTION */
45028 e = 0;
45029 e |= DIO_BV_PUT(&dout, &field_addr, packet->roles);
45030 if (e) {
45031 log_packet_detailed("'roles' field error detected");
45032 }
45033 }
45034 /* field 47 is folded into the header */
45035
45036 *old = *real_packet;
45037#endif /* FREECIV_DELTA_PROTOCOL */
45038#ifndef FREECIV_DELTA_PROTOCOL
45039#ifdef FREECIV_JSON_CONNECTION
45040 field_addr.name = "id";
45041#endif /* FREECIV_JSON_CONNECTION */
45042 e = 0;
45043 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
45044 if (e) {
45045 log_packet_detailed("'id' field error detected");
45046 }
45047#ifdef FREECIV_JSON_CONNECTION
45048 field_addr.name = "name";
45049#endif /* FREECIV_JSON_CONNECTION */
45050 e = 0;
45051 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
45052 if (e) {
45053 log_packet_detailed("'name' field error detected");
45054 }
45055#ifdef FREECIV_JSON_CONNECTION
45056 field_addr.name = "rule_name";
45057#endif /* FREECIV_JSON_CONNECTION */
45058 e = 0;
45059 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
45060 if (e) {
45061 log_packet_detailed("'rule_name' field error detected");
45062 }
45063#ifdef FREECIV_JSON_CONNECTION
45064 field_addr.name = "graphic_str";
45065#endif /* FREECIV_JSON_CONNECTION */
45066 e = 0;
45067 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
45068 if (e) {
45069 log_packet_detailed("'graphic_str' field error detected");
45070 }
45071#ifdef FREECIV_JSON_CONNECTION
45072 field_addr.name = "graphic_alt";
45073#endif /* FREECIV_JSON_CONNECTION */
45074 e = 0;
45075 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
45076 if (e) {
45077 log_packet_detailed("'graphic_alt' field error detected");
45078 }
45079#ifdef FREECIV_JSON_CONNECTION
45080 field_addr.name = "graphic_alt2";
45081#endif /* FREECIV_JSON_CONNECTION */
45082 e = 0;
45083 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
45084 if (e) {
45085 log_packet_detailed("'graphic_alt2' field error detected");
45086 }
45087#ifdef FREECIV_JSON_CONNECTION
45088 field_addr.name = "sound_move";
45089#endif /* FREECIV_JSON_CONNECTION */
45090 e = 0;
45091 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
45092 if (e) {
45093 log_packet_detailed("'sound_move' field error detected");
45094 }
45095#ifdef FREECIV_JSON_CONNECTION
45096 field_addr.name = "sound_move_alt";
45097#endif /* FREECIV_JSON_CONNECTION */
45098 e = 0;
45099 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
45100 if (e) {
45101 log_packet_detailed("'sound_move_alt' field error detected");
45102 }
45103#ifdef FREECIV_JSON_CONNECTION
45104 field_addr.name = "sound_fight";
45105#endif /* FREECIV_JSON_CONNECTION */
45106 e = 0;
45107 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
45108 if (e) {
45109 log_packet_detailed("'sound_fight' field error detected");
45110 }
45111#ifdef FREECIV_JSON_CONNECTION
45112 field_addr.name = "sound_fight_alt";
45113#endif /* FREECIV_JSON_CONNECTION */
45114 e = 0;
45115 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
45116 if (e) {
45117 log_packet_detailed("'sound_fight_alt' field error detected");
45118 }
45119#ifdef FREECIV_JSON_CONNECTION
45120 field_addr.name = "unit_class_id";
45121#endif /* FREECIV_JSON_CONNECTION */
45122 e = 0;
45123 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
45124 if (e) {
45125 log_packet_detailed("'unit_class_id' field error detected");
45126 }
45127#ifdef FREECIV_JSON_CONNECTION
45128 field_addr.name = "build_cost";
45129#endif /* FREECIV_JSON_CONNECTION */
45130 e = 0;
45131 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
45132 if (e) {
45133 log_packet_detailed("'build_cost' field error detected");
45134 }
45135#ifdef FREECIV_JSON_CONNECTION
45136 field_addr.name = "pop_cost";
45137#endif /* FREECIV_JSON_CONNECTION */
45138 e = 0;
45139 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
45140 if (e) {
45141 log_packet_detailed("'pop_cost' field error detected");
45142 }
45143#ifdef FREECIV_JSON_CONNECTION
45144 field_addr.name = "attack_strength";
45145#endif /* FREECIV_JSON_CONNECTION */
45146 e = 0;
45147 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
45148 if (e) {
45149 log_packet_detailed("'attack_strength' field error detected");
45150 }
45151#ifdef FREECIV_JSON_CONNECTION
45152 field_addr.name = "defense_strength";
45153#endif /* FREECIV_JSON_CONNECTION */
45154 e = 0;
45155 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
45156 if (e) {
45157 log_packet_detailed("'defense_strength' field error detected");
45158 }
45159#ifdef FREECIV_JSON_CONNECTION
45160 field_addr.name = "move_rate";
45161#endif /* FREECIV_JSON_CONNECTION */
45162 e = 0;
45163 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
45164 if (e) {
45165 log_packet_detailed("'move_rate' field error detected");
45166 }
45167#ifdef FREECIV_JSON_CONNECTION
45168 field_addr.name = "build_reqs_count";
45169#endif /* FREECIV_JSON_CONNECTION */
45170 e = 0;
45171 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_reqs_count);
45172 if (e) {
45173 log_packet_detailed("'build_reqs_count' field error detected");
45174 }
45175#ifdef FREECIV_JSON_CONNECTION
45176 field_addr.name = "build_reqs";
45177#endif /* FREECIV_JSON_CONNECTION */
45178 e = 0;
45179 {
45180 int i;
45181
45182#ifdef FREECIV_JSON_CONNECTION
45183 /* Create the array. */
45184 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->build_reqs_count);
45185
45186 /* Enter the array. */
45187 field_addr.sub_location = plocation_elem_new(0);
45188#endif /* FREECIV_JSON_CONNECTION */
45189
45190 for (i = 0; i < real_packet->build_reqs_count; i++) {
45191#ifdef FREECIV_JSON_CONNECTION
45192 /* Next array element. */
45193 field_addr.sub_location->number = i;
45194#endif /* FREECIV_JSON_CONNECTION */
45195
45196 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs[i]);
45197 }
45198
45199#ifdef FREECIV_JSON_CONNECTION
45200 /* Exit array. */
45201 FC_FREE(field_addr.sub_location);
45202#endif /* FREECIV_JSON_CONNECTION */
45203 }
45204 if (e) {
45205 log_packet_detailed("'build_reqs' field error detected");
45206 }
45207#ifdef FREECIV_JSON_CONNECTION
45208 field_addr.name = "vision_radius_sq";
45209#endif /* FREECIV_JSON_CONNECTION */
45210 e = 0;
45211 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
45212 if (e) {
45213 log_packet_detailed("'vision_radius_sq' field error detected");
45214 }
45215#ifdef FREECIV_JSON_CONNECTION
45216 field_addr.name = "transport_capacity";
45217#endif /* FREECIV_JSON_CONNECTION */
45218 e = 0;
45219 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
45220 if (e) {
45221 log_packet_detailed("'transport_capacity' field error detected");
45222 }
45223#ifdef FREECIV_JSON_CONNECTION
45224 field_addr.name = "hp";
45225#endif /* FREECIV_JSON_CONNECTION */
45226 e = 0;
45227 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
45228 if (e) {
45229 log_packet_detailed("'hp' field error detected");
45230 }
45231#ifdef FREECIV_JSON_CONNECTION
45232 field_addr.name = "firepower";
45233#endif /* FREECIV_JSON_CONNECTION */
45234 e = 0;
45235 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
45236 if (e) {
45237 log_packet_detailed("'firepower' field error detected");
45238 }
45239#ifdef FREECIV_JSON_CONNECTION
45240 field_addr.name = "obsoleted_by";
45241#endif /* FREECIV_JSON_CONNECTION */
45242 e = 0;
45243 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
45244 if (e) {
45245 log_packet_detailed("'obsoleted_by' field error detected");
45246 }
45247#ifdef FREECIV_JSON_CONNECTION
45248 field_addr.name = "converted_to";
45249#endif /* FREECIV_JSON_CONNECTION */
45250 e = 0;
45251 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
45252 if (e) {
45253 log_packet_detailed("'converted_to' field error detected");
45254 }
45255#ifdef FREECIV_JSON_CONNECTION
45256 field_addr.name = "convert_time";
45257#endif /* FREECIV_JSON_CONNECTION */
45258 e = 0;
45259 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
45260 if (e) {
45261 log_packet_detailed("'convert_time' field error detected");
45262 }
45263#ifdef FREECIV_JSON_CONNECTION
45264 field_addr.name = "fuel";
45265#endif /* FREECIV_JSON_CONNECTION */
45266 e = 0;
45267 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
45268 if (e) {
45269 log_packet_detailed("'fuel' field error detected");
45270 }
45271#ifdef FREECIV_JSON_CONNECTION
45272 field_addr.name = "happy_cost";
45273#endif /* FREECIV_JSON_CONNECTION */
45274 e = 0;
45275 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
45276 if (e) {
45277 log_packet_detailed("'happy_cost' field error detected");
45278 }
45279#ifdef FREECIV_JSON_CONNECTION
45280 field_addr.name = "upkeep";
45281#endif /* FREECIV_JSON_CONNECTION */
45282 e = 0;
45283 {
45284 int i;
45285
45286#ifdef FREECIV_JSON_CONNECTION
45287 /* Create the array. */
45288 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
45289
45290 /* Enter the array. */
45291 field_addr.sub_location = plocation_elem_new(0);
45292#endif /* FREECIV_JSON_CONNECTION */
45293
45294 for (i = 0; i < O_LAST; i++) {
45295#ifdef FREECIV_JSON_CONNECTION
45296 /* Next array element. */
45297 field_addr.sub_location->number = i;
45298#endif /* FREECIV_JSON_CONNECTION */
45299
45300 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
45301 }
45302
45303#ifdef FREECIV_JSON_CONNECTION
45304 /* Exit array. */
45305 FC_FREE(field_addr.sub_location);
45306#endif /* FREECIV_JSON_CONNECTION */
45307 }
45308 if (e) {
45309 log_packet_detailed("'upkeep' field error detected");
45310 }
45311#ifdef FREECIV_JSON_CONNECTION
45312 field_addr.name = "paratroopers_range";
45313#endif /* FREECIV_JSON_CONNECTION */
45314 e = 0;
45315 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
45316 if (e) {
45317 log_packet_detailed("'paratroopers_range' field error detected");
45318 }
45319#ifdef FREECIV_JSON_CONNECTION
45320 field_addr.name = "veteran_levels";
45321#endif /* FREECIV_JSON_CONNECTION */
45322 e = 0;
45323 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
45324 if (e) {
45325 log_packet_detailed("'veteran_levels' field error detected");
45326 }
45327#ifdef FREECIV_JSON_CONNECTION
45328 field_addr.name = "veteran_name";
45329#endif /* FREECIV_JSON_CONNECTION */
45330 e = 0;
45331 {
45332 int i;
45333
45334#ifdef FREECIV_JSON_CONNECTION
45335 /* Create the array. */
45336 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
45337
45338 /* Enter the array. */
45339 field_addr.sub_location = plocation_elem_new(0);
45340#endif /* FREECIV_JSON_CONNECTION */
45341
45342 for (i = 0; i < real_packet->veteran_levels; i++) {
45343#ifdef FREECIV_JSON_CONNECTION
45344 /* Next array element. */
45345 field_addr.sub_location->number = i;
45346#endif /* FREECIV_JSON_CONNECTION */
45347
45348 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
45349 }
45350
45351#ifdef FREECIV_JSON_CONNECTION
45352 /* Exit array. */
45353 FC_FREE(field_addr.sub_location);
45354#endif /* FREECIV_JSON_CONNECTION */
45355 }
45356 if (e) {
45357 log_packet_detailed("'veteran_name' field error detected");
45358 }
45359#ifdef FREECIV_JSON_CONNECTION
45360 field_addr.name = "power_fact";
45361#endif /* FREECIV_JSON_CONNECTION */
45362 e = 0;
45363 {
45364 int i;
45365
45366#ifdef FREECIV_JSON_CONNECTION
45367 /* Create the array. */
45368 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
45369
45370 /* Enter the array. */
45371 field_addr.sub_location = plocation_elem_new(0);
45372#endif /* FREECIV_JSON_CONNECTION */
45373
45374 for (i = 0; i < real_packet->veteran_levels; i++) {
45375#ifdef FREECIV_JSON_CONNECTION
45376 /* Next array element. */
45377 field_addr.sub_location->number = i;
45378#endif /* FREECIV_JSON_CONNECTION */
45379
45380 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
45381 }
45382
45383#ifdef FREECIV_JSON_CONNECTION
45384 /* Exit array. */
45385 FC_FREE(field_addr.sub_location);
45386#endif /* FREECIV_JSON_CONNECTION */
45387 }
45388 if (e) {
45389 log_packet_detailed("'power_fact' field error detected");
45390 }
45391#ifdef FREECIV_JSON_CONNECTION
45392 field_addr.name = "move_bonus";
45393#endif /* FREECIV_JSON_CONNECTION */
45394 e = 0;
45395 {
45396 int i;
45397
45398#ifdef FREECIV_JSON_CONNECTION
45399 /* Create the array. */
45400 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
45401
45402 /* Enter the array. */
45403 field_addr.sub_location = plocation_elem_new(0);
45404#endif /* FREECIV_JSON_CONNECTION */
45405
45406 for (i = 0; i < real_packet->veteran_levels; i++) {
45407#ifdef FREECIV_JSON_CONNECTION
45408 /* Next array element. */
45409 field_addr.sub_location->number = i;
45410#endif /* FREECIV_JSON_CONNECTION */
45411
45412 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
45413 }
45414
45415#ifdef FREECIV_JSON_CONNECTION
45416 /* Exit array. */
45417 FC_FREE(field_addr.sub_location);
45418#endif /* FREECIV_JSON_CONNECTION */
45419 }
45420 if (e) {
45421 log_packet_detailed("'move_bonus' field error detected");
45422 }
45423#ifdef FREECIV_JSON_CONNECTION
45424 field_addr.name = "base_raise_chance";
45425#endif /* FREECIV_JSON_CONNECTION */
45426 e = 0;
45427 {
45428 int i;
45429
45430#ifdef FREECIV_JSON_CONNECTION
45431 /* Create the array. */
45432 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
45433
45434 /* Enter the array. */
45435 field_addr.sub_location = plocation_elem_new(0);
45436#endif /* FREECIV_JSON_CONNECTION */
45437
45438 for (i = 0; i < real_packet->veteran_levels; i++) {
45439#ifdef FREECIV_JSON_CONNECTION
45440 /* Next array element. */
45441 field_addr.sub_location->number = i;
45442#endif /* FREECIV_JSON_CONNECTION */
45443
45444 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
45445 }
45446
45447#ifdef FREECIV_JSON_CONNECTION
45448 /* Exit array. */
45449 FC_FREE(field_addr.sub_location);
45450#endif /* FREECIV_JSON_CONNECTION */
45451 }
45452 if (e) {
45453 log_packet_detailed("'base_raise_chance' field error detected");
45454 }
45455#ifdef FREECIV_JSON_CONNECTION
45456 field_addr.name = "work_raise_chance";
45457#endif /* FREECIV_JSON_CONNECTION */
45458 e = 0;
45459 {
45460 int i;
45461
45462#ifdef FREECIV_JSON_CONNECTION
45463 /* Create the array. */
45464 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
45465
45466 /* Enter the array. */
45467 field_addr.sub_location = plocation_elem_new(0);
45468#endif /* FREECIV_JSON_CONNECTION */
45469
45470 for (i = 0; i < real_packet->veteran_levels; i++) {
45471#ifdef FREECIV_JSON_CONNECTION
45472 /* Next array element. */
45473 field_addr.sub_location->number = i;
45474#endif /* FREECIV_JSON_CONNECTION */
45475
45476 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
45477 }
45478
45479#ifdef FREECIV_JSON_CONNECTION
45480 /* Exit array. */
45481 FC_FREE(field_addr.sub_location);
45482#endif /* FREECIV_JSON_CONNECTION */
45483 }
45484 if (e) {
45485 log_packet_detailed("'work_raise_chance' field error detected");
45486 }
45487#ifdef FREECIV_JSON_CONNECTION
45488 field_addr.name = "bombard_rate";
45489#endif /* FREECIV_JSON_CONNECTION */
45490 e = 0;
45491 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
45492 if (e) {
45493 log_packet_detailed("'bombard_rate' field error detected");
45494 }
45495#ifdef FREECIV_JSON_CONNECTION
45496 field_addr.name = "city_size";
45497#endif /* FREECIV_JSON_CONNECTION */
45498 e = 0;
45499 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
45500 if (e) {
45501 log_packet_detailed("'city_size' field error detected");
45502 }
45503#ifdef FREECIV_JSON_CONNECTION
45504 field_addr.name = "city_slots";
45505#endif /* FREECIV_JSON_CONNECTION */
45506 e = 0;
45507 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
45508 if (e) {
45509 log_packet_detailed("'city_slots' field error detected");
45510 }
45511#ifdef FREECIV_JSON_CONNECTION
45512 field_addr.name = "tp_defense";
45513#endif /* FREECIV_JSON_CONNECTION */
45514 e = 0;
45515 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
45516 if (e) {
45517 log_packet_detailed("'tp_defense' field error detected");
45518 }
45519#ifdef FREECIV_JSON_CONNECTION
45520 field_addr.name = "cargo";
45521#endif /* FREECIV_JSON_CONNECTION */
45522 e = 0;
45523 e |= DIO_BV_PUT(&dout, &field_addr, packet->cargo);
45524 if (e) {
45525 log_packet_detailed("'cargo' field error detected");
45526 }
45527#ifdef FREECIV_JSON_CONNECTION
45528 field_addr.name = "targets";
45529#endif /* FREECIV_JSON_CONNECTION */
45530 e = 0;
45531 e |= DIO_BV_PUT(&dout, &field_addr, packet->targets);
45532 if (e) {
45533 log_packet_detailed("'targets' field error detected");
45534 }
45535#ifdef FREECIV_JSON_CONNECTION
45536 field_addr.name = "embarks";
45537#endif /* FREECIV_JSON_CONNECTION */
45538 e = 0;
45539 e |= DIO_BV_PUT(&dout, &field_addr, packet->embarks);
45540 if (e) {
45541 log_packet_detailed("'embarks' field error detected");
45542 }
45543#ifdef FREECIV_JSON_CONNECTION
45544 field_addr.name = "disembarks";
45545#endif /* FREECIV_JSON_CONNECTION */
45546 e = 0;
45547 e |= DIO_BV_PUT(&dout, &field_addr, packet->disembarks);
45548 if (e) {
45549 log_packet_detailed("'disembarks' field error detected");
45550 }
45551#ifdef FREECIV_JSON_CONNECTION
45552 field_addr.name = "vlayer";
45553#endif /* FREECIV_JSON_CONNECTION */
45554 e = 0;
45555 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
45556 if (e) {
45557 log_packet_detailed("'vlayer' field error detected");
45558 }
45559#ifdef FREECIV_JSON_CONNECTION
45560 field_addr.name = "helptext";
45561#endif /* FREECIV_JSON_CONNECTION */
45562 e = 0;
45563 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
45564 if (e) {
45565 log_packet_detailed("'helptext' field error detected");
45566 }
45567#ifdef FREECIV_JSON_CONNECTION
45568 field_addr.name = "flags";
45569#endif /* FREECIV_JSON_CONNECTION */
45570 e = 0;
45571 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
45572 if (e) {
45573 log_packet_detailed("'flags' field error detected");
45574 }
45575#ifdef FREECIV_JSON_CONNECTION
45576 field_addr.name = "roles";
45577#endif /* FREECIV_JSON_CONNECTION */
45578 e = 0;
45579 e |= DIO_BV_PUT(&dout, &field_addr, packet->roles);
45580 if (e) {
45581 log_packet_detailed("'roles' field error detected");
45582 }
45583#ifdef FREECIV_JSON_CONNECTION
45584 field_addr.name = "worker";
45585#endif /* FREECIV_JSON_CONNECTION */
45586 e = 0;
45587 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->worker);
45588 if (e) {
45589 log_packet_detailed("'worker' field error detected");
45590 }
45591
45592#endif
45594}
45595
45597{
45598 if (!pc->used) {
45599 log_error("WARNING: trying to send data to the closed connection %s",
45601 return -1;
45602 }
45603 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT].packet != NULL, -1,
45604 "Handler for PACKET_RULESET_UNIT not installed");
45605 return pc->phs.handlers->send[PACKET_RULESET_UNIT].packet(pc, packet);
45606}
45607
45608void lsend_packet_ruleset_unit(struct conn_list *dest, const struct packet_ruleset_unit *packet)
45609{
45610 conn_list_iterate(dest, pconn) {
45613}
45614
45615#ifdef FREECIV_DELTA_PROTOCOL
45616#define hash_packet_ruleset_unit_bonus_100 hash_const
45617
45618#define cmp_packet_ruleset_unit_bonus_100 cmp_const
45619
45621#endif /* FREECIV_DELTA_PROTOCOL */
45622
45624{
45625#ifdef FREECIV_DELTA_PROTOCOL
45627 struct packet_ruleset_unit_bonus *old;
45628 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_BONUS;
45629#endif /* FREECIV_DELTA_PROTOCOL */
45631#ifdef FREECIV_JSON_CONNECTION
45632 struct plocation field_addr;
45633 {
45637 }
45638#endif /* FREECIV_JSON_CONNECTION */
45639
45640#ifdef FREECIV_DELTA_PROTOCOL
45641#ifdef FREECIV_JSON_CONNECTION
45642 field_addr.name = "fields";
45643#endif /* FREECIV_JSON_CONNECTION */
45644 DIO_BV_GET(&din, &field_addr, fields);
45645
45646#else /* FREECIV_DELTA_PROTOCOL */
45647#ifdef FREECIV_JSON_CONNECTION
45648 field_addr.name = "unit";
45649#endif /* FREECIV_JSON_CONNECTION */
45650 {
45651 int readin;
45652
45653 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
45655 }
45656 real_packet->unit = readin;
45657 }
45658#ifdef FREECIV_JSON_CONNECTION
45659 field_addr.name = "flag";
45660#endif /* FREECIV_JSON_CONNECTION */
45661 {
45662 int readin;
45663
45664 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45666 }
45667 real_packet->flag = readin;
45668 }
45669#ifdef FREECIV_JSON_CONNECTION
45670 field_addr.name = "type";
45671#endif /* FREECIV_JSON_CONNECTION */
45672 {
45673 int readin;
45674
45675 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45677 }
45678 real_packet->type = readin;
45679 }
45680#ifdef FREECIV_JSON_CONNECTION
45681 field_addr.name = "value";
45682#endif /* FREECIV_JSON_CONNECTION */
45683 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
45685 }
45686#ifdef FREECIV_JSON_CONNECTION
45687 field_addr.name = "quiet";
45688#endif /* FREECIV_JSON_CONNECTION */
45689 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
45691 }
45692#endif
45693 log_packet_detailed("packet_ruleset_unit_bonus_100: got info about ()");
45694
45695#ifdef FREECIV_DELTA_PROTOCOL
45696 if (NULL == *hash) {
45698 NULL, NULL, NULL, free);
45699 }
45700
45701 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45702 *real_packet = *old;
45703 } else {
45704 log_packet_detailed(" no old info");
45705 memset(real_packet, 0, sizeof(*real_packet));
45706 }
45707
45708 if (BV_ISSET(fields, 0)) {
45709 log_packet_detailed(" got field 'unit'");
45710#ifdef FREECIV_JSON_CONNECTION
45711 field_addr.name = "unit";
45712#endif /* FREECIV_JSON_CONNECTION */
45713 {
45714 int readin;
45715
45716 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
45718 }
45719 real_packet->unit = readin;
45720 }
45721 }
45722 if (BV_ISSET(fields, 1)) {
45723 log_packet_detailed(" got field 'flag'");
45724#ifdef FREECIV_JSON_CONNECTION
45725 field_addr.name = "flag";
45726#endif /* FREECIV_JSON_CONNECTION */
45727 {
45728 int readin;
45729
45730 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45732 }
45733 real_packet->flag = readin;
45734 }
45735 }
45736 if (BV_ISSET(fields, 2)) {
45737 log_packet_detailed(" got field 'type'");
45738#ifdef FREECIV_JSON_CONNECTION
45739 field_addr.name = "type";
45740#endif /* FREECIV_JSON_CONNECTION */
45741 {
45742 int readin;
45743
45744 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45746 }
45747 real_packet->type = readin;
45748 }
45749 }
45750 if (BV_ISSET(fields, 3)) {
45751 log_packet_detailed(" got field 'value'");
45752#ifdef FREECIV_JSON_CONNECTION
45753 field_addr.name = "value";
45754#endif /* FREECIV_JSON_CONNECTION */
45755 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
45757 }
45758 }
45759 real_packet->quiet = BV_ISSET(fields, 4);
45760
45761 if (NULL == old) {
45762 old = fc_malloc(sizeof(*old));
45763 *old = *real_packet;
45764 genhash_insert(*hash, old, old);
45765 } else {
45766 *old = *real_packet;
45767 }
45768
45769#endif /* FREECIV_DELTA_PROTOCOL */
45771}
45772
45774{
45775 const struct packet_ruleset_unit_bonus *real_packet = packet;
45776 int e;
45777#ifdef FREECIV_DELTA_PROTOCOL
45779 struct packet_ruleset_unit_bonus *old;
45780 bool differ;
45781 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_BONUS;
45782#endif /* FREECIV_DELTA_PROTOCOL */
45784#ifdef FREECIV_JSON_CONNECTION
45785 struct plocation field_addr;
45786 {
45790 }
45791#endif /* FREECIV_JSON_CONNECTION */
45792
45793 log_packet_detailed("packet_ruleset_unit_bonus_100: sending info about ()");
45794
45795#ifdef FREECIV_DELTA_PROTOCOL
45796 if (NULL == *hash) {
45798 NULL, NULL, NULL, free);
45799 }
45800 BV_CLR_ALL(fields);
45801
45802 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45803 old = fc_malloc(sizeof(*old));
45804 *old = *real_packet;
45805 genhash_insert(*hash, old, old);
45806 memset(old, 0, sizeof(*old));
45807 }
45808 differ = (old->unit != real_packet->unit);
45809 if (differ) {
45810 BV_SET(fields, 0);
45811 }
45812
45813 differ = (old->flag != real_packet->flag);
45814 if (differ) {
45815 BV_SET(fields, 1);
45816 }
45817
45818 differ = (old->type != real_packet->type);
45819 if (differ) {
45820 BV_SET(fields, 2);
45821 }
45822
45823 differ = (old->value != real_packet->value);
45824 if (differ) {
45825 BV_SET(fields, 3);
45826 }
45827
45828 if (packet->quiet) {
45829 BV_SET(fields, 4);
45830 }
45831
45832
45833#ifdef FREECIV_JSON_CONNECTION
45834 field_addr.name = "fields";
45835#endif /* FREECIV_JSON_CONNECTION */
45836 e = 0;
45837 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45838 if (e) {
45839 log_packet_detailed("fields bitvector error detected");
45840 }
45841
45842 if (BV_ISSET(fields, 0)) {
45843 log_packet_detailed(" field 'unit' has changed");
45844#ifdef FREECIV_JSON_CONNECTION
45845 field_addr.name = "unit";
45846#endif /* FREECIV_JSON_CONNECTION */
45847 e = 0;
45848 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
45849 if (e) {
45850 log_packet_detailed("'unit' field error detected");
45851 }
45852 }
45853 if (BV_ISSET(fields, 1)) {
45854 log_packet_detailed(" field 'flag' has changed");
45855#ifdef FREECIV_JSON_CONNECTION
45856 field_addr.name = "flag";
45857#endif /* FREECIV_JSON_CONNECTION */
45858 e = 0;
45859 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
45860 if (e) {
45861 log_packet_detailed("'flag' field error detected");
45862 }
45863 }
45864 if (BV_ISSET(fields, 2)) {
45865 log_packet_detailed(" field 'type' has changed");
45866#ifdef FREECIV_JSON_CONNECTION
45867 field_addr.name = "type";
45868#endif /* FREECIV_JSON_CONNECTION */
45869 e = 0;
45870 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
45871 if (e) {
45872 log_packet_detailed("'type' field error detected");
45873 }
45874 }
45875 if (BV_ISSET(fields, 3)) {
45876 log_packet_detailed(" field 'value' has changed");
45877#ifdef FREECIV_JSON_CONNECTION
45878 field_addr.name = "value";
45879#endif /* FREECIV_JSON_CONNECTION */
45880 e = 0;
45881 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
45882 if (e) {
45883 log_packet_detailed("'value' field error detected");
45884 }
45885 }
45886 /* field 4 is folded into the header */
45887
45888 *old = *real_packet;
45889#endif /* FREECIV_DELTA_PROTOCOL */
45890#ifndef FREECIV_DELTA_PROTOCOL
45891#ifdef FREECIV_JSON_CONNECTION
45892 field_addr.name = "unit";
45893#endif /* FREECIV_JSON_CONNECTION */
45894 e = 0;
45895 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
45896 if (e) {
45897 log_packet_detailed("'unit' field error detected");
45898 }
45899#ifdef FREECIV_JSON_CONNECTION
45900 field_addr.name = "flag";
45901#endif /* FREECIV_JSON_CONNECTION */
45902 e = 0;
45903 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
45904 if (e) {
45905 log_packet_detailed("'flag' field error detected");
45906 }
45907#ifdef FREECIV_JSON_CONNECTION
45908 field_addr.name = "type";
45909#endif /* FREECIV_JSON_CONNECTION */
45910 e = 0;
45911 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
45912 if (e) {
45913 log_packet_detailed("'type' field error detected");
45914 }
45915#ifdef FREECIV_JSON_CONNECTION
45916 field_addr.name = "value";
45917#endif /* FREECIV_JSON_CONNECTION */
45918 e = 0;
45919 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
45920 if (e) {
45921 log_packet_detailed("'value' field error detected");
45922 }
45923#ifdef FREECIV_JSON_CONNECTION
45924 field_addr.name = "quiet";
45925#endif /* FREECIV_JSON_CONNECTION */
45926 e = 0;
45927 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
45928 if (e) {
45929 log_packet_detailed("'quiet' field error detected");
45930 }
45931
45932#endif
45934}
45935
45937{
45938 if (!pc->used) {
45939 log_error("WARNING: trying to send data to the closed connection %s",
45941 return -1;
45942 }
45943 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet != NULL, -1,
45944 "Handler for PACKET_RULESET_UNIT_BONUS not installed");
45945 return pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet(pc, packet);
45946}
45947
45949{
45950 conn_list_iterate(dest, pconn) {
45953}
45954
45955#ifdef FREECIV_DELTA_PROTOCOL
45956#define hash_packet_ruleset_unit_flag_100 hash_const
45957
45958#define cmp_packet_ruleset_unit_flag_100 cmp_const
45959
45961#endif /* FREECIV_DELTA_PROTOCOL */
45962
45964{
45965#ifdef FREECIV_DELTA_PROTOCOL
45967 struct packet_ruleset_unit_flag *old;
45968 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_FLAG;
45969#endif /* FREECIV_DELTA_PROTOCOL */
45971#ifdef FREECIV_JSON_CONNECTION
45972 struct plocation field_addr;
45973 {
45977 }
45978#endif /* FREECIV_JSON_CONNECTION */
45979
45980#ifdef FREECIV_DELTA_PROTOCOL
45981#ifdef FREECIV_JSON_CONNECTION
45982 field_addr.name = "fields";
45983#endif /* FREECIV_JSON_CONNECTION */
45984 DIO_BV_GET(&din, &field_addr, fields);
45985
45986#else /* FREECIV_DELTA_PROTOCOL */
45987#ifdef FREECIV_JSON_CONNECTION
45988 field_addr.name = "id";
45989#endif /* FREECIV_JSON_CONNECTION */
45990 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
45992 }
45993#ifdef FREECIV_JSON_CONNECTION
45994 field_addr.name = "name";
45995#endif /* FREECIV_JSON_CONNECTION */
45996 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
45998 }
45999#ifdef FREECIV_JSON_CONNECTION
46000 field_addr.name = "helptxt";
46001#endif /* FREECIV_JSON_CONNECTION */
46002 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
46004 }
46005#endif
46006 log_packet_detailed("packet_ruleset_unit_flag_100: got info about ()");
46007
46008#ifdef FREECIV_DELTA_PROTOCOL
46009 if (NULL == *hash) {
46011 NULL, NULL, NULL, free);
46012 }
46013
46014 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
46015 *real_packet = *old;
46016 } else {
46017 log_packet_detailed(" no old info");
46018 memset(real_packet, 0, sizeof(*real_packet));
46019 }
46020
46021 if (BV_ISSET(fields, 0)) {
46022 log_packet_detailed(" got field 'id'");
46023#ifdef FREECIV_JSON_CONNECTION
46024 field_addr.name = "id";
46025#endif /* FREECIV_JSON_CONNECTION */
46026 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
46028 }
46029 }
46030 if (BV_ISSET(fields, 1)) {
46031 log_packet_detailed(" got field 'name'");
46032#ifdef FREECIV_JSON_CONNECTION
46033 field_addr.name = "name";
46034#endif /* FREECIV_JSON_CONNECTION */
46035 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
46037 }
46038 }
46039 if (BV_ISSET(fields, 2)) {
46040 log_packet_detailed(" got field 'helptxt'");
46041#ifdef FREECIV_JSON_CONNECTION
46042 field_addr.name = "helptxt";
46043#endif /* FREECIV_JSON_CONNECTION */
46044 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
46046 }
46047 }
46048
46049 if (NULL == old) {
46050 old = fc_malloc(sizeof(*old));
46051 *old = *real_packet;
46052 genhash_insert(*hash, old, old);
46053 } else {
46054 *old = *real_packet;
46055 }
46056
46057#endif /* FREECIV_DELTA_PROTOCOL */
46059}
46060
46062{
46063 const struct packet_ruleset_unit_flag *real_packet = packet;
46064 int e;
46065#ifdef FREECIV_DELTA_PROTOCOL
46067 struct packet_ruleset_unit_flag *old;
46068 bool differ;
46069 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_FLAG;
46070#endif /* FREECIV_DELTA_PROTOCOL */
46072#ifdef FREECIV_JSON_CONNECTION
46073 struct plocation field_addr;
46074 {
46078 }
46079#endif /* FREECIV_JSON_CONNECTION */
46080
46081 log_packet_detailed("packet_ruleset_unit_flag_100: sending info about ()");
46082
46083#ifdef FREECIV_DELTA_PROTOCOL
46084 if (NULL == *hash) {
46086 NULL, NULL, NULL, free);
46087 }
46088 BV_CLR_ALL(fields);
46089
46090 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
46091 old = fc_malloc(sizeof(*old));
46092 *old = *real_packet;
46093 genhash_insert(*hash, old, old);
46094 memset(old, 0, sizeof(*old));
46095 }
46096 differ = (old->id != real_packet->id);
46097 if (differ) {
46098 BV_SET(fields, 0);
46099 }
46100
46101 differ = (strcmp(old->name, real_packet->name) != 0);
46102 if (differ) {
46103 BV_SET(fields, 1);
46104 }
46105
46106 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
46107 if (differ) {
46108 BV_SET(fields, 2);
46109 }
46110
46111
46112#ifdef FREECIV_JSON_CONNECTION
46113 field_addr.name = "fields";
46114#endif /* FREECIV_JSON_CONNECTION */
46115 e = 0;
46116 e |= DIO_BV_PUT(&dout, &field_addr, fields);
46117 if (e) {
46118 log_packet_detailed("fields bitvector error detected");
46119 }
46120
46121 if (BV_ISSET(fields, 0)) {
46122 log_packet_detailed(" field 'id' has changed");
46123#ifdef FREECIV_JSON_CONNECTION
46124 field_addr.name = "id";
46125#endif /* FREECIV_JSON_CONNECTION */
46126 e = 0;
46127 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
46128 if (e) {
46129 log_packet_detailed("'id' field error detected");
46130 }
46131 }
46132 if (BV_ISSET(fields, 1)) {
46133 log_packet_detailed(" field 'name' has changed");
46134#ifdef FREECIV_JSON_CONNECTION
46135 field_addr.name = "name";
46136#endif /* FREECIV_JSON_CONNECTION */
46137 e = 0;
46138 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
46139 if (e) {
46140 log_packet_detailed("'name' field error detected");
46141 }
46142 }
46143 if (BV_ISSET(fields, 2)) {
46144 log_packet_detailed(" field 'helptxt' has changed");
46145#ifdef FREECIV_JSON_CONNECTION
46146 field_addr.name = "helptxt";
46147#endif /* FREECIV_JSON_CONNECTION */
46148 e = 0;
46149 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
46150 if (e) {
46151 log_packet_detailed("'helptxt' field error detected");
46152 }
46153 }
46154
46155 *old = *real_packet;
46156#endif /* FREECIV_DELTA_PROTOCOL */
46157#ifndef FREECIV_DELTA_PROTOCOL
46158#ifdef FREECIV_JSON_CONNECTION
46159 field_addr.name = "id";
46160#endif /* FREECIV_JSON_CONNECTION */
46161 e = 0;
46162 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
46163 if (e) {
46164 log_packet_detailed("'id' field error detected");
46165 }
46166#ifdef FREECIV_JSON_CONNECTION
46167 field_addr.name = "name";
46168#endif /* FREECIV_JSON_CONNECTION */
46169 e = 0;
46170 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
46171 if (e) {
46172 log_packet_detailed("'name' field error detected");
46173 }
46174#ifdef FREECIV_JSON_CONNECTION
46175 field_addr.name = "helptxt";
46176#endif /* FREECIV_JSON_CONNECTION */
46177 e = 0;
46178 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
46179 if (e) {
46180 log_packet_detailed("'helptxt' field error detected");
46181 }
46182
46183#endif
46185}
46186
46188{
46189 if (!pc->used) {
46190 log_error("WARNING: trying to send data to the closed connection %s",
46192 return -1;
46193 }
46194 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet != NULL, -1,
46195 "Handler for PACKET_RULESET_UNIT_FLAG not installed");
46196 return pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet(pc, packet);
46197}
46198
46200{
46201 conn_list_iterate(dest, pconn) {
46204}
46205
46206#ifdef FREECIV_DELTA_PROTOCOL
46207#define hash_packet_ruleset_unit_class_flag_100 hash_const
46208
46209#define cmp_packet_ruleset_unit_class_flag_100 cmp_const
46210
46212#endif /* FREECIV_DELTA_PROTOCOL */
46213
46215{
46216#ifdef FREECIV_DELTA_PROTOCOL
46219 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS_FLAG;
46220#endif /* FREECIV_DELTA_PROTOCOL */
46222#ifdef FREECIV_JSON_CONNECTION
46223 struct plocation field_addr;
46224 {
46228 }
46229#endif /* FREECIV_JSON_CONNECTION */
46230
46231#ifdef FREECIV_DELTA_PROTOCOL
46232#ifdef FREECIV_JSON_CONNECTION
46233 field_addr.name = "fields";
46234#endif /* FREECIV_JSON_CONNECTION */
46235 DIO_BV_GET(&din, &field_addr, fields);
46236
46237#else /* FREECIV_DELTA_PROTOCOL */
46238#ifdef FREECIV_JSON_CONNECTION
46239 field_addr.name = "id";
46240#endif /* FREECIV_JSON_CONNECTION */
46241 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
46243 }
46244#ifdef FREECIV_JSON_CONNECTION
46245 field_addr.name = "name";
46246#endif /* FREECIV_JSON_CONNECTION */
46247 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
46249 }
46250#ifdef FREECIV_JSON_CONNECTION
46251 field_addr.name = "helptxt";
46252#endif /* FREECIV_JSON_CONNECTION */
46253 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
46255 }
46256#endif
46257 log_packet_detailed("packet_ruleset_unit_class_flag_100: got info about ()");
46258
46259#ifdef FREECIV_DELTA_PROTOCOL
46260 if (NULL == *hash) {
46262 NULL, NULL, NULL, free);
46263 }
46264
46265 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
46266 *real_packet = *old;
46267 } else {
46268 log_packet_detailed(" no old info");
46269 memset(real_packet, 0, sizeof(*real_packet));
46270 }
46271
46272 if (BV_ISSET(fields, 0)) {
46273 log_packet_detailed(" got field 'id'");
46274#ifdef FREECIV_JSON_CONNECTION
46275 field_addr.name = "id";
46276#endif /* FREECIV_JSON_CONNECTION */
46277 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
46279 }
46280 }
46281 if (BV_ISSET(fields, 1)) {
46282 log_packet_detailed(" got field 'name'");
46283#ifdef FREECIV_JSON_CONNECTION
46284 field_addr.name = "name";
46285#endif /* FREECIV_JSON_CONNECTION */
46286 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
46288 }
46289 }
46290 if (BV_ISSET(fields, 2)) {
46291 log_packet_detailed(" got field 'helptxt'");
46292#ifdef FREECIV_JSON_CONNECTION
46293 field_addr.name = "helptxt";
46294#endif /* FREECIV_JSON_CONNECTION */
46295 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
46297 }
46298 }
46299
46300 if (NULL == old) {
46301 old = fc_malloc(sizeof(*old));
46302 *old = *real_packet;
46303 genhash_insert(*hash, old, old);
46304 } else {
46305 *old = *real_packet;
46306 }
46307
46308#endif /* FREECIV_DELTA_PROTOCOL */
46310}
46311
46313{
46314 const struct packet_ruleset_unit_class_flag *real_packet = packet;
46315 int e;
46316#ifdef FREECIV_DELTA_PROTOCOL
46319 bool differ;
46320 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS_FLAG;
46321#endif /* FREECIV_DELTA_PROTOCOL */
46323#ifdef FREECIV_JSON_CONNECTION
46324 struct plocation field_addr;
46325 {
46329 }
46330#endif /* FREECIV_JSON_CONNECTION */
46331
46332 log_packet_detailed("packet_ruleset_unit_class_flag_100: sending info about ()");
46333
46334#ifdef FREECIV_DELTA_PROTOCOL
46335 if (NULL == *hash) {
46337 NULL, NULL, NULL, free);
46338 }
46339 BV_CLR_ALL(fields);
46340
46341 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
46342 old = fc_malloc(sizeof(*old));
46343 *old = *real_packet;
46344 genhash_insert(*hash, old, old);
46345 memset(old, 0, sizeof(*old));
46346 }
46347 differ = (old->id != real_packet->id);
46348 if (differ) {
46349 BV_SET(fields, 0);
46350 }
46351
46352 differ = (strcmp(old->name, real_packet->name) != 0);
46353 if (differ) {
46354 BV_SET(fields, 1);
46355 }
46356
46357 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
46358 if (differ) {
46359 BV_SET(fields, 2);
46360 }
46361
46362
46363#ifdef FREECIV_JSON_CONNECTION
46364 field_addr.name = "fields";
46365#endif /* FREECIV_JSON_CONNECTION */
46366 e = 0;
46367 e |= DIO_BV_PUT(&dout, &field_addr, fields);
46368 if (e) {
46369 log_packet_detailed("fields bitvector error detected");
46370 }
46371
46372 if (BV_ISSET(fields, 0)) {
46373 log_packet_detailed(" field 'id' has changed");
46374#ifdef FREECIV_JSON_CONNECTION
46375 field_addr.name = "id";
46376#endif /* FREECIV_JSON_CONNECTION */
46377 e = 0;
46378 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
46379 if (e) {
46380 log_packet_detailed("'id' field error detected");
46381 }
46382 }
46383 if (BV_ISSET(fields, 1)) {
46384 log_packet_detailed(" field 'name' has changed");
46385#ifdef FREECIV_JSON_CONNECTION
46386 field_addr.name = "name";
46387#endif /* FREECIV_JSON_CONNECTION */
46388 e = 0;
46389 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
46390 if (e) {
46391 log_packet_detailed("'name' field error detected");
46392 }
46393 }
46394 if (BV_ISSET(fields, 2)) {
46395 log_packet_detailed(" field 'helptxt' has changed");
46396#ifdef FREECIV_JSON_CONNECTION
46397 field_addr.name = "helptxt";
46398#endif /* FREECIV_JSON_CONNECTION */
46399 e = 0;
46400 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
46401 if (e) {
46402 log_packet_detailed("'helptxt' field error detected");
46403 }
46404 }
46405
46406 *old = *real_packet;
46407#endif /* FREECIV_DELTA_PROTOCOL */
46408#ifndef FREECIV_DELTA_PROTOCOL
46409#ifdef FREECIV_JSON_CONNECTION
46410 field_addr.name = "id";
46411#endif /* FREECIV_JSON_CONNECTION */
46412 e = 0;
46413 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
46414 if (e) {
46415 log_packet_detailed("'id' field error detected");
46416 }
46417#ifdef FREECIV_JSON_CONNECTION
46418 field_addr.name = "name";
46419#endif /* FREECIV_JSON_CONNECTION */
46420 e = 0;
46421 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
46422 if (e) {
46423 log_packet_detailed("'name' field error detected");
46424 }
46425#ifdef FREECIV_JSON_CONNECTION
46426 field_addr.name = "helptxt";
46427#endif /* FREECIV_JSON_CONNECTION */
46428 e = 0;
46429 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
46430 if (e) {
46431 log_packet_detailed("'helptxt' field error detected");
46432 }
46433
46434#endif
46436}
46437
46439{
46440 if (!pc->used) {
46441 log_error("WARNING: trying to send data to the closed connection %s",
46443 return -1;
46444 }
46445 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet != NULL, -1,
46446 "Handler for PACKET_RULESET_UNIT_CLASS_FLAG not installed");
46447 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet(pc, packet);
46448}
46449
46456
46457#ifdef FREECIV_DELTA_PROTOCOL
46458#define hash_packet_ruleset_game_100 hash_const
46459
46460#define cmp_packet_ruleset_game_100 cmp_const
46461
46463#endif /* FREECIV_DELTA_PROTOCOL */
46464
46466{
46467#ifdef FREECIV_DELTA_PROTOCOL
46469 struct packet_ruleset_game *old;
46470 struct genhash **hash = pc->phs.received + PACKET_RULESET_GAME;
46471#endif /* FREECIV_DELTA_PROTOCOL */
46473#ifdef FREECIV_JSON_CONNECTION
46474 struct plocation field_addr;
46475 {
46479 }
46480#endif /* FREECIV_JSON_CONNECTION */
46481
46482#ifdef FREECIV_DELTA_PROTOCOL
46483#ifdef FREECIV_JSON_CONNECTION
46484 field_addr.name = "fields";
46485#endif /* FREECIV_JSON_CONNECTION */
46486 DIO_BV_GET(&din, &field_addr, fields);
46487
46488#else /* FREECIV_DELTA_PROTOCOL */
46489#ifdef FREECIV_JSON_CONNECTION
46490 field_addr.name = "default_specialist";
46491#endif /* FREECIV_JSON_CONNECTION */
46492 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
46494 }
46495#ifdef FREECIV_JSON_CONNECTION
46496 field_addr.name = "global_init_techs_count";
46497#endif /* FREECIV_JSON_CONNECTION */
46498 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
46499 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
46500 }
46501#ifdef FREECIV_JSON_CONNECTION
46502 field_addr.name = "global_init_techs";
46503#endif /* FREECIV_JSON_CONNECTION */
46504 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
46505 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": truncation array");
46506 }
46507 {
46508 int i;
46509
46510#ifdef FREECIV_JSON_CONNECTION
46511 /* Enter array. */
46512 field_addr.sub_location = plocation_elem_new(0);
46513#endif /* FREECIV_JSON_CONNECTION */
46514
46515 for (i = 0; i < real_packet->global_init_techs_count; i++) {
46516#ifdef FREECIV_JSON_CONNECTION
46517 field_addr.sub_location->number = i;
46518#endif /* FREECIV_JSON_CONNECTION */
46519
46520 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
46521 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
46522 }
46523 }
46524
46525#ifdef FREECIV_JSON_CONNECTION
46526 /* Exit array. */
46527 FC_FREE(field_addr.sub_location);
46528#endif /* FREECIV_JSON_CONNECTION */
46529 }
46530#ifdef FREECIV_JSON_CONNECTION
46531 field_addr.name = "global_init_buildings_count";
46532#endif /* FREECIV_JSON_CONNECTION */
46533 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
46534 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
46535 }
46536#ifdef FREECIV_JSON_CONNECTION
46537 field_addr.name = "global_init_buildings";
46538#endif /* FREECIV_JSON_CONNECTION */
46539 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
46540 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": truncation array");
46541 }
46542 {
46543 int i;
46544
46545#ifdef FREECIV_JSON_CONNECTION
46546 /* Enter array. */
46547 field_addr.sub_location = plocation_elem_new(0);
46548#endif /* FREECIV_JSON_CONNECTION */
46549
46550 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
46551#ifdef FREECIV_JSON_CONNECTION
46552 field_addr.sub_location->number = i;
46553#endif /* FREECIV_JSON_CONNECTION */
46554
46555 {
46556 int readin;
46557
46558 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
46559 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
46560 }
46561 real_packet->global_init_buildings[i] = readin;
46562 }
46563 }
46564
46565#ifdef FREECIV_JSON_CONNECTION
46566 /* Exit array. */
46567 FC_FREE(field_addr.sub_location);
46568#endif /* FREECIV_JSON_CONNECTION */
46569 }
46570#ifdef FREECIV_JSON_CONNECTION
46571 field_addr.name = "veteran_levels";
46572#endif /* FREECIV_JSON_CONNECTION */
46573 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
46574 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
46575 }
46576#ifdef FREECIV_JSON_CONNECTION
46577 field_addr.name = "veteran_name";
46578#endif /* FREECIV_JSON_CONNECTION */
46579 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46580 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": truncation array");
46581 }
46582 {
46583 int i;
46584
46585#ifdef FREECIV_JSON_CONNECTION
46586 /* Enter array. */
46587 field_addr.sub_location = plocation_elem_new(0);
46588#endif /* FREECIV_JSON_CONNECTION */
46589
46590 for (i = 0; i < real_packet->veteran_levels; i++) {
46591#ifdef FREECIV_JSON_CONNECTION
46592 field_addr.sub_location->number = i;
46593#endif /* FREECIV_JSON_CONNECTION */
46594
46595 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
46596 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
46597 }
46598 }
46599
46600#ifdef FREECIV_JSON_CONNECTION
46601 /* Exit array. */
46602 FC_FREE(field_addr.sub_location);
46603#endif /* FREECIV_JSON_CONNECTION */
46604 }
46605#ifdef FREECIV_JSON_CONNECTION
46606 field_addr.name = "power_fact";
46607#endif /* FREECIV_JSON_CONNECTION */
46608 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46609 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": truncation array");
46610 }
46611 {
46612 int i;
46613
46614#ifdef FREECIV_JSON_CONNECTION
46615 /* Enter array. */
46616 field_addr.sub_location = plocation_elem_new(0);
46617#endif /* FREECIV_JSON_CONNECTION */
46618
46619 for (i = 0; i < real_packet->veteran_levels; i++) {
46620#ifdef FREECIV_JSON_CONNECTION
46621 field_addr.sub_location->number = i;
46622#endif /* FREECIV_JSON_CONNECTION */
46623
46624 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
46625 RECEIVE_PACKET_FIELD_ERROR(power_fact);
46626 }
46627 }
46628
46629#ifdef FREECIV_JSON_CONNECTION
46630 /* Exit array. */
46631 FC_FREE(field_addr.sub_location);
46632#endif /* FREECIV_JSON_CONNECTION */
46633 }
46634#ifdef FREECIV_JSON_CONNECTION
46635 field_addr.name = "move_bonus";
46636#endif /* FREECIV_JSON_CONNECTION */
46637 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46638 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": truncation array");
46639 }
46640 {
46641 int i;
46642
46643#ifdef FREECIV_JSON_CONNECTION
46644 /* Enter array. */
46645 field_addr.sub_location = plocation_elem_new(0);
46646#endif /* FREECIV_JSON_CONNECTION */
46647
46648 for (i = 0; i < real_packet->veteran_levels; i++) {
46649#ifdef FREECIV_JSON_CONNECTION
46650 field_addr.sub_location->number = i;
46651#endif /* FREECIV_JSON_CONNECTION */
46652
46653 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
46654 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
46655 }
46656 }
46657
46658#ifdef FREECIV_JSON_CONNECTION
46659 /* Exit array. */
46660 FC_FREE(field_addr.sub_location);
46661#endif /* FREECIV_JSON_CONNECTION */
46662 }
46663#ifdef FREECIV_JSON_CONNECTION
46664 field_addr.name = "base_raise_chance";
46665#endif /* FREECIV_JSON_CONNECTION */
46666 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46667 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": truncation array");
46668 }
46669 {
46670 int i;
46671
46672#ifdef FREECIV_JSON_CONNECTION
46673 /* Enter array. */
46674 field_addr.sub_location = plocation_elem_new(0);
46675#endif /* FREECIV_JSON_CONNECTION */
46676
46677 for (i = 0; i < real_packet->veteran_levels; i++) {
46678#ifdef FREECIV_JSON_CONNECTION
46679 field_addr.sub_location->number = i;
46680#endif /* FREECIV_JSON_CONNECTION */
46681
46682 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
46683 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
46684 }
46685 }
46686
46687#ifdef FREECIV_JSON_CONNECTION
46688 /* Exit array. */
46689 FC_FREE(field_addr.sub_location);
46690#endif /* FREECIV_JSON_CONNECTION */
46691 }
46692#ifdef FREECIV_JSON_CONNECTION
46693 field_addr.name = "work_raise_chance";
46694#endif /* FREECIV_JSON_CONNECTION */
46695 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46696 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": truncation array");
46697 }
46698 {
46699 int i;
46700
46701#ifdef FREECIV_JSON_CONNECTION
46702 /* Enter array. */
46703 field_addr.sub_location = plocation_elem_new(0);
46704#endif /* FREECIV_JSON_CONNECTION */
46705
46706 for (i = 0; i < real_packet->veteran_levels; i++) {
46707#ifdef FREECIV_JSON_CONNECTION
46708 field_addr.sub_location->number = i;
46709#endif /* FREECIV_JSON_CONNECTION */
46710
46711 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
46712 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
46713 }
46714 }
46715
46716#ifdef FREECIV_JSON_CONNECTION
46717 /* Exit array. */
46718 FC_FREE(field_addr.sub_location);
46719#endif /* FREECIV_JSON_CONNECTION */
46720 }
46721#ifdef FREECIV_JSON_CONNECTION
46722 field_addr.name = "background_red";
46723#endif /* FREECIV_JSON_CONNECTION */
46724 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
46725 RECEIVE_PACKET_FIELD_ERROR(background_red);
46726 }
46727#ifdef FREECIV_JSON_CONNECTION
46728 field_addr.name = "background_green";
46729#endif /* FREECIV_JSON_CONNECTION */
46730 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
46731 RECEIVE_PACKET_FIELD_ERROR(background_green);
46732 }
46733#ifdef FREECIV_JSON_CONNECTION
46734 field_addr.name = "background_blue";
46735#endif /* FREECIV_JSON_CONNECTION */
46736 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
46737 RECEIVE_PACKET_FIELD_ERROR(background_blue);
46738 }
46739#endif
46740 log_packet_detailed("packet_ruleset_game_100: got info about ()");
46741
46742#ifdef FREECIV_DELTA_PROTOCOL
46743 if (NULL == *hash) {
46745 NULL, NULL, NULL, free);
46746 }
46747
46748 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
46749 *real_packet = *old;
46750 } else {
46751 log_packet_detailed(" no old info");
46752 memset(real_packet, 0, sizeof(*real_packet));
46753 }
46754
46755 if (BV_ISSET(fields, 0)) {
46756 log_packet_detailed(" got field 'default_specialist'");
46757#ifdef FREECIV_JSON_CONNECTION
46758 field_addr.name = "default_specialist";
46759#endif /* FREECIV_JSON_CONNECTION */
46760 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
46762 }
46763 }
46764 if (BV_ISSET(fields, 1)) {
46765 log_packet_detailed(" got field 'global_init_techs_count'");
46766#ifdef FREECIV_JSON_CONNECTION
46767 field_addr.name = "global_init_techs_count";
46768#endif /* FREECIV_JSON_CONNECTION */
46769 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
46770 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
46771 }
46772 }
46773 if (BV_ISSET(fields, 2)) {
46774 log_packet_detailed(" got field 'global_init_techs'");
46775#ifdef FREECIV_JSON_CONNECTION
46776 field_addr.name = "global_init_techs";
46777#endif /* FREECIV_JSON_CONNECTION */
46778 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
46779 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": truncation array");
46780 }
46781 {
46782 int i;
46783
46784#ifdef FREECIV_JSON_CONNECTION
46785 /* Enter array. */
46786 field_addr.sub_location = plocation_elem_new(0);
46787#endif /* FREECIV_JSON_CONNECTION */
46788
46789 for (i = 0; i < real_packet->global_init_techs_count; i++) {
46790#ifdef FREECIV_JSON_CONNECTION
46791 field_addr.sub_location->number = i;
46792#endif /* FREECIV_JSON_CONNECTION */
46793
46794 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
46795 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
46796 }
46797 }
46798
46799#ifdef FREECIV_JSON_CONNECTION
46800 /* Exit array. */
46801 FC_FREE(field_addr.sub_location);
46802#endif /* FREECIV_JSON_CONNECTION */
46803 }
46804 }
46805 if (BV_ISSET(fields, 3)) {
46806 log_packet_detailed(" got field 'global_init_buildings_count'");
46807#ifdef FREECIV_JSON_CONNECTION
46808 field_addr.name = "global_init_buildings_count";
46809#endif /* FREECIV_JSON_CONNECTION */
46810 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
46811 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
46812 }
46813 }
46814 if (BV_ISSET(fields, 4)) {
46815 log_packet_detailed(" got field 'global_init_buildings'");
46816#ifdef FREECIV_JSON_CONNECTION
46817 field_addr.name = "global_init_buildings";
46818#endif /* FREECIV_JSON_CONNECTION */
46819 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
46820 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": truncation array");
46821 }
46822 {
46823 int i;
46824
46825#ifdef FREECIV_JSON_CONNECTION
46826 /* Enter array. */
46827 field_addr.sub_location = plocation_elem_new(0);
46828#endif /* FREECIV_JSON_CONNECTION */
46829
46830 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
46831#ifdef FREECIV_JSON_CONNECTION
46832 field_addr.sub_location->number = i;
46833#endif /* FREECIV_JSON_CONNECTION */
46834
46835 {
46836 int readin;
46837
46838 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
46839 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
46840 }
46841 real_packet->global_init_buildings[i] = readin;
46842 }
46843 }
46844
46845#ifdef FREECIV_JSON_CONNECTION
46846 /* Exit array. */
46847 FC_FREE(field_addr.sub_location);
46848#endif /* FREECIV_JSON_CONNECTION */
46849 }
46850 }
46851 if (BV_ISSET(fields, 5)) {
46852 log_packet_detailed(" got field 'veteran_levels'");
46853#ifdef FREECIV_JSON_CONNECTION
46854 field_addr.name = "veteran_levels";
46855#endif /* FREECIV_JSON_CONNECTION */
46856 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
46857 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
46858 }
46859 }
46860 if (BV_ISSET(fields, 6)) {
46861 log_packet_detailed(" got field 'veteran_name'");
46862#ifdef FREECIV_JSON_CONNECTION
46863 field_addr.name = "veteran_name";
46864#endif /* FREECIV_JSON_CONNECTION */
46865 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46866 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": truncation array");
46867 }
46868 {
46869 int i;
46870
46871#ifdef FREECIV_JSON_CONNECTION
46872 /* Enter array. */
46873 field_addr.sub_location = plocation_elem_new(0);
46874#endif /* FREECIV_JSON_CONNECTION */
46875
46876 for (i = 0; i < real_packet->veteran_levels; i++) {
46877#ifdef FREECIV_JSON_CONNECTION
46878 field_addr.sub_location->number = i;
46879#endif /* FREECIV_JSON_CONNECTION */
46880
46881 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
46882 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
46883 }
46884 }
46885
46886#ifdef FREECIV_JSON_CONNECTION
46887 /* Exit array. */
46888 FC_FREE(field_addr.sub_location);
46889#endif /* FREECIV_JSON_CONNECTION */
46890 }
46891 }
46892 if (BV_ISSET(fields, 7)) {
46893 log_packet_detailed(" got field 'power_fact'");
46894#ifdef FREECIV_JSON_CONNECTION
46895 field_addr.name = "power_fact";
46896#endif /* FREECIV_JSON_CONNECTION */
46897 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46898 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": truncation array");
46899 }
46900 {
46901 int i;
46902
46903#ifdef FREECIV_JSON_CONNECTION
46904 /* Enter array. */
46905 field_addr.sub_location = plocation_elem_new(0);
46906#endif /* FREECIV_JSON_CONNECTION */
46907
46908 for (i = 0; i < real_packet->veteran_levels; i++) {
46909#ifdef FREECIV_JSON_CONNECTION
46910 field_addr.sub_location->number = i;
46911#endif /* FREECIV_JSON_CONNECTION */
46912
46913 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
46914 RECEIVE_PACKET_FIELD_ERROR(power_fact);
46915 }
46916 }
46917
46918#ifdef FREECIV_JSON_CONNECTION
46919 /* Exit array. */
46920 FC_FREE(field_addr.sub_location);
46921#endif /* FREECIV_JSON_CONNECTION */
46922 }
46923 }
46924 if (BV_ISSET(fields, 8)) {
46925 log_packet_detailed(" got field 'move_bonus'");
46926#ifdef FREECIV_JSON_CONNECTION
46927 field_addr.name = "move_bonus";
46928#endif /* FREECIV_JSON_CONNECTION */
46929 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46930 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": truncation array");
46931 }
46932 {
46933 int i;
46934
46935#ifdef FREECIV_JSON_CONNECTION
46936 /* Enter array. */
46937 field_addr.sub_location = plocation_elem_new(0);
46938#endif /* FREECIV_JSON_CONNECTION */
46939
46940 for (i = 0; i < real_packet->veteran_levels; i++) {
46941#ifdef FREECIV_JSON_CONNECTION
46942 field_addr.sub_location->number = i;
46943#endif /* FREECIV_JSON_CONNECTION */
46944
46945 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
46946 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
46947 }
46948 }
46949
46950#ifdef FREECIV_JSON_CONNECTION
46951 /* Exit array. */
46952 FC_FREE(field_addr.sub_location);
46953#endif /* FREECIV_JSON_CONNECTION */
46954 }
46955 }
46956 if (BV_ISSET(fields, 9)) {
46957 log_packet_detailed(" got field 'base_raise_chance'");
46958#ifdef FREECIV_JSON_CONNECTION
46959 field_addr.name = "base_raise_chance";
46960#endif /* FREECIV_JSON_CONNECTION */
46961 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46962 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": truncation array");
46963 }
46964 {
46965 int i;
46966
46967#ifdef FREECIV_JSON_CONNECTION
46968 /* Enter array. */
46969 field_addr.sub_location = plocation_elem_new(0);
46970#endif /* FREECIV_JSON_CONNECTION */
46971
46972 for (i = 0; i < real_packet->veteran_levels; i++) {
46973#ifdef FREECIV_JSON_CONNECTION
46974 field_addr.sub_location->number = i;
46975#endif /* FREECIV_JSON_CONNECTION */
46976
46977 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
46978 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
46979 }
46980 }
46981
46982#ifdef FREECIV_JSON_CONNECTION
46983 /* Exit array. */
46984 FC_FREE(field_addr.sub_location);
46985#endif /* FREECIV_JSON_CONNECTION */
46986 }
46987 }
46988 if (BV_ISSET(fields, 10)) {
46989 log_packet_detailed(" got field 'work_raise_chance'");
46990#ifdef FREECIV_JSON_CONNECTION
46991 field_addr.name = "work_raise_chance";
46992#endif /* FREECIV_JSON_CONNECTION */
46993 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46994 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": truncation array");
46995 }
46996 {
46997 int i;
46998
46999#ifdef FREECIV_JSON_CONNECTION
47000 /* Enter array. */
47001 field_addr.sub_location = plocation_elem_new(0);
47002#endif /* FREECIV_JSON_CONNECTION */
47003
47004 for (i = 0; i < real_packet->veteran_levels; i++) {
47005#ifdef FREECIV_JSON_CONNECTION
47006 field_addr.sub_location->number = i;
47007#endif /* FREECIV_JSON_CONNECTION */
47008
47009 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
47010 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
47011 }
47012 }
47013
47014#ifdef FREECIV_JSON_CONNECTION
47015 /* Exit array. */
47016 FC_FREE(field_addr.sub_location);
47017#endif /* FREECIV_JSON_CONNECTION */
47018 }
47019 }
47020 if (BV_ISSET(fields, 11)) {
47021 log_packet_detailed(" got field 'background_red'");
47022#ifdef FREECIV_JSON_CONNECTION
47023 field_addr.name = "background_red";
47024#endif /* FREECIV_JSON_CONNECTION */
47025 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
47026 RECEIVE_PACKET_FIELD_ERROR(background_red);
47027 }
47028 }
47029 if (BV_ISSET(fields, 12)) {
47030 log_packet_detailed(" got field 'background_green'");
47031#ifdef FREECIV_JSON_CONNECTION
47032 field_addr.name = "background_green";
47033#endif /* FREECIV_JSON_CONNECTION */
47034 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
47035 RECEIVE_PACKET_FIELD_ERROR(background_green);
47036 }
47037 }
47038 if (BV_ISSET(fields, 13)) {
47039 log_packet_detailed(" got field 'background_blue'");
47040#ifdef FREECIV_JSON_CONNECTION
47041 field_addr.name = "background_blue";
47042#endif /* FREECIV_JSON_CONNECTION */
47043 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
47044 RECEIVE_PACKET_FIELD_ERROR(background_blue);
47045 }
47046 }
47047
47048 if (NULL == old) {
47049 old = fc_malloc(sizeof(*old));
47050 *old = *real_packet;
47051 genhash_insert(*hash, old, old);
47052 } else {
47053 *old = *real_packet;
47054 }
47055
47056#endif /* FREECIV_DELTA_PROTOCOL */
47058}
47059
47060static int send_packet_ruleset_game_100(struct connection *pc, const struct packet_ruleset_game *packet)
47061{
47062 const struct packet_ruleset_game *real_packet = packet;
47063 int e;
47064#ifdef FREECIV_DELTA_PROTOCOL
47066 struct packet_ruleset_game *old;
47067 bool differ;
47068 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GAME;
47069#endif /* FREECIV_DELTA_PROTOCOL */
47071#ifdef FREECIV_JSON_CONNECTION
47072 struct plocation field_addr;
47073 {
47077 }
47078#endif /* FREECIV_JSON_CONNECTION */
47079
47080 log_packet_detailed("packet_ruleset_game_100: sending info about ()");
47081
47082#ifdef FREECIV_DELTA_PROTOCOL
47083 if (NULL == *hash) {
47085 NULL, NULL, NULL, free);
47086 }
47087 BV_CLR_ALL(fields);
47088
47089 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
47090 old = fc_malloc(sizeof(*old));
47091 *old = *real_packet;
47092 genhash_insert(*hash, old, old);
47093 memset(old, 0, sizeof(*old));
47094 }
47095 differ = (old->default_specialist != real_packet->default_specialist);
47096 if (differ) {
47097 BV_SET(fields, 0);
47098 }
47099
47100 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
47101 if (differ) {
47102 BV_SET(fields, 1);
47103 }
47104
47105 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
47106 if (!differ) {
47107 int i;
47108
47109 for (i = 0; i < real_packet->global_init_techs_count; i++) {
47110 differ = (old->global_init_techs[i] != real_packet->global_init_techs[i]);
47111 if (differ) {
47112 break;
47113 }
47114 }
47115 }
47116 if (differ) {
47117 BV_SET(fields, 2);
47118 }
47119
47120 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
47121 if (differ) {
47122 BV_SET(fields, 3);
47123 }
47124
47125 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
47126 if (!differ) {
47127 int i;
47128
47129 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
47130 differ = (old->global_init_buildings[i] != real_packet->global_init_buildings[i]);
47131 if (differ) {
47132 break;
47133 }
47134 }
47135 }
47136 if (differ) {
47137 BV_SET(fields, 4);
47138 }
47139
47140 differ = (old->veteran_levels != real_packet->veteran_levels);
47141 if (differ) {
47142 BV_SET(fields, 5);
47143 }
47144
47145 differ = (old->veteran_levels != real_packet->veteran_levels);
47146 if (!differ) {
47147 int i;
47148
47149 for (i = 0; i < real_packet->veteran_levels; i++) {
47150 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
47151 if (differ) {
47152 break;
47153 }
47154 }
47155 }
47156 if (differ) {
47157 BV_SET(fields, 6);
47158 }
47159
47160 differ = (old->veteran_levels != real_packet->veteran_levels);
47161 if (!differ) {
47162 int i;
47163
47164 for (i = 0; i < real_packet->veteran_levels; i++) {
47165 differ = (old->power_fact[i] != real_packet->power_fact[i]);
47166 if (differ) {
47167 break;
47168 }
47169 }
47170 }
47171 if (differ) {
47172 BV_SET(fields, 7);
47173 }
47174
47175 differ = (old->veteran_levels != real_packet->veteran_levels);
47176 if (!differ) {
47177 int i;
47178
47179 for (i = 0; i < real_packet->veteran_levels; i++) {
47180 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
47181 if (differ) {
47182 break;
47183 }
47184 }
47185 }
47186 if (differ) {
47187 BV_SET(fields, 8);
47188 }
47189
47190 differ = (old->veteran_levels != real_packet->veteran_levels);
47191 if (!differ) {
47192 int i;
47193
47194 for (i = 0; i < real_packet->veteran_levels; i++) {
47195 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
47196 if (differ) {
47197 break;
47198 }
47199 }
47200 }
47201 if (differ) {
47202 BV_SET(fields, 9);
47203 }
47204
47205 differ = (old->veteran_levels != real_packet->veteran_levels);
47206 if (!differ) {
47207 int i;
47208
47209 for (i = 0; i < real_packet->veteran_levels; i++) {
47210 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
47211 if (differ) {
47212 break;
47213 }
47214 }
47215 }
47216 if (differ) {
47217 BV_SET(fields, 10);
47218 }
47219
47220 differ = (old->background_red != real_packet->background_red);
47221 if (differ) {
47222 BV_SET(fields, 11);
47223 }
47224
47225 differ = (old->background_green != real_packet->background_green);
47226 if (differ) {
47227 BV_SET(fields, 12);
47228 }
47229
47230 differ = (old->background_blue != real_packet->background_blue);
47231 if (differ) {
47232 BV_SET(fields, 13);
47233 }
47234
47235
47236#ifdef FREECIV_JSON_CONNECTION
47237 field_addr.name = "fields";
47238#endif /* FREECIV_JSON_CONNECTION */
47239 e = 0;
47240 e |= DIO_BV_PUT(&dout, &field_addr, fields);
47241 if (e) {
47242 log_packet_detailed("fields bitvector error detected");
47243 }
47244
47245 if (BV_ISSET(fields, 0)) {
47246 log_packet_detailed(" field 'default_specialist' has changed");
47247#ifdef FREECIV_JSON_CONNECTION
47248 field_addr.name = "default_specialist";
47249#endif /* FREECIV_JSON_CONNECTION */
47250 e = 0;
47251 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
47252 if (e) {
47253 log_packet_detailed("'default_specialist' field error detected");
47254 }
47255 }
47256 if (BV_ISSET(fields, 1)) {
47257 log_packet_detailed(" field 'global_init_techs_count' has changed");
47258#ifdef FREECIV_JSON_CONNECTION
47259 field_addr.name = "global_init_techs_count";
47260#endif /* FREECIV_JSON_CONNECTION */
47261 e = 0;
47262 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
47263 if (e) {
47264 log_packet_detailed("'global_init_techs_count' field error detected");
47265 }
47266 }
47267 if (BV_ISSET(fields, 2)) {
47268 log_packet_detailed(" field 'global_init_techs' has changed");
47269#ifdef FREECIV_JSON_CONNECTION
47270 field_addr.name = "global_init_techs";
47271#endif /* FREECIV_JSON_CONNECTION */
47272 e = 0;
47273 {
47274 int i;
47275
47276#ifdef FREECIV_JSON_CONNECTION
47277 /* Create the array. */
47278 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
47279
47280 /* Enter the array. */
47281 field_addr.sub_location = plocation_elem_new(0);
47282#endif /* FREECIV_JSON_CONNECTION */
47283
47284 for (i = 0; i < real_packet->global_init_techs_count; i++) {
47285#ifdef FREECIV_JSON_CONNECTION
47286 /* Next array element. */
47287 field_addr.sub_location->number = i;
47288#endif /* FREECIV_JSON_CONNECTION */
47289
47290 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
47291 }
47292
47293#ifdef FREECIV_JSON_CONNECTION
47294 /* Exit array. */
47295 FC_FREE(field_addr.sub_location);
47296#endif /* FREECIV_JSON_CONNECTION */
47297 }
47298 if (e) {
47299 log_packet_detailed("'global_init_techs' field error detected");
47300 }
47301 }
47302 if (BV_ISSET(fields, 3)) {
47303 log_packet_detailed(" field 'global_init_buildings_count' has changed");
47304#ifdef FREECIV_JSON_CONNECTION
47305 field_addr.name = "global_init_buildings_count";
47306#endif /* FREECIV_JSON_CONNECTION */
47307 e = 0;
47308 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
47309 if (e) {
47310 log_packet_detailed("'global_init_buildings_count' field error detected");
47311 }
47312 }
47313 if (BV_ISSET(fields, 4)) {
47314 log_packet_detailed(" field 'global_init_buildings' has changed");
47315#ifdef FREECIV_JSON_CONNECTION
47316 field_addr.name = "global_init_buildings";
47317#endif /* FREECIV_JSON_CONNECTION */
47318 e = 0;
47319 {
47320 int i;
47321
47322#ifdef FREECIV_JSON_CONNECTION
47323 /* Create the array. */
47324 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
47325
47326 /* Enter the array. */
47327 field_addr.sub_location = plocation_elem_new(0);
47328#endif /* FREECIV_JSON_CONNECTION */
47329
47330 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
47331#ifdef FREECIV_JSON_CONNECTION
47332 /* Next array element. */
47333 field_addr.sub_location->number = i;
47334#endif /* FREECIV_JSON_CONNECTION */
47335
47336 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
47337 }
47338
47339#ifdef FREECIV_JSON_CONNECTION
47340 /* Exit array. */
47341 FC_FREE(field_addr.sub_location);
47342#endif /* FREECIV_JSON_CONNECTION */
47343 }
47344 if (e) {
47345 log_packet_detailed("'global_init_buildings' field error detected");
47346 }
47347 }
47348 if (BV_ISSET(fields, 5)) {
47349 log_packet_detailed(" field 'veteran_levels' has changed");
47350#ifdef FREECIV_JSON_CONNECTION
47351 field_addr.name = "veteran_levels";
47352#endif /* FREECIV_JSON_CONNECTION */
47353 e = 0;
47354 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
47355 if (e) {
47356 log_packet_detailed("'veteran_levels' field error detected");
47357 }
47358 }
47359 if (BV_ISSET(fields, 6)) {
47360 log_packet_detailed(" field 'veteran_name' has changed");
47361#ifdef FREECIV_JSON_CONNECTION
47362 field_addr.name = "veteran_name";
47363#endif /* FREECIV_JSON_CONNECTION */
47364 e = 0;
47365 {
47366 int i;
47367
47368#ifdef FREECIV_JSON_CONNECTION
47369 /* Create the array. */
47370 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47371
47372 /* Enter the array. */
47373 field_addr.sub_location = plocation_elem_new(0);
47374#endif /* FREECIV_JSON_CONNECTION */
47375
47376 for (i = 0; i < real_packet->veteran_levels; i++) {
47377#ifdef FREECIV_JSON_CONNECTION
47378 /* Next array element. */
47379 field_addr.sub_location->number = i;
47380#endif /* FREECIV_JSON_CONNECTION */
47381
47382 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
47383 }
47384
47385#ifdef FREECIV_JSON_CONNECTION
47386 /* Exit array. */
47387 FC_FREE(field_addr.sub_location);
47388#endif /* FREECIV_JSON_CONNECTION */
47389 }
47390 if (e) {
47391 log_packet_detailed("'veteran_name' field error detected");
47392 }
47393 }
47394 if (BV_ISSET(fields, 7)) {
47395 log_packet_detailed(" field 'power_fact' has changed");
47396#ifdef FREECIV_JSON_CONNECTION
47397 field_addr.name = "power_fact";
47398#endif /* FREECIV_JSON_CONNECTION */
47399 e = 0;
47400 {
47401 int i;
47402
47403#ifdef FREECIV_JSON_CONNECTION
47404 /* Create the array. */
47405 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47406
47407 /* Enter the array. */
47408 field_addr.sub_location = plocation_elem_new(0);
47409#endif /* FREECIV_JSON_CONNECTION */
47410
47411 for (i = 0; i < real_packet->veteran_levels; i++) {
47412#ifdef FREECIV_JSON_CONNECTION
47413 /* Next array element. */
47414 field_addr.sub_location->number = i;
47415#endif /* FREECIV_JSON_CONNECTION */
47416
47417 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
47418 }
47419
47420#ifdef FREECIV_JSON_CONNECTION
47421 /* Exit array. */
47422 FC_FREE(field_addr.sub_location);
47423#endif /* FREECIV_JSON_CONNECTION */
47424 }
47425 if (e) {
47426 log_packet_detailed("'power_fact' field error detected");
47427 }
47428 }
47429 if (BV_ISSET(fields, 8)) {
47430 log_packet_detailed(" field 'move_bonus' has changed");
47431#ifdef FREECIV_JSON_CONNECTION
47432 field_addr.name = "move_bonus";
47433#endif /* FREECIV_JSON_CONNECTION */
47434 e = 0;
47435 {
47436 int i;
47437
47438#ifdef FREECIV_JSON_CONNECTION
47439 /* Create the array. */
47440 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47441
47442 /* Enter the array. */
47443 field_addr.sub_location = plocation_elem_new(0);
47444#endif /* FREECIV_JSON_CONNECTION */
47445
47446 for (i = 0; i < real_packet->veteran_levels; i++) {
47447#ifdef FREECIV_JSON_CONNECTION
47448 /* Next array element. */
47449 field_addr.sub_location->number = i;
47450#endif /* FREECIV_JSON_CONNECTION */
47451
47452 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
47453 }
47454
47455#ifdef FREECIV_JSON_CONNECTION
47456 /* Exit array. */
47457 FC_FREE(field_addr.sub_location);
47458#endif /* FREECIV_JSON_CONNECTION */
47459 }
47460 if (e) {
47461 log_packet_detailed("'move_bonus' field error detected");
47462 }
47463 }
47464 if (BV_ISSET(fields, 9)) {
47465 log_packet_detailed(" field 'base_raise_chance' has changed");
47466#ifdef FREECIV_JSON_CONNECTION
47467 field_addr.name = "base_raise_chance";
47468#endif /* FREECIV_JSON_CONNECTION */
47469 e = 0;
47470 {
47471 int i;
47472
47473#ifdef FREECIV_JSON_CONNECTION
47474 /* Create the array. */
47475 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47476
47477 /* Enter the array. */
47478 field_addr.sub_location = plocation_elem_new(0);
47479#endif /* FREECIV_JSON_CONNECTION */
47480
47481 for (i = 0; i < real_packet->veteran_levels; i++) {
47482#ifdef FREECIV_JSON_CONNECTION
47483 /* Next array element. */
47484 field_addr.sub_location->number = i;
47485#endif /* FREECIV_JSON_CONNECTION */
47486
47487 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
47488 }
47489
47490#ifdef FREECIV_JSON_CONNECTION
47491 /* Exit array. */
47492 FC_FREE(field_addr.sub_location);
47493#endif /* FREECIV_JSON_CONNECTION */
47494 }
47495 if (e) {
47496 log_packet_detailed("'base_raise_chance' field error detected");
47497 }
47498 }
47499 if (BV_ISSET(fields, 10)) {
47500 log_packet_detailed(" field 'work_raise_chance' has changed");
47501#ifdef FREECIV_JSON_CONNECTION
47502 field_addr.name = "work_raise_chance";
47503#endif /* FREECIV_JSON_CONNECTION */
47504 e = 0;
47505 {
47506 int i;
47507
47508#ifdef FREECIV_JSON_CONNECTION
47509 /* Create the array. */
47510 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47511
47512 /* Enter the array. */
47513 field_addr.sub_location = plocation_elem_new(0);
47514#endif /* FREECIV_JSON_CONNECTION */
47515
47516 for (i = 0; i < real_packet->veteran_levels; i++) {
47517#ifdef FREECIV_JSON_CONNECTION
47518 /* Next array element. */
47519 field_addr.sub_location->number = i;
47520#endif /* FREECIV_JSON_CONNECTION */
47521
47522 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
47523 }
47524
47525#ifdef FREECIV_JSON_CONNECTION
47526 /* Exit array. */
47527 FC_FREE(field_addr.sub_location);
47528#endif /* FREECIV_JSON_CONNECTION */
47529 }
47530 if (e) {
47531 log_packet_detailed("'work_raise_chance' field error detected");
47532 }
47533 }
47534 if (BV_ISSET(fields, 11)) {
47535 log_packet_detailed(" field 'background_red' has changed");
47536#ifdef FREECIV_JSON_CONNECTION
47537 field_addr.name = "background_red";
47538#endif /* FREECIV_JSON_CONNECTION */
47539 e = 0;
47540 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
47541 if (e) {
47542 log_packet_detailed("'background_red' field error detected");
47543 }
47544 }
47545 if (BV_ISSET(fields, 12)) {
47546 log_packet_detailed(" field 'background_green' has changed");
47547#ifdef FREECIV_JSON_CONNECTION
47548 field_addr.name = "background_green";
47549#endif /* FREECIV_JSON_CONNECTION */
47550 e = 0;
47551 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
47552 if (e) {
47553 log_packet_detailed("'background_green' field error detected");
47554 }
47555 }
47556 if (BV_ISSET(fields, 13)) {
47557 log_packet_detailed(" field 'background_blue' has changed");
47558#ifdef FREECIV_JSON_CONNECTION
47559 field_addr.name = "background_blue";
47560#endif /* FREECIV_JSON_CONNECTION */
47561 e = 0;
47562 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
47563 if (e) {
47564 log_packet_detailed("'background_blue' field error detected");
47565 }
47566 }
47567
47568 *old = *real_packet;
47569#endif /* FREECIV_DELTA_PROTOCOL */
47570#ifndef FREECIV_DELTA_PROTOCOL
47571#ifdef FREECIV_JSON_CONNECTION
47572 field_addr.name = "default_specialist";
47573#endif /* FREECIV_JSON_CONNECTION */
47574 e = 0;
47575 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
47576 if (e) {
47577 log_packet_detailed("'default_specialist' field error detected");
47578 }
47579#ifdef FREECIV_JSON_CONNECTION
47580 field_addr.name = "global_init_techs_count";
47581#endif /* FREECIV_JSON_CONNECTION */
47582 e = 0;
47583 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
47584 if (e) {
47585 log_packet_detailed("'global_init_techs_count' field error detected");
47586 }
47587#ifdef FREECIV_JSON_CONNECTION
47588 field_addr.name = "global_init_techs";
47589#endif /* FREECIV_JSON_CONNECTION */
47590 e = 0;
47591 {
47592 int i;
47593
47594#ifdef FREECIV_JSON_CONNECTION
47595 /* Create the array. */
47596 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
47597
47598 /* Enter the array. */
47599 field_addr.sub_location = plocation_elem_new(0);
47600#endif /* FREECIV_JSON_CONNECTION */
47601
47602 for (i = 0; i < real_packet->global_init_techs_count; i++) {
47603#ifdef FREECIV_JSON_CONNECTION
47604 /* Next array element. */
47605 field_addr.sub_location->number = i;
47606#endif /* FREECIV_JSON_CONNECTION */
47607
47608 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
47609 }
47610
47611#ifdef FREECIV_JSON_CONNECTION
47612 /* Exit array. */
47613 FC_FREE(field_addr.sub_location);
47614#endif /* FREECIV_JSON_CONNECTION */
47615 }
47616 if (e) {
47617 log_packet_detailed("'global_init_techs' field error detected");
47618 }
47619#ifdef FREECIV_JSON_CONNECTION
47620 field_addr.name = "global_init_buildings_count";
47621#endif /* FREECIV_JSON_CONNECTION */
47622 e = 0;
47623 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
47624 if (e) {
47625 log_packet_detailed("'global_init_buildings_count' field error detected");
47626 }
47627#ifdef FREECIV_JSON_CONNECTION
47628 field_addr.name = "global_init_buildings";
47629#endif /* FREECIV_JSON_CONNECTION */
47630 e = 0;
47631 {
47632 int i;
47633
47634#ifdef FREECIV_JSON_CONNECTION
47635 /* Create the array. */
47636 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
47637
47638 /* Enter the array. */
47639 field_addr.sub_location = plocation_elem_new(0);
47640#endif /* FREECIV_JSON_CONNECTION */
47641
47642 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
47643#ifdef FREECIV_JSON_CONNECTION
47644 /* Next array element. */
47645 field_addr.sub_location->number = i;
47646#endif /* FREECIV_JSON_CONNECTION */
47647
47648 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
47649 }
47650
47651#ifdef FREECIV_JSON_CONNECTION
47652 /* Exit array. */
47653 FC_FREE(field_addr.sub_location);
47654#endif /* FREECIV_JSON_CONNECTION */
47655 }
47656 if (e) {
47657 log_packet_detailed("'global_init_buildings' field error detected");
47658 }
47659#ifdef FREECIV_JSON_CONNECTION
47660 field_addr.name = "veteran_levels";
47661#endif /* FREECIV_JSON_CONNECTION */
47662 e = 0;
47663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
47664 if (e) {
47665 log_packet_detailed("'veteran_levels' field error detected");
47666 }
47667#ifdef FREECIV_JSON_CONNECTION
47668 field_addr.name = "veteran_name";
47669#endif /* FREECIV_JSON_CONNECTION */
47670 e = 0;
47671 {
47672 int i;
47673
47674#ifdef FREECIV_JSON_CONNECTION
47675 /* Create the array. */
47676 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47677
47678 /* Enter the array. */
47679 field_addr.sub_location = plocation_elem_new(0);
47680#endif /* FREECIV_JSON_CONNECTION */
47681
47682 for (i = 0; i < real_packet->veteran_levels; i++) {
47683#ifdef FREECIV_JSON_CONNECTION
47684 /* Next array element. */
47685 field_addr.sub_location->number = i;
47686#endif /* FREECIV_JSON_CONNECTION */
47687
47688 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
47689 }
47690
47691#ifdef FREECIV_JSON_CONNECTION
47692 /* Exit array. */
47693 FC_FREE(field_addr.sub_location);
47694#endif /* FREECIV_JSON_CONNECTION */
47695 }
47696 if (e) {
47697 log_packet_detailed("'veteran_name' field error detected");
47698 }
47699#ifdef FREECIV_JSON_CONNECTION
47700 field_addr.name = "power_fact";
47701#endif /* FREECIV_JSON_CONNECTION */
47702 e = 0;
47703 {
47704 int i;
47705
47706#ifdef FREECIV_JSON_CONNECTION
47707 /* Create the array. */
47708 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47709
47710 /* Enter the array. */
47711 field_addr.sub_location = plocation_elem_new(0);
47712#endif /* FREECIV_JSON_CONNECTION */
47713
47714 for (i = 0; i < real_packet->veteran_levels; i++) {
47715#ifdef FREECIV_JSON_CONNECTION
47716 /* Next array element. */
47717 field_addr.sub_location->number = i;
47718#endif /* FREECIV_JSON_CONNECTION */
47719
47720 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
47721 }
47722
47723#ifdef FREECIV_JSON_CONNECTION
47724 /* Exit array. */
47725 FC_FREE(field_addr.sub_location);
47726#endif /* FREECIV_JSON_CONNECTION */
47727 }
47728 if (e) {
47729 log_packet_detailed("'power_fact' field error detected");
47730 }
47731#ifdef FREECIV_JSON_CONNECTION
47732 field_addr.name = "move_bonus";
47733#endif /* FREECIV_JSON_CONNECTION */
47734 e = 0;
47735 {
47736 int i;
47737
47738#ifdef FREECIV_JSON_CONNECTION
47739 /* Create the array. */
47740 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47741
47742 /* Enter the array. */
47743 field_addr.sub_location = plocation_elem_new(0);
47744#endif /* FREECIV_JSON_CONNECTION */
47745
47746 for (i = 0; i < real_packet->veteran_levels; i++) {
47747#ifdef FREECIV_JSON_CONNECTION
47748 /* Next array element. */
47749 field_addr.sub_location->number = i;
47750#endif /* FREECIV_JSON_CONNECTION */
47751
47752 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
47753 }
47754
47755#ifdef FREECIV_JSON_CONNECTION
47756 /* Exit array. */
47757 FC_FREE(field_addr.sub_location);
47758#endif /* FREECIV_JSON_CONNECTION */
47759 }
47760 if (e) {
47761 log_packet_detailed("'move_bonus' field error detected");
47762 }
47763#ifdef FREECIV_JSON_CONNECTION
47764 field_addr.name = "base_raise_chance";
47765#endif /* FREECIV_JSON_CONNECTION */
47766 e = 0;
47767 {
47768 int i;
47769
47770#ifdef FREECIV_JSON_CONNECTION
47771 /* Create the array. */
47772 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47773
47774 /* Enter the array. */
47775 field_addr.sub_location = plocation_elem_new(0);
47776#endif /* FREECIV_JSON_CONNECTION */
47777
47778 for (i = 0; i < real_packet->veteran_levels; i++) {
47779#ifdef FREECIV_JSON_CONNECTION
47780 /* Next array element. */
47781 field_addr.sub_location->number = i;
47782#endif /* FREECIV_JSON_CONNECTION */
47783
47784 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
47785 }
47786
47787#ifdef FREECIV_JSON_CONNECTION
47788 /* Exit array. */
47789 FC_FREE(field_addr.sub_location);
47790#endif /* FREECIV_JSON_CONNECTION */
47791 }
47792 if (e) {
47793 log_packet_detailed("'base_raise_chance' field error detected");
47794 }
47795#ifdef FREECIV_JSON_CONNECTION
47796 field_addr.name = "work_raise_chance";
47797#endif /* FREECIV_JSON_CONNECTION */
47798 e = 0;
47799 {
47800 int i;
47801
47802#ifdef FREECIV_JSON_CONNECTION
47803 /* Create the array. */
47804 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
47805
47806 /* Enter the array. */
47807 field_addr.sub_location = plocation_elem_new(0);
47808#endif /* FREECIV_JSON_CONNECTION */
47809
47810 for (i = 0; i < real_packet->veteran_levels; i++) {
47811#ifdef FREECIV_JSON_CONNECTION
47812 /* Next array element. */
47813 field_addr.sub_location->number = i;
47814#endif /* FREECIV_JSON_CONNECTION */
47815
47816 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
47817 }
47818
47819#ifdef FREECIV_JSON_CONNECTION
47820 /* Exit array. */
47821 FC_FREE(field_addr.sub_location);
47822#endif /* FREECIV_JSON_CONNECTION */
47823 }
47824 if (e) {
47825 log_packet_detailed("'work_raise_chance' field error detected");
47826 }
47827#ifdef FREECIV_JSON_CONNECTION
47828 field_addr.name = "background_red";
47829#endif /* FREECIV_JSON_CONNECTION */
47830 e = 0;
47831 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
47832 if (e) {
47833 log_packet_detailed("'background_red' field error detected");
47834 }
47835#ifdef FREECIV_JSON_CONNECTION
47836 field_addr.name = "background_green";
47837#endif /* FREECIV_JSON_CONNECTION */
47838 e = 0;
47839 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
47840 if (e) {
47841 log_packet_detailed("'background_green' field error detected");
47842 }
47843#ifdef FREECIV_JSON_CONNECTION
47844 field_addr.name = "background_blue";
47845#endif /* FREECIV_JSON_CONNECTION */
47846 e = 0;
47847 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
47848 if (e) {
47849 log_packet_detailed("'background_blue' field error detected");
47850 }
47851
47852#endif
47854}
47855
47857{
47858 if (!pc->used) {
47859 log_error("WARNING: trying to send data to the closed connection %s",
47861 return -1;
47862 }
47863 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GAME].packet != NULL, -1,
47864 "Handler for PACKET_RULESET_GAME not installed");
47865 return pc->phs.handlers->send[PACKET_RULESET_GAME].packet(pc, packet);
47866}
47867
47868void lsend_packet_ruleset_game(struct conn_list *dest, const struct packet_ruleset_game *packet)
47869{
47870 conn_list_iterate(dest, pconn) {
47873}
47874
47875#ifdef FREECIV_DELTA_PROTOCOL
47876#define hash_packet_ruleset_specialist_100 hash_const
47877
47878#define cmp_packet_ruleset_specialist_100 cmp_const
47879
47881#endif /* FREECIV_DELTA_PROTOCOL */
47882
47884{
47885#ifdef FREECIV_DELTA_PROTOCOL
47887 struct packet_ruleset_specialist *old;
47888 struct genhash **hash = pc->phs.received + PACKET_RULESET_SPECIALIST;
47889#endif /* FREECIV_DELTA_PROTOCOL */
47891#ifdef FREECIV_JSON_CONNECTION
47892 struct plocation field_addr;
47893 {
47897 }
47898#endif /* FREECIV_JSON_CONNECTION */
47899
47900#ifdef FREECIV_DELTA_PROTOCOL
47901#ifdef FREECIV_JSON_CONNECTION
47902 field_addr.name = "fields";
47903#endif /* FREECIV_JSON_CONNECTION */
47904 DIO_BV_GET(&din, &field_addr, fields);
47905
47906#else /* FREECIV_DELTA_PROTOCOL */
47907#ifdef FREECIV_JSON_CONNECTION
47908 field_addr.name = "id";
47909#endif /* FREECIV_JSON_CONNECTION */
47910 {
47911 int readin;
47912
47913 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
47915 }
47916 real_packet->id = readin;
47917 }
47918#ifdef FREECIV_JSON_CONNECTION
47919 field_addr.name = "plural_name";
47920#endif /* FREECIV_JSON_CONNECTION */
47921 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
47922 RECEIVE_PACKET_FIELD_ERROR(plural_name);
47923 }
47924#ifdef FREECIV_JSON_CONNECTION
47925 field_addr.name = "rule_name";
47926#endif /* FREECIV_JSON_CONNECTION */
47927 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
47928 RECEIVE_PACKET_FIELD_ERROR(rule_name);
47929 }
47930#ifdef FREECIV_JSON_CONNECTION
47931 field_addr.name = "short_name";
47932#endif /* FREECIV_JSON_CONNECTION */
47933 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
47934 RECEIVE_PACKET_FIELD_ERROR(short_name);
47935 }
47936#ifdef FREECIV_JSON_CONNECTION
47937 field_addr.name = "graphic_str";
47938#endif /* FREECIV_JSON_CONNECTION */
47939 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
47940 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
47941 }
47942#ifdef FREECIV_JSON_CONNECTION
47943 field_addr.name = "graphic_alt";
47944#endif /* FREECIV_JSON_CONNECTION */
47945 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
47946 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
47947 }
47948#ifdef FREECIV_JSON_CONNECTION
47949 field_addr.name = "reqs_count";
47950#endif /* FREECIV_JSON_CONNECTION */
47951 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
47952 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
47953 }
47954#ifdef FREECIV_JSON_CONNECTION
47955 field_addr.name = "reqs";
47956#endif /* FREECIV_JSON_CONNECTION */
47957 if (real_packet->reqs_count > MAX_NUM_REQS) {
47958 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
47959 }
47960 {
47961 int i;
47962
47963#ifdef FREECIV_JSON_CONNECTION
47964 /* Enter array. */
47965 field_addr.sub_location = plocation_elem_new(0);
47966#endif /* FREECIV_JSON_CONNECTION */
47967
47968 for (i = 0; i < real_packet->reqs_count; i++) {
47969#ifdef FREECIV_JSON_CONNECTION
47970 field_addr.sub_location->number = i;
47971#endif /* FREECIV_JSON_CONNECTION */
47972
47973 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
47975 }
47976 }
47977
47978#ifdef FREECIV_JSON_CONNECTION
47979 /* Exit array. */
47980 FC_FREE(field_addr.sub_location);
47981#endif /* FREECIV_JSON_CONNECTION */
47982 }
47983#ifdef FREECIV_JSON_CONNECTION
47984 field_addr.name = "helptext";
47985#endif /* FREECIV_JSON_CONNECTION */
47986 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
47988 }
47989#endif
47990 log_packet_detailed("packet_ruleset_specialist_100: got info about ()");
47991
47992#ifdef FREECIV_DELTA_PROTOCOL
47993 if (NULL == *hash) {
47995 NULL, NULL, NULL, free);
47996 }
47997
47998 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
47999 *real_packet = *old;
48000 } else {
48001 log_packet_detailed(" no old info");
48002 memset(real_packet, 0, sizeof(*real_packet));
48003 }
48004
48005 if (BV_ISSET(fields, 0)) {
48006 log_packet_detailed(" got field 'id'");
48007#ifdef FREECIV_JSON_CONNECTION
48008 field_addr.name = "id";
48009#endif /* FREECIV_JSON_CONNECTION */
48010 {
48011 int readin;
48012
48013 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
48015 }
48016 real_packet->id = readin;
48017 }
48018 }
48019 if (BV_ISSET(fields, 1)) {
48020 log_packet_detailed(" got field 'plural_name'");
48021#ifdef FREECIV_JSON_CONNECTION
48022 field_addr.name = "plural_name";
48023#endif /* FREECIV_JSON_CONNECTION */
48024 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
48025 RECEIVE_PACKET_FIELD_ERROR(plural_name);
48026 }
48027 }
48028 if (BV_ISSET(fields, 2)) {
48029 log_packet_detailed(" got field 'rule_name'");
48030#ifdef FREECIV_JSON_CONNECTION
48031 field_addr.name = "rule_name";
48032#endif /* FREECIV_JSON_CONNECTION */
48033 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
48034 RECEIVE_PACKET_FIELD_ERROR(rule_name);
48035 }
48036 }
48037 if (BV_ISSET(fields, 3)) {
48038 log_packet_detailed(" got field 'short_name'");
48039#ifdef FREECIV_JSON_CONNECTION
48040 field_addr.name = "short_name";
48041#endif /* FREECIV_JSON_CONNECTION */
48042 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
48043 RECEIVE_PACKET_FIELD_ERROR(short_name);
48044 }
48045 }
48046 if (BV_ISSET(fields, 4)) {
48047 log_packet_detailed(" got field 'graphic_str'");
48048#ifdef FREECIV_JSON_CONNECTION
48049 field_addr.name = "graphic_str";
48050#endif /* FREECIV_JSON_CONNECTION */
48051 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
48052 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
48053 }
48054 }
48055 if (BV_ISSET(fields, 5)) {
48056 log_packet_detailed(" got field 'graphic_alt'");
48057#ifdef FREECIV_JSON_CONNECTION
48058 field_addr.name = "graphic_alt";
48059#endif /* FREECIV_JSON_CONNECTION */
48060 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
48061 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
48062 }
48063 }
48064 if (BV_ISSET(fields, 6)) {
48065 log_packet_detailed(" got field 'reqs_count'");
48066#ifdef FREECIV_JSON_CONNECTION
48067 field_addr.name = "reqs_count";
48068#endif /* FREECIV_JSON_CONNECTION */
48069 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
48070 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
48071 }
48072 }
48073 if (BV_ISSET(fields, 7)) {
48074 log_packet_detailed(" got field 'reqs'");
48075#ifdef FREECIV_JSON_CONNECTION
48076 field_addr.name = "reqs";
48077#endif /* FREECIV_JSON_CONNECTION */
48078 if (real_packet->reqs_count > MAX_NUM_REQS) {
48079 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
48080 }
48081 {
48082 int i;
48083
48084#ifdef FREECIV_JSON_CONNECTION
48085 /* Enter array. */
48086 field_addr.sub_location = plocation_elem_new(0);
48087#endif /* FREECIV_JSON_CONNECTION */
48088
48089 for (i = 0; i < real_packet->reqs_count; i++) {
48090#ifdef FREECIV_JSON_CONNECTION
48091 field_addr.sub_location->number = i;
48092#endif /* FREECIV_JSON_CONNECTION */
48093
48094 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
48096 }
48097 }
48098
48099#ifdef FREECIV_JSON_CONNECTION
48100 /* Exit array. */
48101 FC_FREE(field_addr.sub_location);
48102#endif /* FREECIV_JSON_CONNECTION */
48103 }
48104 }
48105 if (BV_ISSET(fields, 8)) {
48106 log_packet_detailed(" got field 'helptext'");
48107#ifdef FREECIV_JSON_CONNECTION
48108 field_addr.name = "helptext";
48109#endif /* FREECIV_JSON_CONNECTION */
48110 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
48112 }
48113 }
48114
48115 if (NULL == old) {
48116 old = fc_malloc(sizeof(*old));
48117 *old = *real_packet;
48118 genhash_insert(*hash, old, old);
48119 } else {
48120 *old = *real_packet;
48121 }
48122
48123#endif /* FREECIV_DELTA_PROTOCOL */
48125}
48126
48128{
48129 const struct packet_ruleset_specialist *real_packet = packet;
48130 int e;
48131#ifdef FREECIV_DELTA_PROTOCOL
48133 struct packet_ruleset_specialist *old;
48134 bool differ;
48135 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SPECIALIST;
48136#endif /* FREECIV_DELTA_PROTOCOL */
48138#ifdef FREECIV_JSON_CONNECTION
48139 struct plocation field_addr;
48140 {
48144 }
48145#endif /* FREECIV_JSON_CONNECTION */
48146
48147 log_packet_detailed("packet_ruleset_specialist_100: sending info about ()");
48148
48149#ifdef FREECIV_DELTA_PROTOCOL
48150 if (NULL == *hash) {
48152 NULL, NULL, NULL, free);
48153 }
48154 BV_CLR_ALL(fields);
48155
48156 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
48157 old = fc_malloc(sizeof(*old));
48158 *old = *real_packet;
48159 genhash_insert(*hash, old, old);
48160 memset(old, 0, sizeof(*old));
48161 }
48162 differ = (old->id != real_packet->id);
48163 if (differ) {
48164 BV_SET(fields, 0);
48165 }
48166
48167 differ = (strcmp(old->plural_name, real_packet->plural_name) != 0);
48168 if (differ) {
48169 BV_SET(fields, 1);
48170 }
48171
48172 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
48173 if (differ) {
48174 BV_SET(fields, 2);
48175 }
48176
48177 differ = (strcmp(old->short_name, real_packet->short_name) != 0);
48178 if (differ) {
48179 BV_SET(fields, 3);
48180 }
48181
48182 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
48183 if (differ) {
48184 BV_SET(fields, 4);
48185 }
48186
48187 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
48188 if (differ) {
48189 BV_SET(fields, 5);
48190 }
48191
48192 differ = (old->reqs_count != real_packet->reqs_count);
48193 if (differ) {
48194 BV_SET(fields, 6);
48195 }
48196
48197 differ = (old->reqs_count != real_packet->reqs_count);
48198 if (!differ) {
48199 int i;
48200
48201 for (i = 0; i < real_packet->reqs_count; i++) {
48202 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
48203 if (differ) {
48204 break;
48205 }
48206 }
48207 }
48208 if (differ) {
48209 BV_SET(fields, 7);
48210 }
48211
48212 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
48213 if (differ) {
48214 BV_SET(fields, 8);
48215 }
48216
48217
48218#ifdef FREECIV_JSON_CONNECTION
48219 field_addr.name = "fields";
48220#endif /* FREECIV_JSON_CONNECTION */
48221 e = 0;
48222 e |= DIO_BV_PUT(&dout, &field_addr, fields);
48223 if (e) {
48224 log_packet_detailed("fields bitvector error detected");
48225 }
48226
48227 if (BV_ISSET(fields, 0)) {
48228 log_packet_detailed(" field 'id' has changed");
48229#ifdef FREECIV_JSON_CONNECTION
48230 field_addr.name = "id";
48231#endif /* FREECIV_JSON_CONNECTION */
48232 e = 0;
48233 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
48234 if (e) {
48235 log_packet_detailed("'id' field error detected");
48236 }
48237 }
48238 if (BV_ISSET(fields, 1)) {
48239 log_packet_detailed(" field 'plural_name' has changed");
48240#ifdef FREECIV_JSON_CONNECTION
48241 field_addr.name = "plural_name";
48242#endif /* FREECIV_JSON_CONNECTION */
48243 e = 0;
48244 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
48245 if (e) {
48246 log_packet_detailed("'plural_name' field error detected");
48247 }
48248 }
48249 if (BV_ISSET(fields, 2)) {
48250 log_packet_detailed(" field 'rule_name' has changed");
48251#ifdef FREECIV_JSON_CONNECTION
48252 field_addr.name = "rule_name";
48253#endif /* FREECIV_JSON_CONNECTION */
48254 e = 0;
48255 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
48256 if (e) {
48257 log_packet_detailed("'rule_name' field error detected");
48258 }
48259 }
48260 if (BV_ISSET(fields, 3)) {
48261 log_packet_detailed(" field 'short_name' has changed");
48262#ifdef FREECIV_JSON_CONNECTION
48263 field_addr.name = "short_name";
48264#endif /* FREECIV_JSON_CONNECTION */
48265 e = 0;
48266 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
48267 if (e) {
48268 log_packet_detailed("'short_name' field error detected");
48269 }
48270 }
48271 if (BV_ISSET(fields, 4)) {
48272 log_packet_detailed(" field 'graphic_str' has changed");
48273#ifdef FREECIV_JSON_CONNECTION
48274 field_addr.name = "graphic_str";
48275#endif /* FREECIV_JSON_CONNECTION */
48276 e = 0;
48277 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
48278 if (e) {
48279 log_packet_detailed("'graphic_str' field error detected");
48280 }
48281 }
48282 if (BV_ISSET(fields, 5)) {
48283 log_packet_detailed(" field 'graphic_alt' has changed");
48284#ifdef FREECIV_JSON_CONNECTION
48285 field_addr.name = "graphic_alt";
48286#endif /* FREECIV_JSON_CONNECTION */
48287 e = 0;
48288 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
48289 if (e) {
48290 log_packet_detailed("'graphic_alt' field error detected");
48291 }
48292 }
48293 if (BV_ISSET(fields, 6)) {
48294 log_packet_detailed(" field 'reqs_count' has changed");
48295#ifdef FREECIV_JSON_CONNECTION
48296 field_addr.name = "reqs_count";
48297#endif /* FREECIV_JSON_CONNECTION */
48298 e = 0;
48299 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
48300 if (e) {
48301 log_packet_detailed("'reqs_count' field error detected");
48302 }
48303 }
48304 if (BV_ISSET(fields, 7)) {
48305 log_packet_detailed(" field 'reqs' has changed");
48306#ifdef FREECIV_JSON_CONNECTION
48307 field_addr.name = "reqs";
48308#endif /* FREECIV_JSON_CONNECTION */
48309 e = 0;
48310 {
48311 int i;
48312
48313#ifdef FREECIV_JSON_CONNECTION
48314 /* Create the array. */
48315 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
48316
48317 /* Enter the array. */
48318 field_addr.sub_location = plocation_elem_new(0);
48319#endif /* FREECIV_JSON_CONNECTION */
48320
48321 for (i = 0; i < real_packet->reqs_count; i++) {
48322#ifdef FREECIV_JSON_CONNECTION
48323 /* Next array element. */
48324 field_addr.sub_location->number = i;
48325#endif /* FREECIV_JSON_CONNECTION */
48326
48327 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
48328 }
48329
48330#ifdef FREECIV_JSON_CONNECTION
48331 /* Exit array. */
48332 FC_FREE(field_addr.sub_location);
48333#endif /* FREECIV_JSON_CONNECTION */
48334 }
48335 if (e) {
48336 log_packet_detailed("'reqs' field error detected");
48337 }
48338 }
48339 if (BV_ISSET(fields, 8)) {
48340 log_packet_detailed(" field 'helptext' has changed");
48341#ifdef FREECIV_JSON_CONNECTION
48342 field_addr.name = "helptext";
48343#endif /* FREECIV_JSON_CONNECTION */
48344 e = 0;
48345 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
48346 if (e) {
48347 log_packet_detailed("'helptext' field error detected");
48348 }
48349 }
48350
48351 *old = *real_packet;
48352#endif /* FREECIV_DELTA_PROTOCOL */
48353#ifndef FREECIV_DELTA_PROTOCOL
48354#ifdef FREECIV_JSON_CONNECTION
48355 field_addr.name = "id";
48356#endif /* FREECIV_JSON_CONNECTION */
48357 e = 0;
48358 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
48359 if (e) {
48360 log_packet_detailed("'id' field error detected");
48361 }
48362#ifdef FREECIV_JSON_CONNECTION
48363 field_addr.name = "plural_name";
48364#endif /* FREECIV_JSON_CONNECTION */
48365 e = 0;
48366 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
48367 if (e) {
48368 log_packet_detailed("'plural_name' field error detected");
48369 }
48370#ifdef FREECIV_JSON_CONNECTION
48371 field_addr.name = "rule_name";
48372#endif /* FREECIV_JSON_CONNECTION */
48373 e = 0;
48374 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
48375 if (e) {
48376 log_packet_detailed("'rule_name' field error detected");
48377 }
48378#ifdef FREECIV_JSON_CONNECTION
48379 field_addr.name = "short_name";
48380#endif /* FREECIV_JSON_CONNECTION */
48381 e = 0;
48382 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
48383 if (e) {
48384 log_packet_detailed("'short_name' field error detected");
48385 }
48386#ifdef FREECIV_JSON_CONNECTION
48387 field_addr.name = "graphic_str";
48388#endif /* FREECIV_JSON_CONNECTION */
48389 e = 0;
48390 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
48391 if (e) {
48392 log_packet_detailed("'graphic_str' field error detected");
48393 }
48394#ifdef FREECIV_JSON_CONNECTION
48395 field_addr.name = "graphic_alt";
48396#endif /* FREECIV_JSON_CONNECTION */
48397 e = 0;
48398 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
48399 if (e) {
48400 log_packet_detailed("'graphic_alt' field error detected");
48401 }
48402#ifdef FREECIV_JSON_CONNECTION
48403 field_addr.name = "reqs_count";
48404#endif /* FREECIV_JSON_CONNECTION */
48405 e = 0;
48406 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
48407 if (e) {
48408 log_packet_detailed("'reqs_count' field error detected");
48409 }
48410#ifdef FREECIV_JSON_CONNECTION
48411 field_addr.name = "reqs";
48412#endif /* FREECIV_JSON_CONNECTION */
48413 e = 0;
48414 {
48415 int i;
48416
48417#ifdef FREECIV_JSON_CONNECTION
48418 /* Create the array. */
48419 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
48420
48421 /* Enter the array. */
48422 field_addr.sub_location = plocation_elem_new(0);
48423#endif /* FREECIV_JSON_CONNECTION */
48424
48425 for (i = 0; i < real_packet->reqs_count; i++) {
48426#ifdef FREECIV_JSON_CONNECTION
48427 /* Next array element. */
48428 field_addr.sub_location->number = i;
48429#endif /* FREECIV_JSON_CONNECTION */
48430
48431 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
48432 }
48433
48434#ifdef FREECIV_JSON_CONNECTION
48435 /* Exit array. */
48436 FC_FREE(field_addr.sub_location);
48437#endif /* FREECIV_JSON_CONNECTION */
48438 }
48439 if (e) {
48440 log_packet_detailed("'reqs' field error detected");
48441 }
48442#ifdef FREECIV_JSON_CONNECTION
48443 field_addr.name = "helptext";
48444#endif /* FREECIV_JSON_CONNECTION */
48445 e = 0;
48446 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
48447 if (e) {
48448 log_packet_detailed("'helptext' field error detected");
48449 }
48450
48451#endif
48453}
48454
48456{
48457 if (!pc->used) {
48458 log_error("WARNING: trying to send data to the closed connection %s",
48460 return -1;
48461 }
48462 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet != NULL, -1,
48463 "Handler for PACKET_RULESET_SPECIALIST not installed");
48464 return pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet(pc, packet);
48465}
48466
48468{
48469 conn_list_iterate(dest, pconn) {
48472}
48473
48474#ifdef FREECIV_DELTA_PROTOCOL
48475#define hash_packet_ruleset_government_ruler_title_100 hash_const
48476
48477#define cmp_packet_ruleset_government_ruler_title_100 cmp_const
48478
48480#endif /* FREECIV_DELTA_PROTOCOL */
48481
48483{
48484#ifdef FREECIV_DELTA_PROTOCOL
48487 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT_RULER_TITLE;
48488#endif /* FREECIV_DELTA_PROTOCOL */
48490#ifdef FREECIV_JSON_CONNECTION
48491 struct plocation field_addr;
48492 {
48496 }
48497#endif /* FREECIV_JSON_CONNECTION */
48498
48499#ifdef FREECIV_DELTA_PROTOCOL
48500#ifdef FREECIV_JSON_CONNECTION
48501 field_addr.name = "fields";
48502#endif /* FREECIV_JSON_CONNECTION */
48503 DIO_BV_GET(&din, &field_addr, fields);
48504
48505#else /* FREECIV_DELTA_PROTOCOL */
48506#ifdef FREECIV_JSON_CONNECTION
48507 field_addr.name = "gov";
48508#endif /* FREECIV_JSON_CONNECTION */
48509 {
48510 int readin;
48511
48512 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
48514 }
48515 real_packet->gov = readin;
48516 }
48517#ifdef FREECIV_JSON_CONNECTION
48518 field_addr.name = "nation";
48519#endif /* FREECIV_JSON_CONNECTION */
48520 {
48521 int readin;
48522
48523 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
48525 }
48526 real_packet->nation = readin;
48527 }
48528#ifdef FREECIV_JSON_CONNECTION
48529 field_addr.name = "male_title";
48530#endif /* FREECIV_JSON_CONNECTION */
48531 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
48532 RECEIVE_PACKET_FIELD_ERROR(male_title);
48533 }
48534#ifdef FREECIV_JSON_CONNECTION
48535 field_addr.name = "female_title";
48536#endif /* FREECIV_JSON_CONNECTION */
48537 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
48538 RECEIVE_PACKET_FIELD_ERROR(female_title);
48539 }
48540#endif
48541 log_packet_detailed("packet_ruleset_government_ruler_title_100: got info about ()");
48542
48543#ifdef FREECIV_DELTA_PROTOCOL
48544 if (NULL == *hash) {
48546 NULL, NULL, NULL, free);
48547 }
48548
48549 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
48550 *real_packet = *old;
48551 } else {
48552 log_packet_detailed(" no old info");
48553 memset(real_packet, 0, sizeof(*real_packet));
48554 }
48555
48556 if (BV_ISSET(fields, 0)) {
48557 log_packet_detailed(" got field 'gov'");
48558#ifdef FREECIV_JSON_CONNECTION
48559 field_addr.name = "gov";
48560#endif /* FREECIV_JSON_CONNECTION */
48561 {
48562 int readin;
48563
48564 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
48566 }
48567 real_packet->gov = readin;
48568 }
48569 }
48570 if (BV_ISSET(fields, 1)) {
48571 log_packet_detailed(" got field 'nation'");
48572#ifdef FREECIV_JSON_CONNECTION
48573 field_addr.name = "nation";
48574#endif /* FREECIV_JSON_CONNECTION */
48575 {
48576 int readin;
48577
48578 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
48580 }
48581 real_packet->nation = readin;
48582 }
48583 }
48584 if (BV_ISSET(fields, 2)) {
48585 log_packet_detailed(" got field 'male_title'");
48586#ifdef FREECIV_JSON_CONNECTION
48587 field_addr.name = "male_title";
48588#endif /* FREECIV_JSON_CONNECTION */
48589 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
48590 RECEIVE_PACKET_FIELD_ERROR(male_title);
48591 }
48592 }
48593 if (BV_ISSET(fields, 3)) {
48594 log_packet_detailed(" got field 'female_title'");
48595#ifdef FREECIV_JSON_CONNECTION
48596 field_addr.name = "female_title";
48597#endif /* FREECIV_JSON_CONNECTION */
48598 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
48599 RECEIVE_PACKET_FIELD_ERROR(female_title);
48600 }
48601 }
48602
48603 if (NULL == old) {
48604 old = fc_malloc(sizeof(*old));
48605 *old = *real_packet;
48606 genhash_insert(*hash, old, old);
48607 } else {
48608 *old = *real_packet;
48609 }
48610
48611#endif /* FREECIV_DELTA_PROTOCOL */
48613}
48614
48616{
48618 int e;
48619#ifdef FREECIV_DELTA_PROTOCOL
48622 bool differ;
48624#endif /* FREECIV_DELTA_PROTOCOL */
48626#ifdef FREECIV_JSON_CONNECTION
48627 struct plocation field_addr;
48628 {
48632 }
48633#endif /* FREECIV_JSON_CONNECTION */
48634
48635 log_packet_detailed("packet_ruleset_government_ruler_title_100: sending info about ()");
48636
48637#ifdef FREECIV_DELTA_PROTOCOL
48638 if (NULL == *hash) {
48640 NULL, NULL, NULL, free);
48641 }
48642 BV_CLR_ALL(fields);
48643
48644 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
48645 old = fc_malloc(sizeof(*old));
48646 *old = *real_packet;
48647 genhash_insert(*hash, old, old);
48648 memset(old, 0, sizeof(*old));
48649 }
48650 differ = (old->gov != real_packet->gov);
48651 if (differ) {
48652 BV_SET(fields, 0);
48653 }
48654
48655 differ = (old->nation != real_packet->nation);
48656 if (differ) {
48657 BV_SET(fields, 1);
48658 }
48659
48660 differ = (strcmp(old->male_title, real_packet->male_title) != 0);
48661 if (differ) {
48662 BV_SET(fields, 2);
48663 }
48664
48665 differ = (strcmp(old->female_title, real_packet->female_title) != 0);
48666 if (differ) {
48667 BV_SET(fields, 3);
48668 }
48669
48670
48671#ifdef FREECIV_JSON_CONNECTION
48672 field_addr.name = "fields";
48673#endif /* FREECIV_JSON_CONNECTION */
48674 e = 0;
48675 e |= DIO_BV_PUT(&dout, &field_addr, fields);
48676 if (e) {
48677 log_packet_detailed("fields bitvector error detected");
48678 }
48679
48680 if (BV_ISSET(fields, 0)) {
48681 log_packet_detailed(" field 'gov' has changed");
48682#ifdef FREECIV_JSON_CONNECTION
48683 field_addr.name = "gov";
48684#endif /* FREECIV_JSON_CONNECTION */
48685 e = 0;
48686 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
48687 if (e) {
48688 log_packet_detailed("'gov' field error detected");
48689 }
48690 }
48691 if (BV_ISSET(fields, 1)) {
48692 log_packet_detailed(" field 'nation' has changed");
48693#ifdef FREECIV_JSON_CONNECTION
48694 field_addr.name = "nation";
48695#endif /* FREECIV_JSON_CONNECTION */
48696 e = 0;
48697 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
48698 if (e) {
48699 log_packet_detailed("'nation' field error detected");
48700 }
48701 }
48702 if (BV_ISSET(fields, 2)) {
48703 log_packet_detailed(" field 'male_title' has changed");
48704#ifdef FREECIV_JSON_CONNECTION
48705 field_addr.name = "male_title";
48706#endif /* FREECIV_JSON_CONNECTION */
48707 e = 0;
48708 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
48709 if (e) {
48710 log_packet_detailed("'male_title' field error detected");
48711 }
48712 }
48713 if (BV_ISSET(fields, 3)) {
48714 log_packet_detailed(" field 'female_title' has changed");
48715#ifdef FREECIV_JSON_CONNECTION
48716 field_addr.name = "female_title";
48717#endif /* FREECIV_JSON_CONNECTION */
48718 e = 0;
48719 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
48720 if (e) {
48721 log_packet_detailed("'female_title' field error detected");
48722 }
48723 }
48724
48725 *old = *real_packet;
48726#endif /* FREECIV_DELTA_PROTOCOL */
48727#ifndef FREECIV_DELTA_PROTOCOL
48728#ifdef FREECIV_JSON_CONNECTION
48729 field_addr.name = "gov";
48730#endif /* FREECIV_JSON_CONNECTION */
48731 e = 0;
48732 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
48733 if (e) {
48734 log_packet_detailed("'gov' field error detected");
48735 }
48736#ifdef FREECIV_JSON_CONNECTION
48737 field_addr.name = "nation";
48738#endif /* FREECIV_JSON_CONNECTION */
48739 e = 0;
48740 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
48741 if (e) {
48742 log_packet_detailed("'nation' field error detected");
48743 }
48744#ifdef FREECIV_JSON_CONNECTION
48745 field_addr.name = "male_title";
48746#endif /* FREECIV_JSON_CONNECTION */
48747 e = 0;
48748 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
48749 if (e) {
48750 log_packet_detailed("'male_title' field error detected");
48751 }
48752#ifdef FREECIV_JSON_CONNECTION
48753 field_addr.name = "female_title";
48754#endif /* FREECIV_JSON_CONNECTION */
48755 e = 0;
48756 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
48757 if (e) {
48758 log_packet_detailed("'female_title' field error detected");
48759 }
48760
48761#endif
48763}
48764
48766{
48767 if (!pc->used) {
48768 log_error("WARNING: trying to send data to the closed connection %s",
48770 return -1;
48771 }
48772 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet != NULL, -1,
48773 "Handler for PACKET_RULESET_GOVERNMENT_RULER_TITLE not installed");
48774 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet(pc, packet);
48775}
48776
48783
48784#ifdef FREECIV_DELTA_PROTOCOL
48785#define hash_packet_ruleset_tech_100 hash_const
48786
48787#define cmp_packet_ruleset_tech_100 cmp_const
48788
48790#endif /* FREECIV_DELTA_PROTOCOL */
48791
48793{
48794#ifdef FREECIV_DELTA_PROTOCOL
48796 struct packet_ruleset_tech *old;
48797 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH;
48798#endif /* FREECIV_DELTA_PROTOCOL */
48800#ifdef FREECIV_JSON_CONNECTION
48801 struct plocation field_addr;
48802 {
48806 }
48807#endif /* FREECIV_JSON_CONNECTION */
48808
48809#ifdef FREECIV_DELTA_PROTOCOL
48810#ifdef FREECIV_JSON_CONNECTION
48811 field_addr.name = "fields";
48812#endif /* FREECIV_JSON_CONNECTION */
48813 DIO_BV_GET(&din, &field_addr, fields);
48814
48815#else /* FREECIV_DELTA_PROTOCOL */
48816#ifdef FREECIV_JSON_CONNECTION
48817 field_addr.name = "id";
48818#endif /* FREECIV_JSON_CONNECTION */
48819 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
48821 }
48822#ifdef FREECIV_JSON_CONNECTION
48823 field_addr.name = "root_req";
48824#endif /* FREECIV_JSON_CONNECTION */
48825 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
48827 }
48828#ifdef FREECIV_JSON_CONNECTION
48829 field_addr.name = "research_reqs_count";
48830#endif /* FREECIV_JSON_CONNECTION */
48831 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->research_reqs_count)) {
48832 RECEIVE_PACKET_FIELD_ERROR(research_reqs_count);
48833 }
48834#ifdef FREECIV_JSON_CONNECTION
48835 field_addr.name = "research_reqs";
48836#endif /* FREECIV_JSON_CONNECTION */
48837 if (real_packet->research_reqs_count > MAX_NUM_REQS) {
48838 RECEIVE_PACKET_FIELD_ERROR(research_reqs, ": truncation array");
48839 }
48840 {
48841 int i;
48842
48843#ifdef FREECIV_JSON_CONNECTION
48844 /* Enter array. */
48845 field_addr.sub_location = plocation_elem_new(0);
48846#endif /* FREECIV_JSON_CONNECTION */
48847
48848 for (i = 0; i < real_packet->research_reqs_count; i++) {
48849#ifdef FREECIV_JSON_CONNECTION
48850 field_addr.sub_location->number = i;
48851#endif /* FREECIV_JSON_CONNECTION */
48852
48853 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs[i])) {
48854 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
48855 }
48856 }
48857
48858#ifdef FREECIV_JSON_CONNECTION
48859 /* Exit array. */
48860 FC_FREE(field_addr.sub_location);
48861#endif /* FREECIV_JSON_CONNECTION */
48862 }
48863#ifdef FREECIV_JSON_CONNECTION
48864 field_addr.name = "tclass";
48865#endif /* FREECIV_JSON_CONNECTION */
48866 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
48868 }
48869#ifdef FREECIV_JSON_CONNECTION
48870 field_addr.name = "removed";
48871#endif /* FREECIV_JSON_CONNECTION */
48872 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removed)) {
48874 }
48875#ifdef FREECIV_JSON_CONNECTION
48876 field_addr.name = "flags";
48877#endif /* FREECIV_JSON_CONNECTION */
48878 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
48880 }
48881#ifdef FREECIV_JSON_CONNECTION
48882 field_addr.name = "cost";
48883#endif /* FREECIV_JSON_CONNECTION */
48884 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
48886 }
48887#ifdef FREECIV_JSON_CONNECTION
48888 field_addr.name = "num_reqs";
48889#endif /* FREECIV_JSON_CONNECTION */
48890 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
48892 }
48893#ifdef FREECIV_JSON_CONNECTION
48894 field_addr.name = "name";
48895#endif /* FREECIV_JSON_CONNECTION */
48896 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
48898 }
48899#ifdef FREECIV_JSON_CONNECTION
48900 field_addr.name = "rule_name";
48901#endif /* FREECIV_JSON_CONNECTION */
48902 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
48903 RECEIVE_PACKET_FIELD_ERROR(rule_name);
48904 }
48905#ifdef FREECIV_JSON_CONNECTION
48906 field_addr.name = "helptext";
48907#endif /* FREECIV_JSON_CONNECTION */
48908 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
48910 }
48911#ifdef FREECIV_JSON_CONNECTION
48912 field_addr.name = "graphic_str";
48913#endif /* FREECIV_JSON_CONNECTION */
48914 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
48915 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
48916 }
48917#ifdef FREECIV_JSON_CONNECTION
48918 field_addr.name = "graphic_alt";
48919#endif /* FREECIV_JSON_CONNECTION */
48920 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
48921 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
48922 }
48923#endif
48924 log_packet_detailed("packet_ruleset_tech_100: got info about ()");
48925
48926#ifdef FREECIV_DELTA_PROTOCOL
48927 if (NULL == *hash) {
48929 NULL, NULL, NULL, free);
48930 }
48931
48932 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
48933 *real_packet = *old;
48934 } else {
48935 log_packet_detailed(" no old info");
48936 memset(real_packet, 0, sizeof(*real_packet));
48937 }
48938
48939 if (BV_ISSET(fields, 0)) {
48940 log_packet_detailed(" got field 'id'");
48941#ifdef FREECIV_JSON_CONNECTION
48942 field_addr.name = "id";
48943#endif /* FREECIV_JSON_CONNECTION */
48944 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
48946 }
48947 }
48948 if (BV_ISSET(fields, 1)) {
48949 log_packet_detailed(" got field 'root_req'");
48950#ifdef FREECIV_JSON_CONNECTION
48951 field_addr.name = "root_req";
48952#endif /* FREECIV_JSON_CONNECTION */
48953 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
48955 }
48956 }
48957 if (BV_ISSET(fields, 2)) {
48958 log_packet_detailed(" got field 'research_reqs_count'");
48959#ifdef FREECIV_JSON_CONNECTION
48960 field_addr.name = "research_reqs_count";
48961#endif /* FREECIV_JSON_CONNECTION */
48962 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->research_reqs_count)) {
48963 RECEIVE_PACKET_FIELD_ERROR(research_reqs_count);
48964 }
48965 }
48966 if (BV_ISSET(fields, 3)) {
48967 log_packet_detailed(" got field 'research_reqs'");
48968#ifdef FREECIV_JSON_CONNECTION
48969 field_addr.name = "research_reqs";
48970#endif /* FREECIV_JSON_CONNECTION */
48971 if (real_packet->research_reqs_count > MAX_NUM_REQS) {
48972 RECEIVE_PACKET_FIELD_ERROR(research_reqs, ": truncation array");
48973 }
48974 {
48975 int i;
48976
48977#ifdef FREECIV_JSON_CONNECTION
48978 /* Enter array. */
48979 field_addr.sub_location = plocation_elem_new(0);
48980#endif /* FREECIV_JSON_CONNECTION */
48981
48982 for (i = 0; i < real_packet->research_reqs_count; i++) {
48983#ifdef FREECIV_JSON_CONNECTION
48984 field_addr.sub_location->number = i;
48985#endif /* FREECIV_JSON_CONNECTION */
48986
48987 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs[i])) {
48988 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
48989 }
48990 }
48991
48992#ifdef FREECIV_JSON_CONNECTION
48993 /* Exit array. */
48994 FC_FREE(field_addr.sub_location);
48995#endif /* FREECIV_JSON_CONNECTION */
48996 }
48997 }
48998 if (BV_ISSET(fields, 4)) {
48999 log_packet_detailed(" got field 'tclass'");
49000#ifdef FREECIV_JSON_CONNECTION
49001 field_addr.name = "tclass";
49002#endif /* FREECIV_JSON_CONNECTION */
49003 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
49005 }
49006 }
49007 real_packet->removed = BV_ISSET(fields, 5);
49008 if (BV_ISSET(fields, 6)) {
49009 log_packet_detailed(" got field 'flags'");
49010#ifdef FREECIV_JSON_CONNECTION
49011 field_addr.name = "flags";
49012#endif /* FREECIV_JSON_CONNECTION */
49013 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
49015 }
49016 }
49017 if (BV_ISSET(fields, 7)) {
49018 log_packet_detailed(" got field 'cost'");
49019#ifdef FREECIV_JSON_CONNECTION
49020 field_addr.name = "cost";
49021#endif /* FREECIV_JSON_CONNECTION */
49022 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
49024 }
49025 }
49026 if (BV_ISSET(fields, 8)) {
49027 log_packet_detailed(" got field 'num_reqs'");
49028#ifdef FREECIV_JSON_CONNECTION
49029 field_addr.name = "num_reqs";
49030#endif /* FREECIV_JSON_CONNECTION */
49031 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
49033 }
49034 }
49035 if (BV_ISSET(fields, 9)) {
49036 log_packet_detailed(" got field 'name'");
49037#ifdef FREECIV_JSON_CONNECTION
49038 field_addr.name = "name";
49039#endif /* FREECIV_JSON_CONNECTION */
49040 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49042 }
49043 }
49044 if (BV_ISSET(fields, 10)) {
49045 log_packet_detailed(" got field 'rule_name'");
49046#ifdef FREECIV_JSON_CONNECTION
49047 field_addr.name = "rule_name";
49048#endif /* FREECIV_JSON_CONNECTION */
49049 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
49050 RECEIVE_PACKET_FIELD_ERROR(rule_name);
49051 }
49052 }
49053 if (BV_ISSET(fields, 11)) {
49054 log_packet_detailed(" got field 'helptext'");
49055#ifdef FREECIV_JSON_CONNECTION
49056 field_addr.name = "helptext";
49057#endif /* FREECIV_JSON_CONNECTION */
49058 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
49060 }
49061 }
49062 if (BV_ISSET(fields, 12)) {
49063 log_packet_detailed(" got field 'graphic_str'");
49064#ifdef FREECIV_JSON_CONNECTION
49065 field_addr.name = "graphic_str";
49066#endif /* FREECIV_JSON_CONNECTION */
49067 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
49068 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
49069 }
49070 }
49071 if (BV_ISSET(fields, 13)) {
49072 log_packet_detailed(" got field 'graphic_alt'");
49073#ifdef FREECIV_JSON_CONNECTION
49074 field_addr.name = "graphic_alt";
49075#endif /* FREECIV_JSON_CONNECTION */
49076 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
49077 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
49078 }
49079 }
49080
49081 if (NULL == old) {
49082 old = fc_malloc(sizeof(*old));
49083 *old = *real_packet;
49084 genhash_insert(*hash, old, old);
49085 } else {
49086 *old = *real_packet;
49087 }
49088
49089#endif /* FREECIV_DELTA_PROTOCOL */
49091}
49092
49093static int send_packet_ruleset_tech_100(struct connection *pc, const struct packet_ruleset_tech *packet)
49094{
49095 const struct packet_ruleset_tech *real_packet = packet;
49096 int e;
49097#ifdef FREECIV_DELTA_PROTOCOL
49099 struct packet_ruleset_tech *old;
49100 bool differ;
49101 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH;
49102#endif /* FREECIV_DELTA_PROTOCOL */
49104#ifdef FREECIV_JSON_CONNECTION
49105 struct plocation field_addr;
49106 {
49110 }
49111#endif /* FREECIV_JSON_CONNECTION */
49112
49113 log_packet_detailed("packet_ruleset_tech_100: sending info about ()");
49114
49115#ifdef FREECIV_DELTA_PROTOCOL
49116 if (NULL == *hash) {
49118 NULL, NULL, NULL, free);
49119 }
49120 BV_CLR_ALL(fields);
49121
49122 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
49123 old = fc_malloc(sizeof(*old));
49124 *old = *real_packet;
49125 genhash_insert(*hash, old, old);
49126 memset(old, 0, sizeof(*old));
49127 }
49128 differ = (old->id != real_packet->id);
49129 if (differ) {
49130 BV_SET(fields, 0);
49131 }
49132
49133 differ = (old->root_req != real_packet->root_req);
49134 if (differ) {
49135 BV_SET(fields, 1);
49136 }
49137
49138 differ = (old->research_reqs_count != real_packet->research_reqs_count);
49139 if (differ) {
49140 BV_SET(fields, 2);
49141 }
49142
49143 differ = (old->research_reqs_count != real_packet->research_reqs_count);
49144 if (!differ) {
49145 int i;
49146
49147 for (i = 0; i < real_packet->research_reqs_count; i++) {
49148 differ = !are_requirements_equal(&old->research_reqs[i], &real_packet->research_reqs[i]);
49149 if (differ) {
49150 break;
49151 }
49152 }
49153 }
49154 if (differ) {
49155 BV_SET(fields, 3);
49156 }
49157
49158 differ = (old->tclass != real_packet->tclass);
49159 if (differ) {
49160 BV_SET(fields, 4);
49161 }
49162
49163 if (packet->removed) {
49164 BV_SET(fields, 5);
49165 }
49166
49167 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
49168 if (differ) {
49169 BV_SET(fields, 6);
49170 }
49171
49172 differ = (old->cost != real_packet->cost);
49173 if (differ) {
49174 BV_SET(fields, 7);
49175 }
49176
49177 differ = (old->num_reqs != real_packet->num_reqs);
49178 if (differ) {
49179 BV_SET(fields, 8);
49180 }
49181
49182 differ = (strcmp(old->name, real_packet->name) != 0);
49183 if (differ) {
49184 BV_SET(fields, 9);
49185 }
49186
49187 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
49188 if (differ) {
49189 BV_SET(fields, 10);
49190 }
49191
49192 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
49193 if (differ) {
49194 BV_SET(fields, 11);
49195 }
49196
49197 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
49198 if (differ) {
49199 BV_SET(fields, 12);
49200 }
49201
49202 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
49203 if (differ) {
49204 BV_SET(fields, 13);
49205 }
49206
49207
49208#ifdef FREECIV_JSON_CONNECTION
49209 field_addr.name = "fields";
49210#endif /* FREECIV_JSON_CONNECTION */
49211 e = 0;
49212 e |= DIO_BV_PUT(&dout, &field_addr, fields);
49213 if (e) {
49214 log_packet_detailed("fields bitvector error detected");
49215 }
49216
49217 if (BV_ISSET(fields, 0)) {
49218 log_packet_detailed(" field 'id' has changed");
49219#ifdef FREECIV_JSON_CONNECTION
49220 field_addr.name = "id";
49221#endif /* FREECIV_JSON_CONNECTION */
49222 e = 0;
49223 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
49224 if (e) {
49225 log_packet_detailed("'id' field error detected");
49226 }
49227 }
49228 if (BV_ISSET(fields, 1)) {
49229 log_packet_detailed(" field 'root_req' has changed");
49230#ifdef FREECIV_JSON_CONNECTION
49231 field_addr.name = "root_req";
49232#endif /* FREECIV_JSON_CONNECTION */
49233 e = 0;
49234 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
49235 if (e) {
49236 log_packet_detailed("'root_req' field error detected");
49237 }
49238 }
49239 if (BV_ISSET(fields, 2)) {
49240 log_packet_detailed(" field 'research_reqs_count' has changed");
49241#ifdef FREECIV_JSON_CONNECTION
49242 field_addr.name = "research_reqs_count";
49243#endif /* FREECIV_JSON_CONNECTION */
49244 e = 0;
49245 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->research_reqs_count);
49246 if (e) {
49247 log_packet_detailed("'research_reqs_count' field error detected");
49248 }
49249 }
49250 if (BV_ISSET(fields, 3)) {
49251 log_packet_detailed(" field 'research_reqs' has changed");
49252#ifdef FREECIV_JSON_CONNECTION
49253 field_addr.name = "research_reqs";
49254#endif /* FREECIV_JSON_CONNECTION */
49255 e = 0;
49256 {
49257 int i;
49258
49259#ifdef FREECIV_JSON_CONNECTION
49260 /* Create the array. */
49261 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->research_reqs_count);
49262
49263 /* Enter the array. */
49264 field_addr.sub_location = plocation_elem_new(0);
49265#endif /* FREECIV_JSON_CONNECTION */
49266
49267 for (i = 0; i < real_packet->research_reqs_count; i++) {
49268#ifdef FREECIV_JSON_CONNECTION
49269 /* Next array element. */
49270 field_addr.sub_location->number = i;
49271#endif /* FREECIV_JSON_CONNECTION */
49272
49273 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs[i]);
49274 }
49275
49276#ifdef FREECIV_JSON_CONNECTION
49277 /* Exit array. */
49278 FC_FREE(field_addr.sub_location);
49279#endif /* FREECIV_JSON_CONNECTION */
49280 }
49281 if (e) {
49282 log_packet_detailed("'research_reqs' field error detected");
49283 }
49284 }
49285 if (BV_ISSET(fields, 4)) {
49286 log_packet_detailed(" field 'tclass' has changed");
49287#ifdef FREECIV_JSON_CONNECTION
49288 field_addr.name = "tclass";
49289#endif /* FREECIV_JSON_CONNECTION */
49290 e = 0;
49291 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
49292 if (e) {
49293 log_packet_detailed("'tclass' field error detected");
49294 }
49295 }
49296 /* field 5 is folded into the header */
49297 if (BV_ISSET(fields, 6)) {
49298 log_packet_detailed(" field 'flags' has changed");
49299#ifdef FREECIV_JSON_CONNECTION
49300 field_addr.name = "flags";
49301#endif /* FREECIV_JSON_CONNECTION */
49302 e = 0;
49303 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
49304 if (e) {
49305 log_packet_detailed("'flags' field error detected");
49306 }
49307 }
49308 if (BV_ISSET(fields, 7)) {
49309 log_packet_detailed(" field 'cost' has changed");
49310#ifdef FREECIV_JSON_CONNECTION
49311 field_addr.name = "cost";
49312#endif /* FREECIV_JSON_CONNECTION */
49313 e = 0;
49314 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
49315 if (e) {
49316 log_packet_detailed("'cost' field error detected");
49317 }
49318 }
49319 if (BV_ISSET(fields, 8)) {
49320 log_packet_detailed(" field 'num_reqs' has changed");
49321#ifdef FREECIV_JSON_CONNECTION
49322 field_addr.name = "num_reqs";
49323#endif /* FREECIV_JSON_CONNECTION */
49324 e = 0;
49325 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
49326 if (e) {
49327 log_packet_detailed("'num_reqs' field error detected");
49328 }
49329 }
49330 if (BV_ISSET(fields, 9)) {
49331 log_packet_detailed(" field 'name' has changed");
49332#ifdef FREECIV_JSON_CONNECTION
49333 field_addr.name = "name";
49334#endif /* FREECIV_JSON_CONNECTION */
49335 e = 0;
49336 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49337 if (e) {
49338 log_packet_detailed("'name' field error detected");
49339 }
49340 }
49341 if (BV_ISSET(fields, 10)) {
49342 log_packet_detailed(" field 'rule_name' has changed");
49343#ifdef FREECIV_JSON_CONNECTION
49344 field_addr.name = "rule_name";
49345#endif /* FREECIV_JSON_CONNECTION */
49346 e = 0;
49347 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
49348 if (e) {
49349 log_packet_detailed("'rule_name' field error detected");
49350 }
49351 }
49352 if (BV_ISSET(fields, 11)) {
49353 log_packet_detailed(" field 'helptext' has changed");
49354#ifdef FREECIV_JSON_CONNECTION
49355 field_addr.name = "helptext";
49356#endif /* FREECIV_JSON_CONNECTION */
49357 e = 0;
49358 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
49359 if (e) {
49360 log_packet_detailed("'helptext' field error detected");
49361 }
49362 }
49363 if (BV_ISSET(fields, 12)) {
49364 log_packet_detailed(" field 'graphic_str' has changed");
49365#ifdef FREECIV_JSON_CONNECTION
49366 field_addr.name = "graphic_str";
49367#endif /* FREECIV_JSON_CONNECTION */
49368 e = 0;
49369 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
49370 if (e) {
49371 log_packet_detailed("'graphic_str' field error detected");
49372 }
49373 }
49374 if (BV_ISSET(fields, 13)) {
49375 log_packet_detailed(" field 'graphic_alt' has changed");
49376#ifdef FREECIV_JSON_CONNECTION
49377 field_addr.name = "graphic_alt";
49378#endif /* FREECIV_JSON_CONNECTION */
49379 e = 0;
49380 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
49381 if (e) {
49382 log_packet_detailed("'graphic_alt' field error detected");
49383 }
49384 }
49385
49386 *old = *real_packet;
49387#endif /* FREECIV_DELTA_PROTOCOL */
49388#ifndef FREECIV_DELTA_PROTOCOL
49389#ifdef FREECIV_JSON_CONNECTION
49390 field_addr.name = "id";
49391#endif /* FREECIV_JSON_CONNECTION */
49392 e = 0;
49393 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
49394 if (e) {
49395 log_packet_detailed("'id' field error detected");
49396 }
49397#ifdef FREECIV_JSON_CONNECTION
49398 field_addr.name = "root_req";
49399#endif /* FREECIV_JSON_CONNECTION */
49400 e = 0;
49401 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
49402 if (e) {
49403 log_packet_detailed("'root_req' field error detected");
49404 }
49405#ifdef FREECIV_JSON_CONNECTION
49406 field_addr.name = "research_reqs_count";
49407#endif /* FREECIV_JSON_CONNECTION */
49408 e = 0;
49409 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->research_reqs_count);
49410 if (e) {
49411 log_packet_detailed("'research_reqs_count' field error detected");
49412 }
49413#ifdef FREECIV_JSON_CONNECTION
49414 field_addr.name = "research_reqs";
49415#endif /* FREECIV_JSON_CONNECTION */
49416 e = 0;
49417 {
49418 int i;
49419
49420#ifdef FREECIV_JSON_CONNECTION
49421 /* Create the array. */
49422 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->research_reqs_count);
49423
49424 /* Enter the array. */
49425 field_addr.sub_location = plocation_elem_new(0);
49426#endif /* FREECIV_JSON_CONNECTION */
49427
49428 for (i = 0; i < real_packet->research_reqs_count; i++) {
49429#ifdef FREECIV_JSON_CONNECTION
49430 /* Next array element. */
49431 field_addr.sub_location->number = i;
49432#endif /* FREECIV_JSON_CONNECTION */
49433
49434 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs[i]);
49435 }
49436
49437#ifdef FREECIV_JSON_CONNECTION
49438 /* Exit array. */
49439 FC_FREE(field_addr.sub_location);
49440#endif /* FREECIV_JSON_CONNECTION */
49441 }
49442 if (e) {
49443 log_packet_detailed("'research_reqs' field error detected");
49444 }
49445#ifdef FREECIV_JSON_CONNECTION
49446 field_addr.name = "tclass";
49447#endif /* FREECIV_JSON_CONNECTION */
49448 e = 0;
49449 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
49450 if (e) {
49451 log_packet_detailed("'tclass' field error detected");
49452 }
49453#ifdef FREECIV_JSON_CONNECTION
49454 field_addr.name = "removed";
49455#endif /* FREECIV_JSON_CONNECTION */
49456 e = 0;
49457 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removed);
49458 if (e) {
49459 log_packet_detailed("'removed' field error detected");
49460 }
49461#ifdef FREECIV_JSON_CONNECTION
49462 field_addr.name = "flags";
49463#endif /* FREECIV_JSON_CONNECTION */
49464 e = 0;
49465 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
49466 if (e) {
49467 log_packet_detailed("'flags' field error detected");
49468 }
49469#ifdef FREECIV_JSON_CONNECTION
49470 field_addr.name = "cost";
49471#endif /* FREECIV_JSON_CONNECTION */
49472 e = 0;
49473 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
49474 if (e) {
49475 log_packet_detailed("'cost' field error detected");
49476 }
49477#ifdef FREECIV_JSON_CONNECTION
49478 field_addr.name = "num_reqs";
49479#endif /* FREECIV_JSON_CONNECTION */
49480 e = 0;
49481 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
49482 if (e) {
49483 log_packet_detailed("'num_reqs' field error detected");
49484 }
49485#ifdef FREECIV_JSON_CONNECTION
49486 field_addr.name = "name";
49487#endif /* FREECIV_JSON_CONNECTION */
49488 e = 0;
49489 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49490 if (e) {
49491 log_packet_detailed("'name' field error detected");
49492 }
49493#ifdef FREECIV_JSON_CONNECTION
49494 field_addr.name = "rule_name";
49495#endif /* FREECIV_JSON_CONNECTION */
49496 e = 0;
49497 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
49498 if (e) {
49499 log_packet_detailed("'rule_name' field error detected");
49500 }
49501#ifdef FREECIV_JSON_CONNECTION
49502 field_addr.name = "helptext";
49503#endif /* FREECIV_JSON_CONNECTION */
49504 e = 0;
49505 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
49506 if (e) {
49507 log_packet_detailed("'helptext' field error detected");
49508 }
49509#ifdef FREECIV_JSON_CONNECTION
49510 field_addr.name = "graphic_str";
49511#endif /* FREECIV_JSON_CONNECTION */
49512 e = 0;
49513 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
49514 if (e) {
49515 log_packet_detailed("'graphic_str' field error detected");
49516 }
49517#ifdef FREECIV_JSON_CONNECTION
49518 field_addr.name = "graphic_alt";
49519#endif /* FREECIV_JSON_CONNECTION */
49520 e = 0;
49521 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
49522 if (e) {
49523 log_packet_detailed("'graphic_alt' field error detected");
49524 }
49525
49526#endif
49528}
49529
49531{
49532 if (!pc->used) {
49533 log_error("WARNING: trying to send data to the closed connection %s",
49535 return -1;
49536 }
49537 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH].packet != NULL, -1,
49538 "Handler for PACKET_RULESET_TECH not installed");
49539 return pc->phs.handlers->send[PACKET_RULESET_TECH].packet(pc, packet);
49540}
49541
49542void lsend_packet_ruleset_tech(struct conn_list *dest, const struct packet_ruleset_tech *packet)
49543{
49544 conn_list_iterate(dest, pconn) {
49547}
49548
49549#ifdef FREECIV_DELTA_PROTOCOL
49550#define hash_packet_ruleset_tech_class_100 hash_const
49551
49552#define cmp_packet_ruleset_tech_class_100 cmp_const
49553
49555#endif /* FREECIV_DELTA_PROTOCOL */
49556
49558{
49559#ifdef FREECIV_DELTA_PROTOCOL
49561 struct packet_ruleset_tech_class *old;
49562 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_CLASS;
49563#endif /* FREECIV_DELTA_PROTOCOL */
49565#ifdef FREECIV_JSON_CONNECTION
49566 struct plocation field_addr;
49567 {
49571 }
49572#endif /* FREECIV_JSON_CONNECTION */
49573
49574#ifdef FREECIV_DELTA_PROTOCOL
49575#ifdef FREECIV_JSON_CONNECTION
49576 field_addr.name = "fields";
49577#endif /* FREECIV_JSON_CONNECTION */
49578 DIO_BV_GET(&din, &field_addr, fields);
49579
49580#else /* FREECIV_DELTA_PROTOCOL */
49581#ifdef FREECIV_JSON_CONNECTION
49582 field_addr.name = "id";
49583#endif /* FREECIV_JSON_CONNECTION */
49584 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
49586 }
49587#ifdef FREECIV_JSON_CONNECTION
49588 field_addr.name = "name";
49589#endif /* FREECIV_JSON_CONNECTION */
49590 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49592 }
49593#ifdef FREECIV_JSON_CONNECTION
49594 field_addr.name = "rule_name";
49595#endif /* FREECIV_JSON_CONNECTION */
49596 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
49597 RECEIVE_PACKET_FIELD_ERROR(rule_name);
49598 }
49599#ifdef FREECIV_JSON_CONNECTION
49600 field_addr.name = "cost_pct";
49601#endif /* FREECIV_JSON_CONNECTION */
49602 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
49604 }
49605#endif
49606 log_packet_detailed("packet_ruleset_tech_class_100: got info about ()");
49607
49608#ifdef FREECIV_DELTA_PROTOCOL
49609 if (NULL == *hash) {
49611 NULL, NULL, NULL, free);
49612 }
49613
49614 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
49615 *real_packet = *old;
49616 } else {
49617 log_packet_detailed(" no old info");
49618 memset(real_packet, 0, sizeof(*real_packet));
49619 }
49620
49621 if (BV_ISSET(fields, 0)) {
49622 log_packet_detailed(" got field 'id'");
49623#ifdef FREECIV_JSON_CONNECTION
49624 field_addr.name = "id";
49625#endif /* FREECIV_JSON_CONNECTION */
49626 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
49628 }
49629 }
49630 if (BV_ISSET(fields, 1)) {
49631 log_packet_detailed(" got field 'name'");
49632#ifdef FREECIV_JSON_CONNECTION
49633 field_addr.name = "name";
49634#endif /* FREECIV_JSON_CONNECTION */
49635 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49637 }
49638 }
49639 if (BV_ISSET(fields, 2)) {
49640 log_packet_detailed(" got field 'rule_name'");
49641#ifdef FREECIV_JSON_CONNECTION
49642 field_addr.name = "rule_name";
49643#endif /* FREECIV_JSON_CONNECTION */
49644 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
49645 RECEIVE_PACKET_FIELD_ERROR(rule_name);
49646 }
49647 }
49648 if (BV_ISSET(fields, 3)) {
49649 log_packet_detailed(" got field 'cost_pct'");
49650#ifdef FREECIV_JSON_CONNECTION
49651 field_addr.name = "cost_pct";
49652#endif /* FREECIV_JSON_CONNECTION */
49653 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
49655 }
49656 }
49657
49658 if (NULL == old) {
49659 old = fc_malloc(sizeof(*old));
49660 *old = *real_packet;
49661 genhash_insert(*hash, old, old);
49662 } else {
49663 *old = *real_packet;
49664 }
49665
49666#endif /* FREECIV_DELTA_PROTOCOL */
49668}
49669
49671{
49672 const struct packet_ruleset_tech_class *real_packet = packet;
49673 int e;
49674#ifdef FREECIV_DELTA_PROTOCOL
49676 struct packet_ruleset_tech_class *old;
49677 bool differ;
49678 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_CLASS;
49679#endif /* FREECIV_DELTA_PROTOCOL */
49681#ifdef FREECIV_JSON_CONNECTION
49682 struct plocation field_addr;
49683 {
49687 }
49688#endif /* FREECIV_JSON_CONNECTION */
49689
49690 log_packet_detailed("packet_ruleset_tech_class_100: sending info about ()");
49691
49692#ifdef FREECIV_DELTA_PROTOCOL
49693 if (NULL == *hash) {
49695 NULL, NULL, NULL, free);
49696 }
49697 BV_CLR_ALL(fields);
49698
49699 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
49700 old = fc_malloc(sizeof(*old));
49701 *old = *real_packet;
49702 genhash_insert(*hash, old, old);
49703 memset(old, 0, sizeof(*old));
49704 }
49705 differ = (old->id != real_packet->id);
49706 if (differ) {
49707 BV_SET(fields, 0);
49708 }
49709
49710 differ = (strcmp(old->name, real_packet->name) != 0);
49711 if (differ) {
49712 BV_SET(fields, 1);
49713 }
49714
49715 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
49716 if (differ) {
49717 BV_SET(fields, 2);
49718 }
49719
49720 differ = (old->cost_pct != real_packet->cost_pct);
49721 if (differ) {
49722 BV_SET(fields, 3);
49723 }
49724
49725
49726#ifdef FREECIV_JSON_CONNECTION
49727 field_addr.name = "fields";
49728#endif /* FREECIV_JSON_CONNECTION */
49729 e = 0;
49730 e |= DIO_BV_PUT(&dout, &field_addr, fields);
49731 if (e) {
49732 log_packet_detailed("fields bitvector error detected");
49733 }
49734
49735 if (BV_ISSET(fields, 0)) {
49736 log_packet_detailed(" field 'id' has changed");
49737#ifdef FREECIV_JSON_CONNECTION
49738 field_addr.name = "id";
49739#endif /* FREECIV_JSON_CONNECTION */
49740 e = 0;
49741 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
49742 if (e) {
49743 log_packet_detailed("'id' field error detected");
49744 }
49745 }
49746 if (BV_ISSET(fields, 1)) {
49747 log_packet_detailed(" field 'name' has changed");
49748#ifdef FREECIV_JSON_CONNECTION
49749 field_addr.name = "name";
49750#endif /* FREECIV_JSON_CONNECTION */
49751 e = 0;
49752 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49753 if (e) {
49754 log_packet_detailed("'name' field error detected");
49755 }
49756 }
49757 if (BV_ISSET(fields, 2)) {
49758 log_packet_detailed(" field 'rule_name' has changed");
49759#ifdef FREECIV_JSON_CONNECTION
49760 field_addr.name = "rule_name";
49761#endif /* FREECIV_JSON_CONNECTION */
49762 e = 0;
49763 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
49764 if (e) {
49765 log_packet_detailed("'rule_name' field error detected");
49766 }
49767 }
49768 if (BV_ISSET(fields, 3)) {
49769 log_packet_detailed(" field 'cost_pct' has changed");
49770#ifdef FREECIV_JSON_CONNECTION
49771 field_addr.name = "cost_pct";
49772#endif /* FREECIV_JSON_CONNECTION */
49773 e = 0;
49774 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
49775 if (e) {
49776 log_packet_detailed("'cost_pct' field error detected");
49777 }
49778 }
49779
49780 *old = *real_packet;
49781#endif /* FREECIV_DELTA_PROTOCOL */
49782#ifndef FREECIV_DELTA_PROTOCOL
49783#ifdef FREECIV_JSON_CONNECTION
49784 field_addr.name = "id";
49785#endif /* FREECIV_JSON_CONNECTION */
49786 e = 0;
49787 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
49788 if (e) {
49789 log_packet_detailed("'id' field error detected");
49790 }
49791#ifdef FREECIV_JSON_CONNECTION
49792 field_addr.name = "name";
49793#endif /* FREECIV_JSON_CONNECTION */
49794 e = 0;
49795 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49796 if (e) {
49797 log_packet_detailed("'name' field error detected");
49798 }
49799#ifdef FREECIV_JSON_CONNECTION
49800 field_addr.name = "rule_name";
49801#endif /* FREECIV_JSON_CONNECTION */
49802 e = 0;
49803 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
49804 if (e) {
49805 log_packet_detailed("'rule_name' field error detected");
49806 }
49807#ifdef FREECIV_JSON_CONNECTION
49808 field_addr.name = "cost_pct";
49809#endif /* FREECIV_JSON_CONNECTION */
49810 e = 0;
49811 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
49812 if (e) {
49813 log_packet_detailed("'cost_pct' field error detected");
49814 }
49815
49816#endif
49818}
49819
49821{
49822 if (!pc->used) {
49823 log_error("WARNING: trying to send data to the closed connection %s",
49825 return -1;
49826 }
49827 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet != NULL, -1,
49828 "Handler for PACKET_RULESET_TECH_CLASS not installed");
49829 return pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet(pc, packet);
49830}
49831
49833{
49834 conn_list_iterate(dest, pconn) {
49837}
49838
49839#ifdef FREECIV_DELTA_PROTOCOL
49840#define hash_packet_ruleset_tech_flag_100 hash_const
49841
49842#define cmp_packet_ruleset_tech_flag_100 cmp_const
49843
49845#endif /* FREECIV_DELTA_PROTOCOL */
49846
49848{
49849#ifdef FREECIV_DELTA_PROTOCOL
49851 struct packet_ruleset_tech_flag *old;
49852 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_FLAG;
49853#endif /* FREECIV_DELTA_PROTOCOL */
49855#ifdef FREECIV_JSON_CONNECTION
49856 struct plocation field_addr;
49857 {
49861 }
49862#endif /* FREECIV_JSON_CONNECTION */
49863
49864#ifdef FREECIV_DELTA_PROTOCOL
49865#ifdef FREECIV_JSON_CONNECTION
49866 field_addr.name = "fields";
49867#endif /* FREECIV_JSON_CONNECTION */
49868 DIO_BV_GET(&din, &field_addr, fields);
49869
49870#else /* FREECIV_DELTA_PROTOCOL */
49871#ifdef FREECIV_JSON_CONNECTION
49872 field_addr.name = "id";
49873#endif /* FREECIV_JSON_CONNECTION */
49874 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
49876 }
49877#ifdef FREECIV_JSON_CONNECTION
49878 field_addr.name = "name";
49879#endif /* FREECIV_JSON_CONNECTION */
49880 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49882 }
49883#ifdef FREECIV_JSON_CONNECTION
49884 field_addr.name = "helptxt";
49885#endif /* FREECIV_JSON_CONNECTION */
49886 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
49888 }
49889#endif
49890 log_packet_detailed("packet_ruleset_tech_flag_100: got info about ()");
49891
49892#ifdef FREECIV_DELTA_PROTOCOL
49893 if (NULL == *hash) {
49895 NULL, NULL, NULL, free);
49896 }
49897
49898 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
49899 *real_packet = *old;
49900 } else {
49901 log_packet_detailed(" no old info");
49902 memset(real_packet, 0, sizeof(*real_packet));
49903 }
49904
49905 if (BV_ISSET(fields, 0)) {
49906 log_packet_detailed(" got field 'id'");
49907#ifdef FREECIV_JSON_CONNECTION
49908 field_addr.name = "id";
49909#endif /* FREECIV_JSON_CONNECTION */
49910 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
49912 }
49913 }
49914 if (BV_ISSET(fields, 1)) {
49915 log_packet_detailed(" got field 'name'");
49916#ifdef FREECIV_JSON_CONNECTION
49917 field_addr.name = "name";
49918#endif /* FREECIV_JSON_CONNECTION */
49919 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49921 }
49922 }
49923 if (BV_ISSET(fields, 2)) {
49924 log_packet_detailed(" got field 'helptxt'");
49925#ifdef FREECIV_JSON_CONNECTION
49926 field_addr.name = "helptxt";
49927#endif /* FREECIV_JSON_CONNECTION */
49928 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
49930 }
49931 }
49932
49933 if (NULL == old) {
49934 old = fc_malloc(sizeof(*old));
49935 *old = *real_packet;
49936 genhash_insert(*hash, old, old);
49937 } else {
49938 *old = *real_packet;
49939 }
49940
49941#endif /* FREECIV_DELTA_PROTOCOL */
49943}
49944
49946{
49947 const struct packet_ruleset_tech_flag *real_packet = packet;
49948 int e;
49949#ifdef FREECIV_DELTA_PROTOCOL
49951 struct packet_ruleset_tech_flag *old;
49952 bool differ;
49953 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_FLAG;
49954#endif /* FREECIV_DELTA_PROTOCOL */
49956#ifdef FREECIV_JSON_CONNECTION
49957 struct plocation field_addr;
49958 {
49962 }
49963#endif /* FREECIV_JSON_CONNECTION */
49964
49965 log_packet_detailed("packet_ruleset_tech_flag_100: sending info about ()");
49966
49967#ifdef FREECIV_DELTA_PROTOCOL
49968 if (NULL == *hash) {
49970 NULL, NULL, NULL, free);
49971 }
49972 BV_CLR_ALL(fields);
49973
49974 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
49975 old = fc_malloc(sizeof(*old));
49976 *old = *real_packet;
49977 genhash_insert(*hash, old, old);
49978 memset(old, 0, sizeof(*old));
49979 }
49980 differ = (old->id != real_packet->id);
49981 if (differ) {
49982 BV_SET(fields, 0);
49983 }
49984
49985 differ = (strcmp(old->name, real_packet->name) != 0);
49986 if (differ) {
49987 BV_SET(fields, 1);
49988 }
49989
49990 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
49991 if (differ) {
49992 BV_SET(fields, 2);
49993 }
49994
49995
49996#ifdef FREECIV_JSON_CONNECTION
49997 field_addr.name = "fields";
49998#endif /* FREECIV_JSON_CONNECTION */
49999 e = 0;
50000 e |= DIO_BV_PUT(&dout, &field_addr, fields);
50001 if (e) {
50002 log_packet_detailed("fields bitvector error detected");
50003 }
50004
50005 if (BV_ISSET(fields, 0)) {
50006 log_packet_detailed(" field 'id' has changed");
50007#ifdef FREECIV_JSON_CONNECTION
50008 field_addr.name = "id";
50009#endif /* FREECIV_JSON_CONNECTION */
50010 e = 0;
50011 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
50012 if (e) {
50013 log_packet_detailed("'id' field error detected");
50014 }
50015 }
50016 if (BV_ISSET(fields, 1)) {
50017 log_packet_detailed(" field 'name' has changed");
50018#ifdef FREECIV_JSON_CONNECTION
50019 field_addr.name = "name";
50020#endif /* FREECIV_JSON_CONNECTION */
50021 e = 0;
50022 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
50023 if (e) {
50024 log_packet_detailed("'name' field error detected");
50025 }
50026 }
50027 if (BV_ISSET(fields, 2)) {
50028 log_packet_detailed(" field 'helptxt' has changed");
50029#ifdef FREECIV_JSON_CONNECTION
50030 field_addr.name = "helptxt";
50031#endif /* FREECIV_JSON_CONNECTION */
50032 e = 0;
50033 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
50034 if (e) {
50035 log_packet_detailed("'helptxt' field error detected");
50036 }
50037 }
50038
50039 *old = *real_packet;
50040#endif /* FREECIV_DELTA_PROTOCOL */
50041#ifndef FREECIV_DELTA_PROTOCOL
50042#ifdef FREECIV_JSON_CONNECTION
50043 field_addr.name = "id";
50044#endif /* FREECIV_JSON_CONNECTION */
50045 e = 0;
50046 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
50047 if (e) {
50048 log_packet_detailed("'id' field error detected");
50049 }
50050#ifdef FREECIV_JSON_CONNECTION
50051 field_addr.name = "name";
50052#endif /* FREECIV_JSON_CONNECTION */
50053 e = 0;
50054 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
50055 if (e) {
50056 log_packet_detailed("'name' field error detected");
50057 }
50058#ifdef FREECIV_JSON_CONNECTION
50059 field_addr.name = "helptxt";
50060#endif /* FREECIV_JSON_CONNECTION */
50061 e = 0;
50062 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
50063 if (e) {
50064 log_packet_detailed("'helptxt' field error detected");
50065 }
50066
50067#endif
50069}
50070
50072{
50073 if (!pc->used) {
50074 log_error("WARNING: trying to send data to the closed connection %s",
50076 return -1;
50077 }
50078 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet != NULL, -1,
50079 "Handler for PACKET_RULESET_TECH_FLAG not installed");
50080 return pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet(pc, packet);
50081}
50082
50084{
50085 conn_list_iterate(dest, pconn) {
50088}
50089
50090#ifdef FREECIV_DELTA_PROTOCOL
50091#define hash_packet_ruleset_government_100 hash_const
50092
50093#define cmp_packet_ruleset_government_100 cmp_const
50094
50096#endif /* FREECIV_DELTA_PROTOCOL */
50097
50099{
50100#ifdef FREECIV_DELTA_PROTOCOL
50102 struct packet_ruleset_government *old;
50103 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT;
50104#endif /* FREECIV_DELTA_PROTOCOL */
50106#ifdef FREECIV_JSON_CONNECTION
50107 struct plocation field_addr;
50108 {
50112 }
50113#endif /* FREECIV_JSON_CONNECTION */
50114
50115#ifdef FREECIV_DELTA_PROTOCOL
50116#ifdef FREECIV_JSON_CONNECTION
50117 field_addr.name = "fields";
50118#endif /* FREECIV_JSON_CONNECTION */
50119 DIO_BV_GET(&din, &field_addr, fields);
50120
50121#else /* FREECIV_DELTA_PROTOCOL */
50122#ifdef FREECIV_JSON_CONNECTION
50123 field_addr.name = "id";
50124#endif /* FREECIV_JSON_CONNECTION */
50125 {
50126 int readin;
50127
50128 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
50130 }
50131 real_packet->id = readin;
50132 }
50133#ifdef FREECIV_JSON_CONNECTION
50134 field_addr.name = "reqs_count";
50135#endif /* FREECIV_JSON_CONNECTION */
50136 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
50137 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
50138 }
50139#ifdef FREECIV_JSON_CONNECTION
50140 field_addr.name = "reqs";
50141#endif /* FREECIV_JSON_CONNECTION */
50142 if (real_packet->reqs_count > MAX_NUM_REQS) {
50143 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
50144 }
50145 {
50146 int i;
50147
50148#ifdef FREECIV_JSON_CONNECTION
50149 /* Enter array. */
50150 field_addr.sub_location = plocation_elem_new(0);
50151#endif /* FREECIV_JSON_CONNECTION */
50152
50153 for (i = 0; i < real_packet->reqs_count; i++) {
50154#ifdef FREECIV_JSON_CONNECTION
50155 field_addr.sub_location->number = i;
50156#endif /* FREECIV_JSON_CONNECTION */
50157
50158 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
50160 }
50161 }
50162
50163#ifdef FREECIV_JSON_CONNECTION
50164 /* Exit array. */
50165 FC_FREE(field_addr.sub_location);
50166#endif /* FREECIV_JSON_CONNECTION */
50167 }
50168#ifdef FREECIV_JSON_CONNECTION
50169 field_addr.name = "name";
50170#endif /* FREECIV_JSON_CONNECTION */
50171 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
50173 }
50174#ifdef FREECIV_JSON_CONNECTION
50175 field_addr.name = "rule_name";
50176#endif /* FREECIV_JSON_CONNECTION */
50177 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
50178 RECEIVE_PACKET_FIELD_ERROR(rule_name);
50179 }
50180#ifdef FREECIV_JSON_CONNECTION
50181 field_addr.name = "graphic_str";
50182#endif /* FREECIV_JSON_CONNECTION */
50183 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
50184 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
50185 }
50186#ifdef FREECIV_JSON_CONNECTION
50187 field_addr.name = "graphic_alt";
50188#endif /* FREECIV_JSON_CONNECTION */
50189 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
50190 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
50191 }
50192#ifdef FREECIV_JSON_CONNECTION
50193 field_addr.name = "sound_str";
50194#endif /* FREECIV_JSON_CONNECTION */
50195 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
50196 RECEIVE_PACKET_FIELD_ERROR(sound_str);
50197 }
50198#ifdef FREECIV_JSON_CONNECTION
50199 field_addr.name = "sound_alt";
50200#endif /* FREECIV_JSON_CONNECTION */
50201 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
50202 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
50203 }
50204#ifdef FREECIV_JSON_CONNECTION
50205 field_addr.name = "sound_alt2";
50206#endif /* FREECIV_JSON_CONNECTION */
50207 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
50208 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
50209 }
50210#ifdef FREECIV_JSON_CONNECTION
50211 field_addr.name = "helptext";
50212#endif /* FREECIV_JSON_CONNECTION */
50213 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
50215 }
50216#endif
50217 log_packet_detailed("packet_ruleset_government_100: got info about ()");
50218
50219#ifdef FREECIV_DELTA_PROTOCOL
50220 if (NULL == *hash) {
50222 NULL, NULL, NULL, free);
50223 }
50224
50225 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
50226 *real_packet = *old;
50227 } else {
50228 log_packet_detailed(" no old info");
50229 memset(real_packet, 0, sizeof(*real_packet));
50230 }
50231
50232 if (BV_ISSET(fields, 0)) {
50233 log_packet_detailed(" got field 'id'");
50234#ifdef FREECIV_JSON_CONNECTION
50235 field_addr.name = "id";
50236#endif /* FREECIV_JSON_CONNECTION */
50237 {
50238 int readin;
50239
50240 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
50242 }
50243 real_packet->id = readin;
50244 }
50245 }
50246 if (BV_ISSET(fields, 1)) {
50247 log_packet_detailed(" got field 'reqs_count'");
50248#ifdef FREECIV_JSON_CONNECTION
50249 field_addr.name = "reqs_count";
50250#endif /* FREECIV_JSON_CONNECTION */
50251 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
50252 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
50253 }
50254 }
50255 if (BV_ISSET(fields, 2)) {
50256 log_packet_detailed(" got field 'reqs'");
50257#ifdef FREECIV_JSON_CONNECTION
50258 field_addr.name = "reqs";
50259#endif /* FREECIV_JSON_CONNECTION */
50260 if (real_packet->reqs_count > MAX_NUM_REQS) {
50261 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
50262 }
50263 {
50264 int i;
50265
50266#ifdef FREECIV_JSON_CONNECTION
50267 /* Enter array. */
50268 field_addr.sub_location = plocation_elem_new(0);
50269#endif /* FREECIV_JSON_CONNECTION */
50270
50271 for (i = 0; i < real_packet->reqs_count; i++) {
50272#ifdef FREECIV_JSON_CONNECTION
50273 field_addr.sub_location->number = i;
50274#endif /* FREECIV_JSON_CONNECTION */
50275
50276 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
50278 }
50279 }
50280
50281#ifdef FREECIV_JSON_CONNECTION
50282 /* Exit array. */
50283 FC_FREE(field_addr.sub_location);
50284#endif /* FREECIV_JSON_CONNECTION */
50285 }
50286 }
50287 if (BV_ISSET(fields, 3)) {
50288 log_packet_detailed(" got field 'name'");
50289#ifdef FREECIV_JSON_CONNECTION
50290 field_addr.name = "name";
50291#endif /* FREECIV_JSON_CONNECTION */
50292 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
50294 }
50295 }
50296 if (BV_ISSET(fields, 4)) {
50297 log_packet_detailed(" got field 'rule_name'");
50298#ifdef FREECIV_JSON_CONNECTION
50299 field_addr.name = "rule_name";
50300#endif /* FREECIV_JSON_CONNECTION */
50301 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
50302 RECEIVE_PACKET_FIELD_ERROR(rule_name);
50303 }
50304 }
50305 if (BV_ISSET(fields, 5)) {
50306 log_packet_detailed(" got field 'graphic_str'");
50307#ifdef FREECIV_JSON_CONNECTION
50308 field_addr.name = "graphic_str";
50309#endif /* FREECIV_JSON_CONNECTION */
50310 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
50311 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
50312 }
50313 }
50314 if (BV_ISSET(fields, 6)) {
50315 log_packet_detailed(" got field 'graphic_alt'");
50316#ifdef FREECIV_JSON_CONNECTION
50317 field_addr.name = "graphic_alt";
50318#endif /* FREECIV_JSON_CONNECTION */
50319 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
50320 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
50321 }
50322 }
50323 if (BV_ISSET(fields, 7)) {
50324 log_packet_detailed(" got field 'sound_str'");
50325#ifdef FREECIV_JSON_CONNECTION
50326 field_addr.name = "sound_str";
50327#endif /* FREECIV_JSON_CONNECTION */
50328 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
50329 RECEIVE_PACKET_FIELD_ERROR(sound_str);
50330 }
50331 }
50332 if (BV_ISSET(fields, 8)) {
50333 log_packet_detailed(" got field 'sound_alt'");
50334#ifdef FREECIV_JSON_CONNECTION
50335 field_addr.name = "sound_alt";
50336#endif /* FREECIV_JSON_CONNECTION */
50337 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
50338 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
50339 }
50340 }
50341 if (BV_ISSET(fields, 9)) {
50342 log_packet_detailed(" got field 'sound_alt2'");
50343#ifdef FREECIV_JSON_CONNECTION
50344 field_addr.name = "sound_alt2";
50345#endif /* FREECIV_JSON_CONNECTION */
50346 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
50347 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
50348 }
50349 }
50350 if (BV_ISSET(fields, 10)) {
50351 log_packet_detailed(" got field 'helptext'");
50352#ifdef FREECIV_JSON_CONNECTION
50353 field_addr.name = "helptext";
50354#endif /* FREECIV_JSON_CONNECTION */
50355 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
50357 }
50358 }
50359
50360 if (NULL == old) {
50361 old = fc_malloc(sizeof(*old));
50362 *old = *real_packet;
50363 genhash_insert(*hash, old, old);
50364 } else {
50365 *old = *real_packet;
50366 }
50367
50368#endif /* FREECIV_DELTA_PROTOCOL */
50370}
50371
50373{
50374 const struct packet_ruleset_government *real_packet = packet;
50375 int e;
50376#ifdef FREECIV_DELTA_PROTOCOL
50378 struct packet_ruleset_government *old;
50379 bool differ;
50380 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOVERNMENT;
50381#endif /* FREECIV_DELTA_PROTOCOL */
50383#ifdef FREECIV_JSON_CONNECTION
50384 struct plocation field_addr;
50385 {
50389 }
50390#endif /* FREECIV_JSON_CONNECTION */
50391
50392 log_packet_detailed("packet_ruleset_government_100: sending info about ()");
50393
50394#ifdef FREECIV_DELTA_PROTOCOL
50395 if (NULL == *hash) {
50397 NULL, NULL, NULL, free);
50398 }
50399 BV_CLR_ALL(fields);
50400
50401 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
50402 old = fc_malloc(sizeof(*old));
50403 *old = *real_packet;
50404 genhash_insert(*hash, old, old);
50405 memset(old, 0, sizeof(*old));
50406 }
50407 differ = (old->id != real_packet->id);
50408 if (differ) {
50409 BV_SET(fields, 0);
50410 }
50411
50412 differ = (old->reqs_count != real_packet->reqs_count);
50413 if (differ) {
50414 BV_SET(fields, 1);
50415 }
50416
50417 differ = (old->reqs_count != real_packet->reqs_count);
50418 if (!differ) {
50419 int i;
50420
50421 for (i = 0; i < real_packet->reqs_count; i++) {
50422 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
50423 if (differ) {
50424 break;
50425 }
50426 }
50427 }
50428 if (differ) {
50429 BV_SET(fields, 2);
50430 }
50431
50432 differ = (strcmp(old->name, real_packet->name) != 0);
50433 if (differ) {
50434 BV_SET(fields, 3);
50435 }
50436
50437 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
50438 if (differ) {
50439 BV_SET(fields, 4);
50440 }
50441
50442 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
50443 if (differ) {
50444 BV_SET(fields, 5);
50445 }
50446
50447 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
50448 if (differ) {
50449 BV_SET(fields, 6);
50450 }
50451
50452 differ = (strcmp(old->sound_str, real_packet->sound_str) != 0);
50453 if (differ) {
50454 BV_SET(fields, 7);
50455 }
50456
50457 differ = (strcmp(old->sound_alt, real_packet->sound_alt) != 0);
50458 if (differ) {
50459 BV_SET(fields, 8);
50460 }
50461
50462 differ = (strcmp(old->sound_alt2, real_packet->sound_alt2) != 0);
50463 if (differ) {
50464 BV_SET(fields, 9);
50465 }
50466
50467 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
50468 if (differ) {
50469 BV_SET(fields, 10);
50470 }
50471
50472
50473#ifdef FREECIV_JSON_CONNECTION
50474 field_addr.name = "fields";
50475#endif /* FREECIV_JSON_CONNECTION */
50476 e = 0;
50477 e |= DIO_BV_PUT(&dout, &field_addr, fields);
50478 if (e) {
50479 log_packet_detailed("fields bitvector error detected");
50480 }
50481
50482 if (BV_ISSET(fields, 0)) {
50483 log_packet_detailed(" field 'id' has changed");
50484#ifdef FREECIV_JSON_CONNECTION
50485 field_addr.name = "id";
50486#endif /* FREECIV_JSON_CONNECTION */
50487 e = 0;
50488 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
50489 if (e) {
50490 log_packet_detailed("'id' field error detected");
50491 }
50492 }
50493 if (BV_ISSET(fields, 1)) {
50494 log_packet_detailed(" field 'reqs_count' has changed");
50495#ifdef FREECIV_JSON_CONNECTION
50496 field_addr.name = "reqs_count";
50497#endif /* FREECIV_JSON_CONNECTION */
50498 e = 0;
50499 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
50500 if (e) {
50501 log_packet_detailed("'reqs_count' field error detected");
50502 }
50503 }
50504 if (BV_ISSET(fields, 2)) {
50505 log_packet_detailed(" field 'reqs' has changed");
50506#ifdef FREECIV_JSON_CONNECTION
50507 field_addr.name = "reqs";
50508#endif /* FREECIV_JSON_CONNECTION */
50509 e = 0;
50510 {
50511 int i;
50512
50513#ifdef FREECIV_JSON_CONNECTION
50514 /* Create the array. */
50515 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
50516
50517 /* Enter the array. */
50518 field_addr.sub_location = plocation_elem_new(0);
50519#endif /* FREECIV_JSON_CONNECTION */
50520
50521 for (i = 0; i < real_packet->reqs_count; i++) {
50522#ifdef FREECIV_JSON_CONNECTION
50523 /* Next array element. */
50524 field_addr.sub_location->number = i;
50525#endif /* FREECIV_JSON_CONNECTION */
50526
50527 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
50528 }
50529
50530#ifdef FREECIV_JSON_CONNECTION
50531 /* Exit array. */
50532 FC_FREE(field_addr.sub_location);
50533#endif /* FREECIV_JSON_CONNECTION */
50534 }
50535 if (e) {
50536 log_packet_detailed("'reqs' field error detected");
50537 }
50538 }
50539 if (BV_ISSET(fields, 3)) {
50540 log_packet_detailed(" field 'name' has changed");
50541#ifdef FREECIV_JSON_CONNECTION
50542 field_addr.name = "name";
50543#endif /* FREECIV_JSON_CONNECTION */
50544 e = 0;
50545 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
50546 if (e) {
50547 log_packet_detailed("'name' field error detected");
50548 }
50549 }
50550 if (BV_ISSET(fields, 4)) {
50551 log_packet_detailed(" field 'rule_name' has changed");
50552#ifdef FREECIV_JSON_CONNECTION
50553 field_addr.name = "rule_name";
50554#endif /* FREECIV_JSON_CONNECTION */
50555 e = 0;
50556 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
50557 if (e) {
50558 log_packet_detailed("'rule_name' field error detected");
50559 }
50560 }
50561 if (BV_ISSET(fields, 5)) {
50562 log_packet_detailed(" field 'graphic_str' has changed");
50563#ifdef FREECIV_JSON_CONNECTION
50564 field_addr.name = "graphic_str";
50565#endif /* FREECIV_JSON_CONNECTION */
50566 e = 0;
50567 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
50568 if (e) {
50569 log_packet_detailed("'graphic_str' field error detected");
50570 }
50571 }
50572 if (BV_ISSET(fields, 6)) {
50573 log_packet_detailed(" field 'graphic_alt' has changed");
50574#ifdef FREECIV_JSON_CONNECTION
50575 field_addr.name = "graphic_alt";
50576#endif /* FREECIV_JSON_CONNECTION */
50577 e = 0;
50578 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
50579 if (e) {
50580 log_packet_detailed("'graphic_alt' field error detected");
50581 }
50582 }
50583 if (BV_ISSET(fields, 7)) {
50584 log_packet_detailed(" field 'sound_str' has changed");
50585#ifdef FREECIV_JSON_CONNECTION
50586 field_addr.name = "sound_str";
50587#endif /* FREECIV_JSON_CONNECTION */
50588 e = 0;
50589 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
50590 if (e) {
50591 log_packet_detailed("'sound_str' field error detected");
50592 }
50593 }
50594 if (BV_ISSET(fields, 8)) {
50595 log_packet_detailed(" field 'sound_alt' has changed");
50596#ifdef FREECIV_JSON_CONNECTION
50597 field_addr.name = "sound_alt";
50598#endif /* FREECIV_JSON_CONNECTION */
50599 e = 0;
50600 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
50601 if (e) {
50602 log_packet_detailed("'sound_alt' field error detected");
50603 }
50604 }
50605 if (BV_ISSET(fields, 9)) {
50606 log_packet_detailed(" field 'sound_alt2' has changed");
50607#ifdef FREECIV_JSON_CONNECTION
50608 field_addr.name = "sound_alt2";
50609#endif /* FREECIV_JSON_CONNECTION */
50610 e = 0;
50611 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
50612 if (e) {
50613 log_packet_detailed("'sound_alt2' field error detected");
50614 }
50615 }
50616 if (BV_ISSET(fields, 10)) {
50617 log_packet_detailed(" field 'helptext' has changed");
50618#ifdef FREECIV_JSON_CONNECTION
50619 field_addr.name = "helptext";
50620#endif /* FREECIV_JSON_CONNECTION */
50621 e = 0;
50622 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
50623 if (e) {
50624 log_packet_detailed("'helptext' field error detected");
50625 }
50626 }
50627
50628 *old = *real_packet;
50629#endif /* FREECIV_DELTA_PROTOCOL */
50630#ifndef FREECIV_DELTA_PROTOCOL
50631#ifdef FREECIV_JSON_CONNECTION
50632 field_addr.name = "id";
50633#endif /* FREECIV_JSON_CONNECTION */
50634 e = 0;
50635 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
50636 if (e) {
50637 log_packet_detailed("'id' field error detected");
50638 }
50639#ifdef FREECIV_JSON_CONNECTION
50640 field_addr.name = "reqs_count";
50641#endif /* FREECIV_JSON_CONNECTION */
50642 e = 0;
50643 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
50644 if (e) {
50645 log_packet_detailed("'reqs_count' field error detected");
50646 }
50647#ifdef FREECIV_JSON_CONNECTION
50648 field_addr.name = "reqs";
50649#endif /* FREECIV_JSON_CONNECTION */
50650 e = 0;
50651 {
50652 int i;
50653
50654#ifdef FREECIV_JSON_CONNECTION
50655 /* Create the array. */
50656 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
50657
50658 /* Enter the array. */
50659 field_addr.sub_location = plocation_elem_new(0);
50660#endif /* FREECIV_JSON_CONNECTION */
50661
50662 for (i = 0; i < real_packet->reqs_count; i++) {
50663#ifdef FREECIV_JSON_CONNECTION
50664 /* Next array element. */
50665 field_addr.sub_location->number = i;
50666#endif /* FREECIV_JSON_CONNECTION */
50667
50668 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
50669 }
50670
50671#ifdef FREECIV_JSON_CONNECTION
50672 /* Exit array. */
50673 FC_FREE(field_addr.sub_location);
50674#endif /* FREECIV_JSON_CONNECTION */
50675 }
50676 if (e) {
50677 log_packet_detailed("'reqs' field error detected");
50678 }
50679#ifdef FREECIV_JSON_CONNECTION
50680 field_addr.name = "name";
50681#endif /* FREECIV_JSON_CONNECTION */
50682 e = 0;
50683 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
50684 if (e) {
50685 log_packet_detailed("'name' field error detected");
50686 }
50687#ifdef FREECIV_JSON_CONNECTION
50688 field_addr.name = "rule_name";
50689#endif /* FREECIV_JSON_CONNECTION */
50690 e = 0;
50691 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
50692 if (e) {
50693 log_packet_detailed("'rule_name' field error detected");
50694 }
50695#ifdef FREECIV_JSON_CONNECTION
50696 field_addr.name = "graphic_str";
50697#endif /* FREECIV_JSON_CONNECTION */
50698 e = 0;
50699 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
50700 if (e) {
50701 log_packet_detailed("'graphic_str' field error detected");
50702 }
50703#ifdef FREECIV_JSON_CONNECTION
50704 field_addr.name = "graphic_alt";
50705#endif /* FREECIV_JSON_CONNECTION */
50706 e = 0;
50707 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
50708 if (e) {
50709 log_packet_detailed("'graphic_alt' field error detected");
50710 }
50711#ifdef FREECIV_JSON_CONNECTION
50712 field_addr.name = "sound_str";
50713#endif /* FREECIV_JSON_CONNECTION */
50714 e = 0;
50715 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
50716 if (e) {
50717 log_packet_detailed("'sound_str' field error detected");
50718 }
50719#ifdef FREECIV_JSON_CONNECTION
50720 field_addr.name = "sound_alt";
50721#endif /* FREECIV_JSON_CONNECTION */
50722 e = 0;
50723 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
50724 if (e) {
50725 log_packet_detailed("'sound_alt' field error detected");
50726 }
50727#ifdef FREECIV_JSON_CONNECTION
50728 field_addr.name = "sound_alt2";
50729#endif /* FREECIV_JSON_CONNECTION */
50730 e = 0;
50731 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
50732 if (e) {
50733 log_packet_detailed("'sound_alt2' field error detected");
50734 }
50735#ifdef FREECIV_JSON_CONNECTION
50736 field_addr.name = "helptext";
50737#endif /* FREECIV_JSON_CONNECTION */
50738 e = 0;
50739 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
50740 if (e) {
50741 log_packet_detailed("'helptext' field error detected");
50742 }
50743
50744#endif
50746}
50747
50749{
50750 if (!pc->used) {
50751 log_error("WARNING: trying to send data to the closed connection %s",
50753 return -1;
50754 }
50755 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet != NULL, -1,
50756 "Handler for PACKET_RULESET_GOVERNMENT not installed");
50757 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet(pc, packet);
50758}
50759
50761{
50762 conn_list_iterate(dest, pconn) {
50765}
50766
50767#ifdef FREECIV_DELTA_PROTOCOL
50768#define hash_packet_ruleset_terrain_control_100 hash_const
50769
50770#define cmp_packet_ruleset_terrain_control_100 cmp_const
50771
50773#endif /* FREECIV_DELTA_PROTOCOL */
50774
50776{
50777#ifdef FREECIV_DELTA_PROTOCOL
50780 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_CONTROL;
50781#endif /* FREECIV_DELTA_PROTOCOL */
50783#ifdef FREECIV_JSON_CONNECTION
50784 struct plocation field_addr;
50785 {
50789 }
50790#endif /* FREECIV_JSON_CONNECTION */
50791
50792#ifdef FREECIV_DELTA_PROTOCOL
50793#ifdef FREECIV_JSON_CONNECTION
50794 field_addr.name = "fields";
50795#endif /* FREECIV_JSON_CONNECTION */
50796 DIO_BV_GET(&din, &field_addr, fields);
50797
50798#else /* FREECIV_DELTA_PROTOCOL */
50799#ifdef FREECIV_JSON_CONNECTION
50800 field_addr.name = "ocean_reclaim_requirement_pct";
50801#endif /* FREECIV_JSON_CONNECTION */
50802 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
50803 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
50804 }
50805#ifdef FREECIV_JSON_CONNECTION
50806 field_addr.name = "land_channel_requirement_pct";
50807#endif /* FREECIV_JSON_CONNECTION */
50808 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
50809 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
50810 }
50811#ifdef FREECIV_JSON_CONNECTION
50812 field_addr.name = "terrain_thaw_requirement_pct";
50813#endif /* FREECIV_JSON_CONNECTION */
50814 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
50815 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
50816 }
50817#ifdef FREECIV_JSON_CONNECTION
50818 field_addr.name = "terrain_freeze_requirement_pct";
50819#endif /* FREECIV_JSON_CONNECTION */
50820 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
50821 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
50822 }
50823#ifdef FREECIV_JSON_CONNECTION
50824 field_addr.name = "lake_max_size";
50825#endif /* FREECIV_JSON_CONNECTION */
50826 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
50827 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
50828 }
50829#ifdef FREECIV_JSON_CONNECTION
50830 field_addr.name = "min_start_native_area";
50831#endif /* FREECIV_JSON_CONNECTION */
50832 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
50833 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
50834 }
50835#ifdef FREECIV_JSON_CONNECTION
50836 field_addr.name = "move_fragments";
50837#endif /* FREECIV_JSON_CONNECTION */
50838 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
50839 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
50840 }
50841#ifdef FREECIV_JSON_CONNECTION
50842 field_addr.name = "igter_cost";
50843#endif /* FREECIV_JSON_CONNECTION */
50844 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
50845 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
50846 }
50847#ifdef FREECIV_JSON_CONNECTION
50848 field_addr.name = "pythagorean_diagonal";
50849#endif /* FREECIV_JSON_CONNECTION */
50850 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->pythagorean_diagonal)) {
50851 RECEIVE_PACKET_FIELD_ERROR(pythagorean_diagonal);
50852 }
50853#ifdef FREECIV_JSON_CONNECTION
50854 field_addr.name = "infrapoints";
50855#endif /* FREECIV_JSON_CONNECTION */
50856 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->infrapoints)) {
50857 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
50858 }
50859#ifdef FREECIV_JSON_CONNECTION
50860 field_addr.name = "gui_type_base0";
50861#endif /* FREECIV_JSON_CONNECTION */
50862 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
50863 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
50864 }
50865#ifdef FREECIV_JSON_CONNECTION
50866 field_addr.name = "gui_type_base1";
50867#endif /* FREECIV_JSON_CONNECTION */
50868 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
50869 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
50870 }
50871#endif
50872 log_packet_detailed("packet_ruleset_terrain_control_100: got info about ()");
50873
50874#ifdef FREECIV_DELTA_PROTOCOL
50875 if (NULL == *hash) {
50877 NULL, NULL, NULL, free);
50878 }
50879
50880 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
50881 *real_packet = *old;
50882 } else {
50883 log_packet_detailed(" no old info");
50884 memset(real_packet, 0, sizeof(*real_packet));
50885 }
50886
50887 if (BV_ISSET(fields, 0)) {
50888 log_packet_detailed(" got field 'ocean_reclaim_requirement_pct'");
50889#ifdef FREECIV_JSON_CONNECTION
50890 field_addr.name = "ocean_reclaim_requirement_pct";
50891#endif /* FREECIV_JSON_CONNECTION */
50892 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
50893 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
50894 }
50895 }
50896 if (BV_ISSET(fields, 1)) {
50897 log_packet_detailed(" got field 'land_channel_requirement_pct'");
50898#ifdef FREECIV_JSON_CONNECTION
50899 field_addr.name = "land_channel_requirement_pct";
50900#endif /* FREECIV_JSON_CONNECTION */
50901 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
50902 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
50903 }
50904 }
50905 if (BV_ISSET(fields, 2)) {
50906 log_packet_detailed(" got field 'terrain_thaw_requirement_pct'");
50907#ifdef FREECIV_JSON_CONNECTION
50908 field_addr.name = "terrain_thaw_requirement_pct";
50909#endif /* FREECIV_JSON_CONNECTION */
50910 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
50911 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
50912 }
50913 }
50914 if (BV_ISSET(fields, 3)) {
50915 log_packet_detailed(" got field 'terrain_freeze_requirement_pct'");
50916#ifdef FREECIV_JSON_CONNECTION
50917 field_addr.name = "terrain_freeze_requirement_pct";
50918#endif /* FREECIV_JSON_CONNECTION */
50919 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
50920 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
50921 }
50922 }
50923 if (BV_ISSET(fields, 4)) {
50924 log_packet_detailed(" got field 'lake_max_size'");
50925#ifdef FREECIV_JSON_CONNECTION
50926 field_addr.name = "lake_max_size";
50927#endif /* FREECIV_JSON_CONNECTION */
50928 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
50929 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
50930 }
50931 }
50932 if (BV_ISSET(fields, 5)) {
50933 log_packet_detailed(" got field 'min_start_native_area'");
50934#ifdef FREECIV_JSON_CONNECTION
50935 field_addr.name = "min_start_native_area";
50936#endif /* FREECIV_JSON_CONNECTION */
50937 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
50938 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
50939 }
50940 }
50941 if (BV_ISSET(fields, 6)) {
50942 log_packet_detailed(" got field 'move_fragments'");
50943#ifdef FREECIV_JSON_CONNECTION
50944 field_addr.name = "move_fragments";
50945#endif /* FREECIV_JSON_CONNECTION */
50946 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
50947 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
50948 }
50949 }
50950 if (BV_ISSET(fields, 7)) {
50951 log_packet_detailed(" got field 'igter_cost'");
50952#ifdef FREECIV_JSON_CONNECTION
50953 field_addr.name = "igter_cost";
50954#endif /* FREECIV_JSON_CONNECTION */
50955 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
50956 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
50957 }
50958 }
50959 real_packet->pythagorean_diagonal = BV_ISSET(fields, 8);
50960 real_packet->infrapoints = BV_ISSET(fields, 9);
50961 if (BV_ISSET(fields, 10)) {
50962 log_packet_detailed(" got field 'gui_type_base0'");
50963#ifdef FREECIV_JSON_CONNECTION
50964 field_addr.name = "gui_type_base0";
50965#endif /* FREECIV_JSON_CONNECTION */
50966 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
50967 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
50968 }
50969 }
50970 if (BV_ISSET(fields, 11)) {
50971 log_packet_detailed(" got field 'gui_type_base1'");
50972#ifdef FREECIV_JSON_CONNECTION
50973 field_addr.name = "gui_type_base1";
50974#endif /* FREECIV_JSON_CONNECTION */
50975 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
50976 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
50977 }
50978 }
50979
50980 if (NULL == old) {
50981 old = fc_malloc(sizeof(*old));
50982 *old = *real_packet;
50983 genhash_insert(*hash, old, old);
50984 } else {
50985 *old = *real_packet;
50986 }
50987
50988#endif /* FREECIV_DELTA_PROTOCOL */
50990}
50991
50993{
50994 const struct packet_ruleset_terrain_control *real_packet = packet;
50995 int e;
50996#ifdef FREECIV_DELTA_PROTOCOL
50999 bool differ;
51000 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_CONTROL;
51001#endif /* FREECIV_DELTA_PROTOCOL */
51003#ifdef FREECIV_JSON_CONNECTION
51004 struct plocation field_addr;
51005 {
51009 }
51010#endif /* FREECIV_JSON_CONNECTION */
51011
51012 log_packet_detailed("packet_ruleset_terrain_control_100: sending info about ()");
51013
51014#ifdef FREECIV_DELTA_PROTOCOL
51015 if (NULL == *hash) {
51017 NULL, NULL, NULL, free);
51018 }
51019 BV_CLR_ALL(fields);
51020
51021 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51022 old = fc_malloc(sizeof(*old));
51023 *old = *real_packet;
51024 genhash_insert(*hash, old, old);
51025 memset(old, 0, sizeof(*old));
51026 }
51027 differ = (old->ocean_reclaim_requirement_pct != real_packet->ocean_reclaim_requirement_pct);
51028 if (differ) {
51029 BV_SET(fields, 0);
51030 }
51031
51032 differ = (old->land_channel_requirement_pct != real_packet->land_channel_requirement_pct);
51033 if (differ) {
51034 BV_SET(fields, 1);
51035 }
51036
51037 differ = (old->terrain_thaw_requirement_pct != real_packet->terrain_thaw_requirement_pct);
51038 if (differ) {
51039 BV_SET(fields, 2);
51040 }
51041
51042 differ = (old->terrain_freeze_requirement_pct != real_packet->terrain_freeze_requirement_pct);
51043 if (differ) {
51044 BV_SET(fields, 3);
51045 }
51046
51047 differ = (old->lake_max_size != real_packet->lake_max_size);
51048 if (differ) {
51049 BV_SET(fields, 4);
51050 }
51051
51052 differ = (old->min_start_native_area != real_packet->min_start_native_area);
51053 if (differ) {
51054 BV_SET(fields, 5);
51055 }
51056
51057 differ = (old->move_fragments != real_packet->move_fragments);
51058 if (differ) {
51059 BV_SET(fields, 6);
51060 }
51061
51062 differ = (old->igter_cost != real_packet->igter_cost);
51063 if (differ) {
51064 BV_SET(fields, 7);
51065 }
51066
51067 if (packet->pythagorean_diagonal) {
51068 BV_SET(fields, 8);
51069 }
51070
51071 if (packet->infrapoints) {
51072 BV_SET(fields, 9);
51073 }
51074
51075 differ = (strcmp(old->gui_type_base0, real_packet->gui_type_base0) != 0);
51076 if (differ) {
51077 BV_SET(fields, 10);
51078 }
51079
51080 differ = (strcmp(old->gui_type_base1, real_packet->gui_type_base1) != 0);
51081 if (differ) {
51082 BV_SET(fields, 11);
51083 }
51084
51085
51086#ifdef FREECIV_JSON_CONNECTION
51087 field_addr.name = "fields";
51088#endif /* FREECIV_JSON_CONNECTION */
51089 e = 0;
51090 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51091 if (e) {
51092 log_packet_detailed("fields bitvector error detected");
51093 }
51094
51095 if (BV_ISSET(fields, 0)) {
51096 log_packet_detailed(" field 'ocean_reclaim_requirement_pct' has changed");
51097#ifdef FREECIV_JSON_CONNECTION
51098 field_addr.name = "ocean_reclaim_requirement_pct";
51099#endif /* FREECIV_JSON_CONNECTION */
51100 e = 0;
51101 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
51102 if (e) {
51103 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
51104 }
51105 }
51106 if (BV_ISSET(fields, 1)) {
51107 log_packet_detailed(" field 'land_channel_requirement_pct' has changed");
51108#ifdef FREECIV_JSON_CONNECTION
51109 field_addr.name = "land_channel_requirement_pct";
51110#endif /* FREECIV_JSON_CONNECTION */
51111 e = 0;
51112 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
51113 if (e) {
51114 log_packet_detailed("'land_channel_requirement_pct' field error detected");
51115 }
51116 }
51117 if (BV_ISSET(fields, 2)) {
51118 log_packet_detailed(" field 'terrain_thaw_requirement_pct' has changed");
51119#ifdef FREECIV_JSON_CONNECTION
51120 field_addr.name = "terrain_thaw_requirement_pct";
51121#endif /* FREECIV_JSON_CONNECTION */
51122 e = 0;
51123 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
51124 if (e) {
51125 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
51126 }
51127 }
51128 if (BV_ISSET(fields, 3)) {
51129 log_packet_detailed(" field 'terrain_freeze_requirement_pct' has changed");
51130#ifdef FREECIV_JSON_CONNECTION
51131 field_addr.name = "terrain_freeze_requirement_pct";
51132#endif /* FREECIV_JSON_CONNECTION */
51133 e = 0;
51134 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
51135 if (e) {
51136 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
51137 }
51138 }
51139 if (BV_ISSET(fields, 4)) {
51140 log_packet_detailed(" field 'lake_max_size' has changed");
51141#ifdef FREECIV_JSON_CONNECTION
51142 field_addr.name = "lake_max_size";
51143#endif /* FREECIV_JSON_CONNECTION */
51144 e = 0;
51145 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
51146 if (e) {
51147 log_packet_detailed("'lake_max_size' field error detected");
51148 }
51149 }
51150 if (BV_ISSET(fields, 5)) {
51151 log_packet_detailed(" field 'min_start_native_area' has changed");
51152#ifdef FREECIV_JSON_CONNECTION
51153 field_addr.name = "min_start_native_area";
51154#endif /* FREECIV_JSON_CONNECTION */
51155 e = 0;
51156 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
51157 if (e) {
51158 log_packet_detailed("'min_start_native_area' field error detected");
51159 }
51160 }
51161 if (BV_ISSET(fields, 6)) {
51162 log_packet_detailed(" field 'move_fragments' has changed");
51163#ifdef FREECIV_JSON_CONNECTION
51164 field_addr.name = "move_fragments";
51165#endif /* FREECIV_JSON_CONNECTION */
51166 e = 0;
51167 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
51168 if (e) {
51169 log_packet_detailed("'move_fragments' field error detected");
51170 }
51171 }
51172 if (BV_ISSET(fields, 7)) {
51173 log_packet_detailed(" field 'igter_cost' has changed");
51174#ifdef FREECIV_JSON_CONNECTION
51175 field_addr.name = "igter_cost";
51176#endif /* FREECIV_JSON_CONNECTION */
51177 e = 0;
51178 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
51179 if (e) {
51180 log_packet_detailed("'igter_cost' field error detected");
51181 }
51182 }
51183 /* field 8 is folded into the header */
51184 /* field 9 is folded into the header */
51185 if (BV_ISSET(fields, 10)) {
51186 log_packet_detailed(" field 'gui_type_base0' has changed");
51187#ifdef FREECIV_JSON_CONNECTION
51188 field_addr.name = "gui_type_base0";
51189#endif /* FREECIV_JSON_CONNECTION */
51190 e = 0;
51191 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
51192 if (e) {
51193 log_packet_detailed("'gui_type_base0' field error detected");
51194 }
51195 }
51196 if (BV_ISSET(fields, 11)) {
51197 log_packet_detailed(" field 'gui_type_base1' has changed");
51198#ifdef FREECIV_JSON_CONNECTION
51199 field_addr.name = "gui_type_base1";
51200#endif /* FREECIV_JSON_CONNECTION */
51201 e = 0;
51202 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
51203 if (e) {
51204 log_packet_detailed("'gui_type_base1' field error detected");
51205 }
51206 }
51207
51208 *old = *real_packet;
51209#endif /* FREECIV_DELTA_PROTOCOL */
51210#ifndef FREECIV_DELTA_PROTOCOL
51211#ifdef FREECIV_JSON_CONNECTION
51212 field_addr.name = "ocean_reclaim_requirement_pct";
51213#endif /* FREECIV_JSON_CONNECTION */
51214 e = 0;
51215 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
51216 if (e) {
51217 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
51218 }
51219#ifdef FREECIV_JSON_CONNECTION
51220 field_addr.name = "land_channel_requirement_pct";
51221#endif /* FREECIV_JSON_CONNECTION */
51222 e = 0;
51223 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
51224 if (e) {
51225 log_packet_detailed("'land_channel_requirement_pct' field error detected");
51226 }
51227#ifdef FREECIV_JSON_CONNECTION
51228 field_addr.name = "terrain_thaw_requirement_pct";
51229#endif /* FREECIV_JSON_CONNECTION */
51230 e = 0;
51231 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
51232 if (e) {
51233 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
51234 }
51235#ifdef FREECIV_JSON_CONNECTION
51236 field_addr.name = "terrain_freeze_requirement_pct";
51237#endif /* FREECIV_JSON_CONNECTION */
51238 e = 0;
51239 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
51240 if (e) {
51241 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
51242 }
51243#ifdef FREECIV_JSON_CONNECTION
51244 field_addr.name = "lake_max_size";
51245#endif /* FREECIV_JSON_CONNECTION */
51246 e = 0;
51247 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
51248 if (e) {
51249 log_packet_detailed("'lake_max_size' field error detected");
51250 }
51251#ifdef FREECIV_JSON_CONNECTION
51252 field_addr.name = "min_start_native_area";
51253#endif /* FREECIV_JSON_CONNECTION */
51254 e = 0;
51255 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
51256 if (e) {
51257 log_packet_detailed("'min_start_native_area' field error detected");
51258 }
51259#ifdef FREECIV_JSON_CONNECTION
51260 field_addr.name = "move_fragments";
51261#endif /* FREECIV_JSON_CONNECTION */
51262 e = 0;
51263 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
51264 if (e) {
51265 log_packet_detailed("'move_fragments' field error detected");
51266 }
51267#ifdef FREECIV_JSON_CONNECTION
51268 field_addr.name = "igter_cost";
51269#endif /* FREECIV_JSON_CONNECTION */
51270 e = 0;
51271 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
51272 if (e) {
51273 log_packet_detailed("'igter_cost' field error detected");
51274 }
51275#ifdef FREECIV_JSON_CONNECTION
51276 field_addr.name = "pythagorean_diagonal";
51277#endif /* FREECIV_JSON_CONNECTION */
51278 e = 0;
51279 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->pythagorean_diagonal);
51280 if (e) {
51281 log_packet_detailed("'pythagorean_diagonal' field error detected");
51282 }
51283#ifdef FREECIV_JSON_CONNECTION
51284 field_addr.name = "infrapoints";
51285#endif /* FREECIV_JSON_CONNECTION */
51286 e = 0;
51287 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->infrapoints);
51288 if (e) {
51289 log_packet_detailed("'infrapoints' field error detected");
51290 }
51291#ifdef FREECIV_JSON_CONNECTION
51292 field_addr.name = "gui_type_base0";
51293#endif /* FREECIV_JSON_CONNECTION */
51294 e = 0;
51295 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
51296 if (e) {
51297 log_packet_detailed("'gui_type_base0' field error detected");
51298 }
51299#ifdef FREECIV_JSON_CONNECTION
51300 field_addr.name = "gui_type_base1";
51301#endif /* FREECIV_JSON_CONNECTION */
51302 e = 0;
51303 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
51304 if (e) {
51305 log_packet_detailed("'gui_type_base1' field error detected");
51306 }
51307
51308#endif
51310}
51311
51313{
51314 if (!pc->used) {
51315 log_error("WARNING: trying to send data to the closed connection %s",
51317 return -1;
51318 }
51319 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet != NULL, -1,
51320 "Handler for PACKET_RULESET_TERRAIN_CONTROL not installed");
51321 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet(pc, packet);
51322}
51323
51330
51332{
51334#if 1 /* To match endif */
51335 real_packet->__dummy = 0xff;
51336#endif
51337 log_packet_detailed("packet_rulesets_ready_100: got info about ()");
51339}
51340
51342{
51344
51345 log_packet_detailed("packet_rulesets_ready_100: sending info about ()");
51347}
51348
51350{
51351 if (!pc->used) {
51352 log_error("WARNING: trying to send data to the closed connection %s",
51354 return -1;
51355 }
51356 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet != NULL, -1,
51357 "Handler for PACKET_RULESETS_READY not installed");
51358 return pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet(pc);
51359}
51360
51367
51368#ifdef FREECIV_DELTA_PROTOCOL
51369#define hash_packet_ruleset_nation_sets_100 hash_const
51370
51371#define cmp_packet_ruleset_nation_sets_100 cmp_const
51372
51374#endif /* FREECIV_DELTA_PROTOCOL */
51375
51377{
51378#ifdef FREECIV_DELTA_PROTOCOL
51380 struct packet_ruleset_nation_sets *old;
51381 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_SETS;
51382#endif /* FREECIV_DELTA_PROTOCOL */
51384#ifdef FREECIV_JSON_CONNECTION
51385 struct plocation field_addr;
51386 {
51390 }
51391#endif /* FREECIV_JSON_CONNECTION */
51392
51393#ifdef FREECIV_DELTA_PROTOCOL
51394#ifdef FREECIV_JSON_CONNECTION
51395 field_addr.name = "fields";
51396#endif /* FREECIV_JSON_CONNECTION */
51397 DIO_BV_GET(&din, &field_addr, fields);
51398
51399#else /* FREECIV_DELTA_PROTOCOL */
51400#ifdef FREECIV_JSON_CONNECTION
51401 field_addr.name = "nsets";
51402#endif /* FREECIV_JSON_CONNECTION */
51403 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
51405 }
51406#ifdef FREECIV_JSON_CONNECTION
51407 field_addr.name = "names";
51408#endif /* FREECIV_JSON_CONNECTION */
51409 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
51410 RECEIVE_PACKET_FIELD_ERROR(names, ": truncation array");
51411 }
51412 {
51413 int i;
51414
51415#ifdef FREECIV_JSON_CONNECTION
51416 /* Enter array. */
51417 field_addr.sub_location = plocation_elem_new(0);
51418#endif /* FREECIV_JSON_CONNECTION */
51419
51420 for (i = 0; i < real_packet->nsets; i++) {
51421#ifdef FREECIV_JSON_CONNECTION
51422 field_addr.sub_location->number = i;
51423#endif /* FREECIV_JSON_CONNECTION */
51424
51425 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
51427 }
51428 }
51429
51430#ifdef FREECIV_JSON_CONNECTION
51431 /* Exit array. */
51432 FC_FREE(field_addr.sub_location);
51433#endif /* FREECIV_JSON_CONNECTION */
51434 }
51435#ifdef FREECIV_JSON_CONNECTION
51436 field_addr.name = "rule_names";
51437#endif /* FREECIV_JSON_CONNECTION */
51438 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
51439 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": truncation array");
51440 }
51441 {
51442 int i;
51443
51444#ifdef FREECIV_JSON_CONNECTION
51445 /* Enter array. */
51446 field_addr.sub_location = plocation_elem_new(0);
51447#endif /* FREECIV_JSON_CONNECTION */
51448
51449 for (i = 0; i < real_packet->nsets; i++) {
51450#ifdef FREECIV_JSON_CONNECTION
51451 field_addr.sub_location->number = i;
51452#endif /* FREECIV_JSON_CONNECTION */
51453
51454 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
51455 RECEIVE_PACKET_FIELD_ERROR(rule_names);
51456 }
51457 }
51458
51459#ifdef FREECIV_JSON_CONNECTION
51460 /* Exit array. */
51461 FC_FREE(field_addr.sub_location);
51462#endif /* FREECIV_JSON_CONNECTION */
51463 }
51464#ifdef FREECIV_JSON_CONNECTION
51465 field_addr.name = "descriptions";
51466#endif /* FREECIV_JSON_CONNECTION */
51467 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
51468 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": truncation array");
51469 }
51470 {
51471 int i;
51472
51473#ifdef FREECIV_JSON_CONNECTION
51474 /* Enter array. */
51475 field_addr.sub_location = plocation_elem_new(0);
51476#endif /* FREECIV_JSON_CONNECTION */
51477
51478 for (i = 0; i < real_packet->nsets; i++) {
51479#ifdef FREECIV_JSON_CONNECTION
51480 field_addr.sub_location->number = i;
51481#endif /* FREECIV_JSON_CONNECTION */
51482
51483 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
51484 RECEIVE_PACKET_FIELD_ERROR(descriptions);
51485 }
51486 }
51487
51488#ifdef FREECIV_JSON_CONNECTION
51489 /* Exit array. */
51490 FC_FREE(field_addr.sub_location);
51491#endif /* FREECIV_JSON_CONNECTION */
51492 }
51493#endif
51494 log_packet_detailed("packet_ruleset_nation_sets_100: got info about ()");
51495
51496#ifdef FREECIV_DELTA_PROTOCOL
51497 if (NULL == *hash) {
51499 NULL, NULL, NULL, free);
51500 }
51501
51502 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51503 *real_packet = *old;
51504 } else {
51505 log_packet_detailed(" no old info");
51506 memset(real_packet, 0, sizeof(*real_packet));
51507 }
51508
51509 if (BV_ISSET(fields, 0)) {
51510 log_packet_detailed(" got field 'nsets'");
51511#ifdef FREECIV_JSON_CONNECTION
51512 field_addr.name = "nsets";
51513#endif /* FREECIV_JSON_CONNECTION */
51514 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
51516 }
51517 }
51518 if (BV_ISSET(fields, 1)) {
51519 log_packet_detailed(" got field 'names'");
51520#ifdef FREECIV_JSON_CONNECTION
51521 field_addr.name = "names";
51522#endif /* FREECIV_JSON_CONNECTION */
51523 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
51524 RECEIVE_PACKET_FIELD_ERROR(names, ": truncation array");
51525 }
51526 {
51527 int i;
51528
51529#ifdef FREECIV_JSON_CONNECTION
51530 /* Enter array. */
51531 field_addr.sub_location = plocation_elem_new(0);
51532#endif /* FREECIV_JSON_CONNECTION */
51533
51534 for (i = 0; i < real_packet->nsets; i++) {
51535#ifdef FREECIV_JSON_CONNECTION
51536 field_addr.sub_location->number = i;
51537#endif /* FREECIV_JSON_CONNECTION */
51538
51539 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
51541 }
51542 }
51543
51544#ifdef FREECIV_JSON_CONNECTION
51545 /* Exit array. */
51546 FC_FREE(field_addr.sub_location);
51547#endif /* FREECIV_JSON_CONNECTION */
51548 }
51549 }
51550 if (BV_ISSET(fields, 2)) {
51551 log_packet_detailed(" got field 'rule_names'");
51552#ifdef FREECIV_JSON_CONNECTION
51553 field_addr.name = "rule_names";
51554#endif /* FREECIV_JSON_CONNECTION */
51555 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
51556 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": truncation array");
51557 }
51558 {
51559 int i;
51560
51561#ifdef FREECIV_JSON_CONNECTION
51562 /* Enter array. */
51563 field_addr.sub_location = plocation_elem_new(0);
51564#endif /* FREECIV_JSON_CONNECTION */
51565
51566 for (i = 0; i < real_packet->nsets; i++) {
51567#ifdef FREECIV_JSON_CONNECTION
51568 field_addr.sub_location->number = i;
51569#endif /* FREECIV_JSON_CONNECTION */
51570
51571 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
51572 RECEIVE_PACKET_FIELD_ERROR(rule_names);
51573 }
51574 }
51575
51576#ifdef FREECIV_JSON_CONNECTION
51577 /* Exit array. */
51578 FC_FREE(field_addr.sub_location);
51579#endif /* FREECIV_JSON_CONNECTION */
51580 }
51581 }
51582 if (BV_ISSET(fields, 3)) {
51583 log_packet_detailed(" got field 'descriptions'");
51584#ifdef FREECIV_JSON_CONNECTION
51585 field_addr.name = "descriptions";
51586#endif /* FREECIV_JSON_CONNECTION */
51587 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
51588 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": truncation array");
51589 }
51590 {
51591 int i;
51592
51593#ifdef FREECIV_JSON_CONNECTION
51594 /* Enter array. */
51595 field_addr.sub_location = plocation_elem_new(0);
51596#endif /* FREECIV_JSON_CONNECTION */
51597
51598 for (i = 0; i < real_packet->nsets; i++) {
51599#ifdef FREECIV_JSON_CONNECTION
51600 field_addr.sub_location->number = i;
51601#endif /* FREECIV_JSON_CONNECTION */
51602
51603 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
51604 RECEIVE_PACKET_FIELD_ERROR(descriptions);
51605 }
51606 }
51607
51608#ifdef FREECIV_JSON_CONNECTION
51609 /* Exit array. */
51610 FC_FREE(field_addr.sub_location);
51611#endif /* FREECIV_JSON_CONNECTION */
51612 }
51613 }
51614
51615 if (NULL == old) {
51616 old = fc_malloc(sizeof(*old));
51617 *old = *real_packet;
51618 genhash_insert(*hash, old, old);
51619 } else {
51620 *old = *real_packet;
51621 }
51622
51623#endif /* FREECIV_DELTA_PROTOCOL */
51625}
51626
51628{
51629 const struct packet_ruleset_nation_sets *real_packet = packet;
51630 int e;
51631#ifdef FREECIV_DELTA_PROTOCOL
51633 struct packet_ruleset_nation_sets *old;
51634 bool differ;
51635 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_SETS;
51636#endif /* FREECIV_DELTA_PROTOCOL */
51638#ifdef FREECIV_JSON_CONNECTION
51639 struct plocation field_addr;
51640 {
51644 }
51645#endif /* FREECIV_JSON_CONNECTION */
51646
51647 log_packet_detailed("packet_ruleset_nation_sets_100: sending info about ()");
51648
51649#ifdef FREECIV_DELTA_PROTOCOL
51650 if (NULL == *hash) {
51652 NULL, NULL, NULL, free);
51653 }
51654 BV_CLR_ALL(fields);
51655
51656 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51657 old = fc_malloc(sizeof(*old));
51658 *old = *real_packet;
51659 genhash_insert(*hash, old, old);
51660 memset(old, 0, sizeof(*old));
51661 }
51662 differ = (old->nsets != real_packet->nsets);
51663 if (differ) {
51664 BV_SET(fields, 0);
51665 }
51666
51667 differ = (old->nsets != real_packet->nsets);
51668 if (!differ) {
51669 int i;
51670
51671 for (i = 0; i < real_packet->nsets; i++) {
51672 differ = (strcmp(old->names[i], real_packet->names[i]) != 0);
51673 if (differ) {
51674 break;
51675 }
51676 }
51677 }
51678 if (differ) {
51679 BV_SET(fields, 1);
51680 }
51681
51682 differ = (old->nsets != real_packet->nsets);
51683 if (!differ) {
51684 int i;
51685
51686 for (i = 0; i < real_packet->nsets; i++) {
51687 differ = (strcmp(old->rule_names[i], real_packet->rule_names[i]) != 0);
51688 if (differ) {
51689 break;
51690 }
51691 }
51692 }
51693 if (differ) {
51694 BV_SET(fields, 2);
51695 }
51696
51697 differ = (old->nsets != real_packet->nsets);
51698 if (!differ) {
51699 int i;
51700
51701 for (i = 0; i < real_packet->nsets; i++) {
51702 differ = (strcmp(old->descriptions[i], real_packet->descriptions[i]) != 0);
51703 if (differ) {
51704 break;
51705 }
51706 }
51707 }
51708 if (differ) {
51709 BV_SET(fields, 3);
51710 }
51711
51712
51713#ifdef FREECIV_JSON_CONNECTION
51714 field_addr.name = "fields";
51715#endif /* FREECIV_JSON_CONNECTION */
51716 e = 0;
51717 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51718 if (e) {
51719 log_packet_detailed("fields bitvector error detected");
51720 }
51721
51722 if (BV_ISSET(fields, 0)) {
51723 log_packet_detailed(" field 'nsets' has changed");
51724#ifdef FREECIV_JSON_CONNECTION
51725 field_addr.name = "nsets";
51726#endif /* FREECIV_JSON_CONNECTION */
51727 e = 0;
51728 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
51729 if (e) {
51730 log_packet_detailed("'nsets' field error detected");
51731 }
51732 }
51733 if (BV_ISSET(fields, 1)) {
51734 log_packet_detailed(" field 'names' has changed");
51735#ifdef FREECIV_JSON_CONNECTION
51736 field_addr.name = "names";
51737#endif /* FREECIV_JSON_CONNECTION */
51738 e = 0;
51739 {
51740 int i;
51741
51742#ifdef FREECIV_JSON_CONNECTION
51743 /* Create the array. */
51744 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
51745
51746 /* Enter the array. */
51747 field_addr.sub_location = plocation_elem_new(0);
51748#endif /* FREECIV_JSON_CONNECTION */
51749
51750 for (i = 0; i < real_packet->nsets; i++) {
51751#ifdef FREECIV_JSON_CONNECTION
51752 /* Next array element. */
51753 field_addr.sub_location->number = i;
51754#endif /* FREECIV_JSON_CONNECTION */
51755
51756 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
51757 }
51758
51759#ifdef FREECIV_JSON_CONNECTION
51760 /* Exit array. */
51761 FC_FREE(field_addr.sub_location);
51762#endif /* FREECIV_JSON_CONNECTION */
51763 }
51764 if (e) {
51765 log_packet_detailed("'names' field error detected");
51766 }
51767 }
51768 if (BV_ISSET(fields, 2)) {
51769 log_packet_detailed(" field 'rule_names' has changed");
51770#ifdef FREECIV_JSON_CONNECTION
51771 field_addr.name = "rule_names";
51772#endif /* FREECIV_JSON_CONNECTION */
51773 e = 0;
51774 {
51775 int i;
51776
51777#ifdef FREECIV_JSON_CONNECTION
51778 /* Create the array. */
51779 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
51780
51781 /* Enter the array. */
51782 field_addr.sub_location = plocation_elem_new(0);
51783#endif /* FREECIV_JSON_CONNECTION */
51784
51785 for (i = 0; i < real_packet->nsets; i++) {
51786#ifdef FREECIV_JSON_CONNECTION
51787 /* Next array element. */
51788 field_addr.sub_location->number = i;
51789#endif /* FREECIV_JSON_CONNECTION */
51790
51791 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
51792 }
51793
51794#ifdef FREECIV_JSON_CONNECTION
51795 /* Exit array. */
51796 FC_FREE(field_addr.sub_location);
51797#endif /* FREECIV_JSON_CONNECTION */
51798 }
51799 if (e) {
51800 log_packet_detailed("'rule_names' field error detected");
51801 }
51802 }
51803 if (BV_ISSET(fields, 3)) {
51804 log_packet_detailed(" field 'descriptions' has changed");
51805#ifdef FREECIV_JSON_CONNECTION
51806 field_addr.name = "descriptions";
51807#endif /* FREECIV_JSON_CONNECTION */
51808 e = 0;
51809 {
51810 int i;
51811
51812#ifdef FREECIV_JSON_CONNECTION
51813 /* Create the array. */
51814 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
51815
51816 /* Enter the array. */
51817 field_addr.sub_location = plocation_elem_new(0);
51818#endif /* FREECIV_JSON_CONNECTION */
51819
51820 for (i = 0; i < real_packet->nsets; i++) {
51821#ifdef FREECIV_JSON_CONNECTION
51822 /* Next array element. */
51823 field_addr.sub_location->number = i;
51824#endif /* FREECIV_JSON_CONNECTION */
51825
51826 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
51827 }
51828
51829#ifdef FREECIV_JSON_CONNECTION
51830 /* Exit array. */
51831 FC_FREE(field_addr.sub_location);
51832#endif /* FREECIV_JSON_CONNECTION */
51833 }
51834 if (e) {
51835 log_packet_detailed("'descriptions' field error detected");
51836 }
51837 }
51838
51839 *old = *real_packet;
51840#endif /* FREECIV_DELTA_PROTOCOL */
51841#ifndef FREECIV_DELTA_PROTOCOL
51842#ifdef FREECIV_JSON_CONNECTION
51843 field_addr.name = "nsets";
51844#endif /* FREECIV_JSON_CONNECTION */
51845 e = 0;
51846 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
51847 if (e) {
51848 log_packet_detailed("'nsets' field error detected");
51849 }
51850#ifdef FREECIV_JSON_CONNECTION
51851 field_addr.name = "names";
51852#endif /* FREECIV_JSON_CONNECTION */
51853 e = 0;
51854 {
51855 int i;
51856
51857#ifdef FREECIV_JSON_CONNECTION
51858 /* Create the array. */
51859 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
51860
51861 /* Enter the array. */
51862 field_addr.sub_location = plocation_elem_new(0);
51863#endif /* FREECIV_JSON_CONNECTION */
51864
51865 for (i = 0; i < real_packet->nsets; i++) {
51866#ifdef FREECIV_JSON_CONNECTION
51867 /* Next array element. */
51868 field_addr.sub_location->number = i;
51869#endif /* FREECIV_JSON_CONNECTION */
51870
51871 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
51872 }
51873
51874#ifdef FREECIV_JSON_CONNECTION
51875 /* Exit array. */
51876 FC_FREE(field_addr.sub_location);
51877#endif /* FREECIV_JSON_CONNECTION */
51878 }
51879 if (e) {
51880 log_packet_detailed("'names' field error detected");
51881 }
51882#ifdef FREECIV_JSON_CONNECTION
51883 field_addr.name = "rule_names";
51884#endif /* FREECIV_JSON_CONNECTION */
51885 e = 0;
51886 {
51887 int i;
51888
51889#ifdef FREECIV_JSON_CONNECTION
51890 /* Create the array. */
51891 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
51892
51893 /* Enter the array. */
51894 field_addr.sub_location = plocation_elem_new(0);
51895#endif /* FREECIV_JSON_CONNECTION */
51896
51897 for (i = 0; i < real_packet->nsets; i++) {
51898#ifdef FREECIV_JSON_CONNECTION
51899 /* Next array element. */
51900 field_addr.sub_location->number = i;
51901#endif /* FREECIV_JSON_CONNECTION */
51902
51903 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
51904 }
51905
51906#ifdef FREECIV_JSON_CONNECTION
51907 /* Exit array. */
51908 FC_FREE(field_addr.sub_location);
51909#endif /* FREECIV_JSON_CONNECTION */
51910 }
51911 if (e) {
51912 log_packet_detailed("'rule_names' field error detected");
51913 }
51914#ifdef FREECIV_JSON_CONNECTION
51915 field_addr.name = "descriptions";
51916#endif /* FREECIV_JSON_CONNECTION */
51917 e = 0;
51918 {
51919 int i;
51920
51921#ifdef FREECIV_JSON_CONNECTION
51922 /* Create the array. */
51923 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
51924
51925 /* Enter the array. */
51926 field_addr.sub_location = plocation_elem_new(0);
51927#endif /* FREECIV_JSON_CONNECTION */
51928
51929 for (i = 0; i < real_packet->nsets; i++) {
51930#ifdef FREECIV_JSON_CONNECTION
51931 /* Next array element. */
51932 field_addr.sub_location->number = i;
51933#endif /* FREECIV_JSON_CONNECTION */
51934
51935 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
51936 }
51937
51938#ifdef FREECIV_JSON_CONNECTION
51939 /* Exit array. */
51940 FC_FREE(field_addr.sub_location);
51941#endif /* FREECIV_JSON_CONNECTION */
51942 }
51943 if (e) {
51944 log_packet_detailed("'descriptions' field error detected");
51945 }
51946
51947#endif
51949}
51950
51952{
51953 if (!pc->used) {
51954 log_error("WARNING: trying to send data to the closed connection %s",
51956 return -1;
51957 }
51958 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet != NULL, -1,
51959 "Handler for PACKET_RULESET_NATION_SETS not installed");
51960 return pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet(pc, packet);
51961}
51962
51964{
51965 conn_list_iterate(dest, pconn) {
51968}
51969
51970#ifdef FREECIV_DELTA_PROTOCOL
51971#define hash_packet_ruleset_nation_groups_100 hash_const
51972
51973#define cmp_packet_ruleset_nation_groups_100 cmp_const
51974
51976#endif /* FREECIV_DELTA_PROTOCOL */
51977
51979{
51980#ifdef FREECIV_DELTA_PROTOCOL
51982 struct packet_ruleset_nation_groups *old;
51983 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_GROUPS;
51984#endif /* FREECIV_DELTA_PROTOCOL */
51986#ifdef FREECIV_JSON_CONNECTION
51987 struct plocation field_addr;
51988 {
51992 }
51993#endif /* FREECIV_JSON_CONNECTION */
51994
51995#ifdef FREECIV_DELTA_PROTOCOL
51996#ifdef FREECIV_JSON_CONNECTION
51997 field_addr.name = "fields";
51998#endif /* FREECIV_JSON_CONNECTION */
51999 DIO_BV_GET(&din, &field_addr, fields);
52000
52001#else /* FREECIV_DELTA_PROTOCOL */
52002#ifdef FREECIV_JSON_CONNECTION
52003 field_addr.name = "ngroups";
52004#endif /* FREECIV_JSON_CONNECTION */
52005 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
52007 }
52008#ifdef FREECIV_JSON_CONNECTION
52009 field_addr.name = "groups";
52010#endif /* FREECIV_JSON_CONNECTION */
52011 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
52012 RECEIVE_PACKET_FIELD_ERROR(groups, ": truncation array");
52013 }
52014 {
52015 int i;
52016
52017#ifdef FREECIV_JSON_CONNECTION
52018 /* Enter array. */
52019 field_addr.sub_location = plocation_elem_new(0);
52020#endif /* FREECIV_JSON_CONNECTION */
52021
52022 for (i = 0; i < real_packet->ngroups; i++) {
52023#ifdef FREECIV_JSON_CONNECTION
52024 field_addr.sub_location->number = i;
52025#endif /* FREECIV_JSON_CONNECTION */
52026
52027 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
52029 }
52030 }
52031
52032#ifdef FREECIV_JSON_CONNECTION
52033 /* Exit array. */
52034 FC_FREE(field_addr.sub_location);
52035#endif /* FREECIV_JSON_CONNECTION */
52036 }
52037#ifdef FREECIV_JSON_CONNECTION
52038 field_addr.name = "hidden";
52039#endif /* FREECIV_JSON_CONNECTION */
52040 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
52041 RECEIVE_PACKET_FIELD_ERROR(hidden, ": truncation array");
52042 }
52043 {
52044 int i;
52045
52046#ifdef FREECIV_JSON_CONNECTION
52047 /* Enter array. */
52048 field_addr.sub_location = plocation_elem_new(0);
52049#endif /* FREECIV_JSON_CONNECTION */
52050
52051 for (i = 0; i < real_packet->ngroups; i++) {
52052#ifdef FREECIV_JSON_CONNECTION
52053 field_addr.sub_location->number = i;
52054#endif /* FREECIV_JSON_CONNECTION */
52055
52056 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
52058 }
52059 }
52060
52061#ifdef FREECIV_JSON_CONNECTION
52062 /* Exit array. */
52063 FC_FREE(field_addr.sub_location);
52064#endif /* FREECIV_JSON_CONNECTION */
52065 }
52066#endif
52067 log_packet_detailed("packet_ruleset_nation_groups_100: got info about ()");
52068
52069#ifdef FREECIV_DELTA_PROTOCOL
52070 if (NULL == *hash) {
52072 NULL, NULL, NULL, free);
52073 }
52074
52075 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
52076 *real_packet = *old;
52077 } else {
52078 log_packet_detailed(" no old info");
52079 memset(real_packet, 0, sizeof(*real_packet));
52080 }
52081
52082 if (BV_ISSET(fields, 0)) {
52083 log_packet_detailed(" got field 'ngroups'");
52084#ifdef FREECIV_JSON_CONNECTION
52085 field_addr.name = "ngroups";
52086#endif /* FREECIV_JSON_CONNECTION */
52087 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
52089 }
52090 }
52091 if (BV_ISSET(fields, 1)) {
52092 log_packet_detailed(" got field 'groups'");
52093#ifdef FREECIV_JSON_CONNECTION
52094 field_addr.name = "groups";
52095#endif /* FREECIV_JSON_CONNECTION */
52096 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
52097 RECEIVE_PACKET_FIELD_ERROR(groups, ": truncation array");
52098 }
52099 {
52100 int i;
52101
52102#ifdef FREECIV_JSON_CONNECTION
52103 /* Enter array. */
52104 field_addr.sub_location = plocation_elem_new(0);
52105#endif /* FREECIV_JSON_CONNECTION */
52106
52107 for (i = 0; i < real_packet->ngroups; i++) {
52108#ifdef FREECIV_JSON_CONNECTION
52109 field_addr.sub_location->number = i;
52110#endif /* FREECIV_JSON_CONNECTION */
52111
52112 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
52114 }
52115 }
52116
52117#ifdef FREECIV_JSON_CONNECTION
52118 /* Exit array. */
52119 FC_FREE(field_addr.sub_location);
52120#endif /* FREECIV_JSON_CONNECTION */
52121 }
52122 }
52123 if (BV_ISSET(fields, 2)) {
52124 log_packet_detailed(" got field 'hidden'");
52125#ifdef FREECIV_JSON_CONNECTION
52126 field_addr.name = "hidden";
52127#endif /* FREECIV_JSON_CONNECTION */
52128 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
52129 RECEIVE_PACKET_FIELD_ERROR(hidden, ": truncation array");
52130 }
52131 {
52132 int i;
52133
52134#ifdef FREECIV_JSON_CONNECTION
52135 /* Enter array. */
52136 field_addr.sub_location = plocation_elem_new(0);
52137#endif /* FREECIV_JSON_CONNECTION */
52138
52139 for (i = 0; i < real_packet->ngroups; i++) {
52140#ifdef FREECIV_JSON_CONNECTION
52141 field_addr.sub_location->number = i;
52142#endif /* FREECIV_JSON_CONNECTION */
52143
52144 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
52146 }
52147 }
52148
52149#ifdef FREECIV_JSON_CONNECTION
52150 /* Exit array. */
52151 FC_FREE(field_addr.sub_location);
52152#endif /* FREECIV_JSON_CONNECTION */
52153 }
52154 }
52155
52156 if (NULL == old) {
52157 old = fc_malloc(sizeof(*old));
52158 *old = *real_packet;
52159 genhash_insert(*hash, old, old);
52160 } else {
52161 *old = *real_packet;
52162 }
52163
52164#endif /* FREECIV_DELTA_PROTOCOL */
52166}
52167
52169{
52170 const struct packet_ruleset_nation_groups *real_packet = packet;
52171 int e;
52172#ifdef FREECIV_DELTA_PROTOCOL
52174 struct packet_ruleset_nation_groups *old;
52175 bool differ;
52176 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_GROUPS;
52177#endif /* FREECIV_DELTA_PROTOCOL */
52179#ifdef FREECIV_JSON_CONNECTION
52180 struct plocation field_addr;
52181 {
52185 }
52186#endif /* FREECIV_JSON_CONNECTION */
52187
52188 log_packet_detailed("packet_ruleset_nation_groups_100: sending info about ()");
52189
52190#ifdef FREECIV_DELTA_PROTOCOL
52191 if (NULL == *hash) {
52193 NULL, NULL, NULL, free);
52194 }
52195 BV_CLR_ALL(fields);
52196
52197 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
52198 old = fc_malloc(sizeof(*old));
52199 *old = *real_packet;
52200 genhash_insert(*hash, old, old);
52201 memset(old, 0, sizeof(*old));
52202 }
52203 differ = (old->ngroups != real_packet->ngroups);
52204 if (differ) {
52205 BV_SET(fields, 0);
52206 }
52207
52208 differ = (old->ngroups != real_packet->ngroups);
52209 if (!differ) {
52210 int i;
52211
52212 for (i = 0; i < real_packet->ngroups; i++) {
52213 differ = (strcmp(old->groups[i], real_packet->groups[i]) != 0);
52214 if (differ) {
52215 break;
52216 }
52217 }
52218 }
52219 if (differ) {
52220 BV_SET(fields, 1);
52221 }
52222
52223 differ = (old->ngroups != real_packet->ngroups);
52224 if (!differ) {
52225 int i;
52226
52227 for (i = 0; i < real_packet->ngroups; i++) {
52228 differ = (old->hidden[i] != real_packet->hidden[i]);
52229 if (differ) {
52230 break;
52231 }
52232 }
52233 }
52234 if (differ) {
52235 BV_SET(fields, 2);
52236 }
52237
52238
52239#ifdef FREECIV_JSON_CONNECTION
52240 field_addr.name = "fields";
52241#endif /* FREECIV_JSON_CONNECTION */
52242 e = 0;
52243 e |= DIO_BV_PUT(&dout, &field_addr, fields);
52244 if (e) {
52245 log_packet_detailed("fields bitvector error detected");
52246 }
52247
52248 if (BV_ISSET(fields, 0)) {
52249 log_packet_detailed(" field 'ngroups' has changed");
52250#ifdef FREECIV_JSON_CONNECTION
52251 field_addr.name = "ngroups";
52252#endif /* FREECIV_JSON_CONNECTION */
52253 e = 0;
52254 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
52255 if (e) {
52256 log_packet_detailed("'ngroups' field error detected");
52257 }
52258 }
52259 if (BV_ISSET(fields, 1)) {
52260 log_packet_detailed(" field 'groups' has changed");
52261#ifdef FREECIV_JSON_CONNECTION
52262 field_addr.name = "groups";
52263#endif /* FREECIV_JSON_CONNECTION */
52264 e = 0;
52265 {
52266 int i;
52267
52268#ifdef FREECIV_JSON_CONNECTION
52269 /* Create the array. */
52270 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
52271
52272 /* Enter the array. */
52273 field_addr.sub_location = plocation_elem_new(0);
52274#endif /* FREECIV_JSON_CONNECTION */
52275
52276 for (i = 0; i < real_packet->ngroups; i++) {
52277#ifdef FREECIV_JSON_CONNECTION
52278 /* Next array element. */
52279 field_addr.sub_location->number = i;
52280#endif /* FREECIV_JSON_CONNECTION */
52281
52282 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
52283 }
52284
52285#ifdef FREECIV_JSON_CONNECTION
52286 /* Exit array. */
52287 FC_FREE(field_addr.sub_location);
52288#endif /* FREECIV_JSON_CONNECTION */
52289 }
52290 if (e) {
52291 log_packet_detailed("'groups' field error detected");
52292 }
52293 }
52294 if (BV_ISSET(fields, 2)) {
52295 log_packet_detailed(" field 'hidden' has changed");
52296#ifdef FREECIV_JSON_CONNECTION
52297 field_addr.name = "hidden";
52298#endif /* FREECIV_JSON_CONNECTION */
52299 e = 0;
52300 {
52301 int i;
52302
52303#ifdef FREECIV_JSON_CONNECTION
52304 /* Create the array. */
52305 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
52306
52307 /* Enter the array. */
52308 field_addr.sub_location = plocation_elem_new(0);
52309#endif /* FREECIV_JSON_CONNECTION */
52310
52311 for (i = 0; i < real_packet->ngroups; i++) {
52312#ifdef FREECIV_JSON_CONNECTION
52313 /* Next array element. */
52314 field_addr.sub_location->number = i;
52315#endif /* FREECIV_JSON_CONNECTION */
52316
52317 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
52318 }
52319
52320#ifdef FREECIV_JSON_CONNECTION
52321 /* Exit array. */
52322 FC_FREE(field_addr.sub_location);
52323#endif /* FREECIV_JSON_CONNECTION */
52324 }
52325 if (e) {
52326 log_packet_detailed("'hidden' field error detected");
52327 }
52328 }
52329
52330 *old = *real_packet;
52331#endif /* FREECIV_DELTA_PROTOCOL */
52332#ifndef FREECIV_DELTA_PROTOCOL
52333#ifdef FREECIV_JSON_CONNECTION
52334 field_addr.name = "ngroups";
52335#endif /* FREECIV_JSON_CONNECTION */
52336 e = 0;
52337 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
52338 if (e) {
52339 log_packet_detailed("'ngroups' field error detected");
52340 }
52341#ifdef FREECIV_JSON_CONNECTION
52342 field_addr.name = "groups";
52343#endif /* FREECIV_JSON_CONNECTION */
52344 e = 0;
52345 {
52346 int i;
52347
52348#ifdef FREECIV_JSON_CONNECTION
52349 /* Create the array. */
52350 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
52351
52352 /* Enter the array. */
52353 field_addr.sub_location = plocation_elem_new(0);
52354#endif /* FREECIV_JSON_CONNECTION */
52355
52356 for (i = 0; i < real_packet->ngroups; i++) {
52357#ifdef FREECIV_JSON_CONNECTION
52358 /* Next array element. */
52359 field_addr.sub_location->number = i;
52360#endif /* FREECIV_JSON_CONNECTION */
52361
52362 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
52363 }
52364
52365#ifdef FREECIV_JSON_CONNECTION
52366 /* Exit array. */
52367 FC_FREE(field_addr.sub_location);
52368#endif /* FREECIV_JSON_CONNECTION */
52369 }
52370 if (e) {
52371 log_packet_detailed("'groups' field error detected");
52372 }
52373#ifdef FREECIV_JSON_CONNECTION
52374 field_addr.name = "hidden";
52375#endif /* FREECIV_JSON_CONNECTION */
52376 e = 0;
52377 {
52378 int i;
52379
52380#ifdef FREECIV_JSON_CONNECTION
52381 /* Create the array. */
52382 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
52383
52384 /* Enter the array. */
52385 field_addr.sub_location = plocation_elem_new(0);
52386#endif /* FREECIV_JSON_CONNECTION */
52387
52388 for (i = 0; i < real_packet->ngroups; i++) {
52389#ifdef FREECIV_JSON_CONNECTION
52390 /* Next array element. */
52391 field_addr.sub_location->number = i;
52392#endif /* FREECIV_JSON_CONNECTION */
52393
52394 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
52395 }
52396
52397#ifdef FREECIV_JSON_CONNECTION
52398 /* Exit array. */
52399 FC_FREE(field_addr.sub_location);
52400#endif /* FREECIV_JSON_CONNECTION */
52401 }
52402 if (e) {
52403 log_packet_detailed("'hidden' field error detected");
52404 }
52405
52406#endif
52408}
52409
52411{
52412 if (!pc->used) {
52413 log_error("WARNING: trying to send data to the closed connection %s",
52415 return -1;
52416 }
52417 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet != NULL, -1,
52418 "Handler for PACKET_RULESET_NATION_GROUPS not installed");
52419 return pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet(pc, packet);
52420}
52421
52428
52429#ifdef FREECIV_DELTA_PROTOCOL
52431{
52432 const struct packet_ruleset_nation *key = (const struct packet_ruleset_nation *) vkey;
52433 genhash_val_t result = 0;
52434
52435 result += key->id;
52436
52437 result &= 0xFFFFFFFF;
52438 return result;
52439}
52440
52441static bool cmp_packet_ruleset_nation_100(const void *vkey1, const void *vkey2)
52442{
52443 const struct packet_ruleset_nation *old = (const struct packet_ruleset_nation *) vkey1;
52444 const struct packet_ruleset_nation *real_packet = (const struct packet_ruleset_nation *) vkey2;
52445 bool differ;
52446
52447 differ = (old->id != real_packet->id);
52448
52449 return !differ;
52450}
52452#endif /* FREECIV_DELTA_PROTOCOL */
52453
52455{
52456#ifdef FREECIV_DELTA_PROTOCOL
52458 struct packet_ruleset_nation *old;
52459 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION;
52460#endif /* FREECIV_DELTA_PROTOCOL */
52462#ifdef FREECIV_JSON_CONNECTION
52463 struct plocation field_addr;
52464 {
52468 }
52469#endif /* FREECIV_JSON_CONNECTION */
52470
52471#ifdef FREECIV_DELTA_PROTOCOL
52472#ifdef FREECIV_JSON_CONNECTION
52473 field_addr.name = "fields";
52474#endif /* FREECIV_JSON_CONNECTION */
52475 DIO_BV_GET(&din, &field_addr, fields);
52476#ifdef FREECIV_JSON_CONNECTION
52477 field_addr.name = "id";
52478#endif /* FREECIV_JSON_CONNECTION */
52479 {
52480 int readin;
52481
52482 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
52484 }
52485 real_packet->id = readin;
52486 }
52487
52488#else /* FREECIV_DELTA_PROTOCOL */
52489#ifdef FREECIV_JSON_CONNECTION
52490 field_addr.name = "id";
52491#endif /* FREECIV_JSON_CONNECTION */
52492 {
52493 int readin;
52494
52495 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
52497 }
52498 real_packet->id = readin;
52499 }
52500#ifdef FREECIV_JSON_CONNECTION
52501 field_addr.name = "translation_domain";
52502#endif /* FREECIV_JSON_CONNECTION */
52503 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
52504 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
52505 }
52506#ifdef FREECIV_JSON_CONNECTION
52507 field_addr.name = "adjective";
52508#endif /* FREECIV_JSON_CONNECTION */
52509 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
52510 RECEIVE_PACKET_FIELD_ERROR(adjective);
52511 }
52512#ifdef FREECIV_JSON_CONNECTION
52513 field_addr.name = "rule_name";
52514#endif /* FREECIV_JSON_CONNECTION */
52515 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
52516 RECEIVE_PACKET_FIELD_ERROR(rule_name);
52517 }
52518#ifdef FREECIV_JSON_CONNECTION
52519 field_addr.name = "noun_plural";
52520#endif /* FREECIV_JSON_CONNECTION */
52521 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
52522 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
52523 }
52524#ifdef FREECIV_JSON_CONNECTION
52525 field_addr.name = "graphic_str";
52526#endif /* FREECIV_JSON_CONNECTION */
52527 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
52528 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
52529 }
52530#ifdef FREECIV_JSON_CONNECTION
52531 field_addr.name = "graphic_alt";
52532#endif /* FREECIV_JSON_CONNECTION */
52533 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
52534 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
52535 }
52536#ifdef FREECIV_JSON_CONNECTION
52537 field_addr.name = "legend";
52538#endif /* FREECIV_JSON_CONNECTION */
52539 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
52541 }
52542#ifdef FREECIV_JSON_CONNECTION
52543 field_addr.name = "style";
52544#endif /* FREECIV_JSON_CONNECTION */
52545 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
52547 }
52548#ifdef FREECIV_JSON_CONNECTION
52549 field_addr.name = "leader_count";
52550#endif /* FREECIV_JSON_CONNECTION */
52551 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
52552 RECEIVE_PACKET_FIELD_ERROR(leader_count);
52553 }
52554#ifdef FREECIV_JSON_CONNECTION
52555 field_addr.name = "leader_name";
52556#endif /* FREECIV_JSON_CONNECTION */
52557 if (real_packet->leader_count > MAX_NUM_LEADERS) {
52558 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": truncation array");
52559 }
52560 {
52561 int i;
52562
52563#ifdef FREECIV_JSON_CONNECTION
52564 /* Enter array. */
52565 field_addr.sub_location = plocation_elem_new(0);
52566#endif /* FREECIV_JSON_CONNECTION */
52567
52568 for (i = 0; i < real_packet->leader_count; i++) {
52569#ifdef FREECIV_JSON_CONNECTION
52570 field_addr.sub_location->number = i;
52571#endif /* FREECIV_JSON_CONNECTION */
52572
52573 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
52575 }
52576 }
52577
52578#ifdef FREECIV_JSON_CONNECTION
52579 /* Exit array. */
52580 FC_FREE(field_addr.sub_location);
52581#endif /* FREECIV_JSON_CONNECTION */
52582 }
52583#ifdef FREECIV_JSON_CONNECTION
52584 field_addr.name = "leader_is_male";
52585#endif /* FREECIV_JSON_CONNECTION */
52586 if (real_packet->leader_count > MAX_NUM_LEADERS) {
52587 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": truncation array");
52588 }
52589 {
52590 int i;
52591
52592#ifdef FREECIV_JSON_CONNECTION
52593 /* Enter array. */
52594 field_addr.sub_location = plocation_elem_new(0);
52595#endif /* FREECIV_JSON_CONNECTION */
52596
52597 for (i = 0; i < real_packet->leader_count; i++) {
52598#ifdef FREECIV_JSON_CONNECTION
52599 field_addr.sub_location->number = i;
52600#endif /* FREECIV_JSON_CONNECTION */
52601
52602 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
52603 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
52604 }
52605 }
52606
52607#ifdef FREECIV_JSON_CONNECTION
52608 /* Exit array. */
52609 FC_FREE(field_addr.sub_location);
52610#endif /* FREECIV_JSON_CONNECTION */
52611 }
52612#ifdef FREECIV_JSON_CONNECTION
52613 field_addr.name = "is_playable";
52614#endif /* FREECIV_JSON_CONNECTION */
52615 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_playable)) {
52616 RECEIVE_PACKET_FIELD_ERROR(is_playable);
52617 }
52618#ifdef FREECIV_JSON_CONNECTION
52619 field_addr.name = "barbarian_type";
52620#endif /* FREECIV_JSON_CONNECTION */
52621 {
52622 int readin;
52623
52624 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
52625 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
52626 }
52627 real_packet->barbarian_type = readin;
52628 }
52629#ifdef FREECIV_JSON_CONNECTION
52630 field_addr.name = "nsets";
52631#endif /* FREECIV_JSON_CONNECTION */
52632 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
52634 }
52635#ifdef FREECIV_JSON_CONNECTION
52636 field_addr.name = "sets";
52637#endif /* FREECIV_JSON_CONNECTION */
52638 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
52639 RECEIVE_PACKET_FIELD_ERROR(sets, ": truncation array");
52640 }
52641 {
52642 int i;
52643
52644#ifdef FREECIV_JSON_CONNECTION
52645 /* Enter array. */
52646 field_addr.sub_location = plocation_elem_new(0);
52647#endif /* FREECIV_JSON_CONNECTION */
52648
52649 for (i = 0; i < real_packet->nsets; i++) {
52650#ifdef FREECIV_JSON_CONNECTION
52651 field_addr.sub_location->number = i;
52652#endif /* FREECIV_JSON_CONNECTION */
52653
52654 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
52656 }
52657 }
52658
52659#ifdef FREECIV_JSON_CONNECTION
52660 /* Exit array. */
52661 FC_FREE(field_addr.sub_location);
52662#endif /* FREECIV_JSON_CONNECTION */
52663 }
52664#ifdef FREECIV_JSON_CONNECTION
52665 field_addr.name = "ngroups";
52666#endif /* FREECIV_JSON_CONNECTION */
52667 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
52669 }
52670#ifdef FREECIV_JSON_CONNECTION
52671 field_addr.name = "groups";
52672#endif /* FREECIV_JSON_CONNECTION */
52673 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
52674 RECEIVE_PACKET_FIELD_ERROR(groups, ": truncation array");
52675 }
52676 {
52677 int i;
52678
52679#ifdef FREECIV_JSON_CONNECTION
52680 /* Enter array. */
52681 field_addr.sub_location = plocation_elem_new(0);
52682#endif /* FREECIV_JSON_CONNECTION */
52683
52684 for (i = 0; i < real_packet->ngroups; i++) {
52685#ifdef FREECIV_JSON_CONNECTION
52686 field_addr.sub_location->number = i;
52687#endif /* FREECIV_JSON_CONNECTION */
52688
52689 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
52691 }
52692 }
52693
52694#ifdef FREECIV_JSON_CONNECTION
52695 /* Exit array. */
52696 FC_FREE(field_addr.sub_location);
52697#endif /* FREECIV_JSON_CONNECTION */
52698 }
52699#ifdef FREECIV_JSON_CONNECTION
52700 field_addr.name = "init_government_id";
52701#endif /* FREECIV_JSON_CONNECTION */
52702 {
52703 int readin;
52704
52705 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
52706 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
52707 }
52708 real_packet->init_government_id = readin;
52709 }
52710#ifdef FREECIV_JSON_CONNECTION
52711 field_addr.name = "init_techs_count";
52712#endif /* FREECIV_JSON_CONNECTION */
52713 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
52714 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
52715 }
52716#ifdef FREECIV_JSON_CONNECTION
52717 field_addr.name = "init_techs";
52718#endif /* FREECIV_JSON_CONNECTION */
52719 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
52720 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": truncation array");
52721 }
52722 {
52723 int i;
52724
52725#ifdef FREECIV_JSON_CONNECTION
52726 /* Enter array. */
52727 field_addr.sub_location = plocation_elem_new(0);
52728#endif /* FREECIV_JSON_CONNECTION */
52729
52730 for (i = 0; i < real_packet->init_techs_count; i++) {
52731#ifdef FREECIV_JSON_CONNECTION
52732 field_addr.sub_location->number = i;
52733#endif /* FREECIV_JSON_CONNECTION */
52734
52735 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
52736 RECEIVE_PACKET_FIELD_ERROR(init_techs);
52737 }
52738 }
52739
52740#ifdef FREECIV_JSON_CONNECTION
52741 /* Exit array. */
52742 FC_FREE(field_addr.sub_location);
52743#endif /* FREECIV_JSON_CONNECTION */
52744 }
52745#ifdef FREECIV_JSON_CONNECTION
52746 field_addr.name = "init_units_count";
52747#endif /* FREECIV_JSON_CONNECTION */
52748 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
52749 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
52750 }
52751#ifdef FREECIV_JSON_CONNECTION
52752 field_addr.name = "init_units";
52753#endif /* FREECIV_JSON_CONNECTION */
52754 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
52755 RECEIVE_PACKET_FIELD_ERROR(init_units, ": truncation array");
52756 }
52757 {
52758 int i;
52759
52760#ifdef FREECIV_JSON_CONNECTION
52761 /* Enter array. */
52762 field_addr.sub_location = plocation_elem_new(0);
52763#endif /* FREECIV_JSON_CONNECTION */
52764
52765 for (i = 0; i < real_packet->init_units_count; i++) {
52766#ifdef FREECIV_JSON_CONNECTION
52767 field_addr.sub_location->number = i;
52768#endif /* FREECIV_JSON_CONNECTION */
52769
52770 {
52771 int readin;
52772
52773 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
52774 RECEIVE_PACKET_FIELD_ERROR(init_units);
52775 }
52776 real_packet->init_units[i] = readin;
52777 }
52778 }
52779
52780#ifdef FREECIV_JSON_CONNECTION
52781 /* Exit array. */
52782 FC_FREE(field_addr.sub_location);
52783#endif /* FREECIV_JSON_CONNECTION */
52784 }
52785#ifdef FREECIV_JSON_CONNECTION
52786 field_addr.name = "init_buildings_count";
52787#endif /* FREECIV_JSON_CONNECTION */
52788 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
52789 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
52790 }
52791#ifdef FREECIV_JSON_CONNECTION
52792 field_addr.name = "init_buildings";
52793#endif /* FREECIV_JSON_CONNECTION */
52794 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
52795 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": truncation array");
52796 }
52797 {
52798 int i;
52799
52800#ifdef FREECIV_JSON_CONNECTION
52801 /* Enter array. */
52802 field_addr.sub_location = plocation_elem_new(0);
52803#endif /* FREECIV_JSON_CONNECTION */
52804
52805 for (i = 0; i < real_packet->init_buildings_count; i++) {
52806#ifdef FREECIV_JSON_CONNECTION
52807 field_addr.sub_location->number = i;
52808#endif /* FREECIV_JSON_CONNECTION */
52809
52810 {
52811 int readin;
52812
52813 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
52814 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
52815 }
52816 real_packet->init_buildings[i] = readin;
52817 }
52818 }
52819
52820#ifdef FREECIV_JSON_CONNECTION
52821 /* Exit array. */
52822 FC_FREE(field_addr.sub_location);
52823#endif /* FREECIV_JSON_CONNECTION */
52824 }
52825#endif
52826 log_packet_detailed("packet_ruleset_nation_100: got info about (%d)",
52827 real_packet->id);
52828
52829#ifdef FREECIV_DELTA_PROTOCOL
52830 if (NULL == *hash) {
52832 NULL, NULL, NULL, free);
52833 }
52834
52835 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
52836 *real_packet = *old;
52837 } else {
52839
52840 id = real_packet->id;
52841
52842 log_packet_detailed(" no old info");
52843 memset(real_packet, 0, sizeof(*real_packet));
52844
52845 real_packet->id = id;
52846 }
52847
52848 if (BV_ISSET(fields, 0)) {
52849 log_packet_detailed(" got field 'translation_domain'");
52850#ifdef FREECIV_JSON_CONNECTION
52851 field_addr.name = "translation_domain";
52852#endif /* FREECIV_JSON_CONNECTION */
52853 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
52854 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
52855 }
52856 }
52857 if (BV_ISSET(fields, 1)) {
52858 log_packet_detailed(" got field 'adjective'");
52859#ifdef FREECIV_JSON_CONNECTION
52860 field_addr.name = "adjective";
52861#endif /* FREECIV_JSON_CONNECTION */
52862 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
52863 RECEIVE_PACKET_FIELD_ERROR(adjective);
52864 }
52865 }
52866 if (BV_ISSET(fields, 2)) {
52867 log_packet_detailed(" got field 'rule_name'");
52868#ifdef FREECIV_JSON_CONNECTION
52869 field_addr.name = "rule_name";
52870#endif /* FREECIV_JSON_CONNECTION */
52871 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
52872 RECEIVE_PACKET_FIELD_ERROR(rule_name);
52873 }
52874 }
52875 if (BV_ISSET(fields, 3)) {
52876 log_packet_detailed(" got field 'noun_plural'");
52877#ifdef FREECIV_JSON_CONNECTION
52878 field_addr.name = "noun_plural";
52879#endif /* FREECIV_JSON_CONNECTION */
52880 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
52881 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
52882 }
52883 }
52884 if (BV_ISSET(fields, 4)) {
52885 log_packet_detailed(" got field 'graphic_str'");
52886#ifdef FREECIV_JSON_CONNECTION
52887 field_addr.name = "graphic_str";
52888#endif /* FREECIV_JSON_CONNECTION */
52889 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
52890 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
52891 }
52892 }
52893 if (BV_ISSET(fields, 5)) {
52894 log_packet_detailed(" got field 'graphic_alt'");
52895#ifdef FREECIV_JSON_CONNECTION
52896 field_addr.name = "graphic_alt";
52897#endif /* FREECIV_JSON_CONNECTION */
52898 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
52899 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
52900 }
52901 }
52902 if (BV_ISSET(fields, 6)) {
52903 log_packet_detailed(" got field 'legend'");
52904#ifdef FREECIV_JSON_CONNECTION
52905 field_addr.name = "legend";
52906#endif /* FREECIV_JSON_CONNECTION */
52907 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
52909 }
52910 }
52911 if (BV_ISSET(fields, 7)) {
52912 log_packet_detailed(" got field 'style'");
52913#ifdef FREECIV_JSON_CONNECTION
52914 field_addr.name = "style";
52915#endif /* FREECIV_JSON_CONNECTION */
52916 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
52918 }
52919 }
52920 if (BV_ISSET(fields, 8)) {
52921 log_packet_detailed(" got field 'leader_count'");
52922#ifdef FREECIV_JSON_CONNECTION
52923 field_addr.name = "leader_count";
52924#endif /* FREECIV_JSON_CONNECTION */
52925 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
52926 RECEIVE_PACKET_FIELD_ERROR(leader_count);
52927 }
52928 }
52929 if (BV_ISSET(fields, 9)) {
52930 log_packet_detailed(" got field 'leader_name'");
52931#ifdef FREECIV_JSON_CONNECTION
52932 field_addr.name = "leader_name";
52933#endif /* FREECIV_JSON_CONNECTION */
52934 if (real_packet->leader_count > MAX_NUM_LEADERS) {
52935 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": truncation array");
52936 }
52937 {
52938 int i;
52939
52940#ifdef FREECIV_JSON_CONNECTION
52941 /* Enter array. */
52942 field_addr.sub_location = plocation_elem_new(0);
52943#endif /* FREECIV_JSON_CONNECTION */
52944
52945 for (i = 0; i < real_packet->leader_count; i++) {
52946#ifdef FREECIV_JSON_CONNECTION
52947 field_addr.sub_location->number = i;
52948#endif /* FREECIV_JSON_CONNECTION */
52949
52950 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
52952 }
52953 }
52954
52955#ifdef FREECIV_JSON_CONNECTION
52956 /* Exit array. */
52957 FC_FREE(field_addr.sub_location);
52958#endif /* FREECIV_JSON_CONNECTION */
52959 }
52960 }
52961 if (BV_ISSET(fields, 10)) {
52962 log_packet_detailed(" got field 'leader_is_male'");
52963#ifdef FREECIV_JSON_CONNECTION
52964 field_addr.name = "leader_is_male";
52965#endif /* FREECIV_JSON_CONNECTION */
52966 if (real_packet->leader_count > MAX_NUM_LEADERS) {
52967 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": truncation array");
52968 }
52969 {
52970 int i;
52971
52972#ifdef FREECIV_JSON_CONNECTION
52973 /* Enter array. */
52974 field_addr.sub_location = plocation_elem_new(0);
52975#endif /* FREECIV_JSON_CONNECTION */
52976
52977 for (i = 0; i < real_packet->leader_count; i++) {
52978#ifdef FREECIV_JSON_CONNECTION
52979 field_addr.sub_location->number = i;
52980#endif /* FREECIV_JSON_CONNECTION */
52981
52982 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
52983 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
52984 }
52985 }
52986
52987#ifdef FREECIV_JSON_CONNECTION
52988 /* Exit array. */
52989 FC_FREE(field_addr.sub_location);
52990#endif /* FREECIV_JSON_CONNECTION */
52991 }
52992 }
52993 real_packet->is_playable = BV_ISSET(fields, 11);
52994 if (BV_ISSET(fields, 12)) {
52995 log_packet_detailed(" got field 'barbarian_type'");
52996#ifdef FREECIV_JSON_CONNECTION
52997 field_addr.name = "barbarian_type";
52998#endif /* FREECIV_JSON_CONNECTION */
52999 {
53000 int readin;
53001
53002 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
53003 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
53004 }
53005 real_packet->barbarian_type = readin;
53006 }
53007 }
53008 if (BV_ISSET(fields, 13)) {
53009 log_packet_detailed(" got field 'nsets'");
53010#ifdef FREECIV_JSON_CONNECTION
53011 field_addr.name = "nsets";
53012#endif /* FREECIV_JSON_CONNECTION */
53013 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
53015 }
53016 }
53017 if (BV_ISSET(fields, 14)) {
53018 log_packet_detailed(" got field 'sets'");
53019#ifdef FREECIV_JSON_CONNECTION
53020 field_addr.name = "sets";
53021#endif /* FREECIV_JSON_CONNECTION */
53022 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
53023 RECEIVE_PACKET_FIELD_ERROR(sets, ": truncation array");
53024 }
53025 {
53026 int i;
53027
53028#ifdef FREECIV_JSON_CONNECTION
53029 /* Enter array. */
53030 field_addr.sub_location = plocation_elem_new(0);
53031#endif /* FREECIV_JSON_CONNECTION */
53032
53033 for (i = 0; i < real_packet->nsets; i++) {
53034#ifdef FREECIV_JSON_CONNECTION
53035 field_addr.sub_location->number = i;
53036#endif /* FREECIV_JSON_CONNECTION */
53037
53038 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
53040 }
53041 }
53042
53043#ifdef FREECIV_JSON_CONNECTION
53044 /* Exit array. */
53045 FC_FREE(field_addr.sub_location);
53046#endif /* FREECIV_JSON_CONNECTION */
53047 }
53048 }
53049 if (BV_ISSET(fields, 15)) {
53050 log_packet_detailed(" got field 'ngroups'");
53051#ifdef FREECIV_JSON_CONNECTION
53052 field_addr.name = "ngroups";
53053#endif /* FREECIV_JSON_CONNECTION */
53054 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
53056 }
53057 }
53058 if (BV_ISSET(fields, 16)) {
53059 log_packet_detailed(" got field 'groups'");
53060#ifdef FREECIV_JSON_CONNECTION
53061 field_addr.name = "groups";
53062#endif /* FREECIV_JSON_CONNECTION */
53063 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
53064 RECEIVE_PACKET_FIELD_ERROR(groups, ": truncation array");
53065 }
53066 {
53067 int i;
53068
53069#ifdef FREECIV_JSON_CONNECTION
53070 /* Enter array. */
53071 field_addr.sub_location = plocation_elem_new(0);
53072#endif /* FREECIV_JSON_CONNECTION */
53073
53074 for (i = 0; i < real_packet->ngroups; i++) {
53075#ifdef FREECIV_JSON_CONNECTION
53076 field_addr.sub_location->number = i;
53077#endif /* FREECIV_JSON_CONNECTION */
53078
53079 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
53081 }
53082 }
53083
53084#ifdef FREECIV_JSON_CONNECTION
53085 /* Exit array. */
53086 FC_FREE(field_addr.sub_location);
53087#endif /* FREECIV_JSON_CONNECTION */
53088 }
53089 }
53090 if (BV_ISSET(fields, 17)) {
53091 log_packet_detailed(" got field 'init_government_id'");
53092#ifdef FREECIV_JSON_CONNECTION
53093 field_addr.name = "init_government_id";
53094#endif /* FREECIV_JSON_CONNECTION */
53095 {
53096 int readin;
53097
53098 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
53099 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
53100 }
53101 real_packet->init_government_id = readin;
53102 }
53103 }
53104 if (BV_ISSET(fields, 18)) {
53105 log_packet_detailed(" got field 'init_techs_count'");
53106#ifdef FREECIV_JSON_CONNECTION
53107 field_addr.name = "init_techs_count";
53108#endif /* FREECIV_JSON_CONNECTION */
53109 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
53110 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
53111 }
53112 }
53113 if (BV_ISSET(fields, 19)) {
53114 log_packet_detailed(" got field 'init_techs'");
53115#ifdef FREECIV_JSON_CONNECTION
53116 field_addr.name = "init_techs";
53117#endif /* FREECIV_JSON_CONNECTION */
53118 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
53119 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": truncation array");
53120 }
53121 {
53122 int i;
53123
53124#ifdef FREECIV_JSON_CONNECTION
53125 /* Enter array. */
53126 field_addr.sub_location = plocation_elem_new(0);
53127#endif /* FREECIV_JSON_CONNECTION */
53128
53129 for (i = 0; i < real_packet->init_techs_count; i++) {
53130#ifdef FREECIV_JSON_CONNECTION
53131 field_addr.sub_location->number = i;
53132#endif /* FREECIV_JSON_CONNECTION */
53133
53134 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
53135 RECEIVE_PACKET_FIELD_ERROR(init_techs);
53136 }
53137 }
53138
53139#ifdef FREECIV_JSON_CONNECTION
53140 /* Exit array. */
53141 FC_FREE(field_addr.sub_location);
53142#endif /* FREECIV_JSON_CONNECTION */
53143 }
53144 }
53145 if (BV_ISSET(fields, 20)) {
53146 log_packet_detailed(" got field 'init_units_count'");
53147#ifdef FREECIV_JSON_CONNECTION
53148 field_addr.name = "init_units_count";
53149#endif /* FREECIV_JSON_CONNECTION */
53150 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
53151 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
53152 }
53153 }
53154 if (BV_ISSET(fields, 21)) {
53155 log_packet_detailed(" got field 'init_units'");
53156#ifdef FREECIV_JSON_CONNECTION
53157 field_addr.name = "init_units";
53158#endif /* FREECIV_JSON_CONNECTION */
53159 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
53160 RECEIVE_PACKET_FIELD_ERROR(init_units, ": truncation array");
53161 }
53162 {
53163 int i;
53164
53165#ifdef FREECIV_JSON_CONNECTION
53166 /* Enter array. */
53167 field_addr.sub_location = plocation_elem_new(0);
53168#endif /* FREECIV_JSON_CONNECTION */
53169
53170 for (i = 0; i < real_packet->init_units_count; i++) {
53171#ifdef FREECIV_JSON_CONNECTION
53172 field_addr.sub_location->number = i;
53173#endif /* FREECIV_JSON_CONNECTION */
53174
53175 {
53176 int readin;
53177
53178 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
53179 RECEIVE_PACKET_FIELD_ERROR(init_units);
53180 }
53181 real_packet->init_units[i] = readin;
53182 }
53183 }
53184
53185#ifdef FREECIV_JSON_CONNECTION
53186 /* Exit array. */
53187 FC_FREE(field_addr.sub_location);
53188#endif /* FREECIV_JSON_CONNECTION */
53189 }
53190 }
53191 if (BV_ISSET(fields, 22)) {
53192 log_packet_detailed(" got field 'init_buildings_count'");
53193#ifdef FREECIV_JSON_CONNECTION
53194 field_addr.name = "init_buildings_count";
53195#endif /* FREECIV_JSON_CONNECTION */
53196 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
53197 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
53198 }
53199 }
53200 if (BV_ISSET(fields, 23)) {
53201 log_packet_detailed(" got field 'init_buildings'");
53202#ifdef FREECIV_JSON_CONNECTION
53203 field_addr.name = "init_buildings";
53204#endif /* FREECIV_JSON_CONNECTION */
53205 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
53206 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": truncation array");
53207 }
53208 {
53209 int i;
53210
53211#ifdef FREECIV_JSON_CONNECTION
53212 /* Enter array. */
53213 field_addr.sub_location = plocation_elem_new(0);
53214#endif /* FREECIV_JSON_CONNECTION */
53215
53216 for (i = 0; i < real_packet->init_buildings_count; i++) {
53217#ifdef FREECIV_JSON_CONNECTION
53218 field_addr.sub_location->number = i;
53219#endif /* FREECIV_JSON_CONNECTION */
53220
53221 {
53222 int readin;
53223
53224 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
53225 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
53226 }
53227 real_packet->init_buildings[i] = readin;
53228 }
53229 }
53230
53231#ifdef FREECIV_JSON_CONNECTION
53232 /* Exit array. */
53233 FC_FREE(field_addr.sub_location);
53234#endif /* FREECIV_JSON_CONNECTION */
53235 }
53236 }
53237
53238 if (NULL == old) {
53239 old = fc_malloc(sizeof(*old));
53240 *old = *real_packet;
53241 genhash_insert(*hash, old, old);
53242 } else {
53243 *old = *real_packet;
53244 }
53245
53246#endif /* FREECIV_DELTA_PROTOCOL */
53248}
53249
53251{
53252 const struct packet_ruleset_nation *real_packet = packet;
53253 int e;
53254#ifdef FREECIV_DELTA_PROTOCOL
53256 struct packet_ruleset_nation *old;
53257 bool differ;
53258 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION;
53259#endif /* FREECIV_DELTA_PROTOCOL */
53261#ifdef FREECIV_JSON_CONNECTION
53262 struct plocation field_addr;
53263 {
53267 }
53268#endif /* FREECIV_JSON_CONNECTION */
53269
53270 log_packet_detailed("packet_ruleset_nation_100: sending info about (%d)",
53271 real_packet->id);
53272
53273#ifdef FREECIV_DELTA_PROTOCOL
53274 if (NULL == *hash) {
53276 NULL, NULL, NULL, free);
53277 }
53278 BV_CLR_ALL(fields);
53279
53280 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
53281 old = fc_malloc(sizeof(*old));
53282 *old = *real_packet;
53283 genhash_insert(*hash, old, old);
53284 memset(old, 0, sizeof(*old));
53285 }
53286 differ = (strcmp(old->translation_domain, real_packet->translation_domain) != 0);
53287 if (differ) {
53288 BV_SET(fields, 0);
53289 }
53290
53291 differ = (strcmp(old->adjective, real_packet->adjective) != 0);
53292 if (differ) {
53293 BV_SET(fields, 1);
53294 }
53295
53296 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
53297 if (differ) {
53298 BV_SET(fields, 2);
53299 }
53300
53301 differ = (strcmp(old->noun_plural, real_packet->noun_plural) != 0);
53302 if (differ) {
53303 BV_SET(fields, 3);
53304 }
53305
53306 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
53307 if (differ) {
53308 BV_SET(fields, 4);
53309 }
53310
53311 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
53312 if (differ) {
53313 BV_SET(fields, 5);
53314 }
53315
53316 differ = (strcmp(old->legend, real_packet->legend) != 0);
53317 if (differ) {
53318 BV_SET(fields, 6);
53319 }
53320
53321 differ = (old->style != real_packet->style);
53322 if (differ) {
53323 BV_SET(fields, 7);
53324 }
53325
53326 differ = (old->leader_count != real_packet->leader_count);
53327 if (differ) {
53328 BV_SET(fields, 8);
53329 }
53330
53331 differ = (old->leader_count != real_packet->leader_count);
53332 if (!differ) {
53333 int i;
53334
53335 for (i = 0; i < real_packet->leader_count; i++) {
53336 differ = (strcmp(old->leader_name[i], real_packet->leader_name[i]) != 0);
53337 if (differ) {
53338 break;
53339 }
53340 }
53341 }
53342 if (differ) {
53343 BV_SET(fields, 9);
53344 }
53345
53346 differ = (old->leader_count != real_packet->leader_count);
53347 if (!differ) {
53348 int i;
53349
53350 for (i = 0; i < real_packet->leader_count; i++) {
53351 differ = (old->leader_is_male[i] != real_packet->leader_is_male[i]);
53352 if (differ) {
53353 break;
53354 }
53355 }
53356 }
53357 if (differ) {
53358 BV_SET(fields, 10);
53359 }
53360
53361 if (packet->is_playable) {
53362 BV_SET(fields, 11);
53363 }
53364
53365 differ = (old->barbarian_type != real_packet->barbarian_type);
53366 if (differ) {
53367 BV_SET(fields, 12);
53368 }
53369
53370 differ = (old->nsets != real_packet->nsets);
53371 if (differ) {
53372 BV_SET(fields, 13);
53373 }
53374
53375 differ = (old->nsets != real_packet->nsets);
53376 if (!differ) {
53377 int i;
53378
53379 for (i = 0; i < real_packet->nsets; i++) {
53380 differ = (old->sets[i] != real_packet->sets[i]);
53381 if (differ) {
53382 break;
53383 }
53384 }
53385 }
53386 if (differ) {
53387 BV_SET(fields, 14);
53388 }
53389
53390 differ = (old->ngroups != real_packet->ngroups);
53391 if (differ) {
53392 BV_SET(fields, 15);
53393 }
53394
53395 differ = (old->ngroups != real_packet->ngroups);
53396 if (!differ) {
53397 int i;
53398
53399 for (i = 0; i < real_packet->ngroups; i++) {
53400 differ = (old->groups[i] != real_packet->groups[i]);
53401 if (differ) {
53402 break;
53403 }
53404 }
53405 }
53406 if (differ) {
53407 BV_SET(fields, 16);
53408 }
53409
53410 differ = (old->init_government_id != real_packet->init_government_id);
53411 if (differ) {
53412 BV_SET(fields, 17);
53413 }
53414
53415 differ = (old->init_techs_count != real_packet->init_techs_count);
53416 if (differ) {
53417 BV_SET(fields, 18);
53418 }
53419
53420 differ = (old->init_techs_count != real_packet->init_techs_count);
53421 if (!differ) {
53422 int i;
53423
53424 for (i = 0; i < real_packet->init_techs_count; i++) {
53425 differ = (old->init_techs[i] != real_packet->init_techs[i]);
53426 if (differ) {
53427 break;
53428 }
53429 }
53430 }
53431 if (differ) {
53432 BV_SET(fields, 19);
53433 }
53434
53435 differ = (old->init_units_count != real_packet->init_units_count);
53436 if (differ) {
53437 BV_SET(fields, 20);
53438 }
53439
53440 differ = (old->init_units_count != real_packet->init_units_count);
53441 if (!differ) {
53442 int i;
53443
53444 for (i = 0; i < real_packet->init_units_count; i++) {
53445 differ = (old->init_units[i] != real_packet->init_units[i]);
53446 if (differ) {
53447 break;
53448 }
53449 }
53450 }
53451 if (differ) {
53452 BV_SET(fields, 21);
53453 }
53454
53455 differ = (old->init_buildings_count != real_packet->init_buildings_count);
53456 if (differ) {
53457 BV_SET(fields, 22);
53458 }
53459
53460 differ = (old->init_buildings_count != real_packet->init_buildings_count);
53461 if (!differ) {
53462 int i;
53463
53464 for (i = 0; i < real_packet->init_buildings_count; i++) {
53465 differ = (old->init_buildings[i] != real_packet->init_buildings[i]);
53466 if (differ) {
53467 break;
53468 }
53469 }
53470 }
53471 if (differ) {
53472 BV_SET(fields, 23);
53473 }
53474
53475
53476#ifdef FREECIV_JSON_CONNECTION
53477 field_addr.name = "fields";
53478#endif /* FREECIV_JSON_CONNECTION */
53479 e = 0;
53480 e |= DIO_BV_PUT(&dout, &field_addr, fields);
53481 if (e) {
53482 log_packet_detailed("fields bitvector error detected");
53483 }
53484#ifdef FREECIV_JSON_CONNECTION
53485 field_addr.name = "id";
53486#endif /* FREECIV_JSON_CONNECTION */
53487 e = 0;
53488 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
53489 if (e) {
53490 log_packet_detailed("'id' field error detected");
53491 }
53492
53493 if (BV_ISSET(fields, 0)) {
53494 log_packet_detailed(" field 'translation_domain' has changed");
53495#ifdef FREECIV_JSON_CONNECTION
53496 field_addr.name = "translation_domain";
53497#endif /* FREECIV_JSON_CONNECTION */
53498 e = 0;
53499 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
53500 if (e) {
53501 log_packet_detailed("'translation_domain' field error detected");
53502 }
53503 }
53504 if (BV_ISSET(fields, 1)) {
53505 log_packet_detailed(" field 'adjective' has changed");
53506#ifdef FREECIV_JSON_CONNECTION
53507 field_addr.name = "adjective";
53508#endif /* FREECIV_JSON_CONNECTION */
53509 e = 0;
53510 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
53511 if (e) {
53512 log_packet_detailed("'adjective' field error detected");
53513 }
53514 }
53515 if (BV_ISSET(fields, 2)) {
53516 log_packet_detailed(" field 'rule_name' has changed");
53517#ifdef FREECIV_JSON_CONNECTION
53518 field_addr.name = "rule_name";
53519#endif /* FREECIV_JSON_CONNECTION */
53520 e = 0;
53521 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
53522 if (e) {
53523 log_packet_detailed("'rule_name' field error detected");
53524 }
53525 }
53526 if (BV_ISSET(fields, 3)) {
53527 log_packet_detailed(" field 'noun_plural' has changed");
53528#ifdef FREECIV_JSON_CONNECTION
53529 field_addr.name = "noun_plural";
53530#endif /* FREECIV_JSON_CONNECTION */
53531 e = 0;
53532 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
53533 if (e) {
53534 log_packet_detailed("'noun_plural' field error detected");
53535 }
53536 }
53537 if (BV_ISSET(fields, 4)) {
53538 log_packet_detailed(" field 'graphic_str' has changed");
53539#ifdef FREECIV_JSON_CONNECTION
53540 field_addr.name = "graphic_str";
53541#endif /* FREECIV_JSON_CONNECTION */
53542 e = 0;
53543 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
53544 if (e) {
53545 log_packet_detailed("'graphic_str' field error detected");
53546 }
53547 }
53548 if (BV_ISSET(fields, 5)) {
53549 log_packet_detailed(" field 'graphic_alt' has changed");
53550#ifdef FREECIV_JSON_CONNECTION
53551 field_addr.name = "graphic_alt";
53552#endif /* FREECIV_JSON_CONNECTION */
53553 e = 0;
53554 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
53555 if (e) {
53556 log_packet_detailed("'graphic_alt' field error detected");
53557 }
53558 }
53559 if (BV_ISSET(fields, 6)) {
53560 log_packet_detailed(" field 'legend' has changed");
53561#ifdef FREECIV_JSON_CONNECTION
53562 field_addr.name = "legend";
53563#endif /* FREECIV_JSON_CONNECTION */
53564 e = 0;
53565 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
53566 if (e) {
53567 log_packet_detailed("'legend' field error detected");
53568 }
53569 }
53570 if (BV_ISSET(fields, 7)) {
53571 log_packet_detailed(" field 'style' has changed");
53572#ifdef FREECIV_JSON_CONNECTION
53573 field_addr.name = "style";
53574#endif /* FREECIV_JSON_CONNECTION */
53575 e = 0;
53576 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
53577 if (e) {
53578 log_packet_detailed("'style' field error detected");
53579 }
53580 }
53581 if (BV_ISSET(fields, 8)) {
53582 log_packet_detailed(" field 'leader_count' has changed");
53583#ifdef FREECIV_JSON_CONNECTION
53584 field_addr.name = "leader_count";
53585#endif /* FREECIV_JSON_CONNECTION */
53586 e = 0;
53587 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
53588 if (e) {
53589 log_packet_detailed("'leader_count' field error detected");
53590 }
53591 }
53592 if (BV_ISSET(fields, 9)) {
53593 log_packet_detailed(" field 'leader_name' has changed");
53594#ifdef FREECIV_JSON_CONNECTION
53595 field_addr.name = "leader_name";
53596#endif /* FREECIV_JSON_CONNECTION */
53597 e = 0;
53598 {
53599 int i;
53600
53601#ifdef FREECIV_JSON_CONNECTION
53602 /* Create the array. */
53603 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
53604
53605 /* Enter the array. */
53606 field_addr.sub_location = plocation_elem_new(0);
53607#endif /* FREECIV_JSON_CONNECTION */
53608
53609 for (i = 0; i < real_packet->leader_count; i++) {
53610#ifdef FREECIV_JSON_CONNECTION
53611 /* Next array element. */
53612 field_addr.sub_location->number = i;
53613#endif /* FREECIV_JSON_CONNECTION */
53614
53615 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
53616 }
53617
53618#ifdef FREECIV_JSON_CONNECTION
53619 /* Exit array. */
53620 FC_FREE(field_addr.sub_location);
53621#endif /* FREECIV_JSON_CONNECTION */
53622 }
53623 if (e) {
53624 log_packet_detailed("'leader_name' field error detected");
53625 }
53626 }
53627 if (BV_ISSET(fields, 10)) {
53628 log_packet_detailed(" field 'leader_is_male' has changed");
53629#ifdef FREECIV_JSON_CONNECTION
53630 field_addr.name = "leader_is_male";
53631#endif /* FREECIV_JSON_CONNECTION */
53632 e = 0;
53633 {
53634 int i;
53635
53636#ifdef FREECIV_JSON_CONNECTION
53637 /* Create the array. */
53638 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
53639
53640 /* Enter the array. */
53641 field_addr.sub_location = plocation_elem_new(0);
53642#endif /* FREECIV_JSON_CONNECTION */
53643
53644 for (i = 0; i < real_packet->leader_count; i++) {
53645#ifdef FREECIV_JSON_CONNECTION
53646 /* Next array element. */
53647 field_addr.sub_location->number = i;
53648#endif /* FREECIV_JSON_CONNECTION */
53649
53650 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
53651 }
53652
53653#ifdef FREECIV_JSON_CONNECTION
53654 /* Exit array. */
53655 FC_FREE(field_addr.sub_location);
53656#endif /* FREECIV_JSON_CONNECTION */
53657 }
53658 if (e) {
53659 log_packet_detailed("'leader_is_male' field error detected");
53660 }
53661 }
53662 /* field 11 is folded into the header */
53663 if (BV_ISSET(fields, 12)) {
53664 log_packet_detailed(" field 'barbarian_type' has changed");
53665#ifdef FREECIV_JSON_CONNECTION
53666 field_addr.name = "barbarian_type";
53667#endif /* FREECIV_JSON_CONNECTION */
53668 e = 0;
53669 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
53670 if (e) {
53671 log_packet_detailed("'barbarian_type' field error detected");
53672 }
53673 }
53674 if (BV_ISSET(fields, 13)) {
53675 log_packet_detailed(" field 'nsets' has changed");
53676#ifdef FREECIV_JSON_CONNECTION
53677 field_addr.name = "nsets";
53678#endif /* FREECIV_JSON_CONNECTION */
53679 e = 0;
53680 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
53681 if (e) {
53682 log_packet_detailed("'nsets' field error detected");
53683 }
53684 }
53685 if (BV_ISSET(fields, 14)) {
53686 log_packet_detailed(" field 'sets' has changed");
53687#ifdef FREECIV_JSON_CONNECTION
53688 field_addr.name = "sets";
53689#endif /* FREECIV_JSON_CONNECTION */
53690 e = 0;
53691 {
53692 int i;
53693
53694#ifdef FREECIV_JSON_CONNECTION
53695 /* Create the array. */
53696 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
53697
53698 /* Enter the array. */
53699 field_addr.sub_location = plocation_elem_new(0);
53700#endif /* FREECIV_JSON_CONNECTION */
53701
53702 for (i = 0; i < real_packet->nsets; i++) {
53703#ifdef FREECIV_JSON_CONNECTION
53704 /* Next array element. */
53705 field_addr.sub_location->number = i;
53706#endif /* FREECIV_JSON_CONNECTION */
53707
53708 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
53709 }
53710
53711#ifdef FREECIV_JSON_CONNECTION
53712 /* Exit array. */
53713 FC_FREE(field_addr.sub_location);
53714#endif /* FREECIV_JSON_CONNECTION */
53715 }
53716 if (e) {
53717 log_packet_detailed("'sets' field error detected");
53718 }
53719 }
53720 if (BV_ISSET(fields, 15)) {
53721 log_packet_detailed(" field 'ngroups' has changed");
53722#ifdef FREECIV_JSON_CONNECTION
53723 field_addr.name = "ngroups";
53724#endif /* FREECIV_JSON_CONNECTION */
53725 e = 0;
53726 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
53727 if (e) {
53728 log_packet_detailed("'ngroups' field error detected");
53729 }
53730 }
53731 if (BV_ISSET(fields, 16)) {
53732 log_packet_detailed(" field 'groups' has changed");
53733#ifdef FREECIV_JSON_CONNECTION
53734 field_addr.name = "groups";
53735#endif /* FREECIV_JSON_CONNECTION */
53736 e = 0;
53737 {
53738 int i;
53739
53740#ifdef FREECIV_JSON_CONNECTION
53741 /* Create the array. */
53742 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
53743
53744 /* Enter the array. */
53745 field_addr.sub_location = plocation_elem_new(0);
53746#endif /* FREECIV_JSON_CONNECTION */
53747
53748 for (i = 0; i < real_packet->ngroups; i++) {
53749#ifdef FREECIV_JSON_CONNECTION
53750 /* Next array element. */
53751 field_addr.sub_location->number = i;
53752#endif /* FREECIV_JSON_CONNECTION */
53753
53754 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
53755 }
53756
53757#ifdef FREECIV_JSON_CONNECTION
53758 /* Exit array. */
53759 FC_FREE(field_addr.sub_location);
53760#endif /* FREECIV_JSON_CONNECTION */
53761 }
53762 if (e) {
53763 log_packet_detailed("'groups' field error detected");
53764 }
53765 }
53766 if (BV_ISSET(fields, 17)) {
53767 log_packet_detailed(" field 'init_government_id' has changed");
53768#ifdef FREECIV_JSON_CONNECTION
53769 field_addr.name = "init_government_id";
53770#endif /* FREECIV_JSON_CONNECTION */
53771 e = 0;
53772 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
53773 if (e) {
53774 log_packet_detailed("'init_government_id' field error detected");
53775 }
53776 }
53777 if (BV_ISSET(fields, 18)) {
53778 log_packet_detailed(" field 'init_techs_count' has changed");
53779#ifdef FREECIV_JSON_CONNECTION
53780 field_addr.name = "init_techs_count";
53781#endif /* FREECIV_JSON_CONNECTION */
53782 e = 0;
53783 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
53784 if (e) {
53785 log_packet_detailed("'init_techs_count' field error detected");
53786 }
53787 }
53788 if (BV_ISSET(fields, 19)) {
53789 log_packet_detailed(" field 'init_techs' has changed");
53790#ifdef FREECIV_JSON_CONNECTION
53791 field_addr.name = "init_techs";
53792#endif /* FREECIV_JSON_CONNECTION */
53793 e = 0;
53794 {
53795 int i;
53796
53797#ifdef FREECIV_JSON_CONNECTION
53798 /* Create the array. */
53799 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
53800
53801 /* Enter the array. */
53802 field_addr.sub_location = plocation_elem_new(0);
53803#endif /* FREECIV_JSON_CONNECTION */
53804
53805 for (i = 0; i < real_packet->init_techs_count; i++) {
53806#ifdef FREECIV_JSON_CONNECTION
53807 /* Next array element. */
53808 field_addr.sub_location->number = i;
53809#endif /* FREECIV_JSON_CONNECTION */
53810
53811 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
53812 }
53813
53814#ifdef FREECIV_JSON_CONNECTION
53815 /* Exit array. */
53816 FC_FREE(field_addr.sub_location);
53817#endif /* FREECIV_JSON_CONNECTION */
53818 }
53819 if (e) {
53820 log_packet_detailed("'init_techs' field error detected");
53821 }
53822 }
53823 if (BV_ISSET(fields, 20)) {
53824 log_packet_detailed(" field 'init_units_count' has changed");
53825#ifdef FREECIV_JSON_CONNECTION
53826 field_addr.name = "init_units_count";
53827#endif /* FREECIV_JSON_CONNECTION */
53828 e = 0;
53829 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
53830 if (e) {
53831 log_packet_detailed("'init_units_count' field error detected");
53832 }
53833 }
53834 if (BV_ISSET(fields, 21)) {
53835 log_packet_detailed(" field 'init_units' has changed");
53836#ifdef FREECIV_JSON_CONNECTION
53837 field_addr.name = "init_units";
53838#endif /* FREECIV_JSON_CONNECTION */
53839 e = 0;
53840 {
53841 int i;
53842
53843#ifdef FREECIV_JSON_CONNECTION
53844 /* Create the array. */
53845 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
53846
53847 /* Enter the array. */
53848 field_addr.sub_location = plocation_elem_new(0);
53849#endif /* FREECIV_JSON_CONNECTION */
53850
53851 for (i = 0; i < real_packet->init_units_count; i++) {
53852#ifdef FREECIV_JSON_CONNECTION
53853 /* Next array element. */
53854 field_addr.sub_location->number = i;
53855#endif /* FREECIV_JSON_CONNECTION */
53856
53857 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
53858 }
53859
53860#ifdef FREECIV_JSON_CONNECTION
53861 /* Exit array. */
53862 FC_FREE(field_addr.sub_location);
53863#endif /* FREECIV_JSON_CONNECTION */
53864 }
53865 if (e) {
53866 log_packet_detailed("'init_units' field error detected");
53867 }
53868 }
53869 if (BV_ISSET(fields, 22)) {
53870 log_packet_detailed(" field 'init_buildings_count' has changed");
53871#ifdef FREECIV_JSON_CONNECTION
53872 field_addr.name = "init_buildings_count";
53873#endif /* FREECIV_JSON_CONNECTION */
53874 e = 0;
53875 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
53876 if (e) {
53877 log_packet_detailed("'init_buildings_count' field error detected");
53878 }
53879 }
53880 if (BV_ISSET(fields, 23)) {
53881 log_packet_detailed(" field 'init_buildings' has changed");
53882#ifdef FREECIV_JSON_CONNECTION
53883 field_addr.name = "init_buildings";
53884#endif /* FREECIV_JSON_CONNECTION */
53885 e = 0;
53886 {
53887 int i;
53888
53889#ifdef FREECIV_JSON_CONNECTION
53890 /* Create the array. */
53891 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
53892
53893 /* Enter the array. */
53894 field_addr.sub_location = plocation_elem_new(0);
53895#endif /* FREECIV_JSON_CONNECTION */
53896
53897 for (i = 0; i < real_packet->init_buildings_count; i++) {
53898#ifdef FREECIV_JSON_CONNECTION
53899 /* Next array element. */
53900 field_addr.sub_location->number = i;
53901#endif /* FREECIV_JSON_CONNECTION */
53902
53903 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
53904 }
53905
53906#ifdef FREECIV_JSON_CONNECTION
53907 /* Exit array. */
53908 FC_FREE(field_addr.sub_location);
53909#endif /* FREECIV_JSON_CONNECTION */
53910 }
53911 if (e) {
53912 log_packet_detailed("'init_buildings' field error detected");
53913 }
53914 }
53915
53916 *old = *real_packet;
53917#endif /* FREECIV_DELTA_PROTOCOL */
53918#ifndef FREECIV_DELTA_PROTOCOL
53919#ifdef FREECIV_JSON_CONNECTION
53920 field_addr.name = "id";
53921#endif /* FREECIV_JSON_CONNECTION */
53922 e = 0;
53923 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
53924 if (e) {
53925 log_packet_detailed("'id' field error detected");
53926 }
53927#ifdef FREECIV_JSON_CONNECTION
53928 field_addr.name = "translation_domain";
53929#endif /* FREECIV_JSON_CONNECTION */
53930 e = 0;
53931 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
53932 if (e) {
53933 log_packet_detailed("'translation_domain' field error detected");
53934 }
53935#ifdef FREECIV_JSON_CONNECTION
53936 field_addr.name = "adjective";
53937#endif /* FREECIV_JSON_CONNECTION */
53938 e = 0;
53939 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
53940 if (e) {
53941 log_packet_detailed("'adjective' field error detected");
53942 }
53943#ifdef FREECIV_JSON_CONNECTION
53944 field_addr.name = "rule_name";
53945#endif /* FREECIV_JSON_CONNECTION */
53946 e = 0;
53947 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
53948 if (e) {
53949 log_packet_detailed("'rule_name' field error detected");
53950 }
53951#ifdef FREECIV_JSON_CONNECTION
53952 field_addr.name = "noun_plural";
53953#endif /* FREECIV_JSON_CONNECTION */
53954 e = 0;
53955 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
53956 if (e) {
53957 log_packet_detailed("'noun_plural' field error detected");
53958 }
53959#ifdef FREECIV_JSON_CONNECTION
53960 field_addr.name = "graphic_str";
53961#endif /* FREECIV_JSON_CONNECTION */
53962 e = 0;
53963 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
53964 if (e) {
53965 log_packet_detailed("'graphic_str' field error detected");
53966 }
53967#ifdef FREECIV_JSON_CONNECTION
53968 field_addr.name = "graphic_alt";
53969#endif /* FREECIV_JSON_CONNECTION */
53970 e = 0;
53971 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
53972 if (e) {
53973 log_packet_detailed("'graphic_alt' field error detected");
53974 }
53975#ifdef FREECIV_JSON_CONNECTION
53976 field_addr.name = "legend";
53977#endif /* FREECIV_JSON_CONNECTION */
53978 e = 0;
53979 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
53980 if (e) {
53981 log_packet_detailed("'legend' field error detected");
53982 }
53983#ifdef FREECIV_JSON_CONNECTION
53984 field_addr.name = "style";
53985#endif /* FREECIV_JSON_CONNECTION */
53986 e = 0;
53987 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
53988 if (e) {
53989 log_packet_detailed("'style' field error detected");
53990 }
53991#ifdef FREECIV_JSON_CONNECTION
53992 field_addr.name = "leader_count";
53993#endif /* FREECIV_JSON_CONNECTION */
53994 e = 0;
53995 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
53996 if (e) {
53997 log_packet_detailed("'leader_count' field error detected");
53998 }
53999#ifdef FREECIV_JSON_CONNECTION
54000 field_addr.name = "leader_name";
54001#endif /* FREECIV_JSON_CONNECTION */
54002 e = 0;
54003 {
54004 int i;
54005
54006#ifdef FREECIV_JSON_CONNECTION
54007 /* Create the array. */
54008 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
54009
54010 /* Enter the array. */
54011 field_addr.sub_location = plocation_elem_new(0);
54012#endif /* FREECIV_JSON_CONNECTION */
54013
54014 for (i = 0; i < real_packet->leader_count; i++) {
54015#ifdef FREECIV_JSON_CONNECTION
54016 /* Next array element. */
54017 field_addr.sub_location->number = i;
54018#endif /* FREECIV_JSON_CONNECTION */
54019
54020 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
54021 }
54022
54023#ifdef FREECIV_JSON_CONNECTION
54024 /* Exit array. */
54025 FC_FREE(field_addr.sub_location);
54026#endif /* FREECIV_JSON_CONNECTION */
54027 }
54028 if (e) {
54029 log_packet_detailed("'leader_name' field error detected");
54030 }
54031#ifdef FREECIV_JSON_CONNECTION
54032 field_addr.name = "leader_is_male";
54033#endif /* FREECIV_JSON_CONNECTION */
54034 e = 0;
54035 {
54036 int i;
54037
54038#ifdef FREECIV_JSON_CONNECTION
54039 /* Create the array. */
54040 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
54041
54042 /* Enter the array. */
54043 field_addr.sub_location = plocation_elem_new(0);
54044#endif /* FREECIV_JSON_CONNECTION */
54045
54046 for (i = 0; i < real_packet->leader_count; i++) {
54047#ifdef FREECIV_JSON_CONNECTION
54048 /* Next array element. */
54049 field_addr.sub_location->number = i;
54050#endif /* FREECIV_JSON_CONNECTION */
54051
54052 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
54053 }
54054
54055#ifdef FREECIV_JSON_CONNECTION
54056 /* Exit array. */
54057 FC_FREE(field_addr.sub_location);
54058#endif /* FREECIV_JSON_CONNECTION */
54059 }
54060 if (e) {
54061 log_packet_detailed("'leader_is_male' field error detected");
54062 }
54063#ifdef FREECIV_JSON_CONNECTION
54064 field_addr.name = "is_playable";
54065#endif /* FREECIV_JSON_CONNECTION */
54066 e = 0;
54067 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_playable);
54068 if (e) {
54069 log_packet_detailed("'is_playable' field error detected");
54070 }
54071#ifdef FREECIV_JSON_CONNECTION
54072 field_addr.name = "barbarian_type";
54073#endif /* FREECIV_JSON_CONNECTION */
54074 e = 0;
54075 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
54076 if (e) {
54077 log_packet_detailed("'barbarian_type' field error detected");
54078 }
54079#ifdef FREECIV_JSON_CONNECTION
54080 field_addr.name = "nsets";
54081#endif /* FREECIV_JSON_CONNECTION */
54082 e = 0;
54083 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
54084 if (e) {
54085 log_packet_detailed("'nsets' field error detected");
54086 }
54087#ifdef FREECIV_JSON_CONNECTION
54088 field_addr.name = "sets";
54089#endif /* FREECIV_JSON_CONNECTION */
54090 e = 0;
54091 {
54092 int i;
54093
54094#ifdef FREECIV_JSON_CONNECTION
54095 /* Create the array. */
54096 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
54097
54098 /* Enter the array. */
54099 field_addr.sub_location = plocation_elem_new(0);
54100#endif /* FREECIV_JSON_CONNECTION */
54101
54102 for (i = 0; i < real_packet->nsets; i++) {
54103#ifdef FREECIV_JSON_CONNECTION
54104 /* Next array element. */
54105 field_addr.sub_location->number = i;
54106#endif /* FREECIV_JSON_CONNECTION */
54107
54108 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
54109 }
54110
54111#ifdef FREECIV_JSON_CONNECTION
54112 /* Exit array. */
54113 FC_FREE(field_addr.sub_location);
54114#endif /* FREECIV_JSON_CONNECTION */
54115 }
54116 if (e) {
54117 log_packet_detailed("'sets' field error detected");
54118 }
54119#ifdef FREECIV_JSON_CONNECTION
54120 field_addr.name = "ngroups";
54121#endif /* FREECIV_JSON_CONNECTION */
54122 e = 0;
54123 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
54124 if (e) {
54125 log_packet_detailed("'ngroups' field error detected");
54126 }
54127#ifdef FREECIV_JSON_CONNECTION
54128 field_addr.name = "groups";
54129#endif /* FREECIV_JSON_CONNECTION */
54130 e = 0;
54131 {
54132 int i;
54133
54134#ifdef FREECIV_JSON_CONNECTION
54135 /* Create the array. */
54136 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
54137
54138 /* Enter the array. */
54139 field_addr.sub_location = plocation_elem_new(0);
54140#endif /* FREECIV_JSON_CONNECTION */
54141
54142 for (i = 0; i < real_packet->ngroups; i++) {
54143#ifdef FREECIV_JSON_CONNECTION
54144 /* Next array element. */
54145 field_addr.sub_location->number = i;
54146#endif /* FREECIV_JSON_CONNECTION */
54147
54148 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
54149 }
54150
54151#ifdef FREECIV_JSON_CONNECTION
54152 /* Exit array. */
54153 FC_FREE(field_addr.sub_location);
54154#endif /* FREECIV_JSON_CONNECTION */
54155 }
54156 if (e) {
54157 log_packet_detailed("'groups' field error detected");
54158 }
54159#ifdef FREECIV_JSON_CONNECTION
54160 field_addr.name = "init_government_id";
54161#endif /* FREECIV_JSON_CONNECTION */
54162 e = 0;
54163 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
54164 if (e) {
54165 log_packet_detailed("'init_government_id' field error detected");
54166 }
54167#ifdef FREECIV_JSON_CONNECTION
54168 field_addr.name = "init_techs_count";
54169#endif /* FREECIV_JSON_CONNECTION */
54170 e = 0;
54171 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
54172 if (e) {
54173 log_packet_detailed("'init_techs_count' field error detected");
54174 }
54175#ifdef FREECIV_JSON_CONNECTION
54176 field_addr.name = "init_techs";
54177#endif /* FREECIV_JSON_CONNECTION */
54178 e = 0;
54179 {
54180 int i;
54181
54182#ifdef FREECIV_JSON_CONNECTION
54183 /* Create the array. */
54184 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
54185
54186 /* Enter the array. */
54187 field_addr.sub_location = plocation_elem_new(0);
54188#endif /* FREECIV_JSON_CONNECTION */
54189
54190 for (i = 0; i < real_packet->init_techs_count; i++) {
54191#ifdef FREECIV_JSON_CONNECTION
54192 /* Next array element. */
54193 field_addr.sub_location->number = i;
54194#endif /* FREECIV_JSON_CONNECTION */
54195
54196 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
54197 }
54198
54199#ifdef FREECIV_JSON_CONNECTION
54200 /* Exit array. */
54201 FC_FREE(field_addr.sub_location);
54202#endif /* FREECIV_JSON_CONNECTION */
54203 }
54204 if (e) {
54205 log_packet_detailed("'init_techs' field error detected");
54206 }
54207#ifdef FREECIV_JSON_CONNECTION
54208 field_addr.name = "init_units_count";
54209#endif /* FREECIV_JSON_CONNECTION */
54210 e = 0;
54211 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
54212 if (e) {
54213 log_packet_detailed("'init_units_count' field error detected");
54214 }
54215#ifdef FREECIV_JSON_CONNECTION
54216 field_addr.name = "init_units";
54217#endif /* FREECIV_JSON_CONNECTION */
54218 e = 0;
54219 {
54220 int i;
54221
54222#ifdef FREECIV_JSON_CONNECTION
54223 /* Create the array. */
54224 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
54225
54226 /* Enter the array. */
54227 field_addr.sub_location = plocation_elem_new(0);
54228#endif /* FREECIV_JSON_CONNECTION */
54229
54230 for (i = 0; i < real_packet->init_units_count; i++) {
54231#ifdef FREECIV_JSON_CONNECTION
54232 /* Next array element. */
54233 field_addr.sub_location->number = i;
54234#endif /* FREECIV_JSON_CONNECTION */
54235
54236 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
54237 }
54238
54239#ifdef FREECIV_JSON_CONNECTION
54240 /* Exit array. */
54241 FC_FREE(field_addr.sub_location);
54242#endif /* FREECIV_JSON_CONNECTION */
54243 }
54244 if (e) {
54245 log_packet_detailed("'init_units' field error detected");
54246 }
54247#ifdef FREECIV_JSON_CONNECTION
54248 field_addr.name = "init_buildings_count";
54249#endif /* FREECIV_JSON_CONNECTION */
54250 e = 0;
54251 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
54252 if (e) {
54253 log_packet_detailed("'init_buildings_count' field error detected");
54254 }
54255#ifdef FREECIV_JSON_CONNECTION
54256 field_addr.name = "init_buildings";
54257#endif /* FREECIV_JSON_CONNECTION */
54258 e = 0;
54259 {
54260 int i;
54261
54262#ifdef FREECIV_JSON_CONNECTION
54263 /* Create the array. */
54264 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
54265
54266 /* Enter the array. */
54267 field_addr.sub_location = plocation_elem_new(0);
54268#endif /* FREECIV_JSON_CONNECTION */
54269
54270 for (i = 0; i < real_packet->init_buildings_count; i++) {
54271#ifdef FREECIV_JSON_CONNECTION
54272 /* Next array element. */
54273 field_addr.sub_location->number = i;
54274#endif /* FREECIV_JSON_CONNECTION */
54275
54276 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
54277 }
54278
54279#ifdef FREECIV_JSON_CONNECTION
54280 /* Exit array. */
54281 FC_FREE(field_addr.sub_location);
54282#endif /* FREECIV_JSON_CONNECTION */
54283 }
54284 if (e) {
54285 log_packet_detailed("'init_buildings' field error detected");
54286 }
54287
54288#endif
54290}
54291
54293{
54294 if (!pc->used) {
54295 log_error("WARNING: trying to send data to the closed connection %s",
54297 return -1;
54298 }
54299 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION].packet != NULL, -1,
54300 "Handler for PACKET_RULESET_NATION not installed");
54301 return pc->phs.handlers->send[PACKET_RULESET_NATION].packet(pc, packet);
54302}
54303
54304void lsend_packet_ruleset_nation(struct conn_list *dest, const struct packet_ruleset_nation *packet)
54305{
54306 conn_list_iterate(dest, pconn) {
54309}
54310
54311#ifdef FREECIV_DELTA_PROTOCOL
54312#define hash_packet_nation_availability_100 hash_const
54313
54314#define cmp_packet_nation_availability_100 cmp_const
54315
54317#endif /* FREECIV_DELTA_PROTOCOL */
54318
54320{
54321#ifdef FREECIV_DELTA_PROTOCOL
54323 struct packet_nation_availability *old;
54324 struct genhash **hash = pc->phs.received + PACKET_NATION_AVAILABILITY;
54325#endif /* FREECIV_DELTA_PROTOCOL */
54327#ifdef FREECIV_JSON_CONNECTION
54328 struct plocation field_addr;
54329 {
54333 }
54334#endif /* FREECIV_JSON_CONNECTION */
54335
54336#ifdef FREECIV_DELTA_PROTOCOL
54337#ifdef FREECIV_JSON_CONNECTION
54338 field_addr.name = "fields";
54339#endif /* FREECIV_JSON_CONNECTION */
54340 DIO_BV_GET(&din, &field_addr, fields);
54341
54342#else /* FREECIV_DELTA_PROTOCOL */
54343#ifdef FREECIV_JSON_CONNECTION
54344 field_addr.name = "ncount";
54345#endif /* FREECIV_JSON_CONNECTION */
54346 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
54348 }
54349#ifdef FREECIV_JSON_CONNECTION
54350 field_addr.name = "is_pickable";
54351#endif /* FREECIV_JSON_CONNECTION */
54352 if (real_packet->ncount > MAX_NUM_NATIONS) {
54353 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": truncation array");
54354 }
54355 {
54356 int i;
54357
54358#ifdef FREECIV_JSON_CONNECTION
54359 /* Enter array. */
54360 field_addr.sub_location = plocation_elem_new(0);
54361#endif /* FREECIV_JSON_CONNECTION */
54362
54363 for (i = 0; i < real_packet->ncount; i++) {
54364#ifdef FREECIV_JSON_CONNECTION
54365 field_addr.sub_location->number = i;
54366#endif /* FREECIV_JSON_CONNECTION */
54367
54368 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
54369 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
54370 }
54371 }
54372
54373#ifdef FREECIV_JSON_CONNECTION
54374 /* Exit array. */
54375 FC_FREE(field_addr.sub_location);
54376#endif /* FREECIV_JSON_CONNECTION */
54377 }
54378#ifdef FREECIV_JSON_CONNECTION
54379 field_addr.name = "nationset_change";
54380#endif /* FREECIV_JSON_CONNECTION */
54381 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->nationset_change)) {
54382 RECEIVE_PACKET_FIELD_ERROR(nationset_change);
54383 }
54384#endif
54385 log_packet_detailed("packet_nation_availability_100: got info about ()");
54386
54387#ifdef FREECIV_DELTA_PROTOCOL
54388 if (NULL == *hash) {
54390 NULL, NULL, NULL, free);
54391 }
54392
54393 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54394 *real_packet = *old;
54395 } else {
54396 log_packet_detailed(" no old info");
54397 memset(real_packet, 0, sizeof(*real_packet));
54398 }
54399
54400 if (BV_ISSET(fields, 0)) {
54401 log_packet_detailed(" got field 'ncount'");
54402#ifdef FREECIV_JSON_CONNECTION
54403 field_addr.name = "ncount";
54404#endif /* FREECIV_JSON_CONNECTION */
54405 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
54407 }
54408 }
54409 if (BV_ISSET(fields, 1)) {
54410 log_packet_detailed(" got field 'is_pickable'");
54411#ifdef FREECIV_JSON_CONNECTION
54412 field_addr.name = "is_pickable";
54413#endif /* FREECIV_JSON_CONNECTION */
54414 if (real_packet->ncount > MAX_NUM_NATIONS) {
54415 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": truncation array");
54416 }
54417 {
54418 int i;
54419
54420#ifdef FREECIV_JSON_CONNECTION
54421 /* Enter array. */
54422 field_addr.sub_location = plocation_elem_new(0);
54423#endif /* FREECIV_JSON_CONNECTION */
54424
54425 for (i = 0; i < real_packet->ncount; i++) {
54426#ifdef FREECIV_JSON_CONNECTION
54427 field_addr.sub_location->number = i;
54428#endif /* FREECIV_JSON_CONNECTION */
54429
54430 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
54431 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
54432 }
54433 }
54434
54435#ifdef FREECIV_JSON_CONNECTION
54436 /* Exit array. */
54437 FC_FREE(field_addr.sub_location);
54438#endif /* FREECIV_JSON_CONNECTION */
54439 }
54440 }
54441 real_packet->nationset_change = BV_ISSET(fields, 2);
54442
54443 if (NULL == old) {
54444 old = fc_malloc(sizeof(*old));
54445 *old = *real_packet;
54446 genhash_insert(*hash, old, old);
54447 } else {
54448 *old = *real_packet;
54449 }
54450
54451#endif /* FREECIV_DELTA_PROTOCOL */
54453}
54454
54456{
54457 const struct packet_nation_availability *real_packet = packet;
54458 int e;
54459#ifdef FREECIV_DELTA_PROTOCOL
54461 struct packet_nation_availability *old;
54462 bool differ;
54463 struct genhash **hash = pc->phs.sent + PACKET_NATION_AVAILABILITY;
54464#endif /* FREECIV_DELTA_PROTOCOL */
54466#ifdef FREECIV_JSON_CONNECTION
54467 struct plocation field_addr;
54468 {
54472 }
54473#endif /* FREECIV_JSON_CONNECTION */
54474
54475 log_packet_detailed("packet_nation_availability_100: sending info about ()");
54476
54477#ifdef FREECIV_DELTA_PROTOCOL
54478 if (NULL == *hash) {
54480 NULL, NULL, NULL, free);
54481 }
54482 BV_CLR_ALL(fields);
54483
54484 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
54485 old = fc_malloc(sizeof(*old));
54486 *old = *real_packet;
54487 genhash_insert(*hash, old, old);
54488 memset(old, 0, sizeof(*old));
54489 }
54490 differ = (old->ncount != real_packet->ncount);
54491 if (differ) {
54492 BV_SET(fields, 0);
54493 }
54494
54495 differ = (old->ncount != real_packet->ncount);
54496 if (!differ) {
54497 int i;
54498
54499 for (i = 0; i < real_packet->ncount; i++) {
54500 differ = (old->is_pickable[i] != real_packet->is_pickable[i]);
54501 if (differ) {
54502 break;
54503 }
54504 }
54505 }
54506 if (differ) {
54507 BV_SET(fields, 1);
54508 }
54509
54510 if (packet->nationset_change) {
54511 BV_SET(fields, 2);
54512 }
54513
54514
54515#ifdef FREECIV_JSON_CONNECTION
54516 field_addr.name = "fields";
54517#endif /* FREECIV_JSON_CONNECTION */
54518 e = 0;
54519 e |= DIO_BV_PUT(&dout, &field_addr, fields);
54520 if (e) {
54521 log_packet_detailed("fields bitvector error detected");
54522 }
54523
54524 if (BV_ISSET(fields, 0)) {
54525 log_packet_detailed(" field 'ncount' has changed");
54526#ifdef FREECIV_JSON_CONNECTION
54527 field_addr.name = "ncount";
54528#endif /* FREECIV_JSON_CONNECTION */
54529 e = 0;
54530 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
54531 if (e) {
54532 log_packet_detailed("'ncount' field error detected");
54533 }
54534 }
54535 if (BV_ISSET(fields, 1)) {
54536 log_packet_detailed(" field 'is_pickable' has changed");
54537#ifdef FREECIV_JSON_CONNECTION
54538 field_addr.name = "is_pickable";
54539#endif /* FREECIV_JSON_CONNECTION */
54540 e = 0;
54541 {
54542 int i;
54543
54544#ifdef FREECIV_JSON_CONNECTION
54545 /* Create the array. */
54546 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
54547
54548 /* Enter the array. */
54549 field_addr.sub_location = plocation_elem_new(0);
54550#endif /* FREECIV_JSON_CONNECTION */
54551
54552 for (i = 0; i < real_packet->ncount; i++) {
54553#ifdef FREECIV_JSON_CONNECTION
54554 /* Next array element. */
54555 field_addr.sub_location->number = i;
54556#endif /* FREECIV_JSON_CONNECTION */
54557
54558 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
54559 }
54560
54561#ifdef FREECIV_JSON_CONNECTION
54562 /* Exit array. */
54563 FC_FREE(field_addr.sub_location);
54564#endif /* FREECIV_JSON_CONNECTION */
54565 }
54566 if (e) {
54567 log_packet_detailed("'is_pickable' field error detected");
54568 }
54569 }
54570 /* field 2 is folded into the header */
54571
54572 *old = *real_packet;
54573#endif /* FREECIV_DELTA_PROTOCOL */
54574#ifndef FREECIV_DELTA_PROTOCOL
54575#ifdef FREECIV_JSON_CONNECTION
54576 field_addr.name = "ncount";
54577#endif /* FREECIV_JSON_CONNECTION */
54578 e = 0;
54579 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
54580 if (e) {
54581 log_packet_detailed("'ncount' field error detected");
54582 }
54583#ifdef FREECIV_JSON_CONNECTION
54584 field_addr.name = "is_pickable";
54585#endif /* FREECIV_JSON_CONNECTION */
54586 e = 0;
54587 {
54588 int i;
54589
54590#ifdef FREECIV_JSON_CONNECTION
54591 /* Create the array. */
54592 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
54593
54594 /* Enter the array. */
54595 field_addr.sub_location = plocation_elem_new(0);
54596#endif /* FREECIV_JSON_CONNECTION */
54597
54598 for (i = 0; i < real_packet->ncount; i++) {
54599#ifdef FREECIV_JSON_CONNECTION
54600 /* Next array element. */
54601 field_addr.sub_location->number = i;
54602#endif /* FREECIV_JSON_CONNECTION */
54603
54604 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
54605 }
54606
54607#ifdef FREECIV_JSON_CONNECTION
54608 /* Exit array. */
54609 FC_FREE(field_addr.sub_location);
54610#endif /* FREECIV_JSON_CONNECTION */
54611 }
54612 if (e) {
54613 log_packet_detailed("'is_pickable' field error detected");
54614 }
54615#ifdef FREECIV_JSON_CONNECTION
54616 field_addr.name = "nationset_change";
54617#endif /* FREECIV_JSON_CONNECTION */
54618 e = 0;
54619 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->nationset_change);
54620 if (e) {
54621 log_packet_detailed("'nationset_change' field error detected");
54622 }
54623
54624#endif
54626}
54627
54629{
54630 if (!pc->used) {
54631 log_error("WARNING: trying to send data to the closed connection %s",
54633 return -1;
54634 }
54635 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet != NULL, -1,
54636 "Handler for PACKET_NATION_AVAILABILITY not installed");
54637 return pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet(pc, packet);
54638}
54639
54641{
54642 conn_list_iterate(dest, pconn) {
54645}
54646
54647#ifdef FREECIV_DELTA_PROTOCOL
54648#define hash_packet_ruleset_style_100 hash_const
54649
54650#define cmp_packet_ruleset_style_100 cmp_const
54651
54653#endif /* FREECIV_DELTA_PROTOCOL */
54654
54656{
54657#ifdef FREECIV_DELTA_PROTOCOL
54659 struct packet_ruleset_style *old;
54660 struct genhash **hash = pc->phs.received + PACKET_RULESET_STYLE;
54661#endif /* FREECIV_DELTA_PROTOCOL */
54663#ifdef FREECIV_JSON_CONNECTION
54664 struct plocation field_addr;
54665 {
54669 }
54670#endif /* FREECIV_JSON_CONNECTION */
54671
54672#ifdef FREECIV_DELTA_PROTOCOL
54673#ifdef FREECIV_JSON_CONNECTION
54674 field_addr.name = "fields";
54675#endif /* FREECIV_JSON_CONNECTION */
54676 DIO_BV_GET(&din, &field_addr, fields);
54677
54678#else /* FREECIV_DELTA_PROTOCOL */
54679#ifdef FREECIV_JSON_CONNECTION
54680 field_addr.name = "id";
54681#endif /* FREECIV_JSON_CONNECTION */
54682 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
54684 }
54685#ifdef FREECIV_JSON_CONNECTION
54686 field_addr.name = "name";
54687#endif /* FREECIV_JSON_CONNECTION */
54688 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
54690 }
54691#ifdef FREECIV_JSON_CONNECTION
54692 field_addr.name = "rule_name";
54693#endif /* FREECIV_JSON_CONNECTION */
54694 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
54695 RECEIVE_PACKET_FIELD_ERROR(rule_name);
54696 }
54697#endif
54698 log_packet_detailed("packet_ruleset_style_100: got info about ()");
54699
54700#ifdef FREECIV_DELTA_PROTOCOL
54701 if (NULL == *hash) {
54703 NULL, NULL, NULL, free);
54704 }
54705
54706 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54707 *real_packet = *old;
54708 } else {
54709 log_packet_detailed(" no old info");
54710 memset(real_packet, 0, sizeof(*real_packet));
54711 }
54712
54713 if (BV_ISSET(fields, 0)) {
54714 log_packet_detailed(" got field 'id'");
54715#ifdef FREECIV_JSON_CONNECTION
54716 field_addr.name = "id";
54717#endif /* FREECIV_JSON_CONNECTION */
54718 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
54720 }
54721 }
54722 if (BV_ISSET(fields, 1)) {
54723 log_packet_detailed(" got field 'name'");
54724#ifdef FREECIV_JSON_CONNECTION
54725 field_addr.name = "name";
54726#endif /* FREECIV_JSON_CONNECTION */
54727 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
54729 }
54730 }
54731 if (BV_ISSET(fields, 2)) {
54732 log_packet_detailed(" got field 'rule_name'");
54733#ifdef FREECIV_JSON_CONNECTION
54734 field_addr.name = "rule_name";
54735#endif /* FREECIV_JSON_CONNECTION */
54736 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
54737 RECEIVE_PACKET_FIELD_ERROR(rule_name);
54738 }
54739 }
54740
54741 if (NULL == old) {
54742 old = fc_malloc(sizeof(*old));
54743 *old = *real_packet;
54744 genhash_insert(*hash, old, old);
54745 } else {
54746 *old = *real_packet;
54747 }
54748
54749#endif /* FREECIV_DELTA_PROTOCOL */
54751}
54752
54753static int send_packet_ruleset_style_100(struct connection *pc, const struct packet_ruleset_style *packet)
54754{
54755 const struct packet_ruleset_style *real_packet = packet;
54756 int e;
54757#ifdef FREECIV_DELTA_PROTOCOL
54759 struct packet_ruleset_style *old;
54760 bool differ;
54761 struct genhash **hash = pc->phs.sent + PACKET_RULESET_STYLE;
54762#endif /* FREECIV_DELTA_PROTOCOL */
54764#ifdef FREECIV_JSON_CONNECTION
54765 struct plocation field_addr;
54766 {
54770 }
54771#endif /* FREECIV_JSON_CONNECTION */
54772
54773 log_packet_detailed("packet_ruleset_style_100: sending info about ()");
54774
54775#ifdef FREECIV_DELTA_PROTOCOL
54776 if (NULL == *hash) {
54778 NULL, NULL, NULL, free);
54779 }
54780 BV_CLR_ALL(fields);
54781
54782 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
54783 old = fc_malloc(sizeof(*old));
54784 *old = *real_packet;
54785 genhash_insert(*hash, old, old);
54786 memset(old, 0, sizeof(*old));
54787 }
54788 differ = (old->id != real_packet->id);
54789 if (differ) {
54790 BV_SET(fields, 0);
54791 }
54792
54793 differ = (strcmp(old->name, real_packet->name) != 0);
54794 if (differ) {
54795 BV_SET(fields, 1);
54796 }
54797
54798 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
54799 if (differ) {
54800 BV_SET(fields, 2);
54801 }
54802
54803
54804#ifdef FREECIV_JSON_CONNECTION
54805 field_addr.name = "fields";
54806#endif /* FREECIV_JSON_CONNECTION */
54807 e = 0;
54808 e |= DIO_BV_PUT(&dout, &field_addr, fields);
54809 if (e) {
54810 log_packet_detailed("fields bitvector error detected");
54811 }
54812
54813 if (BV_ISSET(fields, 0)) {
54814 log_packet_detailed(" field 'id' has changed");
54815#ifdef FREECIV_JSON_CONNECTION
54816 field_addr.name = "id";
54817#endif /* FREECIV_JSON_CONNECTION */
54818 e = 0;
54819 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
54820 if (e) {
54821 log_packet_detailed("'id' field error detected");
54822 }
54823 }
54824 if (BV_ISSET(fields, 1)) {
54825 log_packet_detailed(" field 'name' has changed");
54826#ifdef FREECIV_JSON_CONNECTION
54827 field_addr.name = "name";
54828#endif /* FREECIV_JSON_CONNECTION */
54829 e = 0;
54830 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
54831 if (e) {
54832 log_packet_detailed("'name' field error detected");
54833 }
54834 }
54835 if (BV_ISSET(fields, 2)) {
54836 log_packet_detailed(" field 'rule_name' has changed");
54837#ifdef FREECIV_JSON_CONNECTION
54838 field_addr.name = "rule_name";
54839#endif /* FREECIV_JSON_CONNECTION */
54840 e = 0;
54841 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54842 if (e) {
54843 log_packet_detailed("'rule_name' field error detected");
54844 }
54845 }
54846
54847 *old = *real_packet;
54848#endif /* FREECIV_DELTA_PROTOCOL */
54849#ifndef FREECIV_DELTA_PROTOCOL
54850#ifdef FREECIV_JSON_CONNECTION
54851 field_addr.name = "id";
54852#endif /* FREECIV_JSON_CONNECTION */
54853 e = 0;
54854 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
54855 if (e) {
54856 log_packet_detailed("'id' field error detected");
54857 }
54858#ifdef FREECIV_JSON_CONNECTION
54859 field_addr.name = "name";
54860#endif /* FREECIV_JSON_CONNECTION */
54861 e = 0;
54862 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
54863 if (e) {
54864 log_packet_detailed("'name' field error detected");
54865 }
54866#ifdef FREECIV_JSON_CONNECTION
54867 field_addr.name = "rule_name";
54868#endif /* FREECIV_JSON_CONNECTION */
54869 e = 0;
54870 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54871 if (e) {
54872 log_packet_detailed("'rule_name' field error detected");
54873 }
54874
54875#endif
54877}
54878
54880{
54881 if (!pc->used) {
54882 log_error("WARNING: trying to send data to the closed connection %s",
54884 return -1;
54885 }
54886 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_STYLE].packet != NULL, -1,
54887 "Handler for PACKET_RULESET_STYLE not installed");
54888 return pc->phs.handlers->send[PACKET_RULESET_STYLE].packet(pc, packet);
54889}
54890
54891void lsend_packet_ruleset_style(struct conn_list *dest, const struct packet_ruleset_style *packet)
54892{
54893 conn_list_iterate(dest, pconn) {
54896}
54897
54898#ifdef FREECIV_DELTA_PROTOCOL
54899#define hash_packet_ruleset_city_100 hash_const
54900
54901#define cmp_packet_ruleset_city_100 cmp_const
54902
54904#endif /* FREECIV_DELTA_PROTOCOL */
54905
54907{
54908#ifdef FREECIV_DELTA_PROTOCOL
54910 struct packet_ruleset_city *old;
54911 struct genhash **hash = pc->phs.received + PACKET_RULESET_CITY;
54912#endif /* FREECIV_DELTA_PROTOCOL */
54914#ifdef FREECIV_JSON_CONNECTION
54915 struct plocation field_addr;
54916 {
54920 }
54921#endif /* FREECIV_JSON_CONNECTION */
54922
54923#ifdef FREECIV_DELTA_PROTOCOL
54924#ifdef FREECIV_JSON_CONNECTION
54925 field_addr.name = "fields";
54926#endif /* FREECIV_JSON_CONNECTION */
54927 DIO_BV_GET(&din, &field_addr, fields);
54928
54929#else /* FREECIV_DELTA_PROTOCOL */
54930#ifdef FREECIV_JSON_CONNECTION
54931 field_addr.name = "style_id";
54932#endif /* FREECIV_JSON_CONNECTION */
54933 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
54935 }
54936#ifdef FREECIV_JSON_CONNECTION
54937 field_addr.name = "name";
54938#endif /* FREECIV_JSON_CONNECTION */
54939 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
54941 }
54942#ifdef FREECIV_JSON_CONNECTION
54943 field_addr.name = "rule_name";
54944#endif /* FREECIV_JSON_CONNECTION */
54945 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
54946 RECEIVE_PACKET_FIELD_ERROR(rule_name);
54947 }
54948#ifdef FREECIV_JSON_CONNECTION
54949 field_addr.name = "citizens_graphic";
54950#endif /* FREECIV_JSON_CONNECTION */
54951 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
54952 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
54953 }
54954#ifdef FREECIV_JSON_CONNECTION
54955 field_addr.name = "reqs_count";
54956#endif /* FREECIV_JSON_CONNECTION */
54957 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
54958 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
54959 }
54960#ifdef FREECIV_JSON_CONNECTION
54961 field_addr.name = "reqs";
54962#endif /* FREECIV_JSON_CONNECTION */
54963 if (real_packet->reqs_count > MAX_NUM_REQS) {
54964 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
54965 }
54966 {
54967 int i;
54968
54969#ifdef FREECIV_JSON_CONNECTION
54970 /* Enter array. */
54971 field_addr.sub_location = plocation_elem_new(0);
54972#endif /* FREECIV_JSON_CONNECTION */
54973
54974 for (i = 0; i < real_packet->reqs_count; i++) {
54975#ifdef FREECIV_JSON_CONNECTION
54976 field_addr.sub_location->number = i;
54977#endif /* FREECIV_JSON_CONNECTION */
54978
54979 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
54981 }
54982 }
54983
54984#ifdef FREECIV_JSON_CONNECTION
54985 /* Exit array. */
54986 FC_FREE(field_addr.sub_location);
54987#endif /* FREECIV_JSON_CONNECTION */
54988 }
54989#ifdef FREECIV_JSON_CONNECTION
54990 field_addr.name = "graphic";
54991#endif /* FREECIV_JSON_CONNECTION */
54992 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
54994 }
54995#ifdef FREECIV_JSON_CONNECTION
54996 field_addr.name = "graphic_alt";
54997#endif /* FREECIV_JSON_CONNECTION */
54998 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
54999 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55000 }
55001#endif
55002 log_packet_detailed("packet_ruleset_city_100: got info about ()");
55003
55004#ifdef FREECIV_DELTA_PROTOCOL
55005 if (NULL == *hash) {
55007 NULL, NULL, NULL, free);
55008 }
55009
55010 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
55011 *real_packet = *old;
55012 } else {
55013 log_packet_detailed(" no old info");
55014 memset(real_packet, 0, sizeof(*real_packet));
55015 }
55016
55017 if (BV_ISSET(fields, 0)) {
55018 log_packet_detailed(" got field 'style_id'");
55019#ifdef FREECIV_JSON_CONNECTION
55020 field_addr.name = "style_id";
55021#endif /* FREECIV_JSON_CONNECTION */
55022 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
55024 }
55025 }
55026 if (BV_ISSET(fields, 1)) {
55027 log_packet_detailed(" got field 'name'");
55028#ifdef FREECIV_JSON_CONNECTION
55029 field_addr.name = "name";
55030#endif /* FREECIV_JSON_CONNECTION */
55031 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55033 }
55034 }
55035 if (BV_ISSET(fields, 2)) {
55036 log_packet_detailed(" got field 'rule_name'");
55037#ifdef FREECIV_JSON_CONNECTION
55038 field_addr.name = "rule_name";
55039#endif /* FREECIV_JSON_CONNECTION */
55040 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55041 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55042 }
55043 }
55044 if (BV_ISSET(fields, 3)) {
55045 log_packet_detailed(" got field 'citizens_graphic'");
55046#ifdef FREECIV_JSON_CONNECTION
55047 field_addr.name = "citizens_graphic";
55048#endif /* FREECIV_JSON_CONNECTION */
55049 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
55050 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
55051 }
55052 }
55053 if (BV_ISSET(fields, 4)) {
55054 log_packet_detailed(" got field 'reqs_count'");
55055#ifdef FREECIV_JSON_CONNECTION
55056 field_addr.name = "reqs_count";
55057#endif /* FREECIV_JSON_CONNECTION */
55058 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
55059 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
55060 }
55061 }
55062 if (BV_ISSET(fields, 5)) {
55063 log_packet_detailed(" got field 'reqs'");
55064#ifdef FREECIV_JSON_CONNECTION
55065 field_addr.name = "reqs";
55066#endif /* FREECIV_JSON_CONNECTION */
55067 if (real_packet->reqs_count > MAX_NUM_REQS) {
55068 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
55069 }
55070 {
55071 int i;
55072
55073#ifdef FREECIV_JSON_CONNECTION
55074 /* Enter array. */
55075 field_addr.sub_location = plocation_elem_new(0);
55076#endif /* FREECIV_JSON_CONNECTION */
55077
55078 for (i = 0; i < real_packet->reqs_count; i++) {
55079#ifdef FREECIV_JSON_CONNECTION
55080 field_addr.sub_location->number = i;
55081#endif /* FREECIV_JSON_CONNECTION */
55082
55083 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
55085 }
55086 }
55087
55088#ifdef FREECIV_JSON_CONNECTION
55089 /* Exit array. */
55090 FC_FREE(field_addr.sub_location);
55091#endif /* FREECIV_JSON_CONNECTION */
55092 }
55093 }
55094 if (BV_ISSET(fields, 6)) {
55095 log_packet_detailed(" got field 'graphic'");
55096#ifdef FREECIV_JSON_CONNECTION
55097 field_addr.name = "graphic";
55098#endif /* FREECIV_JSON_CONNECTION */
55099 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
55101 }
55102 }
55103 if (BV_ISSET(fields, 7)) {
55104 log_packet_detailed(" got field 'graphic_alt'");
55105#ifdef FREECIV_JSON_CONNECTION
55106 field_addr.name = "graphic_alt";
55107#endif /* FREECIV_JSON_CONNECTION */
55108 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55109 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55110 }
55111 }
55112
55113 if (NULL == old) {
55114 old = fc_malloc(sizeof(*old));
55115 *old = *real_packet;
55116 genhash_insert(*hash, old, old);
55117 } else {
55118 *old = *real_packet;
55119 }
55120
55121#endif /* FREECIV_DELTA_PROTOCOL */
55123}
55124
55125static int send_packet_ruleset_city_100(struct connection *pc, const struct packet_ruleset_city *packet)
55126{
55127 const struct packet_ruleset_city *real_packet = packet;
55128 int e;
55129#ifdef FREECIV_DELTA_PROTOCOL
55131 struct packet_ruleset_city *old;
55132 bool differ;
55133 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CITY;
55134#endif /* FREECIV_DELTA_PROTOCOL */
55136#ifdef FREECIV_JSON_CONNECTION
55137 struct plocation field_addr;
55138 {
55142 }
55143#endif /* FREECIV_JSON_CONNECTION */
55144
55145 log_packet_detailed("packet_ruleset_city_100: sending info about ()");
55146
55147#ifdef FREECIV_DELTA_PROTOCOL
55148 if (NULL == *hash) {
55150 NULL, NULL, NULL, free);
55151 }
55152 BV_CLR_ALL(fields);
55153
55154 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
55155 old = fc_malloc(sizeof(*old));
55156 *old = *real_packet;
55157 genhash_insert(*hash, old, old);
55158 memset(old, 0, sizeof(*old));
55159 }
55160 differ = (old->style_id != real_packet->style_id);
55161 if (differ) {
55162 BV_SET(fields, 0);
55163 }
55164
55165 differ = (strcmp(old->name, real_packet->name) != 0);
55166 if (differ) {
55167 BV_SET(fields, 1);
55168 }
55169
55170 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
55171 if (differ) {
55172 BV_SET(fields, 2);
55173 }
55174
55175 differ = (strcmp(old->citizens_graphic, real_packet->citizens_graphic) != 0);
55176 if (differ) {
55177 BV_SET(fields, 3);
55178 }
55179
55180 differ = (old->reqs_count != real_packet->reqs_count);
55181 if (differ) {
55182 BV_SET(fields, 4);
55183 }
55184
55185 differ = (old->reqs_count != real_packet->reqs_count);
55186 if (!differ) {
55187 int i;
55188
55189 for (i = 0; i < real_packet->reqs_count; i++) {
55190 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
55191 if (differ) {
55192 break;
55193 }
55194 }
55195 }
55196 if (differ) {
55197 BV_SET(fields, 5);
55198 }
55199
55200 differ = (strcmp(old->graphic, real_packet->graphic) != 0);
55201 if (differ) {
55202 BV_SET(fields, 6);
55203 }
55204
55205 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
55206 if (differ) {
55207 BV_SET(fields, 7);
55208 }
55209
55210
55211#ifdef FREECIV_JSON_CONNECTION
55212 field_addr.name = "fields";
55213#endif /* FREECIV_JSON_CONNECTION */
55214 e = 0;
55215 e |= DIO_BV_PUT(&dout, &field_addr, fields);
55216 if (e) {
55217 log_packet_detailed("fields bitvector error detected");
55218 }
55219
55220 if (BV_ISSET(fields, 0)) {
55221 log_packet_detailed(" field 'style_id' has changed");
55222#ifdef FREECIV_JSON_CONNECTION
55223 field_addr.name = "style_id";
55224#endif /* FREECIV_JSON_CONNECTION */
55225 e = 0;
55226 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
55227 if (e) {
55228 log_packet_detailed("'style_id' field error detected");
55229 }
55230 }
55231 if (BV_ISSET(fields, 1)) {
55232 log_packet_detailed(" field 'name' has changed");
55233#ifdef FREECIV_JSON_CONNECTION
55234 field_addr.name = "name";
55235#endif /* FREECIV_JSON_CONNECTION */
55236 e = 0;
55237 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
55238 if (e) {
55239 log_packet_detailed("'name' field error detected");
55240 }
55241 }
55242 if (BV_ISSET(fields, 2)) {
55243 log_packet_detailed(" field 'rule_name' has changed");
55244#ifdef FREECIV_JSON_CONNECTION
55245 field_addr.name = "rule_name";
55246#endif /* FREECIV_JSON_CONNECTION */
55247 e = 0;
55248 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
55249 if (e) {
55250 log_packet_detailed("'rule_name' field error detected");
55251 }
55252 }
55253 if (BV_ISSET(fields, 3)) {
55254 log_packet_detailed(" field 'citizens_graphic' has changed");
55255#ifdef FREECIV_JSON_CONNECTION
55256 field_addr.name = "citizens_graphic";
55257#endif /* FREECIV_JSON_CONNECTION */
55258 e = 0;
55259 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
55260 if (e) {
55261 log_packet_detailed("'citizens_graphic' field error detected");
55262 }
55263 }
55264 if (BV_ISSET(fields, 4)) {
55265 log_packet_detailed(" field 'reqs_count' has changed");
55266#ifdef FREECIV_JSON_CONNECTION
55267 field_addr.name = "reqs_count";
55268#endif /* FREECIV_JSON_CONNECTION */
55269 e = 0;
55270 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
55271 if (e) {
55272 log_packet_detailed("'reqs_count' field error detected");
55273 }
55274 }
55275 if (BV_ISSET(fields, 5)) {
55276 log_packet_detailed(" field 'reqs' has changed");
55277#ifdef FREECIV_JSON_CONNECTION
55278 field_addr.name = "reqs";
55279#endif /* FREECIV_JSON_CONNECTION */
55280 e = 0;
55281 {
55282 int i;
55283
55284#ifdef FREECIV_JSON_CONNECTION
55285 /* Create the array. */
55286 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
55287
55288 /* Enter the array. */
55289 field_addr.sub_location = plocation_elem_new(0);
55290#endif /* FREECIV_JSON_CONNECTION */
55291
55292 for (i = 0; i < real_packet->reqs_count; i++) {
55293#ifdef FREECIV_JSON_CONNECTION
55294 /* Next array element. */
55295 field_addr.sub_location->number = i;
55296#endif /* FREECIV_JSON_CONNECTION */
55297
55298 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
55299 }
55300
55301#ifdef FREECIV_JSON_CONNECTION
55302 /* Exit array. */
55303 FC_FREE(field_addr.sub_location);
55304#endif /* FREECIV_JSON_CONNECTION */
55305 }
55306 if (e) {
55307 log_packet_detailed("'reqs' field error detected");
55308 }
55309 }
55310 if (BV_ISSET(fields, 6)) {
55311 log_packet_detailed(" field 'graphic' has changed");
55312#ifdef FREECIV_JSON_CONNECTION
55313 field_addr.name = "graphic";
55314#endif /* FREECIV_JSON_CONNECTION */
55315 e = 0;
55316 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
55317 if (e) {
55318 log_packet_detailed("'graphic' field error detected");
55319 }
55320 }
55321 if (BV_ISSET(fields, 7)) {
55322 log_packet_detailed(" field 'graphic_alt' has changed");
55323#ifdef FREECIV_JSON_CONNECTION
55324 field_addr.name = "graphic_alt";
55325#endif /* FREECIV_JSON_CONNECTION */
55326 e = 0;
55327 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
55328 if (e) {
55329 log_packet_detailed("'graphic_alt' field error detected");
55330 }
55331 }
55332
55333 *old = *real_packet;
55334#endif /* FREECIV_DELTA_PROTOCOL */
55335#ifndef FREECIV_DELTA_PROTOCOL
55336#ifdef FREECIV_JSON_CONNECTION
55337 field_addr.name = "style_id";
55338#endif /* FREECIV_JSON_CONNECTION */
55339 e = 0;
55340 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
55341 if (e) {
55342 log_packet_detailed("'style_id' field error detected");
55343 }
55344#ifdef FREECIV_JSON_CONNECTION
55345 field_addr.name = "name";
55346#endif /* FREECIV_JSON_CONNECTION */
55347 e = 0;
55348 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
55349 if (e) {
55350 log_packet_detailed("'name' field error detected");
55351 }
55352#ifdef FREECIV_JSON_CONNECTION
55353 field_addr.name = "rule_name";
55354#endif /* FREECIV_JSON_CONNECTION */
55355 e = 0;
55356 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
55357 if (e) {
55358 log_packet_detailed("'rule_name' field error detected");
55359 }
55360#ifdef FREECIV_JSON_CONNECTION
55361 field_addr.name = "citizens_graphic";
55362#endif /* FREECIV_JSON_CONNECTION */
55363 e = 0;
55364 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
55365 if (e) {
55366 log_packet_detailed("'citizens_graphic' field error detected");
55367 }
55368#ifdef FREECIV_JSON_CONNECTION
55369 field_addr.name = "reqs_count";
55370#endif /* FREECIV_JSON_CONNECTION */
55371 e = 0;
55372 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
55373 if (e) {
55374 log_packet_detailed("'reqs_count' field error detected");
55375 }
55376#ifdef FREECIV_JSON_CONNECTION
55377 field_addr.name = "reqs";
55378#endif /* FREECIV_JSON_CONNECTION */
55379 e = 0;
55380 {
55381 int i;
55382
55383#ifdef FREECIV_JSON_CONNECTION
55384 /* Create the array. */
55385 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
55386
55387 /* Enter the array. */
55388 field_addr.sub_location = plocation_elem_new(0);
55389#endif /* FREECIV_JSON_CONNECTION */
55390
55391 for (i = 0; i < real_packet->reqs_count; i++) {
55392#ifdef FREECIV_JSON_CONNECTION
55393 /* Next array element. */
55394 field_addr.sub_location->number = i;
55395#endif /* FREECIV_JSON_CONNECTION */
55396
55397 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
55398 }
55399
55400#ifdef FREECIV_JSON_CONNECTION
55401 /* Exit array. */
55402 FC_FREE(field_addr.sub_location);
55403#endif /* FREECIV_JSON_CONNECTION */
55404 }
55405 if (e) {
55406 log_packet_detailed("'reqs' field error detected");
55407 }
55408#ifdef FREECIV_JSON_CONNECTION
55409 field_addr.name = "graphic";
55410#endif /* FREECIV_JSON_CONNECTION */
55411 e = 0;
55412 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
55413 if (e) {
55414 log_packet_detailed("'graphic' field error detected");
55415 }
55416#ifdef FREECIV_JSON_CONNECTION
55417 field_addr.name = "graphic_alt";
55418#endif /* FREECIV_JSON_CONNECTION */
55419 e = 0;
55420 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
55421 if (e) {
55422 log_packet_detailed("'graphic_alt' field error detected");
55423 }
55424
55425#endif
55427}
55428
55430{
55431 if (!pc->used) {
55432 log_error("WARNING: trying to send data to the closed connection %s",
55434 return -1;
55435 }
55436 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CITY].packet != NULL, -1,
55437 "Handler for PACKET_RULESET_CITY not installed");
55438 return pc->phs.handlers->send[PACKET_RULESET_CITY].packet(pc, packet);
55439}
55440
55441void lsend_packet_ruleset_city(struct conn_list *dest, const struct packet_ruleset_city *packet)
55442{
55443 conn_list_iterate(dest, pconn) {
55446}
55447
55448#ifdef FREECIV_DELTA_PROTOCOL
55449#define hash_packet_ruleset_building_100 hash_const
55450
55451#define cmp_packet_ruleset_building_100 cmp_const
55452
55454#endif /* FREECIV_DELTA_PROTOCOL */
55455
55457{
55458#ifdef FREECIV_DELTA_PROTOCOL
55460 struct packet_ruleset_building *old;
55461 struct genhash **hash = pc->phs.received + PACKET_RULESET_BUILDING;
55462#endif /* FREECIV_DELTA_PROTOCOL */
55464#ifdef FREECIV_JSON_CONNECTION
55465 struct plocation field_addr;
55466 {
55470 }
55471#endif /* FREECIV_JSON_CONNECTION */
55472
55473#ifdef FREECIV_DELTA_PROTOCOL
55474#ifdef FREECIV_JSON_CONNECTION
55475 field_addr.name = "fields";
55476#endif /* FREECIV_JSON_CONNECTION */
55477 DIO_BV_GET(&din, &field_addr, fields);
55478
55479#else /* FREECIV_DELTA_PROTOCOL */
55480#ifdef FREECIV_JSON_CONNECTION
55481 field_addr.name = "id";
55482#endif /* FREECIV_JSON_CONNECTION */
55483 {
55484 int readin;
55485
55486 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
55488 }
55489 real_packet->id = readin;
55490 }
55491#ifdef FREECIV_JSON_CONNECTION
55492 field_addr.name = "genus";
55493#endif /* FREECIV_JSON_CONNECTION */
55494 {
55495 int readin;
55496
55497 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
55499 }
55500 real_packet->genus = readin;
55501 }
55502#ifdef FREECIV_JSON_CONNECTION
55503 field_addr.name = "name";
55504#endif /* FREECIV_JSON_CONNECTION */
55505 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55507 }
55508#ifdef FREECIV_JSON_CONNECTION
55509 field_addr.name = "rule_name";
55510#endif /* FREECIV_JSON_CONNECTION */
55511 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55512 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55513 }
55514#ifdef FREECIV_JSON_CONNECTION
55515 field_addr.name = "graphic_str";
55516#endif /* FREECIV_JSON_CONNECTION */
55517 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
55518 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
55519 }
55520#ifdef FREECIV_JSON_CONNECTION
55521 field_addr.name = "graphic_alt";
55522#endif /* FREECIV_JSON_CONNECTION */
55523 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55524 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55525 }
55526#ifdef FREECIV_JSON_CONNECTION
55527 field_addr.name = "graphic_alt2";
55528#endif /* FREECIV_JSON_CONNECTION */
55529 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
55530 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
55531 }
55532#ifdef FREECIV_JSON_CONNECTION
55533 field_addr.name = "reqs_count";
55534#endif /* FREECIV_JSON_CONNECTION */
55535 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
55536 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
55537 }
55538#ifdef FREECIV_JSON_CONNECTION
55539 field_addr.name = "reqs";
55540#endif /* FREECIV_JSON_CONNECTION */
55541 if (real_packet->reqs_count > MAX_NUM_REQS) {
55542 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
55543 }
55544 {
55545 int i;
55546
55547#ifdef FREECIV_JSON_CONNECTION
55548 /* Enter array. */
55549 field_addr.sub_location = plocation_elem_new(0);
55550#endif /* FREECIV_JSON_CONNECTION */
55551
55552 for (i = 0; i < real_packet->reqs_count; i++) {
55553#ifdef FREECIV_JSON_CONNECTION
55554 field_addr.sub_location->number = i;
55555#endif /* FREECIV_JSON_CONNECTION */
55556
55557 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
55559 }
55560 }
55561
55562#ifdef FREECIV_JSON_CONNECTION
55563 /* Exit array. */
55564 FC_FREE(field_addr.sub_location);
55565#endif /* FREECIV_JSON_CONNECTION */
55566 }
55567#ifdef FREECIV_JSON_CONNECTION
55568 field_addr.name = "obs_count";
55569#endif /* FREECIV_JSON_CONNECTION */
55570 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obs_count)) {
55571 RECEIVE_PACKET_FIELD_ERROR(obs_count);
55572 }
55573#ifdef FREECIV_JSON_CONNECTION
55574 field_addr.name = "obs_reqs";
55575#endif /* FREECIV_JSON_CONNECTION */
55576 if (real_packet->obs_count > MAX_NUM_REQS) {
55577 RECEIVE_PACKET_FIELD_ERROR(obs_reqs, ": truncation array");
55578 }
55579 {
55580 int i;
55581
55582#ifdef FREECIV_JSON_CONNECTION
55583 /* Enter array. */
55584 field_addr.sub_location = plocation_elem_new(0);
55585#endif /* FREECIV_JSON_CONNECTION */
55586
55587 for (i = 0; i < real_packet->obs_count; i++) {
55588#ifdef FREECIV_JSON_CONNECTION
55589 field_addr.sub_location->number = i;
55590#endif /* FREECIV_JSON_CONNECTION */
55591
55592 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs[i])) {
55594 }
55595 }
55596
55597#ifdef FREECIV_JSON_CONNECTION
55598 /* Exit array. */
55599 FC_FREE(field_addr.sub_location);
55600#endif /* FREECIV_JSON_CONNECTION */
55601 }
55602#ifdef FREECIV_JSON_CONNECTION
55603 field_addr.name = "build_cost";
55604#endif /* FREECIV_JSON_CONNECTION */
55605 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
55606 RECEIVE_PACKET_FIELD_ERROR(build_cost);
55607 }
55608#ifdef FREECIV_JSON_CONNECTION
55609 field_addr.name = "upkeep";
55610#endif /* FREECIV_JSON_CONNECTION */
55611 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
55613 }
55614#ifdef FREECIV_JSON_CONNECTION
55615 field_addr.name = "sabotage";
55616#endif /* FREECIV_JSON_CONNECTION */
55617 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
55619 }
55620#ifdef FREECIV_JSON_CONNECTION
55621 field_addr.name = "flags";
55622#endif /* FREECIV_JSON_CONNECTION */
55623 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
55625 }
55626#ifdef FREECIV_JSON_CONNECTION
55627 field_addr.name = "soundtag";
55628#endif /* FREECIV_JSON_CONNECTION */
55629 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
55631 }
55632#ifdef FREECIV_JSON_CONNECTION
55633 field_addr.name = "soundtag_alt";
55634#endif /* FREECIV_JSON_CONNECTION */
55635 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
55636 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
55637 }
55638#ifdef FREECIV_JSON_CONNECTION
55639 field_addr.name = "soundtag_alt2";
55640#endif /* FREECIV_JSON_CONNECTION */
55641 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
55642 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
55643 }
55644#ifdef FREECIV_JSON_CONNECTION
55645 field_addr.name = "helptext";
55646#endif /* FREECIV_JSON_CONNECTION */
55647 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
55649 }
55650#endif
55651 log_packet_detailed("packet_ruleset_building_100: got info about ()");
55652
55653#ifdef FREECIV_DELTA_PROTOCOL
55654 if (NULL == *hash) {
55656 NULL, NULL, NULL, free);
55657 }
55658
55659 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
55660 *real_packet = *old;
55661 } else {
55662 log_packet_detailed(" no old info");
55663 memset(real_packet, 0, sizeof(*real_packet));
55664 }
55665
55666 if (BV_ISSET(fields, 0)) {
55667 log_packet_detailed(" got field 'id'");
55668#ifdef FREECIV_JSON_CONNECTION
55669 field_addr.name = "id";
55670#endif /* FREECIV_JSON_CONNECTION */
55671 {
55672 int readin;
55673
55674 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
55676 }
55677 real_packet->id = readin;
55678 }
55679 }
55680 if (BV_ISSET(fields, 1)) {
55681 log_packet_detailed(" got field 'genus'");
55682#ifdef FREECIV_JSON_CONNECTION
55683 field_addr.name = "genus";
55684#endif /* FREECIV_JSON_CONNECTION */
55685 {
55686 int readin;
55687
55688 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
55690 }
55691 real_packet->genus = readin;
55692 }
55693 }
55694 if (BV_ISSET(fields, 2)) {
55695 log_packet_detailed(" got field 'name'");
55696#ifdef FREECIV_JSON_CONNECTION
55697 field_addr.name = "name";
55698#endif /* FREECIV_JSON_CONNECTION */
55699 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
55701 }
55702 }
55703 if (BV_ISSET(fields, 3)) {
55704 log_packet_detailed(" got field 'rule_name'");
55705#ifdef FREECIV_JSON_CONNECTION
55706 field_addr.name = "rule_name";
55707#endif /* FREECIV_JSON_CONNECTION */
55708 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55709 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55710 }
55711 }
55712 if (BV_ISSET(fields, 4)) {
55713 log_packet_detailed(" got field 'graphic_str'");
55714#ifdef FREECIV_JSON_CONNECTION
55715 field_addr.name = "graphic_str";
55716#endif /* FREECIV_JSON_CONNECTION */
55717 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
55718 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
55719 }
55720 }
55721 if (BV_ISSET(fields, 5)) {
55722 log_packet_detailed(" got field 'graphic_alt'");
55723#ifdef FREECIV_JSON_CONNECTION
55724 field_addr.name = "graphic_alt";
55725#endif /* FREECIV_JSON_CONNECTION */
55726 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55727 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55728 }
55729 }
55730 if (BV_ISSET(fields, 6)) {
55731 log_packet_detailed(" got field 'graphic_alt2'");
55732#ifdef FREECIV_JSON_CONNECTION
55733 field_addr.name = "graphic_alt2";
55734#endif /* FREECIV_JSON_CONNECTION */
55735 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
55736 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
55737 }
55738 }
55739 if (BV_ISSET(fields, 7)) {
55740 log_packet_detailed(" got field 'reqs_count'");
55741#ifdef FREECIV_JSON_CONNECTION
55742 field_addr.name = "reqs_count";
55743#endif /* FREECIV_JSON_CONNECTION */
55744 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
55745 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
55746 }
55747 }
55748 if (BV_ISSET(fields, 8)) {
55749 log_packet_detailed(" got field 'reqs'");
55750#ifdef FREECIV_JSON_CONNECTION
55751 field_addr.name = "reqs";
55752#endif /* FREECIV_JSON_CONNECTION */
55753 if (real_packet->reqs_count > MAX_NUM_REQS) {
55754 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
55755 }
55756 {
55757 int i;
55758
55759#ifdef FREECIV_JSON_CONNECTION
55760 /* Enter array. */
55761 field_addr.sub_location = plocation_elem_new(0);
55762#endif /* FREECIV_JSON_CONNECTION */
55763
55764 for (i = 0; i < real_packet->reqs_count; i++) {
55765#ifdef FREECIV_JSON_CONNECTION
55766 field_addr.sub_location->number = i;
55767#endif /* FREECIV_JSON_CONNECTION */
55768
55769 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
55771 }
55772 }
55773
55774#ifdef FREECIV_JSON_CONNECTION
55775 /* Exit array. */
55776 FC_FREE(field_addr.sub_location);
55777#endif /* FREECIV_JSON_CONNECTION */
55778 }
55779 }
55780 if (BV_ISSET(fields, 9)) {
55781 log_packet_detailed(" got field 'obs_count'");
55782#ifdef FREECIV_JSON_CONNECTION
55783 field_addr.name = "obs_count";
55784#endif /* FREECIV_JSON_CONNECTION */
55785 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obs_count)) {
55786 RECEIVE_PACKET_FIELD_ERROR(obs_count);
55787 }
55788 }
55789 if (BV_ISSET(fields, 10)) {
55790 log_packet_detailed(" got field 'obs_reqs'");
55791#ifdef FREECIV_JSON_CONNECTION
55792 field_addr.name = "obs_reqs";
55793#endif /* FREECIV_JSON_CONNECTION */
55794 if (real_packet->obs_count > MAX_NUM_REQS) {
55795 RECEIVE_PACKET_FIELD_ERROR(obs_reqs, ": truncation array");
55796 }
55797 {
55798 int i;
55799
55800#ifdef FREECIV_JSON_CONNECTION
55801 /* Enter array. */
55802 field_addr.sub_location = plocation_elem_new(0);
55803#endif /* FREECIV_JSON_CONNECTION */
55804
55805 for (i = 0; i < real_packet->obs_count; i++) {
55806#ifdef FREECIV_JSON_CONNECTION
55807 field_addr.sub_location->number = i;
55808#endif /* FREECIV_JSON_CONNECTION */
55809
55810 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs[i])) {
55812 }
55813 }
55814
55815#ifdef FREECIV_JSON_CONNECTION
55816 /* Exit array. */
55817 FC_FREE(field_addr.sub_location);
55818#endif /* FREECIV_JSON_CONNECTION */
55819 }
55820 }
55821 if (BV_ISSET(fields, 11)) {
55822 log_packet_detailed(" got field 'build_cost'");
55823#ifdef FREECIV_JSON_CONNECTION
55824 field_addr.name = "build_cost";
55825#endif /* FREECIV_JSON_CONNECTION */
55826 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
55827 RECEIVE_PACKET_FIELD_ERROR(build_cost);
55828 }
55829 }
55830 if (BV_ISSET(fields, 12)) {
55831 log_packet_detailed(" got field 'upkeep'");
55832#ifdef FREECIV_JSON_CONNECTION
55833 field_addr.name = "upkeep";
55834#endif /* FREECIV_JSON_CONNECTION */
55835 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
55837 }
55838 }
55839 if (BV_ISSET(fields, 13)) {
55840 log_packet_detailed(" got field 'sabotage'");
55841#ifdef FREECIV_JSON_CONNECTION
55842 field_addr.name = "sabotage";
55843#endif /* FREECIV_JSON_CONNECTION */
55844 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
55846 }
55847 }
55848 if (BV_ISSET(fields, 14)) {
55849 log_packet_detailed(" got field 'flags'");
55850#ifdef FREECIV_JSON_CONNECTION
55851 field_addr.name = "flags";
55852#endif /* FREECIV_JSON_CONNECTION */
55853 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
55855 }
55856 }
55857 if (BV_ISSET(fields, 15)) {
55858 log_packet_detailed(" got field 'soundtag'");
55859#ifdef FREECIV_JSON_CONNECTION
55860 field_addr.name = "soundtag";
55861#endif /* FREECIV_JSON_CONNECTION */
55862 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
55864 }
55865 }
55866 if (BV_ISSET(fields, 16)) {
55867 log_packet_detailed(" got field 'soundtag_alt'");
55868#ifdef FREECIV_JSON_CONNECTION
55869 field_addr.name = "soundtag_alt";
55870#endif /* FREECIV_JSON_CONNECTION */
55871 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
55872 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
55873 }
55874 }
55875 if (BV_ISSET(fields, 17)) {
55876 log_packet_detailed(" got field 'soundtag_alt2'");
55877#ifdef FREECIV_JSON_CONNECTION
55878 field_addr.name = "soundtag_alt2";
55879#endif /* FREECIV_JSON_CONNECTION */
55880 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
55881 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
55882 }
55883 }
55884 if (BV_ISSET(fields, 18)) {
55885 log_packet_detailed(" got field 'helptext'");
55886#ifdef FREECIV_JSON_CONNECTION
55887 field_addr.name = "helptext";
55888#endif /* FREECIV_JSON_CONNECTION */
55889 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
55891 }
55892 }
55893
55894 if (NULL == old) {
55895 old = fc_malloc(sizeof(*old));
55896 *old = *real_packet;
55897 genhash_insert(*hash, old, old);
55898 } else {
55899 *old = *real_packet;
55900 }
55901
55902#endif /* FREECIV_DELTA_PROTOCOL */
55904}
55905
55907{
55908 const struct packet_ruleset_building *real_packet = packet;
55909 int e;
55910#ifdef FREECIV_DELTA_PROTOCOL
55912 struct packet_ruleset_building *old;
55913 bool differ;
55914 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BUILDING;
55915#endif /* FREECIV_DELTA_PROTOCOL */
55917#ifdef FREECIV_JSON_CONNECTION
55918 struct plocation field_addr;
55919 {
55923 }
55924#endif /* FREECIV_JSON_CONNECTION */
55925
55926 log_packet_detailed("packet_ruleset_building_100: sending info about ()");
55927
55928#ifdef FREECIV_DELTA_PROTOCOL
55929 if (NULL == *hash) {
55931 NULL, NULL, NULL, free);
55932 }
55933 BV_CLR_ALL(fields);
55934
55935 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
55936 old = fc_malloc(sizeof(*old));
55937 *old = *real_packet;
55938 genhash_insert(*hash, old, old);
55939 memset(old, 0, sizeof(*old));
55940 }
55941 differ = (old->id != real_packet->id);
55942 if (differ) {
55943 BV_SET(fields, 0);
55944 }
55945
55946 differ = (old->genus != real_packet->genus);
55947 if (differ) {
55948 BV_SET(fields, 1);
55949 }
55950
55951 differ = (strcmp(old->name, real_packet->name) != 0);
55952 if (differ) {
55953 BV_SET(fields, 2);
55954 }
55955
55956 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
55957 if (differ) {
55958 BV_SET(fields, 3);
55959 }
55960
55961 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
55962 if (differ) {
55963 BV_SET(fields, 4);
55964 }
55965
55966 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
55967 if (differ) {
55968 BV_SET(fields, 5);
55969 }
55970
55971 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
55972 if (differ) {
55973 BV_SET(fields, 6);
55974 }
55975
55976 differ = (old->reqs_count != real_packet->reqs_count);
55977 if (differ) {
55978 BV_SET(fields, 7);
55979 }
55980
55981 differ = (old->reqs_count != real_packet->reqs_count);
55982 if (!differ) {
55983 int i;
55984
55985 for (i = 0; i < real_packet->reqs_count; i++) {
55986 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
55987 if (differ) {
55988 break;
55989 }
55990 }
55991 }
55992 if (differ) {
55993 BV_SET(fields, 8);
55994 }
55995
55996 differ = (old->obs_count != real_packet->obs_count);
55997 if (differ) {
55998 BV_SET(fields, 9);
55999 }
56000
56001 differ = (old->obs_count != real_packet->obs_count);
56002 if (!differ) {
56003 int i;
56004
56005 for (i = 0; i < real_packet->obs_count; i++) {
56006 differ = !are_requirements_equal(&old->obs_reqs[i], &real_packet->obs_reqs[i]);
56007 if (differ) {
56008 break;
56009 }
56010 }
56011 }
56012 if (differ) {
56013 BV_SET(fields, 10);
56014 }
56015
56016 differ = (old->build_cost != real_packet->build_cost);
56017 if (differ) {
56018 BV_SET(fields, 11);
56019 }
56020
56021 differ = (old->upkeep != real_packet->upkeep);
56022 if (differ) {
56023 BV_SET(fields, 12);
56024 }
56025
56026 differ = (old->sabotage != real_packet->sabotage);
56027 if (differ) {
56028 BV_SET(fields, 13);
56029 }
56030
56031 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
56032 if (differ) {
56033 BV_SET(fields, 14);
56034 }
56035
56036 differ = (strcmp(old->soundtag, real_packet->soundtag) != 0);
56037 if (differ) {
56038 BV_SET(fields, 15);
56039 }
56040
56041 differ = (strcmp(old->soundtag_alt, real_packet->soundtag_alt) != 0);
56042 if (differ) {
56043 BV_SET(fields, 16);
56044 }
56045
56046 differ = (strcmp(old->soundtag_alt2, real_packet->soundtag_alt2) != 0);
56047 if (differ) {
56048 BV_SET(fields, 17);
56049 }
56050
56051 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
56052 if (differ) {
56053 BV_SET(fields, 18);
56054 }
56055
56056
56057#ifdef FREECIV_JSON_CONNECTION
56058 field_addr.name = "fields";
56059#endif /* FREECIV_JSON_CONNECTION */
56060 e = 0;
56061 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56062 if (e) {
56063 log_packet_detailed("fields bitvector error detected");
56064 }
56065
56066 if (BV_ISSET(fields, 0)) {
56067 log_packet_detailed(" field 'id' has changed");
56068#ifdef FREECIV_JSON_CONNECTION
56069 field_addr.name = "id";
56070#endif /* FREECIV_JSON_CONNECTION */
56071 e = 0;
56072 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56073 if (e) {
56074 log_packet_detailed("'id' field error detected");
56075 }
56076 }
56077 if (BV_ISSET(fields, 1)) {
56078 log_packet_detailed(" field 'genus' has changed");
56079#ifdef FREECIV_JSON_CONNECTION
56080 field_addr.name = "genus";
56081#endif /* FREECIV_JSON_CONNECTION */
56082 e = 0;
56083 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
56084 if (e) {
56085 log_packet_detailed("'genus' field error detected");
56086 }
56087 }
56088 if (BV_ISSET(fields, 2)) {
56089 log_packet_detailed(" field 'name' has changed");
56090#ifdef FREECIV_JSON_CONNECTION
56091 field_addr.name = "name";
56092#endif /* FREECIV_JSON_CONNECTION */
56093 e = 0;
56094 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56095 if (e) {
56096 log_packet_detailed("'name' field error detected");
56097 }
56098 }
56099 if (BV_ISSET(fields, 3)) {
56100 log_packet_detailed(" field 'rule_name' has changed");
56101#ifdef FREECIV_JSON_CONNECTION
56102 field_addr.name = "rule_name";
56103#endif /* FREECIV_JSON_CONNECTION */
56104 e = 0;
56105 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56106 if (e) {
56107 log_packet_detailed("'rule_name' field error detected");
56108 }
56109 }
56110 if (BV_ISSET(fields, 4)) {
56111 log_packet_detailed(" field 'graphic_str' has changed");
56112#ifdef FREECIV_JSON_CONNECTION
56113 field_addr.name = "graphic_str";
56114#endif /* FREECIV_JSON_CONNECTION */
56115 e = 0;
56116 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
56117 if (e) {
56118 log_packet_detailed("'graphic_str' field error detected");
56119 }
56120 }
56121 if (BV_ISSET(fields, 5)) {
56122 log_packet_detailed(" field 'graphic_alt' has changed");
56123#ifdef FREECIV_JSON_CONNECTION
56124 field_addr.name = "graphic_alt";
56125#endif /* FREECIV_JSON_CONNECTION */
56126 e = 0;
56127 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
56128 if (e) {
56129 log_packet_detailed("'graphic_alt' field error detected");
56130 }
56131 }
56132 if (BV_ISSET(fields, 6)) {
56133 log_packet_detailed(" field 'graphic_alt2' has changed");
56134#ifdef FREECIV_JSON_CONNECTION
56135 field_addr.name = "graphic_alt2";
56136#endif /* FREECIV_JSON_CONNECTION */
56137 e = 0;
56138 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
56139 if (e) {
56140 log_packet_detailed("'graphic_alt2' field error detected");
56141 }
56142 }
56143 if (BV_ISSET(fields, 7)) {
56144 log_packet_detailed(" field 'reqs_count' has changed");
56145#ifdef FREECIV_JSON_CONNECTION
56146 field_addr.name = "reqs_count";
56147#endif /* FREECIV_JSON_CONNECTION */
56148 e = 0;
56149 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
56150 if (e) {
56151 log_packet_detailed("'reqs_count' field error detected");
56152 }
56153 }
56154 if (BV_ISSET(fields, 8)) {
56155 log_packet_detailed(" field 'reqs' has changed");
56156#ifdef FREECIV_JSON_CONNECTION
56157 field_addr.name = "reqs";
56158#endif /* FREECIV_JSON_CONNECTION */
56159 e = 0;
56160 {
56161 int i;
56162
56163#ifdef FREECIV_JSON_CONNECTION
56164 /* Create the array. */
56165 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
56166
56167 /* Enter the array. */
56168 field_addr.sub_location = plocation_elem_new(0);
56169#endif /* FREECIV_JSON_CONNECTION */
56170
56171 for (i = 0; i < real_packet->reqs_count; i++) {
56172#ifdef FREECIV_JSON_CONNECTION
56173 /* Next array element. */
56174 field_addr.sub_location->number = i;
56175#endif /* FREECIV_JSON_CONNECTION */
56176
56177 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
56178 }
56179
56180#ifdef FREECIV_JSON_CONNECTION
56181 /* Exit array. */
56182 FC_FREE(field_addr.sub_location);
56183#endif /* FREECIV_JSON_CONNECTION */
56184 }
56185 if (e) {
56186 log_packet_detailed("'reqs' field error detected");
56187 }
56188 }
56189 if (BV_ISSET(fields, 9)) {
56190 log_packet_detailed(" field 'obs_count' has changed");
56191#ifdef FREECIV_JSON_CONNECTION
56192 field_addr.name = "obs_count";
56193#endif /* FREECIV_JSON_CONNECTION */
56194 e = 0;
56195 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obs_count);
56196 if (e) {
56197 log_packet_detailed("'obs_count' field error detected");
56198 }
56199 }
56200 if (BV_ISSET(fields, 10)) {
56201 log_packet_detailed(" field 'obs_reqs' has changed");
56202#ifdef FREECIV_JSON_CONNECTION
56203 field_addr.name = "obs_reqs";
56204#endif /* FREECIV_JSON_CONNECTION */
56205 e = 0;
56206 {
56207 int i;
56208
56209#ifdef FREECIV_JSON_CONNECTION
56210 /* Create the array. */
56211 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->obs_count);
56212
56213 /* Enter the array. */
56214 field_addr.sub_location = plocation_elem_new(0);
56215#endif /* FREECIV_JSON_CONNECTION */
56216
56217 for (i = 0; i < real_packet->obs_count; i++) {
56218#ifdef FREECIV_JSON_CONNECTION
56219 /* Next array element. */
56220 field_addr.sub_location->number = i;
56221#endif /* FREECIV_JSON_CONNECTION */
56222
56223 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs[i]);
56224 }
56225
56226#ifdef FREECIV_JSON_CONNECTION
56227 /* Exit array. */
56228 FC_FREE(field_addr.sub_location);
56229#endif /* FREECIV_JSON_CONNECTION */
56230 }
56231 if (e) {
56232 log_packet_detailed("'obs_reqs' field error detected");
56233 }
56234 }
56235 if (BV_ISSET(fields, 11)) {
56236 log_packet_detailed(" field 'build_cost' has changed");
56237#ifdef FREECIV_JSON_CONNECTION
56238 field_addr.name = "build_cost";
56239#endif /* FREECIV_JSON_CONNECTION */
56240 e = 0;
56241 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
56242 if (e) {
56243 log_packet_detailed("'build_cost' field error detected");
56244 }
56245 }
56246 if (BV_ISSET(fields, 12)) {
56247 log_packet_detailed(" field 'upkeep' has changed");
56248#ifdef FREECIV_JSON_CONNECTION
56249 field_addr.name = "upkeep";
56250#endif /* FREECIV_JSON_CONNECTION */
56251 e = 0;
56252 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
56253 if (e) {
56254 log_packet_detailed("'upkeep' field error detected");
56255 }
56256 }
56257 if (BV_ISSET(fields, 13)) {
56258 log_packet_detailed(" field 'sabotage' has changed");
56259#ifdef FREECIV_JSON_CONNECTION
56260 field_addr.name = "sabotage";
56261#endif /* FREECIV_JSON_CONNECTION */
56262 e = 0;
56263 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
56264 if (e) {
56265 log_packet_detailed("'sabotage' field error detected");
56266 }
56267 }
56268 if (BV_ISSET(fields, 14)) {
56269 log_packet_detailed(" field 'flags' has changed");
56270#ifdef FREECIV_JSON_CONNECTION
56271 field_addr.name = "flags";
56272#endif /* FREECIV_JSON_CONNECTION */
56273 e = 0;
56274 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
56275 if (e) {
56276 log_packet_detailed("'flags' field error detected");
56277 }
56278 }
56279 if (BV_ISSET(fields, 15)) {
56280 log_packet_detailed(" field 'soundtag' has changed");
56281#ifdef FREECIV_JSON_CONNECTION
56282 field_addr.name = "soundtag";
56283#endif /* FREECIV_JSON_CONNECTION */
56284 e = 0;
56285 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
56286 if (e) {
56287 log_packet_detailed("'soundtag' field error detected");
56288 }
56289 }
56290 if (BV_ISSET(fields, 16)) {
56291 log_packet_detailed(" field 'soundtag_alt' has changed");
56292#ifdef FREECIV_JSON_CONNECTION
56293 field_addr.name = "soundtag_alt";
56294#endif /* FREECIV_JSON_CONNECTION */
56295 e = 0;
56296 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
56297 if (e) {
56298 log_packet_detailed("'soundtag_alt' field error detected");
56299 }
56300 }
56301 if (BV_ISSET(fields, 17)) {
56302 log_packet_detailed(" field 'soundtag_alt2' has changed");
56303#ifdef FREECIV_JSON_CONNECTION
56304 field_addr.name = "soundtag_alt2";
56305#endif /* FREECIV_JSON_CONNECTION */
56306 e = 0;
56307 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
56308 if (e) {
56309 log_packet_detailed("'soundtag_alt2' field error detected");
56310 }
56311 }
56312 if (BV_ISSET(fields, 18)) {
56313 log_packet_detailed(" field 'helptext' has changed");
56314#ifdef FREECIV_JSON_CONNECTION
56315 field_addr.name = "helptext";
56316#endif /* FREECIV_JSON_CONNECTION */
56317 e = 0;
56318 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
56319 if (e) {
56320 log_packet_detailed("'helptext' field error detected");
56321 }
56322 }
56323
56324 *old = *real_packet;
56325#endif /* FREECIV_DELTA_PROTOCOL */
56326#ifndef FREECIV_DELTA_PROTOCOL
56327#ifdef FREECIV_JSON_CONNECTION
56328 field_addr.name = "id";
56329#endif /* FREECIV_JSON_CONNECTION */
56330 e = 0;
56331 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56332 if (e) {
56333 log_packet_detailed("'id' field error detected");
56334 }
56335#ifdef FREECIV_JSON_CONNECTION
56336 field_addr.name = "genus";
56337#endif /* FREECIV_JSON_CONNECTION */
56338 e = 0;
56339 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
56340 if (e) {
56341 log_packet_detailed("'genus' field error detected");
56342 }
56343#ifdef FREECIV_JSON_CONNECTION
56344 field_addr.name = "name";
56345#endif /* FREECIV_JSON_CONNECTION */
56346 e = 0;
56347 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56348 if (e) {
56349 log_packet_detailed("'name' field error detected");
56350 }
56351#ifdef FREECIV_JSON_CONNECTION
56352 field_addr.name = "rule_name";
56353#endif /* FREECIV_JSON_CONNECTION */
56354 e = 0;
56355 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56356 if (e) {
56357 log_packet_detailed("'rule_name' field error detected");
56358 }
56359#ifdef FREECIV_JSON_CONNECTION
56360 field_addr.name = "graphic_str";
56361#endif /* FREECIV_JSON_CONNECTION */
56362 e = 0;
56363 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
56364 if (e) {
56365 log_packet_detailed("'graphic_str' field error detected");
56366 }
56367#ifdef FREECIV_JSON_CONNECTION
56368 field_addr.name = "graphic_alt";
56369#endif /* FREECIV_JSON_CONNECTION */
56370 e = 0;
56371 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
56372 if (e) {
56373 log_packet_detailed("'graphic_alt' field error detected");
56374 }
56375#ifdef FREECIV_JSON_CONNECTION
56376 field_addr.name = "graphic_alt2";
56377#endif /* FREECIV_JSON_CONNECTION */
56378 e = 0;
56379 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
56380 if (e) {
56381 log_packet_detailed("'graphic_alt2' field error detected");
56382 }
56383#ifdef FREECIV_JSON_CONNECTION
56384 field_addr.name = "reqs_count";
56385#endif /* FREECIV_JSON_CONNECTION */
56386 e = 0;
56387 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
56388 if (e) {
56389 log_packet_detailed("'reqs_count' field error detected");
56390 }
56391#ifdef FREECIV_JSON_CONNECTION
56392 field_addr.name = "reqs";
56393#endif /* FREECIV_JSON_CONNECTION */
56394 e = 0;
56395 {
56396 int i;
56397
56398#ifdef FREECIV_JSON_CONNECTION
56399 /* Create the array. */
56400 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
56401
56402 /* Enter the array. */
56403 field_addr.sub_location = plocation_elem_new(0);
56404#endif /* FREECIV_JSON_CONNECTION */
56405
56406 for (i = 0; i < real_packet->reqs_count; i++) {
56407#ifdef FREECIV_JSON_CONNECTION
56408 /* Next array element. */
56409 field_addr.sub_location->number = i;
56410#endif /* FREECIV_JSON_CONNECTION */
56411
56412 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
56413 }
56414
56415#ifdef FREECIV_JSON_CONNECTION
56416 /* Exit array. */
56417 FC_FREE(field_addr.sub_location);
56418#endif /* FREECIV_JSON_CONNECTION */
56419 }
56420 if (e) {
56421 log_packet_detailed("'reqs' field error detected");
56422 }
56423#ifdef FREECIV_JSON_CONNECTION
56424 field_addr.name = "obs_count";
56425#endif /* FREECIV_JSON_CONNECTION */
56426 e = 0;
56427 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obs_count);
56428 if (e) {
56429 log_packet_detailed("'obs_count' field error detected");
56430 }
56431#ifdef FREECIV_JSON_CONNECTION
56432 field_addr.name = "obs_reqs";
56433#endif /* FREECIV_JSON_CONNECTION */
56434 e = 0;
56435 {
56436 int i;
56437
56438#ifdef FREECIV_JSON_CONNECTION
56439 /* Create the array. */
56440 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->obs_count);
56441
56442 /* Enter the array. */
56443 field_addr.sub_location = plocation_elem_new(0);
56444#endif /* FREECIV_JSON_CONNECTION */
56445
56446 for (i = 0; i < real_packet->obs_count; i++) {
56447#ifdef FREECIV_JSON_CONNECTION
56448 /* Next array element. */
56449 field_addr.sub_location->number = i;
56450#endif /* FREECIV_JSON_CONNECTION */
56451
56452 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs[i]);
56453 }
56454
56455#ifdef FREECIV_JSON_CONNECTION
56456 /* Exit array. */
56457 FC_FREE(field_addr.sub_location);
56458#endif /* FREECIV_JSON_CONNECTION */
56459 }
56460 if (e) {
56461 log_packet_detailed("'obs_reqs' field error detected");
56462 }
56463#ifdef FREECIV_JSON_CONNECTION
56464 field_addr.name = "build_cost";
56465#endif /* FREECIV_JSON_CONNECTION */
56466 e = 0;
56467 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
56468 if (e) {
56469 log_packet_detailed("'build_cost' field error detected");
56470 }
56471#ifdef FREECIV_JSON_CONNECTION
56472 field_addr.name = "upkeep";
56473#endif /* FREECIV_JSON_CONNECTION */
56474 e = 0;
56475 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
56476 if (e) {
56477 log_packet_detailed("'upkeep' field error detected");
56478 }
56479#ifdef FREECIV_JSON_CONNECTION
56480 field_addr.name = "sabotage";
56481#endif /* FREECIV_JSON_CONNECTION */
56482 e = 0;
56483 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
56484 if (e) {
56485 log_packet_detailed("'sabotage' field error detected");
56486 }
56487#ifdef FREECIV_JSON_CONNECTION
56488 field_addr.name = "flags";
56489#endif /* FREECIV_JSON_CONNECTION */
56490 e = 0;
56491 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
56492 if (e) {
56493 log_packet_detailed("'flags' field error detected");
56494 }
56495#ifdef FREECIV_JSON_CONNECTION
56496 field_addr.name = "soundtag";
56497#endif /* FREECIV_JSON_CONNECTION */
56498 e = 0;
56499 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
56500 if (e) {
56501 log_packet_detailed("'soundtag' field error detected");
56502 }
56503#ifdef FREECIV_JSON_CONNECTION
56504 field_addr.name = "soundtag_alt";
56505#endif /* FREECIV_JSON_CONNECTION */
56506 e = 0;
56507 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
56508 if (e) {
56509 log_packet_detailed("'soundtag_alt' field error detected");
56510 }
56511#ifdef FREECIV_JSON_CONNECTION
56512 field_addr.name = "soundtag_alt2";
56513#endif /* FREECIV_JSON_CONNECTION */
56514 e = 0;
56515 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
56516 if (e) {
56517 log_packet_detailed("'soundtag_alt2' field error detected");
56518 }
56519#ifdef FREECIV_JSON_CONNECTION
56520 field_addr.name = "helptext";
56521#endif /* FREECIV_JSON_CONNECTION */
56522 e = 0;
56523 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
56524 if (e) {
56525 log_packet_detailed("'helptext' field error detected");
56526 }
56527
56528#endif
56530}
56531
56533{
56534 if (!pc->used) {
56535 log_error("WARNING: trying to send data to the closed connection %s",
56537 return -1;
56538 }
56539 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet != NULL, -1,
56540 "Handler for PACKET_RULESET_BUILDING not installed");
56541 return pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet(pc, packet);
56542}
56543
56545{
56546 conn_list_iterate(dest, pconn) {
56549}
56550
56551#ifdef FREECIV_DELTA_PROTOCOL
56552#define hash_packet_ruleset_impr_flag_100 hash_const
56553
56554#define cmp_packet_ruleset_impr_flag_100 cmp_const
56555
56557#endif /* FREECIV_DELTA_PROTOCOL */
56558
56560{
56561#ifdef FREECIV_DELTA_PROTOCOL
56563 struct packet_ruleset_impr_flag *old;
56564 struct genhash **hash = pc->phs.received + PACKET_RULESET_IMPR_FLAG;
56565#endif /* FREECIV_DELTA_PROTOCOL */
56567#ifdef FREECIV_JSON_CONNECTION
56568 struct plocation field_addr;
56569 {
56573 }
56574#endif /* FREECIV_JSON_CONNECTION */
56575
56576#ifdef FREECIV_DELTA_PROTOCOL
56577#ifdef FREECIV_JSON_CONNECTION
56578 field_addr.name = "fields";
56579#endif /* FREECIV_JSON_CONNECTION */
56580 DIO_BV_GET(&din, &field_addr, fields);
56581
56582#else /* FREECIV_DELTA_PROTOCOL */
56583#ifdef FREECIV_JSON_CONNECTION
56584 field_addr.name = "id";
56585#endif /* FREECIV_JSON_CONNECTION */
56586 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
56588 }
56589#ifdef FREECIV_JSON_CONNECTION
56590 field_addr.name = "name";
56591#endif /* FREECIV_JSON_CONNECTION */
56592 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56594 }
56595#ifdef FREECIV_JSON_CONNECTION
56596 field_addr.name = "helptxt";
56597#endif /* FREECIV_JSON_CONNECTION */
56598 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
56600 }
56601#endif
56602 log_packet_detailed("packet_ruleset_impr_flag_100: got info about ()");
56603
56604#ifdef FREECIV_DELTA_PROTOCOL
56605 if (NULL == *hash) {
56607 NULL, NULL, NULL, free);
56608 }
56609
56610 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
56611 *real_packet = *old;
56612 } else {
56613 log_packet_detailed(" no old info");
56614 memset(real_packet, 0, sizeof(*real_packet));
56615 }
56616
56617 if (BV_ISSET(fields, 0)) {
56618 log_packet_detailed(" got field 'id'");
56619#ifdef FREECIV_JSON_CONNECTION
56620 field_addr.name = "id";
56621#endif /* FREECIV_JSON_CONNECTION */
56622 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
56624 }
56625 }
56626 if (BV_ISSET(fields, 1)) {
56627 log_packet_detailed(" got field 'name'");
56628#ifdef FREECIV_JSON_CONNECTION
56629 field_addr.name = "name";
56630#endif /* FREECIV_JSON_CONNECTION */
56631 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56633 }
56634 }
56635 if (BV_ISSET(fields, 2)) {
56636 log_packet_detailed(" got field 'helptxt'");
56637#ifdef FREECIV_JSON_CONNECTION
56638 field_addr.name = "helptxt";
56639#endif /* FREECIV_JSON_CONNECTION */
56640 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
56642 }
56643 }
56644
56645 if (NULL == old) {
56646 old = fc_malloc(sizeof(*old));
56647 *old = *real_packet;
56648 genhash_insert(*hash, old, old);
56649 } else {
56650 *old = *real_packet;
56651 }
56652
56653#endif /* FREECIV_DELTA_PROTOCOL */
56655}
56656
56658{
56659 const struct packet_ruleset_impr_flag *real_packet = packet;
56660 int e;
56661#ifdef FREECIV_DELTA_PROTOCOL
56663 struct packet_ruleset_impr_flag *old;
56664 bool differ;
56665 struct genhash **hash = pc->phs.sent + PACKET_RULESET_IMPR_FLAG;
56666#endif /* FREECIV_DELTA_PROTOCOL */
56668#ifdef FREECIV_JSON_CONNECTION
56669 struct plocation field_addr;
56670 {
56674 }
56675#endif /* FREECIV_JSON_CONNECTION */
56676
56677 log_packet_detailed("packet_ruleset_impr_flag_100: sending info about ()");
56678
56679#ifdef FREECIV_DELTA_PROTOCOL
56680 if (NULL == *hash) {
56682 NULL, NULL, NULL, free);
56683 }
56684 BV_CLR_ALL(fields);
56685
56686 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
56687 old = fc_malloc(sizeof(*old));
56688 *old = *real_packet;
56689 genhash_insert(*hash, old, old);
56690 memset(old, 0, sizeof(*old));
56691 }
56692 differ = (old->id != real_packet->id);
56693 if (differ) {
56694 BV_SET(fields, 0);
56695 }
56696
56697 differ = (strcmp(old->name, real_packet->name) != 0);
56698 if (differ) {
56699 BV_SET(fields, 1);
56700 }
56701
56702 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
56703 if (differ) {
56704 BV_SET(fields, 2);
56705 }
56706
56707
56708#ifdef FREECIV_JSON_CONNECTION
56709 field_addr.name = "fields";
56710#endif /* FREECIV_JSON_CONNECTION */
56711 e = 0;
56712 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56713 if (e) {
56714 log_packet_detailed("fields bitvector error detected");
56715 }
56716
56717 if (BV_ISSET(fields, 0)) {
56718 log_packet_detailed(" field 'id' has changed");
56719#ifdef FREECIV_JSON_CONNECTION
56720 field_addr.name = "id";
56721#endif /* FREECIV_JSON_CONNECTION */
56722 e = 0;
56723 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56724 if (e) {
56725 log_packet_detailed("'id' field error detected");
56726 }
56727 }
56728 if (BV_ISSET(fields, 1)) {
56729 log_packet_detailed(" field 'name' has changed");
56730#ifdef FREECIV_JSON_CONNECTION
56731 field_addr.name = "name";
56732#endif /* FREECIV_JSON_CONNECTION */
56733 e = 0;
56734 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56735 if (e) {
56736 log_packet_detailed("'name' field error detected");
56737 }
56738 }
56739 if (BV_ISSET(fields, 2)) {
56740 log_packet_detailed(" field 'helptxt' has changed");
56741#ifdef FREECIV_JSON_CONNECTION
56742 field_addr.name = "helptxt";
56743#endif /* FREECIV_JSON_CONNECTION */
56744 e = 0;
56745 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
56746 if (e) {
56747 log_packet_detailed("'helptxt' field error detected");
56748 }
56749 }
56750
56751 *old = *real_packet;
56752#endif /* FREECIV_DELTA_PROTOCOL */
56753#ifndef FREECIV_DELTA_PROTOCOL
56754#ifdef FREECIV_JSON_CONNECTION
56755 field_addr.name = "id";
56756#endif /* FREECIV_JSON_CONNECTION */
56757 e = 0;
56758 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
56759 if (e) {
56760 log_packet_detailed("'id' field error detected");
56761 }
56762#ifdef FREECIV_JSON_CONNECTION
56763 field_addr.name = "name";
56764#endif /* FREECIV_JSON_CONNECTION */
56765 e = 0;
56766 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
56767 if (e) {
56768 log_packet_detailed("'name' field error detected");
56769 }
56770#ifdef FREECIV_JSON_CONNECTION
56771 field_addr.name = "helptxt";
56772#endif /* FREECIV_JSON_CONNECTION */
56773 e = 0;
56774 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
56775 if (e) {
56776 log_packet_detailed("'helptxt' field error detected");
56777 }
56778
56779#endif
56781}
56782
56784{
56785 if (!pc->used) {
56786 log_error("WARNING: trying to send data to the closed connection %s",
56788 return -1;
56789 }
56790 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet != NULL, -1,
56791 "Handler for PACKET_RULESET_IMPR_FLAG not installed");
56792 return pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet(pc, packet);
56793}
56794
56796{
56797 conn_list_iterate(dest, pconn) {
56800}
56801
56802#ifdef FREECIV_DELTA_PROTOCOL
56803#define hash_packet_ruleset_terrain_100 hash_const
56804
56805#define cmp_packet_ruleset_terrain_100 cmp_const
56806
56808#endif /* FREECIV_DELTA_PROTOCOL */
56809
56811{
56812#ifdef FREECIV_DELTA_PROTOCOL
56814 struct packet_ruleset_terrain *old;
56815 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN;
56816#endif /* FREECIV_DELTA_PROTOCOL */
56818#ifdef FREECIV_JSON_CONNECTION
56819 struct plocation field_addr;
56820 {
56824 }
56825#endif /* FREECIV_JSON_CONNECTION */
56826
56827#ifdef FREECIV_DELTA_PROTOCOL
56828#ifdef FREECIV_JSON_CONNECTION
56829 field_addr.name = "fields";
56830#endif /* FREECIV_JSON_CONNECTION */
56831 DIO_BV_GET(&din, &field_addr, fields);
56832
56833#else /* FREECIV_DELTA_PROTOCOL */
56834#ifdef FREECIV_JSON_CONNECTION
56835 field_addr.name = "id";
56836#endif /* FREECIV_JSON_CONNECTION */
56837 {
56838 int readin;
56839
56840 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
56842 }
56843 real_packet->id = readin;
56844 }
56845#ifdef FREECIV_JSON_CONNECTION
56846 field_addr.name = "tclass";
56847#endif /* FREECIV_JSON_CONNECTION */
56848 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
56850 }
56851#ifdef FREECIV_JSON_CONNECTION
56852 field_addr.name = "flags";
56853#endif /* FREECIV_JSON_CONNECTION */
56854 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
56856 }
56857#ifdef FREECIV_JSON_CONNECTION
56858 field_addr.name = "native_to";
56859#endif /* FREECIV_JSON_CONNECTION */
56860 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
56861 RECEIVE_PACKET_FIELD_ERROR(native_to);
56862 }
56863#ifdef FREECIV_JSON_CONNECTION
56864 field_addr.name = "name";
56865#endif /* FREECIV_JSON_CONNECTION */
56866 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
56868 }
56869#ifdef FREECIV_JSON_CONNECTION
56870 field_addr.name = "rule_name";
56871#endif /* FREECIV_JSON_CONNECTION */
56872 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56873 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56874 }
56875#ifdef FREECIV_JSON_CONNECTION
56876 field_addr.name = "graphic_str";
56877#endif /* FREECIV_JSON_CONNECTION */
56878 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
56879 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
56880 }
56881#ifdef FREECIV_JSON_CONNECTION
56882 field_addr.name = "graphic_alt";
56883#endif /* FREECIV_JSON_CONNECTION */
56884 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
56885 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
56886 }
56887#ifdef FREECIV_JSON_CONNECTION
56888 field_addr.name = "graphic_alt2";
56889#endif /* FREECIV_JSON_CONNECTION */
56890 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
56891 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
56892 }
56893#ifdef FREECIV_JSON_CONNECTION
56894 field_addr.name = "movement_cost";
56895#endif /* FREECIV_JSON_CONNECTION */
56896 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
56897 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
56898 }
56899#ifdef FREECIV_JSON_CONNECTION
56900 field_addr.name = "defense_bonus";
56901#endif /* FREECIV_JSON_CONNECTION */
56902 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
56903 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
56904 }
56905#ifdef FREECIV_JSON_CONNECTION
56906 field_addr.name = "output";
56907#endif /* FREECIV_JSON_CONNECTION */
56908 {
56909 int i;
56910
56911#ifdef FREECIV_JSON_CONNECTION
56912 /* Enter array. */
56913 field_addr.sub_location = plocation_elem_new(0);
56914#endif /* FREECIV_JSON_CONNECTION */
56915
56916 for (i = 0; i < O_LAST; i++) {
56917#ifdef FREECIV_JSON_CONNECTION
56918 field_addr.sub_location->number = i;
56919#endif /* FREECIV_JSON_CONNECTION */
56920
56921 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
56923 }
56924 }
56925
56926#ifdef FREECIV_JSON_CONNECTION
56927 /* Exit array. */
56928 FC_FREE(field_addr.sub_location);
56929#endif /* FREECIV_JSON_CONNECTION */
56930 }
56931#ifdef FREECIV_JSON_CONNECTION
56932 field_addr.name = "num_resources";
56933#endif /* FREECIV_JSON_CONNECTION */
56934 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
56935 RECEIVE_PACKET_FIELD_ERROR(num_resources);
56936 }
56937#ifdef FREECIV_JSON_CONNECTION
56938 field_addr.name = "resources";
56939#endif /* FREECIV_JSON_CONNECTION */
56940 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
56941 RECEIVE_PACKET_FIELD_ERROR(resources, ": truncation array");
56942 }
56943 {
56944 int i;
56945
56946#ifdef FREECIV_JSON_CONNECTION
56947 /* Enter array. */
56948 field_addr.sub_location = plocation_elem_new(0);
56949#endif /* FREECIV_JSON_CONNECTION */
56950
56951 for (i = 0; i < real_packet->num_resources; i++) {
56952#ifdef FREECIV_JSON_CONNECTION
56953 field_addr.sub_location->number = i;
56954#endif /* FREECIV_JSON_CONNECTION */
56955
56956 {
56957 int readin;
56958
56959 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
56961 }
56962 real_packet->resources[i] = readin;
56963 }
56964 }
56965
56966#ifdef FREECIV_JSON_CONNECTION
56967 /* Exit array. */
56968 FC_FREE(field_addr.sub_location);
56969#endif /* FREECIV_JSON_CONNECTION */
56970 }
56971#ifdef FREECIV_JSON_CONNECTION
56972 field_addr.name = "resource_freq";
56973#endif /* FREECIV_JSON_CONNECTION */
56974 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
56975 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": truncation array");
56976 }
56977 {
56978 int i;
56979
56980#ifdef FREECIV_JSON_CONNECTION
56981 /* Enter array. */
56982 field_addr.sub_location = plocation_elem_new(0);
56983#endif /* FREECIV_JSON_CONNECTION */
56984
56985 for (i = 0; i < real_packet->num_resources; i++) {
56986#ifdef FREECIV_JSON_CONNECTION
56987 field_addr.sub_location->number = i;
56988#endif /* FREECIV_JSON_CONNECTION */
56989
56990 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
56991 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
56992 }
56993 }
56994
56995#ifdef FREECIV_JSON_CONNECTION
56996 /* Exit array. */
56997 FC_FREE(field_addr.sub_location);
56998#endif /* FREECIV_JSON_CONNECTION */
56999 }
57000#ifdef FREECIV_JSON_CONNECTION
57001 field_addr.name = "road_output_incr_pct";
57002#endif /* FREECIV_JSON_CONNECTION */
57003 {
57004 int i;
57005
57006#ifdef FREECIV_JSON_CONNECTION
57007 /* Enter array. */
57008 field_addr.sub_location = plocation_elem_new(0);
57009#endif /* FREECIV_JSON_CONNECTION */
57010
57011 for (i = 0; i < O_LAST; i++) {
57012#ifdef FREECIV_JSON_CONNECTION
57013 field_addr.sub_location->number = i;
57014#endif /* FREECIV_JSON_CONNECTION */
57015
57016 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
57017 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
57018 }
57019 }
57020
57021#ifdef FREECIV_JSON_CONNECTION
57022 /* Exit array. */
57023 FC_FREE(field_addr.sub_location);
57024#endif /* FREECIV_JSON_CONNECTION */
57025 }
57026#ifdef FREECIV_JSON_CONNECTION
57027 field_addr.name = "base_time";
57028#endif /* FREECIV_JSON_CONNECTION */
57029 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
57030 RECEIVE_PACKET_FIELD_ERROR(base_time);
57031 }
57032#ifdef FREECIV_JSON_CONNECTION
57033 field_addr.name = "road_time";
57034#endif /* FREECIV_JSON_CONNECTION */
57035 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
57036 RECEIVE_PACKET_FIELD_ERROR(road_time);
57037 }
57038#ifdef FREECIV_JSON_CONNECTION
57039 field_addr.name = "cultivate_result";
57040#endif /* FREECIV_JSON_CONNECTION */
57041 {
57042 int readin;
57043
57044 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
57045 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
57046 }
57047 real_packet->cultivate_result = readin;
57048 }
57049#ifdef FREECIV_JSON_CONNECTION
57050 field_addr.name = "cultivate_time";
57051#endif /* FREECIV_JSON_CONNECTION */
57052 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
57053 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
57054 }
57055#ifdef FREECIV_JSON_CONNECTION
57056 field_addr.name = "plant_result";
57057#endif /* FREECIV_JSON_CONNECTION */
57058 {
57059 int readin;
57060
57061 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
57062 RECEIVE_PACKET_FIELD_ERROR(plant_result);
57063 }
57064 real_packet->plant_result = readin;
57065 }
57066#ifdef FREECIV_JSON_CONNECTION
57067 field_addr.name = "plant_time";
57068#endif /* FREECIV_JSON_CONNECTION */
57069 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
57070 RECEIVE_PACKET_FIELD_ERROR(plant_time);
57071 }
57072#ifdef FREECIV_JSON_CONNECTION
57073 field_addr.name = "irrigation_food_incr";
57074#endif /* FREECIV_JSON_CONNECTION */
57075 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
57076 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
57077 }
57078#ifdef FREECIV_JSON_CONNECTION
57079 field_addr.name = "irrigation_time";
57080#endif /* FREECIV_JSON_CONNECTION */
57081 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
57082 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
57083 }
57084#ifdef FREECIV_JSON_CONNECTION
57085 field_addr.name = "mining_shield_incr";
57086#endif /* FREECIV_JSON_CONNECTION */
57087 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
57088 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
57089 }
57090#ifdef FREECIV_JSON_CONNECTION
57091 field_addr.name = "mining_time";
57092#endif /* FREECIV_JSON_CONNECTION */
57093 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
57094 RECEIVE_PACKET_FIELD_ERROR(mining_time);
57095 }
57096#ifdef FREECIV_JSON_CONNECTION
57097 field_addr.name = "animal";
57098#endif /* FREECIV_JSON_CONNECTION */
57099 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
57101 }
57102#ifdef FREECIV_JSON_CONNECTION
57103 field_addr.name = "transform_result";
57104#endif /* FREECIV_JSON_CONNECTION */
57105 {
57106 int readin;
57107
57108 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
57109 RECEIVE_PACKET_FIELD_ERROR(transform_result);
57110 }
57111 real_packet->transform_result = readin;
57112 }
57113#ifdef FREECIV_JSON_CONNECTION
57114 field_addr.name = "transform_time";
57115#endif /* FREECIV_JSON_CONNECTION */
57116 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
57117 RECEIVE_PACKET_FIELD_ERROR(transform_time);
57118 }
57119#ifdef FREECIV_JSON_CONNECTION
57120 field_addr.name = "placing_time";
57121#endif /* FREECIV_JSON_CONNECTION */
57122 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
57123 RECEIVE_PACKET_FIELD_ERROR(placing_time);
57124 }
57125#ifdef FREECIV_JSON_CONNECTION
57126 field_addr.name = "pillage_time";
57127#endif /* FREECIV_JSON_CONNECTION */
57128 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
57129 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
57130 }
57131#ifdef FREECIV_JSON_CONNECTION
57132 field_addr.name = "extra_count";
57133#endif /* FREECIV_JSON_CONNECTION */
57134 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
57136 }
57137#ifdef FREECIV_JSON_CONNECTION
57138 field_addr.name = "extra_removal_times";
57139#endif /* FREECIV_JSON_CONNECTION */
57140 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
57141 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": truncation array");
57142 }
57143 {
57144 int i;
57145
57146#ifdef FREECIV_JSON_CONNECTION
57147 /* Enter array. */
57148 field_addr.sub_location = plocation_elem_new(0);
57149#endif /* FREECIV_JSON_CONNECTION */
57150
57151 for (i = 0; i < real_packet->extra_count; i++) {
57152#ifdef FREECIV_JSON_CONNECTION
57153 field_addr.sub_location->number = i;
57154#endif /* FREECIV_JSON_CONNECTION */
57155
57156 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
57157 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
57158 }
57159 }
57160
57161#ifdef FREECIV_JSON_CONNECTION
57162 /* Exit array. */
57163 FC_FREE(field_addr.sub_location);
57164#endif /* FREECIV_JSON_CONNECTION */
57165 }
57166#ifdef FREECIV_JSON_CONNECTION
57167 field_addr.name = "color_red";
57168#endif /* FREECIV_JSON_CONNECTION */
57169 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
57170 RECEIVE_PACKET_FIELD_ERROR(color_red);
57171 }
57172#ifdef FREECIV_JSON_CONNECTION
57173 field_addr.name = "color_green";
57174#endif /* FREECIV_JSON_CONNECTION */
57175 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
57176 RECEIVE_PACKET_FIELD_ERROR(color_green);
57177 }
57178#ifdef FREECIV_JSON_CONNECTION
57179 field_addr.name = "color_blue";
57180#endif /* FREECIV_JSON_CONNECTION */
57181 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
57182 RECEIVE_PACKET_FIELD_ERROR(color_blue);
57183 }
57184#ifdef FREECIV_JSON_CONNECTION
57185 field_addr.name = "helptext";
57186#endif /* FREECIV_JSON_CONNECTION */
57187 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
57189 }
57190#endif
57191 log_packet_detailed("packet_ruleset_terrain_100: got info about ()");
57192
57193#ifdef FREECIV_DELTA_PROTOCOL
57194 if (NULL == *hash) {
57196 NULL, NULL, NULL, free);
57197 }
57198
57199 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
57200 *real_packet = *old;
57201 } else {
57202 log_packet_detailed(" no old info");
57203 memset(real_packet, 0, sizeof(*real_packet));
57204 }
57205
57206 if (BV_ISSET(fields, 0)) {
57207 log_packet_detailed(" got field 'id'");
57208#ifdef FREECIV_JSON_CONNECTION
57209 field_addr.name = "id";
57210#endif /* FREECIV_JSON_CONNECTION */
57211 {
57212 int readin;
57213
57214 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
57216 }
57217 real_packet->id = readin;
57218 }
57219 }
57220 if (BV_ISSET(fields, 1)) {
57221 log_packet_detailed(" got field 'tclass'");
57222#ifdef FREECIV_JSON_CONNECTION
57223 field_addr.name = "tclass";
57224#endif /* FREECIV_JSON_CONNECTION */
57225 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
57227 }
57228 }
57229 if (BV_ISSET(fields, 2)) {
57230 log_packet_detailed(" got field 'flags'");
57231#ifdef FREECIV_JSON_CONNECTION
57232 field_addr.name = "flags";
57233#endif /* FREECIV_JSON_CONNECTION */
57234 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
57236 }
57237 }
57238 if (BV_ISSET(fields, 3)) {
57239 log_packet_detailed(" got field 'native_to'");
57240#ifdef FREECIV_JSON_CONNECTION
57241 field_addr.name = "native_to";
57242#endif /* FREECIV_JSON_CONNECTION */
57243 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
57244 RECEIVE_PACKET_FIELD_ERROR(native_to);
57245 }
57246 }
57247 if (BV_ISSET(fields, 4)) {
57248 log_packet_detailed(" got field 'name'");
57249#ifdef FREECIV_JSON_CONNECTION
57250 field_addr.name = "name";
57251#endif /* FREECIV_JSON_CONNECTION */
57252 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
57254 }
57255 }
57256 if (BV_ISSET(fields, 5)) {
57257 log_packet_detailed(" got field 'rule_name'");
57258#ifdef FREECIV_JSON_CONNECTION
57259 field_addr.name = "rule_name";
57260#endif /* FREECIV_JSON_CONNECTION */
57261 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
57262 RECEIVE_PACKET_FIELD_ERROR(rule_name);
57263 }
57264 }
57265 if (BV_ISSET(fields, 6)) {
57266 log_packet_detailed(" got field 'graphic_str'");
57267#ifdef FREECIV_JSON_CONNECTION
57268 field_addr.name = "graphic_str";
57269#endif /* FREECIV_JSON_CONNECTION */
57270 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
57271 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
57272 }
57273 }
57274 if (BV_ISSET(fields, 7)) {
57275 log_packet_detailed(" got field 'graphic_alt'");
57276#ifdef FREECIV_JSON_CONNECTION
57277 field_addr.name = "graphic_alt";
57278#endif /* FREECIV_JSON_CONNECTION */
57279 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
57280 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
57281 }
57282 }
57283 if (BV_ISSET(fields, 8)) {
57284 log_packet_detailed(" got field 'graphic_alt2'");
57285#ifdef FREECIV_JSON_CONNECTION
57286 field_addr.name = "graphic_alt2";
57287#endif /* FREECIV_JSON_CONNECTION */
57288 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
57289 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
57290 }
57291 }
57292 if (BV_ISSET(fields, 9)) {
57293 log_packet_detailed(" got field 'movement_cost'");
57294#ifdef FREECIV_JSON_CONNECTION
57295 field_addr.name = "movement_cost";
57296#endif /* FREECIV_JSON_CONNECTION */
57297 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
57298 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
57299 }
57300 }
57301 if (BV_ISSET(fields, 10)) {
57302 log_packet_detailed(" got field 'defense_bonus'");
57303#ifdef FREECIV_JSON_CONNECTION
57304 field_addr.name = "defense_bonus";
57305#endif /* FREECIV_JSON_CONNECTION */
57306 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
57307 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
57308 }
57309 }
57310 if (BV_ISSET(fields, 11)) {
57311 log_packet_detailed(" got field 'output'");
57312#ifdef FREECIV_JSON_CONNECTION
57313 field_addr.name = "output";
57314#endif /* FREECIV_JSON_CONNECTION */
57315 {
57316 int i;
57317
57318#ifdef FREECIV_JSON_CONNECTION
57319 /* Enter array. */
57320 field_addr.sub_location = plocation_elem_new(0);
57321#endif /* FREECIV_JSON_CONNECTION */
57322
57323 for (i = 0; i < O_LAST; i++) {
57324#ifdef FREECIV_JSON_CONNECTION
57325 field_addr.sub_location->number = i;
57326#endif /* FREECIV_JSON_CONNECTION */
57327
57328 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
57330 }
57331 }
57332
57333#ifdef FREECIV_JSON_CONNECTION
57334 /* Exit array. */
57335 FC_FREE(field_addr.sub_location);
57336#endif /* FREECIV_JSON_CONNECTION */
57337 }
57338 }
57339 if (BV_ISSET(fields, 12)) {
57340 log_packet_detailed(" got field 'num_resources'");
57341#ifdef FREECIV_JSON_CONNECTION
57342 field_addr.name = "num_resources";
57343#endif /* FREECIV_JSON_CONNECTION */
57344 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
57345 RECEIVE_PACKET_FIELD_ERROR(num_resources);
57346 }
57347 }
57348 if (BV_ISSET(fields, 13)) {
57349 log_packet_detailed(" got field 'resources'");
57350#ifdef FREECIV_JSON_CONNECTION
57351 field_addr.name = "resources";
57352#endif /* FREECIV_JSON_CONNECTION */
57353 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
57354 RECEIVE_PACKET_FIELD_ERROR(resources, ": truncation array");
57355 }
57356 {
57357 int i;
57358
57359#ifdef FREECIV_JSON_CONNECTION
57360 /* Enter array. */
57361 field_addr.sub_location = plocation_elem_new(0);
57362#endif /* FREECIV_JSON_CONNECTION */
57363
57364 for (i = 0; i < real_packet->num_resources; i++) {
57365#ifdef FREECIV_JSON_CONNECTION
57366 field_addr.sub_location->number = i;
57367#endif /* FREECIV_JSON_CONNECTION */
57368
57369 {
57370 int readin;
57371
57372 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
57374 }
57375 real_packet->resources[i] = readin;
57376 }
57377 }
57378
57379#ifdef FREECIV_JSON_CONNECTION
57380 /* Exit array. */
57381 FC_FREE(field_addr.sub_location);
57382#endif /* FREECIV_JSON_CONNECTION */
57383 }
57384 }
57385 if (BV_ISSET(fields, 14)) {
57386 log_packet_detailed(" got field 'resource_freq'");
57387#ifdef FREECIV_JSON_CONNECTION
57388 field_addr.name = "resource_freq";
57389#endif /* FREECIV_JSON_CONNECTION */
57390 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
57391 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": truncation array");
57392 }
57393 {
57394 int i;
57395
57396#ifdef FREECIV_JSON_CONNECTION
57397 /* Enter array. */
57398 field_addr.sub_location = plocation_elem_new(0);
57399#endif /* FREECIV_JSON_CONNECTION */
57400
57401 for (i = 0; i < real_packet->num_resources; i++) {
57402#ifdef FREECIV_JSON_CONNECTION
57403 field_addr.sub_location->number = i;
57404#endif /* FREECIV_JSON_CONNECTION */
57405
57406 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
57407 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
57408 }
57409 }
57410
57411#ifdef FREECIV_JSON_CONNECTION
57412 /* Exit array. */
57413 FC_FREE(field_addr.sub_location);
57414#endif /* FREECIV_JSON_CONNECTION */
57415 }
57416 }
57417 if (BV_ISSET(fields, 15)) {
57418 log_packet_detailed(" got field 'road_output_incr_pct'");
57419#ifdef FREECIV_JSON_CONNECTION
57420 field_addr.name = "road_output_incr_pct";
57421#endif /* FREECIV_JSON_CONNECTION */
57422 {
57423 int i;
57424
57425#ifdef FREECIV_JSON_CONNECTION
57426 /* Enter array. */
57427 field_addr.sub_location = plocation_elem_new(0);
57428#endif /* FREECIV_JSON_CONNECTION */
57429
57430 for (i = 0; i < O_LAST; i++) {
57431#ifdef FREECIV_JSON_CONNECTION
57432 field_addr.sub_location->number = i;
57433#endif /* FREECIV_JSON_CONNECTION */
57434
57435 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
57436 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
57437 }
57438 }
57439
57440#ifdef FREECIV_JSON_CONNECTION
57441 /* Exit array. */
57442 FC_FREE(field_addr.sub_location);
57443#endif /* FREECIV_JSON_CONNECTION */
57444 }
57445 }
57446 if (BV_ISSET(fields, 16)) {
57447 log_packet_detailed(" got field 'base_time'");
57448#ifdef FREECIV_JSON_CONNECTION
57449 field_addr.name = "base_time";
57450#endif /* FREECIV_JSON_CONNECTION */
57451 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
57452 RECEIVE_PACKET_FIELD_ERROR(base_time);
57453 }
57454 }
57455 if (BV_ISSET(fields, 17)) {
57456 log_packet_detailed(" got field 'road_time'");
57457#ifdef FREECIV_JSON_CONNECTION
57458 field_addr.name = "road_time";
57459#endif /* FREECIV_JSON_CONNECTION */
57460 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
57461 RECEIVE_PACKET_FIELD_ERROR(road_time);
57462 }
57463 }
57464 if (BV_ISSET(fields, 18)) {
57465 log_packet_detailed(" got field 'cultivate_result'");
57466#ifdef FREECIV_JSON_CONNECTION
57467 field_addr.name = "cultivate_result";
57468#endif /* FREECIV_JSON_CONNECTION */
57469 {
57470 int readin;
57471
57472 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
57473 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
57474 }
57475 real_packet->cultivate_result = readin;
57476 }
57477 }
57478 if (BV_ISSET(fields, 19)) {
57479 log_packet_detailed(" got field 'cultivate_time'");
57480#ifdef FREECIV_JSON_CONNECTION
57481 field_addr.name = "cultivate_time";
57482#endif /* FREECIV_JSON_CONNECTION */
57483 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
57484 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
57485 }
57486 }
57487 if (BV_ISSET(fields, 20)) {
57488 log_packet_detailed(" got field 'plant_result'");
57489#ifdef FREECIV_JSON_CONNECTION
57490 field_addr.name = "plant_result";
57491#endif /* FREECIV_JSON_CONNECTION */
57492 {
57493 int readin;
57494
57495 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
57496 RECEIVE_PACKET_FIELD_ERROR(plant_result);
57497 }
57498 real_packet->plant_result = readin;
57499 }
57500 }
57501 if (BV_ISSET(fields, 21)) {
57502 log_packet_detailed(" got field 'plant_time'");
57503#ifdef FREECIV_JSON_CONNECTION
57504 field_addr.name = "plant_time";
57505#endif /* FREECIV_JSON_CONNECTION */
57506 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
57507 RECEIVE_PACKET_FIELD_ERROR(plant_time);
57508 }
57509 }
57510 if (BV_ISSET(fields, 22)) {
57511 log_packet_detailed(" got field 'irrigation_food_incr'");
57512#ifdef FREECIV_JSON_CONNECTION
57513 field_addr.name = "irrigation_food_incr";
57514#endif /* FREECIV_JSON_CONNECTION */
57515 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
57516 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
57517 }
57518 }
57519 if (BV_ISSET(fields, 23)) {
57520 log_packet_detailed(" got field 'irrigation_time'");
57521#ifdef FREECIV_JSON_CONNECTION
57522 field_addr.name = "irrigation_time";
57523#endif /* FREECIV_JSON_CONNECTION */
57524 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
57525 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
57526 }
57527 }
57528 if (BV_ISSET(fields, 24)) {
57529 log_packet_detailed(" got field 'mining_shield_incr'");
57530#ifdef FREECIV_JSON_CONNECTION
57531 field_addr.name = "mining_shield_incr";
57532#endif /* FREECIV_JSON_CONNECTION */
57533 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
57534 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
57535 }
57536 }
57537 if (BV_ISSET(fields, 25)) {
57538 log_packet_detailed(" got field 'mining_time'");
57539#ifdef FREECIV_JSON_CONNECTION
57540 field_addr.name = "mining_time";
57541#endif /* FREECIV_JSON_CONNECTION */
57542 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
57543 RECEIVE_PACKET_FIELD_ERROR(mining_time);
57544 }
57545 }
57546 if (BV_ISSET(fields, 26)) {
57547 log_packet_detailed(" got field 'animal'");
57548#ifdef FREECIV_JSON_CONNECTION
57549 field_addr.name = "animal";
57550#endif /* FREECIV_JSON_CONNECTION */
57551 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
57553 }
57554 }
57555 if (BV_ISSET(fields, 27)) {
57556 log_packet_detailed(" got field 'transform_result'");
57557#ifdef FREECIV_JSON_CONNECTION
57558 field_addr.name = "transform_result";
57559#endif /* FREECIV_JSON_CONNECTION */
57560 {
57561 int readin;
57562
57563 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
57564 RECEIVE_PACKET_FIELD_ERROR(transform_result);
57565 }
57566 real_packet->transform_result = readin;
57567 }
57568 }
57569 if (BV_ISSET(fields, 28)) {
57570 log_packet_detailed(" got field 'transform_time'");
57571#ifdef FREECIV_JSON_CONNECTION
57572 field_addr.name = "transform_time";
57573#endif /* FREECIV_JSON_CONNECTION */
57574 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
57575 RECEIVE_PACKET_FIELD_ERROR(transform_time);
57576 }
57577 }
57578 if (BV_ISSET(fields, 29)) {
57579 log_packet_detailed(" got field 'placing_time'");
57580#ifdef FREECIV_JSON_CONNECTION
57581 field_addr.name = "placing_time";
57582#endif /* FREECIV_JSON_CONNECTION */
57583 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
57584 RECEIVE_PACKET_FIELD_ERROR(placing_time);
57585 }
57586 }
57587 if (BV_ISSET(fields, 30)) {
57588 log_packet_detailed(" got field 'pillage_time'");
57589#ifdef FREECIV_JSON_CONNECTION
57590 field_addr.name = "pillage_time";
57591#endif /* FREECIV_JSON_CONNECTION */
57592 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
57593 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
57594 }
57595 }
57596 if (BV_ISSET(fields, 31)) {
57597 log_packet_detailed(" got field 'extra_count'");
57598#ifdef FREECIV_JSON_CONNECTION
57599 field_addr.name = "extra_count";
57600#endif /* FREECIV_JSON_CONNECTION */
57601 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
57603 }
57604 }
57605 if (BV_ISSET(fields, 32)) {
57606 log_packet_detailed(" got field 'extra_removal_times'");
57607#ifdef FREECIV_JSON_CONNECTION
57608 field_addr.name = "extra_removal_times";
57609#endif /* FREECIV_JSON_CONNECTION */
57610 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
57611 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": truncation array");
57612 }
57613 {
57614 int i;
57615
57616#ifdef FREECIV_JSON_CONNECTION
57617 /* Enter array. */
57618 field_addr.sub_location = plocation_elem_new(0);
57619#endif /* FREECIV_JSON_CONNECTION */
57620
57621 for (i = 0; i < real_packet->extra_count; i++) {
57622#ifdef FREECIV_JSON_CONNECTION
57623 field_addr.sub_location->number = i;
57624#endif /* FREECIV_JSON_CONNECTION */
57625
57626 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
57627 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
57628 }
57629 }
57630
57631#ifdef FREECIV_JSON_CONNECTION
57632 /* Exit array. */
57633 FC_FREE(field_addr.sub_location);
57634#endif /* FREECIV_JSON_CONNECTION */
57635 }
57636 }
57637 if (BV_ISSET(fields, 33)) {
57638 log_packet_detailed(" got field 'color_red'");
57639#ifdef FREECIV_JSON_CONNECTION
57640 field_addr.name = "color_red";
57641#endif /* FREECIV_JSON_CONNECTION */
57642 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
57643 RECEIVE_PACKET_FIELD_ERROR(color_red);
57644 }
57645 }
57646 if (BV_ISSET(fields, 34)) {
57647 log_packet_detailed(" got field 'color_green'");
57648#ifdef FREECIV_JSON_CONNECTION
57649 field_addr.name = "color_green";
57650#endif /* FREECIV_JSON_CONNECTION */
57651 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
57652 RECEIVE_PACKET_FIELD_ERROR(color_green);
57653 }
57654 }
57655 if (BV_ISSET(fields, 35)) {
57656 log_packet_detailed(" got field 'color_blue'");
57657#ifdef FREECIV_JSON_CONNECTION
57658 field_addr.name = "color_blue";
57659#endif /* FREECIV_JSON_CONNECTION */
57660 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
57661 RECEIVE_PACKET_FIELD_ERROR(color_blue);
57662 }
57663 }
57664 if (BV_ISSET(fields, 36)) {
57665 log_packet_detailed(" got field 'helptext'");
57666#ifdef FREECIV_JSON_CONNECTION
57667 field_addr.name = "helptext";
57668#endif /* FREECIV_JSON_CONNECTION */
57669 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
57671 }
57672 }
57673
57674 if (NULL == old) {
57675 old = fc_malloc(sizeof(*old));
57676 *old = *real_packet;
57677 genhash_insert(*hash, old, old);
57678 } else {
57679 *old = *real_packet;
57680 }
57681
57682#endif /* FREECIV_DELTA_PROTOCOL */
57684}
57685
57687{
57688 const struct packet_ruleset_terrain *real_packet = packet;
57689 int e;
57690#ifdef FREECIV_DELTA_PROTOCOL
57692 struct packet_ruleset_terrain *old;
57693 bool differ;
57694 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN;
57695#endif /* FREECIV_DELTA_PROTOCOL */
57697#ifdef FREECIV_JSON_CONNECTION
57698 struct plocation field_addr;
57699 {
57703 }
57704#endif /* FREECIV_JSON_CONNECTION */
57705
57706 log_packet_detailed("packet_ruleset_terrain_100: sending info about ()");
57707
57708#ifdef FREECIV_DELTA_PROTOCOL
57709 if (NULL == *hash) {
57711 NULL, NULL, NULL, free);
57712 }
57713 BV_CLR_ALL(fields);
57714
57715 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
57716 old = fc_malloc(sizeof(*old));
57717 *old = *real_packet;
57718 genhash_insert(*hash, old, old);
57719 memset(old, 0, sizeof(*old));
57720 }
57721 differ = (old->id != real_packet->id);
57722 if (differ) {
57723 BV_SET(fields, 0);
57724 }
57725
57726 differ = (old->tclass != real_packet->tclass);
57727 if (differ) {
57728 BV_SET(fields, 1);
57729 }
57730
57731 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
57732 if (differ) {
57733 BV_SET(fields, 2);
57734 }
57735
57736 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
57737 if (differ) {
57738 BV_SET(fields, 3);
57739 }
57740
57741 differ = (strcmp(old->name, real_packet->name) != 0);
57742 if (differ) {
57743 BV_SET(fields, 4);
57744 }
57745
57746 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
57747 if (differ) {
57748 BV_SET(fields, 5);
57749 }
57750
57751 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
57752 if (differ) {
57753 BV_SET(fields, 6);
57754 }
57755
57756 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
57757 if (differ) {
57758 BV_SET(fields, 7);
57759 }
57760
57761 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
57762 if (differ) {
57763 BV_SET(fields, 8);
57764 }
57765
57766 differ = (old->movement_cost != real_packet->movement_cost);
57767 if (differ) {
57768 BV_SET(fields, 9);
57769 }
57770
57771 differ = (old->defense_bonus != real_packet->defense_bonus);
57772 if (differ) {
57773 BV_SET(fields, 10);
57774 }
57775
57776 differ = FALSE;
57777 {
57778 int i;
57779
57780 for (i = 0; i < O_LAST; i++) {
57781 differ = (old->output[i] != real_packet->output[i]);
57782 if (differ) {
57783 break;
57784 }
57785 }
57786 }
57787 if (differ) {
57788 BV_SET(fields, 11);
57789 }
57790
57791 differ = (old->num_resources != real_packet->num_resources);
57792 if (differ) {
57793 BV_SET(fields, 12);
57794 }
57795
57796 differ = (old->num_resources != real_packet->num_resources);
57797 if (!differ) {
57798 int i;
57799
57800 for (i = 0; i < real_packet->num_resources; i++) {
57801 differ = (old->resources[i] != real_packet->resources[i]);
57802 if (differ) {
57803 break;
57804 }
57805 }
57806 }
57807 if (differ) {
57808 BV_SET(fields, 13);
57809 }
57810
57811 differ = (old->num_resources != real_packet->num_resources);
57812 if (!differ) {
57813 int i;
57814
57815 for (i = 0; i < real_packet->num_resources; i++) {
57816 differ = (old->resource_freq[i] != real_packet->resource_freq[i]);
57817 if (differ) {
57818 break;
57819 }
57820 }
57821 }
57822 if (differ) {
57823 BV_SET(fields, 14);
57824 }
57825
57826 differ = FALSE;
57827 {
57828 int i;
57829
57830 for (i = 0; i < O_LAST; i++) {
57831 differ = (old->road_output_incr_pct[i] != real_packet->road_output_incr_pct[i]);
57832 if (differ) {
57833 break;
57834 }
57835 }
57836 }
57837 if (differ) {
57838 BV_SET(fields, 15);
57839 }
57840
57841 differ = (old->base_time != real_packet->base_time);
57842 if (differ) {
57843 BV_SET(fields, 16);
57844 }
57845
57846 differ = (old->road_time != real_packet->road_time);
57847 if (differ) {
57848 BV_SET(fields, 17);
57849 }
57850
57851 differ = (old->cultivate_result != real_packet->cultivate_result);
57852 if (differ) {
57853 BV_SET(fields, 18);
57854 }
57855
57856 differ = (old->cultivate_time != real_packet->cultivate_time);
57857 if (differ) {
57858 BV_SET(fields, 19);
57859 }
57860
57861 differ = (old->plant_result != real_packet->plant_result);
57862 if (differ) {
57863 BV_SET(fields, 20);
57864 }
57865
57866 differ = (old->plant_time != real_packet->plant_time);
57867 if (differ) {
57868 BV_SET(fields, 21);
57869 }
57870
57871 differ = (old->irrigation_food_incr != real_packet->irrigation_food_incr);
57872 if (differ) {
57873 BV_SET(fields, 22);
57874 }
57875
57876 differ = (old->irrigation_time != real_packet->irrigation_time);
57877 if (differ) {
57878 BV_SET(fields, 23);
57879 }
57880
57881 differ = (old->mining_shield_incr != real_packet->mining_shield_incr);
57882 if (differ) {
57883 BV_SET(fields, 24);
57884 }
57885
57886 differ = (old->mining_time != real_packet->mining_time);
57887 if (differ) {
57888 BV_SET(fields, 25);
57889 }
57890
57891 differ = (old->animal != real_packet->animal);
57892 if (differ) {
57893 BV_SET(fields, 26);
57894 }
57895
57896 differ = (old->transform_result != real_packet->transform_result);
57897 if (differ) {
57898 BV_SET(fields, 27);
57899 }
57900
57901 differ = (old->transform_time != real_packet->transform_time);
57902 if (differ) {
57903 BV_SET(fields, 28);
57904 }
57905
57906 differ = (old->placing_time != real_packet->placing_time);
57907 if (differ) {
57908 BV_SET(fields, 29);
57909 }
57910
57911 differ = (old->pillage_time != real_packet->pillage_time);
57912 if (differ) {
57913 BV_SET(fields, 30);
57914 }
57915
57916 differ = (old->extra_count != real_packet->extra_count);
57917 if (differ) {
57918 BV_SET(fields, 31);
57919 }
57920
57921 differ = (old->extra_count != real_packet->extra_count);
57922 if (!differ) {
57923 int i;
57924
57925 for (i = 0; i < real_packet->extra_count; i++) {
57926 differ = (old->extra_removal_times[i] != real_packet->extra_removal_times[i]);
57927 if (differ) {
57928 break;
57929 }
57930 }
57931 }
57932 if (differ) {
57933 BV_SET(fields, 32);
57934 }
57935
57936 differ = (old->color_red != real_packet->color_red);
57937 if (differ) {
57938 BV_SET(fields, 33);
57939 }
57940
57941 differ = (old->color_green != real_packet->color_green);
57942 if (differ) {
57943 BV_SET(fields, 34);
57944 }
57945
57946 differ = (old->color_blue != real_packet->color_blue);
57947 if (differ) {
57948 BV_SET(fields, 35);
57949 }
57950
57951 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
57952 if (differ) {
57953 BV_SET(fields, 36);
57954 }
57955
57956
57957#ifdef FREECIV_JSON_CONNECTION
57958 field_addr.name = "fields";
57959#endif /* FREECIV_JSON_CONNECTION */
57960 e = 0;
57961 e |= DIO_BV_PUT(&dout, &field_addr, fields);
57962 if (e) {
57963 log_packet_detailed("fields bitvector error detected");
57964 }
57965
57966 if (BV_ISSET(fields, 0)) {
57967 log_packet_detailed(" field 'id' has changed");
57968#ifdef FREECIV_JSON_CONNECTION
57969 field_addr.name = "id";
57970#endif /* FREECIV_JSON_CONNECTION */
57971 e = 0;
57972 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
57973 if (e) {
57974 log_packet_detailed("'id' field error detected");
57975 }
57976 }
57977 if (BV_ISSET(fields, 1)) {
57978 log_packet_detailed(" field 'tclass' has changed");
57979#ifdef FREECIV_JSON_CONNECTION
57980 field_addr.name = "tclass";
57981#endif /* FREECIV_JSON_CONNECTION */
57982 e = 0;
57983 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
57984 if (e) {
57985 log_packet_detailed("'tclass' field error detected");
57986 }
57987 }
57988 if (BV_ISSET(fields, 2)) {
57989 log_packet_detailed(" field 'flags' has changed");
57990#ifdef FREECIV_JSON_CONNECTION
57991 field_addr.name = "flags";
57992#endif /* FREECIV_JSON_CONNECTION */
57993 e = 0;
57994 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
57995 if (e) {
57996 log_packet_detailed("'flags' field error detected");
57997 }
57998 }
57999 if (BV_ISSET(fields, 3)) {
58000 log_packet_detailed(" field 'native_to' has changed");
58001#ifdef FREECIV_JSON_CONNECTION
58002 field_addr.name = "native_to";
58003#endif /* FREECIV_JSON_CONNECTION */
58004 e = 0;
58005 e |= DIO_BV_PUT(&dout, &field_addr, packet->native_to);
58006 if (e) {
58007 log_packet_detailed("'native_to' field error detected");
58008 }
58009 }
58010 if (BV_ISSET(fields, 4)) {
58011 log_packet_detailed(" field 'name' has changed");
58012#ifdef FREECIV_JSON_CONNECTION
58013 field_addr.name = "name";
58014#endif /* FREECIV_JSON_CONNECTION */
58015 e = 0;
58016 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
58017 if (e) {
58018 log_packet_detailed("'name' field error detected");
58019 }
58020 }
58021 if (BV_ISSET(fields, 5)) {
58022 log_packet_detailed(" field 'rule_name' has changed");
58023#ifdef FREECIV_JSON_CONNECTION
58024 field_addr.name = "rule_name";
58025#endif /* FREECIV_JSON_CONNECTION */
58026 e = 0;
58027 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
58028 if (e) {
58029 log_packet_detailed("'rule_name' field error detected");
58030 }
58031 }
58032 if (BV_ISSET(fields, 6)) {
58033 log_packet_detailed(" field 'graphic_str' has changed");
58034#ifdef FREECIV_JSON_CONNECTION
58035 field_addr.name = "graphic_str";
58036#endif /* FREECIV_JSON_CONNECTION */
58037 e = 0;
58038 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
58039 if (e) {
58040 log_packet_detailed("'graphic_str' field error detected");
58041 }
58042 }
58043 if (BV_ISSET(fields, 7)) {
58044 log_packet_detailed(" field 'graphic_alt' has changed");
58045#ifdef FREECIV_JSON_CONNECTION
58046 field_addr.name = "graphic_alt";
58047#endif /* FREECIV_JSON_CONNECTION */
58048 e = 0;
58049 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
58050 if (e) {
58051 log_packet_detailed("'graphic_alt' field error detected");
58052 }
58053 }
58054 if (BV_ISSET(fields, 8)) {
58055 log_packet_detailed(" field 'graphic_alt2' has changed");
58056#ifdef FREECIV_JSON_CONNECTION
58057 field_addr.name = "graphic_alt2";
58058#endif /* FREECIV_JSON_CONNECTION */
58059 e = 0;
58060 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
58061 if (e) {
58062 log_packet_detailed("'graphic_alt2' field error detected");
58063 }
58064 }
58065 if (BV_ISSET(fields, 9)) {
58066 log_packet_detailed(" field 'movement_cost' has changed");
58067#ifdef FREECIV_JSON_CONNECTION
58068 field_addr.name = "movement_cost";
58069#endif /* FREECIV_JSON_CONNECTION */
58070 e = 0;
58071 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
58072 if (e) {
58073 log_packet_detailed("'movement_cost' field error detected");
58074 }
58075 }
58076 if (BV_ISSET(fields, 10)) {
58077 log_packet_detailed(" field 'defense_bonus' has changed");
58078#ifdef FREECIV_JSON_CONNECTION
58079 field_addr.name = "defense_bonus";
58080#endif /* FREECIV_JSON_CONNECTION */
58081 e = 0;
58082 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
58083 if (e) {
58084 log_packet_detailed("'defense_bonus' field error detected");
58085 }
58086 }
58087 if (BV_ISSET(fields, 11)) {
58088 log_packet_detailed(" field 'output' has changed");
58089#ifdef FREECIV_JSON_CONNECTION
58090 field_addr.name = "output";
58091#endif /* FREECIV_JSON_CONNECTION */
58092 e = 0;
58093 {
58094 int i;
58095
58096#ifdef FREECIV_JSON_CONNECTION
58097 /* Create the array. */
58098 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
58099
58100 /* Enter the array. */
58101 field_addr.sub_location = plocation_elem_new(0);
58102#endif /* FREECIV_JSON_CONNECTION */
58103
58104 for (i = 0; i < O_LAST; i++) {
58105#ifdef FREECIV_JSON_CONNECTION
58106 /* Next array element. */
58107 field_addr.sub_location->number = i;
58108#endif /* FREECIV_JSON_CONNECTION */
58109
58110 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
58111 }
58112
58113#ifdef FREECIV_JSON_CONNECTION
58114 /* Exit array. */
58115 FC_FREE(field_addr.sub_location);
58116#endif /* FREECIV_JSON_CONNECTION */
58117 }
58118 if (e) {
58119 log_packet_detailed("'output' field error detected");
58120 }
58121 }
58122 if (BV_ISSET(fields, 12)) {
58123 log_packet_detailed(" field 'num_resources' has changed");
58124#ifdef FREECIV_JSON_CONNECTION
58125 field_addr.name = "num_resources";
58126#endif /* FREECIV_JSON_CONNECTION */
58127 e = 0;
58128 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
58129 if (e) {
58130 log_packet_detailed("'num_resources' field error detected");
58131 }
58132 }
58133 if (BV_ISSET(fields, 13)) {
58134 log_packet_detailed(" field 'resources' has changed");
58135#ifdef FREECIV_JSON_CONNECTION
58136 field_addr.name = "resources";
58137#endif /* FREECIV_JSON_CONNECTION */
58138 e = 0;
58139 {
58140 int i;
58141
58142#ifdef FREECIV_JSON_CONNECTION
58143 /* Create the array. */
58144 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
58145
58146 /* Enter the array. */
58147 field_addr.sub_location = plocation_elem_new(0);
58148#endif /* FREECIV_JSON_CONNECTION */
58149
58150 for (i = 0; i < real_packet->num_resources; i++) {
58151#ifdef FREECIV_JSON_CONNECTION
58152 /* Next array element. */
58153 field_addr.sub_location->number = i;
58154#endif /* FREECIV_JSON_CONNECTION */
58155
58156 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
58157 }
58158
58159#ifdef FREECIV_JSON_CONNECTION
58160 /* Exit array. */
58161 FC_FREE(field_addr.sub_location);
58162#endif /* FREECIV_JSON_CONNECTION */
58163 }
58164 if (e) {
58165 log_packet_detailed("'resources' field error detected");
58166 }
58167 }
58168 if (BV_ISSET(fields, 14)) {
58169 log_packet_detailed(" field 'resource_freq' has changed");
58170#ifdef FREECIV_JSON_CONNECTION
58171 field_addr.name = "resource_freq";
58172#endif /* FREECIV_JSON_CONNECTION */
58173 e = 0;
58174 {
58175 int i;
58176
58177#ifdef FREECIV_JSON_CONNECTION
58178 /* Create the array. */
58179 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
58180
58181 /* Enter the array. */
58182 field_addr.sub_location = plocation_elem_new(0);
58183#endif /* FREECIV_JSON_CONNECTION */
58184
58185 for (i = 0; i < real_packet->num_resources; i++) {
58186#ifdef FREECIV_JSON_CONNECTION
58187 /* Next array element. */
58188 field_addr.sub_location->number = i;
58189#endif /* FREECIV_JSON_CONNECTION */
58190
58191 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
58192 }
58193
58194#ifdef FREECIV_JSON_CONNECTION
58195 /* Exit array. */
58196 FC_FREE(field_addr.sub_location);
58197#endif /* FREECIV_JSON_CONNECTION */
58198 }
58199 if (e) {
58200 log_packet_detailed("'resource_freq' field error detected");
58201 }
58202 }
58203 if (BV_ISSET(fields, 15)) {
58204 log_packet_detailed(" field 'road_output_incr_pct' has changed");
58205#ifdef FREECIV_JSON_CONNECTION
58206 field_addr.name = "road_output_incr_pct";
58207#endif /* FREECIV_JSON_CONNECTION */
58208 e = 0;
58209 {
58210 int i;
58211
58212#ifdef FREECIV_JSON_CONNECTION
58213 /* Create the array. */
58214 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
58215
58216 /* Enter the array. */
58217 field_addr.sub_location = plocation_elem_new(0);
58218#endif /* FREECIV_JSON_CONNECTION */
58219
58220 for (i = 0; i < O_LAST; i++) {
58221#ifdef FREECIV_JSON_CONNECTION
58222 /* Next array element. */
58223 field_addr.sub_location->number = i;
58224#endif /* FREECIV_JSON_CONNECTION */
58225
58226 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
58227 }
58228
58229#ifdef FREECIV_JSON_CONNECTION
58230 /* Exit array. */
58231 FC_FREE(field_addr.sub_location);
58232#endif /* FREECIV_JSON_CONNECTION */
58233 }
58234 if (e) {
58235 log_packet_detailed("'road_output_incr_pct' field error detected");
58236 }
58237 }
58238 if (BV_ISSET(fields, 16)) {
58239 log_packet_detailed(" field 'base_time' has changed");
58240#ifdef FREECIV_JSON_CONNECTION
58241 field_addr.name = "base_time";
58242#endif /* FREECIV_JSON_CONNECTION */
58243 e = 0;
58244 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
58245 if (e) {
58246 log_packet_detailed("'base_time' field error detected");
58247 }
58248 }
58249 if (BV_ISSET(fields, 17)) {
58250 log_packet_detailed(" field 'road_time' has changed");
58251#ifdef FREECIV_JSON_CONNECTION
58252 field_addr.name = "road_time";
58253#endif /* FREECIV_JSON_CONNECTION */
58254 e = 0;
58255 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
58256 if (e) {
58257 log_packet_detailed("'road_time' field error detected");
58258 }
58259 }
58260 if (BV_ISSET(fields, 18)) {
58261 log_packet_detailed(" field 'cultivate_result' has changed");
58262#ifdef FREECIV_JSON_CONNECTION
58263 field_addr.name = "cultivate_result";
58264#endif /* FREECIV_JSON_CONNECTION */
58265 e = 0;
58266 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
58267 if (e) {
58268 log_packet_detailed("'cultivate_result' field error detected");
58269 }
58270 }
58271 if (BV_ISSET(fields, 19)) {
58272 log_packet_detailed(" field 'cultivate_time' has changed");
58273#ifdef FREECIV_JSON_CONNECTION
58274 field_addr.name = "cultivate_time";
58275#endif /* FREECIV_JSON_CONNECTION */
58276 e = 0;
58277 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
58278 if (e) {
58279 log_packet_detailed("'cultivate_time' field error detected");
58280 }
58281 }
58282 if (BV_ISSET(fields, 20)) {
58283 log_packet_detailed(" field 'plant_result' has changed");
58284#ifdef FREECIV_JSON_CONNECTION
58285 field_addr.name = "plant_result";
58286#endif /* FREECIV_JSON_CONNECTION */
58287 e = 0;
58288 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
58289 if (e) {
58290 log_packet_detailed("'plant_result' field error detected");
58291 }
58292 }
58293 if (BV_ISSET(fields, 21)) {
58294 log_packet_detailed(" field 'plant_time' has changed");
58295#ifdef FREECIV_JSON_CONNECTION
58296 field_addr.name = "plant_time";
58297#endif /* FREECIV_JSON_CONNECTION */
58298 e = 0;
58299 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
58300 if (e) {
58301 log_packet_detailed("'plant_time' field error detected");
58302 }
58303 }
58304 if (BV_ISSET(fields, 22)) {
58305 log_packet_detailed(" field 'irrigation_food_incr' has changed");
58306#ifdef FREECIV_JSON_CONNECTION
58307 field_addr.name = "irrigation_food_incr";
58308#endif /* FREECIV_JSON_CONNECTION */
58309 e = 0;
58310 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
58311 if (e) {
58312 log_packet_detailed("'irrigation_food_incr' field error detected");
58313 }
58314 }
58315 if (BV_ISSET(fields, 23)) {
58316 log_packet_detailed(" field 'irrigation_time' has changed");
58317#ifdef FREECIV_JSON_CONNECTION
58318 field_addr.name = "irrigation_time";
58319#endif /* FREECIV_JSON_CONNECTION */
58320 e = 0;
58321 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
58322 if (e) {
58323 log_packet_detailed("'irrigation_time' field error detected");
58324 }
58325 }
58326 if (BV_ISSET(fields, 24)) {
58327 log_packet_detailed(" field 'mining_shield_incr' has changed");
58328#ifdef FREECIV_JSON_CONNECTION
58329 field_addr.name = "mining_shield_incr";
58330#endif /* FREECIV_JSON_CONNECTION */
58331 e = 0;
58332 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
58333 if (e) {
58334 log_packet_detailed("'mining_shield_incr' field error detected");
58335 }
58336 }
58337 if (BV_ISSET(fields, 25)) {
58338 log_packet_detailed(" field 'mining_time' has changed");
58339#ifdef FREECIV_JSON_CONNECTION
58340 field_addr.name = "mining_time";
58341#endif /* FREECIV_JSON_CONNECTION */
58342 e = 0;
58343 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
58344 if (e) {
58345 log_packet_detailed("'mining_time' field error detected");
58346 }
58347 }
58348 if (BV_ISSET(fields, 26)) {
58349 log_packet_detailed(" field 'animal' has changed");
58350#ifdef FREECIV_JSON_CONNECTION
58351 field_addr.name = "animal";
58352#endif /* FREECIV_JSON_CONNECTION */
58353 e = 0;
58354 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
58355 if (e) {
58356 log_packet_detailed("'animal' field error detected");
58357 }
58358 }
58359 if (BV_ISSET(fields, 27)) {
58360 log_packet_detailed(" field 'transform_result' has changed");
58361#ifdef FREECIV_JSON_CONNECTION
58362 field_addr.name = "transform_result";
58363#endif /* FREECIV_JSON_CONNECTION */
58364 e = 0;
58365 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
58366 if (e) {
58367 log_packet_detailed("'transform_result' field error detected");
58368 }
58369 }
58370 if (BV_ISSET(fields, 28)) {
58371 log_packet_detailed(" field 'transform_time' has changed");
58372#ifdef FREECIV_JSON_CONNECTION
58373 field_addr.name = "transform_time";
58374#endif /* FREECIV_JSON_CONNECTION */
58375 e = 0;
58376 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
58377 if (e) {
58378 log_packet_detailed("'transform_time' field error detected");
58379 }
58380 }
58381 if (BV_ISSET(fields, 29)) {
58382 log_packet_detailed(" field 'placing_time' has changed");
58383#ifdef FREECIV_JSON_CONNECTION
58384 field_addr.name = "placing_time";
58385#endif /* FREECIV_JSON_CONNECTION */
58386 e = 0;
58387 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
58388 if (e) {
58389 log_packet_detailed("'placing_time' field error detected");
58390 }
58391 }
58392 if (BV_ISSET(fields, 30)) {
58393 log_packet_detailed(" field 'pillage_time' has changed");
58394#ifdef FREECIV_JSON_CONNECTION
58395 field_addr.name = "pillage_time";
58396#endif /* FREECIV_JSON_CONNECTION */
58397 e = 0;
58398 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
58399 if (e) {
58400 log_packet_detailed("'pillage_time' field error detected");
58401 }
58402 }
58403 if (BV_ISSET(fields, 31)) {
58404 log_packet_detailed(" field 'extra_count' has changed");
58405#ifdef FREECIV_JSON_CONNECTION
58406 field_addr.name = "extra_count";
58407#endif /* FREECIV_JSON_CONNECTION */
58408 e = 0;
58409 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
58410 if (e) {
58411 log_packet_detailed("'extra_count' field error detected");
58412 }
58413 }
58414 if (BV_ISSET(fields, 32)) {
58415 log_packet_detailed(" field 'extra_removal_times' has changed");
58416#ifdef FREECIV_JSON_CONNECTION
58417 field_addr.name = "extra_removal_times";
58418#endif /* FREECIV_JSON_CONNECTION */
58419 e = 0;
58420 {
58421 int i;
58422
58423#ifdef FREECIV_JSON_CONNECTION
58424 /* Create the array. */
58425 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
58426
58427 /* Enter the array. */
58428 field_addr.sub_location = plocation_elem_new(0);
58429#endif /* FREECIV_JSON_CONNECTION */
58430
58431 for (i = 0; i < real_packet->extra_count; i++) {
58432#ifdef FREECIV_JSON_CONNECTION
58433 /* Next array element. */
58434 field_addr.sub_location->number = i;
58435#endif /* FREECIV_JSON_CONNECTION */
58436
58437 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
58438 }
58439
58440#ifdef FREECIV_JSON_CONNECTION
58441 /* Exit array. */
58442 FC_FREE(field_addr.sub_location);
58443#endif /* FREECIV_JSON_CONNECTION */
58444 }
58445 if (e) {
58446 log_packet_detailed("'extra_removal_times' field error detected");
58447 }
58448 }
58449 if (BV_ISSET(fields, 33)) {
58450 log_packet_detailed(" field 'color_red' has changed");
58451#ifdef FREECIV_JSON_CONNECTION
58452 field_addr.name = "color_red";
58453#endif /* FREECIV_JSON_CONNECTION */
58454 e = 0;
58455 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
58456 if (e) {
58457 log_packet_detailed("'color_red' field error detected");
58458 }
58459 }
58460 if (BV_ISSET(fields, 34)) {
58461 log_packet_detailed(" field 'color_green' has changed");
58462#ifdef FREECIV_JSON_CONNECTION
58463 field_addr.name = "color_green";
58464#endif /* FREECIV_JSON_CONNECTION */
58465 e = 0;
58466 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
58467 if (e) {
58468 log_packet_detailed("'color_green' field error detected");
58469 }
58470 }
58471 if (BV_ISSET(fields, 35)) {
58472 log_packet_detailed(" field 'color_blue' has changed");
58473#ifdef FREECIV_JSON_CONNECTION
58474 field_addr.name = "color_blue";
58475#endif /* FREECIV_JSON_CONNECTION */
58476 e = 0;
58477 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
58478 if (e) {
58479 log_packet_detailed("'color_blue' field error detected");
58480 }
58481 }
58482 if (BV_ISSET(fields, 36)) {
58483 log_packet_detailed(" field 'helptext' has changed");
58484#ifdef FREECIV_JSON_CONNECTION
58485 field_addr.name = "helptext";
58486#endif /* FREECIV_JSON_CONNECTION */
58487 e = 0;
58488 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
58489 if (e) {
58490 log_packet_detailed("'helptext' field error detected");
58491 }
58492 }
58493
58494 *old = *real_packet;
58495#endif /* FREECIV_DELTA_PROTOCOL */
58496#ifndef FREECIV_DELTA_PROTOCOL
58497#ifdef FREECIV_JSON_CONNECTION
58498 field_addr.name = "id";
58499#endif /* FREECIV_JSON_CONNECTION */
58500 e = 0;
58501 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
58502 if (e) {
58503 log_packet_detailed("'id' field error detected");
58504 }
58505#ifdef FREECIV_JSON_CONNECTION
58506 field_addr.name = "tclass";
58507#endif /* FREECIV_JSON_CONNECTION */
58508 e = 0;
58509 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
58510 if (e) {
58511 log_packet_detailed("'tclass' field error detected");
58512 }
58513#ifdef FREECIV_JSON_CONNECTION
58514 field_addr.name = "flags";
58515#endif /* FREECIV_JSON_CONNECTION */
58516 e = 0;
58517 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
58518 if (e) {
58519 log_packet_detailed("'flags' field error detected");
58520 }
58521#ifdef FREECIV_JSON_CONNECTION
58522 field_addr.name = "native_to";
58523#endif /* FREECIV_JSON_CONNECTION */
58524 e = 0;
58525 e |= DIO_BV_PUT(&dout, &field_addr, packet->native_to);
58526 if (e) {
58527 log_packet_detailed("'native_to' field error detected");
58528 }
58529#ifdef FREECIV_JSON_CONNECTION
58530 field_addr.name = "name";
58531#endif /* FREECIV_JSON_CONNECTION */
58532 e = 0;
58533 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
58534 if (e) {
58535 log_packet_detailed("'name' field error detected");
58536 }
58537#ifdef FREECIV_JSON_CONNECTION
58538 field_addr.name = "rule_name";
58539#endif /* FREECIV_JSON_CONNECTION */
58540 e = 0;
58541 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
58542 if (e) {
58543 log_packet_detailed("'rule_name' field error detected");
58544 }
58545#ifdef FREECIV_JSON_CONNECTION
58546 field_addr.name = "graphic_str";
58547#endif /* FREECIV_JSON_CONNECTION */
58548 e = 0;
58549 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
58550 if (e) {
58551 log_packet_detailed("'graphic_str' field error detected");
58552 }
58553#ifdef FREECIV_JSON_CONNECTION
58554 field_addr.name = "graphic_alt";
58555#endif /* FREECIV_JSON_CONNECTION */
58556 e = 0;
58557 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
58558 if (e) {
58559 log_packet_detailed("'graphic_alt' field error detected");
58560 }
58561#ifdef FREECIV_JSON_CONNECTION
58562 field_addr.name = "graphic_alt2";
58563#endif /* FREECIV_JSON_CONNECTION */
58564 e = 0;
58565 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
58566 if (e) {
58567 log_packet_detailed("'graphic_alt2' field error detected");
58568 }
58569#ifdef FREECIV_JSON_CONNECTION
58570 field_addr.name = "movement_cost";
58571#endif /* FREECIV_JSON_CONNECTION */
58572 e = 0;
58573 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
58574 if (e) {
58575 log_packet_detailed("'movement_cost' field error detected");
58576 }
58577#ifdef FREECIV_JSON_CONNECTION
58578 field_addr.name = "defense_bonus";
58579#endif /* FREECIV_JSON_CONNECTION */
58580 e = 0;
58581 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
58582 if (e) {
58583 log_packet_detailed("'defense_bonus' field error detected");
58584 }
58585#ifdef FREECIV_JSON_CONNECTION
58586 field_addr.name = "output";
58587#endif /* FREECIV_JSON_CONNECTION */
58588 e = 0;
58589 {
58590 int i;
58591
58592#ifdef FREECIV_JSON_CONNECTION
58593 /* Create the array. */
58594 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
58595
58596 /* Enter the array. */
58597 field_addr.sub_location = plocation_elem_new(0);
58598#endif /* FREECIV_JSON_CONNECTION */
58599
58600 for (i = 0; i < O_LAST; i++) {
58601#ifdef FREECIV_JSON_CONNECTION
58602 /* Next array element. */
58603 field_addr.sub_location->number = i;
58604#endif /* FREECIV_JSON_CONNECTION */
58605
58606 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
58607 }
58608
58609#ifdef FREECIV_JSON_CONNECTION
58610 /* Exit array. */
58611 FC_FREE(field_addr.sub_location);
58612#endif /* FREECIV_JSON_CONNECTION */
58613 }
58614 if (e) {
58615 log_packet_detailed("'output' field error detected");
58616 }
58617#ifdef FREECIV_JSON_CONNECTION
58618 field_addr.name = "num_resources";
58619#endif /* FREECIV_JSON_CONNECTION */
58620 e = 0;
58621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
58622 if (e) {
58623 log_packet_detailed("'num_resources' field error detected");
58624 }
58625#ifdef FREECIV_JSON_CONNECTION
58626 field_addr.name = "resources";
58627#endif /* FREECIV_JSON_CONNECTION */
58628 e = 0;
58629 {
58630 int i;
58631
58632#ifdef FREECIV_JSON_CONNECTION
58633 /* Create the array. */
58634 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
58635
58636 /* Enter the array. */
58637 field_addr.sub_location = plocation_elem_new(0);
58638#endif /* FREECIV_JSON_CONNECTION */
58639
58640 for (i = 0; i < real_packet->num_resources; i++) {
58641#ifdef FREECIV_JSON_CONNECTION
58642 /* Next array element. */
58643 field_addr.sub_location->number = i;
58644#endif /* FREECIV_JSON_CONNECTION */
58645
58646 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
58647 }
58648
58649#ifdef FREECIV_JSON_CONNECTION
58650 /* Exit array. */
58651 FC_FREE(field_addr.sub_location);
58652#endif /* FREECIV_JSON_CONNECTION */
58653 }
58654 if (e) {
58655 log_packet_detailed("'resources' field error detected");
58656 }
58657#ifdef FREECIV_JSON_CONNECTION
58658 field_addr.name = "resource_freq";
58659#endif /* FREECIV_JSON_CONNECTION */
58660 e = 0;
58661 {
58662 int i;
58663
58664#ifdef FREECIV_JSON_CONNECTION
58665 /* Create the array. */
58666 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
58667
58668 /* Enter the array. */
58669 field_addr.sub_location = plocation_elem_new(0);
58670#endif /* FREECIV_JSON_CONNECTION */
58671
58672 for (i = 0; i < real_packet->num_resources; i++) {
58673#ifdef FREECIV_JSON_CONNECTION
58674 /* Next array element. */
58675 field_addr.sub_location->number = i;
58676#endif /* FREECIV_JSON_CONNECTION */
58677
58678 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
58679 }
58680
58681#ifdef FREECIV_JSON_CONNECTION
58682 /* Exit array. */
58683 FC_FREE(field_addr.sub_location);
58684#endif /* FREECIV_JSON_CONNECTION */
58685 }
58686 if (e) {
58687 log_packet_detailed("'resource_freq' field error detected");
58688 }
58689#ifdef FREECIV_JSON_CONNECTION
58690 field_addr.name = "road_output_incr_pct";
58691#endif /* FREECIV_JSON_CONNECTION */
58692 e = 0;
58693 {
58694 int i;
58695
58696#ifdef FREECIV_JSON_CONNECTION
58697 /* Create the array. */
58698 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
58699
58700 /* Enter the array. */
58701 field_addr.sub_location = plocation_elem_new(0);
58702#endif /* FREECIV_JSON_CONNECTION */
58703
58704 for (i = 0; i < O_LAST; i++) {
58705#ifdef FREECIV_JSON_CONNECTION
58706 /* Next array element. */
58707 field_addr.sub_location->number = i;
58708#endif /* FREECIV_JSON_CONNECTION */
58709
58710 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
58711 }
58712
58713#ifdef FREECIV_JSON_CONNECTION
58714 /* Exit array. */
58715 FC_FREE(field_addr.sub_location);
58716#endif /* FREECIV_JSON_CONNECTION */
58717 }
58718 if (e) {
58719 log_packet_detailed("'road_output_incr_pct' field error detected");
58720 }
58721#ifdef FREECIV_JSON_CONNECTION
58722 field_addr.name = "base_time";
58723#endif /* FREECIV_JSON_CONNECTION */
58724 e = 0;
58725 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
58726 if (e) {
58727 log_packet_detailed("'base_time' field error detected");
58728 }
58729#ifdef FREECIV_JSON_CONNECTION
58730 field_addr.name = "road_time";
58731#endif /* FREECIV_JSON_CONNECTION */
58732 e = 0;
58733 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
58734 if (e) {
58735 log_packet_detailed("'road_time' field error detected");
58736 }
58737#ifdef FREECIV_JSON_CONNECTION
58738 field_addr.name = "cultivate_result";
58739#endif /* FREECIV_JSON_CONNECTION */
58740 e = 0;
58741 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
58742 if (e) {
58743 log_packet_detailed("'cultivate_result' field error detected");
58744 }
58745#ifdef FREECIV_JSON_CONNECTION
58746 field_addr.name = "cultivate_time";
58747#endif /* FREECIV_JSON_CONNECTION */
58748 e = 0;
58749 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
58750 if (e) {
58751 log_packet_detailed("'cultivate_time' field error detected");
58752 }
58753#ifdef FREECIV_JSON_CONNECTION
58754 field_addr.name = "plant_result";
58755#endif /* FREECIV_JSON_CONNECTION */
58756 e = 0;
58757 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
58758 if (e) {
58759 log_packet_detailed("'plant_result' field error detected");
58760 }
58761#ifdef FREECIV_JSON_CONNECTION
58762 field_addr.name = "plant_time";
58763#endif /* FREECIV_JSON_CONNECTION */
58764 e = 0;
58765 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
58766 if (e) {
58767 log_packet_detailed("'plant_time' field error detected");
58768 }
58769#ifdef FREECIV_JSON_CONNECTION
58770 field_addr.name = "irrigation_food_incr";
58771#endif /* FREECIV_JSON_CONNECTION */
58772 e = 0;
58773 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
58774 if (e) {
58775 log_packet_detailed("'irrigation_food_incr' field error detected");
58776 }
58777#ifdef FREECIV_JSON_CONNECTION
58778 field_addr.name = "irrigation_time";
58779#endif /* FREECIV_JSON_CONNECTION */
58780 e = 0;
58781 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
58782 if (e) {
58783 log_packet_detailed("'irrigation_time' field error detected");
58784 }
58785#ifdef FREECIV_JSON_CONNECTION
58786 field_addr.name = "mining_shield_incr";
58787#endif /* FREECIV_JSON_CONNECTION */
58788 e = 0;
58789 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
58790 if (e) {
58791 log_packet_detailed("'mining_shield_incr' field error detected");
58792 }
58793#ifdef FREECIV_JSON_CONNECTION
58794 field_addr.name = "mining_time";
58795#endif /* FREECIV_JSON_CONNECTION */
58796 e = 0;
58797 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
58798 if (e) {
58799 log_packet_detailed("'mining_time' field error detected");
58800 }
58801#ifdef FREECIV_JSON_CONNECTION
58802 field_addr.name = "animal";
58803#endif /* FREECIV_JSON_CONNECTION */
58804 e = 0;
58805 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
58806 if (e) {
58807 log_packet_detailed("'animal' field error detected");
58808 }
58809#ifdef FREECIV_JSON_CONNECTION
58810 field_addr.name = "transform_result";
58811#endif /* FREECIV_JSON_CONNECTION */
58812 e = 0;
58813 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
58814 if (e) {
58815 log_packet_detailed("'transform_result' field error detected");
58816 }
58817#ifdef FREECIV_JSON_CONNECTION
58818 field_addr.name = "transform_time";
58819#endif /* FREECIV_JSON_CONNECTION */
58820 e = 0;
58821 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
58822 if (e) {
58823 log_packet_detailed("'transform_time' field error detected");
58824 }
58825#ifdef FREECIV_JSON_CONNECTION
58826 field_addr.name = "placing_time";
58827#endif /* FREECIV_JSON_CONNECTION */
58828 e = 0;
58829 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
58830 if (e) {
58831 log_packet_detailed("'placing_time' field error detected");
58832 }
58833#ifdef FREECIV_JSON_CONNECTION
58834 field_addr.name = "pillage_time";
58835#endif /* FREECIV_JSON_CONNECTION */
58836 e = 0;
58837 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
58838 if (e) {
58839 log_packet_detailed("'pillage_time' field error detected");
58840 }
58841#ifdef FREECIV_JSON_CONNECTION
58842 field_addr.name = "extra_count";
58843#endif /* FREECIV_JSON_CONNECTION */
58844 e = 0;
58845 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
58846 if (e) {
58847 log_packet_detailed("'extra_count' field error detected");
58848 }
58849#ifdef FREECIV_JSON_CONNECTION
58850 field_addr.name = "extra_removal_times";
58851#endif /* FREECIV_JSON_CONNECTION */
58852 e = 0;
58853 {
58854 int i;
58855
58856#ifdef FREECIV_JSON_CONNECTION
58857 /* Create the array. */
58858 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
58859
58860 /* Enter the array. */
58861 field_addr.sub_location = plocation_elem_new(0);
58862#endif /* FREECIV_JSON_CONNECTION */
58863
58864 for (i = 0; i < real_packet->extra_count; i++) {
58865#ifdef FREECIV_JSON_CONNECTION
58866 /* Next array element. */
58867 field_addr.sub_location->number = i;
58868#endif /* FREECIV_JSON_CONNECTION */
58869
58870 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
58871 }
58872
58873#ifdef FREECIV_JSON_CONNECTION
58874 /* Exit array. */
58875 FC_FREE(field_addr.sub_location);
58876#endif /* FREECIV_JSON_CONNECTION */
58877 }
58878 if (e) {
58879 log_packet_detailed("'extra_removal_times' field error detected");
58880 }
58881#ifdef FREECIV_JSON_CONNECTION
58882 field_addr.name = "color_red";
58883#endif /* FREECIV_JSON_CONNECTION */
58884 e = 0;
58885 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
58886 if (e) {
58887 log_packet_detailed("'color_red' field error detected");
58888 }
58889#ifdef FREECIV_JSON_CONNECTION
58890 field_addr.name = "color_green";
58891#endif /* FREECIV_JSON_CONNECTION */
58892 e = 0;
58893 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
58894 if (e) {
58895 log_packet_detailed("'color_green' field error detected");
58896 }
58897#ifdef FREECIV_JSON_CONNECTION
58898 field_addr.name = "color_blue";
58899#endif /* FREECIV_JSON_CONNECTION */
58900 e = 0;
58901 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
58902 if (e) {
58903 log_packet_detailed("'color_blue' field error detected");
58904 }
58905#ifdef FREECIV_JSON_CONNECTION
58906 field_addr.name = "helptext";
58907#endif /* FREECIV_JSON_CONNECTION */
58908 e = 0;
58909 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
58910 if (e) {
58911 log_packet_detailed("'helptext' field error detected");
58912 }
58913
58914#endif
58916}
58917
58919{
58920 if (!pc->used) {
58921 log_error("WARNING: trying to send data to the closed connection %s",
58923 return -1;
58924 }
58925 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet != NULL, -1,
58926 "Handler for PACKET_RULESET_TERRAIN not installed");
58927 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet(pc, packet);
58928}
58929
58930void lsend_packet_ruleset_terrain(struct conn_list *dest, const struct packet_ruleset_terrain *packet)
58931{
58932 conn_list_iterate(dest, pconn) {
58935}
58936
58937#ifdef FREECIV_DELTA_PROTOCOL
58938#define hash_packet_ruleset_terrain_flag_100 hash_const
58939
58940#define cmp_packet_ruleset_terrain_flag_100 cmp_const
58941
58943#endif /* FREECIV_DELTA_PROTOCOL */
58944
58946{
58947#ifdef FREECIV_DELTA_PROTOCOL
58949 struct packet_ruleset_terrain_flag *old;
58950 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_FLAG;
58951#endif /* FREECIV_DELTA_PROTOCOL */
58953#ifdef FREECIV_JSON_CONNECTION
58954 struct plocation field_addr;
58955 {
58959 }
58960#endif /* FREECIV_JSON_CONNECTION */
58961
58962#ifdef FREECIV_DELTA_PROTOCOL
58963#ifdef FREECIV_JSON_CONNECTION
58964 field_addr.name = "fields";
58965#endif /* FREECIV_JSON_CONNECTION */
58966 DIO_BV_GET(&din, &field_addr, fields);
58967
58968#else /* FREECIV_DELTA_PROTOCOL */
58969#ifdef FREECIV_JSON_CONNECTION
58970 field_addr.name = "id";
58971#endif /* FREECIV_JSON_CONNECTION */
58972 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
58974 }
58975#ifdef FREECIV_JSON_CONNECTION
58976 field_addr.name = "name";
58977#endif /* FREECIV_JSON_CONNECTION */
58978 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
58980 }
58981#ifdef FREECIV_JSON_CONNECTION
58982 field_addr.name = "helptxt";
58983#endif /* FREECIV_JSON_CONNECTION */
58984 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
58986 }
58987#endif
58988 log_packet_detailed("packet_ruleset_terrain_flag_100: got info about ()");
58989
58990#ifdef FREECIV_DELTA_PROTOCOL
58991 if (NULL == *hash) {
58993 NULL, NULL, NULL, free);
58994 }
58995
58996 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
58997 *real_packet = *old;
58998 } else {
58999 log_packet_detailed(" no old info");
59000 memset(real_packet, 0, sizeof(*real_packet));
59001 }
59002
59003 if (BV_ISSET(fields, 0)) {
59004 log_packet_detailed(" got field 'id'");
59005#ifdef FREECIV_JSON_CONNECTION
59006 field_addr.name = "id";
59007#endif /* FREECIV_JSON_CONNECTION */
59008 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
59010 }
59011 }
59012 if (BV_ISSET(fields, 1)) {
59013 log_packet_detailed(" got field 'name'");
59014#ifdef FREECIV_JSON_CONNECTION
59015 field_addr.name = "name";
59016#endif /* FREECIV_JSON_CONNECTION */
59017 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
59019 }
59020 }
59021 if (BV_ISSET(fields, 2)) {
59022 log_packet_detailed(" got field 'helptxt'");
59023#ifdef FREECIV_JSON_CONNECTION
59024 field_addr.name = "helptxt";
59025#endif /* FREECIV_JSON_CONNECTION */
59026 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
59028 }
59029 }
59030
59031 if (NULL == old) {
59032 old = fc_malloc(sizeof(*old));
59033 *old = *real_packet;
59034 genhash_insert(*hash, old, old);
59035 } else {
59036 *old = *real_packet;
59037 }
59038
59039#endif /* FREECIV_DELTA_PROTOCOL */
59041}
59042
59044{
59045 const struct packet_ruleset_terrain_flag *real_packet = packet;
59046 int e;
59047#ifdef FREECIV_DELTA_PROTOCOL
59049 struct packet_ruleset_terrain_flag *old;
59050 bool differ;
59051 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_FLAG;
59052#endif /* FREECIV_DELTA_PROTOCOL */
59054#ifdef FREECIV_JSON_CONNECTION
59055 struct plocation field_addr;
59056 {
59060 }
59061#endif /* FREECIV_JSON_CONNECTION */
59062
59063 log_packet_detailed("packet_ruleset_terrain_flag_100: sending info about ()");
59064
59065#ifdef FREECIV_DELTA_PROTOCOL
59066 if (NULL == *hash) {
59068 NULL, NULL, NULL, free);
59069 }
59070 BV_CLR_ALL(fields);
59071
59072 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
59073 old = fc_malloc(sizeof(*old));
59074 *old = *real_packet;
59075 genhash_insert(*hash, old, old);
59076 memset(old, 0, sizeof(*old));
59077 }
59078 differ = (old->id != real_packet->id);
59079 if (differ) {
59080 BV_SET(fields, 0);
59081 }
59082
59083 differ = (strcmp(old->name, real_packet->name) != 0);
59084 if (differ) {
59085 BV_SET(fields, 1);
59086 }
59087
59088 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
59089 if (differ) {
59090 BV_SET(fields, 2);
59091 }
59092
59093
59094#ifdef FREECIV_JSON_CONNECTION
59095 field_addr.name = "fields";
59096#endif /* FREECIV_JSON_CONNECTION */
59097 e = 0;
59098 e |= DIO_BV_PUT(&dout, &field_addr, fields);
59099 if (e) {
59100 log_packet_detailed("fields bitvector error detected");
59101 }
59102
59103 if (BV_ISSET(fields, 0)) {
59104 log_packet_detailed(" field 'id' has changed");
59105#ifdef FREECIV_JSON_CONNECTION
59106 field_addr.name = "id";
59107#endif /* FREECIV_JSON_CONNECTION */
59108 e = 0;
59109 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
59110 if (e) {
59111 log_packet_detailed("'id' field error detected");
59112 }
59113 }
59114 if (BV_ISSET(fields, 1)) {
59115 log_packet_detailed(" field 'name' has changed");
59116#ifdef FREECIV_JSON_CONNECTION
59117 field_addr.name = "name";
59118#endif /* FREECIV_JSON_CONNECTION */
59119 e = 0;
59120 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
59121 if (e) {
59122 log_packet_detailed("'name' field error detected");
59123 }
59124 }
59125 if (BV_ISSET(fields, 2)) {
59126 log_packet_detailed(" field 'helptxt' has changed");
59127#ifdef FREECIV_JSON_CONNECTION
59128 field_addr.name = "helptxt";
59129#endif /* FREECIV_JSON_CONNECTION */
59130 e = 0;
59131 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
59132 if (e) {
59133 log_packet_detailed("'helptxt' field error detected");
59134 }
59135 }
59136
59137 *old = *real_packet;
59138#endif /* FREECIV_DELTA_PROTOCOL */
59139#ifndef FREECIV_DELTA_PROTOCOL
59140#ifdef FREECIV_JSON_CONNECTION
59141 field_addr.name = "id";
59142#endif /* FREECIV_JSON_CONNECTION */
59143 e = 0;
59144 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
59145 if (e) {
59146 log_packet_detailed("'id' field error detected");
59147 }
59148#ifdef FREECIV_JSON_CONNECTION
59149 field_addr.name = "name";
59150#endif /* FREECIV_JSON_CONNECTION */
59151 e = 0;
59152 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
59153 if (e) {
59154 log_packet_detailed("'name' field error detected");
59155 }
59156#ifdef FREECIV_JSON_CONNECTION
59157 field_addr.name = "helptxt";
59158#endif /* FREECIV_JSON_CONNECTION */
59159 e = 0;
59160 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
59161 if (e) {
59162 log_packet_detailed("'helptxt' field error detected");
59163 }
59164
59165#endif
59167}
59168
59170{
59171 if (!pc->used) {
59172 log_error("WARNING: trying to send data to the closed connection %s",
59174 return -1;
59175 }
59176 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet != NULL, -1,
59177 "Handler for PACKET_RULESET_TERRAIN_FLAG not installed");
59178 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet(pc, packet);
59179}
59180
59182{
59183 conn_list_iterate(dest, pconn) {
59186}
59187
59188#ifdef FREECIV_DELTA_PROTOCOL
59189#define hash_packet_ruleset_unit_class_100 hash_const
59190
59191#define cmp_packet_ruleset_unit_class_100 cmp_const
59192
59194#endif /* FREECIV_DELTA_PROTOCOL */
59195
59197{
59198#ifdef FREECIV_DELTA_PROTOCOL
59200 struct packet_ruleset_unit_class *old;
59201 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS;
59202#endif /* FREECIV_DELTA_PROTOCOL */
59204#ifdef FREECIV_JSON_CONNECTION
59205 struct plocation field_addr;
59206 {
59210 }
59211#endif /* FREECIV_JSON_CONNECTION */
59212
59213#ifdef FREECIV_DELTA_PROTOCOL
59214#ifdef FREECIV_JSON_CONNECTION
59215 field_addr.name = "fields";
59216#endif /* FREECIV_JSON_CONNECTION */
59217 DIO_BV_GET(&din, &field_addr, fields);
59218
59219#else /* FREECIV_DELTA_PROTOCOL */
59220#ifdef FREECIV_JSON_CONNECTION
59221 field_addr.name = "id";
59222#endif /* FREECIV_JSON_CONNECTION */
59223 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
59225 }
59226#ifdef FREECIV_JSON_CONNECTION
59227 field_addr.name = "name";
59228#endif /* FREECIV_JSON_CONNECTION */
59229 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
59231 }
59232#ifdef FREECIV_JSON_CONNECTION
59233 field_addr.name = "rule_name";
59234#endif /* FREECIV_JSON_CONNECTION */
59235 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
59236 RECEIVE_PACKET_FIELD_ERROR(rule_name);
59237 }
59238#ifdef FREECIV_JSON_CONNECTION
59239 field_addr.name = "min_speed";
59240#endif /* FREECIV_JSON_CONNECTION */
59241 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
59242 RECEIVE_PACKET_FIELD_ERROR(min_speed);
59243 }
59244#ifdef FREECIV_JSON_CONNECTION
59245 field_addr.name = "hp_loss_pct";
59246#endif /* FREECIV_JSON_CONNECTION */
59247 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
59248 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
59249 }
59250#ifdef FREECIV_JSON_CONNECTION
59251 field_addr.name = "non_native_def_pct";
59252#endif /* FREECIV_JSON_CONNECTION */
59253 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
59254 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
59255 }
59256#ifdef FREECIV_JSON_CONNECTION
59257 field_addr.name = "flags";
59258#endif /* FREECIV_JSON_CONNECTION */
59259 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
59261 }
59262#ifdef FREECIV_JSON_CONNECTION
59263 field_addr.name = "helptext";
59264#endif /* FREECIV_JSON_CONNECTION */
59265 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
59267 }
59268#endif
59269 log_packet_detailed("packet_ruleset_unit_class_100: got info about ()");
59270
59271#ifdef FREECIV_DELTA_PROTOCOL
59272 if (NULL == *hash) {
59274 NULL, NULL, NULL, free);
59275 }
59276
59277 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
59278 *real_packet = *old;
59279 } else {
59280 log_packet_detailed(" no old info");
59281 memset(real_packet, 0, sizeof(*real_packet));
59282 }
59283
59284 if (BV_ISSET(fields, 0)) {
59285 log_packet_detailed(" got field 'id'");
59286#ifdef FREECIV_JSON_CONNECTION
59287 field_addr.name = "id";
59288#endif /* FREECIV_JSON_CONNECTION */
59289 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
59291 }
59292 }
59293 if (BV_ISSET(fields, 1)) {
59294 log_packet_detailed(" got field 'name'");
59295#ifdef FREECIV_JSON_CONNECTION
59296 field_addr.name = "name";
59297#endif /* FREECIV_JSON_CONNECTION */
59298 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
59300 }
59301 }
59302 if (BV_ISSET(fields, 2)) {
59303 log_packet_detailed(" got field 'rule_name'");
59304#ifdef FREECIV_JSON_CONNECTION
59305 field_addr.name = "rule_name";
59306#endif /* FREECIV_JSON_CONNECTION */
59307 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
59308 RECEIVE_PACKET_FIELD_ERROR(rule_name);
59309 }
59310 }
59311 if (BV_ISSET(fields, 3)) {
59312 log_packet_detailed(" got field 'min_speed'");
59313#ifdef FREECIV_JSON_CONNECTION
59314 field_addr.name = "min_speed";
59315#endif /* FREECIV_JSON_CONNECTION */
59316 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
59317 RECEIVE_PACKET_FIELD_ERROR(min_speed);
59318 }
59319 }
59320 if (BV_ISSET(fields, 4)) {
59321 log_packet_detailed(" got field 'hp_loss_pct'");
59322#ifdef FREECIV_JSON_CONNECTION
59323 field_addr.name = "hp_loss_pct";
59324#endif /* FREECIV_JSON_CONNECTION */
59325 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
59326 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
59327 }
59328 }
59329 if (BV_ISSET(fields, 5)) {
59330 log_packet_detailed(" got field 'non_native_def_pct'");
59331#ifdef FREECIV_JSON_CONNECTION
59332 field_addr.name = "non_native_def_pct";
59333#endif /* FREECIV_JSON_CONNECTION */
59334 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
59335 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
59336 }
59337 }
59338 if (BV_ISSET(fields, 6)) {
59339 log_packet_detailed(" got field 'flags'");
59340#ifdef FREECIV_JSON_CONNECTION
59341 field_addr.name = "flags";
59342#endif /* FREECIV_JSON_CONNECTION */
59343 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
59345 }
59346 }
59347 if (BV_ISSET(fields, 7)) {
59348 log_packet_detailed(" got field 'helptext'");
59349#ifdef FREECIV_JSON_CONNECTION
59350 field_addr.name = "helptext";
59351#endif /* FREECIV_JSON_CONNECTION */
59352 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
59354 }
59355 }
59356
59357 if (NULL == old) {
59358 old = fc_malloc(sizeof(*old));
59359 *old = *real_packet;
59360 genhash_insert(*hash, old, old);
59361 } else {
59362 *old = *real_packet;
59363 }
59364
59365#endif /* FREECIV_DELTA_PROTOCOL */
59367}
59368
59370{
59371 const struct packet_ruleset_unit_class *real_packet = packet;
59372 int e;
59373#ifdef FREECIV_DELTA_PROTOCOL
59375 struct packet_ruleset_unit_class *old;
59376 bool differ;
59377 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS;
59378#endif /* FREECIV_DELTA_PROTOCOL */
59380#ifdef FREECIV_JSON_CONNECTION
59381 struct plocation field_addr;
59382 {
59386 }
59387#endif /* FREECIV_JSON_CONNECTION */
59388
59389 log_packet_detailed("packet_ruleset_unit_class_100: sending info about ()");
59390
59391#ifdef FREECIV_DELTA_PROTOCOL
59392 if (NULL == *hash) {
59394 NULL, NULL, NULL, free);
59395 }
59396 BV_CLR_ALL(fields);
59397
59398 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
59399 old = fc_malloc(sizeof(*old));
59400 *old = *real_packet;
59401 genhash_insert(*hash, old, old);
59402 memset(old, 0, sizeof(*old));
59403 }
59404 differ = (old->id != real_packet->id);
59405 if (differ) {
59406 BV_SET(fields, 0);
59407 }
59408
59409 differ = (strcmp(old->name, real_packet->name) != 0);
59410 if (differ) {
59411 BV_SET(fields, 1);
59412 }
59413
59414 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
59415 if (differ) {
59416 BV_SET(fields, 2);
59417 }
59418
59419 differ = (old->min_speed != real_packet->min_speed);
59420 if (differ) {
59421 BV_SET(fields, 3);
59422 }
59423
59424 differ = (old->hp_loss_pct != real_packet->hp_loss_pct);
59425 if (differ) {
59426 BV_SET(fields, 4);
59427 }
59428
59429 differ = (old->non_native_def_pct != real_packet->non_native_def_pct);
59430 if (differ) {
59431 BV_SET(fields, 5);
59432 }
59433
59434 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
59435 if (differ) {
59436 BV_SET(fields, 6);
59437 }
59438
59439 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
59440 if (differ) {
59441 BV_SET(fields, 7);
59442 }
59443
59444
59445#ifdef FREECIV_JSON_CONNECTION
59446 field_addr.name = "fields";
59447#endif /* FREECIV_JSON_CONNECTION */
59448 e = 0;
59449 e |= DIO_BV_PUT(&dout, &field_addr, fields);
59450 if (e) {
59451 log_packet_detailed("fields bitvector error detected");
59452 }
59453
59454 if (BV_ISSET(fields, 0)) {
59455 log_packet_detailed(" field 'id' has changed");
59456#ifdef FREECIV_JSON_CONNECTION
59457 field_addr.name = "id";
59458#endif /* FREECIV_JSON_CONNECTION */
59459 e = 0;
59460 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
59461 if (e) {
59462 log_packet_detailed("'id' field error detected");
59463 }
59464 }
59465 if (BV_ISSET(fields, 1)) {
59466 log_packet_detailed(" field 'name' has changed");
59467#ifdef FREECIV_JSON_CONNECTION
59468 field_addr.name = "name";
59469#endif /* FREECIV_JSON_CONNECTION */
59470 e = 0;
59471 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
59472 if (e) {
59473 log_packet_detailed("'name' field error detected");
59474 }
59475 }
59476 if (BV_ISSET(fields, 2)) {
59477 log_packet_detailed(" field 'rule_name' has changed");
59478#ifdef FREECIV_JSON_CONNECTION
59479 field_addr.name = "rule_name";
59480#endif /* FREECIV_JSON_CONNECTION */
59481 e = 0;
59482 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
59483 if (e) {
59484 log_packet_detailed("'rule_name' field error detected");
59485 }
59486 }
59487 if (BV_ISSET(fields, 3)) {
59488 log_packet_detailed(" field 'min_speed' has changed");
59489#ifdef FREECIV_JSON_CONNECTION
59490 field_addr.name = "min_speed";
59491#endif /* FREECIV_JSON_CONNECTION */
59492 e = 0;
59493 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
59494 if (e) {
59495 log_packet_detailed("'min_speed' field error detected");
59496 }
59497 }
59498 if (BV_ISSET(fields, 4)) {
59499 log_packet_detailed(" field 'hp_loss_pct' has changed");
59500#ifdef FREECIV_JSON_CONNECTION
59501 field_addr.name = "hp_loss_pct";
59502#endif /* FREECIV_JSON_CONNECTION */
59503 e = 0;
59504 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
59505 if (e) {
59506 log_packet_detailed("'hp_loss_pct' field error detected");
59507 }
59508 }
59509 if (BV_ISSET(fields, 5)) {
59510 log_packet_detailed(" field 'non_native_def_pct' has changed");
59511#ifdef FREECIV_JSON_CONNECTION
59512 field_addr.name = "non_native_def_pct";
59513#endif /* FREECIV_JSON_CONNECTION */
59514 e = 0;
59515 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
59516 if (e) {
59517 log_packet_detailed("'non_native_def_pct' field error detected");
59518 }
59519 }
59520 if (BV_ISSET(fields, 6)) {
59521 log_packet_detailed(" field 'flags' has changed");
59522#ifdef FREECIV_JSON_CONNECTION
59523 field_addr.name = "flags";
59524#endif /* FREECIV_JSON_CONNECTION */
59525 e = 0;
59526 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
59527 if (e) {
59528 log_packet_detailed("'flags' field error detected");
59529 }
59530 }
59531 if (BV_ISSET(fields, 7)) {
59532 log_packet_detailed(" field 'helptext' has changed");
59533#ifdef FREECIV_JSON_CONNECTION
59534 field_addr.name = "helptext";
59535#endif /* FREECIV_JSON_CONNECTION */
59536 e = 0;
59537 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
59538 if (e) {
59539 log_packet_detailed("'helptext' field error detected");
59540 }
59541 }
59542
59543 *old = *real_packet;
59544#endif /* FREECIV_DELTA_PROTOCOL */
59545#ifndef FREECIV_DELTA_PROTOCOL
59546#ifdef FREECIV_JSON_CONNECTION
59547 field_addr.name = "id";
59548#endif /* FREECIV_JSON_CONNECTION */
59549 e = 0;
59550 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
59551 if (e) {
59552 log_packet_detailed("'id' field error detected");
59553 }
59554#ifdef FREECIV_JSON_CONNECTION
59555 field_addr.name = "name";
59556#endif /* FREECIV_JSON_CONNECTION */
59557 e = 0;
59558 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
59559 if (e) {
59560 log_packet_detailed("'name' field error detected");
59561 }
59562#ifdef FREECIV_JSON_CONNECTION
59563 field_addr.name = "rule_name";
59564#endif /* FREECIV_JSON_CONNECTION */
59565 e = 0;
59566 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
59567 if (e) {
59568 log_packet_detailed("'rule_name' field error detected");
59569 }
59570#ifdef FREECIV_JSON_CONNECTION
59571 field_addr.name = "min_speed";
59572#endif /* FREECIV_JSON_CONNECTION */
59573 e = 0;
59574 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
59575 if (e) {
59576 log_packet_detailed("'min_speed' field error detected");
59577 }
59578#ifdef FREECIV_JSON_CONNECTION
59579 field_addr.name = "hp_loss_pct";
59580#endif /* FREECIV_JSON_CONNECTION */
59581 e = 0;
59582 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
59583 if (e) {
59584 log_packet_detailed("'hp_loss_pct' field error detected");
59585 }
59586#ifdef FREECIV_JSON_CONNECTION
59587 field_addr.name = "non_native_def_pct";
59588#endif /* FREECIV_JSON_CONNECTION */
59589 e = 0;
59590 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
59591 if (e) {
59592 log_packet_detailed("'non_native_def_pct' field error detected");
59593 }
59594#ifdef FREECIV_JSON_CONNECTION
59595 field_addr.name = "flags";
59596#endif /* FREECIV_JSON_CONNECTION */
59597 e = 0;
59598 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
59599 if (e) {
59600 log_packet_detailed("'flags' field error detected");
59601 }
59602#ifdef FREECIV_JSON_CONNECTION
59603 field_addr.name = "helptext";
59604#endif /* FREECIV_JSON_CONNECTION */
59605 e = 0;
59606 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
59607 if (e) {
59608 log_packet_detailed("'helptext' field error detected");
59609 }
59610
59611#endif
59613}
59614
59616{
59617 if (!pc->used) {
59618 log_error("WARNING: trying to send data to the closed connection %s",
59620 return -1;
59621 }
59622 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet != NULL, -1,
59623 "Handler for PACKET_RULESET_UNIT_CLASS not installed");
59624 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet(pc, packet);
59625}
59626
59628{
59629 conn_list_iterate(dest, pconn) {
59632}
59633
59634#ifdef FREECIV_DELTA_PROTOCOL
59635#define hash_packet_ruleset_extra_100 hash_const
59636
59637#define cmp_packet_ruleset_extra_100 cmp_const
59638
59640#endif /* FREECIV_DELTA_PROTOCOL */
59641
59643{
59644#ifdef FREECIV_DELTA_PROTOCOL
59646 struct packet_ruleset_extra *old;
59647 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA;
59648#endif /* FREECIV_DELTA_PROTOCOL */
59650#ifdef FREECIV_JSON_CONNECTION
59651 struct plocation field_addr;
59652 {
59656 }
59657#endif /* FREECIV_JSON_CONNECTION */
59658
59659#ifdef FREECIV_DELTA_PROTOCOL
59660#ifdef FREECIV_JSON_CONNECTION
59661 field_addr.name = "fields";
59662#endif /* FREECIV_JSON_CONNECTION */
59663 DIO_BV_GET(&din, &field_addr, fields);
59664
59665#else /* FREECIV_DELTA_PROTOCOL */
59666#ifdef FREECIV_JSON_CONNECTION
59667 field_addr.name = "id";
59668#endif /* FREECIV_JSON_CONNECTION */
59669 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
59671 }
59672#ifdef FREECIV_JSON_CONNECTION
59673 field_addr.name = "name";
59674#endif /* FREECIV_JSON_CONNECTION */
59675 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
59677 }
59678#ifdef FREECIV_JSON_CONNECTION
59679 field_addr.name = "rule_name";
59680#endif /* FREECIV_JSON_CONNECTION */
59681 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
59682 RECEIVE_PACKET_FIELD_ERROR(rule_name);
59683 }
59684#ifdef FREECIV_JSON_CONNECTION
59685 field_addr.name = "category";
59686#endif /* FREECIV_JSON_CONNECTION */
59687 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
59689 }
59690#ifdef FREECIV_JSON_CONNECTION
59691 field_addr.name = "causes";
59692#endif /* FREECIV_JSON_CONNECTION */
59693 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
59695 }
59696#ifdef FREECIV_JSON_CONNECTION
59697 field_addr.name = "rmcauses";
59698#endif /* FREECIV_JSON_CONNECTION */
59699 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
59701 }
59702#ifdef FREECIV_JSON_CONNECTION
59703 field_addr.name = "activity_gfx";
59704#endif /* FREECIV_JSON_CONNECTION */
59705 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
59706 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
59707 }
59708#ifdef FREECIV_JSON_CONNECTION
59709 field_addr.name = "act_gfx_alt";
59710#endif /* FREECIV_JSON_CONNECTION */
59711 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
59712 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
59713 }
59714#ifdef FREECIV_JSON_CONNECTION
59715 field_addr.name = "act_gfx_alt2";
59716#endif /* FREECIV_JSON_CONNECTION */
59717 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
59718 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
59719 }
59720#ifdef FREECIV_JSON_CONNECTION
59721 field_addr.name = "rmact_gfx";
59722#endif /* FREECIV_JSON_CONNECTION */
59723 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
59724 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
59725 }
59726#ifdef FREECIV_JSON_CONNECTION
59727 field_addr.name = "rmact_gfx_alt";
59728#endif /* FREECIV_JSON_CONNECTION */
59729 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
59730 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
59731 }
59732#ifdef FREECIV_JSON_CONNECTION
59733 field_addr.name = "rmact_gfx_alt2";
59734#endif /* FREECIV_JSON_CONNECTION */
59735 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
59736 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
59737 }
59738#ifdef FREECIV_JSON_CONNECTION
59739 field_addr.name = "graphic_str";
59740#endif /* FREECIV_JSON_CONNECTION */
59741 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
59742 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
59743 }
59744#ifdef FREECIV_JSON_CONNECTION
59745 field_addr.name = "graphic_alt";
59746#endif /* FREECIV_JSON_CONNECTION */
59747 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
59748 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
59749 }
59750#ifdef FREECIV_JSON_CONNECTION
59751 field_addr.name = "reqs_count";
59752#endif /* FREECIV_JSON_CONNECTION */
59753 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
59754 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
59755 }
59756#ifdef FREECIV_JSON_CONNECTION
59757 field_addr.name = "reqs";
59758#endif /* FREECIV_JSON_CONNECTION */
59759 if (real_packet->reqs_count > MAX_NUM_REQS) {
59760 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
59761 }
59762 {
59763 int i;
59764
59765#ifdef FREECIV_JSON_CONNECTION
59766 /* Enter array. */
59767 field_addr.sub_location = plocation_elem_new(0);
59768#endif /* FREECIV_JSON_CONNECTION */
59769
59770 for (i = 0; i < real_packet->reqs_count; i++) {
59771#ifdef FREECIV_JSON_CONNECTION
59772 field_addr.sub_location->number = i;
59773#endif /* FREECIV_JSON_CONNECTION */
59774
59775 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
59777 }
59778 }
59779
59780#ifdef FREECIV_JSON_CONNECTION
59781 /* Exit array. */
59782 FC_FREE(field_addr.sub_location);
59783#endif /* FREECIV_JSON_CONNECTION */
59784 }
59785#ifdef FREECIV_JSON_CONNECTION
59786 field_addr.name = "rmreqs_count";
59787#endif /* FREECIV_JSON_CONNECTION */
59788 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rmreqs_count)) {
59789 RECEIVE_PACKET_FIELD_ERROR(rmreqs_count);
59790 }
59791#ifdef FREECIV_JSON_CONNECTION
59792 field_addr.name = "rmreqs";
59793#endif /* FREECIV_JSON_CONNECTION */
59794 if (real_packet->rmreqs_count > MAX_NUM_REQS) {
59795 RECEIVE_PACKET_FIELD_ERROR(rmreqs, ": truncation array");
59796 }
59797 {
59798 int i;
59799
59800#ifdef FREECIV_JSON_CONNECTION
59801 /* Enter array. */
59802 field_addr.sub_location = plocation_elem_new(0);
59803#endif /* FREECIV_JSON_CONNECTION */
59804
59805 for (i = 0; i < real_packet->rmreqs_count; i++) {
59806#ifdef FREECIV_JSON_CONNECTION
59807 field_addr.sub_location->number = i;
59808#endif /* FREECIV_JSON_CONNECTION */
59809
59810 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs[i])) {
59812 }
59813 }
59814
59815#ifdef FREECIV_JSON_CONNECTION
59816 /* Exit array. */
59817 FC_FREE(field_addr.sub_location);
59818#endif /* FREECIV_JSON_CONNECTION */
59819 }
59820#ifdef FREECIV_JSON_CONNECTION
59821 field_addr.name = "appearance_chance";
59822#endif /* FREECIV_JSON_CONNECTION */
59823 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
59824 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
59825 }
59826#ifdef FREECIV_JSON_CONNECTION
59827 field_addr.name = "appearance_reqs_count";
59828#endif /* FREECIV_JSON_CONNECTION */
59829 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->appearance_reqs_count)) {
59830 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs_count);
59831 }
59832#ifdef FREECIV_JSON_CONNECTION
59833 field_addr.name = "appearance_reqs";
59834#endif /* FREECIV_JSON_CONNECTION */
59835 if (real_packet->appearance_reqs_count > MAX_NUM_REQS) {
59836 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs, ": truncation array");
59837 }
59838 {
59839 int i;
59840
59841#ifdef FREECIV_JSON_CONNECTION
59842 /* Enter array. */
59843 field_addr.sub_location = plocation_elem_new(0);
59844#endif /* FREECIV_JSON_CONNECTION */
59845
59846 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
59847#ifdef FREECIV_JSON_CONNECTION
59848 field_addr.sub_location->number = i;
59849#endif /* FREECIV_JSON_CONNECTION */
59850
59851 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs[i])) {
59852 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
59853 }
59854 }
59855
59856#ifdef FREECIV_JSON_CONNECTION
59857 /* Exit array. */
59858 FC_FREE(field_addr.sub_location);
59859#endif /* FREECIV_JSON_CONNECTION */
59860 }
59861#ifdef FREECIV_JSON_CONNECTION
59862 field_addr.name = "disappearance_chance";
59863#endif /* FREECIV_JSON_CONNECTION */
59864 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
59865 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
59866 }
59867#ifdef FREECIV_JSON_CONNECTION
59868 field_addr.name = "disappearance_reqs_count";
59869#endif /* FREECIV_JSON_CONNECTION */
59870 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->disappearance_reqs_count)) {
59871 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs_count);
59872 }
59873#ifdef FREECIV_JSON_CONNECTION
59874 field_addr.name = "disappearance_reqs";
59875#endif /* FREECIV_JSON_CONNECTION */
59876 if (real_packet->disappearance_reqs_count > MAX_NUM_REQS) {
59877 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs, ": truncation array");
59878 }
59879 {
59880 int i;
59881
59882#ifdef FREECIV_JSON_CONNECTION
59883 /* Enter array. */
59884 field_addr.sub_location = plocation_elem_new(0);
59885#endif /* FREECIV_JSON_CONNECTION */
59886
59887 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
59888#ifdef FREECIV_JSON_CONNECTION
59889 field_addr.sub_location->number = i;
59890#endif /* FREECIV_JSON_CONNECTION */
59891
59892 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs[i])) {
59893 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
59894 }
59895 }
59896
59897#ifdef FREECIV_JSON_CONNECTION
59898 /* Exit array. */
59899 FC_FREE(field_addr.sub_location);
59900#endif /* FREECIV_JSON_CONNECTION */
59901 }
59902#ifdef FREECIV_JSON_CONNECTION
59903 field_addr.name = "visibility_req";
59904#endif /* FREECIV_JSON_CONNECTION */
59905 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
59906 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
59907 }
59908#ifdef FREECIV_JSON_CONNECTION
59909 field_addr.name = "buildable";
59910#endif /* FREECIV_JSON_CONNECTION */
59911 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->buildable)) {
59912 RECEIVE_PACKET_FIELD_ERROR(buildable);
59913 }
59914#ifdef FREECIV_JSON_CONNECTION
59915 field_addr.name = "generated";
59916#endif /* FREECIV_JSON_CONNECTION */
59917 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->generated)) {
59918 RECEIVE_PACKET_FIELD_ERROR(generated);
59919 }
59920#ifdef FREECIV_JSON_CONNECTION
59921 field_addr.name = "build_time";
59922#endif /* FREECIV_JSON_CONNECTION */
59923 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
59924 RECEIVE_PACKET_FIELD_ERROR(build_time);
59925 }
59926#ifdef FREECIV_JSON_CONNECTION
59927 field_addr.name = "build_time_factor";
59928#endif /* FREECIV_JSON_CONNECTION */
59929 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
59930 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
59931 }
59932#ifdef FREECIV_JSON_CONNECTION
59933 field_addr.name = "removal_time";
59934#endif /* FREECIV_JSON_CONNECTION */
59935 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
59936 RECEIVE_PACKET_FIELD_ERROR(removal_time);
59937 }
59938#ifdef FREECIV_JSON_CONNECTION
59939 field_addr.name = "removal_time_factor";
59940#endif /* FREECIV_JSON_CONNECTION */
59941 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
59942 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
59943 }
59944#ifdef FREECIV_JSON_CONNECTION
59945 field_addr.name = "infracost";
59946#endif /* FREECIV_JSON_CONNECTION */
59947 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
59948 RECEIVE_PACKET_FIELD_ERROR(infracost);
59949 }
59950#ifdef FREECIV_JSON_CONNECTION
59951 field_addr.name = "defense_bonus";
59952#endif /* FREECIV_JSON_CONNECTION */
59953 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
59954 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
59955 }
59956#ifdef FREECIV_JSON_CONNECTION
59957 field_addr.name = "eus";
59958#endif /* FREECIV_JSON_CONNECTION */
59959 {
59960 int readin;
59961
59962 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
59964 }
59965 real_packet->eus = readin;
59966 }
59967#ifdef FREECIV_JSON_CONNECTION
59968 field_addr.name = "native_to";
59969#endif /* FREECIV_JSON_CONNECTION */
59970 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
59971 RECEIVE_PACKET_FIELD_ERROR(native_to);
59972 }
59973#ifdef FREECIV_JSON_CONNECTION
59974 field_addr.name = "flags";
59975#endif /* FREECIV_JSON_CONNECTION */
59976 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
59978 }
59979#ifdef FREECIV_JSON_CONNECTION
59980 field_addr.name = "hidden_by";
59981#endif /* FREECIV_JSON_CONNECTION */
59982 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
59983 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
59984 }
59985#ifdef FREECIV_JSON_CONNECTION
59986 field_addr.name = "bridged_over";
59987#endif /* FREECIV_JSON_CONNECTION */
59988 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
59989 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
59990 }
59991#ifdef FREECIV_JSON_CONNECTION
59992 field_addr.name = "conflicts";
59993#endif /* FREECIV_JSON_CONNECTION */
59994 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
59995 RECEIVE_PACKET_FIELD_ERROR(conflicts);
59996 }
59997#ifdef FREECIV_JSON_CONNECTION
59998 field_addr.name = "no_aggr_near_city";
59999#endif /* FREECIV_JSON_CONNECTION */
60000 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
60001 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
60002 }
60003#ifdef FREECIV_JSON_CONNECTION
60004 field_addr.name = "helptext";
60005#endif /* FREECIV_JSON_CONNECTION */
60006 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
60008 }
60009#endif
60010 log_packet_detailed("packet_ruleset_extra_100: got info about ()");
60011
60012#ifdef FREECIV_DELTA_PROTOCOL
60013 if (NULL == *hash) {
60015 NULL, NULL, NULL, free);
60016 }
60017
60018 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
60019 *real_packet = *old;
60020 } else {
60021 log_packet_detailed(" no old info");
60022 memset(real_packet, 0, sizeof(*real_packet));
60023 }
60024
60025 if (BV_ISSET(fields, 0)) {
60026 log_packet_detailed(" got field 'id'");
60027#ifdef FREECIV_JSON_CONNECTION
60028 field_addr.name = "id";
60029#endif /* FREECIV_JSON_CONNECTION */
60030 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
60032 }
60033 }
60034 if (BV_ISSET(fields, 1)) {
60035 log_packet_detailed(" got field 'name'");
60036#ifdef FREECIV_JSON_CONNECTION
60037 field_addr.name = "name";
60038#endif /* FREECIV_JSON_CONNECTION */
60039 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
60041 }
60042 }
60043 if (BV_ISSET(fields, 2)) {
60044 log_packet_detailed(" got field 'rule_name'");
60045#ifdef FREECIV_JSON_CONNECTION
60046 field_addr.name = "rule_name";
60047#endif /* FREECIV_JSON_CONNECTION */
60048 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
60049 RECEIVE_PACKET_FIELD_ERROR(rule_name);
60050 }
60051 }
60052 if (BV_ISSET(fields, 3)) {
60053 log_packet_detailed(" got field 'category'");
60054#ifdef FREECIV_JSON_CONNECTION
60055 field_addr.name = "category";
60056#endif /* FREECIV_JSON_CONNECTION */
60057 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
60059 }
60060 }
60061 if (BV_ISSET(fields, 4)) {
60062 log_packet_detailed(" got field 'causes'");
60063#ifdef FREECIV_JSON_CONNECTION
60064 field_addr.name = "causes";
60065#endif /* FREECIV_JSON_CONNECTION */
60066 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
60068 }
60069 }
60070 if (BV_ISSET(fields, 5)) {
60071 log_packet_detailed(" got field 'rmcauses'");
60072#ifdef FREECIV_JSON_CONNECTION
60073 field_addr.name = "rmcauses";
60074#endif /* FREECIV_JSON_CONNECTION */
60075 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
60077 }
60078 }
60079 if (BV_ISSET(fields, 6)) {
60080 log_packet_detailed(" got field 'activity_gfx'");
60081#ifdef FREECIV_JSON_CONNECTION
60082 field_addr.name = "activity_gfx";
60083#endif /* FREECIV_JSON_CONNECTION */
60084 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
60085 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
60086 }
60087 }
60088 if (BV_ISSET(fields, 7)) {
60089 log_packet_detailed(" got field 'act_gfx_alt'");
60090#ifdef FREECIV_JSON_CONNECTION
60091 field_addr.name = "act_gfx_alt";
60092#endif /* FREECIV_JSON_CONNECTION */
60093 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
60094 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
60095 }
60096 }
60097 if (BV_ISSET(fields, 8)) {
60098 log_packet_detailed(" got field 'act_gfx_alt2'");
60099#ifdef FREECIV_JSON_CONNECTION
60100 field_addr.name = "act_gfx_alt2";
60101#endif /* FREECIV_JSON_CONNECTION */
60102 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
60103 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
60104 }
60105 }
60106 if (BV_ISSET(fields, 9)) {
60107 log_packet_detailed(" got field 'rmact_gfx'");
60108#ifdef FREECIV_JSON_CONNECTION
60109 field_addr.name = "rmact_gfx";
60110#endif /* FREECIV_JSON_CONNECTION */
60111 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
60112 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
60113 }
60114 }
60115 if (BV_ISSET(fields, 10)) {
60116 log_packet_detailed(" got field 'rmact_gfx_alt'");
60117#ifdef FREECIV_JSON_CONNECTION
60118 field_addr.name = "rmact_gfx_alt";
60119#endif /* FREECIV_JSON_CONNECTION */
60120 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
60121 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
60122 }
60123 }
60124 if (BV_ISSET(fields, 11)) {
60125 log_packet_detailed(" got field 'rmact_gfx_alt2'");
60126#ifdef FREECIV_JSON_CONNECTION
60127 field_addr.name = "rmact_gfx_alt2";
60128#endif /* FREECIV_JSON_CONNECTION */
60129 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
60130 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
60131 }
60132 }
60133 if (BV_ISSET(fields, 12)) {
60134 log_packet_detailed(" got field 'graphic_str'");
60135#ifdef FREECIV_JSON_CONNECTION
60136 field_addr.name = "graphic_str";
60137#endif /* FREECIV_JSON_CONNECTION */
60138 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
60139 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
60140 }
60141 }
60142 if (BV_ISSET(fields, 13)) {
60143 log_packet_detailed(" got field 'graphic_alt'");
60144#ifdef FREECIV_JSON_CONNECTION
60145 field_addr.name = "graphic_alt";
60146#endif /* FREECIV_JSON_CONNECTION */
60147 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
60148 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
60149 }
60150 }
60151 if (BV_ISSET(fields, 14)) {
60152 log_packet_detailed(" got field 'reqs_count'");
60153#ifdef FREECIV_JSON_CONNECTION
60154 field_addr.name = "reqs_count";
60155#endif /* FREECIV_JSON_CONNECTION */
60156 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
60157 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
60158 }
60159 }
60160 if (BV_ISSET(fields, 15)) {
60161 log_packet_detailed(" got field 'reqs'");
60162#ifdef FREECIV_JSON_CONNECTION
60163 field_addr.name = "reqs";
60164#endif /* FREECIV_JSON_CONNECTION */
60165 if (real_packet->reqs_count > MAX_NUM_REQS) {
60166 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
60167 }
60168 {
60169 int i;
60170
60171#ifdef FREECIV_JSON_CONNECTION
60172 /* Enter array. */
60173 field_addr.sub_location = plocation_elem_new(0);
60174#endif /* FREECIV_JSON_CONNECTION */
60175
60176 for (i = 0; i < real_packet->reqs_count; i++) {
60177#ifdef FREECIV_JSON_CONNECTION
60178 field_addr.sub_location->number = i;
60179#endif /* FREECIV_JSON_CONNECTION */
60180
60181 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
60183 }
60184 }
60185
60186#ifdef FREECIV_JSON_CONNECTION
60187 /* Exit array. */
60188 FC_FREE(field_addr.sub_location);
60189#endif /* FREECIV_JSON_CONNECTION */
60190 }
60191 }
60192 if (BV_ISSET(fields, 16)) {
60193 log_packet_detailed(" got field 'rmreqs_count'");
60194#ifdef FREECIV_JSON_CONNECTION
60195 field_addr.name = "rmreqs_count";
60196#endif /* FREECIV_JSON_CONNECTION */
60197 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rmreqs_count)) {
60198 RECEIVE_PACKET_FIELD_ERROR(rmreqs_count);
60199 }
60200 }
60201 if (BV_ISSET(fields, 17)) {
60202 log_packet_detailed(" got field 'rmreqs'");
60203#ifdef FREECIV_JSON_CONNECTION
60204 field_addr.name = "rmreqs";
60205#endif /* FREECIV_JSON_CONNECTION */
60206 if (real_packet->rmreqs_count > MAX_NUM_REQS) {
60207 RECEIVE_PACKET_FIELD_ERROR(rmreqs, ": truncation array");
60208 }
60209 {
60210 int i;
60211
60212#ifdef FREECIV_JSON_CONNECTION
60213 /* Enter array. */
60214 field_addr.sub_location = plocation_elem_new(0);
60215#endif /* FREECIV_JSON_CONNECTION */
60216
60217 for (i = 0; i < real_packet->rmreqs_count; i++) {
60218#ifdef FREECIV_JSON_CONNECTION
60219 field_addr.sub_location->number = i;
60220#endif /* FREECIV_JSON_CONNECTION */
60221
60222 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs[i])) {
60224 }
60225 }
60226
60227#ifdef FREECIV_JSON_CONNECTION
60228 /* Exit array. */
60229 FC_FREE(field_addr.sub_location);
60230#endif /* FREECIV_JSON_CONNECTION */
60231 }
60232 }
60233 if (BV_ISSET(fields, 18)) {
60234 log_packet_detailed(" got field 'appearance_chance'");
60235#ifdef FREECIV_JSON_CONNECTION
60236 field_addr.name = "appearance_chance";
60237#endif /* FREECIV_JSON_CONNECTION */
60238 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
60239 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
60240 }
60241 }
60242 if (BV_ISSET(fields, 19)) {
60243 log_packet_detailed(" got field 'appearance_reqs_count'");
60244#ifdef FREECIV_JSON_CONNECTION
60245 field_addr.name = "appearance_reqs_count";
60246#endif /* FREECIV_JSON_CONNECTION */
60247 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->appearance_reqs_count)) {
60248 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs_count);
60249 }
60250 }
60251 if (BV_ISSET(fields, 20)) {
60252 log_packet_detailed(" got field 'appearance_reqs'");
60253#ifdef FREECIV_JSON_CONNECTION
60254 field_addr.name = "appearance_reqs";
60255#endif /* FREECIV_JSON_CONNECTION */
60256 if (real_packet->appearance_reqs_count > MAX_NUM_REQS) {
60257 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs, ": truncation array");
60258 }
60259 {
60260 int i;
60261
60262#ifdef FREECIV_JSON_CONNECTION
60263 /* Enter array. */
60264 field_addr.sub_location = plocation_elem_new(0);
60265#endif /* FREECIV_JSON_CONNECTION */
60266
60267 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
60268#ifdef FREECIV_JSON_CONNECTION
60269 field_addr.sub_location->number = i;
60270#endif /* FREECIV_JSON_CONNECTION */
60271
60272 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs[i])) {
60273 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
60274 }
60275 }
60276
60277#ifdef FREECIV_JSON_CONNECTION
60278 /* Exit array. */
60279 FC_FREE(field_addr.sub_location);
60280#endif /* FREECIV_JSON_CONNECTION */
60281 }
60282 }
60283 if (BV_ISSET(fields, 21)) {
60284 log_packet_detailed(" got field 'disappearance_chance'");
60285#ifdef FREECIV_JSON_CONNECTION
60286 field_addr.name = "disappearance_chance";
60287#endif /* FREECIV_JSON_CONNECTION */
60288 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
60289 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
60290 }
60291 }
60292 if (BV_ISSET(fields, 22)) {
60293 log_packet_detailed(" got field 'disappearance_reqs_count'");
60294#ifdef FREECIV_JSON_CONNECTION
60295 field_addr.name = "disappearance_reqs_count";
60296#endif /* FREECIV_JSON_CONNECTION */
60297 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->disappearance_reqs_count)) {
60298 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs_count);
60299 }
60300 }
60301 if (BV_ISSET(fields, 23)) {
60302 log_packet_detailed(" got field 'disappearance_reqs'");
60303#ifdef FREECIV_JSON_CONNECTION
60304 field_addr.name = "disappearance_reqs";
60305#endif /* FREECIV_JSON_CONNECTION */
60306 if (real_packet->disappearance_reqs_count > MAX_NUM_REQS) {
60307 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs, ": truncation array");
60308 }
60309 {
60310 int i;
60311
60312#ifdef FREECIV_JSON_CONNECTION
60313 /* Enter array. */
60314 field_addr.sub_location = plocation_elem_new(0);
60315#endif /* FREECIV_JSON_CONNECTION */
60316
60317 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
60318#ifdef FREECIV_JSON_CONNECTION
60319 field_addr.sub_location->number = i;
60320#endif /* FREECIV_JSON_CONNECTION */
60321
60322 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs[i])) {
60323 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
60324 }
60325 }
60326
60327#ifdef FREECIV_JSON_CONNECTION
60328 /* Exit array. */
60329 FC_FREE(field_addr.sub_location);
60330#endif /* FREECIV_JSON_CONNECTION */
60331 }
60332 }
60333 if (BV_ISSET(fields, 24)) {
60334 log_packet_detailed(" got field 'visibility_req'");
60335#ifdef FREECIV_JSON_CONNECTION
60336 field_addr.name = "visibility_req";
60337#endif /* FREECIV_JSON_CONNECTION */
60338 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
60339 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
60340 }
60341 }
60342 real_packet->buildable = BV_ISSET(fields, 25);
60343 real_packet->generated = BV_ISSET(fields, 26);
60344 if (BV_ISSET(fields, 27)) {
60345 log_packet_detailed(" got field 'build_time'");
60346#ifdef FREECIV_JSON_CONNECTION
60347 field_addr.name = "build_time";
60348#endif /* FREECIV_JSON_CONNECTION */
60349 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
60350 RECEIVE_PACKET_FIELD_ERROR(build_time);
60351 }
60352 }
60353 if (BV_ISSET(fields, 28)) {
60354 log_packet_detailed(" got field 'build_time_factor'");
60355#ifdef FREECIV_JSON_CONNECTION
60356 field_addr.name = "build_time_factor";
60357#endif /* FREECIV_JSON_CONNECTION */
60358 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
60359 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
60360 }
60361 }
60362 if (BV_ISSET(fields, 29)) {
60363 log_packet_detailed(" got field 'removal_time'");
60364#ifdef FREECIV_JSON_CONNECTION
60365 field_addr.name = "removal_time";
60366#endif /* FREECIV_JSON_CONNECTION */
60367 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
60368 RECEIVE_PACKET_FIELD_ERROR(removal_time);
60369 }
60370 }
60371 if (BV_ISSET(fields, 30)) {
60372 log_packet_detailed(" got field 'removal_time_factor'");
60373#ifdef FREECIV_JSON_CONNECTION
60374 field_addr.name = "removal_time_factor";
60375#endif /* FREECIV_JSON_CONNECTION */
60376 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
60377 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
60378 }
60379 }
60380 if (BV_ISSET(fields, 31)) {
60381 log_packet_detailed(" got field 'infracost'");
60382#ifdef FREECIV_JSON_CONNECTION
60383 field_addr.name = "infracost";
60384#endif /* FREECIV_JSON_CONNECTION */
60385 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
60386 RECEIVE_PACKET_FIELD_ERROR(infracost);
60387 }
60388 }
60389 if (BV_ISSET(fields, 32)) {
60390 log_packet_detailed(" got field 'defense_bonus'");
60391#ifdef FREECIV_JSON_CONNECTION
60392 field_addr.name = "defense_bonus";
60393#endif /* FREECIV_JSON_CONNECTION */
60394 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
60395 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
60396 }
60397 }
60398 if (BV_ISSET(fields, 33)) {
60399 log_packet_detailed(" got field 'eus'");
60400#ifdef FREECIV_JSON_CONNECTION
60401 field_addr.name = "eus";
60402#endif /* FREECIV_JSON_CONNECTION */
60403 {
60404 int readin;
60405
60406 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60408 }
60409 real_packet->eus = readin;
60410 }
60411 }
60412 if (BV_ISSET(fields, 34)) {
60413 log_packet_detailed(" got field 'native_to'");
60414#ifdef FREECIV_JSON_CONNECTION
60415 field_addr.name = "native_to";
60416#endif /* FREECIV_JSON_CONNECTION */
60417 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
60418 RECEIVE_PACKET_FIELD_ERROR(native_to);
60419 }
60420 }
60421 if (BV_ISSET(fields, 35)) {
60422 log_packet_detailed(" got field 'flags'");
60423#ifdef FREECIV_JSON_CONNECTION
60424 field_addr.name = "flags";
60425#endif /* FREECIV_JSON_CONNECTION */
60426 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
60428 }
60429 }
60430 if (BV_ISSET(fields, 36)) {
60431 log_packet_detailed(" got field 'hidden_by'");
60432#ifdef FREECIV_JSON_CONNECTION
60433 field_addr.name = "hidden_by";
60434#endif /* FREECIV_JSON_CONNECTION */
60435 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
60436 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
60437 }
60438 }
60439 if (BV_ISSET(fields, 37)) {
60440 log_packet_detailed(" got field 'bridged_over'");
60441#ifdef FREECIV_JSON_CONNECTION
60442 field_addr.name = "bridged_over";
60443#endif /* FREECIV_JSON_CONNECTION */
60444 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
60445 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
60446 }
60447 }
60448 if (BV_ISSET(fields, 38)) {
60449 log_packet_detailed(" got field 'conflicts'");
60450#ifdef FREECIV_JSON_CONNECTION
60451 field_addr.name = "conflicts";
60452#endif /* FREECIV_JSON_CONNECTION */
60453 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
60454 RECEIVE_PACKET_FIELD_ERROR(conflicts);
60455 }
60456 }
60457 if (BV_ISSET(fields, 39)) {
60458 log_packet_detailed(" got field 'no_aggr_near_city'");
60459#ifdef FREECIV_JSON_CONNECTION
60460 field_addr.name = "no_aggr_near_city";
60461#endif /* FREECIV_JSON_CONNECTION */
60462 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
60463 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
60464 }
60465 }
60466 if (BV_ISSET(fields, 40)) {
60467 log_packet_detailed(" got field 'helptext'");
60468#ifdef FREECIV_JSON_CONNECTION
60469 field_addr.name = "helptext";
60470#endif /* FREECIV_JSON_CONNECTION */
60471 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
60473 }
60474 }
60475
60476 if (NULL == old) {
60477 old = fc_malloc(sizeof(*old));
60478 *old = *real_packet;
60479 genhash_insert(*hash, old, old);
60480 } else {
60481 *old = *real_packet;
60482 }
60483
60484#endif /* FREECIV_DELTA_PROTOCOL */
60486}
60487
60488static int send_packet_ruleset_extra_100(struct connection *pc, const struct packet_ruleset_extra *packet)
60489{
60490 const struct packet_ruleset_extra *real_packet = packet;
60491 int e;
60492#ifdef FREECIV_DELTA_PROTOCOL
60494 struct packet_ruleset_extra *old;
60495 bool differ;
60496 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA;
60497#endif /* FREECIV_DELTA_PROTOCOL */
60499#ifdef FREECIV_JSON_CONNECTION
60500 struct plocation field_addr;
60501 {
60505 }
60506#endif /* FREECIV_JSON_CONNECTION */
60507
60508 log_packet_detailed("packet_ruleset_extra_100: sending info about ()");
60509
60510#ifdef FREECIV_DELTA_PROTOCOL
60511 if (NULL == *hash) {
60513 NULL, NULL, NULL, free);
60514 }
60515 BV_CLR_ALL(fields);
60516
60517 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
60518 old = fc_malloc(sizeof(*old));
60519 *old = *real_packet;
60520 genhash_insert(*hash, old, old);
60521 memset(old, 0, sizeof(*old));
60522 }
60523 differ = (old->id != real_packet->id);
60524 if (differ) {
60525 BV_SET(fields, 0);
60526 }
60527
60528 differ = (strcmp(old->name, real_packet->name) != 0);
60529 if (differ) {
60530 BV_SET(fields, 1);
60531 }
60532
60533 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
60534 if (differ) {
60535 BV_SET(fields, 2);
60536 }
60537
60538 differ = (old->category != real_packet->category);
60539 if (differ) {
60540 BV_SET(fields, 3);
60541 }
60542
60543 differ = !BV_ARE_EQUAL(old->causes, real_packet->causes);
60544 if (differ) {
60545 BV_SET(fields, 4);
60546 }
60547
60548 differ = !BV_ARE_EQUAL(old->rmcauses, real_packet->rmcauses);
60549 if (differ) {
60550 BV_SET(fields, 5);
60551 }
60552
60553 differ = (strcmp(old->activity_gfx, real_packet->activity_gfx) != 0);
60554 if (differ) {
60555 BV_SET(fields, 6);
60556 }
60557
60558 differ = (strcmp(old->act_gfx_alt, real_packet->act_gfx_alt) != 0);
60559 if (differ) {
60560 BV_SET(fields, 7);
60561 }
60562
60563 differ = (strcmp(old->act_gfx_alt2, real_packet->act_gfx_alt2) != 0);
60564 if (differ) {
60565 BV_SET(fields, 8);
60566 }
60567
60568 differ = (strcmp(old->rmact_gfx, real_packet->rmact_gfx) != 0);
60569 if (differ) {
60570 BV_SET(fields, 9);
60571 }
60572
60573 differ = (strcmp(old->rmact_gfx_alt, real_packet->rmact_gfx_alt) != 0);
60574 if (differ) {
60575 BV_SET(fields, 10);
60576 }
60577
60578 differ = (strcmp(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2) != 0);
60579 if (differ) {
60580 BV_SET(fields, 11);
60581 }
60582
60583 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
60584 if (differ) {
60585 BV_SET(fields, 12);
60586 }
60587
60588 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
60589 if (differ) {
60590 BV_SET(fields, 13);
60591 }
60592
60593 differ = (old->reqs_count != real_packet->reqs_count);
60594 if (differ) {
60595 BV_SET(fields, 14);
60596 }
60597
60598 differ = (old->reqs_count != real_packet->reqs_count);
60599 if (!differ) {
60600 int i;
60601
60602 for (i = 0; i < real_packet->reqs_count; i++) {
60603 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
60604 if (differ) {
60605 break;
60606 }
60607 }
60608 }
60609 if (differ) {
60610 BV_SET(fields, 15);
60611 }
60612
60613 differ = (old->rmreqs_count != real_packet->rmreqs_count);
60614 if (differ) {
60615 BV_SET(fields, 16);
60616 }
60617
60618 differ = (old->rmreqs_count != real_packet->rmreqs_count);
60619 if (!differ) {
60620 int i;
60621
60622 for (i = 0; i < real_packet->rmreqs_count; i++) {
60623 differ = !are_requirements_equal(&old->rmreqs[i], &real_packet->rmreqs[i]);
60624 if (differ) {
60625 break;
60626 }
60627 }
60628 }
60629 if (differ) {
60630 BV_SET(fields, 17);
60631 }
60632
60633 differ = (old->appearance_chance != real_packet->appearance_chance);
60634 if (differ) {
60635 BV_SET(fields, 18);
60636 }
60637
60638 differ = (old->appearance_reqs_count != real_packet->appearance_reqs_count);
60639 if (differ) {
60640 BV_SET(fields, 19);
60641 }
60642
60643 differ = (old->appearance_reqs_count != real_packet->appearance_reqs_count);
60644 if (!differ) {
60645 int i;
60646
60647 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
60648 differ = !are_requirements_equal(&old->appearance_reqs[i], &real_packet->appearance_reqs[i]);
60649 if (differ) {
60650 break;
60651 }
60652 }
60653 }
60654 if (differ) {
60655 BV_SET(fields, 20);
60656 }
60657
60658 differ = (old->disappearance_chance != real_packet->disappearance_chance);
60659 if (differ) {
60660 BV_SET(fields, 21);
60661 }
60662
60663 differ = (old->disappearance_reqs_count != real_packet->disappearance_reqs_count);
60664 if (differ) {
60665 BV_SET(fields, 22);
60666 }
60667
60668 differ = (old->disappearance_reqs_count != real_packet->disappearance_reqs_count);
60669 if (!differ) {
60670 int i;
60671
60672 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
60673 differ = !are_requirements_equal(&old->disappearance_reqs[i], &real_packet->disappearance_reqs[i]);
60674 if (differ) {
60675 break;
60676 }
60677 }
60678 }
60679 if (differ) {
60680 BV_SET(fields, 23);
60681 }
60682
60683 differ = (old->visibility_req != real_packet->visibility_req);
60684 if (differ) {
60685 BV_SET(fields, 24);
60686 }
60687
60688 if (packet->buildable) {
60689 BV_SET(fields, 25);
60690 }
60691
60692 if (packet->generated) {
60693 BV_SET(fields, 26);
60694 }
60695
60696 differ = (old->build_time != real_packet->build_time);
60697 if (differ) {
60698 BV_SET(fields, 27);
60699 }
60700
60701 differ = (old->build_time_factor != real_packet->build_time_factor);
60702 if (differ) {
60703 BV_SET(fields, 28);
60704 }
60705
60706 differ = (old->removal_time != real_packet->removal_time);
60707 if (differ) {
60708 BV_SET(fields, 29);
60709 }
60710
60711 differ = (old->removal_time_factor != real_packet->removal_time_factor);
60712 if (differ) {
60713 BV_SET(fields, 30);
60714 }
60715
60716 differ = (old->infracost != real_packet->infracost);
60717 if (differ) {
60718 BV_SET(fields, 31);
60719 }
60720
60721 differ = (old->defense_bonus != real_packet->defense_bonus);
60722 if (differ) {
60723 BV_SET(fields, 32);
60724 }
60725
60726 differ = (old->eus != real_packet->eus);
60727 if (differ) {
60728 BV_SET(fields, 33);
60729 }
60730
60731 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
60732 if (differ) {
60733 BV_SET(fields, 34);
60734 }
60735
60736 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
60737 if (differ) {
60738 BV_SET(fields, 35);
60739 }
60740
60741 differ = !BV_ARE_EQUAL(old->hidden_by, real_packet->hidden_by);
60742 if (differ) {
60743 BV_SET(fields, 36);
60744 }
60745
60746 differ = !BV_ARE_EQUAL(old->bridged_over, real_packet->bridged_over);
60747 if (differ) {
60748 BV_SET(fields, 37);
60749 }
60750
60751 differ = !BV_ARE_EQUAL(old->conflicts, real_packet->conflicts);
60752 if (differ) {
60753 BV_SET(fields, 38);
60754 }
60755
60756 differ = (old->no_aggr_near_city != real_packet->no_aggr_near_city);
60757 if (differ) {
60758 BV_SET(fields, 39);
60759 }
60760
60761 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
60762 if (differ) {
60763 BV_SET(fields, 40);
60764 }
60765
60766
60767#ifdef FREECIV_JSON_CONNECTION
60768 field_addr.name = "fields";
60769#endif /* FREECIV_JSON_CONNECTION */
60770 e = 0;
60771 e |= DIO_BV_PUT(&dout, &field_addr, fields);
60772 if (e) {
60773 log_packet_detailed("fields bitvector error detected");
60774 }
60775
60776 if (BV_ISSET(fields, 0)) {
60777 log_packet_detailed(" field 'id' has changed");
60778#ifdef FREECIV_JSON_CONNECTION
60779 field_addr.name = "id";
60780#endif /* FREECIV_JSON_CONNECTION */
60781 e = 0;
60782 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
60783 if (e) {
60784 log_packet_detailed("'id' field error detected");
60785 }
60786 }
60787 if (BV_ISSET(fields, 1)) {
60788 log_packet_detailed(" field 'name' has changed");
60789#ifdef FREECIV_JSON_CONNECTION
60790 field_addr.name = "name";
60791#endif /* FREECIV_JSON_CONNECTION */
60792 e = 0;
60793 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
60794 if (e) {
60795 log_packet_detailed("'name' field error detected");
60796 }
60797 }
60798 if (BV_ISSET(fields, 2)) {
60799 log_packet_detailed(" field 'rule_name' has changed");
60800#ifdef FREECIV_JSON_CONNECTION
60801 field_addr.name = "rule_name";
60802#endif /* FREECIV_JSON_CONNECTION */
60803 e = 0;
60804 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
60805 if (e) {
60806 log_packet_detailed("'rule_name' field error detected");
60807 }
60808 }
60809 if (BV_ISSET(fields, 3)) {
60810 log_packet_detailed(" field 'category' has changed");
60811#ifdef FREECIV_JSON_CONNECTION
60812 field_addr.name = "category";
60813#endif /* FREECIV_JSON_CONNECTION */
60814 e = 0;
60815 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
60816 if (e) {
60817 log_packet_detailed("'category' field error detected");
60818 }
60819 }
60820 if (BV_ISSET(fields, 4)) {
60821 log_packet_detailed(" field 'causes' has changed");
60822#ifdef FREECIV_JSON_CONNECTION
60823 field_addr.name = "causes";
60824#endif /* FREECIV_JSON_CONNECTION */
60825 e = 0;
60826 e |= DIO_BV_PUT(&dout, &field_addr, packet->causes);
60827 if (e) {
60828 log_packet_detailed("'causes' field error detected");
60829 }
60830 }
60831 if (BV_ISSET(fields, 5)) {
60832 log_packet_detailed(" field 'rmcauses' has changed");
60833#ifdef FREECIV_JSON_CONNECTION
60834 field_addr.name = "rmcauses";
60835#endif /* FREECIV_JSON_CONNECTION */
60836 e = 0;
60837 e |= DIO_BV_PUT(&dout, &field_addr, packet->rmcauses);
60838 if (e) {
60839 log_packet_detailed("'rmcauses' field error detected");
60840 }
60841 }
60842 if (BV_ISSET(fields, 6)) {
60843 log_packet_detailed(" field 'activity_gfx' has changed");
60844#ifdef FREECIV_JSON_CONNECTION
60845 field_addr.name = "activity_gfx";
60846#endif /* FREECIV_JSON_CONNECTION */
60847 e = 0;
60848 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
60849 if (e) {
60850 log_packet_detailed("'activity_gfx' field error detected");
60851 }
60852 }
60853 if (BV_ISSET(fields, 7)) {
60854 log_packet_detailed(" field 'act_gfx_alt' has changed");
60855#ifdef FREECIV_JSON_CONNECTION
60856 field_addr.name = "act_gfx_alt";
60857#endif /* FREECIV_JSON_CONNECTION */
60858 e = 0;
60859 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
60860 if (e) {
60861 log_packet_detailed("'act_gfx_alt' field error detected");
60862 }
60863 }
60864 if (BV_ISSET(fields, 8)) {
60865 log_packet_detailed(" field 'act_gfx_alt2' has changed");
60866#ifdef FREECIV_JSON_CONNECTION
60867 field_addr.name = "act_gfx_alt2";
60868#endif /* FREECIV_JSON_CONNECTION */
60869 e = 0;
60870 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
60871 if (e) {
60872 log_packet_detailed("'act_gfx_alt2' field error detected");
60873 }
60874 }
60875 if (BV_ISSET(fields, 9)) {
60876 log_packet_detailed(" field 'rmact_gfx' has changed");
60877#ifdef FREECIV_JSON_CONNECTION
60878 field_addr.name = "rmact_gfx";
60879#endif /* FREECIV_JSON_CONNECTION */
60880 e = 0;
60881 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
60882 if (e) {
60883 log_packet_detailed("'rmact_gfx' field error detected");
60884 }
60885 }
60886 if (BV_ISSET(fields, 10)) {
60887 log_packet_detailed(" field 'rmact_gfx_alt' has changed");
60888#ifdef FREECIV_JSON_CONNECTION
60889 field_addr.name = "rmact_gfx_alt";
60890#endif /* FREECIV_JSON_CONNECTION */
60891 e = 0;
60892 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
60893 if (e) {
60894 log_packet_detailed("'rmact_gfx_alt' field error detected");
60895 }
60896 }
60897 if (BV_ISSET(fields, 11)) {
60898 log_packet_detailed(" field 'rmact_gfx_alt2' has changed");
60899#ifdef FREECIV_JSON_CONNECTION
60900 field_addr.name = "rmact_gfx_alt2";
60901#endif /* FREECIV_JSON_CONNECTION */
60902 e = 0;
60903 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
60904 if (e) {
60905 log_packet_detailed("'rmact_gfx_alt2' field error detected");
60906 }
60907 }
60908 if (BV_ISSET(fields, 12)) {
60909 log_packet_detailed(" field 'graphic_str' has changed");
60910#ifdef FREECIV_JSON_CONNECTION
60911 field_addr.name = "graphic_str";
60912#endif /* FREECIV_JSON_CONNECTION */
60913 e = 0;
60914 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
60915 if (e) {
60916 log_packet_detailed("'graphic_str' field error detected");
60917 }
60918 }
60919 if (BV_ISSET(fields, 13)) {
60920 log_packet_detailed(" field 'graphic_alt' has changed");
60921#ifdef FREECIV_JSON_CONNECTION
60922 field_addr.name = "graphic_alt";
60923#endif /* FREECIV_JSON_CONNECTION */
60924 e = 0;
60925 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
60926 if (e) {
60927 log_packet_detailed("'graphic_alt' field error detected");
60928 }
60929 }
60930 if (BV_ISSET(fields, 14)) {
60931 log_packet_detailed(" field 'reqs_count' has changed");
60932#ifdef FREECIV_JSON_CONNECTION
60933 field_addr.name = "reqs_count";
60934#endif /* FREECIV_JSON_CONNECTION */
60935 e = 0;
60936 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
60937 if (e) {
60938 log_packet_detailed("'reqs_count' field error detected");
60939 }
60940 }
60941 if (BV_ISSET(fields, 15)) {
60942 log_packet_detailed(" field 'reqs' has changed");
60943#ifdef FREECIV_JSON_CONNECTION
60944 field_addr.name = "reqs";
60945#endif /* FREECIV_JSON_CONNECTION */
60946 e = 0;
60947 {
60948 int i;
60949
60950#ifdef FREECIV_JSON_CONNECTION
60951 /* Create the array. */
60952 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
60953
60954 /* Enter the array. */
60955 field_addr.sub_location = plocation_elem_new(0);
60956#endif /* FREECIV_JSON_CONNECTION */
60957
60958 for (i = 0; i < real_packet->reqs_count; i++) {
60959#ifdef FREECIV_JSON_CONNECTION
60960 /* Next array element. */
60961 field_addr.sub_location->number = i;
60962#endif /* FREECIV_JSON_CONNECTION */
60963
60964 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
60965 }
60966
60967#ifdef FREECIV_JSON_CONNECTION
60968 /* Exit array. */
60969 FC_FREE(field_addr.sub_location);
60970#endif /* FREECIV_JSON_CONNECTION */
60971 }
60972 if (e) {
60973 log_packet_detailed("'reqs' field error detected");
60974 }
60975 }
60976 if (BV_ISSET(fields, 16)) {
60977 log_packet_detailed(" field 'rmreqs_count' has changed");
60978#ifdef FREECIV_JSON_CONNECTION
60979 field_addr.name = "rmreqs_count";
60980#endif /* FREECIV_JSON_CONNECTION */
60981 e = 0;
60982 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rmreqs_count);
60983 if (e) {
60984 log_packet_detailed("'rmreqs_count' field error detected");
60985 }
60986 }
60987 if (BV_ISSET(fields, 17)) {
60988 log_packet_detailed(" field 'rmreqs' has changed");
60989#ifdef FREECIV_JSON_CONNECTION
60990 field_addr.name = "rmreqs";
60991#endif /* FREECIV_JSON_CONNECTION */
60992 e = 0;
60993 {
60994 int i;
60995
60996#ifdef FREECIV_JSON_CONNECTION
60997 /* Create the array. */
60998 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->rmreqs_count);
60999
61000 /* Enter the array. */
61001 field_addr.sub_location = plocation_elem_new(0);
61002#endif /* FREECIV_JSON_CONNECTION */
61003
61004 for (i = 0; i < real_packet->rmreqs_count; i++) {
61005#ifdef FREECIV_JSON_CONNECTION
61006 /* Next array element. */
61007 field_addr.sub_location->number = i;
61008#endif /* FREECIV_JSON_CONNECTION */
61009
61010 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs[i]);
61011 }
61012
61013#ifdef FREECIV_JSON_CONNECTION
61014 /* Exit array. */
61015 FC_FREE(field_addr.sub_location);
61016#endif /* FREECIV_JSON_CONNECTION */
61017 }
61018 if (e) {
61019 log_packet_detailed("'rmreqs' field error detected");
61020 }
61021 }
61022 if (BV_ISSET(fields, 18)) {
61023 log_packet_detailed(" field 'appearance_chance' has changed");
61024#ifdef FREECIV_JSON_CONNECTION
61025 field_addr.name = "appearance_chance";
61026#endif /* FREECIV_JSON_CONNECTION */
61027 e = 0;
61028 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
61029 if (e) {
61030 log_packet_detailed("'appearance_chance' field error detected");
61031 }
61032 }
61033 if (BV_ISSET(fields, 19)) {
61034 log_packet_detailed(" field 'appearance_reqs_count' has changed");
61035#ifdef FREECIV_JSON_CONNECTION
61036 field_addr.name = "appearance_reqs_count";
61037#endif /* FREECIV_JSON_CONNECTION */
61038 e = 0;
61039 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->appearance_reqs_count);
61040 if (e) {
61041 log_packet_detailed("'appearance_reqs_count' field error detected");
61042 }
61043 }
61044 if (BV_ISSET(fields, 20)) {
61045 log_packet_detailed(" field 'appearance_reqs' has changed");
61046#ifdef FREECIV_JSON_CONNECTION
61047 field_addr.name = "appearance_reqs";
61048#endif /* FREECIV_JSON_CONNECTION */
61049 e = 0;
61050 {
61051 int i;
61052
61053#ifdef FREECIV_JSON_CONNECTION
61054 /* Create the array. */
61055 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->appearance_reqs_count);
61056
61057 /* Enter the array. */
61058 field_addr.sub_location = plocation_elem_new(0);
61059#endif /* FREECIV_JSON_CONNECTION */
61060
61061 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
61062#ifdef FREECIV_JSON_CONNECTION
61063 /* Next array element. */
61064 field_addr.sub_location->number = i;
61065#endif /* FREECIV_JSON_CONNECTION */
61066
61067 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs[i]);
61068 }
61069
61070#ifdef FREECIV_JSON_CONNECTION
61071 /* Exit array. */
61072 FC_FREE(field_addr.sub_location);
61073#endif /* FREECIV_JSON_CONNECTION */
61074 }
61075 if (e) {
61076 log_packet_detailed("'appearance_reqs' field error detected");
61077 }
61078 }
61079 if (BV_ISSET(fields, 21)) {
61080 log_packet_detailed(" field 'disappearance_chance' has changed");
61081#ifdef FREECIV_JSON_CONNECTION
61082 field_addr.name = "disappearance_chance";
61083#endif /* FREECIV_JSON_CONNECTION */
61084 e = 0;
61085 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
61086 if (e) {
61087 log_packet_detailed("'disappearance_chance' field error detected");
61088 }
61089 }
61090 if (BV_ISSET(fields, 22)) {
61091 log_packet_detailed(" field 'disappearance_reqs_count' has changed");
61092#ifdef FREECIV_JSON_CONNECTION
61093 field_addr.name = "disappearance_reqs_count";
61094#endif /* FREECIV_JSON_CONNECTION */
61095 e = 0;
61096 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->disappearance_reqs_count);
61097 if (e) {
61098 log_packet_detailed("'disappearance_reqs_count' field error detected");
61099 }
61100 }
61101 if (BV_ISSET(fields, 23)) {
61102 log_packet_detailed(" field 'disappearance_reqs' has changed");
61103#ifdef FREECIV_JSON_CONNECTION
61104 field_addr.name = "disappearance_reqs";
61105#endif /* FREECIV_JSON_CONNECTION */
61106 e = 0;
61107 {
61108 int i;
61109
61110#ifdef FREECIV_JSON_CONNECTION
61111 /* Create the array. */
61112 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->disappearance_reqs_count);
61113
61114 /* Enter the array. */
61115 field_addr.sub_location = plocation_elem_new(0);
61116#endif /* FREECIV_JSON_CONNECTION */
61117
61118 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
61119#ifdef FREECIV_JSON_CONNECTION
61120 /* Next array element. */
61121 field_addr.sub_location->number = i;
61122#endif /* FREECIV_JSON_CONNECTION */
61123
61124 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs[i]);
61125 }
61126
61127#ifdef FREECIV_JSON_CONNECTION
61128 /* Exit array. */
61129 FC_FREE(field_addr.sub_location);
61130#endif /* FREECIV_JSON_CONNECTION */
61131 }
61132 if (e) {
61133 log_packet_detailed("'disappearance_reqs' field error detected");
61134 }
61135 }
61136 if (BV_ISSET(fields, 24)) {
61137 log_packet_detailed(" field 'visibility_req' has changed");
61138#ifdef FREECIV_JSON_CONNECTION
61139 field_addr.name = "visibility_req";
61140#endif /* FREECIV_JSON_CONNECTION */
61141 e = 0;
61142 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
61143 if (e) {
61144 log_packet_detailed("'visibility_req' field error detected");
61145 }
61146 }
61147 /* field 25 is folded into the header */
61148 /* field 26 is folded into the header */
61149 if (BV_ISSET(fields, 27)) {
61150 log_packet_detailed(" field 'build_time' has changed");
61151#ifdef FREECIV_JSON_CONNECTION
61152 field_addr.name = "build_time";
61153#endif /* FREECIV_JSON_CONNECTION */
61154 e = 0;
61155 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
61156 if (e) {
61157 log_packet_detailed("'build_time' field error detected");
61158 }
61159 }
61160 if (BV_ISSET(fields, 28)) {
61161 log_packet_detailed(" field 'build_time_factor' has changed");
61162#ifdef FREECIV_JSON_CONNECTION
61163 field_addr.name = "build_time_factor";
61164#endif /* FREECIV_JSON_CONNECTION */
61165 e = 0;
61166 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
61167 if (e) {
61168 log_packet_detailed("'build_time_factor' field error detected");
61169 }
61170 }
61171 if (BV_ISSET(fields, 29)) {
61172 log_packet_detailed(" field 'removal_time' has changed");
61173#ifdef FREECIV_JSON_CONNECTION
61174 field_addr.name = "removal_time";
61175#endif /* FREECIV_JSON_CONNECTION */
61176 e = 0;
61177 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
61178 if (e) {
61179 log_packet_detailed("'removal_time' field error detected");
61180 }
61181 }
61182 if (BV_ISSET(fields, 30)) {
61183 log_packet_detailed(" field 'removal_time_factor' has changed");
61184#ifdef FREECIV_JSON_CONNECTION
61185 field_addr.name = "removal_time_factor";
61186#endif /* FREECIV_JSON_CONNECTION */
61187 e = 0;
61188 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
61189 if (e) {
61190 log_packet_detailed("'removal_time_factor' field error detected");
61191 }
61192 }
61193 if (BV_ISSET(fields, 31)) {
61194 log_packet_detailed(" field 'infracost' has changed");
61195#ifdef FREECIV_JSON_CONNECTION
61196 field_addr.name = "infracost";
61197#endif /* FREECIV_JSON_CONNECTION */
61198 e = 0;
61199 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
61200 if (e) {
61201 log_packet_detailed("'infracost' field error detected");
61202 }
61203 }
61204 if (BV_ISSET(fields, 32)) {
61205 log_packet_detailed(" field 'defense_bonus' has changed");
61206#ifdef FREECIV_JSON_CONNECTION
61207 field_addr.name = "defense_bonus";
61208#endif /* FREECIV_JSON_CONNECTION */
61209 e = 0;
61210 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
61211 if (e) {
61212 log_packet_detailed("'defense_bonus' field error detected");
61213 }
61214 }
61215 if (BV_ISSET(fields, 33)) {
61216 log_packet_detailed(" field 'eus' has changed");
61217#ifdef FREECIV_JSON_CONNECTION
61218 field_addr.name = "eus";
61219#endif /* FREECIV_JSON_CONNECTION */
61220 e = 0;
61221 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
61222 if (e) {
61223 log_packet_detailed("'eus' field error detected");
61224 }
61225 }
61226 if (BV_ISSET(fields, 34)) {
61227 log_packet_detailed(" field 'native_to' has changed");
61228#ifdef FREECIV_JSON_CONNECTION
61229 field_addr.name = "native_to";
61230#endif /* FREECIV_JSON_CONNECTION */
61231 e = 0;
61232 e |= DIO_BV_PUT(&dout, &field_addr, packet->native_to);
61233 if (e) {
61234 log_packet_detailed("'native_to' field error detected");
61235 }
61236 }
61237 if (BV_ISSET(fields, 35)) {
61238 log_packet_detailed(" field 'flags' has changed");
61239#ifdef FREECIV_JSON_CONNECTION
61240 field_addr.name = "flags";
61241#endif /* FREECIV_JSON_CONNECTION */
61242 e = 0;
61243 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
61244 if (e) {
61245 log_packet_detailed("'flags' field error detected");
61246 }
61247 }
61248 if (BV_ISSET(fields, 36)) {
61249 log_packet_detailed(" field 'hidden_by' has changed");
61250#ifdef FREECIV_JSON_CONNECTION
61251 field_addr.name = "hidden_by";
61252#endif /* FREECIV_JSON_CONNECTION */
61253 e = 0;
61254 e |= DIO_BV_PUT(&dout, &field_addr, packet->hidden_by);
61255 if (e) {
61256 log_packet_detailed("'hidden_by' field error detected");
61257 }
61258 }
61259 if (BV_ISSET(fields, 37)) {
61260 log_packet_detailed(" field 'bridged_over' has changed");
61261#ifdef FREECIV_JSON_CONNECTION
61262 field_addr.name = "bridged_over";
61263#endif /* FREECIV_JSON_CONNECTION */
61264 e = 0;
61265 e |= DIO_BV_PUT(&dout, &field_addr, packet->bridged_over);
61266 if (e) {
61267 log_packet_detailed("'bridged_over' field error detected");
61268 }
61269 }
61270 if (BV_ISSET(fields, 38)) {
61271 log_packet_detailed(" field 'conflicts' has changed");
61272#ifdef FREECIV_JSON_CONNECTION
61273 field_addr.name = "conflicts";
61274#endif /* FREECIV_JSON_CONNECTION */
61275 e = 0;
61276 e |= DIO_BV_PUT(&dout, &field_addr, packet->conflicts);
61277 if (e) {
61278 log_packet_detailed("'conflicts' field error detected");
61279 }
61280 }
61281 if (BV_ISSET(fields, 39)) {
61282 log_packet_detailed(" field 'no_aggr_near_city' has changed");
61283#ifdef FREECIV_JSON_CONNECTION
61284 field_addr.name = "no_aggr_near_city";
61285#endif /* FREECIV_JSON_CONNECTION */
61286 e = 0;
61287 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
61288 if (e) {
61289 log_packet_detailed("'no_aggr_near_city' field error detected");
61290 }
61291 }
61292 if (BV_ISSET(fields, 40)) {
61293 log_packet_detailed(" field 'helptext' has changed");
61294#ifdef FREECIV_JSON_CONNECTION
61295 field_addr.name = "helptext";
61296#endif /* FREECIV_JSON_CONNECTION */
61297 e = 0;
61298 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
61299 if (e) {
61300 log_packet_detailed("'helptext' field error detected");
61301 }
61302 }
61303
61304 *old = *real_packet;
61305#endif /* FREECIV_DELTA_PROTOCOL */
61306#ifndef FREECIV_DELTA_PROTOCOL
61307#ifdef FREECIV_JSON_CONNECTION
61308 field_addr.name = "id";
61309#endif /* FREECIV_JSON_CONNECTION */
61310 e = 0;
61311 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
61312 if (e) {
61313 log_packet_detailed("'id' field error detected");
61314 }
61315#ifdef FREECIV_JSON_CONNECTION
61316 field_addr.name = "name";
61317#endif /* FREECIV_JSON_CONNECTION */
61318 e = 0;
61319 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
61320 if (e) {
61321 log_packet_detailed("'name' field error detected");
61322 }
61323#ifdef FREECIV_JSON_CONNECTION
61324 field_addr.name = "rule_name";
61325#endif /* FREECIV_JSON_CONNECTION */
61326 e = 0;
61327 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
61328 if (e) {
61329 log_packet_detailed("'rule_name' field error detected");
61330 }
61331#ifdef FREECIV_JSON_CONNECTION
61332 field_addr.name = "category";
61333#endif /* FREECIV_JSON_CONNECTION */
61334 e = 0;
61335 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
61336 if (e) {
61337 log_packet_detailed("'category' field error detected");
61338 }
61339#ifdef FREECIV_JSON_CONNECTION
61340 field_addr.name = "causes";
61341#endif /* FREECIV_JSON_CONNECTION */
61342 e = 0;
61343 e |= DIO_BV_PUT(&dout, &field_addr, packet->causes);
61344 if (e) {
61345 log_packet_detailed("'causes' field error detected");
61346 }
61347#ifdef FREECIV_JSON_CONNECTION
61348 field_addr.name = "rmcauses";
61349#endif /* FREECIV_JSON_CONNECTION */
61350 e = 0;
61351 e |= DIO_BV_PUT(&dout, &field_addr, packet->rmcauses);
61352 if (e) {
61353 log_packet_detailed("'rmcauses' field error detected");
61354 }
61355#ifdef FREECIV_JSON_CONNECTION
61356 field_addr.name = "activity_gfx";
61357#endif /* FREECIV_JSON_CONNECTION */
61358 e = 0;
61359 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
61360 if (e) {
61361 log_packet_detailed("'activity_gfx' field error detected");
61362 }
61363#ifdef FREECIV_JSON_CONNECTION
61364 field_addr.name = "act_gfx_alt";
61365#endif /* FREECIV_JSON_CONNECTION */
61366 e = 0;
61367 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
61368 if (e) {
61369 log_packet_detailed("'act_gfx_alt' field error detected");
61370 }
61371#ifdef FREECIV_JSON_CONNECTION
61372 field_addr.name = "act_gfx_alt2";
61373#endif /* FREECIV_JSON_CONNECTION */
61374 e = 0;
61375 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
61376 if (e) {
61377 log_packet_detailed("'act_gfx_alt2' field error detected");
61378 }
61379#ifdef FREECIV_JSON_CONNECTION
61380 field_addr.name = "rmact_gfx";
61381#endif /* FREECIV_JSON_CONNECTION */
61382 e = 0;
61383 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
61384 if (e) {
61385 log_packet_detailed("'rmact_gfx' field error detected");
61386 }
61387#ifdef FREECIV_JSON_CONNECTION
61388 field_addr.name = "rmact_gfx_alt";
61389#endif /* FREECIV_JSON_CONNECTION */
61390 e = 0;
61391 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
61392 if (e) {
61393 log_packet_detailed("'rmact_gfx_alt' field error detected");
61394 }
61395#ifdef FREECIV_JSON_CONNECTION
61396 field_addr.name = "rmact_gfx_alt2";
61397#endif /* FREECIV_JSON_CONNECTION */
61398 e = 0;
61399 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
61400 if (e) {
61401 log_packet_detailed("'rmact_gfx_alt2' field error detected");
61402 }
61403#ifdef FREECIV_JSON_CONNECTION
61404 field_addr.name = "graphic_str";
61405#endif /* FREECIV_JSON_CONNECTION */
61406 e = 0;
61407 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
61408 if (e) {
61409 log_packet_detailed("'graphic_str' field error detected");
61410 }
61411#ifdef FREECIV_JSON_CONNECTION
61412 field_addr.name = "graphic_alt";
61413#endif /* FREECIV_JSON_CONNECTION */
61414 e = 0;
61415 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
61416 if (e) {
61417 log_packet_detailed("'graphic_alt' field error detected");
61418 }
61419#ifdef FREECIV_JSON_CONNECTION
61420 field_addr.name = "reqs_count";
61421#endif /* FREECIV_JSON_CONNECTION */
61422 e = 0;
61423 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
61424 if (e) {
61425 log_packet_detailed("'reqs_count' field error detected");
61426 }
61427#ifdef FREECIV_JSON_CONNECTION
61428 field_addr.name = "reqs";
61429#endif /* FREECIV_JSON_CONNECTION */
61430 e = 0;
61431 {
61432 int i;
61433
61434#ifdef FREECIV_JSON_CONNECTION
61435 /* Create the array. */
61436 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
61437
61438 /* Enter the array. */
61439 field_addr.sub_location = plocation_elem_new(0);
61440#endif /* FREECIV_JSON_CONNECTION */
61441
61442 for (i = 0; i < real_packet->reqs_count; i++) {
61443#ifdef FREECIV_JSON_CONNECTION
61444 /* Next array element. */
61445 field_addr.sub_location->number = i;
61446#endif /* FREECIV_JSON_CONNECTION */
61447
61448 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
61449 }
61450
61451#ifdef FREECIV_JSON_CONNECTION
61452 /* Exit array. */
61453 FC_FREE(field_addr.sub_location);
61454#endif /* FREECIV_JSON_CONNECTION */
61455 }
61456 if (e) {
61457 log_packet_detailed("'reqs' field error detected");
61458 }
61459#ifdef FREECIV_JSON_CONNECTION
61460 field_addr.name = "rmreqs_count";
61461#endif /* FREECIV_JSON_CONNECTION */
61462 e = 0;
61463 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rmreqs_count);
61464 if (e) {
61465 log_packet_detailed("'rmreqs_count' field error detected");
61466 }
61467#ifdef FREECIV_JSON_CONNECTION
61468 field_addr.name = "rmreqs";
61469#endif /* FREECIV_JSON_CONNECTION */
61470 e = 0;
61471 {
61472 int i;
61473
61474#ifdef FREECIV_JSON_CONNECTION
61475 /* Create the array. */
61476 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->rmreqs_count);
61477
61478 /* Enter the array. */
61479 field_addr.sub_location = plocation_elem_new(0);
61480#endif /* FREECIV_JSON_CONNECTION */
61481
61482 for (i = 0; i < real_packet->rmreqs_count; i++) {
61483#ifdef FREECIV_JSON_CONNECTION
61484 /* Next array element. */
61485 field_addr.sub_location->number = i;
61486#endif /* FREECIV_JSON_CONNECTION */
61487
61488 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs[i]);
61489 }
61490
61491#ifdef FREECIV_JSON_CONNECTION
61492 /* Exit array. */
61493 FC_FREE(field_addr.sub_location);
61494#endif /* FREECIV_JSON_CONNECTION */
61495 }
61496 if (e) {
61497 log_packet_detailed("'rmreqs' field error detected");
61498 }
61499#ifdef FREECIV_JSON_CONNECTION
61500 field_addr.name = "appearance_chance";
61501#endif /* FREECIV_JSON_CONNECTION */
61502 e = 0;
61503 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
61504 if (e) {
61505 log_packet_detailed("'appearance_chance' field error detected");
61506 }
61507#ifdef FREECIV_JSON_CONNECTION
61508 field_addr.name = "appearance_reqs_count";
61509#endif /* FREECIV_JSON_CONNECTION */
61510 e = 0;
61511 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->appearance_reqs_count);
61512 if (e) {
61513 log_packet_detailed("'appearance_reqs_count' field error detected");
61514 }
61515#ifdef FREECIV_JSON_CONNECTION
61516 field_addr.name = "appearance_reqs";
61517#endif /* FREECIV_JSON_CONNECTION */
61518 e = 0;
61519 {
61520 int i;
61521
61522#ifdef FREECIV_JSON_CONNECTION
61523 /* Create the array. */
61524 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->appearance_reqs_count);
61525
61526 /* Enter the array. */
61527 field_addr.sub_location = plocation_elem_new(0);
61528#endif /* FREECIV_JSON_CONNECTION */
61529
61530 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
61531#ifdef FREECIV_JSON_CONNECTION
61532 /* Next array element. */
61533 field_addr.sub_location->number = i;
61534#endif /* FREECIV_JSON_CONNECTION */
61535
61536 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs[i]);
61537 }
61538
61539#ifdef FREECIV_JSON_CONNECTION
61540 /* Exit array. */
61541 FC_FREE(field_addr.sub_location);
61542#endif /* FREECIV_JSON_CONNECTION */
61543 }
61544 if (e) {
61545 log_packet_detailed("'appearance_reqs' field error detected");
61546 }
61547#ifdef FREECIV_JSON_CONNECTION
61548 field_addr.name = "disappearance_chance";
61549#endif /* FREECIV_JSON_CONNECTION */
61550 e = 0;
61551 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
61552 if (e) {
61553 log_packet_detailed("'disappearance_chance' field error detected");
61554 }
61555#ifdef FREECIV_JSON_CONNECTION
61556 field_addr.name = "disappearance_reqs_count";
61557#endif /* FREECIV_JSON_CONNECTION */
61558 e = 0;
61559 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->disappearance_reqs_count);
61560 if (e) {
61561 log_packet_detailed("'disappearance_reqs_count' field error detected");
61562 }
61563#ifdef FREECIV_JSON_CONNECTION
61564 field_addr.name = "disappearance_reqs";
61565#endif /* FREECIV_JSON_CONNECTION */
61566 e = 0;
61567 {
61568 int i;
61569
61570#ifdef FREECIV_JSON_CONNECTION
61571 /* Create the array. */
61572 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->disappearance_reqs_count);
61573
61574 /* Enter the array. */
61575 field_addr.sub_location = plocation_elem_new(0);
61576#endif /* FREECIV_JSON_CONNECTION */
61577
61578 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
61579#ifdef FREECIV_JSON_CONNECTION
61580 /* Next array element. */
61581 field_addr.sub_location->number = i;
61582#endif /* FREECIV_JSON_CONNECTION */
61583
61584 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs[i]);
61585 }
61586
61587#ifdef FREECIV_JSON_CONNECTION
61588 /* Exit array. */
61589 FC_FREE(field_addr.sub_location);
61590#endif /* FREECIV_JSON_CONNECTION */
61591 }
61592 if (e) {
61593 log_packet_detailed("'disappearance_reqs' field error detected");
61594 }
61595#ifdef FREECIV_JSON_CONNECTION
61596 field_addr.name = "visibility_req";
61597#endif /* FREECIV_JSON_CONNECTION */
61598 e = 0;
61599 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
61600 if (e) {
61601 log_packet_detailed("'visibility_req' field error detected");
61602 }
61603#ifdef FREECIV_JSON_CONNECTION
61604 field_addr.name = "buildable";
61605#endif /* FREECIV_JSON_CONNECTION */
61606 e = 0;
61607 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->buildable);
61608 if (e) {
61609 log_packet_detailed("'buildable' field error detected");
61610 }
61611#ifdef FREECIV_JSON_CONNECTION
61612 field_addr.name = "generated";
61613#endif /* FREECIV_JSON_CONNECTION */
61614 e = 0;
61615 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->generated);
61616 if (e) {
61617 log_packet_detailed("'generated' field error detected");
61618 }
61619#ifdef FREECIV_JSON_CONNECTION
61620 field_addr.name = "build_time";
61621#endif /* FREECIV_JSON_CONNECTION */
61622 e = 0;
61623 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
61624 if (e) {
61625 log_packet_detailed("'build_time' field error detected");
61626 }
61627#ifdef FREECIV_JSON_CONNECTION
61628 field_addr.name = "build_time_factor";
61629#endif /* FREECIV_JSON_CONNECTION */
61630 e = 0;
61631 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
61632 if (e) {
61633 log_packet_detailed("'build_time_factor' field error detected");
61634 }
61635#ifdef FREECIV_JSON_CONNECTION
61636 field_addr.name = "removal_time";
61637#endif /* FREECIV_JSON_CONNECTION */
61638 e = 0;
61639 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
61640 if (e) {
61641 log_packet_detailed("'removal_time' field error detected");
61642 }
61643#ifdef FREECIV_JSON_CONNECTION
61644 field_addr.name = "removal_time_factor";
61645#endif /* FREECIV_JSON_CONNECTION */
61646 e = 0;
61647 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
61648 if (e) {
61649 log_packet_detailed("'removal_time_factor' field error detected");
61650 }
61651#ifdef FREECIV_JSON_CONNECTION
61652 field_addr.name = "infracost";
61653#endif /* FREECIV_JSON_CONNECTION */
61654 e = 0;
61655 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
61656 if (e) {
61657 log_packet_detailed("'infracost' field error detected");
61658 }
61659#ifdef FREECIV_JSON_CONNECTION
61660 field_addr.name = "defense_bonus";
61661#endif /* FREECIV_JSON_CONNECTION */
61662 e = 0;
61663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
61664 if (e) {
61665 log_packet_detailed("'defense_bonus' field error detected");
61666 }
61667#ifdef FREECIV_JSON_CONNECTION
61668 field_addr.name = "eus";
61669#endif /* FREECIV_JSON_CONNECTION */
61670 e = 0;
61671 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
61672 if (e) {
61673 log_packet_detailed("'eus' field error detected");
61674 }
61675#ifdef FREECIV_JSON_CONNECTION
61676 field_addr.name = "native_to";
61677#endif /* FREECIV_JSON_CONNECTION */
61678 e = 0;
61679 e |= DIO_BV_PUT(&dout, &field_addr, packet->native_to);
61680 if (e) {
61681 log_packet_detailed("'native_to' field error detected");
61682 }
61683#ifdef FREECIV_JSON_CONNECTION
61684 field_addr.name = "flags";
61685#endif /* FREECIV_JSON_CONNECTION */
61686 e = 0;
61687 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
61688 if (e) {
61689 log_packet_detailed("'flags' field error detected");
61690 }
61691#ifdef FREECIV_JSON_CONNECTION
61692 field_addr.name = "hidden_by";
61693#endif /* FREECIV_JSON_CONNECTION */
61694 e = 0;
61695 e |= DIO_BV_PUT(&dout, &field_addr, packet->hidden_by);
61696 if (e) {
61697 log_packet_detailed("'hidden_by' field error detected");
61698 }
61699#ifdef FREECIV_JSON_CONNECTION
61700 field_addr.name = "bridged_over";
61701#endif /* FREECIV_JSON_CONNECTION */
61702 e = 0;
61703 e |= DIO_BV_PUT(&dout, &field_addr, packet->bridged_over);
61704 if (e) {
61705 log_packet_detailed("'bridged_over' field error detected");
61706 }
61707#ifdef FREECIV_JSON_CONNECTION
61708 field_addr.name = "conflicts";
61709#endif /* FREECIV_JSON_CONNECTION */
61710 e = 0;
61711 e |= DIO_BV_PUT(&dout, &field_addr, packet->conflicts);
61712 if (e) {
61713 log_packet_detailed("'conflicts' field error detected");
61714 }
61715#ifdef FREECIV_JSON_CONNECTION
61716 field_addr.name = "no_aggr_near_city";
61717#endif /* FREECIV_JSON_CONNECTION */
61718 e = 0;
61719 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
61720 if (e) {
61721 log_packet_detailed("'no_aggr_near_city' field error detected");
61722 }
61723#ifdef FREECIV_JSON_CONNECTION
61724 field_addr.name = "helptext";
61725#endif /* FREECIV_JSON_CONNECTION */
61726 e = 0;
61727 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
61728 if (e) {
61729 log_packet_detailed("'helptext' field error detected");
61730 }
61731
61732#endif
61734}
61735
61737{
61738 if (!pc->used) {
61739 log_error("WARNING: trying to send data to the closed connection %s",
61741 return -1;
61742 }
61743 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet != NULL, -1,
61744 "Handler for PACKET_RULESET_EXTRA not installed");
61745 return pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet(pc, packet);
61746}
61747
61748void lsend_packet_ruleset_extra(struct conn_list *dest, const struct packet_ruleset_extra *packet)
61749{
61750 conn_list_iterate(dest, pconn) {
61753}
61754
61755#ifdef FREECIV_DELTA_PROTOCOL
61756#define hash_packet_ruleset_extra_flag_100 hash_const
61757
61758#define cmp_packet_ruleset_extra_flag_100 cmp_const
61759
61761#endif /* FREECIV_DELTA_PROTOCOL */
61762
61764{
61765#ifdef FREECIV_DELTA_PROTOCOL
61767 struct packet_ruleset_extra_flag *old;
61768 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA_FLAG;
61769#endif /* FREECIV_DELTA_PROTOCOL */
61771#ifdef FREECIV_JSON_CONNECTION
61772 struct plocation field_addr;
61773 {
61777 }
61778#endif /* FREECIV_JSON_CONNECTION */
61779
61780#ifdef FREECIV_DELTA_PROTOCOL
61781#ifdef FREECIV_JSON_CONNECTION
61782 field_addr.name = "fields";
61783#endif /* FREECIV_JSON_CONNECTION */
61784 DIO_BV_GET(&din, &field_addr, fields);
61785
61786#else /* FREECIV_DELTA_PROTOCOL */
61787#ifdef FREECIV_JSON_CONNECTION
61788 field_addr.name = "id";
61789#endif /* FREECIV_JSON_CONNECTION */
61790 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
61792 }
61793#ifdef FREECIV_JSON_CONNECTION
61794 field_addr.name = "name";
61795#endif /* FREECIV_JSON_CONNECTION */
61796 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
61798 }
61799#ifdef FREECIV_JSON_CONNECTION
61800 field_addr.name = "helptxt";
61801#endif /* FREECIV_JSON_CONNECTION */
61802 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
61804 }
61805#endif
61806 log_packet_detailed("packet_ruleset_extra_flag_100: got info about ()");
61807
61808#ifdef FREECIV_DELTA_PROTOCOL
61809 if (NULL == *hash) {
61811 NULL, NULL, NULL, free);
61812 }
61813
61814 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
61815 *real_packet = *old;
61816 } else {
61817 log_packet_detailed(" no old info");
61818 memset(real_packet, 0, sizeof(*real_packet));
61819 }
61820
61821 if (BV_ISSET(fields, 0)) {
61822 log_packet_detailed(" got field 'id'");
61823#ifdef FREECIV_JSON_CONNECTION
61824 field_addr.name = "id";
61825#endif /* FREECIV_JSON_CONNECTION */
61826 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
61828 }
61829 }
61830 if (BV_ISSET(fields, 1)) {
61831 log_packet_detailed(" got field 'name'");
61832#ifdef FREECIV_JSON_CONNECTION
61833 field_addr.name = "name";
61834#endif /* FREECIV_JSON_CONNECTION */
61835 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
61837 }
61838 }
61839 if (BV_ISSET(fields, 2)) {
61840 log_packet_detailed(" got field 'helptxt'");
61841#ifdef FREECIV_JSON_CONNECTION
61842 field_addr.name = "helptxt";
61843#endif /* FREECIV_JSON_CONNECTION */
61844 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
61846 }
61847 }
61848
61849 if (NULL == old) {
61850 old = fc_malloc(sizeof(*old));
61851 *old = *real_packet;
61852 genhash_insert(*hash, old, old);
61853 } else {
61854 *old = *real_packet;
61855 }
61856
61857#endif /* FREECIV_DELTA_PROTOCOL */
61859}
61860
61862{
61863 const struct packet_ruleset_extra_flag *real_packet = packet;
61864 int e;
61865#ifdef FREECIV_DELTA_PROTOCOL
61867 struct packet_ruleset_extra_flag *old;
61868 bool differ;
61869 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA_FLAG;
61870#endif /* FREECIV_DELTA_PROTOCOL */
61872#ifdef FREECIV_JSON_CONNECTION
61873 struct plocation field_addr;
61874 {
61878 }
61879#endif /* FREECIV_JSON_CONNECTION */
61880
61881 log_packet_detailed("packet_ruleset_extra_flag_100: sending info about ()");
61882
61883#ifdef FREECIV_DELTA_PROTOCOL
61884 if (NULL == *hash) {
61886 NULL, NULL, NULL, free);
61887 }
61888 BV_CLR_ALL(fields);
61889
61890 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
61891 old = fc_malloc(sizeof(*old));
61892 *old = *real_packet;
61893 genhash_insert(*hash, old, old);
61894 memset(old, 0, sizeof(*old));
61895 }
61896 differ = (old->id != real_packet->id);
61897 if (differ) {
61898 BV_SET(fields, 0);
61899 }
61900
61901 differ = (strcmp(old->name, real_packet->name) != 0);
61902 if (differ) {
61903 BV_SET(fields, 1);
61904 }
61905
61906 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
61907 if (differ) {
61908 BV_SET(fields, 2);
61909 }
61910
61911
61912#ifdef FREECIV_JSON_CONNECTION
61913 field_addr.name = "fields";
61914#endif /* FREECIV_JSON_CONNECTION */
61915 e = 0;
61916 e |= DIO_BV_PUT(&dout, &field_addr, fields);
61917 if (e) {
61918 log_packet_detailed("fields bitvector error detected");
61919 }
61920
61921 if (BV_ISSET(fields, 0)) {
61922 log_packet_detailed(" field 'id' has changed");
61923#ifdef FREECIV_JSON_CONNECTION
61924 field_addr.name = "id";
61925#endif /* FREECIV_JSON_CONNECTION */
61926 e = 0;
61927 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
61928 if (e) {
61929 log_packet_detailed("'id' field error detected");
61930 }
61931 }
61932 if (BV_ISSET(fields, 1)) {
61933 log_packet_detailed(" field 'name' has changed");
61934#ifdef FREECIV_JSON_CONNECTION
61935 field_addr.name = "name";
61936#endif /* FREECIV_JSON_CONNECTION */
61937 e = 0;
61938 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
61939 if (e) {
61940 log_packet_detailed("'name' field error detected");
61941 }
61942 }
61943 if (BV_ISSET(fields, 2)) {
61944 log_packet_detailed(" field 'helptxt' has changed");
61945#ifdef FREECIV_JSON_CONNECTION
61946 field_addr.name = "helptxt";
61947#endif /* FREECIV_JSON_CONNECTION */
61948 e = 0;
61949 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
61950 if (e) {
61951 log_packet_detailed("'helptxt' field error detected");
61952 }
61953 }
61954
61955 *old = *real_packet;
61956#endif /* FREECIV_DELTA_PROTOCOL */
61957#ifndef FREECIV_DELTA_PROTOCOL
61958#ifdef FREECIV_JSON_CONNECTION
61959 field_addr.name = "id";
61960#endif /* FREECIV_JSON_CONNECTION */
61961 e = 0;
61962 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
61963 if (e) {
61964 log_packet_detailed("'id' field error detected");
61965 }
61966#ifdef FREECIV_JSON_CONNECTION
61967 field_addr.name = "name";
61968#endif /* FREECIV_JSON_CONNECTION */
61969 e = 0;
61970 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
61971 if (e) {
61972 log_packet_detailed("'name' field error detected");
61973 }
61974#ifdef FREECIV_JSON_CONNECTION
61975 field_addr.name = "helptxt";
61976#endif /* FREECIV_JSON_CONNECTION */
61977 e = 0;
61978 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
61979 if (e) {
61980 log_packet_detailed("'helptxt' field error detected");
61981 }
61982
61983#endif
61985}
61986
61988{
61989 if (!pc->used) {
61990 log_error("WARNING: trying to send data to the closed connection %s",
61992 return -1;
61993 }
61994 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet != NULL, -1,
61995 "Handler for PACKET_RULESET_EXTRA_FLAG not installed");
61996 return pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet(pc, packet);
61997}
61998
62000{
62001 conn_list_iterate(dest, pconn) {
62004}
62005
62006#ifdef FREECIV_DELTA_PROTOCOL
62007#define hash_packet_ruleset_base_100 hash_const
62008
62009#define cmp_packet_ruleset_base_100 cmp_const
62010
62012#endif /* FREECIV_DELTA_PROTOCOL */
62013
62015{
62016#ifdef FREECIV_DELTA_PROTOCOL
62018 struct packet_ruleset_base *old;
62019 struct genhash **hash = pc->phs.received + PACKET_RULESET_BASE;
62020#endif /* FREECIV_DELTA_PROTOCOL */
62022#ifdef FREECIV_JSON_CONNECTION
62023 struct plocation field_addr;
62024 {
62028 }
62029#endif /* FREECIV_JSON_CONNECTION */
62030
62031#ifdef FREECIV_DELTA_PROTOCOL
62032#ifdef FREECIV_JSON_CONNECTION
62033 field_addr.name = "fields";
62034#endif /* FREECIV_JSON_CONNECTION */
62035 DIO_BV_GET(&din, &field_addr, fields);
62036
62037#else /* FREECIV_DELTA_PROTOCOL */
62038#ifdef FREECIV_JSON_CONNECTION
62039 field_addr.name = "id";
62040#endif /* FREECIV_JSON_CONNECTION */
62041 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62043 }
62044#ifdef FREECIV_JSON_CONNECTION
62045 field_addr.name = "gui_type";
62046#endif /* FREECIV_JSON_CONNECTION */
62047 {
62048 int readin;
62049
62050 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62052 }
62053 real_packet->gui_type = readin;
62054 }
62055#ifdef FREECIV_JSON_CONNECTION
62056 field_addr.name = "border_sq";
62057#endif /* FREECIV_JSON_CONNECTION */
62058 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
62059 RECEIVE_PACKET_FIELD_ERROR(border_sq);
62060 }
62061#ifdef FREECIV_JSON_CONNECTION
62062 field_addr.name = "vision_main_sq";
62063#endif /* FREECIV_JSON_CONNECTION */
62064 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
62065 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
62066 }
62067#ifdef FREECIV_JSON_CONNECTION
62068 field_addr.name = "vision_invis_sq";
62069#endif /* FREECIV_JSON_CONNECTION */
62070 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
62071 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
62072 }
62073#ifdef FREECIV_JSON_CONNECTION
62074 field_addr.name = "vision_subs_sq";
62075#endif /* FREECIV_JSON_CONNECTION */
62076 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
62077 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
62078 }
62079#endif
62080 log_packet_detailed("packet_ruleset_base_100: got info about ()");
62081
62082#ifdef FREECIV_DELTA_PROTOCOL
62083 if (NULL == *hash) {
62085 NULL, NULL, NULL, free);
62086 }
62087
62088 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62089 *real_packet = *old;
62090 } else {
62091 log_packet_detailed(" no old info");
62092 memset(real_packet, 0, sizeof(*real_packet));
62093 }
62094
62095 if (BV_ISSET(fields, 0)) {
62096 log_packet_detailed(" got field 'id'");
62097#ifdef FREECIV_JSON_CONNECTION
62098 field_addr.name = "id";
62099#endif /* FREECIV_JSON_CONNECTION */
62100 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62102 }
62103 }
62104 if (BV_ISSET(fields, 1)) {
62105 log_packet_detailed(" got field 'gui_type'");
62106#ifdef FREECIV_JSON_CONNECTION
62107 field_addr.name = "gui_type";
62108#endif /* FREECIV_JSON_CONNECTION */
62109 {
62110 int readin;
62111
62112 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62114 }
62115 real_packet->gui_type = readin;
62116 }
62117 }
62118 if (BV_ISSET(fields, 2)) {
62119 log_packet_detailed(" got field 'border_sq'");
62120#ifdef FREECIV_JSON_CONNECTION
62121 field_addr.name = "border_sq";
62122#endif /* FREECIV_JSON_CONNECTION */
62123 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
62124 RECEIVE_PACKET_FIELD_ERROR(border_sq);
62125 }
62126 }
62127 if (BV_ISSET(fields, 3)) {
62128 log_packet_detailed(" got field 'vision_main_sq'");
62129#ifdef FREECIV_JSON_CONNECTION
62130 field_addr.name = "vision_main_sq";
62131#endif /* FREECIV_JSON_CONNECTION */
62132 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
62133 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
62134 }
62135 }
62136 if (BV_ISSET(fields, 4)) {
62137 log_packet_detailed(" got field 'vision_invis_sq'");
62138#ifdef FREECIV_JSON_CONNECTION
62139 field_addr.name = "vision_invis_sq";
62140#endif /* FREECIV_JSON_CONNECTION */
62141 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
62142 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
62143 }
62144 }
62145 if (BV_ISSET(fields, 5)) {
62146 log_packet_detailed(" got field 'vision_subs_sq'");
62147#ifdef FREECIV_JSON_CONNECTION
62148 field_addr.name = "vision_subs_sq";
62149#endif /* FREECIV_JSON_CONNECTION */
62150 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
62151 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
62152 }
62153 }
62154
62155 if (NULL == old) {
62156 old = fc_malloc(sizeof(*old));
62157 *old = *real_packet;
62158 genhash_insert(*hash, old, old);
62159 } else {
62160 *old = *real_packet;
62161 }
62162
62163#endif /* FREECIV_DELTA_PROTOCOL */
62165}
62166
62167static int send_packet_ruleset_base_100(struct connection *pc, const struct packet_ruleset_base *packet)
62168{
62169 const struct packet_ruleset_base *real_packet = packet;
62170 int e;
62171#ifdef FREECIV_DELTA_PROTOCOL
62173 struct packet_ruleset_base *old;
62174 bool differ;
62175 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BASE;
62176#endif /* FREECIV_DELTA_PROTOCOL */
62178#ifdef FREECIV_JSON_CONNECTION
62179 struct plocation field_addr;
62180 {
62184 }
62185#endif /* FREECIV_JSON_CONNECTION */
62186
62187 log_packet_detailed("packet_ruleset_base_100: sending info about ()");
62188
62189#ifdef FREECIV_DELTA_PROTOCOL
62190 if (NULL == *hash) {
62192 NULL, NULL, NULL, free);
62193 }
62194 BV_CLR_ALL(fields);
62195
62196 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62197 old = fc_malloc(sizeof(*old));
62198 *old = *real_packet;
62199 genhash_insert(*hash, old, old);
62200 memset(old, 0, sizeof(*old));
62201 }
62202 differ = (old->id != real_packet->id);
62203 if (differ) {
62204 BV_SET(fields, 0);
62205 }
62206
62207 differ = (old->gui_type != real_packet->gui_type);
62208 if (differ) {
62209 BV_SET(fields, 1);
62210 }
62211
62212 differ = (old->border_sq != real_packet->border_sq);
62213 if (differ) {
62214 BV_SET(fields, 2);
62215 }
62216
62217 differ = (old->vision_main_sq != real_packet->vision_main_sq);
62218 if (differ) {
62219 BV_SET(fields, 3);
62220 }
62221
62222 differ = (old->vision_invis_sq != real_packet->vision_invis_sq);
62223 if (differ) {
62224 BV_SET(fields, 4);
62225 }
62226
62227 differ = (old->vision_subs_sq != real_packet->vision_subs_sq);
62228 if (differ) {
62229 BV_SET(fields, 5);
62230 }
62231
62232
62233#ifdef FREECIV_JSON_CONNECTION
62234 field_addr.name = "fields";
62235#endif /* FREECIV_JSON_CONNECTION */
62236 e = 0;
62237 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62238 if (e) {
62239 log_packet_detailed("fields bitvector error detected");
62240 }
62241
62242 if (BV_ISSET(fields, 0)) {
62243 log_packet_detailed(" field 'id' has changed");
62244#ifdef FREECIV_JSON_CONNECTION
62245 field_addr.name = "id";
62246#endif /* FREECIV_JSON_CONNECTION */
62247 e = 0;
62248 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62249 if (e) {
62250 log_packet_detailed("'id' field error detected");
62251 }
62252 }
62253 if (BV_ISSET(fields, 1)) {
62254 log_packet_detailed(" field 'gui_type' has changed");
62255#ifdef FREECIV_JSON_CONNECTION
62256 field_addr.name = "gui_type";
62257#endif /* FREECIV_JSON_CONNECTION */
62258 e = 0;
62259 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
62260 if (e) {
62261 log_packet_detailed("'gui_type' field error detected");
62262 }
62263 }
62264 if (BV_ISSET(fields, 2)) {
62265 log_packet_detailed(" field 'border_sq' has changed");
62266#ifdef FREECIV_JSON_CONNECTION
62267 field_addr.name = "border_sq";
62268#endif /* FREECIV_JSON_CONNECTION */
62269 e = 0;
62270 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
62271 if (e) {
62272 log_packet_detailed("'border_sq' field error detected");
62273 }
62274 }
62275 if (BV_ISSET(fields, 3)) {
62276 log_packet_detailed(" field 'vision_main_sq' has changed");
62277#ifdef FREECIV_JSON_CONNECTION
62278 field_addr.name = "vision_main_sq";
62279#endif /* FREECIV_JSON_CONNECTION */
62280 e = 0;
62281 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
62282 if (e) {
62283 log_packet_detailed("'vision_main_sq' field error detected");
62284 }
62285 }
62286 if (BV_ISSET(fields, 4)) {
62287 log_packet_detailed(" field 'vision_invis_sq' has changed");
62288#ifdef FREECIV_JSON_CONNECTION
62289 field_addr.name = "vision_invis_sq";
62290#endif /* FREECIV_JSON_CONNECTION */
62291 e = 0;
62292 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
62293 if (e) {
62294 log_packet_detailed("'vision_invis_sq' field error detected");
62295 }
62296 }
62297 if (BV_ISSET(fields, 5)) {
62298 log_packet_detailed(" field 'vision_subs_sq' has changed");
62299#ifdef FREECIV_JSON_CONNECTION
62300 field_addr.name = "vision_subs_sq";
62301#endif /* FREECIV_JSON_CONNECTION */
62302 e = 0;
62303 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
62304 if (e) {
62305 log_packet_detailed("'vision_subs_sq' field error detected");
62306 }
62307 }
62308
62309 *old = *real_packet;
62310#endif /* FREECIV_DELTA_PROTOCOL */
62311#ifndef FREECIV_DELTA_PROTOCOL
62312#ifdef FREECIV_JSON_CONNECTION
62313 field_addr.name = "id";
62314#endif /* FREECIV_JSON_CONNECTION */
62315 e = 0;
62316 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62317 if (e) {
62318 log_packet_detailed("'id' field error detected");
62319 }
62320#ifdef FREECIV_JSON_CONNECTION
62321 field_addr.name = "gui_type";
62322#endif /* FREECIV_JSON_CONNECTION */
62323 e = 0;
62324 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
62325 if (e) {
62326 log_packet_detailed("'gui_type' field error detected");
62327 }
62328#ifdef FREECIV_JSON_CONNECTION
62329 field_addr.name = "border_sq";
62330#endif /* FREECIV_JSON_CONNECTION */
62331 e = 0;
62332 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
62333 if (e) {
62334 log_packet_detailed("'border_sq' field error detected");
62335 }
62336#ifdef FREECIV_JSON_CONNECTION
62337 field_addr.name = "vision_main_sq";
62338#endif /* FREECIV_JSON_CONNECTION */
62339 e = 0;
62340 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
62341 if (e) {
62342 log_packet_detailed("'vision_main_sq' field error detected");
62343 }
62344#ifdef FREECIV_JSON_CONNECTION
62345 field_addr.name = "vision_invis_sq";
62346#endif /* FREECIV_JSON_CONNECTION */
62347 e = 0;
62348 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
62349 if (e) {
62350 log_packet_detailed("'vision_invis_sq' field error detected");
62351 }
62352#ifdef FREECIV_JSON_CONNECTION
62353 field_addr.name = "vision_subs_sq";
62354#endif /* FREECIV_JSON_CONNECTION */
62355 e = 0;
62356 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
62357 if (e) {
62358 log_packet_detailed("'vision_subs_sq' field error detected");
62359 }
62360
62361#endif
62363}
62364
62366{
62367 if (!pc->used) {
62368 log_error("WARNING: trying to send data to the closed connection %s",
62370 return -1;
62371 }
62372 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BASE].packet != NULL, -1,
62373 "Handler for PACKET_RULESET_BASE not installed");
62374 return pc->phs.handlers->send[PACKET_RULESET_BASE].packet(pc, packet);
62375}
62376
62377void lsend_packet_ruleset_base(struct conn_list *dest, const struct packet_ruleset_base *packet)
62378{
62379 conn_list_iterate(dest, pconn) {
62382}
62383
62384#ifdef FREECIV_DELTA_PROTOCOL
62385#define hash_packet_ruleset_road_100 hash_const
62386
62387#define cmp_packet_ruleset_road_100 cmp_const
62388
62390#endif /* FREECIV_DELTA_PROTOCOL */
62391
62393{
62394#ifdef FREECIV_DELTA_PROTOCOL
62396 struct packet_ruleset_road *old;
62397 struct genhash **hash = pc->phs.received + PACKET_RULESET_ROAD;
62398#endif /* FREECIV_DELTA_PROTOCOL */
62400#ifdef FREECIV_JSON_CONNECTION
62401 struct plocation field_addr;
62402 {
62406 }
62407#endif /* FREECIV_JSON_CONNECTION */
62408
62409#ifdef FREECIV_DELTA_PROTOCOL
62410#ifdef FREECIV_JSON_CONNECTION
62411 field_addr.name = "fields";
62412#endif /* FREECIV_JSON_CONNECTION */
62413 DIO_BV_GET(&din, &field_addr, fields);
62414
62415#else /* FREECIV_DELTA_PROTOCOL */
62416#ifdef FREECIV_JSON_CONNECTION
62417 field_addr.name = "id";
62418#endif /* FREECIV_JSON_CONNECTION */
62419 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62421 }
62422#ifdef FREECIV_JSON_CONNECTION
62423 field_addr.name = "gui_type";
62424#endif /* FREECIV_JSON_CONNECTION */
62425 {
62426 int readin;
62427
62428 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62430 }
62431 real_packet->gui_type = readin;
62432 }
62433#ifdef FREECIV_JSON_CONNECTION
62434 field_addr.name = "first_reqs_count";
62435#endif /* FREECIV_JSON_CONNECTION */
62436 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->first_reqs_count)) {
62437 RECEIVE_PACKET_FIELD_ERROR(first_reqs_count);
62438 }
62439#ifdef FREECIV_JSON_CONNECTION
62440 field_addr.name = "first_reqs";
62441#endif /* FREECIV_JSON_CONNECTION */
62442 if (real_packet->first_reqs_count > MAX_NUM_REQS) {
62443 RECEIVE_PACKET_FIELD_ERROR(first_reqs, ": truncation array");
62444 }
62445 {
62446 int i;
62447
62448#ifdef FREECIV_JSON_CONNECTION
62449 /* Enter array. */
62450 field_addr.sub_location = plocation_elem_new(0);
62451#endif /* FREECIV_JSON_CONNECTION */
62452
62453 for (i = 0; i < real_packet->first_reqs_count; i++) {
62454#ifdef FREECIV_JSON_CONNECTION
62455 field_addr.sub_location->number = i;
62456#endif /* FREECIV_JSON_CONNECTION */
62457
62458 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs[i])) {
62459 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
62460 }
62461 }
62462
62463#ifdef FREECIV_JSON_CONNECTION
62464 /* Exit array. */
62465 FC_FREE(field_addr.sub_location);
62466#endif /* FREECIV_JSON_CONNECTION */
62467 }
62468#ifdef FREECIV_JSON_CONNECTION
62469 field_addr.name = "move_cost";
62470#endif /* FREECIV_JSON_CONNECTION */
62471 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
62472 RECEIVE_PACKET_FIELD_ERROR(move_cost);
62473 }
62474#ifdef FREECIV_JSON_CONNECTION
62475 field_addr.name = "move_mode";
62476#endif /* FREECIV_JSON_CONNECTION */
62477 {
62478 int readin;
62479
62480 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62481 RECEIVE_PACKET_FIELD_ERROR(move_mode);
62482 }
62483 real_packet->move_mode = readin;
62484 }
62485#ifdef FREECIV_JSON_CONNECTION
62486 field_addr.name = "tile_incr_const";
62487#endif /* FREECIV_JSON_CONNECTION */
62488 {
62489 int i;
62490
62491#ifdef FREECIV_JSON_CONNECTION
62492 /* Enter array. */
62493 field_addr.sub_location = plocation_elem_new(0);
62494#endif /* FREECIV_JSON_CONNECTION */
62495
62496 for (i = 0; i < O_LAST; i++) {
62497#ifdef FREECIV_JSON_CONNECTION
62498 field_addr.sub_location->number = i;
62499#endif /* FREECIV_JSON_CONNECTION */
62500
62501 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
62502 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
62503 }
62504 }
62505
62506#ifdef FREECIV_JSON_CONNECTION
62507 /* Exit array. */
62508 FC_FREE(field_addr.sub_location);
62509#endif /* FREECIV_JSON_CONNECTION */
62510 }
62511#ifdef FREECIV_JSON_CONNECTION
62512 field_addr.name = "tile_incr";
62513#endif /* FREECIV_JSON_CONNECTION */
62514 {
62515 int i;
62516
62517#ifdef FREECIV_JSON_CONNECTION
62518 /* Enter array. */
62519 field_addr.sub_location = plocation_elem_new(0);
62520#endif /* FREECIV_JSON_CONNECTION */
62521
62522 for (i = 0; i < O_LAST; i++) {
62523#ifdef FREECIV_JSON_CONNECTION
62524 field_addr.sub_location->number = i;
62525#endif /* FREECIV_JSON_CONNECTION */
62526
62527 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
62528 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
62529 }
62530 }
62531
62532#ifdef FREECIV_JSON_CONNECTION
62533 /* Exit array. */
62534 FC_FREE(field_addr.sub_location);
62535#endif /* FREECIV_JSON_CONNECTION */
62536 }
62537#ifdef FREECIV_JSON_CONNECTION
62538 field_addr.name = "tile_bonus";
62539#endif /* FREECIV_JSON_CONNECTION */
62540 {
62541 int i;
62542
62543#ifdef FREECIV_JSON_CONNECTION
62544 /* Enter array. */
62545 field_addr.sub_location = plocation_elem_new(0);
62546#endif /* FREECIV_JSON_CONNECTION */
62547
62548 for (i = 0; i < O_LAST; i++) {
62549#ifdef FREECIV_JSON_CONNECTION
62550 field_addr.sub_location->number = i;
62551#endif /* FREECIV_JSON_CONNECTION */
62552
62553 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
62554 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
62555 }
62556 }
62557
62558#ifdef FREECIV_JSON_CONNECTION
62559 /* Exit array. */
62560 FC_FREE(field_addr.sub_location);
62561#endif /* FREECIV_JSON_CONNECTION */
62562 }
62563#ifdef FREECIV_JSON_CONNECTION
62564 field_addr.name = "compat";
62565#endif /* FREECIV_JSON_CONNECTION */
62566 {
62567 int readin;
62568
62569 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62571 }
62572 real_packet->compat = readin;
62573 }
62574#ifdef FREECIV_JSON_CONNECTION
62575 field_addr.name = "integrates";
62576#endif /* FREECIV_JSON_CONNECTION */
62577 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
62578 RECEIVE_PACKET_FIELD_ERROR(integrates);
62579 }
62580#ifdef FREECIV_JSON_CONNECTION
62581 field_addr.name = "flags";
62582#endif /* FREECIV_JSON_CONNECTION */
62583 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
62585 }
62586#endif
62587 log_packet_detailed("packet_ruleset_road_100: got info about ()");
62588
62589#ifdef FREECIV_DELTA_PROTOCOL
62590 if (NULL == *hash) {
62592 NULL, NULL, NULL, free);
62593 }
62594
62595 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62596 *real_packet = *old;
62597 } else {
62598 log_packet_detailed(" no old info");
62599 memset(real_packet, 0, sizeof(*real_packet));
62600 }
62601
62602 if (BV_ISSET(fields, 0)) {
62603 log_packet_detailed(" got field 'id'");
62604#ifdef FREECIV_JSON_CONNECTION
62605 field_addr.name = "id";
62606#endif /* FREECIV_JSON_CONNECTION */
62607 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62609 }
62610 }
62611 if (BV_ISSET(fields, 1)) {
62612 log_packet_detailed(" got field 'gui_type'");
62613#ifdef FREECIV_JSON_CONNECTION
62614 field_addr.name = "gui_type";
62615#endif /* FREECIV_JSON_CONNECTION */
62616 {
62617 int readin;
62618
62619 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62621 }
62622 real_packet->gui_type = readin;
62623 }
62624 }
62625 if (BV_ISSET(fields, 2)) {
62626 log_packet_detailed(" got field 'first_reqs_count'");
62627#ifdef FREECIV_JSON_CONNECTION
62628 field_addr.name = "first_reqs_count";
62629#endif /* FREECIV_JSON_CONNECTION */
62630 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->first_reqs_count)) {
62631 RECEIVE_PACKET_FIELD_ERROR(first_reqs_count);
62632 }
62633 }
62634 if (BV_ISSET(fields, 3)) {
62635 log_packet_detailed(" got field 'first_reqs'");
62636#ifdef FREECIV_JSON_CONNECTION
62637 field_addr.name = "first_reqs";
62638#endif /* FREECIV_JSON_CONNECTION */
62639 if (real_packet->first_reqs_count > MAX_NUM_REQS) {
62640 RECEIVE_PACKET_FIELD_ERROR(first_reqs, ": truncation array");
62641 }
62642 {
62643 int i;
62644
62645#ifdef FREECIV_JSON_CONNECTION
62646 /* Enter array. */
62647 field_addr.sub_location = plocation_elem_new(0);
62648#endif /* FREECIV_JSON_CONNECTION */
62649
62650 for (i = 0; i < real_packet->first_reqs_count; i++) {
62651#ifdef FREECIV_JSON_CONNECTION
62652 field_addr.sub_location->number = i;
62653#endif /* FREECIV_JSON_CONNECTION */
62654
62655 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs[i])) {
62656 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
62657 }
62658 }
62659
62660#ifdef FREECIV_JSON_CONNECTION
62661 /* Exit array. */
62662 FC_FREE(field_addr.sub_location);
62663#endif /* FREECIV_JSON_CONNECTION */
62664 }
62665 }
62666 if (BV_ISSET(fields, 4)) {
62667 log_packet_detailed(" got field 'move_cost'");
62668#ifdef FREECIV_JSON_CONNECTION
62669 field_addr.name = "move_cost";
62670#endif /* FREECIV_JSON_CONNECTION */
62671 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
62672 RECEIVE_PACKET_FIELD_ERROR(move_cost);
62673 }
62674 }
62675 if (BV_ISSET(fields, 5)) {
62676 log_packet_detailed(" got field 'move_mode'");
62677#ifdef FREECIV_JSON_CONNECTION
62678 field_addr.name = "move_mode";
62679#endif /* FREECIV_JSON_CONNECTION */
62680 {
62681 int readin;
62682
62683 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62684 RECEIVE_PACKET_FIELD_ERROR(move_mode);
62685 }
62686 real_packet->move_mode = readin;
62687 }
62688 }
62689 if (BV_ISSET(fields, 6)) {
62690 log_packet_detailed(" got field 'tile_incr_const'");
62691#ifdef FREECIV_JSON_CONNECTION
62692 field_addr.name = "tile_incr_const";
62693#endif /* FREECIV_JSON_CONNECTION */
62694 {
62695 int i;
62696
62697#ifdef FREECIV_JSON_CONNECTION
62698 /* Enter array. */
62699 field_addr.sub_location = plocation_elem_new(0);
62700#endif /* FREECIV_JSON_CONNECTION */
62701
62702 for (i = 0; i < O_LAST; i++) {
62703#ifdef FREECIV_JSON_CONNECTION
62704 field_addr.sub_location->number = i;
62705#endif /* FREECIV_JSON_CONNECTION */
62706
62707 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
62708 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
62709 }
62710 }
62711
62712#ifdef FREECIV_JSON_CONNECTION
62713 /* Exit array. */
62714 FC_FREE(field_addr.sub_location);
62715#endif /* FREECIV_JSON_CONNECTION */
62716 }
62717 }
62718 if (BV_ISSET(fields, 7)) {
62719 log_packet_detailed(" got field 'tile_incr'");
62720#ifdef FREECIV_JSON_CONNECTION
62721 field_addr.name = "tile_incr";
62722#endif /* FREECIV_JSON_CONNECTION */
62723 {
62724 int i;
62725
62726#ifdef FREECIV_JSON_CONNECTION
62727 /* Enter array. */
62728 field_addr.sub_location = plocation_elem_new(0);
62729#endif /* FREECIV_JSON_CONNECTION */
62730
62731 for (i = 0; i < O_LAST; i++) {
62732#ifdef FREECIV_JSON_CONNECTION
62733 field_addr.sub_location->number = i;
62734#endif /* FREECIV_JSON_CONNECTION */
62735
62736 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
62737 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
62738 }
62739 }
62740
62741#ifdef FREECIV_JSON_CONNECTION
62742 /* Exit array. */
62743 FC_FREE(field_addr.sub_location);
62744#endif /* FREECIV_JSON_CONNECTION */
62745 }
62746 }
62747 if (BV_ISSET(fields, 8)) {
62748 log_packet_detailed(" got field 'tile_bonus'");
62749#ifdef FREECIV_JSON_CONNECTION
62750 field_addr.name = "tile_bonus";
62751#endif /* FREECIV_JSON_CONNECTION */
62752 {
62753 int i;
62754
62755#ifdef FREECIV_JSON_CONNECTION
62756 /* Enter array. */
62757 field_addr.sub_location = plocation_elem_new(0);
62758#endif /* FREECIV_JSON_CONNECTION */
62759
62760 for (i = 0; i < O_LAST; i++) {
62761#ifdef FREECIV_JSON_CONNECTION
62762 field_addr.sub_location->number = i;
62763#endif /* FREECIV_JSON_CONNECTION */
62764
62765 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
62766 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
62767 }
62768 }
62769
62770#ifdef FREECIV_JSON_CONNECTION
62771 /* Exit array. */
62772 FC_FREE(field_addr.sub_location);
62773#endif /* FREECIV_JSON_CONNECTION */
62774 }
62775 }
62776 if (BV_ISSET(fields, 9)) {
62777 log_packet_detailed(" got field 'compat'");
62778#ifdef FREECIV_JSON_CONNECTION
62779 field_addr.name = "compat";
62780#endif /* FREECIV_JSON_CONNECTION */
62781 {
62782 int readin;
62783
62784 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
62786 }
62787 real_packet->compat = readin;
62788 }
62789 }
62790 if (BV_ISSET(fields, 10)) {
62791 log_packet_detailed(" got field 'integrates'");
62792#ifdef FREECIV_JSON_CONNECTION
62793 field_addr.name = "integrates";
62794#endif /* FREECIV_JSON_CONNECTION */
62795 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
62796 RECEIVE_PACKET_FIELD_ERROR(integrates);
62797 }
62798 }
62799 if (BV_ISSET(fields, 11)) {
62800 log_packet_detailed(" got field 'flags'");
62801#ifdef FREECIV_JSON_CONNECTION
62802 field_addr.name = "flags";
62803#endif /* FREECIV_JSON_CONNECTION */
62804 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
62806 }
62807 }
62808
62809 if (NULL == old) {
62810 old = fc_malloc(sizeof(*old));
62811 *old = *real_packet;
62812 genhash_insert(*hash, old, old);
62813 } else {
62814 *old = *real_packet;
62815 }
62816
62817#endif /* FREECIV_DELTA_PROTOCOL */
62819}
62820
62821static int send_packet_ruleset_road_100(struct connection *pc, const struct packet_ruleset_road *packet)
62822{
62823 const struct packet_ruleset_road *real_packet = packet;
62824 int e;
62825#ifdef FREECIV_DELTA_PROTOCOL
62827 struct packet_ruleset_road *old;
62828 bool differ;
62829 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ROAD;
62830#endif /* FREECIV_DELTA_PROTOCOL */
62832#ifdef FREECIV_JSON_CONNECTION
62833 struct plocation field_addr;
62834 {
62838 }
62839#endif /* FREECIV_JSON_CONNECTION */
62840
62841 log_packet_detailed("packet_ruleset_road_100: sending info about ()");
62842
62843#ifdef FREECIV_DELTA_PROTOCOL
62844 if (NULL == *hash) {
62846 NULL, NULL, NULL, free);
62847 }
62848 BV_CLR_ALL(fields);
62849
62850 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62851 old = fc_malloc(sizeof(*old));
62852 *old = *real_packet;
62853 genhash_insert(*hash, old, old);
62854 memset(old, 0, sizeof(*old));
62855 }
62856 differ = (old->id != real_packet->id);
62857 if (differ) {
62858 BV_SET(fields, 0);
62859 }
62860
62861 differ = (old->gui_type != real_packet->gui_type);
62862 if (differ) {
62863 BV_SET(fields, 1);
62864 }
62865
62866 differ = (old->first_reqs_count != real_packet->first_reqs_count);
62867 if (differ) {
62868 BV_SET(fields, 2);
62869 }
62870
62871 differ = (old->first_reqs_count != real_packet->first_reqs_count);
62872 if (!differ) {
62873 int i;
62874
62875 for (i = 0; i < real_packet->first_reqs_count; i++) {
62876 differ = !are_requirements_equal(&old->first_reqs[i], &real_packet->first_reqs[i]);
62877 if (differ) {
62878 break;
62879 }
62880 }
62881 }
62882 if (differ) {
62883 BV_SET(fields, 3);
62884 }
62885
62886 differ = (old->move_cost != real_packet->move_cost);
62887 if (differ) {
62888 BV_SET(fields, 4);
62889 }
62890
62891 differ = (old->move_mode != real_packet->move_mode);
62892 if (differ) {
62893 BV_SET(fields, 5);
62894 }
62895
62896 differ = FALSE;
62897 {
62898 int i;
62899
62900 for (i = 0; i < O_LAST; i++) {
62901 differ = (old->tile_incr_const[i] != real_packet->tile_incr_const[i]);
62902 if (differ) {
62903 break;
62904 }
62905 }
62906 }
62907 if (differ) {
62908 BV_SET(fields, 6);
62909 }
62910
62911 differ = FALSE;
62912 {
62913 int i;
62914
62915 for (i = 0; i < O_LAST; i++) {
62916 differ = (old->tile_incr[i] != real_packet->tile_incr[i]);
62917 if (differ) {
62918 break;
62919 }
62920 }
62921 }
62922 if (differ) {
62923 BV_SET(fields, 7);
62924 }
62925
62926 differ = FALSE;
62927 {
62928 int i;
62929
62930 for (i = 0; i < O_LAST; i++) {
62931 differ = (old->tile_bonus[i] != real_packet->tile_bonus[i]);
62932 if (differ) {
62933 break;
62934 }
62935 }
62936 }
62937 if (differ) {
62938 BV_SET(fields, 8);
62939 }
62940
62941 differ = (old->compat != real_packet->compat);
62942 if (differ) {
62943 BV_SET(fields, 9);
62944 }
62945
62946 differ = !BV_ARE_EQUAL(old->integrates, real_packet->integrates);
62947 if (differ) {
62948 BV_SET(fields, 10);
62949 }
62950
62951 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
62952 if (differ) {
62953 BV_SET(fields, 11);
62954 }
62955
62956
62957#ifdef FREECIV_JSON_CONNECTION
62958 field_addr.name = "fields";
62959#endif /* FREECIV_JSON_CONNECTION */
62960 e = 0;
62961 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62962 if (e) {
62963 log_packet_detailed("fields bitvector error detected");
62964 }
62965
62966 if (BV_ISSET(fields, 0)) {
62967 log_packet_detailed(" field 'id' has changed");
62968#ifdef FREECIV_JSON_CONNECTION
62969 field_addr.name = "id";
62970#endif /* FREECIV_JSON_CONNECTION */
62971 e = 0;
62972 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62973 if (e) {
62974 log_packet_detailed("'id' field error detected");
62975 }
62976 }
62977 if (BV_ISSET(fields, 1)) {
62978 log_packet_detailed(" field 'gui_type' has changed");
62979#ifdef FREECIV_JSON_CONNECTION
62980 field_addr.name = "gui_type";
62981#endif /* FREECIV_JSON_CONNECTION */
62982 e = 0;
62983 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
62984 if (e) {
62985 log_packet_detailed("'gui_type' field error detected");
62986 }
62987 }
62988 if (BV_ISSET(fields, 2)) {
62989 log_packet_detailed(" field 'first_reqs_count' has changed");
62990#ifdef FREECIV_JSON_CONNECTION
62991 field_addr.name = "first_reqs_count";
62992#endif /* FREECIV_JSON_CONNECTION */
62993 e = 0;
62994 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->first_reqs_count);
62995 if (e) {
62996 log_packet_detailed("'first_reqs_count' field error detected");
62997 }
62998 }
62999 if (BV_ISSET(fields, 3)) {
63000 log_packet_detailed(" field 'first_reqs' has changed");
63001#ifdef FREECIV_JSON_CONNECTION
63002 field_addr.name = "first_reqs";
63003#endif /* FREECIV_JSON_CONNECTION */
63004 e = 0;
63005 {
63006 int i;
63007
63008#ifdef FREECIV_JSON_CONNECTION
63009 /* Create the array. */
63010 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->first_reqs_count);
63011
63012 /* Enter the array. */
63013 field_addr.sub_location = plocation_elem_new(0);
63014#endif /* FREECIV_JSON_CONNECTION */
63015
63016 for (i = 0; i < real_packet->first_reqs_count; i++) {
63017#ifdef FREECIV_JSON_CONNECTION
63018 /* Next array element. */
63019 field_addr.sub_location->number = i;
63020#endif /* FREECIV_JSON_CONNECTION */
63021
63022 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs[i]);
63023 }
63024
63025#ifdef FREECIV_JSON_CONNECTION
63026 /* Exit array. */
63027 FC_FREE(field_addr.sub_location);
63028#endif /* FREECIV_JSON_CONNECTION */
63029 }
63030 if (e) {
63031 log_packet_detailed("'first_reqs' field error detected");
63032 }
63033 }
63034 if (BV_ISSET(fields, 4)) {
63035 log_packet_detailed(" field 'move_cost' has changed");
63036#ifdef FREECIV_JSON_CONNECTION
63037 field_addr.name = "move_cost";
63038#endif /* FREECIV_JSON_CONNECTION */
63039 e = 0;
63040 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
63041 if (e) {
63042 log_packet_detailed("'move_cost' field error detected");
63043 }
63044 }
63045 if (BV_ISSET(fields, 5)) {
63046 log_packet_detailed(" field 'move_mode' has changed");
63047#ifdef FREECIV_JSON_CONNECTION
63048 field_addr.name = "move_mode";
63049#endif /* FREECIV_JSON_CONNECTION */
63050 e = 0;
63051 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
63052 if (e) {
63053 log_packet_detailed("'move_mode' field error detected");
63054 }
63055 }
63056 if (BV_ISSET(fields, 6)) {
63057 log_packet_detailed(" field 'tile_incr_const' has changed");
63058#ifdef FREECIV_JSON_CONNECTION
63059 field_addr.name = "tile_incr_const";
63060#endif /* FREECIV_JSON_CONNECTION */
63061 e = 0;
63062 {
63063 int i;
63064
63065#ifdef FREECIV_JSON_CONNECTION
63066 /* Create the array. */
63067 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
63068
63069 /* Enter the array. */
63070 field_addr.sub_location = plocation_elem_new(0);
63071#endif /* FREECIV_JSON_CONNECTION */
63072
63073 for (i = 0; i < O_LAST; i++) {
63074#ifdef FREECIV_JSON_CONNECTION
63075 /* Next array element. */
63076 field_addr.sub_location->number = i;
63077#endif /* FREECIV_JSON_CONNECTION */
63078
63079 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
63080 }
63081
63082#ifdef FREECIV_JSON_CONNECTION
63083 /* Exit array. */
63084 FC_FREE(field_addr.sub_location);
63085#endif /* FREECIV_JSON_CONNECTION */
63086 }
63087 if (e) {
63088 log_packet_detailed("'tile_incr_const' field error detected");
63089 }
63090 }
63091 if (BV_ISSET(fields, 7)) {
63092 log_packet_detailed(" field 'tile_incr' has changed");
63093#ifdef FREECIV_JSON_CONNECTION
63094 field_addr.name = "tile_incr";
63095#endif /* FREECIV_JSON_CONNECTION */
63096 e = 0;
63097 {
63098 int i;
63099
63100#ifdef FREECIV_JSON_CONNECTION
63101 /* Create the array. */
63102 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
63103
63104 /* Enter the array. */
63105 field_addr.sub_location = plocation_elem_new(0);
63106#endif /* FREECIV_JSON_CONNECTION */
63107
63108 for (i = 0; i < O_LAST; i++) {
63109#ifdef FREECIV_JSON_CONNECTION
63110 /* Next array element. */
63111 field_addr.sub_location->number = i;
63112#endif /* FREECIV_JSON_CONNECTION */
63113
63114 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
63115 }
63116
63117#ifdef FREECIV_JSON_CONNECTION
63118 /* Exit array. */
63119 FC_FREE(field_addr.sub_location);
63120#endif /* FREECIV_JSON_CONNECTION */
63121 }
63122 if (e) {
63123 log_packet_detailed("'tile_incr' field error detected");
63124 }
63125 }
63126 if (BV_ISSET(fields, 8)) {
63127 log_packet_detailed(" field 'tile_bonus' has changed");
63128#ifdef FREECIV_JSON_CONNECTION
63129 field_addr.name = "tile_bonus";
63130#endif /* FREECIV_JSON_CONNECTION */
63131 e = 0;
63132 {
63133 int i;
63134
63135#ifdef FREECIV_JSON_CONNECTION
63136 /* Create the array. */
63137 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
63138
63139 /* Enter the array. */
63140 field_addr.sub_location = plocation_elem_new(0);
63141#endif /* FREECIV_JSON_CONNECTION */
63142
63143 for (i = 0; i < O_LAST; i++) {
63144#ifdef FREECIV_JSON_CONNECTION
63145 /* Next array element. */
63146 field_addr.sub_location->number = i;
63147#endif /* FREECIV_JSON_CONNECTION */
63148
63149 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
63150 }
63151
63152#ifdef FREECIV_JSON_CONNECTION
63153 /* Exit array. */
63154 FC_FREE(field_addr.sub_location);
63155#endif /* FREECIV_JSON_CONNECTION */
63156 }
63157 if (e) {
63158 log_packet_detailed("'tile_bonus' field error detected");
63159 }
63160 }
63161 if (BV_ISSET(fields, 9)) {
63162 log_packet_detailed(" field 'compat' has changed");
63163#ifdef FREECIV_JSON_CONNECTION
63164 field_addr.name = "compat";
63165#endif /* FREECIV_JSON_CONNECTION */
63166 e = 0;
63167 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
63168 if (e) {
63169 log_packet_detailed("'compat' field error detected");
63170 }
63171 }
63172 if (BV_ISSET(fields, 10)) {
63173 log_packet_detailed(" field 'integrates' has changed");
63174#ifdef FREECIV_JSON_CONNECTION
63175 field_addr.name = "integrates";
63176#endif /* FREECIV_JSON_CONNECTION */
63177 e = 0;
63178 e |= DIO_BV_PUT(&dout, &field_addr, packet->integrates);
63179 if (e) {
63180 log_packet_detailed("'integrates' field error detected");
63181 }
63182 }
63183 if (BV_ISSET(fields, 11)) {
63184 log_packet_detailed(" field 'flags' has changed");
63185#ifdef FREECIV_JSON_CONNECTION
63186 field_addr.name = "flags";
63187#endif /* FREECIV_JSON_CONNECTION */
63188 e = 0;
63189 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
63190 if (e) {
63191 log_packet_detailed("'flags' field error detected");
63192 }
63193 }
63194
63195 *old = *real_packet;
63196#endif /* FREECIV_DELTA_PROTOCOL */
63197#ifndef FREECIV_DELTA_PROTOCOL
63198#ifdef FREECIV_JSON_CONNECTION
63199 field_addr.name = "id";
63200#endif /* FREECIV_JSON_CONNECTION */
63201 e = 0;
63202 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
63203 if (e) {
63204 log_packet_detailed("'id' field error detected");
63205 }
63206#ifdef FREECIV_JSON_CONNECTION
63207 field_addr.name = "gui_type";
63208#endif /* FREECIV_JSON_CONNECTION */
63209 e = 0;
63210 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
63211 if (e) {
63212 log_packet_detailed("'gui_type' field error detected");
63213 }
63214#ifdef FREECIV_JSON_CONNECTION
63215 field_addr.name = "first_reqs_count";
63216#endif /* FREECIV_JSON_CONNECTION */
63217 e = 0;
63218 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->first_reqs_count);
63219 if (e) {
63220 log_packet_detailed("'first_reqs_count' field error detected");
63221 }
63222#ifdef FREECIV_JSON_CONNECTION
63223 field_addr.name = "first_reqs";
63224#endif /* FREECIV_JSON_CONNECTION */
63225 e = 0;
63226 {
63227 int i;
63228
63229#ifdef FREECIV_JSON_CONNECTION
63230 /* Create the array. */
63231 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->first_reqs_count);
63232
63233 /* Enter the array. */
63234 field_addr.sub_location = plocation_elem_new(0);
63235#endif /* FREECIV_JSON_CONNECTION */
63236
63237 for (i = 0; i < real_packet->first_reqs_count; i++) {
63238#ifdef FREECIV_JSON_CONNECTION
63239 /* Next array element. */
63240 field_addr.sub_location->number = i;
63241#endif /* FREECIV_JSON_CONNECTION */
63242
63243 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs[i]);
63244 }
63245
63246#ifdef FREECIV_JSON_CONNECTION
63247 /* Exit array. */
63248 FC_FREE(field_addr.sub_location);
63249#endif /* FREECIV_JSON_CONNECTION */
63250 }
63251 if (e) {
63252 log_packet_detailed("'first_reqs' field error detected");
63253 }
63254#ifdef FREECIV_JSON_CONNECTION
63255 field_addr.name = "move_cost";
63256#endif /* FREECIV_JSON_CONNECTION */
63257 e = 0;
63258 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
63259 if (e) {
63260 log_packet_detailed("'move_cost' field error detected");
63261 }
63262#ifdef FREECIV_JSON_CONNECTION
63263 field_addr.name = "move_mode";
63264#endif /* FREECIV_JSON_CONNECTION */
63265 e = 0;
63266 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
63267 if (e) {
63268 log_packet_detailed("'move_mode' field error detected");
63269 }
63270#ifdef FREECIV_JSON_CONNECTION
63271 field_addr.name = "tile_incr_const";
63272#endif /* FREECIV_JSON_CONNECTION */
63273 e = 0;
63274 {
63275 int i;
63276
63277#ifdef FREECIV_JSON_CONNECTION
63278 /* Create the array. */
63279 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
63280
63281 /* Enter the array. */
63282 field_addr.sub_location = plocation_elem_new(0);
63283#endif /* FREECIV_JSON_CONNECTION */
63284
63285 for (i = 0; i < O_LAST; i++) {
63286#ifdef FREECIV_JSON_CONNECTION
63287 /* Next array element. */
63288 field_addr.sub_location->number = i;
63289#endif /* FREECIV_JSON_CONNECTION */
63290
63291 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
63292 }
63293
63294#ifdef FREECIV_JSON_CONNECTION
63295 /* Exit array. */
63296 FC_FREE(field_addr.sub_location);
63297#endif /* FREECIV_JSON_CONNECTION */
63298 }
63299 if (e) {
63300 log_packet_detailed("'tile_incr_const' field error detected");
63301 }
63302#ifdef FREECIV_JSON_CONNECTION
63303 field_addr.name = "tile_incr";
63304#endif /* FREECIV_JSON_CONNECTION */
63305 e = 0;
63306 {
63307 int i;
63308
63309#ifdef FREECIV_JSON_CONNECTION
63310 /* Create the array. */
63311 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
63312
63313 /* Enter the array. */
63314 field_addr.sub_location = plocation_elem_new(0);
63315#endif /* FREECIV_JSON_CONNECTION */
63316
63317 for (i = 0; i < O_LAST; i++) {
63318#ifdef FREECIV_JSON_CONNECTION
63319 /* Next array element. */
63320 field_addr.sub_location->number = i;
63321#endif /* FREECIV_JSON_CONNECTION */
63322
63323 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
63324 }
63325
63326#ifdef FREECIV_JSON_CONNECTION
63327 /* Exit array. */
63328 FC_FREE(field_addr.sub_location);
63329#endif /* FREECIV_JSON_CONNECTION */
63330 }
63331 if (e) {
63332 log_packet_detailed("'tile_incr' field error detected");
63333 }
63334#ifdef FREECIV_JSON_CONNECTION
63335 field_addr.name = "tile_bonus";
63336#endif /* FREECIV_JSON_CONNECTION */
63337 e = 0;
63338 {
63339 int i;
63340
63341#ifdef FREECIV_JSON_CONNECTION
63342 /* Create the array. */
63343 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
63344
63345 /* Enter the array. */
63346 field_addr.sub_location = plocation_elem_new(0);
63347#endif /* FREECIV_JSON_CONNECTION */
63348
63349 for (i = 0; i < O_LAST; i++) {
63350#ifdef FREECIV_JSON_CONNECTION
63351 /* Next array element. */
63352 field_addr.sub_location->number = i;
63353#endif /* FREECIV_JSON_CONNECTION */
63354
63355 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
63356 }
63357
63358#ifdef FREECIV_JSON_CONNECTION
63359 /* Exit array. */
63360 FC_FREE(field_addr.sub_location);
63361#endif /* FREECIV_JSON_CONNECTION */
63362 }
63363 if (e) {
63364 log_packet_detailed("'tile_bonus' field error detected");
63365 }
63366#ifdef FREECIV_JSON_CONNECTION
63367 field_addr.name = "compat";
63368#endif /* FREECIV_JSON_CONNECTION */
63369 e = 0;
63370 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
63371 if (e) {
63372 log_packet_detailed("'compat' field error detected");
63373 }
63374#ifdef FREECIV_JSON_CONNECTION
63375 field_addr.name = "integrates";
63376#endif /* FREECIV_JSON_CONNECTION */
63377 e = 0;
63378 e |= DIO_BV_PUT(&dout, &field_addr, packet->integrates);
63379 if (e) {
63380 log_packet_detailed("'integrates' field error detected");
63381 }
63382#ifdef FREECIV_JSON_CONNECTION
63383 field_addr.name = "flags";
63384#endif /* FREECIV_JSON_CONNECTION */
63385 e = 0;
63386 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
63387 if (e) {
63388 log_packet_detailed("'flags' field error detected");
63389 }
63390
63391#endif
63393}
63394
63396{
63397 if (!pc->used) {
63398 log_error("WARNING: trying to send data to the closed connection %s",
63400 return -1;
63401 }
63402 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ROAD].packet != NULL, -1,
63403 "Handler for PACKET_RULESET_ROAD not installed");
63404 return pc->phs.handlers->send[PACKET_RULESET_ROAD].packet(pc, packet);
63405}
63406
63407void lsend_packet_ruleset_road(struct conn_list *dest, const struct packet_ruleset_road *packet)
63408{
63409 conn_list_iterate(dest, pconn) {
63412}
63413
63414#ifdef FREECIV_DELTA_PROTOCOL
63415#define hash_packet_ruleset_goods_100 hash_const
63416
63417#define cmp_packet_ruleset_goods_100 cmp_const
63418
63420#endif /* FREECIV_DELTA_PROTOCOL */
63421
63423{
63424#ifdef FREECIV_DELTA_PROTOCOL
63426 struct packet_ruleset_goods *old;
63427 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOODS;
63428#endif /* FREECIV_DELTA_PROTOCOL */
63430#ifdef FREECIV_JSON_CONNECTION
63431 struct plocation field_addr;
63432 {
63436 }
63437#endif /* FREECIV_JSON_CONNECTION */
63438
63439#ifdef FREECIV_DELTA_PROTOCOL
63440#ifdef FREECIV_JSON_CONNECTION
63441 field_addr.name = "fields";
63442#endif /* FREECIV_JSON_CONNECTION */
63443 DIO_BV_GET(&din, &field_addr, fields);
63444
63445#else /* FREECIV_DELTA_PROTOCOL */
63446#ifdef FREECIV_JSON_CONNECTION
63447 field_addr.name = "id";
63448#endif /* FREECIV_JSON_CONNECTION */
63449 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
63451 }
63452#ifdef FREECIV_JSON_CONNECTION
63453 field_addr.name = "name";
63454#endif /* FREECIV_JSON_CONNECTION */
63455 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63457 }
63458#ifdef FREECIV_JSON_CONNECTION
63459 field_addr.name = "rule_name";
63460#endif /* FREECIV_JSON_CONNECTION */
63461 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63462 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63463 }
63464#ifdef FREECIV_JSON_CONNECTION
63465 field_addr.name = "reqs_count";
63466#endif /* FREECIV_JSON_CONNECTION */
63467 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
63468 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
63469 }
63470#ifdef FREECIV_JSON_CONNECTION
63471 field_addr.name = "reqs";
63472#endif /* FREECIV_JSON_CONNECTION */
63473 if (real_packet->reqs_count > MAX_NUM_REQS) {
63474 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
63475 }
63476 {
63477 int i;
63478
63479#ifdef FREECIV_JSON_CONNECTION
63480 /* Enter array. */
63481 field_addr.sub_location = plocation_elem_new(0);
63482#endif /* FREECIV_JSON_CONNECTION */
63483
63484 for (i = 0; i < real_packet->reqs_count; i++) {
63485#ifdef FREECIV_JSON_CONNECTION
63486 field_addr.sub_location->number = i;
63487#endif /* FREECIV_JSON_CONNECTION */
63488
63489 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
63491 }
63492 }
63493
63494#ifdef FREECIV_JSON_CONNECTION
63495 /* Exit array. */
63496 FC_FREE(field_addr.sub_location);
63497#endif /* FREECIV_JSON_CONNECTION */
63498 }
63499#ifdef FREECIV_JSON_CONNECTION
63500 field_addr.name = "from_pct";
63501#endif /* FREECIV_JSON_CONNECTION */
63502 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
63504 }
63505#ifdef FREECIV_JSON_CONNECTION
63506 field_addr.name = "to_pct";
63507#endif /* FREECIV_JSON_CONNECTION */
63508 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
63510 }
63511#ifdef FREECIV_JSON_CONNECTION
63512 field_addr.name = "onetime_pct";
63513#endif /* FREECIV_JSON_CONNECTION */
63514 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
63515 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
63516 }
63517#ifdef FREECIV_JSON_CONNECTION
63518 field_addr.name = "flags";
63519#endif /* FREECIV_JSON_CONNECTION */
63520 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63522 }
63523#ifdef FREECIV_JSON_CONNECTION
63524 field_addr.name = "helptext";
63525#endif /* FREECIV_JSON_CONNECTION */
63526 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
63528 }
63529#endif
63530 log_packet_detailed("packet_ruleset_goods_100: got info about ()");
63531
63532#ifdef FREECIV_DELTA_PROTOCOL
63533 if (NULL == *hash) {
63535 NULL, NULL, NULL, free);
63536 }
63537
63538 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
63539 *real_packet = *old;
63540 } else {
63541 log_packet_detailed(" no old info");
63542 memset(real_packet, 0, sizeof(*real_packet));
63543 }
63544
63545 if (BV_ISSET(fields, 0)) {
63546 log_packet_detailed(" got field 'id'");
63547#ifdef FREECIV_JSON_CONNECTION
63548 field_addr.name = "id";
63549#endif /* FREECIV_JSON_CONNECTION */
63550 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
63552 }
63553 }
63554 if (BV_ISSET(fields, 1)) {
63555 log_packet_detailed(" got field 'name'");
63556#ifdef FREECIV_JSON_CONNECTION
63557 field_addr.name = "name";
63558#endif /* FREECIV_JSON_CONNECTION */
63559 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63561 }
63562 }
63563 if (BV_ISSET(fields, 2)) {
63564 log_packet_detailed(" got field 'rule_name'");
63565#ifdef FREECIV_JSON_CONNECTION
63566 field_addr.name = "rule_name";
63567#endif /* FREECIV_JSON_CONNECTION */
63568 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63569 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63570 }
63571 }
63572 if (BV_ISSET(fields, 3)) {
63573 log_packet_detailed(" got field 'reqs_count'");
63574#ifdef FREECIV_JSON_CONNECTION
63575 field_addr.name = "reqs_count";
63576#endif /* FREECIV_JSON_CONNECTION */
63577 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
63578 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
63579 }
63580 }
63581 if (BV_ISSET(fields, 4)) {
63582 log_packet_detailed(" got field 'reqs'");
63583#ifdef FREECIV_JSON_CONNECTION
63584 field_addr.name = "reqs";
63585#endif /* FREECIV_JSON_CONNECTION */
63586 if (real_packet->reqs_count > MAX_NUM_REQS) {
63587 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
63588 }
63589 {
63590 int i;
63591
63592#ifdef FREECIV_JSON_CONNECTION
63593 /* Enter array. */
63594 field_addr.sub_location = plocation_elem_new(0);
63595#endif /* FREECIV_JSON_CONNECTION */
63596
63597 for (i = 0; i < real_packet->reqs_count; i++) {
63598#ifdef FREECIV_JSON_CONNECTION
63599 field_addr.sub_location->number = i;
63600#endif /* FREECIV_JSON_CONNECTION */
63601
63602 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
63604 }
63605 }
63606
63607#ifdef FREECIV_JSON_CONNECTION
63608 /* Exit array. */
63609 FC_FREE(field_addr.sub_location);
63610#endif /* FREECIV_JSON_CONNECTION */
63611 }
63612 }
63613 if (BV_ISSET(fields, 5)) {
63614 log_packet_detailed(" got field 'from_pct'");
63615#ifdef FREECIV_JSON_CONNECTION
63616 field_addr.name = "from_pct";
63617#endif /* FREECIV_JSON_CONNECTION */
63618 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
63620 }
63621 }
63622 if (BV_ISSET(fields, 6)) {
63623 log_packet_detailed(" got field 'to_pct'");
63624#ifdef FREECIV_JSON_CONNECTION
63625 field_addr.name = "to_pct";
63626#endif /* FREECIV_JSON_CONNECTION */
63627 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
63629 }
63630 }
63631 if (BV_ISSET(fields, 7)) {
63632 log_packet_detailed(" got field 'onetime_pct'");
63633#ifdef FREECIV_JSON_CONNECTION
63634 field_addr.name = "onetime_pct";
63635#endif /* FREECIV_JSON_CONNECTION */
63636 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
63637 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
63638 }
63639 }
63640 if (BV_ISSET(fields, 8)) {
63641 log_packet_detailed(" got field 'flags'");
63642#ifdef FREECIV_JSON_CONNECTION
63643 field_addr.name = "flags";
63644#endif /* FREECIV_JSON_CONNECTION */
63645 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63647 }
63648 }
63649 if (BV_ISSET(fields, 9)) {
63650 log_packet_detailed(" got field 'helptext'");
63651#ifdef FREECIV_JSON_CONNECTION
63652 field_addr.name = "helptext";
63653#endif /* FREECIV_JSON_CONNECTION */
63654 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
63656 }
63657 }
63658
63659 if (NULL == old) {
63660 old = fc_malloc(sizeof(*old));
63661 *old = *real_packet;
63662 genhash_insert(*hash, old, old);
63663 } else {
63664 *old = *real_packet;
63665 }
63666
63667#endif /* FREECIV_DELTA_PROTOCOL */
63669}
63670
63671static int send_packet_ruleset_goods_100(struct connection *pc, const struct packet_ruleset_goods *packet)
63672{
63673 const struct packet_ruleset_goods *real_packet = packet;
63674 int e;
63675#ifdef FREECIV_DELTA_PROTOCOL
63677 struct packet_ruleset_goods *old;
63678 bool differ;
63679 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOODS;
63680#endif /* FREECIV_DELTA_PROTOCOL */
63682#ifdef FREECIV_JSON_CONNECTION
63683 struct plocation field_addr;
63684 {
63688 }
63689#endif /* FREECIV_JSON_CONNECTION */
63690
63691 log_packet_detailed("packet_ruleset_goods_100: sending info about ()");
63692
63693#ifdef FREECIV_DELTA_PROTOCOL
63694 if (NULL == *hash) {
63696 NULL, NULL, NULL, free);
63697 }
63698 BV_CLR_ALL(fields);
63699
63700 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
63701 old = fc_malloc(sizeof(*old));
63702 *old = *real_packet;
63703 genhash_insert(*hash, old, old);
63704 memset(old, 0, sizeof(*old));
63705 }
63706 differ = (old->id != real_packet->id);
63707 if (differ) {
63708 BV_SET(fields, 0);
63709 }
63710
63711 differ = (strcmp(old->name, real_packet->name) != 0);
63712 if (differ) {
63713 BV_SET(fields, 1);
63714 }
63715
63716 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
63717 if (differ) {
63718 BV_SET(fields, 2);
63719 }
63720
63721 differ = (old->reqs_count != real_packet->reqs_count);
63722 if (differ) {
63723 BV_SET(fields, 3);
63724 }
63725
63726 differ = (old->reqs_count != real_packet->reqs_count);
63727 if (!differ) {
63728 int i;
63729
63730 for (i = 0; i < real_packet->reqs_count; i++) {
63731 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
63732 if (differ) {
63733 break;
63734 }
63735 }
63736 }
63737 if (differ) {
63738 BV_SET(fields, 4);
63739 }
63740
63741 differ = (old->from_pct != real_packet->from_pct);
63742 if (differ) {
63743 BV_SET(fields, 5);
63744 }
63745
63746 differ = (old->to_pct != real_packet->to_pct);
63747 if (differ) {
63748 BV_SET(fields, 6);
63749 }
63750
63751 differ = (old->onetime_pct != real_packet->onetime_pct);
63752 if (differ) {
63753 BV_SET(fields, 7);
63754 }
63755
63756 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
63757 if (differ) {
63758 BV_SET(fields, 8);
63759 }
63760
63761 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
63762 if (differ) {
63763 BV_SET(fields, 9);
63764 }
63765
63766
63767#ifdef FREECIV_JSON_CONNECTION
63768 field_addr.name = "fields";
63769#endif /* FREECIV_JSON_CONNECTION */
63770 e = 0;
63771 e |= DIO_BV_PUT(&dout, &field_addr, fields);
63772 if (e) {
63773 log_packet_detailed("fields bitvector error detected");
63774 }
63775
63776 if (BV_ISSET(fields, 0)) {
63777 log_packet_detailed(" field 'id' has changed");
63778#ifdef FREECIV_JSON_CONNECTION
63779 field_addr.name = "id";
63780#endif /* FREECIV_JSON_CONNECTION */
63781 e = 0;
63782 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
63783 if (e) {
63784 log_packet_detailed("'id' field error detected");
63785 }
63786 }
63787 if (BV_ISSET(fields, 1)) {
63788 log_packet_detailed(" field 'name' has changed");
63789#ifdef FREECIV_JSON_CONNECTION
63790 field_addr.name = "name";
63791#endif /* FREECIV_JSON_CONNECTION */
63792 e = 0;
63793 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
63794 if (e) {
63795 log_packet_detailed("'name' field error detected");
63796 }
63797 }
63798 if (BV_ISSET(fields, 2)) {
63799 log_packet_detailed(" field 'rule_name' has changed");
63800#ifdef FREECIV_JSON_CONNECTION
63801 field_addr.name = "rule_name";
63802#endif /* FREECIV_JSON_CONNECTION */
63803 e = 0;
63804 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
63805 if (e) {
63806 log_packet_detailed("'rule_name' field error detected");
63807 }
63808 }
63809 if (BV_ISSET(fields, 3)) {
63810 log_packet_detailed(" field 'reqs_count' has changed");
63811#ifdef FREECIV_JSON_CONNECTION
63812 field_addr.name = "reqs_count";
63813#endif /* FREECIV_JSON_CONNECTION */
63814 e = 0;
63815 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
63816 if (e) {
63817 log_packet_detailed("'reqs_count' field error detected");
63818 }
63819 }
63820 if (BV_ISSET(fields, 4)) {
63821 log_packet_detailed(" field 'reqs' has changed");
63822#ifdef FREECIV_JSON_CONNECTION
63823 field_addr.name = "reqs";
63824#endif /* FREECIV_JSON_CONNECTION */
63825 e = 0;
63826 {
63827 int i;
63828
63829#ifdef FREECIV_JSON_CONNECTION
63830 /* Create the array. */
63831 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
63832
63833 /* Enter the array. */
63834 field_addr.sub_location = plocation_elem_new(0);
63835#endif /* FREECIV_JSON_CONNECTION */
63836
63837 for (i = 0; i < real_packet->reqs_count; i++) {
63838#ifdef FREECIV_JSON_CONNECTION
63839 /* Next array element. */
63840 field_addr.sub_location->number = i;
63841#endif /* FREECIV_JSON_CONNECTION */
63842
63843 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
63844 }
63845
63846#ifdef FREECIV_JSON_CONNECTION
63847 /* Exit array. */
63848 FC_FREE(field_addr.sub_location);
63849#endif /* FREECIV_JSON_CONNECTION */
63850 }
63851 if (e) {
63852 log_packet_detailed("'reqs' field error detected");
63853 }
63854 }
63855 if (BV_ISSET(fields, 5)) {
63856 log_packet_detailed(" field 'from_pct' has changed");
63857#ifdef FREECIV_JSON_CONNECTION
63858 field_addr.name = "from_pct";
63859#endif /* FREECIV_JSON_CONNECTION */
63860 e = 0;
63861 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
63862 if (e) {
63863 log_packet_detailed("'from_pct' field error detected");
63864 }
63865 }
63866 if (BV_ISSET(fields, 6)) {
63867 log_packet_detailed(" field 'to_pct' has changed");
63868#ifdef FREECIV_JSON_CONNECTION
63869 field_addr.name = "to_pct";
63870#endif /* FREECIV_JSON_CONNECTION */
63871 e = 0;
63872 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
63873 if (e) {
63874 log_packet_detailed("'to_pct' field error detected");
63875 }
63876 }
63877 if (BV_ISSET(fields, 7)) {
63878 log_packet_detailed(" field 'onetime_pct' has changed");
63879#ifdef FREECIV_JSON_CONNECTION
63880 field_addr.name = "onetime_pct";
63881#endif /* FREECIV_JSON_CONNECTION */
63882 e = 0;
63883 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
63884 if (e) {
63885 log_packet_detailed("'onetime_pct' field error detected");
63886 }
63887 }
63888 if (BV_ISSET(fields, 8)) {
63889 log_packet_detailed(" field 'flags' has changed");
63890#ifdef FREECIV_JSON_CONNECTION
63891 field_addr.name = "flags";
63892#endif /* FREECIV_JSON_CONNECTION */
63893 e = 0;
63894 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
63895 if (e) {
63896 log_packet_detailed("'flags' field error detected");
63897 }
63898 }
63899 if (BV_ISSET(fields, 9)) {
63900 log_packet_detailed(" field 'helptext' has changed");
63901#ifdef FREECIV_JSON_CONNECTION
63902 field_addr.name = "helptext";
63903#endif /* FREECIV_JSON_CONNECTION */
63904 e = 0;
63905 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
63906 if (e) {
63907 log_packet_detailed("'helptext' field error detected");
63908 }
63909 }
63910
63911 *old = *real_packet;
63912#endif /* FREECIV_DELTA_PROTOCOL */
63913#ifndef FREECIV_DELTA_PROTOCOL
63914#ifdef FREECIV_JSON_CONNECTION
63915 field_addr.name = "id";
63916#endif /* FREECIV_JSON_CONNECTION */
63917 e = 0;
63918 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
63919 if (e) {
63920 log_packet_detailed("'id' field error detected");
63921 }
63922#ifdef FREECIV_JSON_CONNECTION
63923 field_addr.name = "name";
63924#endif /* FREECIV_JSON_CONNECTION */
63925 e = 0;
63926 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
63927 if (e) {
63928 log_packet_detailed("'name' field error detected");
63929 }
63930#ifdef FREECIV_JSON_CONNECTION
63931 field_addr.name = "rule_name";
63932#endif /* FREECIV_JSON_CONNECTION */
63933 e = 0;
63934 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
63935 if (e) {
63936 log_packet_detailed("'rule_name' field error detected");
63937 }
63938#ifdef FREECIV_JSON_CONNECTION
63939 field_addr.name = "reqs_count";
63940#endif /* FREECIV_JSON_CONNECTION */
63941 e = 0;
63942 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
63943 if (e) {
63944 log_packet_detailed("'reqs_count' field error detected");
63945 }
63946#ifdef FREECIV_JSON_CONNECTION
63947 field_addr.name = "reqs";
63948#endif /* FREECIV_JSON_CONNECTION */
63949 e = 0;
63950 {
63951 int i;
63952
63953#ifdef FREECIV_JSON_CONNECTION
63954 /* Create the array. */
63955 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
63956
63957 /* Enter the array. */
63958 field_addr.sub_location = plocation_elem_new(0);
63959#endif /* FREECIV_JSON_CONNECTION */
63960
63961 for (i = 0; i < real_packet->reqs_count; i++) {
63962#ifdef FREECIV_JSON_CONNECTION
63963 /* Next array element. */
63964 field_addr.sub_location->number = i;
63965#endif /* FREECIV_JSON_CONNECTION */
63966
63967 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
63968 }
63969
63970#ifdef FREECIV_JSON_CONNECTION
63971 /* Exit array. */
63972 FC_FREE(field_addr.sub_location);
63973#endif /* FREECIV_JSON_CONNECTION */
63974 }
63975 if (e) {
63976 log_packet_detailed("'reqs' field error detected");
63977 }
63978#ifdef FREECIV_JSON_CONNECTION
63979 field_addr.name = "from_pct";
63980#endif /* FREECIV_JSON_CONNECTION */
63981 e = 0;
63982 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
63983 if (e) {
63984 log_packet_detailed("'from_pct' field error detected");
63985 }
63986#ifdef FREECIV_JSON_CONNECTION
63987 field_addr.name = "to_pct";
63988#endif /* FREECIV_JSON_CONNECTION */
63989 e = 0;
63990 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
63991 if (e) {
63992 log_packet_detailed("'to_pct' field error detected");
63993 }
63994#ifdef FREECIV_JSON_CONNECTION
63995 field_addr.name = "onetime_pct";
63996#endif /* FREECIV_JSON_CONNECTION */
63997 e = 0;
63998 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
63999 if (e) {
64000 log_packet_detailed("'onetime_pct' field error detected");
64001 }
64002#ifdef FREECIV_JSON_CONNECTION
64003 field_addr.name = "flags";
64004#endif /* FREECIV_JSON_CONNECTION */
64005 e = 0;
64006 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
64007 if (e) {
64008 log_packet_detailed("'flags' field error detected");
64009 }
64010#ifdef FREECIV_JSON_CONNECTION
64011 field_addr.name = "helptext";
64012#endif /* FREECIV_JSON_CONNECTION */
64013 e = 0;
64014 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
64015 if (e) {
64016 log_packet_detailed("'helptext' field error detected");
64017 }
64018
64019#endif
64021}
64022
64024{
64025 if (!pc->used) {
64026 log_error("WARNING: trying to send data to the closed connection %s",
64028 return -1;
64029 }
64030 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOODS].packet != NULL, -1,
64031 "Handler for PACKET_RULESET_GOODS not installed");
64032 return pc->phs.handlers->send[PACKET_RULESET_GOODS].packet(pc, packet);
64033}
64034
64035void lsend_packet_ruleset_goods(struct conn_list *dest, const struct packet_ruleset_goods *packet)
64036{
64037 conn_list_iterate(dest, pconn) {
64040}
64041
64042#ifdef FREECIV_DELTA_PROTOCOL
64043#define hash_packet_ruleset_disaster_100 hash_const
64044
64045#define cmp_packet_ruleset_disaster_100 cmp_const
64046
64048#endif /* FREECIV_DELTA_PROTOCOL */
64049
64051{
64052#ifdef FREECIV_DELTA_PROTOCOL
64054 struct packet_ruleset_disaster *old;
64055 struct genhash **hash = pc->phs.received + PACKET_RULESET_DISASTER;
64056#endif /* FREECIV_DELTA_PROTOCOL */
64058#ifdef FREECIV_JSON_CONNECTION
64059 struct plocation field_addr;
64060 {
64064 }
64065#endif /* FREECIV_JSON_CONNECTION */
64066
64067#ifdef FREECIV_DELTA_PROTOCOL
64068#ifdef FREECIV_JSON_CONNECTION
64069 field_addr.name = "fields";
64070#endif /* FREECIV_JSON_CONNECTION */
64071 DIO_BV_GET(&din, &field_addr, fields);
64072
64073#else /* FREECIV_DELTA_PROTOCOL */
64074#ifdef FREECIV_JSON_CONNECTION
64075 field_addr.name = "id";
64076#endif /* FREECIV_JSON_CONNECTION */
64077 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64079 }
64080#ifdef FREECIV_JSON_CONNECTION
64081 field_addr.name = "name";
64082#endif /* FREECIV_JSON_CONNECTION */
64083 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64085 }
64086#ifdef FREECIV_JSON_CONNECTION
64087 field_addr.name = "rule_name";
64088#endif /* FREECIV_JSON_CONNECTION */
64089 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
64090 RECEIVE_PACKET_FIELD_ERROR(rule_name);
64091 }
64092#ifdef FREECIV_JSON_CONNECTION
64093 field_addr.name = "reqs_count";
64094#endif /* FREECIV_JSON_CONNECTION */
64095 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
64096 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
64097 }
64098#ifdef FREECIV_JSON_CONNECTION
64099 field_addr.name = "reqs";
64100#endif /* FREECIV_JSON_CONNECTION */
64101 if (real_packet->reqs_count > MAX_NUM_REQS) {
64102 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
64103 }
64104 {
64105 int i;
64106
64107#ifdef FREECIV_JSON_CONNECTION
64108 /* Enter array. */
64109 field_addr.sub_location = plocation_elem_new(0);
64110#endif /* FREECIV_JSON_CONNECTION */
64111
64112 for (i = 0; i < real_packet->reqs_count; i++) {
64113#ifdef FREECIV_JSON_CONNECTION
64114 field_addr.sub_location->number = i;
64115#endif /* FREECIV_JSON_CONNECTION */
64116
64117 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
64119 }
64120 }
64121
64122#ifdef FREECIV_JSON_CONNECTION
64123 /* Exit array. */
64124 FC_FREE(field_addr.sub_location);
64125#endif /* FREECIV_JSON_CONNECTION */
64126 }
64127#ifdef FREECIV_JSON_CONNECTION
64128 field_addr.name = "frequency";
64129#endif /* FREECIV_JSON_CONNECTION */
64130 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
64131 RECEIVE_PACKET_FIELD_ERROR(frequency);
64132 }
64133#ifdef FREECIV_JSON_CONNECTION
64134 field_addr.name = "effects";
64135#endif /* FREECIV_JSON_CONNECTION */
64136 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
64138 }
64139#endif
64140 log_packet_detailed("packet_ruleset_disaster_100: got info about ()");
64141
64142#ifdef FREECIV_DELTA_PROTOCOL
64143 if (NULL == *hash) {
64145 NULL, NULL, NULL, free);
64146 }
64147
64148 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
64149 *real_packet = *old;
64150 } else {
64151 log_packet_detailed(" no old info");
64152 memset(real_packet, 0, sizeof(*real_packet));
64153 }
64154
64155 if (BV_ISSET(fields, 0)) {
64156 log_packet_detailed(" got field 'id'");
64157#ifdef FREECIV_JSON_CONNECTION
64158 field_addr.name = "id";
64159#endif /* FREECIV_JSON_CONNECTION */
64160 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64162 }
64163 }
64164 if (BV_ISSET(fields, 1)) {
64165 log_packet_detailed(" got field 'name'");
64166#ifdef FREECIV_JSON_CONNECTION
64167 field_addr.name = "name";
64168#endif /* FREECIV_JSON_CONNECTION */
64169 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64171 }
64172 }
64173 if (BV_ISSET(fields, 2)) {
64174 log_packet_detailed(" got field 'rule_name'");
64175#ifdef FREECIV_JSON_CONNECTION
64176 field_addr.name = "rule_name";
64177#endif /* FREECIV_JSON_CONNECTION */
64178 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
64179 RECEIVE_PACKET_FIELD_ERROR(rule_name);
64180 }
64181 }
64182 if (BV_ISSET(fields, 3)) {
64183 log_packet_detailed(" got field 'reqs_count'");
64184#ifdef FREECIV_JSON_CONNECTION
64185 field_addr.name = "reqs_count";
64186#endif /* FREECIV_JSON_CONNECTION */
64187 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
64188 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
64189 }
64190 }
64191 if (BV_ISSET(fields, 4)) {
64192 log_packet_detailed(" got field 'reqs'");
64193#ifdef FREECIV_JSON_CONNECTION
64194 field_addr.name = "reqs";
64195#endif /* FREECIV_JSON_CONNECTION */
64196 if (real_packet->reqs_count > MAX_NUM_REQS) {
64197 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
64198 }
64199 {
64200 int i;
64201
64202#ifdef FREECIV_JSON_CONNECTION
64203 /* Enter array. */
64204 field_addr.sub_location = plocation_elem_new(0);
64205#endif /* FREECIV_JSON_CONNECTION */
64206
64207 for (i = 0; i < real_packet->reqs_count; i++) {
64208#ifdef FREECIV_JSON_CONNECTION
64209 field_addr.sub_location->number = i;
64210#endif /* FREECIV_JSON_CONNECTION */
64211
64212 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
64214 }
64215 }
64216
64217#ifdef FREECIV_JSON_CONNECTION
64218 /* Exit array. */
64219 FC_FREE(field_addr.sub_location);
64220#endif /* FREECIV_JSON_CONNECTION */
64221 }
64222 }
64223 if (BV_ISSET(fields, 5)) {
64224 log_packet_detailed(" got field 'frequency'");
64225#ifdef FREECIV_JSON_CONNECTION
64226 field_addr.name = "frequency";
64227#endif /* FREECIV_JSON_CONNECTION */
64228 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
64229 RECEIVE_PACKET_FIELD_ERROR(frequency);
64230 }
64231 }
64232 if (BV_ISSET(fields, 6)) {
64233 log_packet_detailed(" got field 'effects'");
64234#ifdef FREECIV_JSON_CONNECTION
64235 field_addr.name = "effects";
64236#endif /* FREECIV_JSON_CONNECTION */
64237 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
64239 }
64240 }
64241
64242 if (NULL == old) {
64243 old = fc_malloc(sizeof(*old));
64244 *old = *real_packet;
64245 genhash_insert(*hash, old, old);
64246 } else {
64247 *old = *real_packet;
64248 }
64249
64250#endif /* FREECIV_DELTA_PROTOCOL */
64252}
64253
64255{
64256 const struct packet_ruleset_disaster *real_packet = packet;
64257 int e;
64258#ifdef FREECIV_DELTA_PROTOCOL
64260 struct packet_ruleset_disaster *old;
64261 bool differ;
64262 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DISASTER;
64263#endif /* FREECIV_DELTA_PROTOCOL */
64265#ifdef FREECIV_JSON_CONNECTION
64266 struct plocation field_addr;
64267 {
64271 }
64272#endif /* FREECIV_JSON_CONNECTION */
64273
64274 log_packet_detailed("packet_ruleset_disaster_100: sending info about ()");
64275
64276#ifdef FREECIV_DELTA_PROTOCOL
64277 if (NULL == *hash) {
64279 NULL, NULL, NULL, free);
64280 }
64281 BV_CLR_ALL(fields);
64282
64283 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
64284 old = fc_malloc(sizeof(*old));
64285 *old = *real_packet;
64286 genhash_insert(*hash, old, old);
64287 memset(old, 0, sizeof(*old));
64288 }
64289 differ = (old->id != real_packet->id);
64290 if (differ) {
64291 BV_SET(fields, 0);
64292 }
64293
64294 differ = (strcmp(old->name, real_packet->name) != 0);
64295 if (differ) {
64296 BV_SET(fields, 1);
64297 }
64298
64299 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
64300 if (differ) {
64301 BV_SET(fields, 2);
64302 }
64303
64304 differ = (old->reqs_count != real_packet->reqs_count);
64305 if (differ) {
64306 BV_SET(fields, 3);
64307 }
64308
64309 differ = (old->reqs_count != real_packet->reqs_count);
64310 if (!differ) {
64311 int i;
64312
64313 for (i = 0; i < real_packet->reqs_count; i++) {
64314 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
64315 if (differ) {
64316 break;
64317 }
64318 }
64319 }
64320 if (differ) {
64321 BV_SET(fields, 4);
64322 }
64323
64324 differ = (old->frequency != real_packet->frequency);
64325 if (differ) {
64326 BV_SET(fields, 5);
64327 }
64328
64329 differ = !BV_ARE_EQUAL(old->effects, real_packet->effects);
64330 if (differ) {
64331 BV_SET(fields, 6);
64332 }
64333
64334
64335#ifdef FREECIV_JSON_CONNECTION
64336 field_addr.name = "fields";
64337#endif /* FREECIV_JSON_CONNECTION */
64338 e = 0;
64339 e |= DIO_BV_PUT(&dout, &field_addr, fields);
64340 if (e) {
64341 log_packet_detailed("fields bitvector error detected");
64342 }
64343
64344 if (BV_ISSET(fields, 0)) {
64345 log_packet_detailed(" field 'id' has changed");
64346#ifdef FREECIV_JSON_CONNECTION
64347 field_addr.name = "id";
64348#endif /* FREECIV_JSON_CONNECTION */
64349 e = 0;
64350 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64351 if (e) {
64352 log_packet_detailed("'id' field error detected");
64353 }
64354 }
64355 if (BV_ISSET(fields, 1)) {
64356 log_packet_detailed(" field 'name' has changed");
64357#ifdef FREECIV_JSON_CONNECTION
64358 field_addr.name = "name";
64359#endif /* FREECIV_JSON_CONNECTION */
64360 e = 0;
64361 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64362 if (e) {
64363 log_packet_detailed("'name' field error detected");
64364 }
64365 }
64366 if (BV_ISSET(fields, 2)) {
64367 log_packet_detailed(" field 'rule_name' has changed");
64368#ifdef FREECIV_JSON_CONNECTION
64369 field_addr.name = "rule_name";
64370#endif /* FREECIV_JSON_CONNECTION */
64371 e = 0;
64372 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64373 if (e) {
64374 log_packet_detailed("'rule_name' field error detected");
64375 }
64376 }
64377 if (BV_ISSET(fields, 3)) {
64378 log_packet_detailed(" field 'reqs_count' has changed");
64379#ifdef FREECIV_JSON_CONNECTION
64380 field_addr.name = "reqs_count";
64381#endif /* FREECIV_JSON_CONNECTION */
64382 e = 0;
64383 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
64384 if (e) {
64385 log_packet_detailed("'reqs_count' field error detected");
64386 }
64387 }
64388 if (BV_ISSET(fields, 4)) {
64389 log_packet_detailed(" field 'reqs' has changed");
64390#ifdef FREECIV_JSON_CONNECTION
64391 field_addr.name = "reqs";
64392#endif /* FREECIV_JSON_CONNECTION */
64393 e = 0;
64394 {
64395 int i;
64396
64397#ifdef FREECIV_JSON_CONNECTION
64398 /* Create the array. */
64399 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
64400
64401 /* Enter the array. */
64402 field_addr.sub_location = plocation_elem_new(0);
64403#endif /* FREECIV_JSON_CONNECTION */
64404
64405 for (i = 0; i < real_packet->reqs_count; i++) {
64406#ifdef FREECIV_JSON_CONNECTION
64407 /* Next array element. */
64408 field_addr.sub_location->number = i;
64409#endif /* FREECIV_JSON_CONNECTION */
64410
64411 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
64412 }
64413
64414#ifdef FREECIV_JSON_CONNECTION
64415 /* Exit array. */
64416 FC_FREE(field_addr.sub_location);
64417#endif /* FREECIV_JSON_CONNECTION */
64418 }
64419 if (e) {
64420 log_packet_detailed("'reqs' field error detected");
64421 }
64422 }
64423 if (BV_ISSET(fields, 5)) {
64424 log_packet_detailed(" field 'frequency' has changed");
64425#ifdef FREECIV_JSON_CONNECTION
64426 field_addr.name = "frequency";
64427#endif /* FREECIV_JSON_CONNECTION */
64428 e = 0;
64429 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
64430 if (e) {
64431 log_packet_detailed("'frequency' field error detected");
64432 }
64433 }
64434 if (BV_ISSET(fields, 6)) {
64435 log_packet_detailed(" field 'effects' has changed");
64436#ifdef FREECIV_JSON_CONNECTION
64437 field_addr.name = "effects";
64438#endif /* FREECIV_JSON_CONNECTION */
64439 e = 0;
64440 e |= DIO_BV_PUT(&dout, &field_addr, packet->effects);
64441 if (e) {
64442 log_packet_detailed("'effects' field error detected");
64443 }
64444 }
64445
64446 *old = *real_packet;
64447#endif /* FREECIV_DELTA_PROTOCOL */
64448#ifndef FREECIV_DELTA_PROTOCOL
64449#ifdef FREECIV_JSON_CONNECTION
64450 field_addr.name = "id";
64451#endif /* FREECIV_JSON_CONNECTION */
64452 e = 0;
64453 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64454 if (e) {
64455 log_packet_detailed("'id' field error detected");
64456 }
64457#ifdef FREECIV_JSON_CONNECTION
64458 field_addr.name = "name";
64459#endif /* FREECIV_JSON_CONNECTION */
64460 e = 0;
64461 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64462 if (e) {
64463 log_packet_detailed("'name' field error detected");
64464 }
64465#ifdef FREECIV_JSON_CONNECTION
64466 field_addr.name = "rule_name";
64467#endif /* FREECIV_JSON_CONNECTION */
64468 e = 0;
64469 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64470 if (e) {
64471 log_packet_detailed("'rule_name' field error detected");
64472 }
64473#ifdef FREECIV_JSON_CONNECTION
64474 field_addr.name = "reqs_count";
64475#endif /* FREECIV_JSON_CONNECTION */
64476 e = 0;
64477 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
64478 if (e) {
64479 log_packet_detailed("'reqs_count' field error detected");
64480 }
64481#ifdef FREECIV_JSON_CONNECTION
64482 field_addr.name = "reqs";
64483#endif /* FREECIV_JSON_CONNECTION */
64484 e = 0;
64485 {
64486 int i;
64487
64488#ifdef FREECIV_JSON_CONNECTION
64489 /* Create the array. */
64490 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
64491
64492 /* Enter the array. */
64493 field_addr.sub_location = plocation_elem_new(0);
64494#endif /* FREECIV_JSON_CONNECTION */
64495
64496 for (i = 0; i < real_packet->reqs_count; i++) {
64497#ifdef FREECIV_JSON_CONNECTION
64498 /* Next array element. */
64499 field_addr.sub_location->number = i;
64500#endif /* FREECIV_JSON_CONNECTION */
64501
64502 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
64503 }
64504
64505#ifdef FREECIV_JSON_CONNECTION
64506 /* Exit array. */
64507 FC_FREE(field_addr.sub_location);
64508#endif /* FREECIV_JSON_CONNECTION */
64509 }
64510 if (e) {
64511 log_packet_detailed("'reqs' field error detected");
64512 }
64513#ifdef FREECIV_JSON_CONNECTION
64514 field_addr.name = "frequency";
64515#endif /* FREECIV_JSON_CONNECTION */
64516 e = 0;
64517 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
64518 if (e) {
64519 log_packet_detailed("'frequency' field error detected");
64520 }
64521#ifdef FREECIV_JSON_CONNECTION
64522 field_addr.name = "effects";
64523#endif /* FREECIV_JSON_CONNECTION */
64524 e = 0;
64525 e |= DIO_BV_PUT(&dout, &field_addr, packet->effects);
64526 if (e) {
64527 log_packet_detailed("'effects' field error detected");
64528 }
64529
64530#endif
64532}
64533
64535{
64536 if (!pc->used) {
64537 log_error("WARNING: trying to send data to the closed connection %s",
64539 return -1;
64540 }
64541 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet != NULL, -1,
64542 "Handler for PACKET_RULESET_DISASTER not installed");
64543 return pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet(pc, packet);
64544}
64545
64547{
64548 conn_list_iterate(dest, pconn) {
64551}
64552
64553#ifdef FREECIV_DELTA_PROTOCOL
64554#define hash_packet_ruleset_achievement_100 hash_const
64555
64556#define cmp_packet_ruleset_achievement_100 cmp_const
64557
64559#endif /* FREECIV_DELTA_PROTOCOL */
64560
64562{
64563#ifdef FREECIV_DELTA_PROTOCOL
64565 struct packet_ruleset_achievement *old;
64566 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACHIEVEMENT;
64567#endif /* FREECIV_DELTA_PROTOCOL */
64569#ifdef FREECIV_JSON_CONNECTION
64570 struct plocation field_addr;
64571 {
64575 }
64576#endif /* FREECIV_JSON_CONNECTION */
64577
64578#ifdef FREECIV_DELTA_PROTOCOL
64579#ifdef FREECIV_JSON_CONNECTION
64580 field_addr.name = "fields";
64581#endif /* FREECIV_JSON_CONNECTION */
64582 DIO_BV_GET(&din, &field_addr, fields);
64583
64584#else /* FREECIV_DELTA_PROTOCOL */
64585#ifdef FREECIV_JSON_CONNECTION
64586 field_addr.name = "id";
64587#endif /* FREECIV_JSON_CONNECTION */
64588 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64590 }
64591#ifdef FREECIV_JSON_CONNECTION
64592 field_addr.name = "name";
64593#endif /* FREECIV_JSON_CONNECTION */
64594 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64596 }
64597#ifdef FREECIV_JSON_CONNECTION
64598 field_addr.name = "rule_name";
64599#endif /* FREECIV_JSON_CONNECTION */
64600 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
64601 RECEIVE_PACKET_FIELD_ERROR(rule_name);
64602 }
64603#ifdef FREECIV_JSON_CONNECTION
64604 field_addr.name = "type";
64605#endif /* FREECIV_JSON_CONNECTION */
64606 {
64607 int readin;
64608
64609 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
64611 }
64612 real_packet->type = readin;
64613 }
64614#ifdef FREECIV_JSON_CONNECTION
64615 field_addr.name = "unique";
64616#endif /* FREECIV_JSON_CONNECTION */
64617 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unique)) {
64619 }
64620#ifdef FREECIV_JSON_CONNECTION
64621 field_addr.name = "value";
64622#endif /* FREECIV_JSON_CONNECTION */
64623 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
64625 }
64626#endif
64627 log_packet_detailed("packet_ruleset_achievement_100: got info about ()");
64628
64629#ifdef FREECIV_DELTA_PROTOCOL
64630 if (NULL == *hash) {
64632 NULL, NULL, NULL, free);
64633 }
64634
64635 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
64636 *real_packet = *old;
64637 } else {
64638 log_packet_detailed(" no old info");
64639 memset(real_packet, 0, sizeof(*real_packet));
64640 }
64641
64642 if (BV_ISSET(fields, 0)) {
64643 log_packet_detailed(" got field 'id'");
64644#ifdef FREECIV_JSON_CONNECTION
64645 field_addr.name = "id";
64646#endif /* FREECIV_JSON_CONNECTION */
64647 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64649 }
64650 }
64651 if (BV_ISSET(fields, 1)) {
64652 log_packet_detailed(" got field 'name'");
64653#ifdef FREECIV_JSON_CONNECTION
64654 field_addr.name = "name";
64655#endif /* FREECIV_JSON_CONNECTION */
64656 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
64658 }
64659 }
64660 if (BV_ISSET(fields, 2)) {
64661 log_packet_detailed(" got field 'rule_name'");
64662#ifdef FREECIV_JSON_CONNECTION
64663 field_addr.name = "rule_name";
64664#endif /* FREECIV_JSON_CONNECTION */
64665 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
64666 RECEIVE_PACKET_FIELD_ERROR(rule_name);
64667 }
64668 }
64669 if (BV_ISSET(fields, 3)) {
64670 log_packet_detailed(" got field 'type'");
64671#ifdef FREECIV_JSON_CONNECTION
64672 field_addr.name = "type";
64673#endif /* FREECIV_JSON_CONNECTION */
64674 {
64675 int readin;
64676
64677 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
64679 }
64680 real_packet->type = readin;
64681 }
64682 }
64683 real_packet->unique = BV_ISSET(fields, 4);
64684 if (BV_ISSET(fields, 5)) {
64685 log_packet_detailed(" got field 'value'");
64686#ifdef FREECIV_JSON_CONNECTION
64687 field_addr.name = "value";
64688#endif /* FREECIV_JSON_CONNECTION */
64689 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
64691 }
64692 }
64693
64694 if (NULL == old) {
64695 old = fc_malloc(sizeof(*old));
64696 *old = *real_packet;
64697 genhash_insert(*hash, old, old);
64698 } else {
64699 *old = *real_packet;
64700 }
64701
64702#endif /* FREECIV_DELTA_PROTOCOL */
64704}
64705
64707{
64708 const struct packet_ruleset_achievement *real_packet = packet;
64709 int e;
64710#ifdef FREECIV_DELTA_PROTOCOL
64712 struct packet_ruleset_achievement *old;
64713 bool differ;
64714 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACHIEVEMENT;
64715#endif /* FREECIV_DELTA_PROTOCOL */
64717#ifdef FREECIV_JSON_CONNECTION
64718 struct plocation field_addr;
64719 {
64723 }
64724#endif /* FREECIV_JSON_CONNECTION */
64725
64726 log_packet_detailed("packet_ruleset_achievement_100: sending info about ()");
64727
64728#ifdef FREECIV_DELTA_PROTOCOL
64729 if (NULL == *hash) {
64731 NULL, NULL, NULL, free);
64732 }
64733 BV_CLR_ALL(fields);
64734
64735 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
64736 old = fc_malloc(sizeof(*old));
64737 *old = *real_packet;
64738 genhash_insert(*hash, old, old);
64739 memset(old, 0, sizeof(*old));
64740 }
64741 differ = (old->id != real_packet->id);
64742 if (differ) {
64743 BV_SET(fields, 0);
64744 }
64745
64746 differ = (strcmp(old->name, real_packet->name) != 0);
64747 if (differ) {
64748 BV_SET(fields, 1);
64749 }
64750
64751 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
64752 if (differ) {
64753 BV_SET(fields, 2);
64754 }
64755
64756 differ = (old->type != real_packet->type);
64757 if (differ) {
64758 BV_SET(fields, 3);
64759 }
64760
64761 if (packet->unique) {
64762 BV_SET(fields, 4);
64763 }
64764
64765 differ = (old->value != real_packet->value);
64766 if (differ) {
64767 BV_SET(fields, 5);
64768 }
64769
64770
64771#ifdef FREECIV_JSON_CONNECTION
64772 field_addr.name = "fields";
64773#endif /* FREECIV_JSON_CONNECTION */
64774 e = 0;
64775 e |= DIO_BV_PUT(&dout, &field_addr, fields);
64776 if (e) {
64777 log_packet_detailed("fields bitvector error detected");
64778 }
64779
64780 if (BV_ISSET(fields, 0)) {
64781 log_packet_detailed(" field 'id' has changed");
64782#ifdef FREECIV_JSON_CONNECTION
64783 field_addr.name = "id";
64784#endif /* FREECIV_JSON_CONNECTION */
64785 e = 0;
64786 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64787 if (e) {
64788 log_packet_detailed("'id' field error detected");
64789 }
64790 }
64791 if (BV_ISSET(fields, 1)) {
64792 log_packet_detailed(" field 'name' has changed");
64793#ifdef FREECIV_JSON_CONNECTION
64794 field_addr.name = "name";
64795#endif /* FREECIV_JSON_CONNECTION */
64796 e = 0;
64797 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64798 if (e) {
64799 log_packet_detailed("'name' field error detected");
64800 }
64801 }
64802 if (BV_ISSET(fields, 2)) {
64803 log_packet_detailed(" field 'rule_name' has changed");
64804#ifdef FREECIV_JSON_CONNECTION
64805 field_addr.name = "rule_name";
64806#endif /* FREECIV_JSON_CONNECTION */
64807 e = 0;
64808 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64809 if (e) {
64810 log_packet_detailed("'rule_name' field error detected");
64811 }
64812 }
64813 if (BV_ISSET(fields, 3)) {
64814 log_packet_detailed(" field 'type' has changed");
64815#ifdef FREECIV_JSON_CONNECTION
64816 field_addr.name = "type";
64817#endif /* FREECIV_JSON_CONNECTION */
64818 e = 0;
64819 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
64820 if (e) {
64821 log_packet_detailed("'type' field error detected");
64822 }
64823 }
64824 /* field 4 is folded into the header */
64825 if (BV_ISSET(fields, 5)) {
64826 log_packet_detailed(" field 'value' has changed");
64827#ifdef FREECIV_JSON_CONNECTION
64828 field_addr.name = "value";
64829#endif /* FREECIV_JSON_CONNECTION */
64830 e = 0;
64831 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
64832 if (e) {
64833 log_packet_detailed("'value' field error detected");
64834 }
64835 }
64836
64837 *old = *real_packet;
64838#endif /* FREECIV_DELTA_PROTOCOL */
64839#ifndef FREECIV_DELTA_PROTOCOL
64840#ifdef FREECIV_JSON_CONNECTION
64841 field_addr.name = "id";
64842#endif /* FREECIV_JSON_CONNECTION */
64843 e = 0;
64844 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64845 if (e) {
64846 log_packet_detailed("'id' field error detected");
64847 }
64848#ifdef FREECIV_JSON_CONNECTION
64849 field_addr.name = "name";
64850#endif /* FREECIV_JSON_CONNECTION */
64851 e = 0;
64852 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64853 if (e) {
64854 log_packet_detailed("'name' field error detected");
64855 }
64856#ifdef FREECIV_JSON_CONNECTION
64857 field_addr.name = "rule_name";
64858#endif /* FREECIV_JSON_CONNECTION */
64859 e = 0;
64860 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64861 if (e) {
64862 log_packet_detailed("'rule_name' field error detected");
64863 }
64864#ifdef FREECIV_JSON_CONNECTION
64865 field_addr.name = "type";
64866#endif /* FREECIV_JSON_CONNECTION */
64867 e = 0;
64868 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
64869 if (e) {
64870 log_packet_detailed("'type' field error detected");
64871 }
64872#ifdef FREECIV_JSON_CONNECTION
64873 field_addr.name = "unique";
64874#endif /* FREECIV_JSON_CONNECTION */
64875 e = 0;
64876 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unique);
64877 if (e) {
64878 log_packet_detailed("'unique' field error detected");
64879 }
64880#ifdef FREECIV_JSON_CONNECTION
64881 field_addr.name = "value";
64882#endif /* FREECIV_JSON_CONNECTION */
64883 e = 0;
64884 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
64885 if (e) {
64886 log_packet_detailed("'value' field error detected");
64887 }
64888
64889#endif
64891}
64892
64894{
64895 if (!pc->used) {
64896 log_error("WARNING: trying to send data to the closed connection %s",
64898 return -1;
64899 }
64900 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet != NULL, -1,
64901 "Handler for PACKET_RULESET_ACHIEVEMENT not installed");
64902 return pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet(pc, packet);
64903}
64904
64906{
64907 conn_list_iterate(dest, pconn) {
64910}
64911
64912#ifdef FREECIV_DELTA_PROTOCOL
64913#define hash_packet_ruleset_trade_100 hash_const
64914
64915#define cmp_packet_ruleset_trade_100 cmp_const
64916
64918#endif /* FREECIV_DELTA_PROTOCOL */
64919
64921{
64922#ifdef FREECIV_DELTA_PROTOCOL
64924 struct packet_ruleset_trade *old;
64925 struct genhash **hash = pc->phs.received + PACKET_RULESET_TRADE;
64926#endif /* FREECIV_DELTA_PROTOCOL */
64928#ifdef FREECIV_JSON_CONNECTION
64929 struct plocation field_addr;
64930 {
64934 }
64935#endif /* FREECIV_JSON_CONNECTION */
64936
64937#ifdef FREECIV_DELTA_PROTOCOL
64938#ifdef FREECIV_JSON_CONNECTION
64939 field_addr.name = "fields";
64940#endif /* FREECIV_JSON_CONNECTION */
64941 DIO_BV_GET(&din, &field_addr, fields);
64942
64943#else /* FREECIV_DELTA_PROTOCOL */
64944#ifdef FREECIV_JSON_CONNECTION
64945 field_addr.name = "id";
64946#endif /* FREECIV_JSON_CONNECTION */
64947 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
64949 }
64950#ifdef FREECIV_JSON_CONNECTION
64951 field_addr.name = "trade_pct";
64952#endif /* FREECIV_JSON_CONNECTION */
64953 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
64954 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
64955 }
64956#ifdef FREECIV_JSON_CONNECTION
64957 field_addr.name = "cancelling";
64958#endif /* FREECIV_JSON_CONNECTION */
64959 {
64960 int readin;
64961
64962 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
64963 RECEIVE_PACKET_FIELD_ERROR(cancelling);
64964 }
64965 real_packet->cancelling = readin;
64966 }
64967#ifdef FREECIV_JSON_CONNECTION
64968 field_addr.name = "bonus_type";
64969#endif /* FREECIV_JSON_CONNECTION */
64970 {
64971 int readin;
64972
64973 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
64974 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
64975 }
64976 real_packet->bonus_type = readin;
64977 }
64978#endif
64979 log_packet_detailed("packet_ruleset_trade_100: got info about ()");
64980
64981#ifdef FREECIV_DELTA_PROTOCOL
64982 if (NULL == *hash) {
64984 NULL, NULL, NULL, free);
64985 }
64986
64987 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
64988 *real_packet = *old;
64989 } else {
64990 log_packet_detailed(" no old info");
64991 memset(real_packet, 0, sizeof(*real_packet));
64992 }
64993
64994 if (BV_ISSET(fields, 0)) {
64995 log_packet_detailed(" got field 'id'");
64996#ifdef FREECIV_JSON_CONNECTION
64997 field_addr.name = "id";
64998#endif /* FREECIV_JSON_CONNECTION */
64999 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
65001 }
65002 }
65003 if (BV_ISSET(fields, 1)) {
65004 log_packet_detailed(" got field 'trade_pct'");
65005#ifdef FREECIV_JSON_CONNECTION
65006 field_addr.name = "trade_pct";
65007#endif /* FREECIV_JSON_CONNECTION */
65008 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
65009 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
65010 }
65011 }
65012 if (BV_ISSET(fields, 2)) {
65013 log_packet_detailed(" got field 'cancelling'");
65014#ifdef FREECIV_JSON_CONNECTION
65015 field_addr.name = "cancelling";
65016#endif /* FREECIV_JSON_CONNECTION */
65017 {
65018 int readin;
65019
65020 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65021 RECEIVE_PACKET_FIELD_ERROR(cancelling);
65022 }
65023 real_packet->cancelling = readin;
65024 }
65025 }
65026 if (BV_ISSET(fields, 3)) {
65027 log_packet_detailed(" got field 'bonus_type'");
65028#ifdef FREECIV_JSON_CONNECTION
65029 field_addr.name = "bonus_type";
65030#endif /* FREECIV_JSON_CONNECTION */
65031 {
65032 int readin;
65033
65034 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65035 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
65036 }
65037 real_packet->bonus_type = readin;
65038 }
65039 }
65040
65041 if (NULL == old) {
65042 old = fc_malloc(sizeof(*old));
65043 *old = *real_packet;
65044 genhash_insert(*hash, old, old);
65045 } else {
65046 *old = *real_packet;
65047 }
65048
65049#endif /* FREECIV_DELTA_PROTOCOL */
65051}
65052
65053static int send_packet_ruleset_trade_100(struct connection *pc, const struct packet_ruleset_trade *packet)
65054{
65055 const struct packet_ruleset_trade *real_packet = packet;
65056 int e;
65057#ifdef FREECIV_DELTA_PROTOCOL
65059 struct packet_ruleset_trade *old;
65060 bool differ;
65061 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TRADE;
65062#endif /* FREECIV_DELTA_PROTOCOL */
65064#ifdef FREECIV_JSON_CONNECTION
65065 struct plocation field_addr;
65066 {
65070 }
65071#endif /* FREECIV_JSON_CONNECTION */
65072
65073 log_packet_detailed("packet_ruleset_trade_100: sending info about ()");
65074
65075#ifdef FREECIV_DELTA_PROTOCOL
65076 if (NULL == *hash) {
65078 NULL, NULL, NULL, free);
65079 }
65080 BV_CLR_ALL(fields);
65081
65082 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
65083 old = fc_malloc(sizeof(*old));
65084 *old = *real_packet;
65085 genhash_insert(*hash, old, old);
65086 memset(old, 0, sizeof(*old));
65087 }
65088 differ = (old->id != real_packet->id);
65089 if (differ) {
65090 BV_SET(fields, 0);
65091 }
65092
65093 differ = (old->trade_pct != real_packet->trade_pct);
65094 if (differ) {
65095 BV_SET(fields, 1);
65096 }
65097
65098 differ = (old->cancelling != real_packet->cancelling);
65099 if (differ) {
65100 BV_SET(fields, 2);
65101 }
65102
65103 differ = (old->bonus_type != real_packet->bonus_type);
65104 if (differ) {
65105 BV_SET(fields, 3);
65106 }
65107
65108
65109#ifdef FREECIV_JSON_CONNECTION
65110 field_addr.name = "fields";
65111#endif /* FREECIV_JSON_CONNECTION */
65112 e = 0;
65113 e |= DIO_BV_PUT(&dout, &field_addr, fields);
65114 if (e) {
65115 log_packet_detailed("fields bitvector error detected");
65116 }
65117
65118 if (BV_ISSET(fields, 0)) {
65119 log_packet_detailed(" field 'id' has changed");
65120#ifdef FREECIV_JSON_CONNECTION
65121 field_addr.name = "id";
65122#endif /* FREECIV_JSON_CONNECTION */
65123 e = 0;
65124 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65125 if (e) {
65126 log_packet_detailed("'id' field error detected");
65127 }
65128 }
65129 if (BV_ISSET(fields, 1)) {
65130 log_packet_detailed(" field 'trade_pct' has changed");
65131#ifdef FREECIV_JSON_CONNECTION
65132 field_addr.name = "trade_pct";
65133#endif /* FREECIV_JSON_CONNECTION */
65134 e = 0;
65135 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
65136 if (e) {
65137 log_packet_detailed("'trade_pct' field error detected");
65138 }
65139 }
65140 if (BV_ISSET(fields, 2)) {
65141 log_packet_detailed(" field 'cancelling' has changed");
65142#ifdef FREECIV_JSON_CONNECTION
65143 field_addr.name = "cancelling";
65144#endif /* FREECIV_JSON_CONNECTION */
65145 e = 0;
65146 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
65147 if (e) {
65148 log_packet_detailed("'cancelling' field error detected");
65149 }
65150 }
65151 if (BV_ISSET(fields, 3)) {
65152 log_packet_detailed(" field 'bonus_type' has changed");
65153#ifdef FREECIV_JSON_CONNECTION
65154 field_addr.name = "bonus_type";
65155#endif /* FREECIV_JSON_CONNECTION */
65156 e = 0;
65157 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
65158 if (e) {
65159 log_packet_detailed("'bonus_type' field error detected");
65160 }
65161 }
65162
65163 *old = *real_packet;
65164#endif /* FREECIV_DELTA_PROTOCOL */
65165#ifndef FREECIV_DELTA_PROTOCOL
65166#ifdef FREECIV_JSON_CONNECTION
65167 field_addr.name = "id";
65168#endif /* FREECIV_JSON_CONNECTION */
65169 e = 0;
65170 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65171 if (e) {
65172 log_packet_detailed("'id' field error detected");
65173 }
65174#ifdef FREECIV_JSON_CONNECTION
65175 field_addr.name = "trade_pct";
65176#endif /* FREECIV_JSON_CONNECTION */
65177 e = 0;
65178 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
65179 if (e) {
65180 log_packet_detailed("'trade_pct' field error detected");
65181 }
65182#ifdef FREECIV_JSON_CONNECTION
65183 field_addr.name = "cancelling";
65184#endif /* FREECIV_JSON_CONNECTION */
65185 e = 0;
65186 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
65187 if (e) {
65188 log_packet_detailed("'cancelling' field error detected");
65189 }
65190#ifdef FREECIV_JSON_CONNECTION
65191 field_addr.name = "bonus_type";
65192#endif /* FREECIV_JSON_CONNECTION */
65193 e = 0;
65194 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
65195 if (e) {
65196 log_packet_detailed("'bonus_type' field error detected");
65197 }
65198
65199#endif
65201}
65202
65204{
65205 if (!pc->used) {
65206 log_error("WARNING: trying to send data to the closed connection %s",
65208 return -1;
65209 }
65210 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TRADE].packet != NULL, -1,
65211 "Handler for PACKET_RULESET_TRADE not installed");
65212 return pc->phs.handlers->send[PACKET_RULESET_TRADE].packet(pc, packet);
65213}
65214
65215void lsend_packet_ruleset_trade(struct conn_list *dest, const struct packet_ruleset_trade *packet)
65216{
65217 conn_list_iterate(dest, pconn) {
65220}
65221
65222#ifdef FREECIV_DELTA_PROTOCOL
65223#define hash_packet_ruleset_action_100 hash_const
65224
65225#define cmp_packet_ruleset_action_100 cmp_const
65226
65228#endif /* FREECIV_DELTA_PROTOCOL */
65229
65231{
65232#ifdef FREECIV_DELTA_PROTOCOL
65234 struct packet_ruleset_action *old;
65235 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION;
65236#endif /* FREECIV_DELTA_PROTOCOL */
65238#ifdef FREECIV_JSON_CONNECTION
65239 struct plocation field_addr;
65240 {
65244 }
65245#endif /* FREECIV_JSON_CONNECTION */
65246
65247#ifdef FREECIV_DELTA_PROTOCOL
65248#ifdef FREECIV_JSON_CONNECTION
65249 field_addr.name = "fields";
65250#endif /* FREECIV_JSON_CONNECTION */
65251 DIO_BV_GET(&din, &field_addr, fields);
65252
65253#else /* FREECIV_DELTA_PROTOCOL */
65254#ifdef FREECIV_JSON_CONNECTION
65255 field_addr.name = "id";
65256#endif /* FREECIV_JSON_CONNECTION */
65257 {
65258 int readin;
65259
65260 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65262 }
65263 real_packet->id = readin;
65264 }
65265#ifdef FREECIV_JSON_CONNECTION
65266 field_addr.name = "ui_name";
65267#endif /* FREECIV_JSON_CONNECTION */
65268 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
65270 }
65271#ifdef FREECIV_JSON_CONNECTION
65272 field_addr.name = "quiet";
65273#endif /* FREECIV_JSON_CONNECTION */
65274 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
65276 }
65277#ifdef FREECIV_JSON_CONNECTION
65278 field_addr.name = "result";
65279#endif /* FREECIV_JSON_CONNECTION */
65280 {
65281 int readin;
65282
65283 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65285 }
65286 real_packet->result = readin;
65287 }
65288#ifdef FREECIV_JSON_CONNECTION
65289 field_addr.name = "sub_results";
65290#endif /* FREECIV_JSON_CONNECTION */
65291 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
65292 RECEIVE_PACKET_FIELD_ERROR(sub_results);
65293 }
65294#ifdef FREECIV_JSON_CONNECTION
65295 field_addr.name = "actor_consuming_always";
65296#endif /* FREECIV_JSON_CONNECTION */
65297 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->actor_consuming_always)) {
65298 RECEIVE_PACKET_FIELD_ERROR(actor_consuming_always);
65299 }
65300#ifdef FREECIV_JSON_CONNECTION
65301 field_addr.name = "act_kind";
65302#endif /* FREECIV_JSON_CONNECTION */
65303 {
65304 int readin;
65305
65306 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65308 }
65309 real_packet->act_kind = readin;
65310 }
65311#ifdef FREECIV_JSON_CONNECTION
65312 field_addr.name = "tgt_kind";
65313#endif /* FREECIV_JSON_CONNECTION */
65314 {
65315 int readin;
65316
65317 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65319 }
65320 real_packet->tgt_kind = readin;
65321 }
65322#ifdef FREECIV_JSON_CONNECTION
65323 field_addr.name = "sub_tgt_kind";
65324#endif /* FREECIV_JSON_CONNECTION */
65325 {
65326 int readin;
65327
65328 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65329 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
65330 }
65331 real_packet->sub_tgt_kind = readin;
65332 }
65333#ifdef FREECIV_JSON_CONNECTION
65334 field_addr.name = "min_distance";
65335#endif /* FREECIV_JSON_CONNECTION */
65336 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
65337 RECEIVE_PACKET_FIELD_ERROR(min_distance);
65338 }
65339#ifdef FREECIV_JSON_CONNECTION
65340 field_addr.name = "max_distance";
65341#endif /* FREECIV_JSON_CONNECTION */
65342 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
65343 RECEIVE_PACKET_FIELD_ERROR(max_distance);
65344 }
65345#ifdef FREECIV_JSON_CONNECTION
65346 field_addr.name = "blocked_by";
65347#endif /* FREECIV_JSON_CONNECTION */
65348 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
65349 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
65350 }
65351#endif
65352 log_packet_detailed("packet_ruleset_action_100: got info about ()");
65353
65354#ifdef FREECIV_DELTA_PROTOCOL
65355 if (NULL == *hash) {
65357 NULL, NULL, NULL, free);
65358 }
65359
65360 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
65361 *real_packet = *old;
65362 } else {
65363 log_packet_detailed(" no old info");
65364 memset(real_packet, 0, sizeof(*real_packet));
65365 }
65366
65367 if (BV_ISSET(fields, 0)) {
65368 log_packet_detailed(" got field 'id'");
65369#ifdef FREECIV_JSON_CONNECTION
65370 field_addr.name = "id";
65371#endif /* FREECIV_JSON_CONNECTION */
65372 {
65373 int readin;
65374
65375 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65377 }
65378 real_packet->id = readin;
65379 }
65380 }
65381 if (BV_ISSET(fields, 1)) {
65382 log_packet_detailed(" got field 'ui_name'");
65383#ifdef FREECIV_JSON_CONNECTION
65384 field_addr.name = "ui_name";
65385#endif /* FREECIV_JSON_CONNECTION */
65386 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
65388 }
65389 }
65390 real_packet->quiet = BV_ISSET(fields, 2);
65391 if (BV_ISSET(fields, 3)) {
65392 log_packet_detailed(" got field 'result'");
65393#ifdef FREECIV_JSON_CONNECTION
65394 field_addr.name = "result";
65395#endif /* FREECIV_JSON_CONNECTION */
65396 {
65397 int readin;
65398
65399 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65401 }
65402 real_packet->result = readin;
65403 }
65404 }
65405 if (BV_ISSET(fields, 4)) {
65406 log_packet_detailed(" got field 'sub_results'");
65407#ifdef FREECIV_JSON_CONNECTION
65408 field_addr.name = "sub_results";
65409#endif /* FREECIV_JSON_CONNECTION */
65410 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
65411 RECEIVE_PACKET_FIELD_ERROR(sub_results);
65412 }
65413 }
65414 real_packet->actor_consuming_always = BV_ISSET(fields, 5);
65415 if (BV_ISSET(fields, 6)) {
65416 log_packet_detailed(" got field 'act_kind'");
65417#ifdef FREECIV_JSON_CONNECTION
65418 field_addr.name = "act_kind";
65419#endif /* FREECIV_JSON_CONNECTION */
65420 {
65421 int readin;
65422
65423 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65425 }
65426 real_packet->act_kind = readin;
65427 }
65428 }
65429 if (BV_ISSET(fields, 7)) {
65430 log_packet_detailed(" got field 'tgt_kind'");
65431#ifdef FREECIV_JSON_CONNECTION
65432 field_addr.name = "tgt_kind";
65433#endif /* FREECIV_JSON_CONNECTION */
65434 {
65435 int readin;
65436
65437 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65439 }
65440 real_packet->tgt_kind = readin;
65441 }
65442 }
65443 if (BV_ISSET(fields, 8)) {
65444 log_packet_detailed(" got field 'sub_tgt_kind'");
65445#ifdef FREECIV_JSON_CONNECTION
65446 field_addr.name = "sub_tgt_kind";
65447#endif /* FREECIV_JSON_CONNECTION */
65448 {
65449 int readin;
65450
65451 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65452 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
65453 }
65454 real_packet->sub_tgt_kind = readin;
65455 }
65456 }
65457 if (BV_ISSET(fields, 9)) {
65458 log_packet_detailed(" got field 'min_distance'");
65459#ifdef FREECIV_JSON_CONNECTION
65460 field_addr.name = "min_distance";
65461#endif /* FREECIV_JSON_CONNECTION */
65462 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
65463 RECEIVE_PACKET_FIELD_ERROR(min_distance);
65464 }
65465 }
65466 if (BV_ISSET(fields, 10)) {
65467 log_packet_detailed(" got field 'max_distance'");
65468#ifdef FREECIV_JSON_CONNECTION
65469 field_addr.name = "max_distance";
65470#endif /* FREECIV_JSON_CONNECTION */
65471 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
65472 RECEIVE_PACKET_FIELD_ERROR(max_distance);
65473 }
65474 }
65475 if (BV_ISSET(fields, 11)) {
65476 log_packet_detailed(" got field 'blocked_by'");
65477#ifdef FREECIV_JSON_CONNECTION
65478 field_addr.name = "blocked_by";
65479#endif /* FREECIV_JSON_CONNECTION */
65480 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
65481 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
65482 }
65483 }
65484
65485 if (NULL == old) {
65486 old = fc_malloc(sizeof(*old));
65487 *old = *real_packet;
65488 genhash_insert(*hash, old, old);
65489 } else {
65490 *old = *real_packet;
65491 }
65492
65493#endif /* FREECIV_DELTA_PROTOCOL */
65495}
65496
65498{
65499 const struct packet_ruleset_action *real_packet = packet;
65500 int e;
65501#ifdef FREECIV_DELTA_PROTOCOL
65503 struct packet_ruleset_action *old;
65504 bool differ;
65505 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION;
65506#endif /* FREECIV_DELTA_PROTOCOL */
65508#ifdef FREECIV_JSON_CONNECTION
65509 struct plocation field_addr;
65510 {
65514 }
65515#endif /* FREECIV_JSON_CONNECTION */
65516
65517 log_packet_detailed("packet_ruleset_action_100: sending info about ()");
65518
65519#ifdef FREECIV_DELTA_PROTOCOL
65520 if (NULL == *hash) {
65522 NULL, NULL, NULL, free);
65523 }
65524 BV_CLR_ALL(fields);
65525
65526 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
65527 old = fc_malloc(sizeof(*old));
65528 *old = *real_packet;
65529 genhash_insert(*hash, old, old);
65530 memset(old, 0, sizeof(*old));
65531 }
65532 differ = (old->id != real_packet->id);
65533 if (differ) {
65534 BV_SET(fields, 0);
65535 }
65536
65537 differ = (strcmp(old->ui_name, real_packet->ui_name) != 0);
65538 if (differ) {
65539 BV_SET(fields, 1);
65540 }
65541
65542 if (packet->quiet) {
65543 BV_SET(fields, 2);
65544 }
65545
65546 differ = (old->result != real_packet->result);
65547 if (differ) {
65548 BV_SET(fields, 3);
65549 }
65550
65551 differ = !BV_ARE_EQUAL(old->sub_results, real_packet->sub_results);
65552 if (differ) {
65553 BV_SET(fields, 4);
65554 }
65555
65556 if (packet->actor_consuming_always) {
65557 BV_SET(fields, 5);
65558 }
65559
65560 differ = (old->act_kind != real_packet->act_kind);
65561 if (differ) {
65562 BV_SET(fields, 6);
65563 }
65564
65565 differ = (old->tgt_kind != real_packet->tgt_kind);
65566 if (differ) {
65567 BV_SET(fields, 7);
65568 }
65569
65570 differ = (old->sub_tgt_kind != real_packet->sub_tgt_kind);
65571 if (differ) {
65572 BV_SET(fields, 8);
65573 }
65574
65575 differ = (old->min_distance != real_packet->min_distance);
65576 if (differ) {
65577 BV_SET(fields, 9);
65578 }
65579
65580 differ = (old->max_distance != real_packet->max_distance);
65581 if (differ) {
65582 BV_SET(fields, 10);
65583 }
65584
65585 differ = !BV_ARE_EQUAL(old->blocked_by, real_packet->blocked_by);
65586 if (differ) {
65587 BV_SET(fields, 11);
65588 }
65589
65590
65591#ifdef FREECIV_JSON_CONNECTION
65592 field_addr.name = "fields";
65593#endif /* FREECIV_JSON_CONNECTION */
65594 e = 0;
65595 e |= DIO_BV_PUT(&dout, &field_addr, fields);
65596 if (e) {
65597 log_packet_detailed("fields bitvector error detected");
65598 }
65599
65600 if (BV_ISSET(fields, 0)) {
65601 log_packet_detailed(" field 'id' has changed");
65602#ifdef FREECIV_JSON_CONNECTION
65603 field_addr.name = "id";
65604#endif /* FREECIV_JSON_CONNECTION */
65605 e = 0;
65606 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65607 if (e) {
65608 log_packet_detailed("'id' field error detected");
65609 }
65610 }
65611 if (BV_ISSET(fields, 1)) {
65612 log_packet_detailed(" field 'ui_name' has changed");
65613#ifdef FREECIV_JSON_CONNECTION
65614 field_addr.name = "ui_name";
65615#endif /* FREECIV_JSON_CONNECTION */
65616 e = 0;
65617 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
65618 if (e) {
65619 log_packet_detailed("'ui_name' field error detected");
65620 }
65621 }
65622 /* field 2 is folded into the header */
65623 if (BV_ISSET(fields, 3)) {
65624 log_packet_detailed(" field 'result' has changed");
65625#ifdef FREECIV_JSON_CONNECTION
65626 field_addr.name = "result";
65627#endif /* FREECIV_JSON_CONNECTION */
65628 e = 0;
65629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
65630 if (e) {
65631 log_packet_detailed("'result' field error detected");
65632 }
65633 }
65634 if (BV_ISSET(fields, 4)) {
65635 log_packet_detailed(" field 'sub_results' has changed");
65636#ifdef FREECIV_JSON_CONNECTION
65637 field_addr.name = "sub_results";
65638#endif /* FREECIV_JSON_CONNECTION */
65639 e = 0;
65640 e |= DIO_BV_PUT(&dout, &field_addr, packet->sub_results);
65641 if (e) {
65642 log_packet_detailed("'sub_results' field error detected");
65643 }
65644 }
65645 /* field 5 is folded into the header */
65646 if (BV_ISSET(fields, 6)) {
65647 log_packet_detailed(" field 'act_kind' has changed");
65648#ifdef FREECIV_JSON_CONNECTION
65649 field_addr.name = "act_kind";
65650#endif /* FREECIV_JSON_CONNECTION */
65651 e = 0;
65652 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
65653 if (e) {
65654 log_packet_detailed("'act_kind' field error detected");
65655 }
65656 }
65657 if (BV_ISSET(fields, 7)) {
65658 log_packet_detailed(" field 'tgt_kind' has changed");
65659#ifdef FREECIV_JSON_CONNECTION
65660 field_addr.name = "tgt_kind";
65661#endif /* FREECIV_JSON_CONNECTION */
65662 e = 0;
65663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
65664 if (e) {
65665 log_packet_detailed("'tgt_kind' field error detected");
65666 }
65667 }
65668 if (BV_ISSET(fields, 8)) {
65669 log_packet_detailed(" field 'sub_tgt_kind' has changed");
65670#ifdef FREECIV_JSON_CONNECTION
65671 field_addr.name = "sub_tgt_kind";
65672#endif /* FREECIV_JSON_CONNECTION */
65673 e = 0;
65674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
65675 if (e) {
65676 log_packet_detailed("'sub_tgt_kind' field error detected");
65677 }
65678 }
65679 if (BV_ISSET(fields, 9)) {
65680 log_packet_detailed(" field 'min_distance' has changed");
65681#ifdef FREECIV_JSON_CONNECTION
65682 field_addr.name = "min_distance";
65683#endif /* FREECIV_JSON_CONNECTION */
65684 e = 0;
65685 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
65686 if (e) {
65687 log_packet_detailed("'min_distance' field error detected");
65688 }
65689 }
65690 if (BV_ISSET(fields, 10)) {
65691 log_packet_detailed(" field 'max_distance' has changed");
65692#ifdef FREECIV_JSON_CONNECTION
65693 field_addr.name = "max_distance";
65694#endif /* FREECIV_JSON_CONNECTION */
65695 e = 0;
65696 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
65697 if (e) {
65698 log_packet_detailed("'max_distance' field error detected");
65699 }
65700 }
65701 if (BV_ISSET(fields, 11)) {
65702 log_packet_detailed(" field 'blocked_by' has changed");
65703#ifdef FREECIV_JSON_CONNECTION
65704 field_addr.name = "blocked_by";
65705#endif /* FREECIV_JSON_CONNECTION */
65706 e = 0;
65707 e |= DIO_BV_PUT(&dout, &field_addr, packet->blocked_by);
65708 if (e) {
65709 log_packet_detailed("'blocked_by' field error detected");
65710 }
65711 }
65712
65713 *old = *real_packet;
65714#endif /* FREECIV_DELTA_PROTOCOL */
65715#ifndef FREECIV_DELTA_PROTOCOL
65716#ifdef FREECIV_JSON_CONNECTION
65717 field_addr.name = "id";
65718#endif /* FREECIV_JSON_CONNECTION */
65719 e = 0;
65720 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65721 if (e) {
65722 log_packet_detailed("'id' field error detected");
65723 }
65724#ifdef FREECIV_JSON_CONNECTION
65725 field_addr.name = "ui_name";
65726#endif /* FREECIV_JSON_CONNECTION */
65727 e = 0;
65728 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
65729 if (e) {
65730 log_packet_detailed("'ui_name' field error detected");
65731 }
65732#ifdef FREECIV_JSON_CONNECTION
65733 field_addr.name = "quiet";
65734#endif /* FREECIV_JSON_CONNECTION */
65735 e = 0;
65736 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
65737 if (e) {
65738 log_packet_detailed("'quiet' field error detected");
65739 }
65740#ifdef FREECIV_JSON_CONNECTION
65741 field_addr.name = "result";
65742#endif /* FREECIV_JSON_CONNECTION */
65743 e = 0;
65744 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
65745 if (e) {
65746 log_packet_detailed("'result' field error detected");
65747 }
65748#ifdef FREECIV_JSON_CONNECTION
65749 field_addr.name = "sub_results";
65750#endif /* FREECIV_JSON_CONNECTION */
65751 e = 0;
65752 e |= DIO_BV_PUT(&dout, &field_addr, packet->sub_results);
65753 if (e) {
65754 log_packet_detailed("'sub_results' field error detected");
65755 }
65756#ifdef FREECIV_JSON_CONNECTION
65757 field_addr.name = "actor_consuming_always";
65758#endif /* FREECIV_JSON_CONNECTION */
65759 e = 0;
65760 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->actor_consuming_always);
65761 if (e) {
65762 log_packet_detailed("'actor_consuming_always' field error detected");
65763 }
65764#ifdef FREECIV_JSON_CONNECTION
65765 field_addr.name = "act_kind";
65766#endif /* FREECIV_JSON_CONNECTION */
65767 e = 0;
65768 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
65769 if (e) {
65770 log_packet_detailed("'act_kind' field error detected");
65771 }
65772#ifdef FREECIV_JSON_CONNECTION
65773 field_addr.name = "tgt_kind";
65774#endif /* FREECIV_JSON_CONNECTION */
65775 e = 0;
65776 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
65777 if (e) {
65778 log_packet_detailed("'tgt_kind' field error detected");
65779 }
65780#ifdef FREECIV_JSON_CONNECTION
65781 field_addr.name = "sub_tgt_kind";
65782#endif /* FREECIV_JSON_CONNECTION */
65783 e = 0;
65784 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
65785 if (e) {
65786 log_packet_detailed("'sub_tgt_kind' field error detected");
65787 }
65788#ifdef FREECIV_JSON_CONNECTION
65789 field_addr.name = "min_distance";
65790#endif /* FREECIV_JSON_CONNECTION */
65791 e = 0;
65792 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
65793 if (e) {
65794 log_packet_detailed("'min_distance' field error detected");
65795 }
65796#ifdef FREECIV_JSON_CONNECTION
65797 field_addr.name = "max_distance";
65798#endif /* FREECIV_JSON_CONNECTION */
65799 e = 0;
65800 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
65801 if (e) {
65802 log_packet_detailed("'max_distance' field error detected");
65803 }
65804#ifdef FREECIV_JSON_CONNECTION
65805 field_addr.name = "blocked_by";
65806#endif /* FREECIV_JSON_CONNECTION */
65807 e = 0;
65808 e |= DIO_BV_PUT(&dout, &field_addr, packet->blocked_by);
65809 if (e) {
65810 log_packet_detailed("'blocked_by' field error detected");
65811 }
65812
65813#endif
65815}
65816
65818{
65819 if (!pc->used) {
65820 log_error("WARNING: trying to send data to the closed connection %s",
65822 return -1;
65823 }
65824 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION].packet != NULL, -1,
65825 "Handler for PACKET_RULESET_ACTION not installed");
65826 return pc->phs.handlers->send[PACKET_RULESET_ACTION].packet(pc, packet);
65827}
65828
65829void lsend_packet_ruleset_action(struct conn_list *dest, const struct packet_ruleset_action *packet)
65830{
65831 conn_list_iterate(dest, pconn) {
65834}
65835
65836#ifdef FREECIV_DELTA_PROTOCOL
65837#define hash_packet_ruleset_action_enabler_100 hash_const
65838
65839#define cmp_packet_ruleset_action_enabler_100 cmp_const
65840
65842#endif /* FREECIV_DELTA_PROTOCOL */
65843
65845{
65846#ifdef FREECIV_DELTA_PROTOCOL
65849 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_ENABLER;
65850#endif /* FREECIV_DELTA_PROTOCOL */
65852#ifdef FREECIV_JSON_CONNECTION
65853 struct plocation field_addr;
65854 {
65858 }
65859#endif /* FREECIV_JSON_CONNECTION */
65860
65861#ifdef FREECIV_DELTA_PROTOCOL
65862#ifdef FREECIV_JSON_CONNECTION
65863 field_addr.name = "fields";
65864#endif /* FREECIV_JSON_CONNECTION */
65865 DIO_BV_GET(&din, &field_addr, fields);
65866
65867#else /* FREECIV_DELTA_PROTOCOL */
65868#ifdef FREECIV_JSON_CONNECTION
65869 field_addr.name = "enabled_action";
65870#endif /* FREECIV_JSON_CONNECTION */
65871 {
65872 int readin;
65873
65874 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65875 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
65876 }
65877 real_packet->enabled_action = readin;
65878 }
65879#ifdef FREECIV_JSON_CONNECTION
65880 field_addr.name = "actor_reqs_count";
65881#endif /* FREECIV_JSON_CONNECTION */
65882 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->actor_reqs_count)) {
65883 RECEIVE_PACKET_FIELD_ERROR(actor_reqs_count);
65884 }
65885#ifdef FREECIV_JSON_CONNECTION
65886 field_addr.name = "actor_reqs";
65887#endif /* FREECIV_JSON_CONNECTION */
65888 if (real_packet->actor_reqs_count > MAX_NUM_REQS) {
65889 RECEIVE_PACKET_FIELD_ERROR(actor_reqs, ": truncation array");
65890 }
65891 {
65892 int i;
65893
65894#ifdef FREECIV_JSON_CONNECTION
65895 /* Enter array. */
65896 field_addr.sub_location = plocation_elem_new(0);
65897#endif /* FREECIV_JSON_CONNECTION */
65898
65899 for (i = 0; i < real_packet->actor_reqs_count; i++) {
65900#ifdef FREECIV_JSON_CONNECTION
65901 field_addr.sub_location->number = i;
65902#endif /* FREECIV_JSON_CONNECTION */
65903
65904 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs[i])) {
65905 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
65906 }
65907 }
65908
65909#ifdef FREECIV_JSON_CONNECTION
65910 /* Exit array. */
65911 FC_FREE(field_addr.sub_location);
65912#endif /* FREECIV_JSON_CONNECTION */
65913 }
65914#ifdef FREECIV_JSON_CONNECTION
65915 field_addr.name = "target_reqs_count";
65916#endif /* FREECIV_JSON_CONNECTION */
65917 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->target_reqs_count)) {
65918 RECEIVE_PACKET_FIELD_ERROR(target_reqs_count);
65919 }
65920#ifdef FREECIV_JSON_CONNECTION
65921 field_addr.name = "target_reqs";
65922#endif /* FREECIV_JSON_CONNECTION */
65923 if (real_packet->target_reqs_count > MAX_NUM_REQS) {
65924 RECEIVE_PACKET_FIELD_ERROR(target_reqs, ": truncation array");
65925 }
65926 {
65927 int i;
65928
65929#ifdef FREECIV_JSON_CONNECTION
65930 /* Enter array. */
65931 field_addr.sub_location = plocation_elem_new(0);
65932#endif /* FREECIV_JSON_CONNECTION */
65933
65934 for (i = 0; i < real_packet->target_reqs_count; i++) {
65935#ifdef FREECIV_JSON_CONNECTION
65936 field_addr.sub_location->number = i;
65937#endif /* FREECIV_JSON_CONNECTION */
65938
65939 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs[i])) {
65940 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
65941 }
65942 }
65943
65944#ifdef FREECIV_JSON_CONNECTION
65945 /* Exit array. */
65946 FC_FREE(field_addr.sub_location);
65947#endif /* FREECIV_JSON_CONNECTION */
65948 }
65949#endif
65950 log_packet_detailed("packet_ruleset_action_enabler_100: got info about ()");
65951
65952#ifdef FREECIV_DELTA_PROTOCOL
65953 if (NULL == *hash) {
65955 NULL, NULL, NULL, free);
65956 }
65957
65958 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
65959 *real_packet = *old;
65960 } else {
65961 log_packet_detailed(" no old info");
65962 memset(real_packet, 0, sizeof(*real_packet));
65963 }
65964
65965 if (BV_ISSET(fields, 0)) {
65966 log_packet_detailed(" got field 'enabled_action'");
65967#ifdef FREECIV_JSON_CONNECTION
65968 field_addr.name = "enabled_action";
65969#endif /* FREECIV_JSON_CONNECTION */
65970 {
65971 int readin;
65972
65973 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65974 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
65975 }
65976 real_packet->enabled_action = readin;
65977 }
65978 }
65979 if (BV_ISSET(fields, 1)) {
65980 log_packet_detailed(" got field 'actor_reqs_count'");
65981#ifdef FREECIV_JSON_CONNECTION
65982 field_addr.name = "actor_reqs_count";
65983#endif /* FREECIV_JSON_CONNECTION */
65984 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->actor_reqs_count)) {
65985 RECEIVE_PACKET_FIELD_ERROR(actor_reqs_count);
65986 }
65987 }
65988 if (BV_ISSET(fields, 2)) {
65989 log_packet_detailed(" got field 'actor_reqs'");
65990#ifdef FREECIV_JSON_CONNECTION
65991 field_addr.name = "actor_reqs";
65992#endif /* FREECIV_JSON_CONNECTION */
65993 if (real_packet->actor_reqs_count > MAX_NUM_REQS) {
65994 RECEIVE_PACKET_FIELD_ERROR(actor_reqs, ": truncation array");
65995 }
65996 {
65997 int i;
65998
65999#ifdef FREECIV_JSON_CONNECTION
66000 /* Enter array. */
66001 field_addr.sub_location = plocation_elem_new(0);
66002#endif /* FREECIV_JSON_CONNECTION */
66003
66004 for (i = 0; i < real_packet->actor_reqs_count; i++) {
66005#ifdef FREECIV_JSON_CONNECTION
66006 field_addr.sub_location->number = i;
66007#endif /* FREECIV_JSON_CONNECTION */
66008
66009 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs[i])) {
66010 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
66011 }
66012 }
66013
66014#ifdef FREECIV_JSON_CONNECTION
66015 /* Exit array. */
66016 FC_FREE(field_addr.sub_location);
66017#endif /* FREECIV_JSON_CONNECTION */
66018 }
66019 }
66020 if (BV_ISSET(fields, 3)) {
66021 log_packet_detailed(" got field 'target_reqs_count'");
66022#ifdef FREECIV_JSON_CONNECTION
66023 field_addr.name = "target_reqs_count";
66024#endif /* FREECIV_JSON_CONNECTION */
66025 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->target_reqs_count)) {
66026 RECEIVE_PACKET_FIELD_ERROR(target_reqs_count);
66027 }
66028 }
66029 if (BV_ISSET(fields, 4)) {
66030 log_packet_detailed(" got field 'target_reqs'");
66031#ifdef FREECIV_JSON_CONNECTION
66032 field_addr.name = "target_reqs";
66033#endif /* FREECIV_JSON_CONNECTION */
66034 if (real_packet->target_reqs_count > MAX_NUM_REQS) {
66035 RECEIVE_PACKET_FIELD_ERROR(target_reqs, ": truncation array");
66036 }
66037 {
66038 int i;
66039
66040#ifdef FREECIV_JSON_CONNECTION
66041 /* Enter array. */
66042 field_addr.sub_location = plocation_elem_new(0);
66043#endif /* FREECIV_JSON_CONNECTION */
66044
66045 for (i = 0; i < real_packet->target_reqs_count; i++) {
66046#ifdef FREECIV_JSON_CONNECTION
66047 field_addr.sub_location->number = i;
66048#endif /* FREECIV_JSON_CONNECTION */
66049
66050 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs[i])) {
66051 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
66052 }
66053 }
66054
66055#ifdef FREECIV_JSON_CONNECTION
66056 /* Exit array. */
66057 FC_FREE(field_addr.sub_location);
66058#endif /* FREECIV_JSON_CONNECTION */
66059 }
66060 }
66061
66062 if (NULL == old) {
66063 old = fc_malloc(sizeof(*old));
66064 *old = *real_packet;
66065 genhash_insert(*hash, old, old);
66066 } else {
66067 *old = *real_packet;
66068 }
66069
66070#endif /* FREECIV_DELTA_PROTOCOL */
66072}
66073
66075{
66076 const struct packet_ruleset_action_enabler *real_packet = packet;
66077 int e;
66078#ifdef FREECIV_DELTA_PROTOCOL
66081 bool differ;
66082 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_ENABLER;
66083#endif /* FREECIV_DELTA_PROTOCOL */
66085#ifdef FREECIV_JSON_CONNECTION
66086 struct plocation field_addr;
66087 {
66091 }
66092#endif /* FREECIV_JSON_CONNECTION */
66093
66094 log_packet_detailed("packet_ruleset_action_enabler_100: sending info about ()");
66095
66096#ifdef FREECIV_DELTA_PROTOCOL
66097 if (NULL == *hash) {
66099 NULL, NULL, NULL, free);
66100 }
66101 BV_CLR_ALL(fields);
66102
66103 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
66104 old = fc_malloc(sizeof(*old));
66105 *old = *real_packet;
66106 genhash_insert(*hash, old, old);
66107 memset(old, 0, sizeof(*old));
66108 }
66109 differ = (old->enabled_action != real_packet->enabled_action);
66110 if (differ) {
66111 BV_SET(fields, 0);
66112 }
66113
66114 differ = (old->actor_reqs_count != real_packet->actor_reqs_count);
66115 if (differ) {
66116 BV_SET(fields, 1);
66117 }
66118
66119 differ = (old->actor_reqs_count != real_packet->actor_reqs_count);
66120 if (!differ) {
66121 int i;
66122
66123 for (i = 0; i < real_packet->actor_reqs_count; i++) {
66124 differ = !are_requirements_equal(&old->actor_reqs[i], &real_packet->actor_reqs[i]);
66125 if (differ) {
66126 break;
66127 }
66128 }
66129 }
66130 if (differ) {
66131 BV_SET(fields, 2);
66132 }
66133
66134 differ = (old->target_reqs_count != real_packet->target_reqs_count);
66135 if (differ) {
66136 BV_SET(fields, 3);
66137 }
66138
66139 differ = (old->target_reqs_count != real_packet->target_reqs_count);
66140 if (!differ) {
66141 int i;
66142
66143 for (i = 0; i < real_packet->target_reqs_count; i++) {
66144 differ = !are_requirements_equal(&old->target_reqs[i], &real_packet->target_reqs[i]);
66145 if (differ) {
66146 break;
66147 }
66148 }
66149 }
66150 if (differ) {
66151 BV_SET(fields, 4);
66152 }
66153
66154
66155#ifdef FREECIV_JSON_CONNECTION
66156 field_addr.name = "fields";
66157#endif /* FREECIV_JSON_CONNECTION */
66158 e = 0;
66159 e |= DIO_BV_PUT(&dout, &field_addr, fields);
66160 if (e) {
66161 log_packet_detailed("fields bitvector error detected");
66162 }
66163
66164 if (BV_ISSET(fields, 0)) {
66165 log_packet_detailed(" field 'enabled_action' has changed");
66166#ifdef FREECIV_JSON_CONNECTION
66167 field_addr.name = "enabled_action";
66168#endif /* FREECIV_JSON_CONNECTION */
66169 e = 0;
66170 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
66171 if (e) {
66172 log_packet_detailed("'enabled_action' field error detected");
66173 }
66174 }
66175 if (BV_ISSET(fields, 1)) {
66176 log_packet_detailed(" field 'actor_reqs_count' has changed");
66177#ifdef FREECIV_JSON_CONNECTION
66178 field_addr.name = "actor_reqs_count";
66179#endif /* FREECIV_JSON_CONNECTION */
66180 e = 0;
66181 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->actor_reqs_count);
66182 if (e) {
66183 log_packet_detailed("'actor_reqs_count' field error detected");
66184 }
66185 }
66186 if (BV_ISSET(fields, 2)) {
66187 log_packet_detailed(" field 'actor_reqs' has changed");
66188#ifdef FREECIV_JSON_CONNECTION
66189 field_addr.name = "actor_reqs";
66190#endif /* FREECIV_JSON_CONNECTION */
66191 e = 0;
66192 {
66193 int i;
66194
66195#ifdef FREECIV_JSON_CONNECTION
66196 /* Create the array. */
66197 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->actor_reqs_count);
66198
66199 /* Enter the array. */
66200 field_addr.sub_location = plocation_elem_new(0);
66201#endif /* FREECIV_JSON_CONNECTION */
66202
66203 for (i = 0; i < real_packet->actor_reqs_count; i++) {
66204#ifdef FREECIV_JSON_CONNECTION
66205 /* Next array element. */
66206 field_addr.sub_location->number = i;
66207#endif /* FREECIV_JSON_CONNECTION */
66208
66209 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs[i]);
66210 }
66211
66212#ifdef FREECIV_JSON_CONNECTION
66213 /* Exit array. */
66214 FC_FREE(field_addr.sub_location);
66215#endif /* FREECIV_JSON_CONNECTION */
66216 }
66217 if (e) {
66218 log_packet_detailed("'actor_reqs' field error detected");
66219 }
66220 }
66221 if (BV_ISSET(fields, 3)) {
66222 log_packet_detailed(" field 'target_reqs_count' has changed");
66223#ifdef FREECIV_JSON_CONNECTION
66224 field_addr.name = "target_reqs_count";
66225#endif /* FREECIV_JSON_CONNECTION */
66226 e = 0;
66227 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->target_reqs_count);
66228 if (e) {
66229 log_packet_detailed("'target_reqs_count' field error detected");
66230 }
66231 }
66232 if (BV_ISSET(fields, 4)) {
66233 log_packet_detailed(" field 'target_reqs' has changed");
66234#ifdef FREECIV_JSON_CONNECTION
66235 field_addr.name = "target_reqs";
66236#endif /* FREECIV_JSON_CONNECTION */
66237 e = 0;
66238 {
66239 int i;
66240
66241#ifdef FREECIV_JSON_CONNECTION
66242 /* Create the array. */
66243 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->target_reqs_count);
66244
66245 /* Enter the array. */
66246 field_addr.sub_location = plocation_elem_new(0);
66247#endif /* FREECIV_JSON_CONNECTION */
66248
66249 for (i = 0; i < real_packet->target_reqs_count; i++) {
66250#ifdef FREECIV_JSON_CONNECTION
66251 /* Next array element. */
66252 field_addr.sub_location->number = i;
66253#endif /* FREECIV_JSON_CONNECTION */
66254
66255 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs[i]);
66256 }
66257
66258#ifdef FREECIV_JSON_CONNECTION
66259 /* Exit array. */
66260 FC_FREE(field_addr.sub_location);
66261#endif /* FREECIV_JSON_CONNECTION */
66262 }
66263 if (e) {
66264 log_packet_detailed("'target_reqs' field error detected");
66265 }
66266 }
66267
66268 *old = *real_packet;
66269#endif /* FREECIV_DELTA_PROTOCOL */
66270#ifndef FREECIV_DELTA_PROTOCOL
66271#ifdef FREECIV_JSON_CONNECTION
66272 field_addr.name = "enabled_action";
66273#endif /* FREECIV_JSON_CONNECTION */
66274 e = 0;
66275 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
66276 if (e) {
66277 log_packet_detailed("'enabled_action' field error detected");
66278 }
66279#ifdef FREECIV_JSON_CONNECTION
66280 field_addr.name = "actor_reqs_count";
66281#endif /* FREECIV_JSON_CONNECTION */
66282 e = 0;
66283 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->actor_reqs_count);
66284 if (e) {
66285 log_packet_detailed("'actor_reqs_count' field error detected");
66286 }
66287#ifdef FREECIV_JSON_CONNECTION
66288 field_addr.name = "actor_reqs";
66289#endif /* FREECIV_JSON_CONNECTION */
66290 e = 0;
66291 {
66292 int i;
66293
66294#ifdef FREECIV_JSON_CONNECTION
66295 /* Create the array. */
66296 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->actor_reqs_count);
66297
66298 /* Enter the array. */
66299 field_addr.sub_location = plocation_elem_new(0);
66300#endif /* FREECIV_JSON_CONNECTION */
66301
66302 for (i = 0; i < real_packet->actor_reqs_count; i++) {
66303#ifdef FREECIV_JSON_CONNECTION
66304 /* Next array element. */
66305 field_addr.sub_location->number = i;
66306#endif /* FREECIV_JSON_CONNECTION */
66307
66308 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs[i]);
66309 }
66310
66311#ifdef FREECIV_JSON_CONNECTION
66312 /* Exit array. */
66313 FC_FREE(field_addr.sub_location);
66314#endif /* FREECIV_JSON_CONNECTION */
66315 }
66316 if (e) {
66317 log_packet_detailed("'actor_reqs' field error detected");
66318 }
66319#ifdef FREECIV_JSON_CONNECTION
66320 field_addr.name = "target_reqs_count";
66321#endif /* FREECIV_JSON_CONNECTION */
66322 e = 0;
66323 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->target_reqs_count);
66324 if (e) {
66325 log_packet_detailed("'target_reqs_count' field error detected");
66326 }
66327#ifdef FREECIV_JSON_CONNECTION
66328 field_addr.name = "target_reqs";
66329#endif /* FREECIV_JSON_CONNECTION */
66330 e = 0;
66331 {
66332 int i;
66333
66334#ifdef FREECIV_JSON_CONNECTION
66335 /* Create the array. */
66336 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->target_reqs_count);
66337
66338 /* Enter the array. */
66339 field_addr.sub_location = plocation_elem_new(0);
66340#endif /* FREECIV_JSON_CONNECTION */
66341
66342 for (i = 0; i < real_packet->target_reqs_count; i++) {
66343#ifdef FREECIV_JSON_CONNECTION
66344 /* Next array element. */
66345 field_addr.sub_location->number = i;
66346#endif /* FREECIV_JSON_CONNECTION */
66347
66348 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs[i]);
66349 }
66350
66351#ifdef FREECIV_JSON_CONNECTION
66352 /* Exit array. */
66353 FC_FREE(field_addr.sub_location);
66354#endif /* FREECIV_JSON_CONNECTION */
66355 }
66356 if (e) {
66357 log_packet_detailed("'target_reqs' field error detected");
66358 }
66359
66360#endif
66362}
66363
66365{
66366 if (!pc->used) {
66367 log_error("WARNING: trying to send data to the closed connection %s",
66369 return -1;
66370 }
66371 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet != NULL, -1,
66372 "Handler for PACKET_RULESET_ACTION_ENABLER not installed");
66373 return pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet(pc, packet);
66374}
66375
66382
66383#ifdef FREECIV_DELTA_PROTOCOL
66384#define hash_packet_ruleset_action_auto_100 hash_const
66385
66386#define cmp_packet_ruleset_action_auto_100 cmp_const
66387
66389#endif /* FREECIV_DELTA_PROTOCOL */
66390
66392{
66393#ifdef FREECIV_DELTA_PROTOCOL
66395 struct packet_ruleset_action_auto *old;
66396 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_AUTO;
66397#endif /* FREECIV_DELTA_PROTOCOL */
66399#ifdef FREECIV_JSON_CONNECTION
66400 struct plocation field_addr;
66401 {
66405 }
66406#endif /* FREECIV_JSON_CONNECTION */
66407
66408#ifdef FREECIV_DELTA_PROTOCOL
66409#ifdef FREECIV_JSON_CONNECTION
66410 field_addr.name = "fields";
66411#endif /* FREECIV_JSON_CONNECTION */
66412 DIO_BV_GET(&din, &field_addr, fields);
66413
66414#else /* FREECIV_DELTA_PROTOCOL */
66415#ifdef FREECIV_JSON_CONNECTION
66416 field_addr.name = "id";
66417#endif /* FREECIV_JSON_CONNECTION */
66418 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
66420 }
66421#ifdef FREECIV_JSON_CONNECTION
66422 field_addr.name = "cause";
66423#endif /* FREECIV_JSON_CONNECTION */
66424 {
66425 int readin;
66426
66427 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66429 }
66430 real_packet->cause = readin;
66431 }
66432#ifdef FREECIV_JSON_CONNECTION
66433 field_addr.name = "reqs_count";
66434#endif /* FREECIV_JSON_CONNECTION */
66435 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
66436 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
66437 }
66438#ifdef FREECIV_JSON_CONNECTION
66439 field_addr.name = "reqs";
66440#endif /* FREECIV_JSON_CONNECTION */
66441 if (real_packet->reqs_count > MAX_NUM_REQS) {
66442 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
66443 }
66444 {
66445 int i;
66446
66447#ifdef FREECIV_JSON_CONNECTION
66448 /* Enter array. */
66449 field_addr.sub_location = plocation_elem_new(0);
66450#endif /* FREECIV_JSON_CONNECTION */
66451
66452 for (i = 0; i < real_packet->reqs_count; i++) {
66453#ifdef FREECIV_JSON_CONNECTION
66454 field_addr.sub_location->number = i;
66455#endif /* FREECIV_JSON_CONNECTION */
66456
66457 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
66459 }
66460 }
66461
66462#ifdef FREECIV_JSON_CONNECTION
66463 /* Exit array. */
66464 FC_FREE(field_addr.sub_location);
66465#endif /* FREECIV_JSON_CONNECTION */
66466 }
66467#ifdef FREECIV_JSON_CONNECTION
66468 field_addr.name = "alternatives_count";
66469#endif /* FREECIV_JSON_CONNECTION */
66470 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
66471 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
66472 }
66473#ifdef FREECIV_JSON_CONNECTION
66474 field_addr.name = "alternatives";
66475#endif /* FREECIV_JSON_CONNECTION */
66476 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
66477 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": truncation array");
66478 }
66479 {
66480 int i;
66481
66482#ifdef FREECIV_JSON_CONNECTION
66483 /* Enter array. */
66484 field_addr.sub_location = plocation_elem_new(0);
66485#endif /* FREECIV_JSON_CONNECTION */
66486
66487 for (i = 0; i < real_packet->alternatives_count; i++) {
66488#ifdef FREECIV_JSON_CONNECTION
66489 field_addr.sub_location->number = i;
66490#endif /* FREECIV_JSON_CONNECTION */
66491
66492 {
66493 int readin;
66494
66495 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66496 RECEIVE_PACKET_FIELD_ERROR(alternatives);
66497 }
66498 real_packet->alternatives[i] = readin;
66499 }
66500 }
66501
66502#ifdef FREECIV_JSON_CONNECTION
66503 /* Exit array. */
66504 FC_FREE(field_addr.sub_location);
66505#endif /* FREECIV_JSON_CONNECTION */
66506 }
66507#endif
66508 log_packet_detailed("packet_ruleset_action_auto_100: got info about ()");
66509
66510#ifdef FREECIV_DELTA_PROTOCOL
66511 if (NULL == *hash) {
66513 NULL, NULL, NULL, free);
66514 }
66515
66516 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
66517 *real_packet = *old;
66518 } else {
66519 log_packet_detailed(" no old info");
66520 memset(real_packet, 0, sizeof(*real_packet));
66521 }
66522
66523 if (BV_ISSET(fields, 0)) {
66524 log_packet_detailed(" got field 'id'");
66525#ifdef FREECIV_JSON_CONNECTION
66526 field_addr.name = "id";
66527#endif /* FREECIV_JSON_CONNECTION */
66528 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
66530 }
66531 }
66532 if (BV_ISSET(fields, 1)) {
66533 log_packet_detailed(" got field 'cause'");
66534#ifdef FREECIV_JSON_CONNECTION
66535 field_addr.name = "cause";
66536#endif /* FREECIV_JSON_CONNECTION */
66537 {
66538 int readin;
66539
66540 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66542 }
66543 real_packet->cause = readin;
66544 }
66545 }
66546 if (BV_ISSET(fields, 2)) {
66547 log_packet_detailed(" got field 'reqs_count'");
66548#ifdef FREECIV_JSON_CONNECTION
66549 field_addr.name = "reqs_count";
66550#endif /* FREECIV_JSON_CONNECTION */
66551 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
66552 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
66553 }
66554 }
66555 if (BV_ISSET(fields, 3)) {
66556 log_packet_detailed(" got field 'reqs'");
66557#ifdef FREECIV_JSON_CONNECTION
66558 field_addr.name = "reqs";
66559#endif /* FREECIV_JSON_CONNECTION */
66560 if (real_packet->reqs_count > MAX_NUM_REQS) {
66561 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
66562 }
66563 {
66564 int i;
66565
66566#ifdef FREECIV_JSON_CONNECTION
66567 /* Enter array. */
66568 field_addr.sub_location = plocation_elem_new(0);
66569#endif /* FREECIV_JSON_CONNECTION */
66570
66571 for (i = 0; i < real_packet->reqs_count; i++) {
66572#ifdef FREECIV_JSON_CONNECTION
66573 field_addr.sub_location->number = i;
66574#endif /* FREECIV_JSON_CONNECTION */
66575
66576 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
66578 }
66579 }
66580
66581#ifdef FREECIV_JSON_CONNECTION
66582 /* Exit array. */
66583 FC_FREE(field_addr.sub_location);
66584#endif /* FREECIV_JSON_CONNECTION */
66585 }
66586 }
66587 if (BV_ISSET(fields, 4)) {
66588 log_packet_detailed(" got field 'alternatives_count'");
66589#ifdef FREECIV_JSON_CONNECTION
66590 field_addr.name = "alternatives_count";
66591#endif /* FREECIV_JSON_CONNECTION */
66592 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
66593 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
66594 }
66595 }
66596 if (BV_ISSET(fields, 5)) {
66597 log_packet_detailed(" got field 'alternatives'");
66598#ifdef FREECIV_JSON_CONNECTION
66599 field_addr.name = "alternatives";
66600#endif /* FREECIV_JSON_CONNECTION */
66601 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
66602 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": truncation array");
66603 }
66604 {
66605 int i;
66606
66607#ifdef FREECIV_JSON_CONNECTION
66608 /* Enter array. */
66609 field_addr.sub_location = plocation_elem_new(0);
66610#endif /* FREECIV_JSON_CONNECTION */
66611
66612 for (i = 0; i < real_packet->alternatives_count; i++) {
66613#ifdef FREECIV_JSON_CONNECTION
66614 field_addr.sub_location->number = i;
66615#endif /* FREECIV_JSON_CONNECTION */
66616
66617 {
66618 int readin;
66619
66620 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66621 RECEIVE_PACKET_FIELD_ERROR(alternatives);
66622 }
66623 real_packet->alternatives[i] = readin;
66624 }
66625 }
66626
66627#ifdef FREECIV_JSON_CONNECTION
66628 /* Exit array. */
66629 FC_FREE(field_addr.sub_location);
66630#endif /* FREECIV_JSON_CONNECTION */
66631 }
66632 }
66633
66634 if (NULL == old) {
66635 old = fc_malloc(sizeof(*old));
66636 *old = *real_packet;
66637 genhash_insert(*hash, old, old);
66638 } else {
66639 *old = *real_packet;
66640 }
66641
66642#endif /* FREECIV_DELTA_PROTOCOL */
66644}
66645
66647{
66648 const struct packet_ruleset_action_auto *real_packet = packet;
66649 int e;
66650#ifdef FREECIV_DELTA_PROTOCOL
66652 struct packet_ruleset_action_auto *old;
66653 bool differ;
66654 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_AUTO;
66655#endif /* FREECIV_DELTA_PROTOCOL */
66657#ifdef FREECIV_JSON_CONNECTION
66658 struct plocation field_addr;
66659 {
66663 }
66664#endif /* FREECIV_JSON_CONNECTION */
66665
66666 log_packet_detailed("packet_ruleset_action_auto_100: sending info about ()");
66667
66668#ifdef FREECIV_DELTA_PROTOCOL
66669 if (NULL == *hash) {
66671 NULL, NULL, NULL, free);
66672 }
66673 BV_CLR_ALL(fields);
66674
66675 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
66676 old = fc_malloc(sizeof(*old));
66677 *old = *real_packet;
66678 genhash_insert(*hash, old, old);
66679 memset(old, 0, sizeof(*old));
66680 }
66681 differ = (old->id != real_packet->id);
66682 if (differ) {
66683 BV_SET(fields, 0);
66684 }
66685
66686 differ = (old->cause != real_packet->cause);
66687 if (differ) {
66688 BV_SET(fields, 1);
66689 }
66690
66691 differ = (old->reqs_count != real_packet->reqs_count);
66692 if (differ) {
66693 BV_SET(fields, 2);
66694 }
66695
66696 differ = (old->reqs_count != real_packet->reqs_count);
66697 if (!differ) {
66698 int i;
66699
66700 for (i = 0; i < real_packet->reqs_count; i++) {
66701 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
66702 if (differ) {
66703 break;
66704 }
66705 }
66706 }
66707 if (differ) {
66708 BV_SET(fields, 3);
66709 }
66710
66711 differ = (old->alternatives_count != real_packet->alternatives_count);
66712 if (differ) {
66713 BV_SET(fields, 4);
66714 }
66715
66716 differ = (old->alternatives_count != real_packet->alternatives_count);
66717 if (!differ) {
66718 int i;
66719
66720 for (i = 0; i < real_packet->alternatives_count; i++) {
66721 differ = (old->alternatives[i] != real_packet->alternatives[i]);
66722 if (differ) {
66723 break;
66724 }
66725 }
66726 }
66727 if (differ) {
66728 BV_SET(fields, 5);
66729 }
66730
66731
66732#ifdef FREECIV_JSON_CONNECTION
66733 field_addr.name = "fields";
66734#endif /* FREECIV_JSON_CONNECTION */
66735 e = 0;
66736 e |= DIO_BV_PUT(&dout, &field_addr, fields);
66737 if (e) {
66738 log_packet_detailed("fields bitvector error detected");
66739 }
66740
66741 if (BV_ISSET(fields, 0)) {
66742 log_packet_detailed(" field 'id' has changed");
66743#ifdef FREECIV_JSON_CONNECTION
66744 field_addr.name = "id";
66745#endif /* FREECIV_JSON_CONNECTION */
66746 e = 0;
66747 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
66748 if (e) {
66749 log_packet_detailed("'id' field error detected");
66750 }
66751 }
66752 if (BV_ISSET(fields, 1)) {
66753 log_packet_detailed(" field 'cause' has changed");
66754#ifdef FREECIV_JSON_CONNECTION
66755 field_addr.name = "cause";
66756#endif /* FREECIV_JSON_CONNECTION */
66757 e = 0;
66758 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
66759 if (e) {
66760 log_packet_detailed("'cause' field error detected");
66761 }
66762 }
66763 if (BV_ISSET(fields, 2)) {
66764 log_packet_detailed(" field 'reqs_count' has changed");
66765#ifdef FREECIV_JSON_CONNECTION
66766 field_addr.name = "reqs_count";
66767#endif /* FREECIV_JSON_CONNECTION */
66768 e = 0;
66769 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
66770 if (e) {
66771 log_packet_detailed("'reqs_count' field error detected");
66772 }
66773 }
66774 if (BV_ISSET(fields, 3)) {
66775 log_packet_detailed(" field 'reqs' has changed");
66776#ifdef FREECIV_JSON_CONNECTION
66777 field_addr.name = "reqs";
66778#endif /* FREECIV_JSON_CONNECTION */
66779 e = 0;
66780 {
66781 int i;
66782
66783#ifdef FREECIV_JSON_CONNECTION
66784 /* Create the array. */
66785 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
66786
66787 /* Enter the array. */
66788 field_addr.sub_location = plocation_elem_new(0);
66789#endif /* FREECIV_JSON_CONNECTION */
66790
66791 for (i = 0; i < real_packet->reqs_count; i++) {
66792#ifdef FREECIV_JSON_CONNECTION
66793 /* Next array element. */
66794 field_addr.sub_location->number = i;
66795#endif /* FREECIV_JSON_CONNECTION */
66796
66797 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
66798 }
66799
66800#ifdef FREECIV_JSON_CONNECTION
66801 /* Exit array. */
66802 FC_FREE(field_addr.sub_location);
66803#endif /* FREECIV_JSON_CONNECTION */
66804 }
66805 if (e) {
66806 log_packet_detailed("'reqs' field error detected");
66807 }
66808 }
66809 if (BV_ISSET(fields, 4)) {
66810 log_packet_detailed(" field 'alternatives_count' has changed");
66811#ifdef FREECIV_JSON_CONNECTION
66812 field_addr.name = "alternatives_count";
66813#endif /* FREECIV_JSON_CONNECTION */
66814 e = 0;
66815 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
66816 if (e) {
66817 log_packet_detailed("'alternatives_count' field error detected");
66818 }
66819 }
66820 if (BV_ISSET(fields, 5)) {
66821 log_packet_detailed(" field 'alternatives' has changed");
66822#ifdef FREECIV_JSON_CONNECTION
66823 field_addr.name = "alternatives";
66824#endif /* FREECIV_JSON_CONNECTION */
66825 e = 0;
66826 {
66827 int i;
66828
66829#ifdef FREECIV_JSON_CONNECTION
66830 /* Create the array. */
66831 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
66832
66833 /* Enter the array. */
66834 field_addr.sub_location = plocation_elem_new(0);
66835#endif /* FREECIV_JSON_CONNECTION */
66836
66837 for (i = 0; i < real_packet->alternatives_count; i++) {
66838#ifdef FREECIV_JSON_CONNECTION
66839 /* Next array element. */
66840 field_addr.sub_location->number = i;
66841#endif /* FREECIV_JSON_CONNECTION */
66842
66843 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
66844 }
66845
66846#ifdef FREECIV_JSON_CONNECTION
66847 /* Exit array. */
66848 FC_FREE(field_addr.sub_location);
66849#endif /* FREECIV_JSON_CONNECTION */
66850 }
66851 if (e) {
66852 log_packet_detailed("'alternatives' field error detected");
66853 }
66854 }
66855
66856 *old = *real_packet;
66857#endif /* FREECIV_DELTA_PROTOCOL */
66858#ifndef FREECIV_DELTA_PROTOCOL
66859#ifdef FREECIV_JSON_CONNECTION
66860 field_addr.name = "id";
66861#endif /* FREECIV_JSON_CONNECTION */
66862 e = 0;
66863 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
66864 if (e) {
66865 log_packet_detailed("'id' field error detected");
66866 }
66867#ifdef FREECIV_JSON_CONNECTION
66868 field_addr.name = "cause";
66869#endif /* FREECIV_JSON_CONNECTION */
66870 e = 0;
66871 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
66872 if (e) {
66873 log_packet_detailed("'cause' field error detected");
66874 }
66875#ifdef FREECIV_JSON_CONNECTION
66876 field_addr.name = "reqs_count";
66877#endif /* FREECIV_JSON_CONNECTION */
66878 e = 0;
66879 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
66880 if (e) {
66881 log_packet_detailed("'reqs_count' field error detected");
66882 }
66883#ifdef FREECIV_JSON_CONNECTION
66884 field_addr.name = "reqs";
66885#endif /* FREECIV_JSON_CONNECTION */
66886 e = 0;
66887 {
66888 int i;
66889
66890#ifdef FREECIV_JSON_CONNECTION
66891 /* Create the array. */
66892 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
66893
66894 /* Enter the array. */
66895 field_addr.sub_location = plocation_elem_new(0);
66896#endif /* FREECIV_JSON_CONNECTION */
66897
66898 for (i = 0; i < real_packet->reqs_count; i++) {
66899#ifdef FREECIV_JSON_CONNECTION
66900 /* Next array element. */
66901 field_addr.sub_location->number = i;
66902#endif /* FREECIV_JSON_CONNECTION */
66903
66904 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
66905 }
66906
66907#ifdef FREECIV_JSON_CONNECTION
66908 /* Exit array. */
66909 FC_FREE(field_addr.sub_location);
66910#endif /* FREECIV_JSON_CONNECTION */
66911 }
66912 if (e) {
66913 log_packet_detailed("'reqs' field error detected");
66914 }
66915#ifdef FREECIV_JSON_CONNECTION
66916 field_addr.name = "alternatives_count";
66917#endif /* FREECIV_JSON_CONNECTION */
66918 e = 0;
66919 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
66920 if (e) {
66921 log_packet_detailed("'alternatives_count' field error detected");
66922 }
66923#ifdef FREECIV_JSON_CONNECTION
66924 field_addr.name = "alternatives";
66925#endif /* FREECIV_JSON_CONNECTION */
66926 e = 0;
66927 {
66928 int i;
66929
66930#ifdef FREECIV_JSON_CONNECTION
66931 /* Create the array. */
66932 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
66933
66934 /* Enter the array. */
66935 field_addr.sub_location = plocation_elem_new(0);
66936#endif /* FREECIV_JSON_CONNECTION */
66937
66938 for (i = 0; i < real_packet->alternatives_count; i++) {
66939#ifdef FREECIV_JSON_CONNECTION
66940 /* Next array element. */
66941 field_addr.sub_location->number = i;
66942#endif /* FREECIV_JSON_CONNECTION */
66943
66944 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
66945 }
66946
66947#ifdef FREECIV_JSON_CONNECTION
66948 /* Exit array. */
66949 FC_FREE(field_addr.sub_location);
66950#endif /* FREECIV_JSON_CONNECTION */
66951 }
66952 if (e) {
66953 log_packet_detailed("'alternatives' field error detected");
66954 }
66955
66956#endif
66958}
66959
66961{
66962 if (!pc->used) {
66963 log_error("WARNING: trying to send data to the closed connection %s",
66965 return -1;
66966 }
66967 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet != NULL, -1,
66968 "Handler for PACKET_RULESET_ACTION_AUTO not installed");
66969 return pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet(pc, packet);
66970}
66971
66973{
66974 conn_list_iterate(dest, pconn) {
66977}
66978
66979#ifdef FREECIV_DELTA_PROTOCOL
66980#define hash_packet_ruleset_counter_100 hash_const
66981
66982#define cmp_packet_ruleset_counter_100 cmp_const
66983
66985#endif /* FREECIV_DELTA_PROTOCOL */
66986
66988{
66989#ifdef FREECIV_DELTA_PROTOCOL
66991 struct packet_ruleset_counter *old;
66992 struct genhash **hash = pc->phs.received + PACKET_RULESET_COUNTER;
66993#endif /* FREECIV_DELTA_PROTOCOL */
66995#ifdef FREECIV_JSON_CONNECTION
66996 struct plocation field_addr;
66997 {
67001 }
67002#endif /* FREECIV_JSON_CONNECTION */
67003
67004#ifdef FREECIV_DELTA_PROTOCOL
67005#ifdef FREECIV_JSON_CONNECTION
67006 field_addr.name = "fields";
67007#endif /* FREECIV_JSON_CONNECTION */
67008 DIO_BV_GET(&din, &field_addr, fields);
67009
67010#else /* FREECIV_DELTA_PROTOCOL */
67011#ifdef FREECIV_JSON_CONNECTION
67012 field_addr.name = "name";
67013#endif /* FREECIV_JSON_CONNECTION */
67014 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67016 }
67017#ifdef FREECIV_JSON_CONNECTION
67018 field_addr.name = "rule_name";
67019#endif /* FREECIV_JSON_CONNECTION */
67020 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
67021 RECEIVE_PACKET_FIELD_ERROR(rule_name);
67022 }
67023#ifdef FREECIV_JSON_CONNECTION
67024 field_addr.name = "helptext";
67025#endif /* FREECIV_JSON_CONNECTION */
67026 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
67028 }
67029#ifdef FREECIV_JSON_CONNECTION
67030 field_addr.name = "def";
67031#endif /* FREECIV_JSON_CONNECTION */
67032 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
67034 }
67035#ifdef FREECIV_JSON_CONNECTION
67036 field_addr.name = "checkpoint";
67037#endif /* FREECIV_JSON_CONNECTION */
67038 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
67039 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
67040 }
67041#ifdef FREECIV_JSON_CONNECTION
67042 field_addr.name = "type";
67043#endif /* FREECIV_JSON_CONNECTION */
67044 {
67045 int readin;
67046
67047 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
67049 }
67050 real_packet->type = readin;
67051 }
67052#ifdef FREECIV_JSON_CONNECTION
67053 field_addr.name = "behavior";
67054#endif /* FREECIV_JSON_CONNECTION */
67055 {
67056 int readin;
67057
67058 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
67060 }
67061 real_packet->behavior = readin;
67062 }
67063#endif
67064 log_packet_detailed("packet_ruleset_counter_100: got info about ()");
67065
67066#ifdef FREECIV_DELTA_PROTOCOL
67067 if (NULL == *hash) {
67069 NULL, NULL, NULL, free);
67070 }
67071
67072 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
67073 *real_packet = *old;
67074 } else {
67075 log_packet_detailed(" no old info");
67076 memset(real_packet, 0, sizeof(*real_packet));
67077 }
67078
67079 if (BV_ISSET(fields, 0)) {
67080 log_packet_detailed(" got field 'name'");
67081#ifdef FREECIV_JSON_CONNECTION
67082 field_addr.name = "name";
67083#endif /* FREECIV_JSON_CONNECTION */
67084 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67086 }
67087 }
67088 if (BV_ISSET(fields, 1)) {
67089 log_packet_detailed(" got field 'rule_name'");
67090#ifdef FREECIV_JSON_CONNECTION
67091 field_addr.name = "rule_name";
67092#endif /* FREECIV_JSON_CONNECTION */
67093 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
67094 RECEIVE_PACKET_FIELD_ERROR(rule_name);
67095 }
67096 }
67097 if (BV_ISSET(fields, 2)) {
67098 log_packet_detailed(" got field 'helptext'");
67099#ifdef FREECIV_JSON_CONNECTION
67100 field_addr.name = "helptext";
67101#endif /* FREECIV_JSON_CONNECTION */
67102 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
67104 }
67105 }
67106 if (BV_ISSET(fields, 3)) {
67107 log_packet_detailed(" got field 'def'");
67108#ifdef FREECIV_JSON_CONNECTION
67109 field_addr.name = "def";
67110#endif /* FREECIV_JSON_CONNECTION */
67111 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
67113 }
67114 }
67115 if (BV_ISSET(fields, 4)) {
67116 log_packet_detailed(" got field 'checkpoint'");
67117#ifdef FREECIV_JSON_CONNECTION
67118 field_addr.name = "checkpoint";
67119#endif /* FREECIV_JSON_CONNECTION */
67120 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
67121 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
67122 }
67123 }
67124 if (BV_ISSET(fields, 5)) {
67125 log_packet_detailed(" got field 'type'");
67126#ifdef FREECIV_JSON_CONNECTION
67127 field_addr.name = "type";
67128#endif /* FREECIV_JSON_CONNECTION */
67129 {
67130 int readin;
67131
67132 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
67134 }
67135 real_packet->type = readin;
67136 }
67137 }
67138 if (BV_ISSET(fields, 6)) {
67139 log_packet_detailed(" got field 'behavior'");
67140#ifdef FREECIV_JSON_CONNECTION
67141 field_addr.name = "behavior";
67142#endif /* FREECIV_JSON_CONNECTION */
67143 {
67144 int readin;
67145
67146 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
67148 }
67149 real_packet->behavior = readin;
67150 }
67151 }
67152
67153 if (NULL == old) {
67154 old = fc_malloc(sizeof(*old));
67155 *old = *real_packet;
67156 genhash_insert(*hash, old, old);
67157 } else {
67158 *old = *real_packet;
67159 }
67160
67161#endif /* FREECIV_DELTA_PROTOCOL */
67163}
67164
67166{
67167 const struct packet_ruleset_counter *real_packet = packet;
67168 int e;
67169#ifdef FREECIV_DELTA_PROTOCOL
67171 struct packet_ruleset_counter *old;
67172 bool differ;
67173 struct genhash **hash = pc->phs.sent + PACKET_RULESET_COUNTER;
67174#endif /* FREECIV_DELTA_PROTOCOL */
67176#ifdef FREECIV_JSON_CONNECTION
67177 struct plocation field_addr;
67178 {
67182 }
67183#endif /* FREECIV_JSON_CONNECTION */
67184
67185 log_packet_detailed("packet_ruleset_counter_100: sending info about ()");
67186
67187#ifdef FREECIV_DELTA_PROTOCOL
67188 if (NULL == *hash) {
67190 NULL, NULL, NULL, free);
67191 }
67192 BV_CLR_ALL(fields);
67193
67194 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
67195 old = fc_malloc(sizeof(*old));
67196 *old = *real_packet;
67197 genhash_insert(*hash, old, old);
67198 memset(old, 0, sizeof(*old));
67199 }
67200 differ = (strcmp(old->name, real_packet->name) != 0);
67201 if (differ) {
67202 BV_SET(fields, 0);
67203 }
67204
67205 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
67206 if (differ) {
67207 BV_SET(fields, 1);
67208 }
67209
67210 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
67211 if (differ) {
67212 BV_SET(fields, 2);
67213 }
67214
67215 differ = (old->def != real_packet->def);
67216 if (differ) {
67217 BV_SET(fields, 3);
67218 }
67219
67220 differ = (old->checkpoint != real_packet->checkpoint);
67221 if (differ) {
67222 BV_SET(fields, 4);
67223 }
67224
67225 differ = (old->type != real_packet->type);
67226 if (differ) {
67227 BV_SET(fields, 5);
67228 }
67229
67230 differ = (old->behavior != real_packet->behavior);
67231 if (differ) {
67232 BV_SET(fields, 6);
67233 }
67234
67235
67236#ifdef FREECIV_JSON_CONNECTION
67237 field_addr.name = "fields";
67238#endif /* FREECIV_JSON_CONNECTION */
67239 e = 0;
67240 e |= DIO_BV_PUT(&dout, &field_addr, fields);
67241 if (e) {
67242 log_packet_detailed("fields bitvector error detected");
67243 }
67244
67245 if (BV_ISSET(fields, 0)) {
67246 log_packet_detailed(" field 'name' has changed");
67247#ifdef FREECIV_JSON_CONNECTION
67248 field_addr.name = "name";
67249#endif /* FREECIV_JSON_CONNECTION */
67250 e = 0;
67251 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67252 if (e) {
67253 log_packet_detailed("'name' field error detected");
67254 }
67255 }
67256 if (BV_ISSET(fields, 1)) {
67257 log_packet_detailed(" field 'rule_name' has changed");
67258#ifdef FREECIV_JSON_CONNECTION
67259 field_addr.name = "rule_name";
67260#endif /* FREECIV_JSON_CONNECTION */
67261 e = 0;
67262 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67263 if (e) {
67264 log_packet_detailed("'rule_name' field error detected");
67265 }
67266 }
67267 if (BV_ISSET(fields, 2)) {
67268 log_packet_detailed(" field 'helptext' has changed");
67269#ifdef FREECIV_JSON_CONNECTION
67270 field_addr.name = "helptext";
67271#endif /* FREECIV_JSON_CONNECTION */
67272 e = 0;
67273 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
67274 if (e) {
67275 log_packet_detailed("'helptext' field error detected");
67276 }
67277 }
67278 if (BV_ISSET(fields, 3)) {
67279 log_packet_detailed(" field 'def' has changed");
67280#ifdef FREECIV_JSON_CONNECTION
67281 field_addr.name = "def";
67282#endif /* FREECIV_JSON_CONNECTION */
67283 e = 0;
67284 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
67285 if (e) {
67286 log_packet_detailed("'def' field error detected");
67287 }
67288 }
67289 if (BV_ISSET(fields, 4)) {
67290 log_packet_detailed(" field 'checkpoint' has changed");
67291#ifdef FREECIV_JSON_CONNECTION
67292 field_addr.name = "checkpoint";
67293#endif /* FREECIV_JSON_CONNECTION */
67294 e = 0;
67295 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
67296 if (e) {
67297 log_packet_detailed("'checkpoint' field error detected");
67298 }
67299 }
67300 if (BV_ISSET(fields, 5)) {
67301 log_packet_detailed(" field 'type' has changed");
67302#ifdef FREECIV_JSON_CONNECTION
67303 field_addr.name = "type";
67304#endif /* FREECIV_JSON_CONNECTION */
67305 e = 0;
67306 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
67307 if (e) {
67308 log_packet_detailed("'type' field error detected");
67309 }
67310 }
67311 if (BV_ISSET(fields, 6)) {
67312 log_packet_detailed(" field 'behavior' has changed");
67313#ifdef FREECIV_JSON_CONNECTION
67314 field_addr.name = "behavior";
67315#endif /* FREECIV_JSON_CONNECTION */
67316 e = 0;
67317 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
67318 if (e) {
67319 log_packet_detailed("'behavior' field error detected");
67320 }
67321 }
67322
67323 *old = *real_packet;
67324#endif /* FREECIV_DELTA_PROTOCOL */
67325#ifndef FREECIV_DELTA_PROTOCOL
67326#ifdef FREECIV_JSON_CONNECTION
67327 field_addr.name = "name";
67328#endif /* FREECIV_JSON_CONNECTION */
67329 e = 0;
67330 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67331 if (e) {
67332 log_packet_detailed("'name' field error detected");
67333 }
67334#ifdef FREECIV_JSON_CONNECTION
67335 field_addr.name = "rule_name";
67336#endif /* FREECIV_JSON_CONNECTION */
67337 e = 0;
67338 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67339 if (e) {
67340 log_packet_detailed("'rule_name' field error detected");
67341 }
67342#ifdef FREECIV_JSON_CONNECTION
67343 field_addr.name = "helptext";
67344#endif /* FREECIV_JSON_CONNECTION */
67345 e = 0;
67346 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
67347 if (e) {
67348 log_packet_detailed("'helptext' field error detected");
67349 }
67350#ifdef FREECIV_JSON_CONNECTION
67351 field_addr.name = "def";
67352#endif /* FREECIV_JSON_CONNECTION */
67353 e = 0;
67354 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
67355 if (e) {
67356 log_packet_detailed("'def' field error detected");
67357 }
67358#ifdef FREECIV_JSON_CONNECTION
67359 field_addr.name = "checkpoint";
67360#endif /* FREECIV_JSON_CONNECTION */
67361 e = 0;
67362 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
67363 if (e) {
67364 log_packet_detailed("'checkpoint' field error detected");
67365 }
67366#ifdef FREECIV_JSON_CONNECTION
67367 field_addr.name = "type";
67368#endif /* FREECIV_JSON_CONNECTION */
67369 e = 0;
67370 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
67371 if (e) {
67372 log_packet_detailed("'type' field error detected");
67373 }
67374#ifdef FREECIV_JSON_CONNECTION
67375 field_addr.name = "behavior";
67376#endif /* FREECIV_JSON_CONNECTION */
67377 e = 0;
67378 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
67379 if (e) {
67380 log_packet_detailed("'behavior' field error detected");
67381 }
67382
67383#endif
67385}
67386
67388{
67389 if (!pc->used) {
67390 log_error("WARNING: trying to send data to the closed connection %s",
67392 return -1;
67393 }
67394 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet != NULL, -1,
67395 "Handler for PACKET_RULESET_COUNTER not installed");
67396 return pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet(pc, packet);
67397}
67398
67399void lsend_packet_ruleset_counter(struct conn_list *dest, const struct packet_ruleset_counter *packet)
67400{
67401 conn_list_iterate(dest, pconn) {
67404}
67405
67406#ifdef FREECIV_DELTA_PROTOCOL
67407#define hash_packet_ruleset_music_100 hash_const
67408
67409#define cmp_packet_ruleset_music_100 cmp_const
67410
67412#endif /* FREECIV_DELTA_PROTOCOL */
67413
67415{
67416#ifdef FREECIV_DELTA_PROTOCOL
67418 struct packet_ruleset_music *old;
67419 struct genhash **hash = pc->phs.received + PACKET_RULESET_MUSIC;
67420#endif /* FREECIV_DELTA_PROTOCOL */
67422#ifdef FREECIV_JSON_CONNECTION
67423 struct plocation field_addr;
67424 {
67428 }
67429#endif /* FREECIV_JSON_CONNECTION */
67430
67431#ifdef FREECIV_DELTA_PROTOCOL
67432#ifdef FREECIV_JSON_CONNECTION
67433 field_addr.name = "fields";
67434#endif /* FREECIV_JSON_CONNECTION */
67435 DIO_BV_GET(&din, &field_addr, fields);
67436
67437#else /* FREECIV_DELTA_PROTOCOL */
67438#ifdef FREECIV_JSON_CONNECTION
67439 field_addr.name = "id";
67440#endif /* FREECIV_JSON_CONNECTION */
67441 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67443 }
67444#ifdef FREECIV_JSON_CONNECTION
67445 field_addr.name = "music_peaceful";
67446#endif /* FREECIV_JSON_CONNECTION */
67447 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
67448 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
67449 }
67450#ifdef FREECIV_JSON_CONNECTION
67451 field_addr.name = "music_combat";
67452#endif /* FREECIV_JSON_CONNECTION */
67453 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
67454 RECEIVE_PACKET_FIELD_ERROR(music_combat);
67455 }
67456#ifdef FREECIV_JSON_CONNECTION
67457 field_addr.name = "reqs_count";
67458#endif /* FREECIV_JSON_CONNECTION */
67459 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
67460 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
67461 }
67462#ifdef FREECIV_JSON_CONNECTION
67463 field_addr.name = "reqs";
67464#endif /* FREECIV_JSON_CONNECTION */
67465 if (real_packet->reqs_count > MAX_NUM_REQS) {
67466 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
67467 }
67468 {
67469 int i;
67470
67471#ifdef FREECIV_JSON_CONNECTION
67472 /* Enter array. */
67473 field_addr.sub_location = plocation_elem_new(0);
67474#endif /* FREECIV_JSON_CONNECTION */
67475
67476 for (i = 0; i < real_packet->reqs_count; i++) {
67477#ifdef FREECIV_JSON_CONNECTION
67478 field_addr.sub_location->number = i;
67479#endif /* FREECIV_JSON_CONNECTION */
67480
67481 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
67483 }
67484 }
67485
67486#ifdef FREECIV_JSON_CONNECTION
67487 /* Exit array. */
67488 FC_FREE(field_addr.sub_location);
67489#endif /* FREECIV_JSON_CONNECTION */
67490 }
67491#endif
67492 log_packet_detailed("packet_ruleset_music_100: got info about ()");
67493
67494#ifdef FREECIV_DELTA_PROTOCOL
67495 if (NULL == *hash) {
67497 NULL, NULL, NULL, free);
67498 }
67499
67500 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
67501 *real_packet = *old;
67502 } else {
67503 log_packet_detailed(" no old info");
67504 memset(real_packet, 0, sizeof(*real_packet));
67505 }
67506
67507 if (BV_ISSET(fields, 0)) {
67508 log_packet_detailed(" got field 'id'");
67509#ifdef FREECIV_JSON_CONNECTION
67510 field_addr.name = "id";
67511#endif /* FREECIV_JSON_CONNECTION */
67512 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67514 }
67515 }
67516 if (BV_ISSET(fields, 1)) {
67517 log_packet_detailed(" got field 'music_peaceful'");
67518#ifdef FREECIV_JSON_CONNECTION
67519 field_addr.name = "music_peaceful";
67520#endif /* FREECIV_JSON_CONNECTION */
67521 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
67522 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
67523 }
67524 }
67525 if (BV_ISSET(fields, 2)) {
67526 log_packet_detailed(" got field 'music_combat'");
67527#ifdef FREECIV_JSON_CONNECTION
67528 field_addr.name = "music_combat";
67529#endif /* FREECIV_JSON_CONNECTION */
67530 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
67531 RECEIVE_PACKET_FIELD_ERROR(music_combat);
67532 }
67533 }
67534 if (BV_ISSET(fields, 3)) {
67535 log_packet_detailed(" got field 'reqs_count'");
67536#ifdef FREECIV_JSON_CONNECTION
67537 field_addr.name = "reqs_count";
67538#endif /* FREECIV_JSON_CONNECTION */
67539 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
67540 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
67541 }
67542 }
67543 if (BV_ISSET(fields, 4)) {
67544 log_packet_detailed(" got field 'reqs'");
67545#ifdef FREECIV_JSON_CONNECTION
67546 field_addr.name = "reqs";
67547#endif /* FREECIV_JSON_CONNECTION */
67548 if (real_packet->reqs_count > MAX_NUM_REQS) {
67549 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
67550 }
67551 {
67552 int i;
67553
67554#ifdef FREECIV_JSON_CONNECTION
67555 /* Enter array. */
67556 field_addr.sub_location = plocation_elem_new(0);
67557#endif /* FREECIV_JSON_CONNECTION */
67558
67559 for (i = 0; i < real_packet->reqs_count; i++) {
67560#ifdef FREECIV_JSON_CONNECTION
67561 field_addr.sub_location->number = i;
67562#endif /* FREECIV_JSON_CONNECTION */
67563
67564 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
67566 }
67567 }
67568
67569#ifdef FREECIV_JSON_CONNECTION
67570 /* Exit array. */
67571 FC_FREE(field_addr.sub_location);
67572#endif /* FREECIV_JSON_CONNECTION */
67573 }
67574 }
67575
67576 if (NULL == old) {
67577 old = fc_malloc(sizeof(*old));
67578 *old = *real_packet;
67579 genhash_insert(*hash, old, old);
67580 } else {
67581 *old = *real_packet;
67582 }
67583
67584#endif /* FREECIV_DELTA_PROTOCOL */
67586}
67587
67588static int send_packet_ruleset_music_100(struct connection *pc, const struct packet_ruleset_music *packet)
67589{
67590 const struct packet_ruleset_music *real_packet = packet;
67591 int e;
67592#ifdef FREECIV_DELTA_PROTOCOL
67594 struct packet_ruleset_music *old;
67595 bool differ;
67596 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MUSIC;
67597#endif /* FREECIV_DELTA_PROTOCOL */
67599#ifdef FREECIV_JSON_CONNECTION
67600 struct plocation field_addr;
67601 {
67605 }
67606#endif /* FREECIV_JSON_CONNECTION */
67607
67608 log_packet_detailed("packet_ruleset_music_100: sending info about ()");
67609
67610#ifdef FREECIV_DELTA_PROTOCOL
67611 if (NULL == *hash) {
67613 NULL, NULL, NULL, free);
67614 }
67615 BV_CLR_ALL(fields);
67616
67617 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
67618 old = fc_malloc(sizeof(*old));
67619 *old = *real_packet;
67620 genhash_insert(*hash, old, old);
67621 memset(old, 0, sizeof(*old));
67622 }
67623 differ = (old->id != real_packet->id);
67624 if (differ) {
67625 BV_SET(fields, 0);
67626 }
67627
67628 differ = (strcmp(old->music_peaceful, real_packet->music_peaceful) != 0);
67629 if (differ) {
67630 BV_SET(fields, 1);
67631 }
67632
67633 differ = (strcmp(old->music_combat, real_packet->music_combat) != 0);
67634 if (differ) {
67635 BV_SET(fields, 2);
67636 }
67637
67638 differ = (old->reqs_count != real_packet->reqs_count);
67639 if (differ) {
67640 BV_SET(fields, 3);
67641 }
67642
67643 differ = (old->reqs_count != real_packet->reqs_count);
67644 if (!differ) {
67645 int i;
67646
67647 for (i = 0; i < real_packet->reqs_count; i++) {
67648 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
67649 if (differ) {
67650 break;
67651 }
67652 }
67653 }
67654 if (differ) {
67655 BV_SET(fields, 4);
67656 }
67657
67658
67659#ifdef FREECIV_JSON_CONNECTION
67660 field_addr.name = "fields";
67661#endif /* FREECIV_JSON_CONNECTION */
67662 e = 0;
67663 e |= DIO_BV_PUT(&dout, &field_addr, fields);
67664 if (e) {
67665 log_packet_detailed("fields bitvector error detected");
67666 }
67667
67668 if (BV_ISSET(fields, 0)) {
67669 log_packet_detailed(" field 'id' has changed");
67670#ifdef FREECIV_JSON_CONNECTION
67671 field_addr.name = "id";
67672#endif /* FREECIV_JSON_CONNECTION */
67673 e = 0;
67674 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67675 if (e) {
67676 log_packet_detailed("'id' field error detected");
67677 }
67678 }
67679 if (BV_ISSET(fields, 1)) {
67680 log_packet_detailed(" field 'music_peaceful' has changed");
67681#ifdef FREECIV_JSON_CONNECTION
67682 field_addr.name = "music_peaceful";
67683#endif /* FREECIV_JSON_CONNECTION */
67684 e = 0;
67685 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
67686 if (e) {
67687 log_packet_detailed("'music_peaceful' field error detected");
67688 }
67689 }
67690 if (BV_ISSET(fields, 2)) {
67691 log_packet_detailed(" field 'music_combat' has changed");
67692#ifdef FREECIV_JSON_CONNECTION
67693 field_addr.name = "music_combat";
67694#endif /* FREECIV_JSON_CONNECTION */
67695 e = 0;
67696 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
67697 if (e) {
67698 log_packet_detailed("'music_combat' field error detected");
67699 }
67700 }
67701 if (BV_ISSET(fields, 3)) {
67702 log_packet_detailed(" field 'reqs_count' has changed");
67703#ifdef FREECIV_JSON_CONNECTION
67704 field_addr.name = "reqs_count";
67705#endif /* FREECIV_JSON_CONNECTION */
67706 e = 0;
67707 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
67708 if (e) {
67709 log_packet_detailed("'reqs_count' field error detected");
67710 }
67711 }
67712 if (BV_ISSET(fields, 4)) {
67713 log_packet_detailed(" field 'reqs' has changed");
67714#ifdef FREECIV_JSON_CONNECTION
67715 field_addr.name = "reqs";
67716#endif /* FREECIV_JSON_CONNECTION */
67717 e = 0;
67718 {
67719 int i;
67720
67721#ifdef FREECIV_JSON_CONNECTION
67722 /* Create the array. */
67723 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
67724
67725 /* Enter the array. */
67726 field_addr.sub_location = plocation_elem_new(0);
67727#endif /* FREECIV_JSON_CONNECTION */
67728
67729 for (i = 0; i < real_packet->reqs_count; i++) {
67730#ifdef FREECIV_JSON_CONNECTION
67731 /* Next array element. */
67732 field_addr.sub_location->number = i;
67733#endif /* FREECIV_JSON_CONNECTION */
67734
67735 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
67736 }
67737
67738#ifdef FREECIV_JSON_CONNECTION
67739 /* Exit array. */
67740 FC_FREE(field_addr.sub_location);
67741#endif /* FREECIV_JSON_CONNECTION */
67742 }
67743 if (e) {
67744 log_packet_detailed("'reqs' field error detected");
67745 }
67746 }
67747
67748 *old = *real_packet;
67749#endif /* FREECIV_DELTA_PROTOCOL */
67750#ifndef FREECIV_DELTA_PROTOCOL
67751#ifdef FREECIV_JSON_CONNECTION
67752 field_addr.name = "id";
67753#endif /* FREECIV_JSON_CONNECTION */
67754 e = 0;
67755 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67756 if (e) {
67757 log_packet_detailed("'id' field error detected");
67758 }
67759#ifdef FREECIV_JSON_CONNECTION
67760 field_addr.name = "music_peaceful";
67761#endif /* FREECIV_JSON_CONNECTION */
67762 e = 0;
67763 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
67764 if (e) {
67765 log_packet_detailed("'music_peaceful' field error detected");
67766 }
67767#ifdef FREECIV_JSON_CONNECTION
67768 field_addr.name = "music_combat";
67769#endif /* FREECIV_JSON_CONNECTION */
67770 e = 0;
67771 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
67772 if (e) {
67773 log_packet_detailed("'music_combat' field error detected");
67774 }
67775#ifdef FREECIV_JSON_CONNECTION
67776 field_addr.name = "reqs_count";
67777#endif /* FREECIV_JSON_CONNECTION */
67778 e = 0;
67779 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
67780 if (e) {
67781 log_packet_detailed("'reqs_count' field error detected");
67782 }
67783#ifdef FREECIV_JSON_CONNECTION
67784 field_addr.name = "reqs";
67785#endif /* FREECIV_JSON_CONNECTION */
67786 e = 0;
67787 {
67788 int i;
67789
67790#ifdef FREECIV_JSON_CONNECTION
67791 /* Create the array. */
67792 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
67793
67794 /* Enter the array. */
67795 field_addr.sub_location = plocation_elem_new(0);
67796#endif /* FREECIV_JSON_CONNECTION */
67797
67798 for (i = 0; i < real_packet->reqs_count; i++) {
67799#ifdef FREECIV_JSON_CONNECTION
67800 /* Next array element. */
67801 field_addr.sub_location->number = i;
67802#endif /* FREECIV_JSON_CONNECTION */
67803
67804 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
67805 }
67806
67807#ifdef FREECIV_JSON_CONNECTION
67808 /* Exit array. */
67809 FC_FREE(field_addr.sub_location);
67810#endif /* FREECIV_JSON_CONNECTION */
67811 }
67812 if (e) {
67813 log_packet_detailed("'reqs' field error detected");
67814 }
67815
67816#endif
67818}
67819
67821{
67822 if (!pc->used) {
67823 log_error("WARNING: trying to send data to the closed connection %s",
67825 return -1;
67826 }
67827 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet != NULL, -1,
67828 "Handler for PACKET_RULESET_MUSIC not installed");
67829 return pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet(pc, packet);
67830}
67831
67832void lsend_packet_ruleset_music(struct conn_list *dest, const struct packet_ruleset_music *packet)
67833{
67834 conn_list_iterate(dest, pconn) {
67837}
67838
67839#ifdef FREECIV_DELTA_PROTOCOL
67840#define hash_packet_ruleset_multiplier_100 hash_const
67841
67842#define cmp_packet_ruleset_multiplier_100 cmp_const
67843
67845#endif /* FREECIV_DELTA_PROTOCOL */
67846
67848{
67849#ifdef FREECIV_DELTA_PROTOCOL
67851 struct packet_ruleset_multiplier *old;
67852 struct genhash **hash = pc->phs.received + PACKET_RULESET_MULTIPLIER;
67853#endif /* FREECIV_DELTA_PROTOCOL */
67855#ifdef FREECIV_JSON_CONNECTION
67856 struct plocation field_addr;
67857 {
67861 }
67862#endif /* FREECIV_JSON_CONNECTION */
67863
67864#ifdef FREECIV_DELTA_PROTOCOL
67865#ifdef FREECIV_JSON_CONNECTION
67866 field_addr.name = "fields";
67867#endif /* FREECIV_JSON_CONNECTION */
67868 DIO_BV_GET(&din, &field_addr, fields);
67869
67870#else /* FREECIV_DELTA_PROTOCOL */
67871#ifdef FREECIV_JSON_CONNECTION
67872 field_addr.name = "id";
67873#endif /* FREECIV_JSON_CONNECTION */
67874 {
67875 int readin;
67876
67877 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
67879 }
67880 real_packet->id = readin;
67881 }
67882#ifdef FREECIV_JSON_CONNECTION
67883 field_addr.name = "start";
67884#endif /* FREECIV_JSON_CONNECTION */
67885 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
67887 }
67888#ifdef FREECIV_JSON_CONNECTION
67889 field_addr.name = "stop";
67890#endif /* FREECIV_JSON_CONNECTION */
67891 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
67893 }
67894#ifdef FREECIV_JSON_CONNECTION
67895 field_addr.name = "step";
67896#endif /* FREECIV_JSON_CONNECTION */
67897 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
67899 }
67900#ifdef FREECIV_JSON_CONNECTION
67901 field_addr.name = "def";
67902#endif /* FREECIV_JSON_CONNECTION */
67903 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
67905 }
67906#ifdef FREECIV_JSON_CONNECTION
67907 field_addr.name = "offset";
67908#endif /* FREECIV_JSON_CONNECTION */
67909 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
67911 }
67912#ifdef FREECIV_JSON_CONNECTION
67913 field_addr.name = "factor";
67914#endif /* FREECIV_JSON_CONNECTION */
67915 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
67917 }
67918#ifdef FREECIV_JSON_CONNECTION
67919 field_addr.name = "minimum_turns";
67920#endif /* FREECIV_JSON_CONNECTION */
67921 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
67922 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
67923 }
67924#ifdef FREECIV_JSON_CONNECTION
67925 field_addr.name = "name";
67926#endif /* FREECIV_JSON_CONNECTION */
67927 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67929 }
67930#ifdef FREECIV_JSON_CONNECTION
67931 field_addr.name = "rule_name";
67932#endif /* FREECIV_JSON_CONNECTION */
67933 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
67934 RECEIVE_PACKET_FIELD_ERROR(rule_name);
67935 }
67936#ifdef FREECIV_JSON_CONNECTION
67937 field_addr.name = "reqs_count";
67938#endif /* FREECIV_JSON_CONNECTION */
67939 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
67940 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
67941 }
67942#ifdef FREECIV_JSON_CONNECTION
67943 field_addr.name = "reqs";
67944#endif /* FREECIV_JSON_CONNECTION */
67945 if (real_packet->reqs_count > MAX_NUM_REQS) {
67946 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
67947 }
67948 {
67949 int i;
67950
67951#ifdef FREECIV_JSON_CONNECTION
67952 /* Enter array. */
67953 field_addr.sub_location = plocation_elem_new(0);
67954#endif /* FREECIV_JSON_CONNECTION */
67955
67956 for (i = 0; i < real_packet->reqs_count; i++) {
67957#ifdef FREECIV_JSON_CONNECTION
67958 field_addr.sub_location->number = i;
67959#endif /* FREECIV_JSON_CONNECTION */
67960
67961 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
67963 }
67964 }
67965
67966#ifdef FREECIV_JSON_CONNECTION
67967 /* Exit array. */
67968 FC_FREE(field_addr.sub_location);
67969#endif /* FREECIV_JSON_CONNECTION */
67970 }
67971#ifdef FREECIV_JSON_CONNECTION
67972 field_addr.name = "helptext";
67973#endif /* FREECIV_JSON_CONNECTION */
67974 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
67976 }
67977#endif
67978 log_packet_detailed("packet_ruleset_multiplier_100: got info about ()");
67979
67980#ifdef FREECIV_DELTA_PROTOCOL
67981 if (NULL == *hash) {
67983 NULL, NULL, NULL, free);
67984 }
67985
67986 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
67987 *real_packet = *old;
67988 } else {
67989 log_packet_detailed(" no old info");
67990 memset(real_packet, 0, sizeof(*real_packet));
67991 }
67992
67993 if (BV_ISSET(fields, 0)) {
67994 log_packet_detailed(" got field 'id'");
67995#ifdef FREECIV_JSON_CONNECTION
67996 field_addr.name = "id";
67997#endif /* FREECIV_JSON_CONNECTION */
67998 {
67999 int readin;
68000
68001 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68003 }
68004 real_packet->id = readin;
68005 }
68006 }
68007 if (BV_ISSET(fields, 1)) {
68008 log_packet_detailed(" got field 'start'");
68009#ifdef FREECIV_JSON_CONNECTION
68010 field_addr.name = "start";
68011#endif /* FREECIV_JSON_CONNECTION */
68012 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
68014 }
68015 }
68016 if (BV_ISSET(fields, 2)) {
68017 log_packet_detailed(" got field 'stop'");
68018#ifdef FREECIV_JSON_CONNECTION
68019 field_addr.name = "stop";
68020#endif /* FREECIV_JSON_CONNECTION */
68021 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
68023 }
68024 }
68025 if (BV_ISSET(fields, 3)) {
68026 log_packet_detailed(" got field 'step'");
68027#ifdef FREECIV_JSON_CONNECTION
68028 field_addr.name = "step";
68029#endif /* FREECIV_JSON_CONNECTION */
68030 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
68032 }
68033 }
68034 if (BV_ISSET(fields, 4)) {
68035 log_packet_detailed(" got field 'def'");
68036#ifdef FREECIV_JSON_CONNECTION
68037 field_addr.name = "def";
68038#endif /* FREECIV_JSON_CONNECTION */
68039 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
68041 }
68042 }
68043 if (BV_ISSET(fields, 5)) {
68044 log_packet_detailed(" got field 'offset'");
68045#ifdef FREECIV_JSON_CONNECTION
68046 field_addr.name = "offset";
68047#endif /* FREECIV_JSON_CONNECTION */
68048 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
68050 }
68051 }
68052 if (BV_ISSET(fields, 6)) {
68053 log_packet_detailed(" got field 'factor'");
68054#ifdef FREECIV_JSON_CONNECTION
68055 field_addr.name = "factor";
68056#endif /* FREECIV_JSON_CONNECTION */
68057 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
68059 }
68060 }
68061 if (BV_ISSET(fields, 7)) {
68062 log_packet_detailed(" got field 'minimum_turns'");
68063#ifdef FREECIV_JSON_CONNECTION
68064 field_addr.name = "minimum_turns";
68065#endif /* FREECIV_JSON_CONNECTION */
68066 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
68067 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
68068 }
68069 }
68070 if (BV_ISSET(fields, 8)) {
68071 log_packet_detailed(" got field 'name'");
68072#ifdef FREECIV_JSON_CONNECTION
68073 field_addr.name = "name";
68074#endif /* FREECIV_JSON_CONNECTION */
68075 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68077 }
68078 }
68079 if (BV_ISSET(fields, 9)) {
68080 log_packet_detailed(" got field 'rule_name'");
68081#ifdef FREECIV_JSON_CONNECTION
68082 field_addr.name = "rule_name";
68083#endif /* FREECIV_JSON_CONNECTION */
68084 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68085 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68086 }
68087 }
68088 if (BV_ISSET(fields, 10)) {
68089 log_packet_detailed(" got field 'reqs_count'");
68090#ifdef FREECIV_JSON_CONNECTION
68091 field_addr.name = "reqs_count";
68092#endif /* FREECIV_JSON_CONNECTION */
68093 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
68094 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
68095 }
68096 }
68097 if (BV_ISSET(fields, 11)) {
68098 log_packet_detailed(" got field 'reqs'");
68099#ifdef FREECIV_JSON_CONNECTION
68100 field_addr.name = "reqs";
68101#endif /* FREECIV_JSON_CONNECTION */
68102 if (real_packet->reqs_count > MAX_NUM_REQS) {
68103 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
68104 }
68105 {
68106 int i;
68107
68108#ifdef FREECIV_JSON_CONNECTION
68109 /* Enter array. */
68110 field_addr.sub_location = plocation_elem_new(0);
68111#endif /* FREECIV_JSON_CONNECTION */
68112
68113 for (i = 0; i < real_packet->reqs_count; i++) {
68114#ifdef FREECIV_JSON_CONNECTION
68115 field_addr.sub_location->number = i;
68116#endif /* FREECIV_JSON_CONNECTION */
68117
68118 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
68120 }
68121 }
68122
68123#ifdef FREECIV_JSON_CONNECTION
68124 /* Exit array. */
68125 FC_FREE(field_addr.sub_location);
68126#endif /* FREECIV_JSON_CONNECTION */
68127 }
68128 }
68129 if (BV_ISSET(fields, 12)) {
68130 log_packet_detailed(" got field 'helptext'");
68131#ifdef FREECIV_JSON_CONNECTION
68132 field_addr.name = "helptext";
68133#endif /* FREECIV_JSON_CONNECTION */
68134 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
68136 }
68137 }
68138
68139 if (NULL == old) {
68140 old = fc_malloc(sizeof(*old));
68141 *old = *real_packet;
68142 genhash_insert(*hash, old, old);
68143 } else {
68144 *old = *real_packet;
68145 }
68146
68147#endif /* FREECIV_DELTA_PROTOCOL */
68149}
68150
68152{
68153 const struct packet_ruleset_multiplier *real_packet = packet;
68154 int e;
68155#ifdef FREECIV_DELTA_PROTOCOL
68157 struct packet_ruleset_multiplier *old;
68158 bool differ;
68159 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MULTIPLIER;
68160#endif /* FREECIV_DELTA_PROTOCOL */
68162#ifdef FREECIV_JSON_CONNECTION
68163 struct plocation field_addr;
68164 {
68168 }
68169#endif /* FREECIV_JSON_CONNECTION */
68170
68171 log_packet_detailed("packet_ruleset_multiplier_100: sending info about ()");
68172
68173#ifdef FREECIV_DELTA_PROTOCOL
68174 if (NULL == *hash) {
68176 NULL, NULL, NULL, free);
68177 }
68178 BV_CLR_ALL(fields);
68179
68180 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68181 old = fc_malloc(sizeof(*old));
68182 *old = *real_packet;
68183 genhash_insert(*hash, old, old);
68184 memset(old, 0, sizeof(*old));
68185 }
68186 differ = (old->id != real_packet->id);
68187 if (differ) {
68188 BV_SET(fields, 0);
68189 }
68190
68191 differ = (old->start != real_packet->start);
68192 if (differ) {
68193 BV_SET(fields, 1);
68194 }
68195
68196 differ = (old->stop != real_packet->stop);
68197 if (differ) {
68198 BV_SET(fields, 2);
68199 }
68200
68201 differ = (old->step != real_packet->step);
68202 if (differ) {
68203 BV_SET(fields, 3);
68204 }
68205
68206 differ = (old->def != real_packet->def);
68207 if (differ) {
68208 BV_SET(fields, 4);
68209 }
68210
68211 differ = (old->offset != real_packet->offset);
68212 if (differ) {
68213 BV_SET(fields, 5);
68214 }
68215
68216 differ = (old->factor != real_packet->factor);
68217 if (differ) {
68218 BV_SET(fields, 6);
68219 }
68220
68221 differ = (old->minimum_turns != real_packet->minimum_turns);
68222 if (differ) {
68223 BV_SET(fields, 7);
68224 }
68225
68226 differ = (strcmp(old->name, real_packet->name) != 0);
68227 if (differ) {
68228 BV_SET(fields, 8);
68229 }
68230
68231 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
68232 if (differ) {
68233 BV_SET(fields, 9);
68234 }
68235
68236 differ = (old->reqs_count != real_packet->reqs_count);
68237 if (differ) {
68238 BV_SET(fields, 10);
68239 }
68240
68241 differ = (old->reqs_count != real_packet->reqs_count);
68242 if (!differ) {
68243 int i;
68244
68245 for (i = 0; i < real_packet->reqs_count; i++) {
68246 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
68247 if (differ) {
68248 break;
68249 }
68250 }
68251 }
68252 if (differ) {
68253 BV_SET(fields, 11);
68254 }
68255
68256 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
68257 if (differ) {
68258 BV_SET(fields, 12);
68259 }
68260
68261
68262#ifdef FREECIV_JSON_CONNECTION
68263 field_addr.name = "fields";
68264#endif /* FREECIV_JSON_CONNECTION */
68265 e = 0;
68266 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68267 if (e) {
68268 log_packet_detailed("fields bitvector error detected");
68269 }
68270
68271 if (BV_ISSET(fields, 0)) {
68272 log_packet_detailed(" field 'id' has changed");
68273#ifdef FREECIV_JSON_CONNECTION
68274 field_addr.name = "id";
68275#endif /* FREECIV_JSON_CONNECTION */
68276 e = 0;
68277 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68278 if (e) {
68279 log_packet_detailed("'id' field error detected");
68280 }
68281 }
68282 if (BV_ISSET(fields, 1)) {
68283 log_packet_detailed(" field 'start' has changed");
68284#ifdef FREECIV_JSON_CONNECTION
68285 field_addr.name = "start";
68286#endif /* FREECIV_JSON_CONNECTION */
68287 e = 0;
68288 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
68289 if (e) {
68290 log_packet_detailed("'start' field error detected");
68291 }
68292 }
68293 if (BV_ISSET(fields, 2)) {
68294 log_packet_detailed(" field 'stop' has changed");
68295#ifdef FREECIV_JSON_CONNECTION
68296 field_addr.name = "stop";
68297#endif /* FREECIV_JSON_CONNECTION */
68298 e = 0;
68299 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
68300 if (e) {
68301 log_packet_detailed("'stop' field error detected");
68302 }
68303 }
68304 if (BV_ISSET(fields, 3)) {
68305 log_packet_detailed(" field 'step' has changed");
68306#ifdef FREECIV_JSON_CONNECTION
68307 field_addr.name = "step";
68308#endif /* FREECIV_JSON_CONNECTION */
68309 e = 0;
68310 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
68311 if (e) {
68312 log_packet_detailed("'step' field error detected");
68313 }
68314 }
68315 if (BV_ISSET(fields, 4)) {
68316 log_packet_detailed(" field 'def' has changed");
68317#ifdef FREECIV_JSON_CONNECTION
68318 field_addr.name = "def";
68319#endif /* FREECIV_JSON_CONNECTION */
68320 e = 0;
68321 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
68322 if (e) {
68323 log_packet_detailed("'def' field error detected");
68324 }
68325 }
68326 if (BV_ISSET(fields, 5)) {
68327 log_packet_detailed(" field 'offset' has changed");
68328#ifdef FREECIV_JSON_CONNECTION
68329 field_addr.name = "offset";
68330#endif /* FREECIV_JSON_CONNECTION */
68331 e = 0;
68332 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
68333 if (e) {
68334 log_packet_detailed("'offset' field error detected");
68335 }
68336 }
68337 if (BV_ISSET(fields, 6)) {
68338 log_packet_detailed(" field 'factor' has changed");
68339#ifdef FREECIV_JSON_CONNECTION
68340 field_addr.name = "factor";
68341#endif /* FREECIV_JSON_CONNECTION */
68342 e = 0;
68343 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
68344 if (e) {
68345 log_packet_detailed("'factor' field error detected");
68346 }
68347 }
68348 if (BV_ISSET(fields, 7)) {
68349 log_packet_detailed(" field 'minimum_turns' has changed");
68350#ifdef FREECIV_JSON_CONNECTION
68351 field_addr.name = "minimum_turns";
68352#endif /* FREECIV_JSON_CONNECTION */
68353 e = 0;
68354 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
68355 if (e) {
68356 log_packet_detailed("'minimum_turns' field error detected");
68357 }
68358 }
68359 if (BV_ISSET(fields, 8)) {
68360 log_packet_detailed(" field 'name' has changed");
68361#ifdef FREECIV_JSON_CONNECTION
68362 field_addr.name = "name";
68363#endif /* FREECIV_JSON_CONNECTION */
68364 e = 0;
68365 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68366 if (e) {
68367 log_packet_detailed("'name' field error detected");
68368 }
68369 }
68370 if (BV_ISSET(fields, 9)) {
68371 log_packet_detailed(" field 'rule_name' has changed");
68372#ifdef FREECIV_JSON_CONNECTION
68373 field_addr.name = "rule_name";
68374#endif /* FREECIV_JSON_CONNECTION */
68375 e = 0;
68376 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68377 if (e) {
68378 log_packet_detailed("'rule_name' field error detected");
68379 }
68380 }
68381 if (BV_ISSET(fields, 10)) {
68382 log_packet_detailed(" field 'reqs_count' has changed");
68383#ifdef FREECIV_JSON_CONNECTION
68384 field_addr.name = "reqs_count";
68385#endif /* FREECIV_JSON_CONNECTION */
68386 e = 0;
68387 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
68388 if (e) {
68389 log_packet_detailed("'reqs_count' field error detected");
68390 }
68391 }
68392 if (BV_ISSET(fields, 11)) {
68393 log_packet_detailed(" field 'reqs' has changed");
68394#ifdef FREECIV_JSON_CONNECTION
68395 field_addr.name = "reqs";
68396#endif /* FREECIV_JSON_CONNECTION */
68397 e = 0;
68398 {
68399 int i;
68400
68401#ifdef FREECIV_JSON_CONNECTION
68402 /* Create the array. */
68403 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
68404
68405 /* Enter the array. */
68406 field_addr.sub_location = plocation_elem_new(0);
68407#endif /* FREECIV_JSON_CONNECTION */
68408
68409 for (i = 0; i < real_packet->reqs_count; i++) {
68410#ifdef FREECIV_JSON_CONNECTION
68411 /* Next array element. */
68412 field_addr.sub_location->number = i;
68413#endif /* FREECIV_JSON_CONNECTION */
68414
68415 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
68416 }
68417
68418#ifdef FREECIV_JSON_CONNECTION
68419 /* Exit array. */
68420 FC_FREE(field_addr.sub_location);
68421#endif /* FREECIV_JSON_CONNECTION */
68422 }
68423 if (e) {
68424 log_packet_detailed("'reqs' field error detected");
68425 }
68426 }
68427 if (BV_ISSET(fields, 12)) {
68428 log_packet_detailed(" field 'helptext' has changed");
68429#ifdef FREECIV_JSON_CONNECTION
68430 field_addr.name = "helptext";
68431#endif /* FREECIV_JSON_CONNECTION */
68432 e = 0;
68433 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
68434 if (e) {
68435 log_packet_detailed("'helptext' field error detected");
68436 }
68437 }
68438
68439 *old = *real_packet;
68440#endif /* FREECIV_DELTA_PROTOCOL */
68441#ifndef FREECIV_DELTA_PROTOCOL
68442#ifdef FREECIV_JSON_CONNECTION
68443 field_addr.name = "id";
68444#endif /* FREECIV_JSON_CONNECTION */
68445 e = 0;
68446 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68447 if (e) {
68448 log_packet_detailed("'id' field error detected");
68449 }
68450#ifdef FREECIV_JSON_CONNECTION
68451 field_addr.name = "start";
68452#endif /* FREECIV_JSON_CONNECTION */
68453 e = 0;
68454 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
68455 if (e) {
68456 log_packet_detailed("'start' field error detected");
68457 }
68458#ifdef FREECIV_JSON_CONNECTION
68459 field_addr.name = "stop";
68460#endif /* FREECIV_JSON_CONNECTION */
68461 e = 0;
68462 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
68463 if (e) {
68464 log_packet_detailed("'stop' field error detected");
68465 }
68466#ifdef FREECIV_JSON_CONNECTION
68467 field_addr.name = "step";
68468#endif /* FREECIV_JSON_CONNECTION */
68469 e = 0;
68470 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
68471 if (e) {
68472 log_packet_detailed("'step' field error detected");
68473 }
68474#ifdef FREECIV_JSON_CONNECTION
68475 field_addr.name = "def";
68476#endif /* FREECIV_JSON_CONNECTION */
68477 e = 0;
68478 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
68479 if (e) {
68480 log_packet_detailed("'def' field error detected");
68481 }
68482#ifdef FREECIV_JSON_CONNECTION
68483 field_addr.name = "offset";
68484#endif /* FREECIV_JSON_CONNECTION */
68485 e = 0;
68486 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
68487 if (e) {
68488 log_packet_detailed("'offset' field error detected");
68489 }
68490#ifdef FREECIV_JSON_CONNECTION
68491 field_addr.name = "factor";
68492#endif /* FREECIV_JSON_CONNECTION */
68493 e = 0;
68494 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
68495 if (e) {
68496 log_packet_detailed("'factor' field error detected");
68497 }
68498#ifdef FREECIV_JSON_CONNECTION
68499 field_addr.name = "minimum_turns";
68500#endif /* FREECIV_JSON_CONNECTION */
68501 e = 0;
68502 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
68503 if (e) {
68504 log_packet_detailed("'minimum_turns' field error detected");
68505 }
68506#ifdef FREECIV_JSON_CONNECTION
68507 field_addr.name = "name";
68508#endif /* FREECIV_JSON_CONNECTION */
68509 e = 0;
68510 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68511 if (e) {
68512 log_packet_detailed("'name' field error detected");
68513 }
68514#ifdef FREECIV_JSON_CONNECTION
68515 field_addr.name = "rule_name";
68516#endif /* FREECIV_JSON_CONNECTION */
68517 e = 0;
68518 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68519 if (e) {
68520 log_packet_detailed("'rule_name' field error detected");
68521 }
68522#ifdef FREECIV_JSON_CONNECTION
68523 field_addr.name = "reqs_count";
68524#endif /* FREECIV_JSON_CONNECTION */
68525 e = 0;
68526 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
68527 if (e) {
68528 log_packet_detailed("'reqs_count' field error detected");
68529 }
68530#ifdef FREECIV_JSON_CONNECTION
68531 field_addr.name = "reqs";
68532#endif /* FREECIV_JSON_CONNECTION */
68533 e = 0;
68534 {
68535 int i;
68536
68537#ifdef FREECIV_JSON_CONNECTION
68538 /* Create the array. */
68539 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
68540
68541 /* Enter the array. */
68542 field_addr.sub_location = plocation_elem_new(0);
68543#endif /* FREECIV_JSON_CONNECTION */
68544
68545 for (i = 0; i < real_packet->reqs_count; i++) {
68546#ifdef FREECIV_JSON_CONNECTION
68547 /* Next array element. */
68548 field_addr.sub_location->number = i;
68549#endif /* FREECIV_JSON_CONNECTION */
68550
68551 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
68552 }
68553
68554#ifdef FREECIV_JSON_CONNECTION
68555 /* Exit array. */
68556 FC_FREE(field_addr.sub_location);
68557#endif /* FREECIV_JSON_CONNECTION */
68558 }
68559 if (e) {
68560 log_packet_detailed("'reqs' field error detected");
68561 }
68562#ifdef FREECIV_JSON_CONNECTION
68563 field_addr.name = "helptext";
68564#endif /* FREECIV_JSON_CONNECTION */
68565 e = 0;
68566 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
68567 if (e) {
68568 log_packet_detailed("'helptext' field error detected");
68569 }
68570
68571#endif
68573}
68574
68576{
68577 if (!pc->used) {
68578 log_error("WARNING: trying to send data to the closed connection %s",
68580 return -1;
68581 }
68582 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet != NULL, -1,
68583 "Handler for PACKET_RULESET_MULTIPLIER not installed");
68584 return pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet(pc, packet);
68585}
68586
68588{
68589 conn_list_iterate(dest, pconn) {
68592}
68593
68594int dsend_packet_ruleset_multiplier(struct connection *pc, Multiplier_type_id id, int start, int stop, int step, int def, int offset, int factor, int minimum_turns, const char *name, const char *rule_name, int reqs_count, const struct requirement *reqs, const char *helptext)
68595{
68596 struct packet_ruleset_multiplier packet, *real_packet = &packet;
68597
68598 real_packet->id = id;
68599 real_packet->start = start;
68600 real_packet->stop = stop;
68601 real_packet->step = step;
68602 real_packet->def = def;
68603 real_packet->offset = offset;
68604 real_packet->factor = factor;
68605 real_packet->minimum_turns = minimum_turns;
68606 sz_strlcpy(real_packet->name, name);
68607 sz_strlcpy(real_packet->rule_name, rule_name);
68608 real_packet->reqs_count = reqs_count;
68609 {
68610 int i;
68611
68612 for (i = 0; i < real_packet->reqs_count; i++) {
68613 real_packet->reqs[i] = reqs[i];
68614 }
68615 }
68616 sz_strlcpy(real_packet->helptext, helptext);
68617
68619}
68620
68621void dlsend_packet_ruleset_multiplier(struct conn_list *dest, Multiplier_type_id id, int start, int stop, int step, int def, int offset, int factor, int minimum_turns, const char *name, const char *rule_name, int reqs_count, const struct requirement *reqs, const char *helptext)
68622{
68623 struct packet_ruleset_multiplier packet, *real_packet = &packet;
68624
68625 real_packet->id = id;
68626 real_packet->start = start;
68627 real_packet->stop = stop;
68628 real_packet->step = step;
68629 real_packet->def = def;
68630 real_packet->offset = offset;
68631 real_packet->factor = factor;
68632 real_packet->minimum_turns = minimum_turns;
68633 sz_strlcpy(real_packet->name, name);
68634 sz_strlcpy(real_packet->rule_name, rule_name);
68635 real_packet->reqs_count = reqs_count;
68636 {
68637 int i;
68638
68639 for (i = 0; i < real_packet->reqs_count; i++) {
68640 real_packet->reqs[i] = reqs[i];
68641 }
68642 }
68643 sz_strlcpy(real_packet->helptext, helptext);
68644
68646}
68647
68648#ifdef FREECIV_DELTA_PROTOCOL
68649#define hash_packet_ruleset_clause_100 hash_const
68650
68651#define cmp_packet_ruleset_clause_100 cmp_const
68652
68654#endif /* FREECIV_DELTA_PROTOCOL */
68655
68657{
68658#ifdef FREECIV_DELTA_PROTOCOL
68660 struct packet_ruleset_clause *old;
68661 struct genhash **hash = pc->phs.received + PACKET_RULESET_CLAUSE;
68662#endif /* FREECIV_DELTA_PROTOCOL */
68664#ifdef FREECIV_JSON_CONNECTION
68665 struct plocation field_addr;
68666 {
68670 }
68671#endif /* FREECIV_JSON_CONNECTION */
68672
68673#ifdef FREECIV_DELTA_PROTOCOL
68674#ifdef FREECIV_JSON_CONNECTION
68675 field_addr.name = "fields";
68676#endif /* FREECIV_JSON_CONNECTION */
68677 DIO_BV_GET(&din, &field_addr, fields);
68678
68679#else /* FREECIV_DELTA_PROTOCOL */
68680#ifdef FREECIV_JSON_CONNECTION
68681 field_addr.name = "type";
68682#endif /* FREECIV_JSON_CONNECTION */
68683 {
68684 int readin;
68685
68686 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68688 }
68689 real_packet->type = readin;
68690 }
68691#ifdef FREECIV_JSON_CONNECTION
68692 field_addr.name = "enabled";
68693#endif /* FREECIV_JSON_CONNECTION */
68694 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
68696 }
68697#ifdef FREECIV_JSON_CONNECTION
68698 field_addr.name = "giver_reqs_count";
68699#endif /* FREECIV_JSON_CONNECTION */
68700 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->giver_reqs_count)) {
68701 RECEIVE_PACKET_FIELD_ERROR(giver_reqs_count);
68702 }
68703#ifdef FREECIV_JSON_CONNECTION
68704 field_addr.name = "giver_reqs";
68705#endif /* FREECIV_JSON_CONNECTION */
68706 if (real_packet->giver_reqs_count > MAX_NUM_REQS) {
68707 RECEIVE_PACKET_FIELD_ERROR(giver_reqs, ": truncation array");
68708 }
68709 {
68710 int i;
68711
68712#ifdef FREECIV_JSON_CONNECTION
68713 /* Enter array. */
68714 field_addr.sub_location = plocation_elem_new(0);
68715#endif /* FREECIV_JSON_CONNECTION */
68716
68717 for (i = 0; i < real_packet->giver_reqs_count; i++) {
68718#ifdef FREECIV_JSON_CONNECTION
68719 field_addr.sub_location->number = i;
68720#endif /* FREECIV_JSON_CONNECTION */
68721
68722 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs[i])) {
68723 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
68724 }
68725 }
68726
68727#ifdef FREECIV_JSON_CONNECTION
68728 /* Exit array. */
68729 FC_FREE(field_addr.sub_location);
68730#endif /* FREECIV_JSON_CONNECTION */
68731 }
68732#ifdef FREECIV_JSON_CONNECTION
68733 field_addr.name = "receiver_reqs_count";
68734#endif /* FREECIV_JSON_CONNECTION */
68735 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->receiver_reqs_count)) {
68736 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs_count);
68737 }
68738#ifdef FREECIV_JSON_CONNECTION
68739 field_addr.name = "receiver_reqs";
68740#endif /* FREECIV_JSON_CONNECTION */
68741 if (real_packet->receiver_reqs_count > MAX_NUM_REQS) {
68742 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs, ": truncation array");
68743 }
68744 {
68745 int i;
68746
68747#ifdef FREECIV_JSON_CONNECTION
68748 /* Enter array. */
68749 field_addr.sub_location = plocation_elem_new(0);
68750#endif /* FREECIV_JSON_CONNECTION */
68751
68752 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
68753#ifdef FREECIV_JSON_CONNECTION
68754 field_addr.sub_location->number = i;
68755#endif /* FREECIV_JSON_CONNECTION */
68756
68757 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs[i])) {
68758 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
68759 }
68760 }
68761
68762#ifdef FREECIV_JSON_CONNECTION
68763 /* Exit array. */
68764 FC_FREE(field_addr.sub_location);
68765#endif /* FREECIV_JSON_CONNECTION */
68766 }
68767#endif
68768 log_packet_detailed("packet_ruleset_clause_100: got info about ()");
68769
68770#ifdef FREECIV_DELTA_PROTOCOL
68771 if (NULL == *hash) {
68773 NULL, NULL, NULL, free);
68774 }
68775
68776 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68777 *real_packet = *old;
68778 } else {
68779 log_packet_detailed(" no old info");
68780 memset(real_packet, 0, sizeof(*real_packet));
68781 }
68782
68783 if (BV_ISSET(fields, 0)) {
68784 log_packet_detailed(" got field 'type'");
68785#ifdef FREECIV_JSON_CONNECTION
68786 field_addr.name = "type";
68787#endif /* FREECIV_JSON_CONNECTION */
68788 {
68789 int readin;
68790
68791 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68793 }
68794 real_packet->type = readin;
68795 }
68796 }
68797 real_packet->enabled = BV_ISSET(fields, 1);
68798 if (BV_ISSET(fields, 2)) {
68799 log_packet_detailed(" got field 'giver_reqs_count'");
68800#ifdef FREECIV_JSON_CONNECTION
68801 field_addr.name = "giver_reqs_count";
68802#endif /* FREECIV_JSON_CONNECTION */
68803 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->giver_reqs_count)) {
68804 RECEIVE_PACKET_FIELD_ERROR(giver_reqs_count);
68805 }
68806 }
68807 if (BV_ISSET(fields, 3)) {
68808 log_packet_detailed(" got field 'giver_reqs'");
68809#ifdef FREECIV_JSON_CONNECTION
68810 field_addr.name = "giver_reqs";
68811#endif /* FREECIV_JSON_CONNECTION */
68812 if (real_packet->giver_reqs_count > MAX_NUM_REQS) {
68813 RECEIVE_PACKET_FIELD_ERROR(giver_reqs, ": truncation array");
68814 }
68815 {
68816 int i;
68817
68818#ifdef FREECIV_JSON_CONNECTION
68819 /* Enter array. */
68820 field_addr.sub_location = plocation_elem_new(0);
68821#endif /* FREECIV_JSON_CONNECTION */
68822
68823 for (i = 0; i < real_packet->giver_reqs_count; i++) {
68824#ifdef FREECIV_JSON_CONNECTION
68825 field_addr.sub_location->number = i;
68826#endif /* FREECIV_JSON_CONNECTION */
68827
68828 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs[i])) {
68829 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
68830 }
68831 }
68832
68833#ifdef FREECIV_JSON_CONNECTION
68834 /* Exit array. */
68835 FC_FREE(field_addr.sub_location);
68836#endif /* FREECIV_JSON_CONNECTION */
68837 }
68838 }
68839 if (BV_ISSET(fields, 4)) {
68840 log_packet_detailed(" got field 'receiver_reqs_count'");
68841#ifdef FREECIV_JSON_CONNECTION
68842 field_addr.name = "receiver_reqs_count";
68843#endif /* FREECIV_JSON_CONNECTION */
68844 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->receiver_reqs_count)) {
68845 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs_count);
68846 }
68847 }
68848 if (BV_ISSET(fields, 5)) {
68849 log_packet_detailed(" got field 'receiver_reqs'");
68850#ifdef FREECIV_JSON_CONNECTION
68851 field_addr.name = "receiver_reqs";
68852#endif /* FREECIV_JSON_CONNECTION */
68853 if (real_packet->receiver_reqs_count > MAX_NUM_REQS) {
68854 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs, ": truncation array");
68855 }
68856 {
68857 int i;
68858
68859#ifdef FREECIV_JSON_CONNECTION
68860 /* Enter array. */
68861 field_addr.sub_location = plocation_elem_new(0);
68862#endif /* FREECIV_JSON_CONNECTION */
68863
68864 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
68865#ifdef FREECIV_JSON_CONNECTION
68866 field_addr.sub_location->number = i;
68867#endif /* FREECIV_JSON_CONNECTION */
68868
68869 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs[i])) {
68870 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
68871 }
68872 }
68873
68874#ifdef FREECIV_JSON_CONNECTION
68875 /* Exit array. */
68876 FC_FREE(field_addr.sub_location);
68877#endif /* FREECIV_JSON_CONNECTION */
68878 }
68879 }
68880
68881 if (NULL == old) {
68882 old = fc_malloc(sizeof(*old));
68883 *old = *real_packet;
68884 genhash_insert(*hash, old, old);
68885 } else {
68886 *old = *real_packet;
68887 }
68888
68889#endif /* FREECIV_DELTA_PROTOCOL */
68891}
68892
68894{
68895 const struct packet_ruleset_clause *real_packet = packet;
68896 int e;
68897#ifdef FREECIV_DELTA_PROTOCOL
68899 struct packet_ruleset_clause *old;
68900 bool differ;
68901 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CLAUSE;
68902#endif /* FREECIV_DELTA_PROTOCOL */
68904#ifdef FREECIV_JSON_CONNECTION
68905 struct plocation field_addr;
68906 {
68910 }
68911#endif /* FREECIV_JSON_CONNECTION */
68912
68913 log_packet_detailed("packet_ruleset_clause_100: sending info about ()");
68914
68915#ifdef FREECIV_DELTA_PROTOCOL
68916 if (NULL == *hash) {
68918 NULL, NULL, NULL, free);
68919 }
68920 BV_CLR_ALL(fields);
68921
68922 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68923 old = fc_malloc(sizeof(*old));
68924 *old = *real_packet;
68925 genhash_insert(*hash, old, old);
68926 memset(old, 0, sizeof(*old));
68927 }
68928 differ = (old->type != real_packet->type);
68929 if (differ) {
68930 BV_SET(fields, 0);
68931 }
68932
68933 if (packet->enabled) {
68934 BV_SET(fields, 1);
68935 }
68936
68937 differ = (old->giver_reqs_count != real_packet->giver_reqs_count);
68938 if (differ) {
68939 BV_SET(fields, 2);
68940 }
68941
68942 differ = (old->giver_reqs_count != real_packet->giver_reqs_count);
68943 if (!differ) {
68944 int i;
68945
68946 for (i = 0; i < real_packet->giver_reqs_count; i++) {
68947 differ = !are_requirements_equal(&old->giver_reqs[i], &real_packet->giver_reqs[i]);
68948 if (differ) {
68949 break;
68950 }
68951 }
68952 }
68953 if (differ) {
68954 BV_SET(fields, 3);
68955 }
68956
68957 differ = (old->receiver_reqs_count != real_packet->receiver_reqs_count);
68958 if (differ) {
68959 BV_SET(fields, 4);
68960 }
68961
68962 differ = (old->receiver_reqs_count != real_packet->receiver_reqs_count);
68963 if (!differ) {
68964 int i;
68965
68966 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
68967 differ = !are_requirements_equal(&old->receiver_reqs[i], &real_packet->receiver_reqs[i]);
68968 if (differ) {
68969 break;
68970 }
68971 }
68972 }
68973 if (differ) {
68974 BV_SET(fields, 5);
68975 }
68976
68977
68978#ifdef FREECIV_JSON_CONNECTION
68979 field_addr.name = "fields";
68980#endif /* FREECIV_JSON_CONNECTION */
68981 e = 0;
68982 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68983 if (e) {
68984 log_packet_detailed("fields bitvector error detected");
68985 }
68986
68987 if (BV_ISSET(fields, 0)) {
68988 log_packet_detailed(" field 'type' has changed");
68989#ifdef FREECIV_JSON_CONNECTION
68990 field_addr.name = "type";
68991#endif /* FREECIV_JSON_CONNECTION */
68992 e = 0;
68993 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
68994 if (e) {
68995 log_packet_detailed("'type' field error detected");
68996 }
68997 }
68998 /* field 1 is folded into the header */
68999 if (BV_ISSET(fields, 2)) {
69000 log_packet_detailed(" field 'giver_reqs_count' has changed");
69001#ifdef FREECIV_JSON_CONNECTION
69002 field_addr.name = "giver_reqs_count";
69003#endif /* FREECIV_JSON_CONNECTION */
69004 e = 0;
69005 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->giver_reqs_count);
69006 if (e) {
69007 log_packet_detailed("'giver_reqs_count' field error detected");
69008 }
69009 }
69010 if (BV_ISSET(fields, 3)) {
69011 log_packet_detailed(" field 'giver_reqs' has changed");
69012#ifdef FREECIV_JSON_CONNECTION
69013 field_addr.name = "giver_reqs";
69014#endif /* FREECIV_JSON_CONNECTION */
69015 e = 0;
69016 {
69017 int i;
69018
69019#ifdef FREECIV_JSON_CONNECTION
69020 /* Create the array. */
69021 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->giver_reqs_count);
69022
69023 /* Enter the array. */
69024 field_addr.sub_location = plocation_elem_new(0);
69025#endif /* FREECIV_JSON_CONNECTION */
69026
69027 for (i = 0; i < real_packet->giver_reqs_count; i++) {
69028#ifdef FREECIV_JSON_CONNECTION
69029 /* Next array element. */
69030 field_addr.sub_location->number = i;
69031#endif /* FREECIV_JSON_CONNECTION */
69032
69033 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs[i]);
69034 }
69035
69036#ifdef FREECIV_JSON_CONNECTION
69037 /* Exit array. */
69038 FC_FREE(field_addr.sub_location);
69039#endif /* FREECIV_JSON_CONNECTION */
69040 }
69041 if (e) {
69042 log_packet_detailed("'giver_reqs' field error detected");
69043 }
69044 }
69045 if (BV_ISSET(fields, 4)) {
69046 log_packet_detailed(" field 'receiver_reqs_count' has changed");
69047#ifdef FREECIV_JSON_CONNECTION
69048 field_addr.name = "receiver_reqs_count";
69049#endif /* FREECIV_JSON_CONNECTION */
69050 e = 0;
69051 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->receiver_reqs_count);
69052 if (e) {
69053 log_packet_detailed("'receiver_reqs_count' field error detected");
69054 }
69055 }
69056 if (BV_ISSET(fields, 5)) {
69057 log_packet_detailed(" field 'receiver_reqs' has changed");
69058#ifdef FREECIV_JSON_CONNECTION
69059 field_addr.name = "receiver_reqs";
69060#endif /* FREECIV_JSON_CONNECTION */
69061 e = 0;
69062 {
69063 int i;
69064
69065#ifdef FREECIV_JSON_CONNECTION
69066 /* Create the array. */
69067 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->receiver_reqs_count);
69068
69069 /* Enter the array. */
69070 field_addr.sub_location = plocation_elem_new(0);
69071#endif /* FREECIV_JSON_CONNECTION */
69072
69073 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
69074#ifdef FREECIV_JSON_CONNECTION
69075 /* Next array element. */
69076 field_addr.sub_location->number = i;
69077#endif /* FREECIV_JSON_CONNECTION */
69078
69079 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs[i]);
69080 }
69081
69082#ifdef FREECIV_JSON_CONNECTION
69083 /* Exit array. */
69084 FC_FREE(field_addr.sub_location);
69085#endif /* FREECIV_JSON_CONNECTION */
69086 }
69087 if (e) {
69088 log_packet_detailed("'receiver_reqs' field error detected");
69089 }
69090 }
69091
69092 *old = *real_packet;
69093#endif /* FREECIV_DELTA_PROTOCOL */
69094#ifndef FREECIV_DELTA_PROTOCOL
69095#ifdef FREECIV_JSON_CONNECTION
69096 field_addr.name = "type";
69097#endif /* FREECIV_JSON_CONNECTION */
69098 e = 0;
69099 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
69100 if (e) {
69101 log_packet_detailed("'type' field error detected");
69102 }
69103#ifdef FREECIV_JSON_CONNECTION
69104 field_addr.name = "enabled";
69105#endif /* FREECIV_JSON_CONNECTION */
69106 e = 0;
69107 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
69108 if (e) {
69109 log_packet_detailed("'enabled' field error detected");
69110 }
69111#ifdef FREECIV_JSON_CONNECTION
69112 field_addr.name = "giver_reqs_count";
69113#endif /* FREECIV_JSON_CONNECTION */
69114 e = 0;
69115 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->giver_reqs_count);
69116 if (e) {
69117 log_packet_detailed("'giver_reqs_count' field error detected");
69118 }
69119#ifdef FREECIV_JSON_CONNECTION
69120 field_addr.name = "giver_reqs";
69121#endif /* FREECIV_JSON_CONNECTION */
69122 e = 0;
69123 {
69124 int i;
69125
69126#ifdef FREECIV_JSON_CONNECTION
69127 /* Create the array. */
69128 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->giver_reqs_count);
69129
69130 /* Enter the array. */
69131 field_addr.sub_location = plocation_elem_new(0);
69132#endif /* FREECIV_JSON_CONNECTION */
69133
69134 for (i = 0; i < real_packet->giver_reqs_count; i++) {
69135#ifdef FREECIV_JSON_CONNECTION
69136 /* Next array element. */
69137 field_addr.sub_location->number = i;
69138#endif /* FREECIV_JSON_CONNECTION */
69139
69140 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs[i]);
69141 }
69142
69143#ifdef FREECIV_JSON_CONNECTION
69144 /* Exit array. */
69145 FC_FREE(field_addr.sub_location);
69146#endif /* FREECIV_JSON_CONNECTION */
69147 }
69148 if (e) {
69149 log_packet_detailed("'giver_reqs' field error detected");
69150 }
69151#ifdef FREECIV_JSON_CONNECTION
69152 field_addr.name = "receiver_reqs_count";
69153#endif /* FREECIV_JSON_CONNECTION */
69154 e = 0;
69155 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->receiver_reqs_count);
69156 if (e) {
69157 log_packet_detailed("'receiver_reqs_count' field error detected");
69158 }
69159#ifdef FREECIV_JSON_CONNECTION
69160 field_addr.name = "receiver_reqs";
69161#endif /* FREECIV_JSON_CONNECTION */
69162 e = 0;
69163 {
69164 int i;
69165
69166#ifdef FREECIV_JSON_CONNECTION
69167 /* Create the array. */
69168 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->receiver_reqs_count);
69169
69170 /* Enter the array. */
69171 field_addr.sub_location = plocation_elem_new(0);
69172#endif /* FREECIV_JSON_CONNECTION */
69173
69174 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
69175#ifdef FREECIV_JSON_CONNECTION
69176 /* Next array element. */
69177 field_addr.sub_location->number = i;
69178#endif /* FREECIV_JSON_CONNECTION */
69179
69180 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs[i]);
69181 }
69182
69183#ifdef FREECIV_JSON_CONNECTION
69184 /* Exit array. */
69185 FC_FREE(field_addr.sub_location);
69186#endif /* FREECIV_JSON_CONNECTION */
69187 }
69188 if (e) {
69189 log_packet_detailed("'receiver_reqs' field error detected");
69190 }
69191
69192#endif
69194}
69195
69197{
69198 if (!pc->used) {
69199 log_error("WARNING: trying to send data to the closed connection %s",
69201 return -1;
69202 }
69203 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet != NULL, -1,
69204 "Handler for PACKET_RULESET_CLAUSE not installed");
69205 return pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet(pc, packet);
69206}
69207
69208void lsend_packet_ruleset_clause(struct conn_list *dest, const struct packet_ruleset_clause *packet)
69209{
69210 conn_list_iterate(dest, pconn) {
69213}
69214
69215#ifdef FREECIV_DELTA_PROTOCOL
69216#define hash_packet_ruleset_control_100 hash_const
69217
69218#define cmp_packet_ruleset_control_100 cmp_const
69219
69221#endif /* FREECIV_DELTA_PROTOCOL */
69222
69224{
69225#ifdef FREECIV_DELTA_PROTOCOL
69227 struct packet_ruleset_control *old;
69228 struct genhash **hash = pc->phs.received + PACKET_RULESET_CONTROL;
69229#endif /* FREECIV_DELTA_PROTOCOL */
69231#ifdef FREECIV_JSON_CONNECTION
69232 struct plocation field_addr;
69233 {
69237 }
69238#endif /* FREECIV_JSON_CONNECTION */
69239
69240#ifdef FREECIV_DELTA_PROTOCOL
69241#ifdef FREECIV_JSON_CONNECTION
69242 field_addr.name = "fields";
69243#endif /* FREECIV_JSON_CONNECTION */
69244 DIO_BV_GET(&din, &field_addr, fields);
69245
69246#else /* FREECIV_DELTA_PROTOCOL */
69247#ifdef FREECIV_JSON_CONNECTION
69248 field_addr.name = "num_unit_classes";
69249#endif /* FREECIV_JSON_CONNECTION */
69250 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
69251 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
69252 }
69253#ifdef FREECIV_JSON_CONNECTION
69254 field_addr.name = "num_unit_types";
69255#endif /* FREECIV_JSON_CONNECTION */
69256 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
69257 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
69258 }
69259#ifdef FREECIV_JSON_CONNECTION
69260 field_addr.name = "num_impr_types";
69261#endif /* FREECIV_JSON_CONNECTION */
69262 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
69263 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
69264 }
69265#ifdef FREECIV_JSON_CONNECTION
69266 field_addr.name = "num_tech_classes";
69267#endif /* FREECIV_JSON_CONNECTION */
69268 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
69269 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
69270 }
69271#ifdef FREECIV_JSON_CONNECTION
69272 field_addr.name = "num_tech_types";
69273#endif /* FREECIV_JSON_CONNECTION */
69274 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
69275 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
69276 }
69277#ifdef FREECIV_JSON_CONNECTION
69278 field_addr.name = "num_extra_types";
69279#endif /* FREECIV_JSON_CONNECTION */
69280 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
69281 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
69282 }
69283#ifdef FREECIV_JSON_CONNECTION
69284 field_addr.name = "num_base_types";
69285#endif /* FREECIV_JSON_CONNECTION */
69286 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
69287 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
69288 }
69289#ifdef FREECIV_JSON_CONNECTION
69290 field_addr.name = "num_road_types";
69291#endif /* FREECIV_JSON_CONNECTION */
69292 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
69293 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
69294 }
69295#ifdef FREECIV_JSON_CONNECTION
69296 field_addr.name = "num_resource_types";
69297#endif /* FREECIV_JSON_CONNECTION */
69298 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
69299 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
69300 }
69301#ifdef FREECIV_JSON_CONNECTION
69302 field_addr.name = "num_goods_types";
69303#endif /* FREECIV_JSON_CONNECTION */
69304 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
69305 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
69306 }
69307#ifdef FREECIV_JSON_CONNECTION
69308 field_addr.name = "num_disaster_types";
69309#endif /* FREECIV_JSON_CONNECTION */
69310 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
69311 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
69312 }
69313#ifdef FREECIV_JSON_CONNECTION
69314 field_addr.name = "num_achievement_types";
69315#endif /* FREECIV_JSON_CONNECTION */
69316 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
69317 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
69318 }
69319#ifdef FREECIV_JSON_CONNECTION
69320 field_addr.name = "num_multipliers";
69321#endif /* FREECIV_JSON_CONNECTION */
69322 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
69323 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
69324 }
69325#ifdef FREECIV_JSON_CONNECTION
69326 field_addr.name = "num_styles";
69327#endif /* FREECIV_JSON_CONNECTION */
69328 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
69329 RECEIVE_PACKET_FIELD_ERROR(num_styles);
69330 }
69331#ifdef FREECIV_JSON_CONNECTION
69332 field_addr.name = "num_music_styles";
69333#endif /* FREECIV_JSON_CONNECTION */
69334 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
69335 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
69336 }
69337#ifdef FREECIV_JSON_CONNECTION
69338 field_addr.name = "government_count";
69339#endif /* FREECIV_JSON_CONNECTION */
69340 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
69342 }
69343#ifdef FREECIV_JSON_CONNECTION
69344 field_addr.name = "nation_count";
69345#endif /* FREECIV_JSON_CONNECTION */
69346 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
69348 }
69349#ifdef FREECIV_JSON_CONNECTION
69350 field_addr.name = "num_city_styles";
69351#endif /* FREECIV_JSON_CONNECTION */
69352 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
69353 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
69354 }
69355#ifdef FREECIV_JSON_CONNECTION
69356 field_addr.name = "terrain_count";
69357#endif /* FREECIV_JSON_CONNECTION */
69358 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
69360 }
69361#ifdef FREECIV_JSON_CONNECTION
69362 field_addr.name = "num_specialist_types";
69363#endif /* FREECIV_JSON_CONNECTION */
69364 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
69365 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
69366 }
69367#ifdef FREECIV_JSON_CONNECTION
69368 field_addr.name = "num_nation_groups";
69369#endif /* FREECIV_JSON_CONNECTION */
69370 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
69372 }
69373#ifdef FREECIV_JSON_CONNECTION
69374 field_addr.name = "num_nation_sets";
69375#endif /* FREECIV_JSON_CONNECTION */
69376 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
69378 }
69379#ifdef FREECIV_JSON_CONNECTION
69380 field_addr.name = "preferred_tileset";
69381#endif /* FREECIV_JSON_CONNECTION */
69382 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
69383 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
69384 }
69385#ifdef FREECIV_JSON_CONNECTION
69386 field_addr.name = "preferred_soundset";
69387#endif /* FREECIV_JSON_CONNECTION */
69388 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
69389 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
69390 }
69391#ifdef FREECIV_JSON_CONNECTION
69392 field_addr.name = "preferred_musicset";
69393#endif /* FREECIV_JSON_CONNECTION */
69394 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
69395 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
69396 }
69397#ifdef FREECIV_JSON_CONNECTION
69398 field_addr.name = "popup_tech_help";
69399#endif /* FREECIV_JSON_CONNECTION */
69400 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->popup_tech_help)) {
69401 RECEIVE_PACKET_FIELD_ERROR(popup_tech_help);
69402 }
69403#ifdef FREECIV_JSON_CONNECTION
69404 field_addr.name = "name";
69405#endif /* FREECIV_JSON_CONNECTION */
69406 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
69408 }
69409#ifdef FREECIV_JSON_CONNECTION
69410 field_addr.name = "version";
69411#endif /* FREECIV_JSON_CONNECTION */
69412 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
69414 }
69415#ifdef FREECIV_JSON_CONNECTION
69416 field_addr.name = "alt_dir";
69417#endif /* FREECIV_JSON_CONNECTION */
69418 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
69420 }
69421#ifdef FREECIV_JSON_CONNECTION
69422 field_addr.name = "desc_length";
69423#endif /* FREECIV_JSON_CONNECTION */
69424 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
69425 RECEIVE_PACKET_FIELD_ERROR(desc_length);
69426 }
69427#ifdef FREECIV_JSON_CONNECTION
69428 field_addr.name = "num_counters";
69429#endif /* FREECIV_JSON_CONNECTION */
69430 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
69431 RECEIVE_PACKET_FIELD_ERROR(num_counters);
69432 }
69433#endif
69434 log_packet_detailed("packet_ruleset_control_100: got info about ()");
69435
69436#ifdef FREECIV_DELTA_PROTOCOL
69437 if (NULL == *hash) {
69439 NULL, NULL, NULL, free);
69440 }
69441
69442 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
69443 *real_packet = *old;
69444 } else {
69445 log_packet_detailed(" no old info");
69446 memset(real_packet, 0, sizeof(*real_packet));
69447 }
69448
69449 if (BV_ISSET(fields, 0)) {
69450 log_packet_detailed(" got field 'num_unit_classes'");
69451#ifdef FREECIV_JSON_CONNECTION
69452 field_addr.name = "num_unit_classes";
69453#endif /* FREECIV_JSON_CONNECTION */
69454 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
69455 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
69456 }
69457 }
69458 if (BV_ISSET(fields, 1)) {
69459 log_packet_detailed(" got field 'num_unit_types'");
69460#ifdef FREECIV_JSON_CONNECTION
69461 field_addr.name = "num_unit_types";
69462#endif /* FREECIV_JSON_CONNECTION */
69463 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
69464 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
69465 }
69466 }
69467 if (BV_ISSET(fields, 2)) {
69468 log_packet_detailed(" got field 'num_impr_types'");
69469#ifdef FREECIV_JSON_CONNECTION
69470 field_addr.name = "num_impr_types";
69471#endif /* FREECIV_JSON_CONNECTION */
69472 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
69473 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
69474 }
69475 }
69476 if (BV_ISSET(fields, 3)) {
69477 log_packet_detailed(" got field 'num_tech_classes'");
69478#ifdef FREECIV_JSON_CONNECTION
69479 field_addr.name = "num_tech_classes";
69480#endif /* FREECIV_JSON_CONNECTION */
69481 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
69482 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
69483 }
69484 }
69485 if (BV_ISSET(fields, 4)) {
69486 log_packet_detailed(" got field 'num_tech_types'");
69487#ifdef FREECIV_JSON_CONNECTION
69488 field_addr.name = "num_tech_types";
69489#endif /* FREECIV_JSON_CONNECTION */
69490 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
69491 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
69492 }
69493 }
69494 if (BV_ISSET(fields, 5)) {
69495 log_packet_detailed(" got field 'num_extra_types'");
69496#ifdef FREECIV_JSON_CONNECTION
69497 field_addr.name = "num_extra_types";
69498#endif /* FREECIV_JSON_CONNECTION */
69499 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
69500 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
69501 }
69502 }
69503 if (BV_ISSET(fields, 6)) {
69504 log_packet_detailed(" got field 'num_base_types'");
69505#ifdef FREECIV_JSON_CONNECTION
69506 field_addr.name = "num_base_types";
69507#endif /* FREECIV_JSON_CONNECTION */
69508 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
69509 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
69510 }
69511 }
69512 if (BV_ISSET(fields, 7)) {
69513 log_packet_detailed(" got field 'num_road_types'");
69514#ifdef FREECIV_JSON_CONNECTION
69515 field_addr.name = "num_road_types";
69516#endif /* FREECIV_JSON_CONNECTION */
69517 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
69518 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
69519 }
69520 }
69521 if (BV_ISSET(fields, 8)) {
69522 log_packet_detailed(" got field 'num_resource_types'");
69523#ifdef FREECIV_JSON_CONNECTION
69524 field_addr.name = "num_resource_types";
69525#endif /* FREECIV_JSON_CONNECTION */
69526 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
69527 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
69528 }
69529 }
69530 if (BV_ISSET(fields, 9)) {
69531 log_packet_detailed(" got field 'num_goods_types'");
69532#ifdef FREECIV_JSON_CONNECTION
69533 field_addr.name = "num_goods_types";
69534#endif /* FREECIV_JSON_CONNECTION */
69535 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
69536 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
69537 }
69538 }
69539 if (BV_ISSET(fields, 10)) {
69540 log_packet_detailed(" got field 'num_disaster_types'");
69541#ifdef FREECIV_JSON_CONNECTION
69542 field_addr.name = "num_disaster_types";
69543#endif /* FREECIV_JSON_CONNECTION */
69544 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
69545 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
69546 }
69547 }
69548 if (BV_ISSET(fields, 11)) {
69549 log_packet_detailed(" got field 'num_achievement_types'");
69550#ifdef FREECIV_JSON_CONNECTION
69551 field_addr.name = "num_achievement_types";
69552#endif /* FREECIV_JSON_CONNECTION */
69553 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
69554 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
69555 }
69556 }
69557 if (BV_ISSET(fields, 12)) {
69558 log_packet_detailed(" got field 'num_multipliers'");
69559#ifdef FREECIV_JSON_CONNECTION
69560 field_addr.name = "num_multipliers";
69561#endif /* FREECIV_JSON_CONNECTION */
69562 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
69563 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
69564 }
69565 }
69566 if (BV_ISSET(fields, 13)) {
69567 log_packet_detailed(" got field 'num_styles'");
69568#ifdef FREECIV_JSON_CONNECTION
69569 field_addr.name = "num_styles";
69570#endif /* FREECIV_JSON_CONNECTION */
69571 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
69572 RECEIVE_PACKET_FIELD_ERROR(num_styles);
69573 }
69574 }
69575 if (BV_ISSET(fields, 14)) {
69576 log_packet_detailed(" got field 'num_music_styles'");
69577#ifdef FREECIV_JSON_CONNECTION
69578 field_addr.name = "num_music_styles";
69579#endif /* FREECIV_JSON_CONNECTION */
69580 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
69581 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
69582 }
69583 }
69584 if (BV_ISSET(fields, 15)) {
69585 log_packet_detailed(" got field 'government_count'");
69586#ifdef FREECIV_JSON_CONNECTION
69587 field_addr.name = "government_count";
69588#endif /* FREECIV_JSON_CONNECTION */
69589 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
69591 }
69592 }
69593 if (BV_ISSET(fields, 16)) {
69594 log_packet_detailed(" got field 'nation_count'");
69595#ifdef FREECIV_JSON_CONNECTION
69596 field_addr.name = "nation_count";
69597#endif /* FREECIV_JSON_CONNECTION */
69598 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
69600 }
69601 }
69602 if (BV_ISSET(fields, 17)) {
69603 log_packet_detailed(" got field 'num_city_styles'");
69604#ifdef FREECIV_JSON_CONNECTION
69605 field_addr.name = "num_city_styles";
69606#endif /* FREECIV_JSON_CONNECTION */
69607 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
69608 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
69609 }
69610 }
69611 if (BV_ISSET(fields, 18)) {
69612 log_packet_detailed(" got field 'terrain_count'");
69613#ifdef FREECIV_JSON_CONNECTION
69614 field_addr.name = "terrain_count";
69615#endif /* FREECIV_JSON_CONNECTION */
69616 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
69618 }
69619 }
69620 if (BV_ISSET(fields, 19)) {
69621 log_packet_detailed(" got field 'num_specialist_types'");
69622#ifdef FREECIV_JSON_CONNECTION
69623 field_addr.name = "num_specialist_types";
69624#endif /* FREECIV_JSON_CONNECTION */
69625 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
69626 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
69627 }
69628 }
69629 if (BV_ISSET(fields, 20)) {
69630 log_packet_detailed(" got field 'num_nation_groups'");
69631#ifdef FREECIV_JSON_CONNECTION
69632 field_addr.name = "num_nation_groups";
69633#endif /* FREECIV_JSON_CONNECTION */
69634 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
69636 }
69637 }
69638 if (BV_ISSET(fields, 21)) {
69639 log_packet_detailed(" got field 'num_nation_sets'");
69640#ifdef FREECIV_JSON_CONNECTION
69641 field_addr.name = "num_nation_sets";
69642#endif /* FREECIV_JSON_CONNECTION */
69643 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
69645 }
69646 }
69647 if (BV_ISSET(fields, 22)) {
69648 log_packet_detailed(" got field 'preferred_tileset'");
69649#ifdef FREECIV_JSON_CONNECTION
69650 field_addr.name = "preferred_tileset";
69651#endif /* FREECIV_JSON_CONNECTION */
69652 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
69653 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
69654 }
69655 }
69656 if (BV_ISSET(fields, 23)) {
69657 log_packet_detailed(" got field 'preferred_soundset'");
69658#ifdef FREECIV_JSON_CONNECTION
69659 field_addr.name = "preferred_soundset";
69660#endif /* FREECIV_JSON_CONNECTION */
69661 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
69662 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
69663 }
69664 }
69665 if (BV_ISSET(fields, 24)) {
69666 log_packet_detailed(" got field 'preferred_musicset'");
69667#ifdef FREECIV_JSON_CONNECTION
69668 field_addr.name = "preferred_musicset";
69669#endif /* FREECIV_JSON_CONNECTION */
69670 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
69671 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
69672 }
69673 }
69674 real_packet->popup_tech_help = BV_ISSET(fields, 25);
69675 if (BV_ISSET(fields, 26)) {
69676 log_packet_detailed(" got field 'name'");
69677#ifdef FREECIV_JSON_CONNECTION
69678 field_addr.name = "name";
69679#endif /* FREECIV_JSON_CONNECTION */
69680 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
69682 }
69683 }
69684 if (BV_ISSET(fields, 27)) {
69685 log_packet_detailed(" got field 'version'");
69686#ifdef FREECIV_JSON_CONNECTION
69687 field_addr.name = "version";
69688#endif /* FREECIV_JSON_CONNECTION */
69689 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
69691 }
69692 }
69693 if (BV_ISSET(fields, 28)) {
69694 log_packet_detailed(" got field 'alt_dir'");
69695#ifdef FREECIV_JSON_CONNECTION
69696 field_addr.name = "alt_dir";
69697#endif /* FREECIV_JSON_CONNECTION */
69698 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
69700 }
69701 }
69702 if (BV_ISSET(fields, 29)) {
69703 log_packet_detailed(" got field 'desc_length'");
69704#ifdef FREECIV_JSON_CONNECTION
69705 field_addr.name = "desc_length";
69706#endif /* FREECIV_JSON_CONNECTION */
69707 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
69708 RECEIVE_PACKET_FIELD_ERROR(desc_length);
69709 }
69710 }
69711 if (BV_ISSET(fields, 30)) {
69712 log_packet_detailed(" got field 'num_counters'");
69713#ifdef FREECIV_JSON_CONNECTION
69714 field_addr.name = "num_counters";
69715#endif /* FREECIV_JSON_CONNECTION */
69716 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
69717 RECEIVE_PACKET_FIELD_ERROR(num_counters);
69718 }
69719 }
69720
69721 if (NULL == old) {
69722 old = fc_malloc(sizeof(*old));
69723 *old = *real_packet;
69724 genhash_insert(*hash, old, old);
69725 } else {
69726 *old = *real_packet;
69727 }
69728
69729#endif /* FREECIV_DELTA_PROTOCOL */
69731}
69732
69734{
69735 const struct packet_ruleset_control *real_packet = packet;
69736 int e;
69737#ifdef FREECIV_DELTA_PROTOCOL
69739 struct packet_ruleset_control *old;
69740 bool differ;
69741 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CONTROL;
69742#endif /* FREECIV_DELTA_PROTOCOL */
69744#ifdef FREECIV_JSON_CONNECTION
69745 struct plocation field_addr;
69746 {
69750 }
69751#endif /* FREECIV_JSON_CONNECTION */
69752
69753 log_packet_detailed("packet_ruleset_control_100: sending info about ()");
69754
69755#ifdef FREECIV_DELTA_PROTOCOL
69756 if (NULL == *hash) {
69758 NULL, NULL, NULL, free);
69759 }
69760 BV_CLR_ALL(fields);
69761
69762 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
69763 old = fc_malloc(sizeof(*old));
69764 *old = *real_packet;
69765 genhash_insert(*hash, old, old);
69766 memset(old, 0, sizeof(*old));
69767 }
69768 differ = (old->num_unit_classes != real_packet->num_unit_classes);
69769 if (differ) {
69770 BV_SET(fields, 0);
69771 }
69772
69773 differ = (old->num_unit_types != real_packet->num_unit_types);
69774 if (differ) {
69775 BV_SET(fields, 1);
69776 }
69777
69778 differ = (old->num_impr_types != real_packet->num_impr_types);
69779 if (differ) {
69780 BV_SET(fields, 2);
69781 }
69782
69783 differ = (old->num_tech_classes != real_packet->num_tech_classes);
69784 if (differ) {
69785 BV_SET(fields, 3);
69786 }
69787
69788 differ = (old->num_tech_types != real_packet->num_tech_types);
69789 if (differ) {
69790 BV_SET(fields, 4);
69791 }
69792
69793 differ = (old->num_extra_types != real_packet->num_extra_types);
69794 if (differ) {
69795 BV_SET(fields, 5);
69796 }
69797
69798 differ = (old->num_base_types != real_packet->num_base_types);
69799 if (differ) {
69800 BV_SET(fields, 6);
69801 }
69802
69803 differ = (old->num_road_types != real_packet->num_road_types);
69804 if (differ) {
69805 BV_SET(fields, 7);
69806 }
69807
69808 differ = (old->num_resource_types != real_packet->num_resource_types);
69809 if (differ) {
69810 BV_SET(fields, 8);
69811 }
69812
69813 differ = (old->num_goods_types != real_packet->num_goods_types);
69814 if (differ) {
69815 BV_SET(fields, 9);
69816 }
69817
69818 differ = (old->num_disaster_types != real_packet->num_disaster_types);
69819 if (differ) {
69820 BV_SET(fields, 10);
69821 }
69822
69823 differ = (old->num_achievement_types != real_packet->num_achievement_types);
69824 if (differ) {
69825 BV_SET(fields, 11);
69826 }
69827
69828 differ = (old->num_multipliers != real_packet->num_multipliers);
69829 if (differ) {
69830 BV_SET(fields, 12);
69831 }
69832
69833 differ = (old->num_styles != real_packet->num_styles);
69834 if (differ) {
69835 BV_SET(fields, 13);
69836 }
69837
69838 differ = (old->num_music_styles != real_packet->num_music_styles);
69839 if (differ) {
69840 BV_SET(fields, 14);
69841 }
69842
69843 differ = (old->government_count != real_packet->government_count);
69844 if (differ) {
69845 BV_SET(fields, 15);
69846 }
69847
69848 differ = (old->nation_count != real_packet->nation_count);
69849 if (differ) {
69850 BV_SET(fields, 16);
69851 }
69852
69853 differ = (old->num_city_styles != real_packet->num_city_styles);
69854 if (differ) {
69855 BV_SET(fields, 17);
69856 }
69857
69858 differ = (old->terrain_count != real_packet->terrain_count);
69859 if (differ) {
69860 BV_SET(fields, 18);
69861 }
69862
69863 differ = (old->num_specialist_types != real_packet->num_specialist_types);
69864 if (differ) {
69865 BV_SET(fields, 19);
69866 }
69867
69868 differ = (old->num_nation_groups != real_packet->num_nation_groups);
69869 if (differ) {
69870 BV_SET(fields, 20);
69871 }
69872
69873 differ = (old->num_nation_sets != real_packet->num_nation_sets);
69874 if (differ) {
69875 BV_SET(fields, 21);
69876 }
69877
69878 differ = (strcmp(old->preferred_tileset, real_packet->preferred_tileset) != 0);
69879 if (differ) {
69880 BV_SET(fields, 22);
69881 }
69882
69883 differ = (strcmp(old->preferred_soundset, real_packet->preferred_soundset) != 0);
69884 if (differ) {
69885 BV_SET(fields, 23);
69886 }
69887
69888 differ = (strcmp(old->preferred_musicset, real_packet->preferred_musicset) != 0);
69889 if (differ) {
69890 BV_SET(fields, 24);
69891 }
69892
69893 if (packet->popup_tech_help) {
69894 BV_SET(fields, 25);
69895 }
69896
69897 differ = (strcmp(old->name, real_packet->name) != 0);
69898 if (differ) {
69899 BV_SET(fields, 26);
69900 }
69901
69902 differ = (strcmp(old->version, real_packet->version) != 0);
69903 if (differ) {
69904 BV_SET(fields, 27);
69905 }
69906
69907 differ = (strcmp(old->alt_dir, real_packet->alt_dir) != 0);
69908 if (differ) {
69909 BV_SET(fields, 28);
69910 }
69911
69912 differ = (old->desc_length != real_packet->desc_length);
69913 if (differ) {
69914 BV_SET(fields, 29);
69915 }
69916
69917 differ = (old->num_counters != real_packet->num_counters);
69918 if (differ) {
69919 BV_SET(fields, 30);
69920 }
69921
69922
69923#ifdef FREECIV_JSON_CONNECTION
69924 field_addr.name = "fields";
69925#endif /* FREECIV_JSON_CONNECTION */
69926 e = 0;
69927 e |= DIO_BV_PUT(&dout, &field_addr, fields);
69928 if (e) {
69929 log_packet_detailed("fields bitvector error detected");
69930 }
69931
69932 if (BV_ISSET(fields, 0)) {
69933 log_packet_detailed(" field 'num_unit_classes' has changed");
69934#ifdef FREECIV_JSON_CONNECTION
69935 field_addr.name = "num_unit_classes";
69936#endif /* FREECIV_JSON_CONNECTION */
69937 e = 0;
69938 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
69939 if (e) {
69940 log_packet_detailed("'num_unit_classes' field error detected");
69941 }
69942 }
69943 if (BV_ISSET(fields, 1)) {
69944 log_packet_detailed(" field 'num_unit_types' has changed");
69945#ifdef FREECIV_JSON_CONNECTION
69946 field_addr.name = "num_unit_types";
69947#endif /* FREECIV_JSON_CONNECTION */
69948 e = 0;
69949 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
69950 if (e) {
69951 log_packet_detailed("'num_unit_types' field error detected");
69952 }
69953 }
69954 if (BV_ISSET(fields, 2)) {
69955 log_packet_detailed(" field 'num_impr_types' has changed");
69956#ifdef FREECIV_JSON_CONNECTION
69957 field_addr.name = "num_impr_types";
69958#endif /* FREECIV_JSON_CONNECTION */
69959 e = 0;
69960 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
69961 if (e) {
69962 log_packet_detailed("'num_impr_types' field error detected");
69963 }
69964 }
69965 if (BV_ISSET(fields, 3)) {
69966 log_packet_detailed(" field 'num_tech_classes' has changed");
69967#ifdef FREECIV_JSON_CONNECTION
69968 field_addr.name = "num_tech_classes";
69969#endif /* FREECIV_JSON_CONNECTION */
69970 e = 0;
69971 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
69972 if (e) {
69973 log_packet_detailed("'num_tech_classes' field error detected");
69974 }
69975 }
69976 if (BV_ISSET(fields, 4)) {
69977 log_packet_detailed(" field 'num_tech_types' has changed");
69978#ifdef FREECIV_JSON_CONNECTION
69979 field_addr.name = "num_tech_types";
69980#endif /* FREECIV_JSON_CONNECTION */
69981 e = 0;
69982 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
69983 if (e) {
69984 log_packet_detailed("'num_tech_types' field error detected");
69985 }
69986 }
69987 if (BV_ISSET(fields, 5)) {
69988 log_packet_detailed(" field 'num_extra_types' has changed");
69989#ifdef FREECIV_JSON_CONNECTION
69990 field_addr.name = "num_extra_types";
69991#endif /* FREECIV_JSON_CONNECTION */
69992 e = 0;
69993 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
69994 if (e) {
69995 log_packet_detailed("'num_extra_types' field error detected");
69996 }
69997 }
69998 if (BV_ISSET(fields, 6)) {
69999 log_packet_detailed(" field 'num_base_types' has changed");
70000#ifdef FREECIV_JSON_CONNECTION
70001 field_addr.name = "num_base_types";
70002#endif /* FREECIV_JSON_CONNECTION */
70003 e = 0;
70004 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
70005 if (e) {
70006 log_packet_detailed("'num_base_types' field error detected");
70007 }
70008 }
70009 if (BV_ISSET(fields, 7)) {
70010 log_packet_detailed(" field 'num_road_types' has changed");
70011#ifdef FREECIV_JSON_CONNECTION
70012 field_addr.name = "num_road_types";
70013#endif /* FREECIV_JSON_CONNECTION */
70014 e = 0;
70015 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
70016 if (e) {
70017 log_packet_detailed("'num_road_types' field error detected");
70018 }
70019 }
70020 if (BV_ISSET(fields, 8)) {
70021 log_packet_detailed(" field 'num_resource_types' has changed");
70022#ifdef FREECIV_JSON_CONNECTION
70023 field_addr.name = "num_resource_types";
70024#endif /* FREECIV_JSON_CONNECTION */
70025 e = 0;
70026 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
70027 if (e) {
70028 log_packet_detailed("'num_resource_types' field error detected");
70029 }
70030 }
70031 if (BV_ISSET(fields, 9)) {
70032 log_packet_detailed(" field 'num_goods_types' has changed");
70033#ifdef FREECIV_JSON_CONNECTION
70034 field_addr.name = "num_goods_types";
70035#endif /* FREECIV_JSON_CONNECTION */
70036 e = 0;
70037 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
70038 if (e) {
70039 log_packet_detailed("'num_goods_types' field error detected");
70040 }
70041 }
70042 if (BV_ISSET(fields, 10)) {
70043 log_packet_detailed(" field 'num_disaster_types' has changed");
70044#ifdef FREECIV_JSON_CONNECTION
70045 field_addr.name = "num_disaster_types";
70046#endif /* FREECIV_JSON_CONNECTION */
70047 e = 0;
70048 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
70049 if (e) {
70050 log_packet_detailed("'num_disaster_types' field error detected");
70051 }
70052 }
70053 if (BV_ISSET(fields, 11)) {
70054 log_packet_detailed(" field 'num_achievement_types' has changed");
70055#ifdef FREECIV_JSON_CONNECTION
70056 field_addr.name = "num_achievement_types";
70057#endif /* FREECIV_JSON_CONNECTION */
70058 e = 0;
70059 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
70060 if (e) {
70061 log_packet_detailed("'num_achievement_types' field error detected");
70062 }
70063 }
70064 if (BV_ISSET(fields, 12)) {
70065 log_packet_detailed(" field 'num_multipliers' has changed");
70066#ifdef FREECIV_JSON_CONNECTION
70067 field_addr.name = "num_multipliers";
70068#endif /* FREECIV_JSON_CONNECTION */
70069 e = 0;
70070 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
70071 if (e) {
70072 log_packet_detailed("'num_multipliers' field error detected");
70073 }
70074 }
70075 if (BV_ISSET(fields, 13)) {
70076 log_packet_detailed(" field 'num_styles' has changed");
70077#ifdef FREECIV_JSON_CONNECTION
70078 field_addr.name = "num_styles";
70079#endif /* FREECIV_JSON_CONNECTION */
70080 e = 0;
70081 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
70082 if (e) {
70083 log_packet_detailed("'num_styles' field error detected");
70084 }
70085 }
70086 if (BV_ISSET(fields, 14)) {
70087 log_packet_detailed(" field 'num_music_styles' has changed");
70088#ifdef FREECIV_JSON_CONNECTION
70089 field_addr.name = "num_music_styles";
70090#endif /* FREECIV_JSON_CONNECTION */
70091 e = 0;
70092 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
70093 if (e) {
70094 log_packet_detailed("'num_music_styles' field error detected");
70095 }
70096 }
70097 if (BV_ISSET(fields, 15)) {
70098 log_packet_detailed(" field 'government_count' has changed");
70099#ifdef FREECIV_JSON_CONNECTION
70100 field_addr.name = "government_count";
70101#endif /* FREECIV_JSON_CONNECTION */
70102 e = 0;
70103 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
70104 if (e) {
70105 log_packet_detailed("'government_count' field error detected");
70106 }
70107 }
70108 if (BV_ISSET(fields, 16)) {
70109 log_packet_detailed(" field 'nation_count' has changed");
70110#ifdef FREECIV_JSON_CONNECTION
70111 field_addr.name = "nation_count";
70112#endif /* FREECIV_JSON_CONNECTION */
70113 e = 0;
70114 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
70115 if (e) {
70116 log_packet_detailed("'nation_count' field error detected");
70117 }
70118 }
70119 if (BV_ISSET(fields, 17)) {
70120 log_packet_detailed(" field 'num_city_styles' has changed");
70121#ifdef FREECIV_JSON_CONNECTION
70122 field_addr.name = "num_city_styles";
70123#endif /* FREECIV_JSON_CONNECTION */
70124 e = 0;
70125 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
70126 if (e) {
70127 log_packet_detailed("'num_city_styles' field error detected");
70128 }
70129 }
70130 if (BV_ISSET(fields, 18)) {
70131 log_packet_detailed(" field 'terrain_count' has changed");
70132#ifdef FREECIV_JSON_CONNECTION
70133 field_addr.name = "terrain_count";
70134#endif /* FREECIV_JSON_CONNECTION */
70135 e = 0;
70136 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
70137 if (e) {
70138 log_packet_detailed("'terrain_count' field error detected");
70139 }
70140 }
70141 if (BV_ISSET(fields, 19)) {
70142 log_packet_detailed(" field 'num_specialist_types' has changed");
70143#ifdef FREECIV_JSON_CONNECTION
70144 field_addr.name = "num_specialist_types";
70145#endif /* FREECIV_JSON_CONNECTION */
70146 e = 0;
70147 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
70148 if (e) {
70149 log_packet_detailed("'num_specialist_types' field error detected");
70150 }
70151 }
70152 if (BV_ISSET(fields, 20)) {
70153 log_packet_detailed(" field 'num_nation_groups' has changed");
70154#ifdef FREECIV_JSON_CONNECTION
70155 field_addr.name = "num_nation_groups";
70156#endif /* FREECIV_JSON_CONNECTION */
70157 e = 0;
70158 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
70159 if (e) {
70160 log_packet_detailed("'num_nation_groups' field error detected");
70161 }
70162 }
70163 if (BV_ISSET(fields, 21)) {
70164 log_packet_detailed(" field 'num_nation_sets' has changed");
70165#ifdef FREECIV_JSON_CONNECTION
70166 field_addr.name = "num_nation_sets";
70167#endif /* FREECIV_JSON_CONNECTION */
70168 e = 0;
70169 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
70170 if (e) {
70171 log_packet_detailed("'num_nation_sets' field error detected");
70172 }
70173 }
70174 if (BV_ISSET(fields, 22)) {
70175 log_packet_detailed(" field 'preferred_tileset' has changed");
70176#ifdef FREECIV_JSON_CONNECTION
70177 field_addr.name = "preferred_tileset";
70178#endif /* FREECIV_JSON_CONNECTION */
70179 e = 0;
70180 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
70181 if (e) {
70182 log_packet_detailed("'preferred_tileset' field error detected");
70183 }
70184 }
70185 if (BV_ISSET(fields, 23)) {
70186 log_packet_detailed(" field 'preferred_soundset' has changed");
70187#ifdef FREECIV_JSON_CONNECTION
70188 field_addr.name = "preferred_soundset";
70189#endif /* FREECIV_JSON_CONNECTION */
70190 e = 0;
70191 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
70192 if (e) {
70193 log_packet_detailed("'preferred_soundset' field error detected");
70194 }
70195 }
70196 if (BV_ISSET(fields, 24)) {
70197 log_packet_detailed(" field 'preferred_musicset' has changed");
70198#ifdef FREECIV_JSON_CONNECTION
70199 field_addr.name = "preferred_musicset";
70200#endif /* FREECIV_JSON_CONNECTION */
70201 e = 0;
70202 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
70203 if (e) {
70204 log_packet_detailed("'preferred_musicset' field error detected");
70205 }
70206 }
70207 /* field 25 is folded into the header */
70208 if (BV_ISSET(fields, 26)) {
70209 log_packet_detailed(" field 'name' has changed");
70210#ifdef FREECIV_JSON_CONNECTION
70211 field_addr.name = "name";
70212#endif /* FREECIV_JSON_CONNECTION */
70213 e = 0;
70214 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70215 if (e) {
70216 log_packet_detailed("'name' field error detected");
70217 }
70218 }
70219 if (BV_ISSET(fields, 27)) {
70220 log_packet_detailed(" field 'version' has changed");
70221#ifdef FREECIV_JSON_CONNECTION
70222 field_addr.name = "version";
70223#endif /* FREECIV_JSON_CONNECTION */
70224 e = 0;
70225 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
70226 if (e) {
70227 log_packet_detailed("'version' field error detected");
70228 }
70229 }
70230 if (BV_ISSET(fields, 28)) {
70231 log_packet_detailed(" field 'alt_dir' has changed");
70232#ifdef FREECIV_JSON_CONNECTION
70233 field_addr.name = "alt_dir";
70234#endif /* FREECIV_JSON_CONNECTION */
70235 e = 0;
70236 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
70237 if (e) {
70238 log_packet_detailed("'alt_dir' field error detected");
70239 }
70240 }
70241 if (BV_ISSET(fields, 29)) {
70242 log_packet_detailed(" field 'desc_length' has changed");
70243#ifdef FREECIV_JSON_CONNECTION
70244 field_addr.name = "desc_length";
70245#endif /* FREECIV_JSON_CONNECTION */
70246 e = 0;
70247 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
70248 if (e) {
70249 log_packet_detailed("'desc_length' field error detected");
70250 }
70251 }
70252 if (BV_ISSET(fields, 30)) {
70253 log_packet_detailed(" field 'num_counters' has changed");
70254#ifdef FREECIV_JSON_CONNECTION
70255 field_addr.name = "num_counters";
70256#endif /* FREECIV_JSON_CONNECTION */
70257 e = 0;
70258 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
70259 if (e) {
70260 log_packet_detailed("'num_counters' field error detected");
70261 }
70262 }
70263
70264 *old = *real_packet;
70265#endif /* FREECIV_DELTA_PROTOCOL */
70266#ifndef FREECIV_DELTA_PROTOCOL
70267#ifdef FREECIV_JSON_CONNECTION
70268 field_addr.name = "num_unit_classes";
70269#endif /* FREECIV_JSON_CONNECTION */
70270 e = 0;
70271 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
70272 if (e) {
70273 log_packet_detailed("'num_unit_classes' field error detected");
70274 }
70275#ifdef FREECIV_JSON_CONNECTION
70276 field_addr.name = "num_unit_types";
70277#endif /* FREECIV_JSON_CONNECTION */
70278 e = 0;
70279 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
70280 if (e) {
70281 log_packet_detailed("'num_unit_types' field error detected");
70282 }
70283#ifdef FREECIV_JSON_CONNECTION
70284 field_addr.name = "num_impr_types";
70285#endif /* FREECIV_JSON_CONNECTION */
70286 e = 0;
70287 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
70288 if (e) {
70289 log_packet_detailed("'num_impr_types' field error detected");
70290 }
70291#ifdef FREECIV_JSON_CONNECTION
70292 field_addr.name = "num_tech_classes";
70293#endif /* FREECIV_JSON_CONNECTION */
70294 e = 0;
70295 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
70296 if (e) {
70297 log_packet_detailed("'num_tech_classes' field error detected");
70298 }
70299#ifdef FREECIV_JSON_CONNECTION
70300 field_addr.name = "num_tech_types";
70301#endif /* FREECIV_JSON_CONNECTION */
70302 e = 0;
70303 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
70304 if (e) {
70305 log_packet_detailed("'num_tech_types' field error detected");
70306 }
70307#ifdef FREECIV_JSON_CONNECTION
70308 field_addr.name = "num_extra_types";
70309#endif /* FREECIV_JSON_CONNECTION */
70310 e = 0;
70311 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
70312 if (e) {
70313 log_packet_detailed("'num_extra_types' field error detected");
70314 }
70315#ifdef FREECIV_JSON_CONNECTION
70316 field_addr.name = "num_base_types";
70317#endif /* FREECIV_JSON_CONNECTION */
70318 e = 0;
70319 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
70320 if (e) {
70321 log_packet_detailed("'num_base_types' field error detected");
70322 }
70323#ifdef FREECIV_JSON_CONNECTION
70324 field_addr.name = "num_road_types";
70325#endif /* FREECIV_JSON_CONNECTION */
70326 e = 0;
70327 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
70328 if (e) {
70329 log_packet_detailed("'num_road_types' field error detected");
70330 }
70331#ifdef FREECIV_JSON_CONNECTION
70332 field_addr.name = "num_resource_types";
70333#endif /* FREECIV_JSON_CONNECTION */
70334 e = 0;
70335 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
70336 if (e) {
70337 log_packet_detailed("'num_resource_types' field error detected");
70338 }
70339#ifdef FREECIV_JSON_CONNECTION
70340 field_addr.name = "num_goods_types";
70341#endif /* FREECIV_JSON_CONNECTION */
70342 e = 0;
70343 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
70344 if (e) {
70345 log_packet_detailed("'num_goods_types' field error detected");
70346 }
70347#ifdef FREECIV_JSON_CONNECTION
70348 field_addr.name = "num_disaster_types";
70349#endif /* FREECIV_JSON_CONNECTION */
70350 e = 0;
70351 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
70352 if (e) {
70353 log_packet_detailed("'num_disaster_types' field error detected");
70354 }
70355#ifdef FREECIV_JSON_CONNECTION
70356 field_addr.name = "num_achievement_types";
70357#endif /* FREECIV_JSON_CONNECTION */
70358 e = 0;
70359 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
70360 if (e) {
70361 log_packet_detailed("'num_achievement_types' field error detected");
70362 }
70363#ifdef FREECIV_JSON_CONNECTION
70364 field_addr.name = "num_multipliers";
70365#endif /* FREECIV_JSON_CONNECTION */
70366 e = 0;
70367 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
70368 if (e) {
70369 log_packet_detailed("'num_multipliers' field error detected");
70370 }
70371#ifdef FREECIV_JSON_CONNECTION
70372 field_addr.name = "num_styles";
70373#endif /* FREECIV_JSON_CONNECTION */
70374 e = 0;
70375 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
70376 if (e) {
70377 log_packet_detailed("'num_styles' field error detected");
70378 }
70379#ifdef FREECIV_JSON_CONNECTION
70380 field_addr.name = "num_music_styles";
70381#endif /* FREECIV_JSON_CONNECTION */
70382 e = 0;
70383 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
70384 if (e) {
70385 log_packet_detailed("'num_music_styles' field error detected");
70386 }
70387#ifdef FREECIV_JSON_CONNECTION
70388 field_addr.name = "government_count";
70389#endif /* FREECIV_JSON_CONNECTION */
70390 e = 0;
70391 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
70392 if (e) {
70393 log_packet_detailed("'government_count' field error detected");
70394 }
70395#ifdef FREECIV_JSON_CONNECTION
70396 field_addr.name = "nation_count";
70397#endif /* FREECIV_JSON_CONNECTION */
70398 e = 0;
70399 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
70400 if (e) {
70401 log_packet_detailed("'nation_count' field error detected");
70402 }
70403#ifdef FREECIV_JSON_CONNECTION
70404 field_addr.name = "num_city_styles";
70405#endif /* FREECIV_JSON_CONNECTION */
70406 e = 0;
70407 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
70408 if (e) {
70409 log_packet_detailed("'num_city_styles' field error detected");
70410 }
70411#ifdef FREECIV_JSON_CONNECTION
70412 field_addr.name = "terrain_count";
70413#endif /* FREECIV_JSON_CONNECTION */
70414 e = 0;
70415 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
70416 if (e) {
70417 log_packet_detailed("'terrain_count' field error detected");
70418 }
70419#ifdef FREECIV_JSON_CONNECTION
70420 field_addr.name = "num_specialist_types";
70421#endif /* FREECIV_JSON_CONNECTION */
70422 e = 0;
70423 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
70424 if (e) {
70425 log_packet_detailed("'num_specialist_types' field error detected");
70426 }
70427#ifdef FREECIV_JSON_CONNECTION
70428 field_addr.name = "num_nation_groups";
70429#endif /* FREECIV_JSON_CONNECTION */
70430 e = 0;
70431 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
70432 if (e) {
70433 log_packet_detailed("'num_nation_groups' field error detected");
70434 }
70435#ifdef FREECIV_JSON_CONNECTION
70436 field_addr.name = "num_nation_sets";
70437#endif /* FREECIV_JSON_CONNECTION */
70438 e = 0;
70439 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
70440 if (e) {
70441 log_packet_detailed("'num_nation_sets' field error detected");
70442 }
70443#ifdef FREECIV_JSON_CONNECTION
70444 field_addr.name = "preferred_tileset";
70445#endif /* FREECIV_JSON_CONNECTION */
70446 e = 0;
70447 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
70448 if (e) {
70449 log_packet_detailed("'preferred_tileset' field error detected");
70450 }
70451#ifdef FREECIV_JSON_CONNECTION
70452 field_addr.name = "preferred_soundset";
70453#endif /* FREECIV_JSON_CONNECTION */
70454 e = 0;
70455 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
70456 if (e) {
70457 log_packet_detailed("'preferred_soundset' field error detected");
70458 }
70459#ifdef FREECIV_JSON_CONNECTION
70460 field_addr.name = "preferred_musicset";
70461#endif /* FREECIV_JSON_CONNECTION */
70462 e = 0;
70463 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
70464 if (e) {
70465 log_packet_detailed("'preferred_musicset' field error detected");
70466 }
70467#ifdef FREECIV_JSON_CONNECTION
70468 field_addr.name = "popup_tech_help";
70469#endif /* FREECIV_JSON_CONNECTION */
70470 e = 0;
70471 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->popup_tech_help);
70472 if (e) {
70473 log_packet_detailed("'popup_tech_help' field error detected");
70474 }
70475#ifdef FREECIV_JSON_CONNECTION
70476 field_addr.name = "name";
70477#endif /* FREECIV_JSON_CONNECTION */
70478 e = 0;
70479 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70480 if (e) {
70481 log_packet_detailed("'name' field error detected");
70482 }
70483#ifdef FREECIV_JSON_CONNECTION
70484 field_addr.name = "version";
70485#endif /* FREECIV_JSON_CONNECTION */
70486 e = 0;
70487 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
70488 if (e) {
70489 log_packet_detailed("'version' field error detected");
70490 }
70491#ifdef FREECIV_JSON_CONNECTION
70492 field_addr.name = "alt_dir";
70493#endif /* FREECIV_JSON_CONNECTION */
70494 e = 0;
70495 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
70496 if (e) {
70497 log_packet_detailed("'alt_dir' field error detected");
70498 }
70499#ifdef FREECIV_JSON_CONNECTION
70500 field_addr.name = "desc_length";
70501#endif /* FREECIV_JSON_CONNECTION */
70502 e = 0;
70503 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
70504 if (e) {
70505 log_packet_detailed("'desc_length' field error detected");
70506 }
70507#ifdef FREECIV_JSON_CONNECTION
70508 field_addr.name = "num_counters";
70509#endif /* FREECIV_JSON_CONNECTION */
70510 e = 0;
70511 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
70512 if (e) {
70513 log_packet_detailed("'num_counters' field error detected");
70514 }
70515
70516#endif
70518}
70519
70521{
70522 if (!pc->used) {
70523 log_error("WARNING: trying to send data to the closed connection %s",
70525 return -1;
70526 }
70527 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet != NULL, -1,
70528 "Handler for PACKET_RULESET_CONTROL not installed");
70529 return pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet(pc, packet);
70530}
70531
70532void lsend_packet_ruleset_control(struct conn_list *dest, const struct packet_ruleset_control *packet)
70533{
70534 conn_list_iterate(dest, pconn) {
70537}
70538
70539#ifdef FREECIV_DELTA_PROTOCOL
70540#define hash_packet_ruleset_summary_100 hash_const
70541
70542#define cmp_packet_ruleset_summary_100 cmp_const
70543
70545#endif /* FREECIV_DELTA_PROTOCOL */
70546
70548{
70549#ifdef FREECIV_DELTA_PROTOCOL
70551 struct packet_ruleset_summary *old;
70552 struct genhash **hash = pc->phs.received + PACKET_RULESET_SUMMARY;
70553#endif /* FREECIV_DELTA_PROTOCOL */
70555#ifdef FREECIV_JSON_CONNECTION
70556 struct plocation field_addr;
70557 {
70561 }
70562#endif /* FREECIV_JSON_CONNECTION */
70563
70564#ifdef FREECIV_DELTA_PROTOCOL
70565#ifdef FREECIV_JSON_CONNECTION
70566 field_addr.name = "fields";
70567#endif /* FREECIV_JSON_CONNECTION */
70568 DIO_BV_GET(&din, &field_addr, fields);
70569
70570#else /* FREECIV_DELTA_PROTOCOL */
70571#ifdef FREECIV_JSON_CONNECTION
70572 field_addr.name = "text";
70573#endif /* FREECIV_JSON_CONNECTION */
70574 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
70576 }
70577#endif
70578 log_packet_detailed("packet_ruleset_summary_100: got info about ()");
70579
70580#ifdef FREECIV_DELTA_PROTOCOL
70581 if (NULL == *hash) {
70583 NULL, NULL, NULL, free);
70584 }
70585
70586 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
70587 *real_packet = *old;
70588 } else {
70589 log_packet_detailed(" no old info");
70590 memset(real_packet, 0, sizeof(*real_packet));
70591 }
70592
70593 if (BV_ISSET(fields, 0)) {
70594 log_packet_detailed(" got field 'text'");
70595#ifdef FREECIV_JSON_CONNECTION
70596 field_addr.name = "text";
70597#endif /* FREECIV_JSON_CONNECTION */
70598 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
70600 }
70601 }
70602
70603 if (NULL == old) {
70604 old = fc_malloc(sizeof(*old));
70605 *old = *real_packet;
70606 genhash_insert(*hash, old, old);
70607 } else {
70608 *old = *real_packet;
70609 }
70610
70611#endif /* FREECIV_DELTA_PROTOCOL */
70613}
70614
70616{
70617 const struct packet_ruleset_summary *real_packet = packet;
70618 int e;
70619#ifdef FREECIV_DELTA_PROTOCOL
70621 struct packet_ruleset_summary *old;
70622 bool differ;
70623 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SUMMARY;
70624#endif /* FREECIV_DELTA_PROTOCOL */
70626#ifdef FREECIV_JSON_CONNECTION
70627 struct plocation field_addr;
70628 {
70632 }
70633#endif /* FREECIV_JSON_CONNECTION */
70634
70635 log_packet_detailed("packet_ruleset_summary_100: sending info about ()");
70636
70637#ifdef FREECIV_DELTA_PROTOCOL
70638 if (NULL == *hash) {
70640 NULL, NULL, NULL, free);
70641 }
70642 BV_CLR_ALL(fields);
70643
70644 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
70645 old = fc_malloc(sizeof(*old));
70646 *old = *real_packet;
70647 genhash_insert(*hash, old, old);
70648 memset(old, 0, sizeof(*old));
70649 }
70650 differ = (strcmp(old->text, real_packet->text) != 0);
70651 if (differ) {
70652 BV_SET(fields, 0);
70653 }
70654
70655
70656#ifdef FREECIV_JSON_CONNECTION
70657 field_addr.name = "fields";
70658#endif /* FREECIV_JSON_CONNECTION */
70659 e = 0;
70660 e |= DIO_BV_PUT(&dout, &field_addr, fields);
70661 if (e) {
70662 log_packet_detailed("fields bitvector error detected");
70663 }
70664
70665 if (BV_ISSET(fields, 0)) {
70666 log_packet_detailed(" field 'text' has changed");
70667#ifdef FREECIV_JSON_CONNECTION
70668 field_addr.name = "text";
70669#endif /* FREECIV_JSON_CONNECTION */
70670 e = 0;
70671 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
70672 if (e) {
70673 log_packet_detailed("'text' field error detected");
70674 }
70675 }
70676
70677 *old = *real_packet;
70678#endif /* FREECIV_DELTA_PROTOCOL */
70679#ifndef FREECIV_DELTA_PROTOCOL
70680#ifdef FREECIV_JSON_CONNECTION
70681 field_addr.name = "text";
70682#endif /* FREECIV_JSON_CONNECTION */
70683 e = 0;
70684 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
70685 if (e) {
70686 log_packet_detailed("'text' field error detected");
70687 }
70688
70689#endif
70691}
70692
70694{
70695 if (!pc->used) {
70696 log_error("WARNING: trying to send data to the closed connection %s",
70698 return -1;
70699 }
70700 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet != NULL, -1,
70701 "Handler for PACKET_RULESET_SUMMARY not installed");
70702 return pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet(pc, packet);
70703}
70704
70705void lsend_packet_ruleset_summary(struct conn_list *dest, const struct packet_ruleset_summary *packet)
70706{
70707 conn_list_iterate(dest, pconn) {
70710}
70711
70712#ifdef FREECIV_DELTA_PROTOCOL
70713#define hash_packet_ruleset_description_part_100 hash_const
70714
70715#define cmp_packet_ruleset_description_part_100 cmp_const
70716
70718#endif /* FREECIV_DELTA_PROTOCOL */
70719
70721{
70722#ifdef FREECIV_DELTA_PROTOCOL
70725 struct genhash **hash = pc->phs.received + PACKET_RULESET_DESCRIPTION_PART;
70726#endif /* FREECIV_DELTA_PROTOCOL */
70728#ifdef FREECIV_JSON_CONNECTION
70729 struct plocation field_addr;
70730 {
70734 }
70735#endif /* FREECIV_JSON_CONNECTION */
70736
70737#ifdef FREECIV_DELTA_PROTOCOL
70738#ifdef FREECIV_JSON_CONNECTION
70739 field_addr.name = "fields";
70740#endif /* FREECIV_JSON_CONNECTION */
70741 DIO_BV_GET(&din, &field_addr, fields);
70742
70743#else /* FREECIV_DELTA_PROTOCOL */
70744#ifdef FREECIV_JSON_CONNECTION
70745 field_addr.name = "text";
70746#endif /* FREECIV_JSON_CONNECTION */
70747 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
70749 }
70750#endif
70751 log_packet_detailed("packet_ruleset_description_part_100: got info about ()");
70752
70753#ifdef FREECIV_DELTA_PROTOCOL
70754 if (NULL == *hash) {
70756 NULL, NULL, NULL, free);
70757 }
70758
70759 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
70760 *real_packet = *old;
70761 } else {
70762 log_packet_detailed(" no old info");
70763 memset(real_packet, 0, sizeof(*real_packet));
70764 }
70765
70766 if (BV_ISSET(fields, 0)) {
70767 log_packet_detailed(" got field 'text'");
70768#ifdef FREECIV_JSON_CONNECTION
70769 field_addr.name = "text";
70770#endif /* FREECIV_JSON_CONNECTION */
70771 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
70773 }
70774 }
70775
70776 if (NULL == old) {
70777 old = fc_malloc(sizeof(*old));
70778 *old = *real_packet;
70779 genhash_insert(*hash, old, old);
70780 } else {
70781 *old = *real_packet;
70782 }
70783
70784#endif /* FREECIV_DELTA_PROTOCOL */
70786}
70787
70789{
70790 const struct packet_ruleset_description_part *real_packet = packet;
70791 int e;
70792#ifdef FREECIV_DELTA_PROTOCOL
70795 bool differ;
70796 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DESCRIPTION_PART;
70797#endif /* FREECIV_DELTA_PROTOCOL */
70799#ifdef FREECIV_JSON_CONNECTION
70800 struct plocation field_addr;
70801 {
70805 }
70806#endif /* FREECIV_JSON_CONNECTION */
70807
70808 log_packet_detailed("packet_ruleset_description_part_100: sending info about ()");
70809
70810#ifdef FREECIV_DELTA_PROTOCOL
70811 if (NULL == *hash) {
70813 NULL, NULL, NULL, free);
70814 }
70815 BV_CLR_ALL(fields);
70816
70817 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
70818 old = fc_malloc(sizeof(*old));
70819 *old = *real_packet;
70820 genhash_insert(*hash, old, old);
70821 memset(old, 0, sizeof(*old));
70822 }
70823 differ = (strcmp(old->text, real_packet->text) != 0);
70824 if (differ) {
70825 BV_SET(fields, 0);
70826 }
70827
70828
70829#ifdef FREECIV_JSON_CONNECTION
70830 field_addr.name = "fields";
70831#endif /* FREECIV_JSON_CONNECTION */
70832 e = 0;
70833 e |= DIO_BV_PUT(&dout, &field_addr, fields);
70834 if (e) {
70835 log_packet_detailed("fields bitvector error detected");
70836 }
70837
70838 if (BV_ISSET(fields, 0)) {
70839 log_packet_detailed(" field 'text' has changed");
70840#ifdef FREECIV_JSON_CONNECTION
70841 field_addr.name = "text";
70842#endif /* FREECIV_JSON_CONNECTION */
70843 e = 0;
70844 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
70845 if (e) {
70846 log_packet_detailed("'text' field error detected");
70847 }
70848 }
70849
70850 *old = *real_packet;
70851#endif /* FREECIV_DELTA_PROTOCOL */
70852#ifndef FREECIV_DELTA_PROTOCOL
70853#ifdef FREECIV_JSON_CONNECTION
70854 field_addr.name = "text";
70855#endif /* FREECIV_JSON_CONNECTION */
70856 e = 0;
70857 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
70858 if (e) {
70859 log_packet_detailed("'text' field error detected");
70860 }
70861
70862#endif
70864}
70865
70867{
70868 if (!pc->used) {
70869 log_error("WARNING: trying to send data to the closed connection %s",
70871 return -1;
70872 }
70873 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet != NULL, -1,
70874 "Handler for PACKET_RULESET_DESCRIPTION_PART not installed");
70875 return pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet(pc, packet);
70876}
70877
70884
70885#ifdef FREECIV_DELTA_PROTOCOL
70886#define hash_packet_single_want_hack_req_100 hash_const
70887
70888#define cmp_packet_single_want_hack_req_100 cmp_const
70889
70891#endif /* FREECIV_DELTA_PROTOCOL */
70892
70894{
70895#ifdef FREECIV_DELTA_PROTOCOL
70897 struct packet_single_want_hack_req *old;
70898 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REQ;
70899#endif /* FREECIV_DELTA_PROTOCOL */
70901#ifdef FREECIV_JSON_CONNECTION
70902 struct plocation field_addr;
70903 {
70907 }
70908#endif /* FREECIV_JSON_CONNECTION */
70909
70910#ifdef FREECIV_DELTA_PROTOCOL
70911#ifdef FREECIV_JSON_CONNECTION
70912 field_addr.name = "fields";
70913#endif /* FREECIV_JSON_CONNECTION */
70914 DIO_BV_GET(&din, &field_addr, fields);
70915
70916#else /* FREECIV_DELTA_PROTOCOL */
70917#ifdef FREECIV_JSON_CONNECTION
70918 field_addr.name = "token";
70919#endif /* FREECIV_JSON_CONNECTION */
70920 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
70922 }
70923#endif
70924 log_packet_detailed("packet_single_want_hack_req_100: got info about ()");
70925
70926#ifdef FREECIV_DELTA_PROTOCOL
70927 if (NULL == *hash) {
70929 NULL, NULL, NULL, free);
70930 }
70931
70932 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
70933 *real_packet = *old;
70934 } else {
70935 log_packet_detailed(" no old info");
70936 memset(real_packet, 0, sizeof(*real_packet));
70937 }
70938
70939 if (BV_ISSET(fields, 0)) {
70940 log_packet_detailed(" got field 'token'");
70941#ifdef FREECIV_JSON_CONNECTION
70942 field_addr.name = "token";
70943#endif /* FREECIV_JSON_CONNECTION */
70944 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
70946 }
70947 }
70948
70949 if (NULL == old) {
70950 old = fc_malloc(sizeof(*old));
70951 *old = *real_packet;
70952 genhash_insert(*hash, old, old);
70953 } else {
70954 *old = *real_packet;
70955 }
70956
70957#endif /* FREECIV_DELTA_PROTOCOL */
70959}
70960
70962{
70963 const struct packet_single_want_hack_req *real_packet = packet;
70964 int e;
70965#ifdef FREECIV_DELTA_PROTOCOL
70967 struct packet_single_want_hack_req *old;
70968 bool differ;
70969 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REQ;
70970#endif /* FREECIV_DELTA_PROTOCOL */
70972#ifdef FREECIV_JSON_CONNECTION
70973 struct plocation field_addr;
70974 {
70978 }
70979#endif /* FREECIV_JSON_CONNECTION */
70980
70981 log_packet_detailed("packet_single_want_hack_req_100: sending info about ()");
70982
70983#ifdef FREECIV_DELTA_PROTOCOL
70984 if (NULL == *hash) {
70986 NULL, NULL, NULL, free);
70987 }
70988 BV_CLR_ALL(fields);
70989
70990 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
70991 old = fc_malloc(sizeof(*old));
70992 *old = *real_packet;
70993 genhash_insert(*hash, old, old);
70994 memset(old, 0, sizeof(*old));
70995 }
70996 differ = (strcmp(old->token, real_packet->token) != 0);
70997 if (differ) {
70998 BV_SET(fields, 0);
70999 }
71000
71001
71002#ifdef FREECIV_JSON_CONNECTION
71003 field_addr.name = "fields";
71004#endif /* FREECIV_JSON_CONNECTION */
71005 e = 0;
71006 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71007 if (e) {
71008 log_packet_detailed("fields bitvector error detected");
71009 }
71010
71011 if (BV_ISSET(fields, 0)) {
71012 log_packet_detailed(" field 'token' has changed");
71013#ifdef FREECIV_JSON_CONNECTION
71014 field_addr.name = "token";
71015#endif /* FREECIV_JSON_CONNECTION */
71016 e = 0;
71017 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
71018 if (e) {
71019 log_packet_detailed("'token' field error detected");
71020 }
71021 }
71022
71023 *old = *real_packet;
71024#endif /* FREECIV_DELTA_PROTOCOL */
71025#ifndef FREECIV_DELTA_PROTOCOL
71026#ifdef FREECIV_JSON_CONNECTION
71027 field_addr.name = "token";
71028#endif /* FREECIV_JSON_CONNECTION */
71029 e = 0;
71030 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
71031 if (e) {
71032 log_packet_detailed("'token' field error detected");
71033 }
71034
71035#endif
71037}
71038
71040{
71041 if (!pc->used) {
71042 log_error("WARNING: trying to send data to the closed connection %s",
71044 return -1;
71045 }
71046 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet != NULL, -1,
71047 "Handler for PACKET_SINGLE_WANT_HACK_REQ not installed");
71048 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet(pc, packet);
71049}
71050
71051#ifdef FREECIV_DELTA_PROTOCOL
71052#define hash_packet_single_want_hack_reply_100 hash_const
71053
71054#define cmp_packet_single_want_hack_reply_100 cmp_const
71055
71057#endif /* FREECIV_DELTA_PROTOCOL */
71058
71060{
71061#ifdef FREECIV_DELTA_PROTOCOL
71064 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REPLY;
71065#endif /* FREECIV_DELTA_PROTOCOL */
71067#ifdef FREECIV_JSON_CONNECTION
71068 struct plocation field_addr;
71069 {
71073 }
71074#endif /* FREECIV_JSON_CONNECTION */
71075
71076#ifdef FREECIV_DELTA_PROTOCOL
71077#ifdef FREECIV_JSON_CONNECTION
71078 field_addr.name = "fields";
71079#endif /* FREECIV_JSON_CONNECTION */
71080 DIO_BV_GET(&din, &field_addr, fields);
71081
71082#else /* FREECIV_DELTA_PROTOCOL */
71083#ifdef FREECIV_JSON_CONNECTION
71084 field_addr.name = "you_have_hack";
71085#endif /* FREECIV_JSON_CONNECTION */
71086 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->you_have_hack)) {
71087 RECEIVE_PACKET_FIELD_ERROR(you_have_hack);
71088 }
71089#endif
71090 log_packet_detailed("packet_single_want_hack_reply_100: got info about ()");
71091
71092#ifdef FREECIV_DELTA_PROTOCOL
71093 if (NULL == *hash) {
71095 NULL, NULL, NULL, free);
71096 }
71097
71098 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71099 *real_packet = *old;
71100 } else {
71101 log_packet_detailed(" no old info");
71102 memset(real_packet, 0, sizeof(*real_packet));
71103 }
71104
71105 real_packet->you_have_hack = BV_ISSET(fields, 0);
71106
71107 if (NULL == old) {
71108 old = fc_malloc(sizeof(*old));
71109 *old = *real_packet;
71110 genhash_insert(*hash, old, old);
71111 } else {
71112 *old = *real_packet;
71113 }
71114
71115#endif /* FREECIV_DELTA_PROTOCOL */
71117}
71118
71120{
71121 const struct packet_single_want_hack_reply *real_packet = packet;
71122 int e;
71123#ifdef FREECIV_DELTA_PROTOCOL
71126 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REPLY;
71127#endif /* FREECIV_DELTA_PROTOCOL */
71129#ifdef FREECIV_JSON_CONNECTION
71130 struct plocation field_addr;
71131 {
71135 }
71136#endif /* FREECIV_JSON_CONNECTION */
71137
71138 log_packet_detailed("packet_single_want_hack_reply_100: sending info about ()");
71139
71140#ifdef FREECIV_DELTA_PROTOCOL
71141 if (NULL == *hash) {
71143 NULL, NULL, NULL, free);
71144 }
71145 BV_CLR_ALL(fields);
71146
71147 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
71148 old = fc_malloc(sizeof(*old));
71149 *old = *real_packet;
71150 genhash_insert(*hash, old, old);
71151 memset(old, 0, sizeof(*old));
71152 }
71153 if (packet->you_have_hack) {
71154 BV_SET(fields, 0);
71155 }
71156
71157
71158#ifdef FREECIV_JSON_CONNECTION
71159 field_addr.name = "fields";
71160#endif /* FREECIV_JSON_CONNECTION */
71161 e = 0;
71162 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71163 if (e) {
71164 log_packet_detailed("fields bitvector error detected");
71165 }
71166
71167 /* field 0 is folded into the header */
71168
71169 *old = *real_packet;
71170#endif /* FREECIV_DELTA_PROTOCOL */
71171#ifndef FREECIV_DELTA_PROTOCOL
71172#ifdef FREECIV_JSON_CONNECTION
71173 field_addr.name = "you_have_hack";
71174#endif /* FREECIV_JSON_CONNECTION */
71175 e = 0;
71176 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->you_have_hack);
71177 if (e) {
71178 log_packet_detailed("'you_have_hack' field error detected");
71179 }
71180
71181#endif
71183}
71184
71186{
71187 if (!pc->used) {
71188 log_error("WARNING: trying to send data to the closed connection %s",
71190 return -1;
71191 }
71192 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet != NULL, -1,
71193 "Handler for PACKET_SINGLE_WANT_HACK_REPLY not installed");
71194 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet(pc, packet);
71195}
71196
71197int dsend_packet_single_want_hack_reply(struct connection *pc, bool you_have_hack)
71198{
71199 struct packet_single_want_hack_reply packet, *real_packet = &packet;
71200
71202
71204}
71205
71206#ifdef FREECIV_DELTA_PROTOCOL
71207#define hash_packet_ruleset_choices_100 hash_const
71208
71209#define cmp_packet_ruleset_choices_100 cmp_const
71210
71212#endif /* FREECIV_DELTA_PROTOCOL */
71213
71215{
71216#ifdef FREECIV_DELTA_PROTOCOL
71218 struct packet_ruleset_choices *old;
71219 struct genhash **hash = pc->phs.received + PACKET_RULESET_CHOICES;
71220#endif /* FREECIV_DELTA_PROTOCOL */
71222#ifdef FREECIV_JSON_CONNECTION
71223 struct plocation field_addr;
71224 {
71228 }
71229#endif /* FREECIV_JSON_CONNECTION */
71230
71231#ifdef FREECIV_DELTA_PROTOCOL
71232#ifdef FREECIV_JSON_CONNECTION
71233 field_addr.name = "fields";
71234#endif /* FREECIV_JSON_CONNECTION */
71235 DIO_BV_GET(&din, &field_addr, fields);
71236
71237#else /* FREECIV_DELTA_PROTOCOL */
71238#ifdef FREECIV_JSON_CONNECTION
71239 field_addr.name = "ruleset_count";
71240#endif /* FREECIV_JSON_CONNECTION */
71241 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
71242 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
71243 }
71244#ifdef FREECIV_JSON_CONNECTION
71245 field_addr.name = "rulesets";
71246#endif /* FREECIV_JSON_CONNECTION */
71247 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
71248 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": truncation array");
71249 }
71250 {
71251 int i;
71252
71253#ifdef FREECIV_JSON_CONNECTION
71254 /* Enter array. */
71255 field_addr.sub_location = plocation_elem_new(0);
71256#endif /* FREECIV_JSON_CONNECTION */
71257
71258 for (i = 0; i < real_packet->ruleset_count; i++) {
71259#ifdef FREECIV_JSON_CONNECTION
71260 field_addr.sub_location->number = i;
71261#endif /* FREECIV_JSON_CONNECTION */
71262
71263 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
71265 }
71266 }
71267
71268#ifdef FREECIV_JSON_CONNECTION
71269 /* Exit array. */
71270 FC_FREE(field_addr.sub_location);
71271#endif /* FREECIV_JSON_CONNECTION */
71272 }
71273#endif
71274 log_packet_detailed("packet_ruleset_choices_100: got info about ()");
71275
71276#ifdef FREECIV_DELTA_PROTOCOL
71277 if (NULL == *hash) {
71279 NULL, NULL, NULL, free);
71280 }
71281
71282 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71283 *real_packet = *old;
71284 } else {
71285 log_packet_detailed(" no old info");
71286 memset(real_packet, 0, sizeof(*real_packet));
71287 }
71288
71289 if (BV_ISSET(fields, 0)) {
71290 log_packet_detailed(" got field 'ruleset_count'");
71291#ifdef FREECIV_JSON_CONNECTION
71292 field_addr.name = "ruleset_count";
71293#endif /* FREECIV_JSON_CONNECTION */
71294 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
71295 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
71296 }
71297 }
71298 if (BV_ISSET(fields, 1)) {
71299 log_packet_detailed(" got field 'rulesets'");
71300#ifdef FREECIV_JSON_CONNECTION
71301 field_addr.name = "rulesets";
71302#endif /* FREECIV_JSON_CONNECTION */
71303 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
71304 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": truncation array");
71305 }
71306 {
71307 int i;
71308
71309#ifdef FREECIV_JSON_CONNECTION
71310 /* Enter array. */
71311 field_addr.sub_location = plocation_elem_new(0);
71312#endif /* FREECIV_JSON_CONNECTION */
71313
71314 for (i = 0; i < real_packet->ruleset_count; i++) {
71315#ifdef FREECIV_JSON_CONNECTION
71316 field_addr.sub_location->number = i;
71317#endif /* FREECIV_JSON_CONNECTION */
71318
71319 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
71321 }
71322 }
71323
71324#ifdef FREECIV_JSON_CONNECTION
71325 /* Exit array. */
71326 FC_FREE(field_addr.sub_location);
71327#endif /* FREECIV_JSON_CONNECTION */
71328 }
71329 }
71330
71331 if (NULL == old) {
71332 old = fc_malloc(sizeof(*old));
71333 *old = *real_packet;
71334 genhash_insert(*hash, old, old);
71335 } else {
71336 *old = *real_packet;
71337 }
71338
71339#endif /* FREECIV_DELTA_PROTOCOL */
71341}
71342
71344{
71345 const struct packet_ruleset_choices *real_packet = packet;
71346 int e;
71347#ifdef FREECIV_DELTA_PROTOCOL
71349 struct packet_ruleset_choices *old;
71350 bool differ;
71351 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CHOICES;
71352#endif /* FREECIV_DELTA_PROTOCOL */
71354#ifdef FREECIV_JSON_CONNECTION
71355 struct plocation field_addr;
71356 {
71360 }
71361#endif /* FREECIV_JSON_CONNECTION */
71362
71363 log_packet_detailed("packet_ruleset_choices_100: sending info about ()");
71364
71365#ifdef FREECIV_DELTA_PROTOCOL
71366 if (NULL == *hash) {
71368 NULL, NULL, NULL, free);
71369 }
71370 BV_CLR_ALL(fields);
71371
71372 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
71373 old = fc_malloc(sizeof(*old));
71374 *old = *real_packet;
71375 genhash_insert(*hash, old, old);
71376 memset(old, 0, sizeof(*old));
71377 }
71378 differ = (old->ruleset_count != real_packet->ruleset_count);
71379 if (differ) {
71380 BV_SET(fields, 0);
71381 }
71382
71383 differ = (old->ruleset_count != real_packet->ruleset_count);
71384 if (!differ) {
71385 int i;
71386
71387 for (i = 0; i < real_packet->ruleset_count; i++) {
71388 differ = (strcmp(old->rulesets[i], real_packet->rulesets[i]) != 0);
71389 if (differ) {
71390 break;
71391 }
71392 }
71393 }
71394 if (differ) {
71395 BV_SET(fields, 1);
71396 }
71397
71398
71399#ifdef FREECIV_JSON_CONNECTION
71400 field_addr.name = "fields";
71401#endif /* FREECIV_JSON_CONNECTION */
71402 e = 0;
71403 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71404 if (e) {
71405 log_packet_detailed("fields bitvector error detected");
71406 }
71407
71408 if (BV_ISSET(fields, 0)) {
71409 log_packet_detailed(" field 'ruleset_count' has changed");
71410#ifdef FREECIV_JSON_CONNECTION
71411 field_addr.name = "ruleset_count";
71412#endif /* FREECIV_JSON_CONNECTION */
71413 e = 0;
71414 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
71415 if (e) {
71416 log_packet_detailed("'ruleset_count' field error detected");
71417 }
71418 }
71419 if (BV_ISSET(fields, 1)) {
71420 log_packet_detailed(" field 'rulesets' has changed");
71421#ifdef FREECIV_JSON_CONNECTION
71422 field_addr.name = "rulesets";
71423#endif /* FREECIV_JSON_CONNECTION */
71424 e = 0;
71425 {
71426 int i;
71427
71428#ifdef FREECIV_JSON_CONNECTION
71429 /* Create the array. */
71430 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
71431
71432 /* Enter the array. */
71433 field_addr.sub_location = plocation_elem_new(0);
71434#endif /* FREECIV_JSON_CONNECTION */
71435
71436 for (i = 0; i < real_packet->ruleset_count; i++) {
71437#ifdef FREECIV_JSON_CONNECTION
71438 /* Next array element. */
71439 field_addr.sub_location->number = i;
71440#endif /* FREECIV_JSON_CONNECTION */
71441
71442 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
71443 }
71444
71445#ifdef FREECIV_JSON_CONNECTION
71446 /* Exit array. */
71447 FC_FREE(field_addr.sub_location);
71448#endif /* FREECIV_JSON_CONNECTION */
71449 }
71450 if (e) {
71451 log_packet_detailed("'rulesets' field error detected");
71452 }
71453 }
71454
71455 *old = *real_packet;
71456#endif /* FREECIV_DELTA_PROTOCOL */
71457#ifndef FREECIV_DELTA_PROTOCOL
71458#ifdef FREECIV_JSON_CONNECTION
71459 field_addr.name = "ruleset_count";
71460#endif /* FREECIV_JSON_CONNECTION */
71461 e = 0;
71462 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
71463 if (e) {
71464 log_packet_detailed("'ruleset_count' field error detected");
71465 }
71466#ifdef FREECIV_JSON_CONNECTION
71467 field_addr.name = "rulesets";
71468#endif /* FREECIV_JSON_CONNECTION */
71469 e = 0;
71470 {
71471 int i;
71472
71473#ifdef FREECIV_JSON_CONNECTION
71474 /* Create the array. */
71475 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
71476
71477 /* Enter the array. */
71478 field_addr.sub_location = plocation_elem_new(0);
71479#endif /* FREECIV_JSON_CONNECTION */
71480
71481 for (i = 0; i < real_packet->ruleset_count; i++) {
71482#ifdef FREECIV_JSON_CONNECTION
71483 /* Next array element. */
71484 field_addr.sub_location->number = i;
71485#endif /* FREECIV_JSON_CONNECTION */
71486
71487 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
71488 }
71489
71490#ifdef FREECIV_JSON_CONNECTION
71491 /* Exit array. */
71492 FC_FREE(field_addr.sub_location);
71493#endif /* FREECIV_JSON_CONNECTION */
71494 }
71495 if (e) {
71496 log_packet_detailed("'rulesets' field error detected");
71497 }
71498
71499#endif
71501}
71502
71504{
71505 if (!pc->used) {
71506 log_error("WARNING: trying to send data to the closed connection %s",
71508 return -1;
71509 }
71510 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet != NULL, -1,
71511 "Handler for PACKET_RULESET_CHOICES not installed");
71512 return pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet(pc, packet);
71513}
71514
71515#ifdef FREECIV_DELTA_PROTOCOL
71516#define hash_packet_ruleset_select_100 hash_const
71517
71518#define cmp_packet_ruleset_select_100 cmp_const
71519
71521#endif /* FREECIV_DELTA_PROTOCOL */
71522
71524{
71525#ifdef FREECIV_DELTA_PROTOCOL
71527 struct packet_ruleset_select *old;
71528 struct genhash **hash = pc->phs.received + PACKET_RULESET_SELECT;
71529#endif /* FREECIV_DELTA_PROTOCOL */
71531#ifdef FREECIV_JSON_CONNECTION
71532 struct plocation field_addr;
71533 {
71537 }
71538#endif /* FREECIV_JSON_CONNECTION */
71539
71540#ifdef FREECIV_DELTA_PROTOCOL
71541#ifdef FREECIV_JSON_CONNECTION
71542 field_addr.name = "fields";
71543#endif /* FREECIV_JSON_CONNECTION */
71544 DIO_BV_GET(&din, &field_addr, fields);
71545
71546#else /* FREECIV_DELTA_PROTOCOL */
71547#ifdef FREECIV_JSON_CONNECTION
71548 field_addr.name = "modpack";
71549#endif /* FREECIV_JSON_CONNECTION */
71550 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
71552 }
71553#endif
71554 log_packet_detailed("packet_ruleset_select_100: got info about ()");
71555
71556#ifdef FREECIV_DELTA_PROTOCOL
71557 if (NULL == *hash) {
71559 NULL, NULL, NULL, free);
71560 }
71561
71562 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71563 *real_packet = *old;
71564 } else {
71565 log_packet_detailed(" no old info");
71566 memset(real_packet, 0, sizeof(*real_packet));
71567 }
71568
71569 if (BV_ISSET(fields, 0)) {
71570 log_packet_detailed(" got field 'modpack'");
71571#ifdef FREECIV_JSON_CONNECTION
71572 field_addr.name = "modpack";
71573#endif /* FREECIV_JSON_CONNECTION */
71574 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
71576 }
71577 }
71578
71579 if (NULL == old) {
71580 old = fc_malloc(sizeof(*old));
71581 *old = *real_packet;
71582 genhash_insert(*hash, old, old);
71583 } else {
71584 *old = *real_packet;
71585 }
71586
71587#endif /* FREECIV_DELTA_PROTOCOL */
71589}
71590
71592{
71593 const struct packet_ruleset_select *real_packet = packet;
71594 int e;
71595#ifdef FREECIV_DELTA_PROTOCOL
71597 struct packet_ruleset_select *old;
71598 bool differ;
71599 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SELECT;
71600#endif /* FREECIV_DELTA_PROTOCOL */
71602#ifdef FREECIV_JSON_CONNECTION
71603 struct plocation field_addr;
71604 {
71608 }
71609#endif /* FREECIV_JSON_CONNECTION */
71610
71611 log_packet_detailed("packet_ruleset_select_100: sending info about ()");
71612
71613#ifdef FREECIV_DELTA_PROTOCOL
71614 if (NULL == *hash) {
71616 NULL, NULL, NULL, free);
71617 }
71618 BV_CLR_ALL(fields);
71619
71620 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
71621 old = fc_malloc(sizeof(*old));
71622 *old = *real_packet;
71623 genhash_insert(*hash, old, old);
71624 memset(old, 0, sizeof(*old));
71625 }
71626 differ = (strcmp(old->modpack, real_packet->modpack) != 0);
71627 if (differ) {
71628 BV_SET(fields, 0);
71629 }
71630
71631
71632#ifdef FREECIV_JSON_CONNECTION
71633 field_addr.name = "fields";
71634#endif /* FREECIV_JSON_CONNECTION */
71635 e = 0;
71636 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71637 if (e) {
71638 log_packet_detailed("fields bitvector error detected");
71639 }
71640
71641 if (BV_ISSET(fields, 0)) {
71642 log_packet_detailed(" field 'modpack' has changed");
71643#ifdef FREECIV_JSON_CONNECTION
71644 field_addr.name = "modpack";
71645#endif /* FREECIV_JSON_CONNECTION */
71646 e = 0;
71647 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
71648 if (e) {
71649 log_packet_detailed("'modpack' field error detected");
71650 }
71651 }
71652
71653 *old = *real_packet;
71654#endif /* FREECIV_DELTA_PROTOCOL */
71655#ifndef FREECIV_DELTA_PROTOCOL
71656#ifdef FREECIV_JSON_CONNECTION
71657 field_addr.name = "modpack";
71658#endif /* FREECIV_JSON_CONNECTION */
71659 e = 0;
71660 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
71661 if (e) {
71662 log_packet_detailed("'modpack' field error detected");
71663 }
71664
71665#endif
71667}
71668
71670{
71671 if (!pc->used) {
71672 log_error("WARNING: trying to send data to the closed connection %s",
71674 return -1;
71675 }
71676 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SELECT].packet != NULL, -1,
71677 "Handler for PACKET_RULESET_SELECT not installed");
71678 return pc->phs.handlers->send[PACKET_RULESET_SELECT].packet(pc, packet);
71679}
71680
71681#ifdef FREECIV_DELTA_PROTOCOL
71682#define hash_packet_game_load_100 hash_const
71683
71684#define cmp_packet_game_load_100 cmp_const
71685
71687#endif /* FREECIV_DELTA_PROTOCOL */
71688
71690{
71691#ifdef FREECIV_DELTA_PROTOCOL
71693 struct packet_game_load *old;
71694 struct genhash **hash = pc->phs.received + PACKET_GAME_LOAD;
71695#endif /* FREECIV_DELTA_PROTOCOL */
71697#ifdef FREECIV_JSON_CONNECTION
71698 struct plocation field_addr;
71699 {
71703 }
71704#endif /* FREECIV_JSON_CONNECTION */
71705
71706#ifdef FREECIV_DELTA_PROTOCOL
71707#ifdef FREECIV_JSON_CONNECTION
71708 field_addr.name = "fields";
71709#endif /* FREECIV_JSON_CONNECTION */
71710 DIO_BV_GET(&din, &field_addr, fields);
71711
71712#else /* FREECIV_DELTA_PROTOCOL */
71713#ifdef FREECIV_JSON_CONNECTION
71714 field_addr.name = "load_successful";
71715#endif /* FREECIV_JSON_CONNECTION */
71716 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->load_successful)) {
71717 RECEIVE_PACKET_FIELD_ERROR(load_successful);
71718 }
71719#ifdef FREECIV_JSON_CONNECTION
71720 field_addr.name = "load_filename";
71721#endif /* FREECIV_JSON_CONNECTION */
71722 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
71724 }
71725#endif
71726 log_packet_detailed("packet_game_load_100: got info about ()");
71727
71728#ifdef FREECIV_DELTA_PROTOCOL
71729 if (NULL == *hash) {
71731 NULL, NULL, NULL, free);
71732 }
71733
71734 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71735 *real_packet = *old;
71736 } else {
71737 log_packet_detailed(" no old info");
71738 memset(real_packet, 0, sizeof(*real_packet));
71739 }
71740
71741 real_packet->load_successful = BV_ISSET(fields, 0);
71742 if (BV_ISSET(fields, 1)) {
71743 log_packet_detailed(" got field 'load_filename'");
71744#ifdef FREECIV_JSON_CONNECTION
71745 field_addr.name = "load_filename";
71746#endif /* FREECIV_JSON_CONNECTION */
71747 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
71749 }
71750 }
71751
71752 if (NULL == old) {
71753 old = fc_malloc(sizeof(*old));
71754 *old = *real_packet;
71755 genhash_insert(*hash, old, old);
71756 } else {
71757 *old = *real_packet;
71758 }
71759
71760#endif /* FREECIV_DELTA_PROTOCOL */
71762}
71763
71764static int send_packet_game_load_100(struct connection *pc, const struct packet_game_load *packet)
71765{
71766 const struct packet_game_load *real_packet = packet;
71767 int e;
71768#ifdef FREECIV_DELTA_PROTOCOL
71770 struct packet_game_load *old;
71771 bool differ;
71772 struct genhash **hash = pc->phs.sent + PACKET_GAME_LOAD;
71773#endif /* FREECIV_DELTA_PROTOCOL */
71775#ifdef FREECIV_JSON_CONNECTION
71776 struct plocation field_addr;
71777 {
71781 }
71782#endif /* FREECIV_JSON_CONNECTION */
71783
71784 log_packet_detailed("packet_game_load_100: sending info about ()");
71785
71786#ifdef FREECIV_DELTA_PROTOCOL
71787 if (NULL == *hash) {
71789 NULL, NULL, NULL, free);
71790 }
71791 BV_CLR_ALL(fields);
71792
71793 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
71794 old = fc_malloc(sizeof(*old));
71795 *old = *real_packet;
71796 genhash_insert(*hash, old, old);
71797 memset(old, 0, sizeof(*old));
71798 }
71799 if (packet->load_successful) {
71800 BV_SET(fields, 0);
71801 }
71802
71803 differ = (strcmp(old->load_filename, real_packet->load_filename) != 0);
71804 if (differ) {
71805 BV_SET(fields, 1);
71806 }
71807
71808
71809#ifdef FREECIV_JSON_CONNECTION
71810 field_addr.name = "fields";
71811#endif /* FREECIV_JSON_CONNECTION */
71812 e = 0;
71813 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71814 if (e) {
71815 log_packet_detailed("fields bitvector error detected");
71816 }
71817
71818 /* field 0 is folded into the header */
71819 if (BV_ISSET(fields, 1)) {
71820 log_packet_detailed(" field 'load_filename' has changed");
71821#ifdef FREECIV_JSON_CONNECTION
71822 field_addr.name = "load_filename";
71823#endif /* FREECIV_JSON_CONNECTION */
71824 e = 0;
71825 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
71826 if (e) {
71827 log_packet_detailed("'load_filename' field error detected");
71828 }
71829 }
71830
71831 *old = *real_packet;
71832#endif /* FREECIV_DELTA_PROTOCOL */
71833#ifndef FREECIV_DELTA_PROTOCOL
71834#ifdef FREECIV_JSON_CONNECTION
71835 field_addr.name = "load_successful";
71836#endif /* FREECIV_JSON_CONNECTION */
71837 e = 0;
71838 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->load_successful);
71839 if (e) {
71840 log_packet_detailed("'load_successful' field error detected");
71841 }
71842#ifdef FREECIV_JSON_CONNECTION
71843 field_addr.name = "load_filename";
71844#endif /* FREECIV_JSON_CONNECTION */
71845 e = 0;
71846 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
71847 if (e) {
71848 log_packet_detailed("'load_filename' field error detected");
71849 }
71850
71851#endif
71853}
71854
71855int send_packet_game_load(struct connection *pc, const struct packet_game_load *packet)
71856{
71857 if (!pc->used) {
71858 log_error("WARNING: trying to send data to the closed connection %s",
71860 return -1;
71861 }
71862 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_GAME_LOAD].packet != NULL, -1,
71863 "Handler for PACKET_GAME_LOAD not installed");
71864 return pc->phs.handlers->send[PACKET_GAME_LOAD].packet(pc, packet);
71865}
71866
71867void lsend_packet_game_load(struct conn_list *dest, const struct packet_game_load *packet)
71868{
71869 conn_list_iterate(dest, pconn) {
71872}
71873
71874int dsend_packet_game_load(struct connection *pc, bool load_successful, const char *load_filename)
71875{
71876 struct packet_game_load packet, *real_packet = &packet;
71877
71879 sz_strlcpy(real_packet->load_filename, load_filename);
71880
71882}
71883
71885{
71886 struct packet_game_load packet, *real_packet = &packet;
71887
71889 sz_strlcpy(real_packet->load_filename, load_filename);
71890
71892}
71893
71894#ifdef FREECIV_DELTA_PROTOCOL
71895#define hash_packet_server_setting_control_100 hash_const
71896
71897#define cmp_packet_server_setting_control_100 cmp_const
71898
71900#endif /* FREECIV_DELTA_PROTOCOL */
71901
71903{
71904#ifdef FREECIV_DELTA_PROTOCOL
71907 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONTROL;
71908#endif /* FREECIV_DELTA_PROTOCOL */
71910#ifdef FREECIV_JSON_CONNECTION
71911 struct plocation field_addr;
71912 {
71916 }
71917#endif /* FREECIV_JSON_CONNECTION */
71918
71919#ifdef FREECIV_DELTA_PROTOCOL
71920#ifdef FREECIV_JSON_CONNECTION
71921 field_addr.name = "fields";
71922#endif /* FREECIV_JSON_CONNECTION */
71923 DIO_BV_GET(&din, &field_addr, fields);
71924
71925#else /* FREECIV_DELTA_PROTOCOL */
71926#ifdef FREECIV_JSON_CONNECTION
71927 field_addr.name = "settings_num";
71928#endif /* FREECIV_JSON_CONNECTION */
71929 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
71930 RECEIVE_PACKET_FIELD_ERROR(settings_num);
71931 }
71932#ifdef FREECIV_JSON_CONNECTION
71933 field_addr.name = "categories_num";
71934#endif /* FREECIV_JSON_CONNECTION */
71935 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
71936 RECEIVE_PACKET_FIELD_ERROR(categories_num);
71937 }
71938#ifdef FREECIV_JSON_CONNECTION
71939 field_addr.name = "category_names";
71940#endif /* FREECIV_JSON_CONNECTION */
71941 if (real_packet->categories_num > 256) {
71942 RECEIVE_PACKET_FIELD_ERROR(category_names, ": truncation array");
71943 }
71944 {
71945 int i;
71946
71947#ifdef FREECIV_JSON_CONNECTION
71948 /* Enter array. */
71949 field_addr.sub_location = plocation_elem_new(0);
71950#endif /* FREECIV_JSON_CONNECTION */
71951
71952 for (i = 0; i < real_packet->categories_num; i++) {
71953#ifdef FREECIV_JSON_CONNECTION
71954 field_addr.sub_location->number = i;
71955#endif /* FREECIV_JSON_CONNECTION */
71956
71957 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
71958 RECEIVE_PACKET_FIELD_ERROR(category_names);
71959 }
71960 }
71961
71962#ifdef FREECIV_JSON_CONNECTION
71963 /* Exit array. */
71964 FC_FREE(field_addr.sub_location);
71965#endif /* FREECIV_JSON_CONNECTION */
71966 }
71967#endif
71968 log_packet_detailed("packet_server_setting_control_100: got info about ()");
71969
71970#ifdef FREECIV_DELTA_PROTOCOL
71971 if (NULL == *hash) {
71973 NULL, NULL, NULL, free);
71974 }
71975
71976 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71977 *real_packet = *old;
71978 } else {
71979 log_packet_detailed(" no old info");
71980 memset(real_packet, 0, sizeof(*real_packet));
71981 }
71982
71983 if (BV_ISSET(fields, 0)) {
71984 log_packet_detailed(" got field 'settings_num'");
71985#ifdef FREECIV_JSON_CONNECTION
71986 field_addr.name = "settings_num";
71987#endif /* FREECIV_JSON_CONNECTION */
71988 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
71989 RECEIVE_PACKET_FIELD_ERROR(settings_num);
71990 }
71991 }
71992 if (BV_ISSET(fields, 1)) {
71993 log_packet_detailed(" got field 'categories_num'");
71994#ifdef FREECIV_JSON_CONNECTION
71995 field_addr.name = "categories_num";
71996#endif /* FREECIV_JSON_CONNECTION */
71997 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
71998 RECEIVE_PACKET_FIELD_ERROR(categories_num);
71999 }
72000 }
72001 if (BV_ISSET(fields, 2)) {
72002 log_packet_detailed(" got field 'category_names'");
72003#ifdef FREECIV_JSON_CONNECTION
72004 field_addr.name = "category_names";
72005#endif /* FREECIV_JSON_CONNECTION */
72006 if (real_packet->categories_num > 256) {
72007 RECEIVE_PACKET_FIELD_ERROR(category_names, ": truncation array");
72008 }
72009 {
72010 int i;
72011
72012#ifdef FREECIV_JSON_CONNECTION
72013 /* Enter array. */
72014 field_addr.sub_location = plocation_elem_new(0);
72015#endif /* FREECIV_JSON_CONNECTION */
72016
72017 for (i = 0; i < real_packet->categories_num; i++) {
72018#ifdef FREECIV_JSON_CONNECTION
72019 field_addr.sub_location->number = i;
72020#endif /* FREECIV_JSON_CONNECTION */
72021
72022 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
72023 RECEIVE_PACKET_FIELD_ERROR(category_names);
72024 }
72025 }
72026
72027#ifdef FREECIV_JSON_CONNECTION
72028 /* Exit array. */
72029 FC_FREE(field_addr.sub_location);
72030#endif /* FREECIV_JSON_CONNECTION */
72031 }
72032 }
72033
72034 if (NULL == old) {
72035 old = fc_malloc(sizeof(*old));
72036 *old = *real_packet;
72037 genhash_insert(*hash, old, old);
72038 } else {
72039 *old = *real_packet;
72040 }
72041
72042#endif /* FREECIV_DELTA_PROTOCOL */
72044}
72045
72047{
72048 const struct packet_server_setting_control *real_packet = packet;
72049 int e;
72050#ifdef FREECIV_DELTA_PROTOCOL
72053 bool differ;
72054 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONTROL;
72055 int different = 0;
72056#endif /* FREECIV_DELTA_PROTOCOL */
72058#ifdef FREECIV_JSON_CONNECTION
72059 struct plocation field_addr;
72060 {
72064 }
72065#endif /* FREECIV_JSON_CONNECTION */
72066
72067 log_packet_detailed("packet_server_setting_control_100: sending info about ()");
72068
72069#ifdef FREECIV_DELTA_PROTOCOL
72070 if (NULL == *hash) {
72072 NULL, NULL, NULL, free);
72073 }
72074 BV_CLR_ALL(fields);
72075
72076 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72077 old = fc_malloc(sizeof(*old));
72078 *old = *real_packet;
72079 genhash_insert(*hash, old, old);
72080 memset(old, 0, sizeof(*old));
72081 different = 1; /* Force to send. */
72082 }
72083 differ = (old->settings_num != real_packet->settings_num);
72084 if (differ) {
72085 different++;
72086 BV_SET(fields, 0);
72087 }
72088
72089 differ = (old->categories_num != real_packet->categories_num);
72090 if (differ) {
72091 different++;
72092 BV_SET(fields, 1);
72093 }
72094
72095 differ = (old->categories_num != real_packet->categories_num);
72096 if (!differ) {
72097 int i;
72098
72099 for (i = 0; i < real_packet->categories_num; i++) {
72100 differ = (strcmp(old->category_names[i], real_packet->category_names[i]) != 0);
72101 if (differ) {
72102 break;
72103 }
72104 }
72105 }
72106 if (differ) {
72107 different++;
72108 BV_SET(fields, 2);
72109 }
72110
72111 if (different == 0) {
72112 log_packet_detailed(" no change -> discard");
72114 }
72115
72116#ifdef FREECIV_JSON_CONNECTION
72117 field_addr.name = "fields";
72118#endif /* FREECIV_JSON_CONNECTION */
72119 e = 0;
72120 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72121 if (e) {
72122 log_packet_detailed("fields bitvector error detected");
72123 }
72124
72125 if (BV_ISSET(fields, 0)) {
72126 log_packet_detailed(" field 'settings_num' has changed");
72127#ifdef FREECIV_JSON_CONNECTION
72128 field_addr.name = "settings_num";
72129#endif /* FREECIV_JSON_CONNECTION */
72130 e = 0;
72131 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
72132 if (e) {
72133 log_packet_detailed("'settings_num' field error detected");
72134 }
72135 }
72136 if (BV_ISSET(fields, 1)) {
72137 log_packet_detailed(" field 'categories_num' has changed");
72138#ifdef FREECIV_JSON_CONNECTION
72139 field_addr.name = "categories_num";
72140#endif /* FREECIV_JSON_CONNECTION */
72141 e = 0;
72142 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
72143 if (e) {
72144 log_packet_detailed("'categories_num' field error detected");
72145 }
72146 }
72147 if (BV_ISSET(fields, 2)) {
72148 log_packet_detailed(" field 'category_names' has changed");
72149#ifdef FREECIV_JSON_CONNECTION
72150 field_addr.name = "category_names";
72151#endif /* FREECIV_JSON_CONNECTION */
72152 e = 0;
72153 {
72154 int i;
72155
72156#ifdef FREECIV_JSON_CONNECTION
72157 /* Create the array. */
72158 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
72159
72160 /* Enter the array. */
72161 field_addr.sub_location = plocation_elem_new(0);
72162#endif /* FREECIV_JSON_CONNECTION */
72163
72164 for (i = 0; i < real_packet->categories_num; i++) {
72165#ifdef FREECIV_JSON_CONNECTION
72166 /* Next array element. */
72167 field_addr.sub_location->number = i;
72168#endif /* FREECIV_JSON_CONNECTION */
72169
72170 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
72171 }
72172
72173#ifdef FREECIV_JSON_CONNECTION
72174 /* Exit array. */
72175 FC_FREE(field_addr.sub_location);
72176#endif /* FREECIV_JSON_CONNECTION */
72177 }
72178 if (e) {
72179 log_packet_detailed("'category_names' field error detected");
72180 }
72181 }
72182
72183 *old = *real_packet;
72184#endif /* FREECIV_DELTA_PROTOCOL */
72185#ifndef FREECIV_DELTA_PROTOCOL
72186#ifdef FREECIV_JSON_CONNECTION
72187 field_addr.name = "settings_num";
72188#endif /* FREECIV_JSON_CONNECTION */
72189 e = 0;
72190 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
72191 if (e) {
72192 log_packet_detailed("'settings_num' field error detected");
72193 }
72194#ifdef FREECIV_JSON_CONNECTION
72195 field_addr.name = "categories_num";
72196#endif /* FREECIV_JSON_CONNECTION */
72197 e = 0;
72198 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
72199 if (e) {
72200 log_packet_detailed("'categories_num' field error detected");
72201 }
72202#ifdef FREECIV_JSON_CONNECTION
72203 field_addr.name = "category_names";
72204#endif /* FREECIV_JSON_CONNECTION */
72205 e = 0;
72206 {
72207 int i;
72208
72209#ifdef FREECIV_JSON_CONNECTION
72210 /* Create the array. */
72211 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
72212
72213 /* Enter the array. */
72214 field_addr.sub_location = plocation_elem_new(0);
72215#endif /* FREECIV_JSON_CONNECTION */
72216
72217 for (i = 0; i < real_packet->categories_num; i++) {
72218#ifdef FREECIV_JSON_CONNECTION
72219 /* Next array element. */
72220 field_addr.sub_location->number = i;
72221#endif /* FREECIV_JSON_CONNECTION */
72222
72223 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
72224 }
72225
72226#ifdef FREECIV_JSON_CONNECTION
72227 /* Exit array. */
72228 FC_FREE(field_addr.sub_location);
72229#endif /* FREECIV_JSON_CONNECTION */
72230 }
72231 if (e) {
72232 log_packet_detailed("'category_names' field error detected");
72233 }
72234
72235#endif
72237}
72238
72240{
72241 if (!pc->used) {
72242 log_error("WARNING: trying to send data to the closed connection %s",
72244 return -1;
72245 }
72246 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet != NULL, -1,
72247 "Handler for PACKET_SERVER_SETTING_CONTROL not installed");
72248 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet(pc, packet);
72249}
72250
72251#ifdef FREECIV_DELTA_PROTOCOL
72253{
72254 const struct packet_server_setting_const *key = (const struct packet_server_setting_const *) vkey;
72255 genhash_val_t result = 0;
72256
72257 result += key->id;
72258
72259 result &= 0xFFFFFFFF;
72260 return result;
72261}
72262
72263static bool cmp_packet_server_setting_const_100(const void *vkey1, const void *vkey2)
72264{
72265 const struct packet_server_setting_const *old = (const struct packet_server_setting_const *) vkey1;
72267 bool differ;
72268
72269 differ = (old->id != real_packet->id);
72270
72271 return !differ;
72272}
72274#endif /* FREECIV_DELTA_PROTOCOL */
72275
72277{
72278#ifdef FREECIV_DELTA_PROTOCOL
72280 struct packet_server_setting_const *old;
72281 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONST;
72282#endif /* FREECIV_DELTA_PROTOCOL */
72284#ifdef FREECIV_JSON_CONNECTION
72285 struct plocation field_addr;
72286 {
72290 }
72291#endif /* FREECIV_JSON_CONNECTION */
72292
72293#ifdef FREECIV_DELTA_PROTOCOL
72294#ifdef FREECIV_JSON_CONNECTION
72295 field_addr.name = "fields";
72296#endif /* FREECIV_JSON_CONNECTION */
72297 DIO_BV_GET(&din, &field_addr, fields);
72298#ifdef FREECIV_JSON_CONNECTION
72299 field_addr.name = "id";
72300#endif /* FREECIV_JSON_CONNECTION */
72301 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
72303 }
72304
72305#else /* FREECIV_DELTA_PROTOCOL */
72306#ifdef FREECIV_JSON_CONNECTION
72307 field_addr.name = "id";
72308#endif /* FREECIV_JSON_CONNECTION */
72309 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
72311 }
72312#ifdef FREECIV_JSON_CONNECTION
72313 field_addr.name = "name";
72314#endif /* FREECIV_JSON_CONNECTION */
72315 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
72317 }
72318#ifdef FREECIV_JSON_CONNECTION
72319 field_addr.name = "short_help";
72320#endif /* FREECIV_JSON_CONNECTION */
72321 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
72322 RECEIVE_PACKET_FIELD_ERROR(short_help);
72323 }
72324#ifdef FREECIV_JSON_CONNECTION
72325 field_addr.name = "extra_help";
72326#endif /* FREECIV_JSON_CONNECTION */
72327 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
72328 RECEIVE_PACKET_FIELD_ERROR(extra_help);
72329 }
72330#ifdef FREECIV_JSON_CONNECTION
72331 field_addr.name = "category";
72332#endif /* FREECIV_JSON_CONNECTION */
72333 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
72335 }
72336#endif
72337 log_packet_detailed("packet_server_setting_const_100: got info about (%d)",
72338 real_packet->id);
72339
72340#ifdef FREECIV_DELTA_PROTOCOL
72341 if (NULL == *hash) {
72343 NULL, NULL, NULL, free);
72344 }
72345
72346 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
72347 *real_packet = *old;
72348 } else {
72349 int id;
72350
72351 id = real_packet->id;
72352
72353 log_packet_detailed(" no old info");
72354 memset(real_packet, 0, sizeof(*real_packet));
72355
72356 real_packet->id = id;
72357 }
72358
72359 if (BV_ISSET(fields, 0)) {
72360 log_packet_detailed(" got field 'name'");
72361#ifdef FREECIV_JSON_CONNECTION
72362 field_addr.name = "name";
72363#endif /* FREECIV_JSON_CONNECTION */
72364 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
72366 }
72367 }
72368 if (BV_ISSET(fields, 1)) {
72369 log_packet_detailed(" got field 'short_help'");
72370#ifdef FREECIV_JSON_CONNECTION
72371 field_addr.name = "short_help";
72372#endif /* FREECIV_JSON_CONNECTION */
72373 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
72374 RECEIVE_PACKET_FIELD_ERROR(short_help);
72375 }
72376 }
72377 if (BV_ISSET(fields, 2)) {
72378 log_packet_detailed(" got field 'extra_help'");
72379#ifdef FREECIV_JSON_CONNECTION
72380 field_addr.name = "extra_help";
72381#endif /* FREECIV_JSON_CONNECTION */
72382 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
72383 RECEIVE_PACKET_FIELD_ERROR(extra_help);
72384 }
72385 }
72386 if (BV_ISSET(fields, 3)) {
72387 log_packet_detailed(" got field 'category'");
72388#ifdef FREECIV_JSON_CONNECTION
72389 field_addr.name = "category";
72390#endif /* FREECIV_JSON_CONNECTION */
72391 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
72393 }
72394 }
72395
72396 if (NULL == old) {
72397 old = fc_malloc(sizeof(*old));
72398 *old = *real_packet;
72399 genhash_insert(*hash, old, old);
72400 } else {
72401 *old = *real_packet;
72402 }
72403
72404#endif /* FREECIV_DELTA_PROTOCOL */
72406}
72407
72409{
72410 const struct packet_server_setting_const *real_packet = packet;
72411 int e;
72412#ifdef FREECIV_DELTA_PROTOCOL
72414 struct packet_server_setting_const *old;
72415 bool differ;
72416 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONST;
72417 int different = 0;
72418#endif /* FREECIV_DELTA_PROTOCOL */
72420#ifdef FREECIV_JSON_CONNECTION
72421 struct plocation field_addr;
72422 {
72426 }
72427#endif /* FREECIV_JSON_CONNECTION */
72428
72429 log_packet_detailed("packet_server_setting_const_100: sending info about (%d)",
72430 real_packet->id);
72431
72432#ifdef FREECIV_DELTA_PROTOCOL
72433 if (NULL == *hash) {
72435 NULL, NULL, NULL, free);
72436 }
72437 BV_CLR_ALL(fields);
72438
72439 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72440 old = fc_malloc(sizeof(*old));
72441 *old = *real_packet;
72442 genhash_insert(*hash, old, old);
72443 memset(old, 0, sizeof(*old));
72444 different = 1; /* Force to send. */
72445 }
72446 differ = (strcmp(old->name, real_packet->name) != 0);
72447 if (differ) {
72448 different++;
72449 BV_SET(fields, 0);
72450 }
72451
72452 differ = (strcmp(old->short_help, real_packet->short_help) != 0);
72453 if (differ) {
72454 different++;
72455 BV_SET(fields, 1);
72456 }
72457
72458 differ = (strcmp(old->extra_help, real_packet->extra_help) != 0);
72459 if (differ) {
72460 different++;
72461 BV_SET(fields, 2);
72462 }
72463
72464 differ = (old->category != real_packet->category);
72465 if (differ) {
72466 different++;
72467 BV_SET(fields, 3);
72468 }
72469
72470 if (different == 0) {
72471 log_packet_detailed(" no change -> discard");
72473 }
72474
72475#ifdef FREECIV_JSON_CONNECTION
72476 field_addr.name = "fields";
72477#endif /* FREECIV_JSON_CONNECTION */
72478 e = 0;
72479 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72480 if (e) {
72481 log_packet_detailed("fields bitvector error detected");
72482 }
72483#ifdef FREECIV_JSON_CONNECTION
72484 field_addr.name = "id";
72485#endif /* FREECIV_JSON_CONNECTION */
72486 e = 0;
72487 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
72488 if (e) {
72489 log_packet_detailed("'id' field error detected");
72490 }
72491
72492 if (BV_ISSET(fields, 0)) {
72493 log_packet_detailed(" field 'name' has changed");
72494#ifdef FREECIV_JSON_CONNECTION
72495 field_addr.name = "name";
72496#endif /* FREECIV_JSON_CONNECTION */
72497 e = 0;
72498 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
72499 if (e) {
72500 log_packet_detailed("'name' field error detected");
72501 }
72502 }
72503 if (BV_ISSET(fields, 1)) {
72504 log_packet_detailed(" field 'short_help' has changed");
72505#ifdef FREECIV_JSON_CONNECTION
72506 field_addr.name = "short_help";
72507#endif /* FREECIV_JSON_CONNECTION */
72508 e = 0;
72509 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
72510 if (e) {
72511 log_packet_detailed("'short_help' field error detected");
72512 }
72513 }
72514 if (BV_ISSET(fields, 2)) {
72515 log_packet_detailed(" field 'extra_help' has changed");
72516#ifdef FREECIV_JSON_CONNECTION
72517 field_addr.name = "extra_help";
72518#endif /* FREECIV_JSON_CONNECTION */
72519 e = 0;
72520 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
72521 if (e) {
72522 log_packet_detailed("'extra_help' field error detected");
72523 }
72524 }
72525 if (BV_ISSET(fields, 3)) {
72526 log_packet_detailed(" field 'category' has changed");
72527#ifdef FREECIV_JSON_CONNECTION
72528 field_addr.name = "category";
72529#endif /* FREECIV_JSON_CONNECTION */
72530 e = 0;
72531 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
72532 if (e) {
72533 log_packet_detailed("'category' field error detected");
72534 }
72535 }
72536
72537 *old = *real_packet;
72538#endif /* FREECIV_DELTA_PROTOCOL */
72539#ifndef FREECIV_DELTA_PROTOCOL
72540#ifdef FREECIV_JSON_CONNECTION
72541 field_addr.name = "id";
72542#endif /* FREECIV_JSON_CONNECTION */
72543 e = 0;
72544 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
72545 if (e) {
72546 log_packet_detailed("'id' field error detected");
72547 }
72548#ifdef FREECIV_JSON_CONNECTION
72549 field_addr.name = "name";
72550#endif /* FREECIV_JSON_CONNECTION */
72551 e = 0;
72552 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
72553 if (e) {
72554 log_packet_detailed("'name' field error detected");
72555 }
72556#ifdef FREECIV_JSON_CONNECTION
72557 field_addr.name = "short_help";
72558#endif /* FREECIV_JSON_CONNECTION */
72559 e = 0;
72560 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
72561 if (e) {
72562 log_packet_detailed("'short_help' field error detected");
72563 }
72564#ifdef FREECIV_JSON_CONNECTION
72565 field_addr.name = "extra_help";
72566#endif /* FREECIV_JSON_CONNECTION */
72567 e = 0;
72568 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
72569 if (e) {
72570 log_packet_detailed("'extra_help' field error detected");
72571 }
72572#ifdef FREECIV_JSON_CONNECTION
72573 field_addr.name = "category";
72574#endif /* FREECIV_JSON_CONNECTION */
72575 e = 0;
72576 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
72577 if (e) {
72578 log_packet_detailed("'category' field error detected");
72579 }
72580
72581#endif
72583}
72584
72586{
72587 if (!pc->used) {
72588 log_error("WARNING: trying to send data to the closed connection %s",
72590 return -1;
72591 }
72592 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet != NULL, -1,
72593 "Handler for PACKET_SERVER_SETTING_CONST not installed");
72594 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet(pc, packet);
72595}
72596
72597#ifdef FREECIV_DELTA_PROTOCOL
72599{
72600 const struct packet_server_setting_bool *key = (const struct packet_server_setting_bool *) vkey;
72601 genhash_val_t result = 0;
72602
72603 result += key->id;
72604
72605 result &= 0xFFFFFFFF;
72606 return result;
72607}
72608
72609static bool cmp_packet_server_setting_bool_100(const void *vkey1, const void *vkey2)
72610{
72611 const struct packet_server_setting_bool *old = (const struct packet_server_setting_bool *) vkey1;
72613 bool differ;
72614
72615 differ = (old->id != real_packet->id);
72616
72617 return !differ;
72618}
72620#endif /* FREECIV_DELTA_PROTOCOL */
72621
72623{
72624#ifdef FREECIV_DELTA_PROTOCOL
72626 struct packet_server_setting_bool *old;
72627 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BOOL;
72628#endif /* FREECIV_DELTA_PROTOCOL */
72630#ifdef FREECIV_JSON_CONNECTION
72631 struct plocation field_addr;
72632 {
72636 }
72637#endif /* FREECIV_JSON_CONNECTION */
72638
72639#ifdef FREECIV_DELTA_PROTOCOL
72640#ifdef FREECIV_JSON_CONNECTION
72641 field_addr.name = "fields";
72642#endif /* FREECIV_JSON_CONNECTION */
72643 DIO_BV_GET(&din, &field_addr, fields);
72644#ifdef FREECIV_JSON_CONNECTION
72645 field_addr.name = "id";
72646#endif /* FREECIV_JSON_CONNECTION */
72647 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
72649 }
72650
72651#else /* FREECIV_DELTA_PROTOCOL */
72652#ifdef FREECIV_JSON_CONNECTION
72653 field_addr.name = "id";
72654#endif /* FREECIV_JSON_CONNECTION */
72655 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
72657 }
72658#ifdef FREECIV_JSON_CONNECTION
72659 field_addr.name = "is_visible";
72660#endif /* FREECIV_JSON_CONNECTION */
72661 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
72662 RECEIVE_PACKET_FIELD_ERROR(is_visible);
72663 }
72664#ifdef FREECIV_JSON_CONNECTION
72665 field_addr.name = "is_changeable";
72666#endif /* FREECIV_JSON_CONNECTION */
72667 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
72668 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
72669 }
72670#ifdef FREECIV_JSON_CONNECTION
72671 field_addr.name = "initial_setting";
72672#endif /* FREECIV_JSON_CONNECTION */
72673 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
72674 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
72675 }
72676#ifdef FREECIV_JSON_CONNECTION
72677 field_addr.name = "setdef";
72678#endif /* FREECIV_JSON_CONNECTION */
72679 {
72680 int readin;
72681
72682 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72684 }
72685 real_packet->setdef = readin;
72686 }
72687#ifdef FREECIV_JSON_CONNECTION
72688 field_addr.name = "val";
72689#endif /* FREECIV_JSON_CONNECTION */
72690 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->val)) {
72692 }
72693#ifdef FREECIV_JSON_CONNECTION
72694 field_addr.name = "default_val";
72695#endif /* FREECIV_JSON_CONNECTION */
72696 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->default_val)) {
72697 RECEIVE_PACKET_FIELD_ERROR(default_val);
72698 }
72699#endif
72700 log_packet_detailed("packet_server_setting_bool_100: got info about (%d)",
72701 real_packet->id);
72702
72703#ifdef FREECIV_DELTA_PROTOCOL
72704 if (NULL == *hash) {
72706 NULL, NULL, NULL, free);
72707 }
72708
72709 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
72710 *real_packet = *old;
72711 } else {
72712 int id;
72713
72714 id = real_packet->id;
72715
72716 log_packet_detailed(" no old info");
72717 memset(real_packet, 0, sizeof(*real_packet));
72718
72719 real_packet->id = id;
72720 }
72721
72722 real_packet->is_visible = BV_ISSET(fields, 0);
72723 real_packet->is_changeable = BV_ISSET(fields, 1);
72724 real_packet->initial_setting = BV_ISSET(fields, 2);
72725 if (BV_ISSET(fields, 3)) {
72726 log_packet_detailed(" got field 'setdef'");
72727#ifdef FREECIV_JSON_CONNECTION
72728 field_addr.name = "setdef";
72729#endif /* FREECIV_JSON_CONNECTION */
72730 {
72731 int readin;
72732
72733 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72735 }
72736 real_packet->setdef = readin;
72737 }
72738 }
72739 real_packet->val = BV_ISSET(fields, 4);
72740 real_packet->default_val = BV_ISSET(fields, 5);
72741
72742 if (NULL == old) {
72743 old = fc_malloc(sizeof(*old));
72744 *old = *real_packet;
72745 genhash_insert(*hash, old, old);
72746 } else {
72747 *old = *real_packet;
72748 }
72749
72750#endif /* FREECIV_DELTA_PROTOCOL */
72752}
72753
72755{
72756 const struct packet_server_setting_bool *real_packet = packet;
72757 int e;
72758#ifdef FREECIV_DELTA_PROTOCOL
72760 struct packet_server_setting_bool *old;
72761 bool differ;
72762 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BOOL;
72763 int different = 0;
72764#endif /* FREECIV_DELTA_PROTOCOL */
72766#ifdef FREECIV_JSON_CONNECTION
72767 struct plocation field_addr;
72768 {
72772 }
72773#endif /* FREECIV_JSON_CONNECTION */
72774
72775 log_packet_detailed("packet_server_setting_bool_100: sending info about (%d)",
72776 real_packet->id);
72777
72778#ifdef FREECIV_DELTA_PROTOCOL
72779 if (NULL == *hash) {
72781 NULL, NULL, NULL, free);
72782 }
72783 BV_CLR_ALL(fields);
72784
72785 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72786 old = fc_malloc(sizeof(*old));
72787 *old = *real_packet;
72788 genhash_insert(*hash, old, old);
72789 memset(old, 0, sizeof(*old));
72790 different = 1; /* Force to send. */
72791 }
72792 differ = (old->is_visible != real_packet->is_visible);
72793 if (differ) {
72794 different++;
72795 }
72796 if (packet->is_visible) {
72797 BV_SET(fields, 0);
72798 }
72799
72800 differ = (old->is_changeable != real_packet->is_changeable);
72801 if (differ) {
72802 different++;
72803 }
72804 if (packet->is_changeable) {
72805 BV_SET(fields, 1);
72806 }
72807
72808 differ = (old->initial_setting != real_packet->initial_setting);
72809 if (differ) {
72810 different++;
72811 }
72812 if (packet->initial_setting) {
72813 BV_SET(fields, 2);
72814 }
72815
72816 differ = (old->setdef != real_packet->setdef);
72817 if (differ) {
72818 different++;
72819 BV_SET(fields, 3);
72820 }
72821
72822 differ = (old->val != real_packet->val);
72823 if (differ) {
72824 different++;
72825 }
72826 if (packet->val) {
72827 BV_SET(fields, 4);
72828 }
72829
72830 differ = (old->default_val != real_packet->default_val);
72831 if (differ) {
72832 different++;
72833 }
72834 if (packet->default_val) {
72835 BV_SET(fields, 5);
72836 }
72837
72838 if (different == 0) {
72839 log_packet_detailed(" no change -> discard");
72841 }
72842
72843#ifdef FREECIV_JSON_CONNECTION
72844 field_addr.name = "fields";
72845#endif /* FREECIV_JSON_CONNECTION */
72846 e = 0;
72847 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72848 if (e) {
72849 log_packet_detailed("fields bitvector error detected");
72850 }
72851#ifdef FREECIV_JSON_CONNECTION
72852 field_addr.name = "id";
72853#endif /* FREECIV_JSON_CONNECTION */
72854 e = 0;
72855 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
72856 if (e) {
72857 log_packet_detailed("'id' field error detected");
72858 }
72859
72860 /* field 0 is folded into the header */
72861 /* field 1 is folded into the header */
72862 /* field 2 is folded into the header */
72863 if (BV_ISSET(fields, 3)) {
72864 log_packet_detailed(" field 'setdef' has changed");
72865#ifdef FREECIV_JSON_CONNECTION
72866 field_addr.name = "setdef";
72867#endif /* FREECIV_JSON_CONNECTION */
72868 e = 0;
72869 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
72870 if (e) {
72871 log_packet_detailed("'setdef' field error detected");
72872 }
72873 }
72874 /* field 4 is folded into the header */
72875 /* field 5 is folded into the header */
72876
72877 *old = *real_packet;
72878#endif /* FREECIV_DELTA_PROTOCOL */
72879#ifndef FREECIV_DELTA_PROTOCOL
72880#ifdef FREECIV_JSON_CONNECTION
72881 field_addr.name = "id";
72882#endif /* FREECIV_JSON_CONNECTION */
72883 e = 0;
72884 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
72885 if (e) {
72886 log_packet_detailed("'id' field error detected");
72887 }
72888#ifdef FREECIV_JSON_CONNECTION
72889 field_addr.name = "is_visible";
72890#endif /* FREECIV_JSON_CONNECTION */
72891 e = 0;
72892 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
72893 if (e) {
72894 log_packet_detailed("'is_visible' field error detected");
72895 }
72896#ifdef FREECIV_JSON_CONNECTION
72897 field_addr.name = "is_changeable";
72898#endif /* FREECIV_JSON_CONNECTION */
72899 e = 0;
72900 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
72901 if (e) {
72902 log_packet_detailed("'is_changeable' field error detected");
72903 }
72904#ifdef FREECIV_JSON_CONNECTION
72905 field_addr.name = "initial_setting";
72906#endif /* FREECIV_JSON_CONNECTION */
72907 e = 0;
72908 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
72909 if (e) {
72910 log_packet_detailed("'initial_setting' field error detected");
72911 }
72912#ifdef FREECIV_JSON_CONNECTION
72913 field_addr.name = "setdef";
72914#endif /* FREECIV_JSON_CONNECTION */
72915 e = 0;
72916 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
72917 if (e) {
72918 log_packet_detailed("'setdef' field error detected");
72919 }
72920#ifdef FREECIV_JSON_CONNECTION
72921 field_addr.name = "val";
72922#endif /* FREECIV_JSON_CONNECTION */
72923 e = 0;
72924 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->val);
72925 if (e) {
72926 log_packet_detailed("'val' field error detected");
72927 }
72928#ifdef FREECIV_JSON_CONNECTION
72929 field_addr.name = "default_val";
72930#endif /* FREECIV_JSON_CONNECTION */
72931 e = 0;
72932 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->default_val);
72933 if (e) {
72934 log_packet_detailed("'default_val' field error detected");
72935 }
72936
72937#endif
72939}
72940
72942{
72943 if (!pc->used) {
72944 log_error("WARNING: trying to send data to the closed connection %s",
72946 return -1;
72947 }
72948 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet != NULL, -1,
72949 "Handler for PACKET_SERVER_SETTING_BOOL not installed");
72950 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet(pc, packet);
72951}
72952
72953#ifdef FREECIV_DELTA_PROTOCOL
72955{
72956 const struct packet_server_setting_int *key = (const struct packet_server_setting_int *) vkey;
72957 genhash_val_t result = 0;
72958
72959 result += key->id;
72960
72961 result &= 0xFFFFFFFF;
72962 return result;
72963}
72964
72965static bool cmp_packet_server_setting_int_100(const void *vkey1, const void *vkey2)
72966{
72967 const struct packet_server_setting_int *old = (const struct packet_server_setting_int *) vkey1;
72969 bool differ;
72970
72971 differ = (old->id != real_packet->id);
72972
72973 return !differ;
72974}
72976#endif /* FREECIV_DELTA_PROTOCOL */
72977
72979{
72980#ifdef FREECIV_DELTA_PROTOCOL
72982 struct packet_server_setting_int *old;
72983 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_INT;
72984#endif /* FREECIV_DELTA_PROTOCOL */
72986#ifdef FREECIV_JSON_CONNECTION
72987 struct plocation field_addr;
72988 {
72992 }
72993#endif /* FREECIV_JSON_CONNECTION */
72994
72995#ifdef FREECIV_DELTA_PROTOCOL
72996#ifdef FREECIV_JSON_CONNECTION
72997 field_addr.name = "fields";
72998#endif /* FREECIV_JSON_CONNECTION */
72999 DIO_BV_GET(&din, &field_addr, fields);
73000#ifdef FREECIV_JSON_CONNECTION
73001 field_addr.name = "id";
73002#endif /* FREECIV_JSON_CONNECTION */
73003 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
73005 }
73006
73007#else /* FREECIV_DELTA_PROTOCOL */
73008#ifdef FREECIV_JSON_CONNECTION
73009 field_addr.name = "id";
73010#endif /* FREECIV_JSON_CONNECTION */
73011 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
73013 }
73014#ifdef FREECIV_JSON_CONNECTION
73015 field_addr.name = "is_visible";
73016#endif /* FREECIV_JSON_CONNECTION */
73017 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
73018 RECEIVE_PACKET_FIELD_ERROR(is_visible);
73019 }
73020#ifdef FREECIV_JSON_CONNECTION
73021 field_addr.name = "is_changeable";
73022#endif /* FREECIV_JSON_CONNECTION */
73023 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
73024 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
73025 }
73026#ifdef FREECIV_JSON_CONNECTION
73027 field_addr.name = "initial_setting";
73028#endif /* FREECIV_JSON_CONNECTION */
73029 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
73030 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
73031 }
73032#ifdef FREECIV_JSON_CONNECTION
73033 field_addr.name = "setdef";
73034#endif /* FREECIV_JSON_CONNECTION */
73035 {
73036 int readin;
73037
73038 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
73040 }
73041 real_packet->setdef = readin;
73042 }
73043#ifdef FREECIV_JSON_CONNECTION
73044 field_addr.name = "val";
73045#endif /* FREECIV_JSON_CONNECTION */
73046 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
73048 }
73049#ifdef FREECIV_JSON_CONNECTION
73050 field_addr.name = "default_val";
73051#endif /* FREECIV_JSON_CONNECTION */
73052 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
73053 RECEIVE_PACKET_FIELD_ERROR(default_val);
73054 }
73055#ifdef FREECIV_JSON_CONNECTION
73056 field_addr.name = "min_val";
73057#endif /* FREECIV_JSON_CONNECTION */
73058 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
73060 }
73061#ifdef FREECIV_JSON_CONNECTION
73062 field_addr.name = "max_val";
73063#endif /* FREECIV_JSON_CONNECTION */
73064 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
73066 }
73067#endif
73068 log_packet_detailed("packet_server_setting_int_100: got info about (%d)",
73069 real_packet->id);
73070
73071#ifdef FREECIV_DELTA_PROTOCOL
73072 if (NULL == *hash) {
73074 NULL, NULL, NULL, free);
73075 }
73076
73077 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
73078 *real_packet = *old;
73079 } else {
73080 int id;
73081
73082 id = real_packet->id;
73083
73084 log_packet_detailed(" no old info");
73085 memset(real_packet, 0, sizeof(*real_packet));
73086
73087 real_packet->id = id;
73088 }
73089
73090 real_packet->is_visible = BV_ISSET(fields, 0);
73091 real_packet->is_changeable = BV_ISSET(fields, 1);
73092 real_packet->initial_setting = BV_ISSET(fields, 2);
73093 if (BV_ISSET(fields, 3)) {
73094 log_packet_detailed(" got field 'setdef'");
73095#ifdef FREECIV_JSON_CONNECTION
73096 field_addr.name = "setdef";
73097#endif /* FREECIV_JSON_CONNECTION */
73098 {
73099 int readin;
73100
73101 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
73103 }
73104 real_packet->setdef = readin;
73105 }
73106 }
73107 if (BV_ISSET(fields, 4)) {
73108 log_packet_detailed(" got field 'val'");
73109#ifdef FREECIV_JSON_CONNECTION
73110 field_addr.name = "val";
73111#endif /* FREECIV_JSON_CONNECTION */
73112 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
73114 }
73115 }
73116 if (BV_ISSET(fields, 5)) {
73117 log_packet_detailed(" got field 'default_val'");
73118#ifdef FREECIV_JSON_CONNECTION
73119 field_addr.name = "default_val";
73120#endif /* FREECIV_JSON_CONNECTION */
73121 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
73122 RECEIVE_PACKET_FIELD_ERROR(default_val);
73123 }
73124 }
73125 if (BV_ISSET(fields, 6)) {
73126 log_packet_detailed(" got field 'min_val'");
73127#ifdef FREECIV_JSON_CONNECTION
73128 field_addr.name = "min_val";
73129#endif /* FREECIV_JSON_CONNECTION */
73130 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
73132 }
73133 }
73134 if (BV_ISSET(fields, 7)) {
73135 log_packet_detailed(" got field 'max_val'");
73136#ifdef FREECIV_JSON_CONNECTION
73137 field_addr.name = "max_val";
73138#endif /* FREECIV_JSON_CONNECTION */
73139 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
73141 }
73142 }
73143
73144 if (NULL == old) {
73145 old = fc_malloc(sizeof(*old));
73146 *old = *real_packet;
73147 genhash_insert(*hash, old, old);
73148 } else {
73149 *old = *real_packet;
73150 }
73151
73152#endif /* FREECIV_DELTA_PROTOCOL */
73154}
73155
73157{
73158 const struct packet_server_setting_int *real_packet = packet;
73159 int e;
73160#ifdef FREECIV_DELTA_PROTOCOL
73162 struct packet_server_setting_int *old;
73163 bool differ;
73164 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_INT;
73165 int different = 0;
73166#endif /* FREECIV_DELTA_PROTOCOL */
73168#ifdef FREECIV_JSON_CONNECTION
73169 struct plocation field_addr;
73170 {
73174 }
73175#endif /* FREECIV_JSON_CONNECTION */
73176
73177 log_packet_detailed("packet_server_setting_int_100: sending info about (%d)",
73178 real_packet->id);
73179
73180#ifdef FREECIV_DELTA_PROTOCOL
73181 if (NULL == *hash) {
73183 NULL, NULL, NULL, free);
73184 }
73185 BV_CLR_ALL(fields);
73186
73187 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
73188 old = fc_malloc(sizeof(*old));
73189 *old = *real_packet;
73190 genhash_insert(*hash, old, old);
73191 memset(old, 0, sizeof(*old));
73192 different = 1; /* Force to send. */
73193 }
73194 differ = (old->is_visible != real_packet->is_visible);
73195 if (differ) {
73196 different++;
73197 }
73198 if (packet->is_visible) {
73199 BV_SET(fields, 0);
73200 }
73201
73202 differ = (old->is_changeable != real_packet->is_changeable);
73203 if (differ) {
73204 different++;
73205 }
73206 if (packet->is_changeable) {
73207 BV_SET(fields, 1);
73208 }
73209
73210 differ = (old->initial_setting != real_packet->initial_setting);
73211 if (differ) {
73212 different++;
73213 }
73214 if (packet->initial_setting) {
73215 BV_SET(fields, 2);
73216 }
73217
73218 differ = (old->setdef != real_packet->setdef);
73219 if (differ) {
73220 different++;
73221 BV_SET(fields, 3);
73222 }
73223
73224 differ = (old->val != real_packet->val);
73225 if (differ) {
73226 different++;
73227 BV_SET(fields, 4);
73228 }
73229
73230 differ = (old->default_val != real_packet->default_val);
73231 if (differ) {
73232 different++;
73233 BV_SET(fields, 5);
73234 }
73235
73236 differ = (old->min_val != real_packet->min_val);
73237 if (differ) {
73238 different++;
73239 BV_SET(fields, 6);
73240 }
73241
73242 differ = (old->max_val != real_packet->max_val);
73243 if (differ) {
73244 different++;
73245 BV_SET(fields, 7);
73246 }
73247
73248 if (different == 0) {
73249 log_packet_detailed(" no change -> discard");
73251 }
73252
73253#ifdef FREECIV_JSON_CONNECTION
73254 field_addr.name = "fields";
73255#endif /* FREECIV_JSON_CONNECTION */
73256 e = 0;
73257 e |= DIO_BV_PUT(&dout, &field_addr, fields);
73258 if (e) {
73259 log_packet_detailed("fields bitvector error detected");
73260 }
73261#ifdef FREECIV_JSON_CONNECTION
73262 field_addr.name = "id";
73263#endif /* FREECIV_JSON_CONNECTION */
73264 e = 0;
73265 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
73266 if (e) {
73267 log_packet_detailed("'id' field error detected");
73268 }
73269
73270 /* field 0 is folded into the header */
73271 /* field 1 is folded into the header */
73272 /* field 2 is folded into the header */
73273 if (BV_ISSET(fields, 3)) {
73274 log_packet_detailed(" field 'setdef' has changed");
73275#ifdef FREECIV_JSON_CONNECTION
73276 field_addr.name = "setdef";
73277#endif /* FREECIV_JSON_CONNECTION */
73278 e = 0;
73279 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
73280 if (e) {
73281 log_packet_detailed("'setdef' field error detected");
73282 }
73283 }
73284 if (BV_ISSET(fields, 4)) {
73285 log_packet_detailed(" field 'val' has changed");
73286#ifdef FREECIV_JSON_CONNECTION
73287 field_addr.name = "val";
73288#endif /* FREECIV_JSON_CONNECTION */
73289 e = 0;
73290 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
73291 if (e) {
73292 log_packet_detailed("'val' field error detected");
73293 }
73294 }
73295 if (BV_ISSET(fields, 5)) {
73296 log_packet_detailed(" field 'default_val' has changed");
73297#ifdef FREECIV_JSON_CONNECTION
73298 field_addr.name = "default_val";
73299#endif /* FREECIV_JSON_CONNECTION */
73300 e = 0;
73301 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
73302 if (e) {
73303 log_packet_detailed("'default_val' field error detected");
73304 }
73305 }
73306 if (BV_ISSET(fields, 6)) {
73307 log_packet_detailed(" field 'min_val' has changed");
73308#ifdef FREECIV_JSON_CONNECTION
73309 field_addr.name = "min_val";
73310#endif /* FREECIV_JSON_CONNECTION */
73311 e = 0;
73312 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
73313 if (e) {
73314 log_packet_detailed("'min_val' field error detected");
73315 }
73316 }
73317 if (BV_ISSET(fields, 7)) {
73318 log_packet_detailed(" field 'max_val' has changed");
73319#ifdef FREECIV_JSON_CONNECTION
73320 field_addr.name = "max_val";
73321#endif /* FREECIV_JSON_CONNECTION */
73322 e = 0;
73323 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
73324 if (e) {
73325 log_packet_detailed("'max_val' field error detected");
73326 }
73327 }
73328
73329 *old = *real_packet;
73330#endif /* FREECIV_DELTA_PROTOCOL */
73331#ifndef FREECIV_DELTA_PROTOCOL
73332#ifdef FREECIV_JSON_CONNECTION
73333 field_addr.name = "id";
73334#endif /* FREECIV_JSON_CONNECTION */
73335 e = 0;
73336 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
73337 if (e) {
73338 log_packet_detailed("'id' field error detected");
73339 }
73340#ifdef FREECIV_JSON_CONNECTION
73341 field_addr.name = "is_visible";
73342#endif /* FREECIV_JSON_CONNECTION */
73343 e = 0;
73344 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
73345 if (e) {
73346 log_packet_detailed("'is_visible' field error detected");
73347 }
73348#ifdef FREECIV_JSON_CONNECTION
73349 field_addr.name = "is_changeable";
73350#endif /* FREECIV_JSON_CONNECTION */
73351 e = 0;
73352 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
73353 if (e) {
73354 log_packet_detailed("'is_changeable' field error detected");
73355 }
73356#ifdef FREECIV_JSON_CONNECTION
73357 field_addr.name = "initial_setting";
73358#endif /* FREECIV_JSON_CONNECTION */
73359 e = 0;
73360 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
73361 if (e) {
73362 log_packet_detailed("'initial_setting' field error detected");
73363 }
73364#ifdef FREECIV_JSON_CONNECTION
73365 field_addr.name = "setdef";
73366#endif /* FREECIV_JSON_CONNECTION */
73367 e = 0;
73368 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
73369 if (e) {
73370 log_packet_detailed("'setdef' field error detected");
73371 }
73372#ifdef FREECIV_JSON_CONNECTION
73373 field_addr.name = "val";
73374#endif /* FREECIV_JSON_CONNECTION */
73375 e = 0;
73376 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
73377 if (e) {
73378 log_packet_detailed("'val' field error detected");
73379 }
73380#ifdef FREECIV_JSON_CONNECTION
73381 field_addr.name = "default_val";
73382#endif /* FREECIV_JSON_CONNECTION */
73383 e = 0;
73384 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
73385 if (e) {
73386 log_packet_detailed("'default_val' field error detected");
73387 }
73388#ifdef FREECIV_JSON_CONNECTION
73389 field_addr.name = "min_val";
73390#endif /* FREECIV_JSON_CONNECTION */
73391 e = 0;
73392 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
73393 if (e) {
73394 log_packet_detailed("'min_val' field error detected");
73395 }
73396#ifdef FREECIV_JSON_CONNECTION
73397 field_addr.name = "max_val";
73398#endif /* FREECIV_JSON_CONNECTION */
73399 e = 0;
73400 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
73401 if (e) {
73402 log_packet_detailed("'max_val' field error detected");
73403 }
73404
73405#endif
73407}
73408
73410{
73411 if (!pc->used) {
73412 log_error("WARNING: trying to send data to the closed connection %s",
73414 return -1;
73415 }
73416 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet != NULL, -1,
73417 "Handler for PACKET_SERVER_SETTING_INT not installed");
73418 return pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet(pc, packet);
73419}
73420
73421#ifdef FREECIV_DELTA_PROTOCOL
73423{
73424 const struct packet_server_setting_str *key = (const struct packet_server_setting_str *) vkey;
73425 genhash_val_t result = 0;
73426
73427 result += key->id;
73428
73429 result &= 0xFFFFFFFF;
73430 return result;
73431}
73432
73433static bool cmp_packet_server_setting_str_100(const void *vkey1, const void *vkey2)
73434{
73435 const struct packet_server_setting_str *old = (const struct packet_server_setting_str *) vkey1;
73437 bool differ;
73438
73439 differ = (old->id != real_packet->id);
73440
73441 return !differ;
73442}
73444#endif /* FREECIV_DELTA_PROTOCOL */
73445
73447{
73448#ifdef FREECIV_DELTA_PROTOCOL
73450 struct packet_server_setting_str *old;
73451 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_STR;
73452#endif /* FREECIV_DELTA_PROTOCOL */
73454#ifdef FREECIV_JSON_CONNECTION
73455 struct plocation field_addr;
73456 {
73460 }
73461#endif /* FREECIV_JSON_CONNECTION */
73462
73463#ifdef FREECIV_DELTA_PROTOCOL
73464#ifdef FREECIV_JSON_CONNECTION
73465 field_addr.name = "fields";
73466#endif /* FREECIV_JSON_CONNECTION */
73467 DIO_BV_GET(&din, &field_addr, fields);
73468#ifdef FREECIV_JSON_CONNECTION
73469 field_addr.name = "id";
73470#endif /* FREECIV_JSON_CONNECTION */
73471 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
73473 }
73474
73475#else /* FREECIV_DELTA_PROTOCOL */
73476#ifdef FREECIV_JSON_CONNECTION
73477 field_addr.name = "id";
73478#endif /* FREECIV_JSON_CONNECTION */
73479 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
73481 }
73482#ifdef FREECIV_JSON_CONNECTION
73483 field_addr.name = "is_visible";
73484#endif /* FREECIV_JSON_CONNECTION */
73485 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
73486 RECEIVE_PACKET_FIELD_ERROR(is_visible);
73487 }
73488#ifdef FREECIV_JSON_CONNECTION
73489 field_addr.name = "is_changeable";
73490#endif /* FREECIV_JSON_CONNECTION */
73491 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
73492 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
73493 }
73494#ifdef FREECIV_JSON_CONNECTION
73495 field_addr.name = "initial_setting";
73496#endif /* FREECIV_JSON_CONNECTION */
73497 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
73498 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
73499 }
73500#ifdef FREECIV_JSON_CONNECTION
73501 field_addr.name = "setdef";
73502#endif /* FREECIV_JSON_CONNECTION */
73503 {
73504 int readin;
73505
73506 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
73508 }
73509 real_packet->setdef = readin;
73510 }
73511#ifdef FREECIV_JSON_CONNECTION
73512 field_addr.name = "val";
73513#endif /* FREECIV_JSON_CONNECTION */
73514 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
73516 }
73517#ifdef FREECIV_JSON_CONNECTION
73518 field_addr.name = "default_val";
73519#endif /* FREECIV_JSON_CONNECTION */
73520 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
73521 RECEIVE_PACKET_FIELD_ERROR(default_val);
73522 }
73523#endif
73524 log_packet_detailed("packet_server_setting_str_100: got info about (%d)",
73525 real_packet->id);
73526
73527#ifdef FREECIV_DELTA_PROTOCOL
73528 if (NULL == *hash) {
73530 NULL, NULL, NULL, free);
73531 }
73532
73533 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
73534 *real_packet = *old;
73535 } else {
73536 int id;
73537
73538 id = real_packet->id;
73539
73540 log_packet_detailed(" no old info");
73541 memset(real_packet, 0, sizeof(*real_packet));
73542
73543 real_packet->id = id;
73544 }
73545
73546 real_packet->is_visible = BV_ISSET(fields, 0);
73547 real_packet->is_changeable = BV_ISSET(fields, 1);
73548 real_packet->initial_setting = BV_ISSET(fields, 2);
73549 if (BV_ISSET(fields, 3)) {
73550 log_packet_detailed(" got field 'setdef'");
73551#ifdef FREECIV_JSON_CONNECTION
73552 field_addr.name = "setdef";
73553#endif /* FREECIV_JSON_CONNECTION */
73554 {
73555 int readin;
73556
73557 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
73559 }
73560 real_packet->setdef = readin;
73561 }
73562 }
73563 if (BV_ISSET(fields, 4)) {
73564 log_packet_detailed(" got field 'val'");
73565#ifdef FREECIV_JSON_CONNECTION
73566 field_addr.name = "val";
73567#endif /* FREECIV_JSON_CONNECTION */
73568 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
73570 }
73571 }
73572 if (BV_ISSET(fields, 5)) {
73573 log_packet_detailed(" got field 'default_val'");
73574#ifdef FREECIV_JSON_CONNECTION
73575 field_addr.name = "default_val";
73576#endif /* FREECIV_JSON_CONNECTION */
73577 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
73578 RECEIVE_PACKET_FIELD_ERROR(default_val);
73579 }
73580 }
73581
73582 if (NULL == old) {
73583 old = fc_malloc(sizeof(*old));
73584 *old = *real_packet;
73585 genhash_insert(*hash, old, old);
73586 } else {
73587 *old = *real_packet;
73588 }
73589
73590#endif /* FREECIV_DELTA_PROTOCOL */
73592}
73593
73595{
73596 const struct packet_server_setting_str *real_packet = packet;
73597 int e;
73598#ifdef FREECIV_DELTA_PROTOCOL
73600 struct packet_server_setting_str *old;
73601 bool differ;
73602 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_STR;
73603 int different = 0;
73604#endif /* FREECIV_DELTA_PROTOCOL */
73606#ifdef FREECIV_JSON_CONNECTION
73607 struct plocation field_addr;
73608 {
73612 }
73613#endif /* FREECIV_JSON_CONNECTION */
73614
73615 log_packet_detailed("packet_server_setting_str_100: sending info about (%d)",
73616 real_packet->id);
73617
73618#ifdef FREECIV_DELTA_PROTOCOL
73619 if (NULL == *hash) {
73621 NULL, NULL, NULL, free);
73622 }
73623 BV_CLR_ALL(fields);
73624
73625 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
73626 old = fc_malloc(sizeof(*old));
73627 *old = *real_packet;
73628 genhash_insert(*hash, old, old);
73629 memset(old, 0, sizeof(*old));
73630 different = 1; /* Force to send. */
73631 }
73632 differ = (old->is_visible != real_packet->is_visible);
73633 if (differ) {
73634 different++;
73635 }
73636 if (packet->is_visible) {
73637 BV_SET(fields, 0);
73638 }
73639
73640 differ = (old->is_changeable != real_packet->is_changeable);
73641 if (differ) {
73642 different++;
73643 }
73644 if (packet->is_changeable) {
73645 BV_SET(fields, 1);
73646 }
73647
73648 differ = (old->initial_setting != real_packet->initial_setting);
73649 if (differ) {
73650 different++;
73651 }
73652 if (packet->initial_setting) {
73653 BV_SET(fields, 2);
73654 }
73655
73656 differ = (old->setdef != real_packet->setdef);
73657 if (differ) {
73658 different++;
73659 BV_SET(fields, 3);
73660 }
73661
73662 differ = (strcmp(old->val, real_packet->val) != 0);
73663 if (differ) {
73664 different++;
73665 BV_SET(fields, 4);
73666 }
73667
73668 differ = (strcmp(old->default_val, real_packet->default_val) != 0);
73669 if (differ) {
73670 different++;
73671 BV_SET(fields, 5);
73672 }
73673
73674 if (different == 0) {
73675 log_packet_detailed(" no change -> discard");
73677 }
73678
73679#ifdef FREECIV_JSON_CONNECTION
73680 field_addr.name = "fields";
73681#endif /* FREECIV_JSON_CONNECTION */
73682 e = 0;
73683 e |= DIO_BV_PUT(&dout, &field_addr, fields);
73684 if (e) {
73685 log_packet_detailed("fields bitvector error detected");
73686 }
73687#ifdef FREECIV_JSON_CONNECTION
73688 field_addr.name = "id";
73689#endif /* FREECIV_JSON_CONNECTION */
73690 e = 0;
73691 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
73692 if (e) {
73693 log_packet_detailed("'id' field error detected");
73694 }
73695
73696 /* field 0 is folded into the header */
73697 /* field 1 is folded into the header */
73698 /* field 2 is folded into the header */
73699 if (BV_ISSET(fields, 3)) {
73700 log_packet_detailed(" field 'setdef' has changed");
73701#ifdef FREECIV_JSON_CONNECTION
73702 field_addr.name = "setdef";
73703#endif /* FREECIV_JSON_CONNECTION */
73704 e = 0;
73705 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
73706 if (e) {
73707 log_packet_detailed("'setdef' field error detected");
73708 }
73709 }
73710 if (BV_ISSET(fields, 4)) {
73711 log_packet_detailed(" field 'val' has changed");
73712#ifdef FREECIV_JSON_CONNECTION
73713 field_addr.name = "val";
73714#endif /* FREECIV_JSON_CONNECTION */
73715 e = 0;
73716 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
73717 if (e) {
73718 log_packet_detailed("'val' field error detected");
73719 }
73720 }
73721 if (BV_ISSET(fields, 5)) {
73722 log_packet_detailed(" field 'default_val' has changed");
73723#ifdef FREECIV_JSON_CONNECTION
73724 field_addr.name = "default_val";
73725#endif /* FREECIV_JSON_CONNECTION */
73726 e = 0;
73727 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
73728 if (e) {
73729 log_packet_detailed("'default_val' field error detected");
73730 }
73731 }
73732
73733 *old = *real_packet;
73734#endif /* FREECIV_DELTA_PROTOCOL */
73735#ifndef FREECIV_DELTA_PROTOCOL
73736#ifdef FREECIV_JSON_CONNECTION
73737 field_addr.name = "id";
73738#endif /* FREECIV_JSON_CONNECTION */
73739 e = 0;
73740 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
73741 if (e) {
73742 log_packet_detailed("'id' field error detected");
73743 }
73744#ifdef FREECIV_JSON_CONNECTION
73745 field_addr.name = "is_visible";
73746#endif /* FREECIV_JSON_CONNECTION */
73747 e = 0;
73748 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
73749 if (e) {
73750 log_packet_detailed("'is_visible' field error detected");
73751 }
73752#ifdef FREECIV_JSON_CONNECTION
73753 field_addr.name = "is_changeable";
73754#endif /* FREECIV_JSON_CONNECTION */
73755 e = 0;
73756 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
73757 if (e) {
73758 log_packet_detailed("'is_changeable' field error detected");
73759 }
73760#ifdef FREECIV_JSON_CONNECTION
73761 field_addr.name = "initial_setting";
73762#endif /* FREECIV_JSON_CONNECTION */
73763 e = 0;
73764 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
73765 if (e) {
73766 log_packet_detailed("'initial_setting' field error detected");
73767 }
73768#ifdef FREECIV_JSON_CONNECTION
73769 field_addr.name = "setdef";
73770#endif /* FREECIV_JSON_CONNECTION */
73771 e = 0;
73772 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
73773 if (e) {
73774 log_packet_detailed("'setdef' field error detected");
73775 }
73776#ifdef FREECIV_JSON_CONNECTION
73777 field_addr.name = "val";
73778#endif /* FREECIV_JSON_CONNECTION */
73779 e = 0;
73780 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
73781 if (e) {
73782 log_packet_detailed("'val' field error detected");
73783 }
73784#ifdef FREECIV_JSON_CONNECTION
73785 field_addr.name = "default_val";
73786#endif /* FREECIV_JSON_CONNECTION */
73787 e = 0;
73788 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
73789 if (e) {
73790 log_packet_detailed("'default_val' field error detected");
73791 }
73792
73793#endif
73795}
73796
73798{
73799 if (!pc->used) {
73800 log_error("WARNING: trying to send data to the closed connection %s",
73802 return -1;
73803 }
73804 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet != NULL, -1,
73805 "Handler for PACKET_SERVER_SETTING_STR not installed");
73806 return pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet(pc, packet);
73807}
73808
73809#ifdef FREECIV_DELTA_PROTOCOL
73811{
73812 const struct packet_server_setting_enum *key = (const struct packet_server_setting_enum *) vkey;
73813 genhash_val_t result = 0;
73814
73815 result += key->id;
73816
73817 result &= 0xFFFFFFFF;
73818 return result;
73819}
73820
73821static bool cmp_packet_server_setting_enum_100(const void *vkey1, const void *vkey2)
73822{
73823 const struct packet_server_setting_enum *old = (const struct packet_server_setting_enum *) vkey1;
73825 bool differ;
73826
73827 differ = (old->id != real_packet->id);
73828
73829 return !differ;
73830}
73832#endif /* FREECIV_DELTA_PROTOCOL */
73833
73835{
73836#ifdef FREECIV_DELTA_PROTOCOL
73838 struct packet_server_setting_enum *old;
73839 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_ENUM;
73840#endif /* FREECIV_DELTA_PROTOCOL */
73842#ifdef FREECIV_JSON_CONNECTION
73843 struct plocation field_addr;
73844 {
73848 }
73849#endif /* FREECIV_JSON_CONNECTION */
73850
73851#ifdef FREECIV_DELTA_PROTOCOL
73852#ifdef FREECIV_JSON_CONNECTION
73853 field_addr.name = "fields";
73854#endif /* FREECIV_JSON_CONNECTION */
73855 DIO_BV_GET(&din, &field_addr, fields);
73856#ifdef FREECIV_JSON_CONNECTION
73857 field_addr.name = "id";
73858#endif /* FREECIV_JSON_CONNECTION */
73859 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
73861 }
73862
73863#else /* FREECIV_DELTA_PROTOCOL */
73864#ifdef FREECIV_JSON_CONNECTION
73865 field_addr.name = "id";
73866#endif /* FREECIV_JSON_CONNECTION */
73867 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
73869 }
73870#ifdef FREECIV_JSON_CONNECTION
73871 field_addr.name = "is_visible";
73872#endif /* FREECIV_JSON_CONNECTION */
73873 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
73874 RECEIVE_PACKET_FIELD_ERROR(is_visible);
73875 }
73876#ifdef FREECIV_JSON_CONNECTION
73877 field_addr.name = "is_changeable";
73878#endif /* FREECIV_JSON_CONNECTION */
73879 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
73880 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
73881 }
73882#ifdef FREECIV_JSON_CONNECTION
73883 field_addr.name = "initial_setting";
73884#endif /* FREECIV_JSON_CONNECTION */
73885 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
73886 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
73887 }
73888#ifdef FREECIV_JSON_CONNECTION
73889 field_addr.name = "setdef";
73890#endif /* FREECIV_JSON_CONNECTION */
73891 {
73892 int readin;
73893
73894 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
73896 }
73897 real_packet->setdef = readin;
73898 }
73899#ifdef FREECIV_JSON_CONNECTION
73900 field_addr.name = "val";
73901#endif /* FREECIV_JSON_CONNECTION */
73902 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
73904 }
73905#ifdef FREECIV_JSON_CONNECTION
73906 field_addr.name = "default_val";
73907#endif /* FREECIV_JSON_CONNECTION */
73908 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
73909 RECEIVE_PACKET_FIELD_ERROR(default_val);
73910 }
73911#ifdef FREECIV_JSON_CONNECTION
73912 field_addr.name = "values_num";
73913#endif /* FREECIV_JSON_CONNECTION */
73914 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
73915 RECEIVE_PACKET_FIELD_ERROR(values_num);
73916 }
73917#ifdef FREECIV_JSON_CONNECTION
73918 field_addr.name = "support_names";
73919#endif /* FREECIV_JSON_CONNECTION */
73920 if (real_packet->values_num > 64) {
73921 RECEIVE_PACKET_FIELD_ERROR(support_names, ": truncation array");
73922 }
73923 {
73924 int i;
73925
73926#ifdef FREECIV_JSON_CONNECTION
73927 /* Enter array. */
73928 field_addr.sub_location = plocation_elem_new(0);
73929#endif /* FREECIV_JSON_CONNECTION */
73930
73931 for (i = 0; i < real_packet->values_num; i++) {
73932#ifdef FREECIV_JSON_CONNECTION
73933 field_addr.sub_location->number = i;
73934#endif /* FREECIV_JSON_CONNECTION */
73935
73936 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
73937 RECEIVE_PACKET_FIELD_ERROR(support_names);
73938 }
73939 }
73940
73941#ifdef FREECIV_JSON_CONNECTION
73942 /* Exit array. */
73943 FC_FREE(field_addr.sub_location);
73944#endif /* FREECIV_JSON_CONNECTION */
73945 }
73946#ifdef FREECIV_JSON_CONNECTION
73947 field_addr.name = "pretty_names";
73948#endif /* FREECIV_JSON_CONNECTION */
73949 if (real_packet->values_num > 64) {
73950 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": truncation array");
73951 }
73952 {
73953 int i;
73954
73955#ifdef FREECIV_JSON_CONNECTION
73956 /* Enter array. */
73957 field_addr.sub_location = plocation_elem_new(0);
73958#endif /* FREECIV_JSON_CONNECTION */
73959
73960 for (i = 0; i < real_packet->values_num; i++) {
73961#ifdef FREECIV_JSON_CONNECTION
73962 field_addr.sub_location->number = i;
73963#endif /* FREECIV_JSON_CONNECTION */
73964
73965 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
73966 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
73967 }
73968 }
73969
73970#ifdef FREECIV_JSON_CONNECTION
73971 /* Exit array. */
73972 FC_FREE(field_addr.sub_location);
73973#endif /* FREECIV_JSON_CONNECTION */
73974 }
73975#endif
73976 log_packet_detailed("packet_server_setting_enum_100: got info about (%d)",
73977 real_packet->id);
73978
73979#ifdef FREECIV_DELTA_PROTOCOL
73980 if (NULL == *hash) {
73982 NULL, NULL, NULL, free);
73983 }
73984
73985 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
73986 *real_packet = *old;
73987 } else {
73988 int id;
73989
73990 id = real_packet->id;
73991
73992 log_packet_detailed(" no old info");
73993 memset(real_packet, 0, sizeof(*real_packet));
73994
73995 real_packet->id = id;
73996 }
73997
73998 real_packet->is_visible = BV_ISSET(fields, 0);
73999 real_packet->is_changeable = BV_ISSET(fields, 1);
74000 real_packet->initial_setting = BV_ISSET(fields, 2);
74001 if (BV_ISSET(fields, 3)) {
74002 log_packet_detailed(" got field 'setdef'");
74003#ifdef FREECIV_JSON_CONNECTION
74004 field_addr.name = "setdef";
74005#endif /* FREECIV_JSON_CONNECTION */
74006 {
74007 int readin;
74008
74009 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
74011 }
74012 real_packet->setdef = readin;
74013 }
74014 }
74015 if (BV_ISSET(fields, 4)) {
74016 log_packet_detailed(" got field 'val'");
74017#ifdef FREECIV_JSON_CONNECTION
74018 field_addr.name = "val";
74019#endif /* FREECIV_JSON_CONNECTION */
74020 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
74022 }
74023 }
74024 if (BV_ISSET(fields, 5)) {
74025 log_packet_detailed(" got field 'default_val'");
74026#ifdef FREECIV_JSON_CONNECTION
74027 field_addr.name = "default_val";
74028#endif /* FREECIV_JSON_CONNECTION */
74029 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
74030 RECEIVE_PACKET_FIELD_ERROR(default_val);
74031 }
74032 }
74033 if (BV_ISSET(fields, 6)) {
74034 log_packet_detailed(" got field 'values_num'");
74035#ifdef FREECIV_JSON_CONNECTION
74036 field_addr.name = "values_num";
74037#endif /* FREECIV_JSON_CONNECTION */
74038 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
74039 RECEIVE_PACKET_FIELD_ERROR(values_num);
74040 }
74041 }
74042 if (BV_ISSET(fields, 7)) {
74043 log_packet_detailed(" got field 'support_names'");
74044#ifdef FREECIV_JSON_CONNECTION
74045 field_addr.name = "support_names";
74046#endif /* FREECIV_JSON_CONNECTION */
74047 if (real_packet->values_num > 64) {
74048 RECEIVE_PACKET_FIELD_ERROR(support_names, ": truncation array");
74049 }
74050 {
74051 int i;
74052
74053#ifdef FREECIV_JSON_CONNECTION
74054 /* Enter array. */
74055 field_addr.sub_location = plocation_elem_new(0);
74056#endif /* FREECIV_JSON_CONNECTION */
74057
74058 for (i = 0; i < real_packet->values_num; i++) {
74059#ifdef FREECIV_JSON_CONNECTION
74060 field_addr.sub_location->number = i;
74061#endif /* FREECIV_JSON_CONNECTION */
74062
74063 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
74064 RECEIVE_PACKET_FIELD_ERROR(support_names);
74065 }
74066 }
74067
74068#ifdef FREECIV_JSON_CONNECTION
74069 /* Exit array. */
74070 FC_FREE(field_addr.sub_location);
74071#endif /* FREECIV_JSON_CONNECTION */
74072 }
74073 }
74074 if (BV_ISSET(fields, 8)) {
74075 log_packet_detailed(" got field 'pretty_names'");
74076#ifdef FREECIV_JSON_CONNECTION
74077 field_addr.name = "pretty_names";
74078#endif /* FREECIV_JSON_CONNECTION */
74079 if (real_packet->values_num > 64) {
74080 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": truncation array");
74081 }
74082 {
74083 int i;
74084
74085#ifdef FREECIV_JSON_CONNECTION
74086 /* Enter array. */
74087 field_addr.sub_location = plocation_elem_new(0);
74088#endif /* FREECIV_JSON_CONNECTION */
74089
74090 for (i = 0; i < real_packet->values_num; i++) {
74091#ifdef FREECIV_JSON_CONNECTION
74092 field_addr.sub_location->number = i;
74093#endif /* FREECIV_JSON_CONNECTION */
74094
74095 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
74096 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
74097 }
74098 }
74099
74100#ifdef FREECIV_JSON_CONNECTION
74101 /* Exit array. */
74102 FC_FREE(field_addr.sub_location);
74103#endif /* FREECIV_JSON_CONNECTION */
74104 }
74105 }
74106
74107 if (NULL == old) {
74108 old = fc_malloc(sizeof(*old));
74109 *old = *real_packet;
74110 genhash_insert(*hash, old, old);
74111 } else {
74112 *old = *real_packet;
74113 }
74114
74115#endif /* FREECIV_DELTA_PROTOCOL */
74117}
74118
74120{
74121 const struct packet_server_setting_enum *real_packet = packet;
74122 int e;
74123#ifdef FREECIV_DELTA_PROTOCOL
74125 struct packet_server_setting_enum *old;
74126 bool differ;
74127 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_ENUM;
74128 int different = 0;
74129#endif /* FREECIV_DELTA_PROTOCOL */
74131#ifdef FREECIV_JSON_CONNECTION
74132 struct plocation field_addr;
74133 {
74137 }
74138#endif /* FREECIV_JSON_CONNECTION */
74139
74140 log_packet_detailed("packet_server_setting_enum_100: sending info about (%d)",
74141 real_packet->id);
74142
74143#ifdef FREECIV_DELTA_PROTOCOL
74144 if (NULL == *hash) {
74146 NULL, NULL, NULL, free);
74147 }
74148 BV_CLR_ALL(fields);
74149
74150 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74151 old = fc_malloc(sizeof(*old));
74152 *old = *real_packet;
74153 genhash_insert(*hash, old, old);
74154 memset(old, 0, sizeof(*old));
74155 different = 1; /* Force to send. */
74156 }
74157 differ = (old->is_visible != real_packet->is_visible);
74158 if (differ) {
74159 different++;
74160 }
74161 if (packet->is_visible) {
74162 BV_SET(fields, 0);
74163 }
74164
74165 differ = (old->is_changeable != real_packet->is_changeable);
74166 if (differ) {
74167 different++;
74168 }
74169 if (packet->is_changeable) {
74170 BV_SET(fields, 1);
74171 }
74172
74173 differ = (old->initial_setting != real_packet->initial_setting);
74174 if (differ) {
74175 different++;
74176 }
74177 if (packet->initial_setting) {
74178 BV_SET(fields, 2);
74179 }
74180
74181 differ = (old->setdef != real_packet->setdef);
74182 if (differ) {
74183 different++;
74184 BV_SET(fields, 3);
74185 }
74186
74187 differ = (old->val != real_packet->val);
74188 if (differ) {
74189 different++;
74190 BV_SET(fields, 4);
74191 }
74192
74193 differ = (old->default_val != real_packet->default_val);
74194 if (differ) {
74195 different++;
74196 BV_SET(fields, 5);
74197 }
74198
74199 differ = (old->values_num != real_packet->values_num);
74200 if (differ) {
74201 different++;
74202 BV_SET(fields, 6);
74203 }
74204
74205 differ = (old->values_num != real_packet->values_num);
74206 if (!differ) {
74207 int i;
74208
74209 for (i = 0; i < real_packet->values_num; i++) {
74210 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
74211 if (differ) {
74212 break;
74213 }
74214 }
74215 }
74216 if (differ) {
74217 different++;
74218 BV_SET(fields, 7);
74219 }
74220
74221 differ = (old->values_num != real_packet->values_num);
74222 if (!differ) {
74223 int i;
74224
74225 for (i = 0; i < real_packet->values_num; i++) {
74226 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
74227 if (differ) {
74228 break;
74229 }
74230 }
74231 }
74232 if (differ) {
74233 different++;
74234 BV_SET(fields, 8);
74235 }
74236
74237 if (different == 0) {
74238 log_packet_detailed(" no change -> discard");
74240 }
74241
74242#ifdef FREECIV_JSON_CONNECTION
74243 field_addr.name = "fields";
74244#endif /* FREECIV_JSON_CONNECTION */
74245 e = 0;
74246 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74247 if (e) {
74248 log_packet_detailed("fields bitvector error detected");
74249 }
74250#ifdef FREECIV_JSON_CONNECTION
74251 field_addr.name = "id";
74252#endif /* FREECIV_JSON_CONNECTION */
74253 e = 0;
74254 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
74255 if (e) {
74256 log_packet_detailed("'id' field error detected");
74257 }
74258
74259 /* field 0 is folded into the header */
74260 /* field 1 is folded into the header */
74261 /* field 2 is folded into the header */
74262 if (BV_ISSET(fields, 3)) {
74263 log_packet_detailed(" field 'setdef' has changed");
74264#ifdef FREECIV_JSON_CONNECTION
74265 field_addr.name = "setdef";
74266#endif /* FREECIV_JSON_CONNECTION */
74267 e = 0;
74268 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
74269 if (e) {
74270 log_packet_detailed("'setdef' field error detected");
74271 }
74272 }
74273 if (BV_ISSET(fields, 4)) {
74274 log_packet_detailed(" field 'val' has changed");
74275#ifdef FREECIV_JSON_CONNECTION
74276 field_addr.name = "val";
74277#endif /* FREECIV_JSON_CONNECTION */
74278 e = 0;
74279 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
74280 if (e) {
74281 log_packet_detailed("'val' field error detected");
74282 }
74283 }
74284 if (BV_ISSET(fields, 5)) {
74285 log_packet_detailed(" field 'default_val' has changed");
74286#ifdef FREECIV_JSON_CONNECTION
74287 field_addr.name = "default_val";
74288#endif /* FREECIV_JSON_CONNECTION */
74289 e = 0;
74290 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
74291 if (e) {
74292 log_packet_detailed("'default_val' field error detected");
74293 }
74294 }
74295 if (BV_ISSET(fields, 6)) {
74296 log_packet_detailed(" field 'values_num' has changed");
74297#ifdef FREECIV_JSON_CONNECTION
74298 field_addr.name = "values_num";
74299#endif /* FREECIV_JSON_CONNECTION */
74300 e = 0;
74301 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
74302 if (e) {
74303 log_packet_detailed("'values_num' field error detected");
74304 }
74305 }
74306 if (BV_ISSET(fields, 7)) {
74307 log_packet_detailed(" field 'support_names' has changed");
74308#ifdef FREECIV_JSON_CONNECTION
74309 field_addr.name = "support_names";
74310#endif /* FREECIV_JSON_CONNECTION */
74311 e = 0;
74312 {
74313 int i;
74314
74315#ifdef FREECIV_JSON_CONNECTION
74316 /* Create the array. */
74317 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
74318
74319 /* Enter the array. */
74320 field_addr.sub_location = plocation_elem_new(0);
74321#endif /* FREECIV_JSON_CONNECTION */
74322
74323 for (i = 0; i < real_packet->values_num; i++) {
74324#ifdef FREECIV_JSON_CONNECTION
74325 /* Next array element. */
74326 field_addr.sub_location->number = i;
74327#endif /* FREECIV_JSON_CONNECTION */
74328
74329 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
74330 }
74331
74332#ifdef FREECIV_JSON_CONNECTION
74333 /* Exit array. */
74334 FC_FREE(field_addr.sub_location);
74335#endif /* FREECIV_JSON_CONNECTION */
74336 }
74337 if (e) {
74338 log_packet_detailed("'support_names' field error detected");
74339 }
74340 }
74341 if (BV_ISSET(fields, 8)) {
74342 log_packet_detailed(" field 'pretty_names' has changed");
74343#ifdef FREECIV_JSON_CONNECTION
74344 field_addr.name = "pretty_names";
74345#endif /* FREECIV_JSON_CONNECTION */
74346 e = 0;
74347 {
74348 int i;
74349
74350#ifdef FREECIV_JSON_CONNECTION
74351 /* Create the array. */
74352 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
74353
74354 /* Enter the array. */
74355 field_addr.sub_location = plocation_elem_new(0);
74356#endif /* FREECIV_JSON_CONNECTION */
74357
74358 for (i = 0; i < real_packet->values_num; i++) {
74359#ifdef FREECIV_JSON_CONNECTION
74360 /* Next array element. */
74361 field_addr.sub_location->number = i;
74362#endif /* FREECIV_JSON_CONNECTION */
74363
74364 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
74365 }
74366
74367#ifdef FREECIV_JSON_CONNECTION
74368 /* Exit array. */
74369 FC_FREE(field_addr.sub_location);
74370#endif /* FREECIV_JSON_CONNECTION */
74371 }
74372 if (e) {
74373 log_packet_detailed("'pretty_names' field error detected");
74374 }
74375 }
74376
74377 *old = *real_packet;
74378#endif /* FREECIV_DELTA_PROTOCOL */
74379#ifndef FREECIV_DELTA_PROTOCOL
74380#ifdef FREECIV_JSON_CONNECTION
74381 field_addr.name = "id";
74382#endif /* FREECIV_JSON_CONNECTION */
74383 e = 0;
74384 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
74385 if (e) {
74386 log_packet_detailed("'id' field error detected");
74387 }
74388#ifdef FREECIV_JSON_CONNECTION
74389 field_addr.name = "is_visible";
74390#endif /* FREECIV_JSON_CONNECTION */
74391 e = 0;
74392 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
74393 if (e) {
74394 log_packet_detailed("'is_visible' field error detected");
74395 }
74396#ifdef FREECIV_JSON_CONNECTION
74397 field_addr.name = "is_changeable";
74398#endif /* FREECIV_JSON_CONNECTION */
74399 e = 0;
74400 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
74401 if (e) {
74402 log_packet_detailed("'is_changeable' field error detected");
74403 }
74404#ifdef FREECIV_JSON_CONNECTION
74405 field_addr.name = "initial_setting";
74406#endif /* FREECIV_JSON_CONNECTION */
74407 e = 0;
74408 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
74409 if (e) {
74410 log_packet_detailed("'initial_setting' field error detected");
74411 }
74412#ifdef FREECIV_JSON_CONNECTION
74413 field_addr.name = "setdef";
74414#endif /* FREECIV_JSON_CONNECTION */
74415 e = 0;
74416 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
74417 if (e) {
74418 log_packet_detailed("'setdef' field error detected");
74419 }
74420#ifdef FREECIV_JSON_CONNECTION
74421 field_addr.name = "val";
74422#endif /* FREECIV_JSON_CONNECTION */
74423 e = 0;
74424 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
74425 if (e) {
74426 log_packet_detailed("'val' field error detected");
74427 }
74428#ifdef FREECIV_JSON_CONNECTION
74429 field_addr.name = "default_val";
74430#endif /* FREECIV_JSON_CONNECTION */
74431 e = 0;
74432 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
74433 if (e) {
74434 log_packet_detailed("'default_val' field error detected");
74435 }
74436#ifdef FREECIV_JSON_CONNECTION
74437 field_addr.name = "values_num";
74438#endif /* FREECIV_JSON_CONNECTION */
74439 e = 0;
74440 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
74441 if (e) {
74442 log_packet_detailed("'values_num' field error detected");
74443 }
74444#ifdef FREECIV_JSON_CONNECTION
74445 field_addr.name = "support_names";
74446#endif /* FREECIV_JSON_CONNECTION */
74447 e = 0;
74448 {
74449 int i;
74450
74451#ifdef FREECIV_JSON_CONNECTION
74452 /* Create the array. */
74453 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
74454
74455 /* Enter the array. */
74456 field_addr.sub_location = plocation_elem_new(0);
74457#endif /* FREECIV_JSON_CONNECTION */
74458
74459 for (i = 0; i < real_packet->values_num; i++) {
74460#ifdef FREECIV_JSON_CONNECTION
74461 /* Next array element. */
74462 field_addr.sub_location->number = i;
74463#endif /* FREECIV_JSON_CONNECTION */
74464
74465 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
74466 }
74467
74468#ifdef FREECIV_JSON_CONNECTION
74469 /* Exit array. */
74470 FC_FREE(field_addr.sub_location);
74471#endif /* FREECIV_JSON_CONNECTION */
74472 }
74473 if (e) {
74474 log_packet_detailed("'support_names' field error detected");
74475 }
74476#ifdef FREECIV_JSON_CONNECTION
74477 field_addr.name = "pretty_names";
74478#endif /* FREECIV_JSON_CONNECTION */
74479 e = 0;
74480 {
74481 int i;
74482
74483#ifdef FREECIV_JSON_CONNECTION
74484 /* Create the array. */
74485 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
74486
74487 /* Enter the array. */
74488 field_addr.sub_location = plocation_elem_new(0);
74489#endif /* FREECIV_JSON_CONNECTION */
74490
74491 for (i = 0; i < real_packet->values_num; i++) {
74492#ifdef FREECIV_JSON_CONNECTION
74493 /* Next array element. */
74494 field_addr.sub_location->number = i;
74495#endif /* FREECIV_JSON_CONNECTION */
74496
74497 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
74498 }
74499
74500#ifdef FREECIV_JSON_CONNECTION
74501 /* Exit array. */
74502 FC_FREE(field_addr.sub_location);
74503#endif /* FREECIV_JSON_CONNECTION */
74504 }
74505 if (e) {
74506 log_packet_detailed("'pretty_names' field error detected");
74507 }
74508
74509#endif
74511}
74512
74514{
74515 if (!pc->used) {
74516 log_error("WARNING: trying to send data to the closed connection %s",
74518 return -1;
74519 }
74520 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet != NULL, -1,
74521 "Handler for PACKET_SERVER_SETTING_ENUM not installed");
74522 return pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet(pc, packet);
74523}
74524
74525#ifdef FREECIV_DELTA_PROTOCOL
74527{
74528 const struct packet_server_setting_bitwise *key = (const struct packet_server_setting_bitwise *) vkey;
74529 genhash_val_t result = 0;
74530
74531 result += key->id;
74532
74533 result &= 0xFFFFFFFF;
74534 return result;
74535}
74536
74537static bool cmp_packet_server_setting_bitwise_100(const void *vkey1, const void *vkey2)
74538{
74539 const struct packet_server_setting_bitwise *old = (const struct packet_server_setting_bitwise *) vkey1;
74541 bool differ;
74542
74543 differ = (old->id != real_packet->id);
74544
74545 return !differ;
74546}
74548#endif /* FREECIV_DELTA_PROTOCOL */
74549
74551{
74552#ifdef FREECIV_DELTA_PROTOCOL
74555 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BITWISE;
74556#endif /* FREECIV_DELTA_PROTOCOL */
74558#ifdef FREECIV_JSON_CONNECTION
74559 struct plocation field_addr;
74560 {
74564 }
74565#endif /* FREECIV_JSON_CONNECTION */
74566
74567#ifdef FREECIV_DELTA_PROTOCOL
74568#ifdef FREECIV_JSON_CONNECTION
74569 field_addr.name = "fields";
74570#endif /* FREECIV_JSON_CONNECTION */
74571 DIO_BV_GET(&din, &field_addr, fields);
74572#ifdef FREECIV_JSON_CONNECTION
74573 field_addr.name = "id";
74574#endif /* FREECIV_JSON_CONNECTION */
74575 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
74577 }
74578
74579#else /* FREECIV_DELTA_PROTOCOL */
74580#ifdef FREECIV_JSON_CONNECTION
74581 field_addr.name = "id";
74582#endif /* FREECIV_JSON_CONNECTION */
74583 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
74585 }
74586#ifdef FREECIV_JSON_CONNECTION
74587 field_addr.name = "is_visible";
74588#endif /* FREECIV_JSON_CONNECTION */
74589 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
74590 RECEIVE_PACKET_FIELD_ERROR(is_visible);
74591 }
74592#ifdef FREECIV_JSON_CONNECTION
74593 field_addr.name = "is_changeable";
74594#endif /* FREECIV_JSON_CONNECTION */
74595 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
74596 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
74597 }
74598#ifdef FREECIV_JSON_CONNECTION
74599 field_addr.name = "initial_setting";
74600#endif /* FREECIV_JSON_CONNECTION */
74601 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
74602 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
74603 }
74604#ifdef FREECIV_JSON_CONNECTION
74605 field_addr.name = "setdef";
74606#endif /* FREECIV_JSON_CONNECTION */
74607 {
74608 int readin;
74609
74610 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
74612 }
74613 real_packet->setdef = readin;
74614 }
74615#ifdef FREECIV_JSON_CONNECTION
74616 field_addr.name = "val";
74617#endif /* FREECIV_JSON_CONNECTION */
74618 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
74620 }
74621#ifdef FREECIV_JSON_CONNECTION
74622 field_addr.name = "default_val";
74623#endif /* FREECIV_JSON_CONNECTION */
74624 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
74625 RECEIVE_PACKET_FIELD_ERROR(default_val);
74626 }
74627#ifdef FREECIV_JSON_CONNECTION
74628 field_addr.name = "bits_num";
74629#endif /* FREECIV_JSON_CONNECTION */
74630 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
74632 }
74633#ifdef FREECIV_JSON_CONNECTION
74634 field_addr.name = "support_names";
74635#endif /* FREECIV_JSON_CONNECTION */
74636 if (real_packet->bits_num > 64) {
74637 RECEIVE_PACKET_FIELD_ERROR(support_names, ": truncation array");
74638 }
74639 {
74640 int i;
74641
74642#ifdef FREECIV_JSON_CONNECTION
74643 /* Enter array. */
74644 field_addr.sub_location = plocation_elem_new(0);
74645#endif /* FREECIV_JSON_CONNECTION */
74646
74647 for (i = 0; i < real_packet->bits_num; i++) {
74648#ifdef FREECIV_JSON_CONNECTION
74649 field_addr.sub_location->number = i;
74650#endif /* FREECIV_JSON_CONNECTION */
74651
74652 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
74653 RECEIVE_PACKET_FIELD_ERROR(support_names);
74654 }
74655 }
74656
74657#ifdef FREECIV_JSON_CONNECTION
74658 /* Exit array. */
74659 FC_FREE(field_addr.sub_location);
74660#endif /* FREECIV_JSON_CONNECTION */
74661 }
74662#ifdef FREECIV_JSON_CONNECTION
74663 field_addr.name = "pretty_names";
74664#endif /* FREECIV_JSON_CONNECTION */
74665 if (real_packet->bits_num > 64) {
74666 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": truncation array");
74667 }
74668 {
74669 int i;
74670
74671#ifdef FREECIV_JSON_CONNECTION
74672 /* Enter array. */
74673 field_addr.sub_location = plocation_elem_new(0);
74674#endif /* FREECIV_JSON_CONNECTION */
74675
74676 for (i = 0; i < real_packet->bits_num; i++) {
74677#ifdef FREECIV_JSON_CONNECTION
74678 field_addr.sub_location->number = i;
74679#endif /* FREECIV_JSON_CONNECTION */
74680
74681 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
74682 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
74683 }
74684 }
74685
74686#ifdef FREECIV_JSON_CONNECTION
74687 /* Exit array. */
74688 FC_FREE(field_addr.sub_location);
74689#endif /* FREECIV_JSON_CONNECTION */
74690 }
74691#endif
74692 log_packet_detailed("packet_server_setting_bitwise_100: got info about (%d)",
74693 real_packet->id);
74694
74695#ifdef FREECIV_DELTA_PROTOCOL
74696 if (NULL == *hash) {
74698 NULL, NULL, NULL, free);
74699 }
74700
74701 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74702 *real_packet = *old;
74703 } else {
74704 int id;
74705
74706 id = real_packet->id;
74707
74708 log_packet_detailed(" no old info");
74709 memset(real_packet, 0, sizeof(*real_packet));
74710
74711 real_packet->id = id;
74712 }
74713
74714 real_packet->is_visible = BV_ISSET(fields, 0);
74715 real_packet->is_changeable = BV_ISSET(fields, 1);
74716 real_packet->initial_setting = BV_ISSET(fields, 2);
74717 if (BV_ISSET(fields, 3)) {
74718 log_packet_detailed(" got field 'setdef'");
74719#ifdef FREECIV_JSON_CONNECTION
74720 field_addr.name = "setdef";
74721#endif /* FREECIV_JSON_CONNECTION */
74722 {
74723 int readin;
74724
74725 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
74727 }
74728 real_packet->setdef = readin;
74729 }
74730 }
74731 if (BV_ISSET(fields, 4)) {
74732 log_packet_detailed(" got field 'val'");
74733#ifdef FREECIV_JSON_CONNECTION
74734 field_addr.name = "val";
74735#endif /* FREECIV_JSON_CONNECTION */
74736 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
74738 }
74739 }
74740 if (BV_ISSET(fields, 5)) {
74741 log_packet_detailed(" got field 'default_val'");
74742#ifdef FREECIV_JSON_CONNECTION
74743 field_addr.name = "default_val";
74744#endif /* FREECIV_JSON_CONNECTION */
74745 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
74746 RECEIVE_PACKET_FIELD_ERROR(default_val);
74747 }
74748 }
74749 if (BV_ISSET(fields, 6)) {
74750 log_packet_detailed(" got field 'bits_num'");
74751#ifdef FREECIV_JSON_CONNECTION
74752 field_addr.name = "bits_num";
74753#endif /* FREECIV_JSON_CONNECTION */
74754 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
74756 }
74757 }
74758 if (BV_ISSET(fields, 7)) {
74759 log_packet_detailed(" got field 'support_names'");
74760#ifdef FREECIV_JSON_CONNECTION
74761 field_addr.name = "support_names";
74762#endif /* FREECIV_JSON_CONNECTION */
74763 if (real_packet->bits_num > 64) {
74764 RECEIVE_PACKET_FIELD_ERROR(support_names, ": truncation array");
74765 }
74766 {
74767 int i;
74768
74769#ifdef FREECIV_JSON_CONNECTION
74770 /* Enter array. */
74771 field_addr.sub_location = plocation_elem_new(0);
74772#endif /* FREECIV_JSON_CONNECTION */
74773
74774 for (i = 0; i < real_packet->bits_num; i++) {
74775#ifdef FREECIV_JSON_CONNECTION
74776 field_addr.sub_location->number = i;
74777#endif /* FREECIV_JSON_CONNECTION */
74778
74779 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
74780 RECEIVE_PACKET_FIELD_ERROR(support_names);
74781 }
74782 }
74783
74784#ifdef FREECIV_JSON_CONNECTION
74785 /* Exit array. */
74786 FC_FREE(field_addr.sub_location);
74787#endif /* FREECIV_JSON_CONNECTION */
74788 }
74789 }
74790 if (BV_ISSET(fields, 8)) {
74791 log_packet_detailed(" got field 'pretty_names'");
74792#ifdef FREECIV_JSON_CONNECTION
74793 field_addr.name = "pretty_names";
74794#endif /* FREECIV_JSON_CONNECTION */
74795 if (real_packet->bits_num > 64) {
74796 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": truncation array");
74797 }
74798 {
74799 int i;
74800
74801#ifdef FREECIV_JSON_CONNECTION
74802 /* Enter array. */
74803 field_addr.sub_location = plocation_elem_new(0);
74804#endif /* FREECIV_JSON_CONNECTION */
74805
74806 for (i = 0; i < real_packet->bits_num; i++) {
74807#ifdef FREECIV_JSON_CONNECTION
74808 field_addr.sub_location->number = i;
74809#endif /* FREECIV_JSON_CONNECTION */
74810
74811 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
74812 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
74813 }
74814 }
74815
74816#ifdef FREECIV_JSON_CONNECTION
74817 /* Exit array. */
74818 FC_FREE(field_addr.sub_location);
74819#endif /* FREECIV_JSON_CONNECTION */
74820 }
74821 }
74822
74823 if (NULL == old) {
74824 old = fc_malloc(sizeof(*old));
74825 *old = *real_packet;
74826 genhash_insert(*hash, old, old);
74827 } else {
74828 *old = *real_packet;
74829 }
74830
74831#endif /* FREECIV_DELTA_PROTOCOL */
74833}
74834
74836{
74837 const struct packet_server_setting_bitwise *real_packet = packet;
74838 int e;
74839#ifdef FREECIV_DELTA_PROTOCOL
74842 bool differ;
74843 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BITWISE;
74844 int different = 0;
74845#endif /* FREECIV_DELTA_PROTOCOL */
74847#ifdef FREECIV_JSON_CONNECTION
74848 struct plocation field_addr;
74849 {
74853 }
74854#endif /* FREECIV_JSON_CONNECTION */
74855
74856 log_packet_detailed("packet_server_setting_bitwise_100: sending info about (%d)",
74857 real_packet->id);
74858
74859#ifdef FREECIV_DELTA_PROTOCOL
74860 if (NULL == *hash) {
74862 NULL, NULL, NULL, free);
74863 }
74864 BV_CLR_ALL(fields);
74865
74866 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74867 old = fc_malloc(sizeof(*old));
74868 *old = *real_packet;
74869 genhash_insert(*hash, old, old);
74870 memset(old, 0, sizeof(*old));
74871 different = 1; /* Force to send. */
74872 }
74873 differ = (old->is_visible != real_packet->is_visible);
74874 if (differ) {
74875 different++;
74876 }
74877 if (packet->is_visible) {
74878 BV_SET(fields, 0);
74879 }
74880
74881 differ = (old->is_changeable != real_packet->is_changeable);
74882 if (differ) {
74883 different++;
74884 }
74885 if (packet->is_changeable) {
74886 BV_SET(fields, 1);
74887 }
74888
74889 differ = (old->initial_setting != real_packet->initial_setting);
74890 if (differ) {
74891 different++;
74892 }
74893 if (packet->initial_setting) {
74894 BV_SET(fields, 2);
74895 }
74896
74897 differ = (old->setdef != real_packet->setdef);
74898 if (differ) {
74899 different++;
74900 BV_SET(fields, 3);
74901 }
74902
74903 differ = (old->val != real_packet->val);
74904 if (differ) {
74905 different++;
74906 BV_SET(fields, 4);
74907 }
74908
74909 differ = (old->default_val != real_packet->default_val);
74910 if (differ) {
74911 different++;
74912 BV_SET(fields, 5);
74913 }
74914
74915 differ = (old->bits_num != real_packet->bits_num);
74916 if (differ) {
74917 different++;
74918 BV_SET(fields, 6);
74919 }
74920
74921 differ = (old->bits_num != real_packet->bits_num);
74922 if (!differ) {
74923 int i;
74924
74925 for (i = 0; i < real_packet->bits_num; i++) {
74926 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
74927 if (differ) {
74928 break;
74929 }
74930 }
74931 }
74932 if (differ) {
74933 different++;
74934 BV_SET(fields, 7);
74935 }
74936
74937 differ = (old->bits_num != real_packet->bits_num);
74938 if (!differ) {
74939 int i;
74940
74941 for (i = 0; i < real_packet->bits_num; i++) {
74942 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
74943 if (differ) {
74944 break;
74945 }
74946 }
74947 }
74948 if (differ) {
74949 different++;
74950 BV_SET(fields, 8);
74951 }
74952
74953 if (different == 0) {
74954 log_packet_detailed(" no change -> discard");
74956 }
74957
74958#ifdef FREECIV_JSON_CONNECTION
74959 field_addr.name = "fields";
74960#endif /* FREECIV_JSON_CONNECTION */
74961 e = 0;
74962 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74963 if (e) {
74964 log_packet_detailed("fields bitvector error detected");
74965 }
74966#ifdef FREECIV_JSON_CONNECTION
74967 field_addr.name = "id";
74968#endif /* FREECIV_JSON_CONNECTION */
74969 e = 0;
74970 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
74971 if (e) {
74972 log_packet_detailed("'id' field error detected");
74973 }
74974
74975 /* field 0 is folded into the header */
74976 /* field 1 is folded into the header */
74977 /* field 2 is folded into the header */
74978 if (BV_ISSET(fields, 3)) {
74979 log_packet_detailed(" field 'setdef' has changed");
74980#ifdef FREECIV_JSON_CONNECTION
74981 field_addr.name = "setdef";
74982#endif /* FREECIV_JSON_CONNECTION */
74983 e = 0;
74984 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
74985 if (e) {
74986 log_packet_detailed("'setdef' field error detected");
74987 }
74988 }
74989 if (BV_ISSET(fields, 4)) {
74990 log_packet_detailed(" field 'val' has changed");
74991#ifdef FREECIV_JSON_CONNECTION
74992 field_addr.name = "val";
74993#endif /* FREECIV_JSON_CONNECTION */
74994 e = 0;
74995 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
74996 if (e) {
74997 log_packet_detailed("'val' field error detected");
74998 }
74999 }
75000 if (BV_ISSET(fields, 5)) {
75001 log_packet_detailed(" field 'default_val' has changed");
75002#ifdef FREECIV_JSON_CONNECTION
75003 field_addr.name = "default_val";
75004#endif /* FREECIV_JSON_CONNECTION */
75005 e = 0;
75006 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
75007 if (e) {
75008 log_packet_detailed("'default_val' field error detected");
75009 }
75010 }
75011 if (BV_ISSET(fields, 6)) {
75012 log_packet_detailed(" field 'bits_num' has changed");
75013#ifdef FREECIV_JSON_CONNECTION
75014 field_addr.name = "bits_num";
75015#endif /* FREECIV_JSON_CONNECTION */
75016 e = 0;
75017 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
75018 if (e) {
75019 log_packet_detailed("'bits_num' field error detected");
75020 }
75021 }
75022 if (BV_ISSET(fields, 7)) {
75023 log_packet_detailed(" field 'support_names' has changed");
75024#ifdef FREECIV_JSON_CONNECTION
75025 field_addr.name = "support_names";
75026#endif /* FREECIV_JSON_CONNECTION */
75027 e = 0;
75028 {
75029 int i;
75030
75031#ifdef FREECIV_JSON_CONNECTION
75032 /* Create the array. */
75033 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
75034
75035 /* Enter the array. */
75036 field_addr.sub_location = plocation_elem_new(0);
75037#endif /* FREECIV_JSON_CONNECTION */
75038
75039 for (i = 0; i < real_packet->bits_num; i++) {
75040#ifdef FREECIV_JSON_CONNECTION
75041 /* Next array element. */
75042 field_addr.sub_location->number = i;
75043#endif /* FREECIV_JSON_CONNECTION */
75044
75045 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
75046 }
75047
75048#ifdef FREECIV_JSON_CONNECTION
75049 /* Exit array. */
75050 FC_FREE(field_addr.sub_location);
75051#endif /* FREECIV_JSON_CONNECTION */
75052 }
75053 if (e) {
75054 log_packet_detailed("'support_names' field error detected");
75055 }
75056 }
75057 if (BV_ISSET(fields, 8)) {
75058 log_packet_detailed(" field 'pretty_names' has changed");
75059#ifdef FREECIV_JSON_CONNECTION
75060 field_addr.name = "pretty_names";
75061#endif /* FREECIV_JSON_CONNECTION */
75062 e = 0;
75063 {
75064 int i;
75065
75066#ifdef FREECIV_JSON_CONNECTION
75067 /* Create the array. */
75068 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
75069
75070 /* Enter the array. */
75071 field_addr.sub_location = plocation_elem_new(0);
75072#endif /* FREECIV_JSON_CONNECTION */
75073
75074 for (i = 0; i < real_packet->bits_num; i++) {
75075#ifdef FREECIV_JSON_CONNECTION
75076 /* Next array element. */
75077 field_addr.sub_location->number = i;
75078#endif /* FREECIV_JSON_CONNECTION */
75079
75080 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
75081 }
75082
75083#ifdef FREECIV_JSON_CONNECTION
75084 /* Exit array. */
75085 FC_FREE(field_addr.sub_location);
75086#endif /* FREECIV_JSON_CONNECTION */
75087 }
75088 if (e) {
75089 log_packet_detailed("'pretty_names' field error detected");
75090 }
75091 }
75092
75093 *old = *real_packet;
75094#endif /* FREECIV_DELTA_PROTOCOL */
75095#ifndef FREECIV_DELTA_PROTOCOL
75096#ifdef FREECIV_JSON_CONNECTION
75097 field_addr.name = "id";
75098#endif /* FREECIV_JSON_CONNECTION */
75099 e = 0;
75100 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
75101 if (e) {
75102 log_packet_detailed("'id' field error detected");
75103 }
75104#ifdef FREECIV_JSON_CONNECTION
75105 field_addr.name = "is_visible";
75106#endif /* FREECIV_JSON_CONNECTION */
75107 e = 0;
75108 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
75109 if (e) {
75110 log_packet_detailed("'is_visible' field error detected");
75111 }
75112#ifdef FREECIV_JSON_CONNECTION
75113 field_addr.name = "is_changeable";
75114#endif /* FREECIV_JSON_CONNECTION */
75115 e = 0;
75116 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
75117 if (e) {
75118 log_packet_detailed("'is_changeable' field error detected");
75119 }
75120#ifdef FREECIV_JSON_CONNECTION
75121 field_addr.name = "initial_setting";
75122#endif /* FREECIV_JSON_CONNECTION */
75123 e = 0;
75124 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
75125 if (e) {
75126 log_packet_detailed("'initial_setting' field error detected");
75127 }
75128#ifdef FREECIV_JSON_CONNECTION
75129 field_addr.name = "setdef";
75130#endif /* FREECIV_JSON_CONNECTION */
75131 e = 0;
75132 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
75133 if (e) {
75134 log_packet_detailed("'setdef' field error detected");
75135 }
75136#ifdef FREECIV_JSON_CONNECTION
75137 field_addr.name = "val";
75138#endif /* FREECIV_JSON_CONNECTION */
75139 e = 0;
75140 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
75141 if (e) {
75142 log_packet_detailed("'val' field error detected");
75143 }
75144#ifdef FREECIV_JSON_CONNECTION
75145 field_addr.name = "default_val";
75146#endif /* FREECIV_JSON_CONNECTION */
75147 e = 0;
75148 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
75149 if (e) {
75150 log_packet_detailed("'default_val' field error detected");
75151 }
75152#ifdef FREECIV_JSON_CONNECTION
75153 field_addr.name = "bits_num";
75154#endif /* FREECIV_JSON_CONNECTION */
75155 e = 0;
75156 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
75157 if (e) {
75158 log_packet_detailed("'bits_num' field error detected");
75159 }
75160#ifdef FREECIV_JSON_CONNECTION
75161 field_addr.name = "support_names";
75162#endif /* FREECIV_JSON_CONNECTION */
75163 e = 0;
75164 {
75165 int i;
75166
75167#ifdef FREECIV_JSON_CONNECTION
75168 /* Create the array. */
75169 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
75170
75171 /* Enter the array. */
75172 field_addr.sub_location = plocation_elem_new(0);
75173#endif /* FREECIV_JSON_CONNECTION */
75174
75175 for (i = 0; i < real_packet->bits_num; i++) {
75176#ifdef FREECIV_JSON_CONNECTION
75177 /* Next array element. */
75178 field_addr.sub_location->number = i;
75179#endif /* FREECIV_JSON_CONNECTION */
75180
75181 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
75182 }
75183
75184#ifdef FREECIV_JSON_CONNECTION
75185 /* Exit array. */
75186 FC_FREE(field_addr.sub_location);
75187#endif /* FREECIV_JSON_CONNECTION */
75188 }
75189 if (e) {
75190 log_packet_detailed("'support_names' field error detected");
75191 }
75192#ifdef FREECIV_JSON_CONNECTION
75193 field_addr.name = "pretty_names";
75194#endif /* FREECIV_JSON_CONNECTION */
75195 e = 0;
75196 {
75197 int i;
75198
75199#ifdef FREECIV_JSON_CONNECTION
75200 /* Create the array. */
75201 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
75202
75203 /* Enter the array. */
75204 field_addr.sub_location = plocation_elem_new(0);
75205#endif /* FREECIV_JSON_CONNECTION */
75206
75207 for (i = 0; i < real_packet->bits_num; i++) {
75208#ifdef FREECIV_JSON_CONNECTION
75209 /* Next array element. */
75210 field_addr.sub_location->number = i;
75211#endif /* FREECIV_JSON_CONNECTION */
75212
75213 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
75214 }
75215
75216#ifdef FREECIV_JSON_CONNECTION
75217 /* Exit array. */
75218 FC_FREE(field_addr.sub_location);
75219#endif /* FREECIV_JSON_CONNECTION */
75220 }
75221 if (e) {
75222 log_packet_detailed("'pretty_names' field error detected");
75223 }
75224
75225#endif
75227}
75228
75230{
75231 if (!pc->used) {
75232 log_error("WARNING: trying to send data to the closed connection %s",
75234 return -1;
75235 }
75236 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet != NULL, -1,
75237 "Handler for PACKET_SERVER_SETTING_BITWISE not installed");
75238 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet(pc, packet);
75239}
75240
75241#ifdef FREECIV_DELTA_PROTOCOL
75242#define hash_packet_set_topology_100 hash_const
75243
75244#define cmp_packet_set_topology_100 cmp_const
75245
75247#endif /* FREECIV_DELTA_PROTOCOL */
75248
75250{
75251#ifdef FREECIV_DELTA_PROTOCOL
75253 struct packet_set_topology *old;
75254 struct genhash **hash = pc->phs.received + PACKET_SET_TOPOLOGY;
75255#endif /* FREECIV_DELTA_PROTOCOL */
75257#ifdef FREECIV_JSON_CONNECTION
75258 struct plocation field_addr;
75259 {
75263 }
75264#endif /* FREECIV_JSON_CONNECTION */
75265
75266#ifdef FREECIV_DELTA_PROTOCOL
75267#ifdef FREECIV_JSON_CONNECTION
75268 field_addr.name = "fields";
75269#endif /* FREECIV_JSON_CONNECTION */
75270 DIO_BV_GET(&din, &field_addr, fields);
75271
75272#else /* FREECIV_DELTA_PROTOCOL */
75273#ifdef FREECIV_JSON_CONNECTION
75274 field_addr.name = "topology_id";
75275#endif /* FREECIV_JSON_CONNECTION */
75276 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
75277 RECEIVE_PACKET_FIELD_ERROR(topology_id);
75278 }
75279#ifdef FREECIV_JSON_CONNECTION
75280 field_addr.name = "wrap_id";
75281#endif /* FREECIV_JSON_CONNECTION */
75282 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
75284 }
75285#endif
75286 log_packet_detailed("packet_set_topology_100: got info about ()");
75287
75288#ifdef FREECIV_DELTA_PROTOCOL
75289 if (NULL == *hash) {
75291 NULL, NULL, NULL, free);
75292 }
75293
75294 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75295 *real_packet = *old;
75296 } else {
75297 log_packet_detailed(" no old info");
75298 memset(real_packet, 0, sizeof(*real_packet));
75299 }
75300
75301 if (BV_ISSET(fields, 0)) {
75302 log_packet_detailed(" got field 'topology_id'");
75303#ifdef FREECIV_JSON_CONNECTION
75304 field_addr.name = "topology_id";
75305#endif /* FREECIV_JSON_CONNECTION */
75306 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
75307 RECEIVE_PACKET_FIELD_ERROR(topology_id);
75308 }
75309 }
75310 if (BV_ISSET(fields, 1)) {
75311 log_packet_detailed(" got field 'wrap_id'");
75312#ifdef FREECIV_JSON_CONNECTION
75313 field_addr.name = "wrap_id";
75314#endif /* FREECIV_JSON_CONNECTION */
75315 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
75317 }
75318 }
75319
75320 if (NULL == old) {
75321 old = fc_malloc(sizeof(*old));
75322 *old = *real_packet;
75323 genhash_insert(*hash, old, old);
75324 } else {
75325 *old = *real_packet;
75326 }
75327
75328#endif /* FREECIV_DELTA_PROTOCOL */
75330}
75331
75332static int send_packet_set_topology_100(struct connection *pc, const struct packet_set_topology *packet)
75333{
75334 const struct packet_set_topology *real_packet = packet;
75335 int e;
75336#ifdef FREECIV_DELTA_PROTOCOL
75338 struct packet_set_topology *old;
75339 bool differ;
75340 struct genhash **hash = pc->phs.sent + PACKET_SET_TOPOLOGY;
75341#endif /* FREECIV_DELTA_PROTOCOL */
75343#ifdef FREECIV_JSON_CONNECTION
75344 struct plocation field_addr;
75345 {
75349 }
75350#endif /* FREECIV_JSON_CONNECTION */
75351
75352 log_packet_detailed("packet_set_topology_100: sending info about ()");
75353
75354#ifdef FREECIV_DELTA_PROTOCOL
75355 if (NULL == *hash) {
75357 NULL, NULL, NULL, free);
75358 }
75359 BV_CLR_ALL(fields);
75360
75361 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75362 old = fc_malloc(sizeof(*old));
75363 *old = *real_packet;
75364 genhash_insert(*hash, old, old);
75365 memset(old, 0, sizeof(*old));
75366 }
75367 differ = (old->topology_id != real_packet->topology_id);
75368 if (differ) {
75369 BV_SET(fields, 0);
75370 }
75371
75372 differ = (old->wrap_id != real_packet->wrap_id);
75373 if (differ) {
75374 BV_SET(fields, 1);
75375 }
75376
75377
75378#ifdef FREECIV_JSON_CONNECTION
75379 field_addr.name = "fields";
75380#endif /* FREECIV_JSON_CONNECTION */
75381 e = 0;
75382 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75383 if (e) {
75384 log_packet_detailed("fields bitvector error detected");
75385 }
75386
75387 if (BV_ISSET(fields, 0)) {
75388 log_packet_detailed(" field 'topology_id' has changed");
75389#ifdef FREECIV_JSON_CONNECTION
75390 field_addr.name = "topology_id";
75391#endif /* FREECIV_JSON_CONNECTION */
75392 e = 0;
75393 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
75394 if (e) {
75395 log_packet_detailed("'topology_id' field error detected");
75396 }
75397 }
75398 if (BV_ISSET(fields, 1)) {
75399 log_packet_detailed(" field 'wrap_id' has changed");
75400#ifdef FREECIV_JSON_CONNECTION
75401 field_addr.name = "wrap_id";
75402#endif /* FREECIV_JSON_CONNECTION */
75403 e = 0;
75404 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
75405 if (e) {
75406 log_packet_detailed("'wrap_id' field error detected");
75407 }
75408 }
75409
75410 *old = *real_packet;
75411#endif /* FREECIV_DELTA_PROTOCOL */
75412#ifndef FREECIV_DELTA_PROTOCOL
75413#ifdef FREECIV_JSON_CONNECTION
75414 field_addr.name = "topology_id";
75415#endif /* FREECIV_JSON_CONNECTION */
75416 e = 0;
75417 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
75418 if (e) {
75419 log_packet_detailed("'topology_id' field error detected");
75420 }
75421#ifdef FREECIV_JSON_CONNECTION
75422 field_addr.name = "wrap_id";
75423#endif /* FREECIV_JSON_CONNECTION */
75424 e = 0;
75425 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
75426 if (e) {
75427 log_packet_detailed("'wrap_id' field error detected");
75428 }
75429
75430#endif
75432}
75433
75435{
75436 if (!pc->used) {
75437 log_error("WARNING: trying to send data to the closed connection %s",
75439 return -1;
75440 }
75441 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet != NULL, -1,
75442 "Handler for PACKET_SET_TOPOLOGY not installed");
75443 return pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet(pc, packet);
75444}
75445
75446#ifdef FREECIV_DELTA_PROTOCOL
75447#define hash_packet_ruleset_effect_100 hash_const
75448
75449#define cmp_packet_ruleset_effect_100 cmp_const
75450
75452#endif /* FREECIV_DELTA_PROTOCOL */
75453
75455{
75456#ifdef FREECIV_DELTA_PROTOCOL
75458 struct packet_ruleset_effect *old;
75459 struct genhash **hash = pc->phs.received + PACKET_RULESET_EFFECT;
75460#endif /* FREECIV_DELTA_PROTOCOL */
75462#ifdef FREECIV_JSON_CONNECTION
75463 struct plocation field_addr;
75464 {
75468 }
75469#endif /* FREECIV_JSON_CONNECTION */
75470
75471#ifdef FREECIV_DELTA_PROTOCOL
75472#ifdef FREECIV_JSON_CONNECTION
75473 field_addr.name = "fields";
75474#endif /* FREECIV_JSON_CONNECTION */
75475 DIO_BV_GET(&din, &field_addr, fields);
75476
75477#else /* FREECIV_DELTA_PROTOCOL */
75478#ifdef FREECIV_JSON_CONNECTION
75479 field_addr.name = "effect_type";
75480#endif /* FREECIV_JSON_CONNECTION */
75481 {
75482 int readin;
75483
75484 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75485 RECEIVE_PACKET_FIELD_ERROR(effect_type);
75486 }
75487 real_packet->effect_type = readin;
75488 }
75489#ifdef FREECIV_JSON_CONNECTION
75490 field_addr.name = "effect_value";
75491#endif /* FREECIV_JSON_CONNECTION */
75492 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
75493 RECEIVE_PACKET_FIELD_ERROR(effect_value);
75494 }
75495#ifdef FREECIV_JSON_CONNECTION
75496 field_addr.name = "has_multiplier";
75497#endif /* FREECIV_JSON_CONNECTION */
75498 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_multiplier)) {
75499 RECEIVE_PACKET_FIELD_ERROR(has_multiplier);
75500 }
75501#ifdef FREECIV_JSON_CONNECTION
75502 field_addr.name = "multiplier";
75503#endif /* FREECIV_JSON_CONNECTION */
75504 {
75505 int readin;
75506
75507 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75509 }
75510 real_packet->multiplier = readin;
75511 }
75512#ifdef FREECIV_JSON_CONNECTION
75513 field_addr.name = "reqs_count";
75514#endif /* FREECIV_JSON_CONNECTION */
75515 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
75516 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
75517 }
75518#ifdef FREECIV_JSON_CONNECTION
75519 field_addr.name = "reqs";
75520#endif /* FREECIV_JSON_CONNECTION */
75521 if (real_packet->reqs_count > MAX_NUM_REQS) {
75522 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
75523 }
75524 {
75525 int i;
75526
75527#ifdef FREECIV_JSON_CONNECTION
75528 /* Enter array. */
75529 field_addr.sub_location = plocation_elem_new(0);
75530#endif /* FREECIV_JSON_CONNECTION */
75531
75532 for (i = 0; i < real_packet->reqs_count; i++) {
75533#ifdef FREECIV_JSON_CONNECTION
75534 field_addr.sub_location->number = i;
75535#endif /* FREECIV_JSON_CONNECTION */
75536
75537 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
75539 }
75540 }
75541
75542#ifdef FREECIV_JSON_CONNECTION
75543 /* Exit array. */
75544 FC_FREE(field_addr.sub_location);
75545#endif /* FREECIV_JSON_CONNECTION */
75546 }
75547#endif
75548 log_packet_detailed("packet_ruleset_effect_100: got info about ()");
75549
75550#ifdef FREECIV_DELTA_PROTOCOL
75551 if (NULL == *hash) {
75553 NULL, NULL, NULL, free);
75554 }
75555
75556 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75557 *real_packet = *old;
75558 } else {
75559 log_packet_detailed(" no old info");
75560 memset(real_packet, 0, sizeof(*real_packet));
75561 }
75562
75563 if (BV_ISSET(fields, 0)) {
75564 log_packet_detailed(" got field 'effect_type'");
75565#ifdef FREECIV_JSON_CONNECTION
75566 field_addr.name = "effect_type";
75567#endif /* FREECIV_JSON_CONNECTION */
75568 {
75569 int readin;
75570
75571 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75572 RECEIVE_PACKET_FIELD_ERROR(effect_type);
75573 }
75574 real_packet->effect_type = readin;
75575 }
75576 }
75577 if (BV_ISSET(fields, 1)) {
75578 log_packet_detailed(" got field 'effect_value'");
75579#ifdef FREECIV_JSON_CONNECTION
75580 field_addr.name = "effect_value";
75581#endif /* FREECIV_JSON_CONNECTION */
75582 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
75583 RECEIVE_PACKET_FIELD_ERROR(effect_value);
75584 }
75585 }
75586 real_packet->has_multiplier = BV_ISSET(fields, 2);
75587 if (BV_ISSET(fields, 3)) {
75588 log_packet_detailed(" got field 'multiplier'");
75589#ifdef FREECIV_JSON_CONNECTION
75590 field_addr.name = "multiplier";
75591#endif /* FREECIV_JSON_CONNECTION */
75592 {
75593 int readin;
75594
75595 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
75597 }
75598 real_packet->multiplier = readin;
75599 }
75600 }
75601 if (BV_ISSET(fields, 4)) {
75602 log_packet_detailed(" got field 'reqs_count'");
75603#ifdef FREECIV_JSON_CONNECTION
75604 field_addr.name = "reqs_count";
75605#endif /* FREECIV_JSON_CONNECTION */
75606 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
75607 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
75608 }
75609 }
75610 if (BV_ISSET(fields, 5)) {
75611 log_packet_detailed(" got field 'reqs'");
75612#ifdef FREECIV_JSON_CONNECTION
75613 field_addr.name = "reqs";
75614#endif /* FREECIV_JSON_CONNECTION */
75615 if (real_packet->reqs_count > MAX_NUM_REQS) {
75616 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
75617 }
75618 {
75619 int i;
75620
75621#ifdef FREECIV_JSON_CONNECTION
75622 /* Enter array. */
75623 field_addr.sub_location = plocation_elem_new(0);
75624#endif /* FREECIV_JSON_CONNECTION */
75625
75626 for (i = 0; i < real_packet->reqs_count; i++) {
75627#ifdef FREECIV_JSON_CONNECTION
75628 field_addr.sub_location->number = i;
75629#endif /* FREECIV_JSON_CONNECTION */
75630
75631 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
75633 }
75634 }
75635
75636#ifdef FREECIV_JSON_CONNECTION
75637 /* Exit array. */
75638 FC_FREE(field_addr.sub_location);
75639#endif /* FREECIV_JSON_CONNECTION */
75640 }
75641 }
75642
75643 if (NULL == old) {
75644 old = fc_malloc(sizeof(*old));
75645 *old = *real_packet;
75646 genhash_insert(*hash, old, old);
75647 } else {
75648 *old = *real_packet;
75649 }
75650
75651#endif /* FREECIV_DELTA_PROTOCOL */
75653}
75654
75656{
75657 const struct packet_ruleset_effect *real_packet = packet;
75658 int e;
75659#ifdef FREECIV_DELTA_PROTOCOL
75661 struct packet_ruleset_effect *old;
75662 bool differ;
75663 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EFFECT;
75664#endif /* FREECIV_DELTA_PROTOCOL */
75666#ifdef FREECIV_JSON_CONNECTION
75667 struct plocation field_addr;
75668 {
75672 }
75673#endif /* FREECIV_JSON_CONNECTION */
75674
75675 log_packet_detailed("packet_ruleset_effect_100: sending info about ()");
75676
75677#ifdef FREECIV_DELTA_PROTOCOL
75678 if (NULL == *hash) {
75680 NULL, NULL, NULL, free);
75681 }
75682 BV_CLR_ALL(fields);
75683
75684 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75685 old = fc_malloc(sizeof(*old));
75686 *old = *real_packet;
75687 genhash_insert(*hash, old, old);
75688 memset(old, 0, sizeof(*old));
75689 }
75690 differ = (old->effect_type != real_packet->effect_type);
75691 if (differ) {
75692 BV_SET(fields, 0);
75693 }
75694
75695 differ = (old->effect_value != real_packet->effect_value);
75696 if (differ) {
75697 BV_SET(fields, 1);
75698 }
75699
75700 if (packet->has_multiplier) {
75701 BV_SET(fields, 2);
75702 }
75703
75704 differ = (old->multiplier != real_packet->multiplier);
75705 if (differ) {
75706 BV_SET(fields, 3);
75707 }
75708
75709 differ = (old->reqs_count != real_packet->reqs_count);
75710 if (differ) {
75711 BV_SET(fields, 4);
75712 }
75713
75714 differ = (old->reqs_count != real_packet->reqs_count);
75715 if (!differ) {
75716 int i;
75717
75718 for (i = 0; i < real_packet->reqs_count; i++) {
75719 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
75720 if (differ) {
75721 break;
75722 }
75723 }
75724 }
75725 if (differ) {
75726 BV_SET(fields, 5);
75727 }
75728
75729
75730#ifdef FREECIV_JSON_CONNECTION
75731 field_addr.name = "fields";
75732#endif /* FREECIV_JSON_CONNECTION */
75733 e = 0;
75734 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75735 if (e) {
75736 log_packet_detailed("fields bitvector error detected");
75737 }
75738
75739 if (BV_ISSET(fields, 0)) {
75740 log_packet_detailed(" field 'effect_type' has changed");
75741#ifdef FREECIV_JSON_CONNECTION
75742 field_addr.name = "effect_type";
75743#endif /* FREECIV_JSON_CONNECTION */
75744 e = 0;
75745 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
75746 if (e) {
75747 log_packet_detailed("'effect_type' field error detected");
75748 }
75749 }
75750 if (BV_ISSET(fields, 1)) {
75751 log_packet_detailed(" field 'effect_value' has changed");
75752#ifdef FREECIV_JSON_CONNECTION
75753 field_addr.name = "effect_value";
75754#endif /* FREECIV_JSON_CONNECTION */
75755 e = 0;
75756 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
75757 if (e) {
75758 log_packet_detailed("'effect_value' field error detected");
75759 }
75760 }
75761 /* field 2 is folded into the header */
75762 if (BV_ISSET(fields, 3)) {
75763 log_packet_detailed(" field 'multiplier' has changed");
75764#ifdef FREECIV_JSON_CONNECTION
75765 field_addr.name = "multiplier";
75766#endif /* FREECIV_JSON_CONNECTION */
75767 e = 0;
75768 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
75769 if (e) {
75770 log_packet_detailed("'multiplier' field error detected");
75771 }
75772 }
75773 if (BV_ISSET(fields, 4)) {
75774 log_packet_detailed(" field 'reqs_count' has changed");
75775#ifdef FREECIV_JSON_CONNECTION
75776 field_addr.name = "reqs_count";
75777#endif /* FREECIV_JSON_CONNECTION */
75778 e = 0;
75779 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
75780 if (e) {
75781 log_packet_detailed("'reqs_count' field error detected");
75782 }
75783 }
75784 if (BV_ISSET(fields, 5)) {
75785 log_packet_detailed(" field 'reqs' has changed");
75786#ifdef FREECIV_JSON_CONNECTION
75787 field_addr.name = "reqs";
75788#endif /* FREECIV_JSON_CONNECTION */
75789 e = 0;
75790 {
75791 int i;
75792
75793#ifdef FREECIV_JSON_CONNECTION
75794 /* Create the array. */
75795 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
75796
75797 /* Enter the array. */
75798 field_addr.sub_location = plocation_elem_new(0);
75799#endif /* FREECIV_JSON_CONNECTION */
75800
75801 for (i = 0; i < real_packet->reqs_count; i++) {
75802#ifdef FREECIV_JSON_CONNECTION
75803 /* Next array element. */
75804 field_addr.sub_location->number = i;
75805#endif /* FREECIV_JSON_CONNECTION */
75806
75807 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
75808 }
75809
75810#ifdef FREECIV_JSON_CONNECTION
75811 /* Exit array. */
75812 FC_FREE(field_addr.sub_location);
75813#endif /* FREECIV_JSON_CONNECTION */
75814 }
75815 if (e) {
75816 log_packet_detailed("'reqs' field error detected");
75817 }
75818 }
75819
75820 *old = *real_packet;
75821#endif /* FREECIV_DELTA_PROTOCOL */
75822#ifndef FREECIV_DELTA_PROTOCOL
75823#ifdef FREECIV_JSON_CONNECTION
75824 field_addr.name = "effect_type";
75825#endif /* FREECIV_JSON_CONNECTION */
75826 e = 0;
75827 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
75828 if (e) {
75829 log_packet_detailed("'effect_type' field error detected");
75830 }
75831#ifdef FREECIV_JSON_CONNECTION
75832 field_addr.name = "effect_value";
75833#endif /* FREECIV_JSON_CONNECTION */
75834 e = 0;
75835 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
75836 if (e) {
75837 log_packet_detailed("'effect_value' field error detected");
75838 }
75839#ifdef FREECIV_JSON_CONNECTION
75840 field_addr.name = "has_multiplier";
75841#endif /* FREECIV_JSON_CONNECTION */
75842 e = 0;
75843 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_multiplier);
75844 if (e) {
75845 log_packet_detailed("'has_multiplier' field error detected");
75846 }
75847#ifdef FREECIV_JSON_CONNECTION
75848 field_addr.name = "multiplier";
75849#endif /* FREECIV_JSON_CONNECTION */
75850 e = 0;
75851 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
75852 if (e) {
75853 log_packet_detailed("'multiplier' field error detected");
75854 }
75855#ifdef FREECIV_JSON_CONNECTION
75856 field_addr.name = "reqs_count";
75857#endif /* FREECIV_JSON_CONNECTION */
75858 e = 0;
75859 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
75860 if (e) {
75861 log_packet_detailed("'reqs_count' field error detected");
75862 }
75863#ifdef FREECIV_JSON_CONNECTION
75864 field_addr.name = "reqs";
75865#endif /* FREECIV_JSON_CONNECTION */
75866 e = 0;
75867 {
75868 int i;
75869
75870#ifdef FREECIV_JSON_CONNECTION
75871 /* Create the array. */
75872 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
75873
75874 /* Enter the array. */
75875 field_addr.sub_location = plocation_elem_new(0);
75876#endif /* FREECIV_JSON_CONNECTION */
75877
75878 for (i = 0; i < real_packet->reqs_count; i++) {
75879#ifdef FREECIV_JSON_CONNECTION
75880 /* Next array element. */
75881 field_addr.sub_location->number = i;
75882#endif /* FREECIV_JSON_CONNECTION */
75883
75884 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
75885 }
75886
75887#ifdef FREECIV_JSON_CONNECTION
75888 /* Exit array. */
75889 FC_FREE(field_addr.sub_location);
75890#endif /* FREECIV_JSON_CONNECTION */
75891 }
75892 if (e) {
75893 log_packet_detailed("'reqs' field error detected");
75894 }
75895
75896#endif
75898}
75899
75901{
75902 if (!pc->used) {
75903 log_error("WARNING: trying to send data to the closed connection %s",
75905 return -1;
75906 }
75907 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet != NULL, -1,
75908 "Handler for PACKET_RULESET_EFFECT not installed");
75909 return pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet(pc, packet);
75910}
75911
75912void lsend_packet_ruleset_effect(struct conn_list *dest, const struct packet_ruleset_effect *packet)
75913{
75914 conn_list_iterate(dest, pconn) {
75917}
75918
75919#ifdef FREECIV_DELTA_PROTOCOL
75920#define hash_packet_ruleset_resource_100 hash_const
75921
75922#define cmp_packet_ruleset_resource_100 cmp_const
75923
75925#endif /* FREECIV_DELTA_PROTOCOL */
75926
75928{
75929#ifdef FREECIV_DELTA_PROTOCOL
75931 struct packet_ruleset_resource *old;
75932 struct genhash **hash = pc->phs.received + PACKET_RULESET_RESOURCE;
75933#endif /* FREECIV_DELTA_PROTOCOL */
75935#ifdef FREECIV_JSON_CONNECTION
75936 struct plocation field_addr;
75937 {
75941 }
75942#endif /* FREECIV_JSON_CONNECTION */
75943
75944#ifdef FREECIV_DELTA_PROTOCOL
75945#ifdef FREECIV_JSON_CONNECTION
75946 field_addr.name = "fields";
75947#endif /* FREECIV_JSON_CONNECTION */
75948 DIO_BV_GET(&din, &field_addr, fields);
75949
75950#else /* FREECIV_DELTA_PROTOCOL */
75951#ifdef FREECIV_JSON_CONNECTION
75952 field_addr.name = "id";
75953#endif /* FREECIV_JSON_CONNECTION */
75954 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
75956 }
75957#ifdef FREECIV_JSON_CONNECTION
75958 field_addr.name = "output";
75959#endif /* FREECIV_JSON_CONNECTION */
75960 {
75961 int i;
75962
75963#ifdef FREECIV_JSON_CONNECTION
75964 /* Enter array. */
75965 field_addr.sub_location = plocation_elem_new(0);
75966#endif /* FREECIV_JSON_CONNECTION */
75967
75968 for (i = 0; i < O_LAST; i++) {
75969#ifdef FREECIV_JSON_CONNECTION
75970 field_addr.sub_location->number = i;
75971#endif /* FREECIV_JSON_CONNECTION */
75972
75973 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
75975 }
75976 }
75977
75978#ifdef FREECIV_JSON_CONNECTION
75979 /* Exit array. */
75980 FC_FREE(field_addr.sub_location);
75981#endif /* FREECIV_JSON_CONNECTION */
75982 }
75983#endif
75984 log_packet_detailed("packet_ruleset_resource_100: got info about ()");
75985
75986#ifdef FREECIV_DELTA_PROTOCOL
75987 if (NULL == *hash) {
75989 NULL, NULL, NULL, free);
75990 }
75991
75992 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75993 *real_packet = *old;
75994 } else {
75995 log_packet_detailed(" no old info");
75996 memset(real_packet, 0, sizeof(*real_packet));
75997 }
75998
75999 if (BV_ISSET(fields, 0)) {
76000 log_packet_detailed(" got field 'id'");
76001#ifdef FREECIV_JSON_CONNECTION
76002 field_addr.name = "id";
76003#endif /* FREECIV_JSON_CONNECTION */
76004 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
76006 }
76007 }
76008 if (BV_ISSET(fields, 1)) {
76009 log_packet_detailed(" got field 'output'");
76010#ifdef FREECIV_JSON_CONNECTION
76011 field_addr.name = "output";
76012#endif /* FREECIV_JSON_CONNECTION */
76013 {
76014 int i;
76015
76016#ifdef FREECIV_JSON_CONNECTION
76017 /* Enter array. */
76018 field_addr.sub_location = plocation_elem_new(0);
76019#endif /* FREECIV_JSON_CONNECTION */
76020
76021 for (i = 0; i < O_LAST; i++) {
76022#ifdef FREECIV_JSON_CONNECTION
76023 field_addr.sub_location->number = i;
76024#endif /* FREECIV_JSON_CONNECTION */
76025
76026 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
76028 }
76029 }
76030
76031#ifdef FREECIV_JSON_CONNECTION
76032 /* Exit array. */
76033 FC_FREE(field_addr.sub_location);
76034#endif /* FREECIV_JSON_CONNECTION */
76035 }
76036 }
76037
76038 if (NULL == old) {
76039 old = fc_malloc(sizeof(*old));
76040 *old = *real_packet;
76041 genhash_insert(*hash, old, old);
76042 } else {
76043 *old = *real_packet;
76044 }
76045
76046#endif /* FREECIV_DELTA_PROTOCOL */
76048}
76049
76051{
76052 const struct packet_ruleset_resource *real_packet = packet;
76053 int e;
76054#ifdef FREECIV_DELTA_PROTOCOL
76056 struct packet_ruleset_resource *old;
76057 bool differ;
76058 struct genhash **hash = pc->phs.sent + PACKET_RULESET_RESOURCE;
76059#endif /* FREECIV_DELTA_PROTOCOL */
76061#ifdef FREECIV_JSON_CONNECTION
76062 struct plocation field_addr;
76063 {
76067 }
76068#endif /* FREECIV_JSON_CONNECTION */
76069
76070 log_packet_detailed("packet_ruleset_resource_100: sending info about ()");
76071
76072#ifdef FREECIV_DELTA_PROTOCOL
76073 if (NULL == *hash) {
76075 NULL, NULL, NULL, free);
76076 }
76077 BV_CLR_ALL(fields);
76078
76079 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76080 old = fc_malloc(sizeof(*old));
76081 *old = *real_packet;
76082 genhash_insert(*hash, old, old);
76083 memset(old, 0, sizeof(*old));
76084 }
76085 differ = (old->id != real_packet->id);
76086 if (differ) {
76087 BV_SET(fields, 0);
76088 }
76089
76090 differ = FALSE;
76091 {
76092 int i;
76093
76094 for (i = 0; i < O_LAST; i++) {
76095 differ = (old->output[i] != real_packet->output[i]);
76096 if (differ) {
76097 break;
76098 }
76099 }
76100 }
76101 if (differ) {
76102 BV_SET(fields, 1);
76103 }
76104
76105
76106#ifdef FREECIV_JSON_CONNECTION
76107 field_addr.name = "fields";
76108#endif /* FREECIV_JSON_CONNECTION */
76109 e = 0;
76110 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76111 if (e) {
76112 log_packet_detailed("fields bitvector error detected");
76113 }
76114
76115 if (BV_ISSET(fields, 0)) {
76116 log_packet_detailed(" field 'id' has changed");
76117#ifdef FREECIV_JSON_CONNECTION
76118 field_addr.name = "id";
76119#endif /* FREECIV_JSON_CONNECTION */
76120 e = 0;
76121 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76122 if (e) {
76123 log_packet_detailed("'id' field error detected");
76124 }
76125 }
76126 if (BV_ISSET(fields, 1)) {
76127 log_packet_detailed(" field 'output' has changed");
76128#ifdef FREECIV_JSON_CONNECTION
76129 field_addr.name = "output";
76130#endif /* FREECIV_JSON_CONNECTION */
76131 e = 0;
76132 {
76133 int i;
76134
76135#ifdef FREECIV_JSON_CONNECTION
76136 /* Create the array. */
76137 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
76138
76139 /* Enter the array. */
76140 field_addr.sub_location = plocation_elem_new(0);
76141#endif /* FREECIV_JSON_CONNECTION */
76142
76143 for (i = 0; i < O_LAST; i++) {
76144#ifdef FREECIV_JSON_CONNECTION
76145 /* Next array element. */
76146 field_addr.sub_location->number = i;
76147#endif /* FREECIV_JSON_CONNECTION */
76148
76149 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
76150 }
76151
76152#ifdef FREECIV_JSON_CONNECTION
76153 /* Exit array. */
76154 FC_FREE(field_addr.sub_location);
76155#endif /* FREECIV_JSON_CONNECTION */
76156 }
76157 if (e) {
76158 log_packet_detailed("'output' field error detected");
76159 }
76160 }
76161
76162 *old = *real_packet;
76163#endif /* FREECIV_DELTA_PROTOCOL */
76164#ifndef FREECIV_DELTA_PROTOCOL
76165#ifdef FREECIV_JSON_CONNECTION
76166 field_addr.name = "id";
76167#endif /* FREECIV_JSON_CONNECTION */
76168 e = 0;
76169 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
76170 if (e) {
76171 log_packet_detailed("'id' field error detected");
76172 }
76173#ifdef FREECIV_JSON_CONNECTION
76174 field_addr.name = "output";
76175#endif /* FREECIV_JSON_CONNECTION */
76176 e = 0;
76177 {
76178 int i;
76179
76180#ifdef FREECIV_JSON_CONNECTION
76181 /* Create the array. */
76182 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
76183
76184 /* Enter the array. */
76185 field_addr.sub_location = plocation_elem_new(0);
76186#endif /* FREECIV_JSON_CONNECTION */
76187
76188 for (i = 0; i < O_LAST; i++) {
76189#ifdef FREECIV_JSON_CONNECTION
76190 /* Next array element. */
76191 field_addr.sub_location->number = i;
76192#endif /* FREECIV_JSON_CONNECTION */
76193
76194 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
76195 }
76196
76197#ifdef FREECIV_JSON_CONNECTION
76198 /* Exit array. */
76199 FC_FREE(field_addr.sub_location);
76200#endif /* FREECIV_JSON_CONNECTION */
76201 }
76202 if (e) {
76203 log_packet_detailed("'output' field error detected");
76204 }
76205
76206#endif
76208}
76209
76211{
76212 if (!pc->used) {
76213 log_error("WARNING: trying to send data to the closed connection %s",
76215 return -1;
76216 }
76217 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet != NULL, -1,
76218 "Handler for PACKET_RULESET_RESOURCE not installed");
76219 return pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet(pc, packet);
76220}
76221
76223{
76224 conn_list_iterate(dest, pconn) {
76227}
76228
76229#ifdef FREECIV_DELTA_PROTOCOL
76230#define hash_packet_scenario_info_100 hash_const
76231
76232#define cmp_packet_scenario_info_100 cmp_const
76233
76235#endif /* FREECIV_DELTA_PROTOCOL */
76236
76238{
76239#ifdef FREECIV_DELTA_PROTOCOL
76241 struct packet_scenario_info *old;
76242 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_INFO;
76243#endif /* FREECIV_DELTA_PROTOCOL */
76245#ifdef FREECIV_JSON_CONNECTION
76246 struct plocation field_addr;
76247 {
76251 }
76252#endif /* FREECIV_JSON_CONNECTION */
76253
76254#ifdef FREECIV_DELTA_PROTOCOL
76255#ifdef FREECIV_JSON_CONNECTION
76256 field_addr.name = "fields";
76257#endif /* FREECIV_JSON_CONNECTION */
76258 DIO_BV_GET(&din, &field_addr, fields);
76259
76260#else /* FREECIV_DELTA_PROTOCOL */
76261#ifdef FREECIV_JSON_CONNECTION
76262 field_addr.name = "is_scenario";
76263#endif /* FREECIV_JSON_CONNECTION */
76264 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_scenario)) {
76265 RECEIVE_PACKET_FIELD_ERROR(is_scenario);
76266 }
76267#ifdef FREECIV_JSON_CONNECTION
76268 field_addr.name = "name";
76269#endif /* FREECIV_JSON_CONNECTION */
76270 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
76272 }
76273#ifdef FREECIV_JSON_CONNECTION
76274 field_addr.name = "authors";
76275#endif /* FREECIV_JSON_CONNECTION */
76276 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
76278 }
76279#ifdef FREECIV_JSON_CONNECTION
76280 field_addr.name = "players";
76281#endif /* FREECIV_JSON_CONNECTION */
76282 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->players)) {
76284 }
76285#ifdef FREECIV_JSON_CONNECTION
76286 field_addr.name = "startpos_nations";
76287#endif /* FREECIV_JSON_CONNECTION */
76288 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
76289 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
76290 }
76291#ifdef FREECIV_JSON_CONNECTION
76292 field_addr.name = "save_random";
76293#endif /* FREECIV_JSON_CONNECTION */
76294 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->save_random)) {
76295 RECEIVE_PACKET_FIELD_ERROR(save_random);
76296 }
76297#ifdef FREECIV_JSON_CONNECTION
76298 field_addr.name = "prevent_new_cities";
76299#endif /* FREECIV_JSON_CONNECTION */
76300 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
76301 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
76302 }
76303#ifdef FREECIV_JSON_CONNECTION
76304 field_addr.name = "lake_flooding";
76305#endif /* FREECIV_JSON_CONNECTION */
76306 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
76307 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
76308 }
76309#ifdef FREECIV_JSON_CONNECTION
76310 field_addr.name = "handmade";
76311#endif /* FREECIV_JSON_CONNECTION */
76312 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->handmade)) {
76314 }
76315#ifdef FREECIV_JSON_CONNECTION
76316 field_addr.name = "allow_ai_type_fallback";
76317#endif /* FREECIV_JSON_CONNECTION */
76318 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->allow_ai_type_fallback)) {
76319 RECEIVE_PACKET_FIELD_ERROR(allow_ai_type_fallback);
76320 }
76321#ifdef FREECIV_JSON_CONNECTION
76322 field_addr.name = "ruleset_locked";
76323#endif /* FREECIV_JSON_CONNECTION */
76324 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
76325 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
76326 }
76327#ifdef FREECIV_JSON_CONNECTION
76328 field_addr.name = "datafile";
76329#endif /* FREECIV_JSON_CONNECTION */
76330 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
76332 }
76333#ifdef FREECIV_JSON_CONNECTION
76334 field_addr.name = "have_resources";
76335#endif /* FREECIV_JSON_CONNECTION */
76336 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->have_resources)) {
76337 RECEIVE_PACKET_FIELD_ERROR(have_resources);
76338 }
76339#ifdef FREECIV_JSON_CONNECTION
76340 field_addr.name = "req_caps";
76341#endif /* FREECIV_JSON_CONNECTION */
76342 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
76344 }
76345#endif
76346 log_packet_detailed("packet_scenario_info_100: got info about ()");
76347
76348#ifdef FREECIV_DELTA_PROTOCOL
76349 if (NULL == *hash) {
76351 NULL, NULL, NULL, free);
76352 }
76353
76354 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76355 *real_packet = *old;
76356 } else {
76357 log_packet_detailed(" no old info");
76358 memset(real_packet, 0, sizeof(*real_packet));
76359 }
76360
76361 real_packet->is_scenario = BV_ISSET(fields, 0);
76362 if (BV_ISSET(fields, 1)) {
76363 log_packet_detailed(" got field 'name'");
76364#ifdef FREECIV_JSON_CONNECTION
76365 field_addr.name = "name";
76366#endif /* FREECIV_JSON_CONNECTION */
76367 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
76369 }
76370 }
76371 if (BV_ISSET(fields, 2)) {
76372 log_packet_detailed(" got field 'authors'");
76373#ifdef FREECIV_JSON_CONNECTION
76374 field_addr.name = "authors";
76375#endif /* FREECIV_JSON_CONNECTION */
76376 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
76378 }
76379 }
76380 real_packet->players = BV_ISSET(fields, 3);
76381 real_packet->startpos_nations = BV_ISSET(fields, 4);
76382 real_packet->save_random = BV_ISSET(fields, 5);
76383 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
76384 real_packet->lake_flooding = BV_ISSET(fields, 7);
76385 real_packet->handmade = BV_ISSET(fields, 8);
76386 real_packet->allow_ai_type_fallback = BV_ISSET(fields, 9);
76387 real_packet->ruleset_locked = BV_ISSET(fields, 10);
76388 if (BV_ISSET(fields, 11)) {
76389 log_packet_detailed(" got field 'datafile'");
76390#ifdef FREECIV_JSON_CONNECTION
76391 field_addr.name = "datafile";
76392#endif /* FREECIV_JSON_CONNECTION */
76393 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
76395 }
76396 }
76397 real_packet->have_resources = BV_ISSET(fields, 12);
76398 if (BV_ISSET(fields, 13)) {
76399 log_packet_detailed(" got field 'req_caps'");
76400#ifdef FREECIV_JSON_CONNECTION
76401 field_addr.name = "req_caps";
76402#endif /* FREECIV_JSON_CONNECTION */
76403 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
76405 }
76406 }
76407
76408 if (NULL == old) {
76409 old = fc_malloc(sizeof(*old));
76410 *old = *real_packet;
76411 genhash_insert(*hash, old, old);
76412 } else {
76413 *old = *real_packet;
76414 }
76415
76416#endif /* FREECIV_DELTA_PROTOCOL */
76418}
76419
76420static int send_packet_scenario_info_100(struct connection *pc, const struct packet_scenario_info *packet)
76421{
76422 const struct packet_scenario_info *real_packet = packet;
76423 int e;
76424#ifdef FREECIV_DELTA_PROTOCOL
76426 struct packet_scenario_info *old;
76427 bool differ;
76428 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_INFO;
76429#endif /* FREECIV_DELTA_PROTOCOL */
76431#ifdef FREECIV_JSON_CONNECTION
76432 struct plocation field_addr;
76433 {
76437 }
76438#endif /* FREECIV_JSON_CONNECTION */
76439
76440 log_packet_detailed("packet_scenario_info_100: sending info about ()");
76441
76442#ifdef FREECIV_DELTA_PROTOCOL
76443 if (NULL == *hash) {
76445 NULL, NULL, NULL, free);
76446 }
76447 BV_CLR_ALL(fields);
76448
76449 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76450 old = fc_malloc(sizeof(*old));
76451 *old = *real_packet;
76452 genhash_insert(*hash, old, old);
76453 memset(old, 0, sizeof(*old));
76454 }
76455 if (packet->is_scenario) {
76456 BV_SET(fields, 0);
76457 }
76458
76459 differ = (strcmp(old->name, real_packet->name) != 0);
76460 if (differ) {
76461 BV_SET(fields, 1);
76462 }
76463
76464 differ = (strcmp(old->authors, real_packet->authors) != 0);
76465 if (differ) {
76466 BV_SET(fields, 2);
76467 }
76468
76469 if (packet->players) {
76470 BV_SET(fields, 3);
76471 }
76472
76473 if (packet->startpos_nations) {
76474 BV_SET(fields, 4);
76475 }
76476
76477 if (packet->save_random) {
76478 BV_SET(fields, 5);
76479 }
76480
76481 if (packet->prevent_new_cities) {
76482 BV_SET(fields, 6);
76483 }
76484
76485 if (packet->lake_flooding) {
76486 BV_SET(fields, 7);
76487 }
76488
76489 if (packet->handmade) {
76490 BV_SET(fields, 8);
76491 }
76492
76493 if (packet->allow_ai_type_fallback) {
76494 BV_SET(fields, 9);
76495 }
76496
76497 if (packet->ruleset_locked) {
76498 BV_SET(fields, 10);
76499 }
76500
76501 differ = (strcmp(old->datafile, real_packet->datafile) != 0);
76502 if (differ) {
76503 BV_SET(fields, 11);
76504 }
76505
76506 if (packet->have_resources) {
76507 BV_SET(fields, 12);
76508 }
76509
76510 differ = (strcmp(old->req_caps, real_packet->req_caps) != 0);
76511 if (differ) {
76512 BV_SET(fields, 13);
76513 }
76514
76515
76516#ifdef FREECIV_JSON_CONNECTION
76517 field_addr.name = "fields";
76518#endif /* FREECIV_JSON_CONNECTION */
76519 e = 0;
76520 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76521 if (e) {
76522 log_packet_detailed("fields bitvector error detected");
76523 }
76524
76525 /* field 0 is folded into the header */
76526 if (BV_ISSET(fields, 1)) {
76527 log_packet_detailed(" field 'name' has changed");
76528#ifdef FREECIV_JSON_CONNECTION
76529 field_addr.name = "name";
76530#endif /* FREECIV_JSON_CONNECTION */
76531 e = 0;
76532 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
76533 if (e) {
76534 log_packet_detailed("'name' field error detected");
76535 }
76536 }
76537 if (BV_ISSET(fields, 2)) {
76538 log_packet_detailed(" field 'authors' has changed");
76539#ifdef FREECIV_JSON_CONNECTION
76540 field_addr.name = "authors";
76541#endif /* FREECIV_JSON_CONNECTION */
76542 e = 0;
76543 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
76544 if (e) {
76545 log_packet_detailed("'authors' field error detected");
76546 }
76547 }
76548 /* field 3 is folded into the header */
76549 /* field 4 is folded into the header */
76550 /* field 5 is folded into the header */
76551 /* field 6 is folded into the header */
76552 /* field 7 is folded into the header */
76553 /* field 8 is folded into the header */
76554 /* field 9 is folded into the header */
76555 /* field 10 is folded into the header */
76556 if (BV_ISSET(fields, 11)) {
76557 log_packet_detailed(" field 'datafile' has changed");
76558#ifdef FREECIV_JSON_CONNECTION
76559 field_addr.name = "datafile";
76560#endif /* FREECIV_JSON_CONNECTION */
76561 e = 0;
76562 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
76563 if (e) {
76564 log_packet_detailed("'datafile' field error detected");
76565 }
76566 }
76567 /* field 12 is folded into the header */
76568 if (BV_ISSET(fields, 13)) {
76569 log_packet_detailed(" field 'req_caps' has changed");
76570#ifdef FREECIV_JSON_CONNECTION
76571 field_addr.name = "req_caps";
76572#endif /* FREECIV_JSON_CONNECTION */
76573 e = 0;
76574 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
76575 if (e) {
76576 log_packet_detailed("'req_caps' field error detected");
76577 }
76578 }
76579
76580 *old = *real_packet;
76581#endif /* FREECIV_DELTA_PROTOCOL */
76582#ifndef FREECIV_DELTA_PROTOCOL
76583#ifdef FREECIV_JSON_CONNECTION
76584 field_addr.name = "is_scenario";
76585#endif /* FREECIV_JSON_CONNECTION */
76586 e = 0;
76587 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_scenario);
76588 if (e) {
76589 log_packet_detailed("'is_scenario' field error detected");
76590 }
76591#ifdef FREECIV_JSON_CONNECTION
76592 field_addr.name = "name";
76593#endif /* FREECIV_JSON_CONNECTION */
76594 e = 0;
76595 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
76596 if (e) {
76597 log_packet_detailed("'name' field error detected");
76598 }
76599#ifdef FREECIV_JSON_CONNECTION
76600 field_addr.name = "authors";
76601#endif /* FREECIV_JSON_CONNECTION */
76602 e = 0;
76603 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
76604 if (e) {
76605 log_packet_detailed("'authors' field error detected");
76606 }
76607#ifdef FREECIV_JSON_CONNECTION
76608 field_addr.name = "players";
76609#endif /* FREECIV_JSON_CONNECTION */
76610 e = 0;
76611 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->players);
76612 if (e) {
76613 log_packet_detailed("'players' field error detected");
76614 }
76615#ifdef FREECIV_JSON_CONNECTION
76616 field_addr.name = "startpos_nations";
76617#endif /* FREECIV_JSON_CONNECTION */
76618 e = 0;
76619 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
76620 if (e) {
76621 log_packet_detailed("'startpos_nations' field error detected");
76622 }
76623#ifdef FREECIV_JSON_CONNECTION
76624 field_addr.name = "save_random";
76625#endif /* FREECIV_JSON_CONNECTION */
76626 e = 0;
76627 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->save_random);
76628 if (e) {
76629 log_packet_detailed("'save_random' field error detected");
76630 }
76631#ifdef FREECIV_JSON_CONNECTION
76632 field_addr.name = "prevent_new_cities";
76633#endif /* FREECIV_JSON_CONNECTION */
76634 e = 0;
76635 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
76636 if (e) {
76637 log_packet_detailed("'prevent_new_cities' field error detected");
76638 }
76639#ifdef FREECIV_JSON_CONNECTION
76640 field_addr.name = "lake_flooding";
76641#endif /* FREECIV_JSON_CONNECTION */
76642 e = 0;
76643 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
76644 if (e) {
76645 log_packet_detailed("'lake_flooding' field error detected");
76646 }
76647#ifdef FREECIV_JSON_CONNECTION
76648 field_addr.name = "handmade";
76649#endif /* FREECIV_JSON_CONNECTION */
76650 e = 0;
76651 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->handmade);
76652 if (e) {
76653 log_packet_detailed("'handmade' field error detected");
76654 }
76655#ifdef FREECIV_JSON_CONNECTION
76656 field_addr.name = "allow_ai_type_fallback";
76657#endif /* FREECIV_JSON_CONNECTION */
76658 e = 0;
76659 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->allow_ai_type_fallback);
76660 if (e) {
76661 log_packet_detailed("'allow_ai_type_fallback' field error detected");
76662 }
76663#ifdef FREECIV_JSON_CONNECTION
76664 field_addr.name = "ruleset_locked";
76665#endif /* FREECIV_JSON_CONNECTION */
76666 e = 0;
76667 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
76668 if (e) {
76669 log_packet_detailed("'ruleset_locked' field error detected");
76670 }
76671#ifdef FREECIV_JSON_CONNECTION
76672 field_addr.name = "datafile";
76673#endif /* FREECIV_JSON_CONNECTION */
76674 e = 0;
76675 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
76676 if (e) {
76677 log_packet_detailed("'datafile' field error detected");
76678 }
76679#ifdef FREECIV_JSON_CONNECTION
76680 field_addr.name = "have_resources";
76681#endif /* FREECIV_JSON_CONNECTION */
76682 e = 0;
76683 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->have_resources);
76684 if (e) {
76685 log_packet_detailed("'have_resources' field error detected");
76686 }
76687#ifdef FREECIV_JSON_CONNECTION
76688 field_addr.name = "req_caps";
76689#endif /* FREECIV_JSON_CONNECTION */
76690 e = 0;
76691 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
76692 if (e) {
76693 log_packet_detailed("'req_caps' field error detected");
76694 }
76695
76696#endif
76698}
76699
76701{
76702 if (!pc->used) {
76703 log_error("WARNING: trying to send data to the closed connection %s",
76705 return -1;
76706 }
76707 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet != NULL, -1,
76708 "Handler for PACKET_SCENARIO_INFO not installed");
76709 return pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet(pc, packet);
76710}
76711
76712#ifdef FREECIV_DELTA_PROTOCOL
76713#define hash_packet_scenario_description_100 hash_const
76714
76715#define cmp_packet_scenario_description_100 cmp_const
76716
76718#endif /* FREECIV_DELTA_PROTOCOL */
76719
76721{
76722#ifdef FREECIV_DELTA_PROTOCOL
76724 struct packet_scenario_description *old;
76725 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_DESCRIPTION;
76726#endif /* FREECIV_DELTA_PROTOCOL */
76728#ifdef FREECIV_JSON_CONNECTION
76729 struct plocation field_addr;
76730 {
76734 }
76735#endif /* FREECIV_JSON_CONNECTION */
76736
76737#ifdef FREECIV_DELTA_PROTOCOL
76738#ifdef FREECIV_JSON_CONNECTION
76739 field_addr.name = "fields";
76740#endif /* FREECIV_JSON_CONNECTION */
76741 DIO_BV_GET(&din, &field_addr, fields);
76742
76743#else /* FREECIV_DELTA_PROTOCOL */
76744#ifdef FREECIV_JSON_CONNECTION
76745 field_addr.name = "description";
76746#endif /* FREECIV_JSON_CONNECTION */
76747 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
76748 RECEIVE_PACKET_FIELD_ERROR(description);
76749 }
76750#endif
76751 log_packet_detailed("packet_scenario_description_100: got info about ()");
76752
76753#ifdef FREECIV_DELTA_PROTOCOL
76754 if (NULL == *hash) {
76756 NULL, NULL, NULL, free);
76757 }
76758
76759 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76760 *real_packet = *old;
76761 } else {
76762 log_packet_detailed(" no old info");
76763 memset(real_packet, 0, sizeof(*real_packet));
76764 }
76765
76766 if (BV_ISSET(fields, 0)) {
76767 log_packet_detailed(" got field 'description'");
76768#ifdef FREECIV_JSON_CONNECTION
76769 field_addr.name = "description";
76770#endif /* FREECIV_JSON_CONNECTION */
76771 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
76772 RECEIVE_PACKET_FIELD_ERROR(description);
76773 }
76774 }
76775
76776 if (NULL == old) {
76777 old = fc_malloc(sizeof(*old));
76778 *old = *real_packet;
76779 genhash_insert(*hash, old, old);
76780 } else {
76781 *old = *real_packet;
76782 }
76783
76784#endif /* FREECIV_DELTA_PROTOCOL */
76786}
76787
76789{
76790 const struct packet_scenario_description *real_packet = packet;
76791 int e;
76792#ifdef FREECIV_DELTA_PROTOCOL
76794 struct packet_scenario_description *old;
76795 bool differ;
76796 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_DESCRIPTION;
76797#endif /* FREECIV_DELTA_PROTOCOL */
76799#ifdef FREECIV_JSON_CONNECTION
76800 struct plocation field_addr;
76801 {
76805 }
76806#endif /* FREECIV_JSON_CONNECTION */
76807
76808 log_packet_detailed("packet_scenario_description_100: sending info about ()");
76809
76810#ifdef FREECIV_DELTA_PROTOCOL
76811 if (NULL == *hash) {
76813 NULL, NULL, NULL, free);
76814 }
76815 BV_CLR_ALL(fields);
76816
76817 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76818 old = fc_malloc(sizeof(*old));
76819 *old = *real_packet;
76820 genhash_insert(*hash, old, old);
76821 memset(old, 0, sizeof(*old));
76822 }
76823 differ = (strcmp(old->description, real_packet->description) != 0);
76824 if (differ) {
76825 BV_SET(fields, 0);
76826 }
76827
76828
76829#ifdef FREECIV_JSON_CONNECTION
76830 field_addr.name = "fields";
76831#endif /* FREECIV_JSON_CONNECTION */
76832 e = 0;
76833 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76834 if (e) {
76835 log_packet_detailed("fields bitvector error detected");
76836 }
76837
76838 if (BV_ISSET(fields, 0)) {
76839 log_packet_detailed(" field 'description' has changed");
76840#ifdef FREECIV_JSON_CONNECTION
76841 field_addr.name = "description";
76842#endif /* FREECIV_JSON_CONNECTION */
76843 e = 0;
76844 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
76845 if (e) {
76846 log_packet_detailed("'description' field error detected");
76847 }
76848 }
76849
76850 *old = *real_packet;
76851#endif /* FREECIV_DELTA_PROTOCOL */
76852#ifndef FREECIV_DELTA_PROTOCOL
76853#ifdef FREECIV_JSON_CONNECTION
76854 field_addr.name = "description";
76855#endif /* FREECIV_JSON_CONNECTION */
76856 e = 0;
76857 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
76858 if (e) {
76859 log_packet_detailed("'description' field error detected");
76860 }
76861
76862#endif
76864}
76865
76867{
76868 if (!pc->used) {
76869 log_error("WARNING: trying to send data to the closed connection %s",
76871 return -1;
76872 }
76873 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet != NULL, -1,
76874 "Handler for PACKET_SCENARIO_DESCRIPTION not installed");
76875 return pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet(pc, packet);
76876}
76877
76878#ifdef FREECIV_DELTA_PROTOCOL
76879#define hash_packet_save_scenario_100 hash_const
76880
76881#define cmp_packet_save_scenario_100 cmp_const
76882
76884#endif /* FREECIV_DELTA_PROTOCOL */
76885
76887{
76888#ifdef FREECIV_DELTA_PROTOCOL
76890 struct packet_save_scenario *old;
76891 struct genhash **hash = pc->phs.received + PACKET_SAVE_SCENARIO;
76892#endif /* FREECIV_DELTA_PROTOCOL */
76894#ifdef FREECIV_JSON_CONNECTION
76895 struct plocation field_addr;
76896 {
76900 }
76901#endif /* FREECIV_JSON_CONNECTION */
76902
76903#ifdef FREECIV_DELTA_PROTOCOL
76904#ifdef FREECIV_JSON_CONNECTION
76905 field_addr.name = "fields";
76906#endif /* FREECIV_JSON_CONNECTION */
76907 DIO_BV_GET(&din, &field_addr, fields);
76908
76909#else /* FREECIV_DELTA_PROTOCOL */
76910#ifdef FREECIV_JSON_CONNECTION
76911 field_addr.name = "name";
76912#endif /* FREECIV_JSON_CONNECTION */
76913 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
76915 }
76916#endif
76917 log_packet_detailed("packet_save_scenario_100: got info about ()");
76918
76919#ifdef FREECIV_DELTA_PROTOCOL
76920 if (NULL == *hash) {
76922 NULL, NULL, NULL, free);
76923 }
76924
76925 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76926 *real_packet = *old;
76927 } else {
76928 log_packet_detailed(" no old info");
76929 memset(real_packet, 0, sizeof(*real_packet));
76930 }
76931
76932 if (BV_ISSET(fields, 0)) {
76933 log_packet_detailed(" got field 'name'");
76934#ifdef FREECIV_JSON_CONNECTION
76935 field_addr.name = "name";
76936#endif /* FREECIV_JSON_CONNECTION */
76937 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
76939 }
76940 }
76941
76942 if (NULL == old) {
76943 old = fc_malloc(sizeof(*old));
76944 *old = *real_packet;
76945 genhash_insert(*hash, old, old);
76946 } else {
76947 *old = *real_packet;
76948 }
76949
76950#endif /* FREECIV_DELTA_PROTOCOL */
76952}
76953
76954static int send_packet_save_scenario_100(struct connection *pc, const struct packet_save_scenario *packet)
76955{
76956 const struct packet_save_scenario *real_packet = packet;
76957 int e;
76958#ifdef FREECIV_DELTA_PROTOCOL
76960 struct packet_save_scenario *old;
76961 bool differ;
76962 struct genhash **hash = pc->phs.sent + PACKET_SAVE_SCENARIO;
76963#endif /* FREECIV_DELTA_PROTOCOL */
76965#ifdef FREECIV_JSON_CONNECTION
76966 struct plocation field_addr;
76967 {
76971 }
76972#endif /* FREECIV_JSON_CONNECTION */
76973
76974 log_packet_detailed("packet_save_scenario_100: sending info about ()");
76975
76976#ifdef FREECIV_DELTA_PROTOCOL
76977 if (NULL == *hash) {
76979 NULL, NULL, NULL, free);
76980 }
76981 BV_CLR_ALL(fields);
76982
76983 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76984 old = fc_malloc(sizeof(*old));
76985 *old = *real_packet;
76986 genhash_insert(*hash, old, old);
76987 memset(old, 0, sizeof(*old));
76988 }
76989 differ = (strcmp(old->name, real_packet->name) != 0);
76990 if (differ) {
76991 BV_SET(fields, 0);
76992 }
76993
76994
76995#ifdef FREECIV_JSON_CONNECTION
76996 field_addr.name = "fields";
76997#endif /* FREECIV_JSON_CONNECTION */
76998 e = 0;
76999 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77000 if (e) {
77001 log_packet_detailed("fields bitvector error detected");
77002 }
77003
77004 if (BV_ISSET(fields, 0)) {
77005 log_packet_detailed(" field 'name' has changed");
77006#ifdef FREECIV_JSON_CONNECTION
77007 field_addr.name = "name";
77008#endif /* FREECIV_JSON_CONNECTION */
77009 e = 0;
77010 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
77011 if (e) {
77012 log_packet_detailed("'name' field error detected");
77013 }
77014 }
77015
77016 *old = *real_packet;
77017#endif /* FREECIV_DELTA_PROTOCOL */
77018#ifndef FREECIV_DELTA_PROTOCOL
77019#ifdef FREECIV_JSON_CONNECTION
77020 field_addr.name = "name";
77021#endif /* FREECIV_JSON_CONNECTION */
77022 e = 0;
77023 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
77024 if (e) {
77025 log_packet_detailed("'name' field error detected");
77026 }
77027
77028#endif
77030}
77031
77033{
77034 if (!pc->used) {
77035 log_error("WARNING: trying to send data to the closed connection %s",
77037 return -1;
77038 }
77039 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet != NULL, -1,
77040 "Handler for PACKET_SAVE_SCENARIO not installed");
77041 return pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet(pc, packet);
77042}
77043
77045{
77046 struct packet_save_scenario packet, *real_packet = &packet;
77047
77048 sz_strlcpy(real_packet->name, name);
77049
77051}
77052
77053#ifdef FREECIV_DELTA_PROTOCOL
77054#define hash_packet_vote_new_100 hash_const
77055
77056#define cmp_packet_vote_new_100 cmp_const
77057
77059#endif /* FREECIV_DELTA_PROTOCOL */
77060
77062{
77063#ifdef FREECIV_DELTA_PROTOCOL
77065 struct packet_vote_new *old;
77066 struct genhash **hash = pc->phs.received + PACKET_VOTE_NEW;
77067#endif /* FREECIV_DELTA_PROTOCOL */
77069#ifdef FREECIV_JSON_CONNECTION
77070 struct plocation field_addr;
77071 {
77075 }
77076#endif /* FREECIV_JSON_CONNECTION */
77077
77078#ifdef FREECIV_DELTA_PROTOCOL
77079#ifdef FREECIV_JSON_CONNECTION
77080 field_addr.name = "fields";
77081#endif /* FREECIV_JSON_CONNECTION */
77082 DIO_BV_GET(&din, &field_addr, fields);
77083
77084#else /* FREECIV_DELTA_PROTOCOL */
77085#ifdef FREECIV_JSON_CONNECTION
77086 field_addr.name = "vote_no";
77087#endif /* FREECIV_JSON_CONNECTION */
77088 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
77090 }
77091#ifdef FREECIV_JSON_CONNECTION
77092 field_addr.name = "user";
77093#endif /* FREECIV_JSON_CONNECTION */
77094 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
77096 }
77097#ifdef FREECIV_JSON_CONNECTION
77098 field_addr.name = "desc";
77099#endif /* FREECIV_JSON_CONNECTION */
77100 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
77102 }
77103#ifdef FREECIV_JSON_CONNECTION
77104 field_addr.name = "percent_required";
77105#endif /* FREECIV_JSON_CONNECTION */
77106 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
77107 RECEIVE_PACKET_FIELD_ERROR(percent_required);
77108 }
77109#ifdef FREECIV_JSON_CONNECTION
77110 field_addr.name = "flags";
77111#endif /* FREECIV_JSON_CONNECTION */
77112 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
77114 }
77115#endif
77116 log_packet_detailed("packet_vote_new_100: got info about ()");
77117
77118#ifdef FREECIV_DELTA_PROTOCOL
77119 if (NULL == *hash) {
77121 NULL, NULL, NULL, free);
77122 }
77123
77124 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77125 *real_packet = *old;
77126 } else {
77127 log_packet_detailed(" no old info");
77128 memset(real_packet, 0, sizeof(*real_packet));
77129 }
77130
77131 if (BV_ISSET(fields, 0)) {
77132 log_packet_detailed(" got field 'vote_no'");
77133#ifdef FREECIV_JSON_CONNECTION
77134 field_addr.name = "vote_no";
77135#endif /* FREECIV_JSON_CONNECTION */
77136 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
77138 }
77139 }
77140 if (BV_ISSET(fields, 1)) {
77141 log_packet_detailed(" got field 'user'");
77142#ifdef FREECIV_JSON_CONNECTION
77143 field_addr.name = "user";
77144#endif /* FREECIV_JSON_CONNECTION */
77145 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
77147 }
77148 }
77149 if (BV_ISSET(fields, 2)) {
77150 log_packet_detailed(" got field 'desc'");
77151#ifdef FREECIV_JSON_CONNECTION
77152 field_addr.name = "desc";
77153#endif /* FREECIV_JSON_CONNECTION */
77154 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
77156 }
77157 }
77158 if (BV_ISSET(fields, 3)) {
77159 log_packet_detailed(" got field 'percent_required'");
77160#ifdef FREECIV_JSON_CONNECTION
77161 field_addr.name = "percent_required";
77162#endif /* FREECIV_JSON_CONNECTION */
77163 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
77164 RECEIVE_PACKET_FIELD_ERROR(percent_required);
77165 }
77166 }
77167 if (BV_ISSET(fields, 4)) {
77168 log_packet_detailed(" got field 'flags'");
77169#ifdef FREECIV_JSON_CONNECTION
77170 field_addr.name = "flags";
77171#endif /* FREECIV_JSON_CONNECTION */
77172 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
77174 }
77175 }
77176
77177 if (NULL == old) {
77178 old = fc_malloc(sizeof(*old));
77179 *old = *real_packet;
77180 genhash_insert(*hash, old, old);
77181 } else {
77182 *old = *real_packet;
77183 }
77184
77185#endif /* FREECIV_DELTA_PROTOCOL */
77187}
77188
77189static int send_packet_vote_new_100(struct connection *pc, const struct packet_vote_new *packet)
77190{
77191 const struct packet_vote_new *real_packet = packet;
77192 int e;
77193#ifdef FREECIV_DELTA_PROTOCOL
77195 struct packet_vote_new *old;
77196 bool differ;
77197 struct genhash **hash = pc->phs.sent + PACKET_VOTE_NEW;
77198#endif /* FREECIV_DELTA_PROTOCOL */
77200#ifdef FREECIV_JSON_CONNECTION
77201 struct plocation field_addr;
77202 {
77206 }
77207#endif /* FREECIV_JSON_CONNECTION */
77208
77209 log_packet_detailed("packet_vote_new_100: sending info about ()");
77210
77211#ifdef FREECIV_DELTA_PROTOCOL
77212 if (NULL == *hash) {
77214 NULL, NULL, NULL, free);
77215 }
77216 BV_CLR_ALL(fields);
77217
77218 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77219 old = fc_malloc(sizeof(*old));
77220 *old = *real_packet;
77221 genhash_insert(*hash, old, old);
77222 memset(old, 0, sizeof(*old));
77223 }
77224 differ = (old->vote_no != real_packet->vote_no);
77225 if (differ) {
77226 BV_SET(fields, 0);
77227 }
77228
77229 differ = (strcmp(old->user, real_packet->user) != 0);
77230 if (differ) {
77231 BV_SET(fields, 1);
77232 }
77233
77234 differ = (strcmp(old->desc, real_packet->desc) != 0);
77235 if (differ) {
77236 BV_SET(fields, 2);
77237 }
77238
77239 differ = (old->percent_required != real_packet->percent_required);
77240 if (differ) {
77241 BV_SET(fields, 3);
77242 }
77243
77244 differ = (old->flags != real_packet->flags);
77245 if (differ) {
77246 BV_SET(fields, 4);
77247 }
77248
77249
77250#ifdef FREECIV_JSON_CONNECTION
77251 field_addr.name = "fields";
77252#endif /* FREECIV_JSON_CONNECTION */
77253 e = 0;
77254 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77255 if (e) {
77256 log_packet_detailed("fields bitvector error detected");
77257 }
77258
77259 if (BV_ISSET(fields, 0)) {
77260 log_packet_detailed(" field 'vote_no' has changed");
77261#ifdef FREECIV_JSON_CONNECTION
77262 field_addr.name = "vote_no";
77263#endif /* FREECIV_JSON_CONNECTION */
77264 e = 0;
77265 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
77266 if (e) {
77267 log_packet_detailed("'vote_no' field error detected");
77268 }
77269 }
77270 if (BV_ISSET(fields, 1)) {
77271 log_packet_detailed(" field 'user' has changed");
77272#ifdef FREECIV_JSON_CONNECTION
77273 field_addr.name = "user";
77274#endif /* FREECIV_JSON_CONNECTION */
77275 e = 0;
77276 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
77277 if (e) {
77278 log_packet_detailed("'user' field error detected");
77279 }
77280 }
77281 if (BV_ISSET(fields, 2)) {
77282 log_packet_detailed(" field 'desc' has changed");
77283#ifdef FREECIV_JSON_CONNECTION
77284 field_addr.name = "desc";
77285#endif /* FREECIV_JSON_CONNECTION */
77286 e = 0;
77287 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
77288 if (e) {
77289 log_packet_detailed("'desc' field error detected");
77290 }
77291 }
77292 if (BV_ISSET(fields, 3)) {
77293 log_packet_detailed(" field 'percent_required' has changed");
77294#ifdef FREECIV_JSON_CONNECTION
77295 field_addr.name = "percent_required";
77296#endif /* FREECIV_JSON_CONNECTION */
77297 e = 0;
77298 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
77299 if (e) {
77300 log_packet_detailed("'percent_required' field error detected");
77301 }
77302 }
77303 if (BV_ISSET(fields, 4)) {
77304 log_packet_detailed(" field 'flags' has changed");
77305#ifdef FREECIV_JSON_CONNECTION
77306 field_addr.name = "flags";
77307#endif /* FREECIV_JSON_CONNECTION */
77308 e = 0;
77309 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
77310 if (e) {
77311 log_packet_detailed("'flags' field error detected");
77312 }
77313 }
77314
77315 *old = *real_packet;
77316#endif /* FREECIV_DELTA_PROTOCOL */
77317#ifndef FREECIV_DELTA_PROTOCOL
77318#ifdef FREECIV_JSON_CONNECTION
77319 field_addr.name = "vote_no";
77320#endif /* FREECIV_JSON_CONNECTION */
77321 e = 0;
77322 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
77323 if (e) {
77324 log_packet_detailed("'vote_no' field error detected");
77325 }
77326#ifdef FREECIV_JSON_CONNECTION
77327 field_addr.name = "user";
77328#endif /* FREECIV_JSON_CONNECTION */
77329 e = 0;
77330 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
77331 if (e) {
77332 log_packet_detailed("'user' field error detected");
77333 }
77334#ifdef FREECIV_JSON_CONNECTION
77335 field_addr.name = "desc";
77336#endif /* FREECIV_JSON_CONNECTION */
77337 e = 0;
77338 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
77339 if (e) {
77340 log_packet_detailed("'desc' field error detected");
77341 }
77342#ifdef FREECIV_JSON_CONNECTION
77343 field_addr.name = "percent_required";
77344#endif /* FREECIV_JSON_CONNECTION */
77345 e = 0;
77346 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
77347 if (e) {
77348 log_packet_detailed("'percent_required' field error detected");
77349 }
77350#ifdef FREECIV_JSON_CONNECTION
77351 field_addr.name = "flags";
77352#endif /* FREECIV_JSON_CONNECTION */
77353 e = 0;
77354 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
77355 if (e) {
77356 log_packet_detailed("'flags' field error detected");
77357 }
77358
77359#endif
77361}
77362
77363int send_packet_vote_new(struct connection *pc, const struct packet_vote_new *packet)
77364{
77365 if (!pc->used) {
77366 log_error("WARNING: trying to send data to the closed connection %s",
77368 return -1;
77369 }
77370 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_NEW].packet != NULL, -1,
77371 "Handler for PACKET_VOTE_NEW not installed");
77372 return pc->phs.handlers->send[PACKET_VOTE_NEW].packet(pc, packet);
77373}
77374
77375#ifdef FREECIV_DELTA_PROTOCOL
77377{
77378 const struct packet_vote_update *key = (const struct packet_vote_update *) vkey;
77379 genhash_val_t result = 0;
77380
77381 result += key->vote_no;
77382
77383 result &= 0xFFFFFFFF;
77384 return result;
77385}
77386
77387static bool cmp_packet_vote_update_100(const void *vkey1, const void *vkey2)
77388{
77389 const struct packet_vote_update *old = (const struct packet_vote_update *) vkey1;
77390 const struct packet_vote_update *real_packet = (const struct packet_vote_update *) vkey2;
77391 bool differ;
77392
77393 differ = (old->vote_no != real_packet->vote_no);
77394
77395 return !differ;
77396}
77398#endif /* FREECIV_DELTA_PROTOCOL */
77399
77401{
77402#ifdef FREECIV_DELTA_PROTOCOL
77404 struct packet_vote_update *old;
77405 struct genhash **hash = pc->phs.received + PACKET_VOTE_UPDATE;
77406#endif /* FREECIV_DELTA_PROTOCOL */
77408#ifdef FREECIV_JSON_CONNECTION
77409 struct plocation field_addr;
77410 {
77414 }
77415#endif /* FREECIV_JSON_CONNECTION */
77416
77417#ifdef FREECIV_DELTA_PROTOCOL
77418#ifdef FREECIV_JSON_CONNECTION
77419 field_addr.name = "fields";
77420#endif /* FREECIV_JSON_CONNECTION */
77421 DIO_BV_GET(&din, &field_addr, fields);
77422#ifdef FREECIV_JSON_CONNECTION
77423 field_addr.name = "vote_no";
77424#endif /* FREECIV_JSON_CONNECTION */
77425 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
77427 }
77428
77429#else /* FREECIV_DELTA_PROTOCOL */
77430#ifdef FREECIV_JSON_CONNECTION
77431 field_addr.name = "vote_no";
77432#endif /* FREECIV_JSON_CONNECTION */
77433 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
77435 }
77436#ifdef FREECIV_JSON_CONNECTION
77437 field_addr.name = "yes";
77438#endif /* FREECIV_JSON_CONNECTION */
77439 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
77441 }
77442#ifdef FREECIV_JSON_CONNECTION
77443 field_addr.name = "no";
77444#endif /* FREECIV_JSON_CONNECTION */
77445 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
77447 }
77448#ifdef FREECIV_JSON_CONNECTION
77449 field_addr.name = "abstain";
77450#endif /* FREECIV_JSON_CONNECTION */
77451 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
77453 }
77454#ifdef FREECIV_JSON_CONNECTION
77455 field_addr.name = "num_voters";
77456#endif /* FREECIV_JSON_CONNECTION */
77457 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
77458 RECEIVE_PACKET_FIELD_ERROR(num_voters);
77459 }
77460#endif
77461 log_packet_detailed("packet_vote_update_100: got info about (%d)",
77462 real_packet->vote_no);
77463
77464#ifdef FREECIV_DELTA_PROTOCOL
77465 if (NULL == *hash) {
77467 NULL, NULL, NULL, free);
77468 }
77469
77470 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77471 *real_packet = *old;
77472 } else {
77473 int vote_no;
77474
77475 vote_no = real_packet->vote_no;
77476
77477 log_packet_detailed(" no old info");
77478 memset(real_packet, 0, sizeof(*real_packet));
77479
77480 real_packet->vote_no = vote_no;
77481 }
77482
77483 if (BV_ISSET(fields, 0)) {
77484 log_packet_detailed(" got field 'yes'");
77485#ifdef FREECIV_JSON_CONNECTION
77486 field_addr.name = "yes";
77487#endif /* FREECIV_JSON_CONNECTION */
77488 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
77490 }
77491 }
77492 if (BV_ISSET(fields, 1)) {
77493 log_packet_detailed(" got field 'no'");
77494#ifdef FREECIV_JSON_CONNECTION
77495 field_addr.name = "no";
77496#endif /* FREECIV_JSON_CONNECTION */
77497 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
77499 }
77500 }
77501 if (BV_ISSET(fields, 2)) {
77502 log_packet_detailed(" got field 'abstain'");
77503#ifdef FREECIV_JSON_CONNECTION
77504 field_addr.name = "abstain";
77505#endif /* FREECIV_JSON_CONNECTION */
77506 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
77508 }
77509 }
77510 if (BV_ISSET(fields, 3)) {
77511 log_packet_detailed(" got field 'num_voters'");
77512#ifdef FREECIV_JSON_CONNECTION
77513 field_addr.name = "num_voters";
77514#endif /* FREECIV_JSON_CONNECTION */
77515 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
77516 RECEIVE_PACKET_FIELD_ERROR(num_voters);
77517 }
77518 }
77519
77520 if (NULL == old) {
77521 old = fc_malloc(sizeof(*old));
77522 *old = *real_packet;
77523 genhash_insert(*hash, old, old);
77524 } else {
77525 *old = *real_packet;
77526 }
77527
77528#endif /* FREECIV_DELTA_PROTOCOL */
77530}
77531
77532static int send_packet_vote_update_100(struct connection *pc, const struct packet_vote_update *packet)
77533{
77534 const struct packet_vote_update *real_packet = packet;
77535 int e;
77536#ifdef FREECIV_DELTA_PROTOCOL
77538 struct packet_vote_update *old;
77539 bool differ;
77540 struct genhash **hash = pc->phs.sent + PACKET_VOTE_UPDATE;
77541 int different = 0;
77542#endif /* FREECIV_DELTA_PROTOCOL */
77544#ifdef FREECIV_JSON_CONNECTION
77545 struct plocation field_addr;
77546 {
77550 }
77551#endif /* FREECIV_JSON_CONNECTION */
77552
77553 log_packet_detailed("packet_vote_update_100: sending info about (%d)",
77554 real_packet->vote_no);
77555
77556#ifdef FREECIV_DELTA_PROTOCOL
77557 if (NULL == *hash) {
77559 NULL, NULL, NULL, free);
77560 }
77561 BV_CLR_ALL(fields);
77562
77563 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77564 old = fc_malloc(sizeof(*old));
77565 *old = *real_packet;
77566 genhash_insert(*hash, old, old);
77567 memset(old, 0, sizeof(*old));
77568 different = 1; /* Force to send. */
77569 }
77570 differ = (old->yes != real_packet->yes);
77571 if (differ) {
77572 different++;
77573 BV_SET(fields, 0);
77574 }
77575
77576 differ = (old->no != real_packet->no);
77577 if (differ) {
77578 different++;
77579 BV_SET(fields, 1);
77580 }
77581
77582 differ = (old->abstain != real_packet->abstain);
77583 if (differ) {
77584 different++;
77585 BV_SET(fields, 2);
77586 }
77587
77588 differ = (old->num_voters != real_packet->num_voters);
77589 if (differ) {
77590 different++;
77591 BV_SET(fields, 3);
77592 }
77593
77594 if (different == 0) {
77595 log_packet_detailed(" no change -> discard");
77597 }
77598
77599#ifdef FREECIV_JSON_CONNECTION
77600 field_addr.name = "fields";
77601#endif /* FREECIV_JSON_CONNECTION */
77602 e = 0;
77603 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77604 if (e) {
77605 log_packet_detailed("fields bitvector error detected");
77606 }
77607#ifdef FREECIV_JSON_CONNECTION
77608 field_addr.name = "vote_no";
77609#endif /* FREECIV_JSON_CONNECTION */
77610 e = 0;
77611 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
77612 if (e) {
77613 log_packet_detailed("'vote_no' field error detected");
77614 }
77615
77616 if (BV_ISSET(fields, 0)) {
77617 log_packet_detailed(" field 'yes' has changed");
77618#ifdef FREECIV_JSON_CONNECTION
77619 field_addr.name = "yes";
77620#endif /* FREECIV_JSON_CONNECTION */
77621 e = 0;
77622 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
77623 if (e) {
77624 log_packet_detailed("'yes' field error detected");
77625 }
77626 }
77627 if (BV_ISSET(fields, 1)) {
77628 log_packet_detailed(" field 'no' has changed");
77629#ifdef FREECIV_JSON_CONNECTION
77630 field_addr.name = "no";
77631#endif /* FREECIV_JSON_CONNECTION */
77632 e = 0;
77633 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
77634 if (e) {
77635 log_packet_detailed("'no' field error detected");
77636 }
77637 }
77638 if (BV_ISSET(fields, 2)) {
77639 log_packet_detailed(" field 'abstain' has changed");
77640#ifdef FREECIV_JSON_CONNECTION
77641 field_addr.name = "abstain";
77642#endif /* FREECIV_JSON_CONNECTION */
77643 e = 0;
77644 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
77645 if (e) {
77646 log_packet_detailed("'abstain' field error detected");
77647 }
77648 }
77649 if (BV_ISSET(fields, 3)) {
77650 log_packet_detailed(" field 'num_voters' has changed");
77651#ifdef FREECIV_JSON_CONNECTION
77652 field_addr.name = "num_voters";
77653#endif /* FREECIV_JSON_CONNECTION */
77654 e = 0;
77655 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
77656 if (e) {
77657 log_packet_detailed("'num_voters' field error detected");
77658 }
77659 }
77660
77661 *old = *real_packet;
77662#endif /* FREECIV_DELTA_PROTOCOL */
77663#ifndef FREECIV_DELTA_PROTOCOL
77664#ifdef FREECIV_JSON_CONNECTION
77665 field_addr.name = "vote_no";
77666#endif /* FREECIV_JSON_CONNECTION */
77667 e = 0;
77668 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
77669 if (e) {
77670 log_packet_detailed("'vote_no' field error detected");
77671 }
77672#ifdef FREECIV_JSON_CONNECTION
77673 field_addr.name = "yes";
77674#endif /* FREECIV_JSON_CONNECTION */
77675 e = 0;
77676 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
77677 if (e) {
77678 log_packet_detailed("'yes' field error detected");
77679 }
77680#ifdef FREECIV_JSON_CONNECTION
77681 field_addr.name = "no";
77682#endif /* FREECIV_JSON_CONNECTION */
77683 e = 0;
77684 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
77685 if (e) {
77686 log_packet_detailed("'no' field error detected");
77687 }
77688#ifdef FREECIV_JSON_CONNECTION
77689 field_addr.name = "abstain";
77690#endif /* FREECIV_JSON_CONNECTION */
77691 e = 0;
77692 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
77693 if (e) {
77694 log_packet_detailed("'abstain' field error detected");
77695 }
77696#ifdef FREECIV_JSON_CONNECTION
77697 field_addr.name = "num_voters";
77698#endif /* FREECIV_JSON_CONNECTION */
77699 e = 0;
77700 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
77701 if (e) {
77702 log_packet_detailed("'num_voters' field error detected");
77703 }
77704
77705#endif
77707}
77708
77710{
77711 if (!pc->used) {
77712 log_error("WARNING: trying to send data to the closed connection %s",
77714 return -1;
77715 }
77716 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet != NULL, -1,
77717 "Handler for PACKET_VOTE_UPDATE not installed");
77718 return pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet(pc, packet);
77719}
77720
77721#ifdef FREECIV_DELTA_PROTOCOL
77722#define hash_packet_vote_remove_100 hash_const
77723
77724#define cmp_packet_vote_remove_100 cmp_const
77725
77727#endif /* FREECIV_DELTA_PROTOCOL */
77728
77730{
77731#ifdef FREECIV_DELTA_PROTOCOL
77733 struct packet_vote_remove *old;
77734 struct genhash **hash = pc->phs.received + PACKET_VOTE_REMOVE;
77735#endif /* FREECIV_DELTA_PROTOCOL */
77737#ifdef FREECIV_JSON_CONNECTION
77738 struct plocation field_addr;
77739 {
77743 }
77744#endif /* FREECIV_JSON_CONNECTION */
77745
77746#ifdef FREECIV_DELTA_PROTOCOL
77747#ifdef FREECIV_JSON_CONNECTION
77748 field_addr.name = "fields";
77749#endif /* FREECIV_JSON_CONNECTION */
77750 DIO_BV_GET(&din, &field_addr, fields);
77751
77752#else /* FREECIV_DELTA_PROTOCOL */
77753#ifdef FREECIV_JSON_CONNECTION
77754 field_addr.name = "vote_no";
77755#endif /* FREECIV_JSON_CONNECTION */
77756 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
77758 }
77759#endif
77760 log_packet_detailed("packet_vote_remove_100: got info about ()");
77761
77762#ifdef FREECIV_DELTA_PROTOCOL
77763 if (NULL == *hash) {
77765 NULL, NULL, NULL, free);
77766 }
77767
77768 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77769 *real_packet = *old;
77770 } else {
77771 log_packet_detailed(" no old info");
77772 memset(real_packet, 0, sizeof(*real_packet));
77773 }
77774
77775 if (BV_ISSET(fields, 0)) {
77776 log_packet_detailed(" got field 'vote_no'");
77777#ifdef FREECIV_JSON_CONNECTION
77778 field_addr.name = "vote_no";
77779#endif /* FREECIV_JSON_CONNECTION */
77780 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
77782 }
77783 }
77784
77785 if (NULL == old) {
77786 old = fc_malloc(sizeof(*old));
77787 *old = *real_packet;
77788 genhash_insert(*hash, old, old);
77789 } else {
77790 *old = *real_packet;
77791 }
77792
77793#endif /* FREECIV_DELTA_PROTOCOL */
77795}
77796
77797static int send_packet_vote_remove_100(struct connection *pc, const struct packet_vote_remove *packet)
77798{
77799 const struct packet_vote_remove *real_packet = packet;
77800 int e;
77801#ifdef FREECIV_DELTA_PROTOCOL
77803 struct packet_vote_remove *old;
77804 bool differ;
77805 struct genhash **hash = pc->phs.sent + PACKET_VOTE_REMOVE;
77806#endif /* FREECIV_DELTA_PROTOCOL */
77808#ifdef FREECIV_JSON_CONNECTION
77809 struct plocation field_addr;
77810 {
77814 }
77815#endif /* FREECIV_JSON_CONNECTION */
77816
77817 log_packet_detailed("packet_vote_remove_100: sending info about ()");
77818
77819#ifdef FREECIV_DELTA_PROTOCOL
77820 if (NULL == *hash) {
77822 NULL, NULL, NULL, free);
77823 }
77824 BV_CLR_ALL(fields);
77825
77826 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77827 old = fc_malloc(sizeof(*old));
77828 *old = *real_packet;
77829 genhash_insert(*hash, old, old);
77830 memset(old, 0, sizeof(*old));
77831 }
77832 differ = (old->vote_no != real_packet->vote_no);
77833 if (differ) {
77834 BV_SET(fields, 0);
77835 }
77836
77837
77838#ifdef FREECIV_JSON_CONNECTION
77839 field_addr.name = "fields";
77840#endif /* FREECIV_JSON_CONNECTION */
77841 e = 0;
77842 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77843 if (e) {
77844 log_packet_detailed("fields bitvector error detected");
77845 }
77846
77847 if (BV_ISSET(fields, 0)) {
77848 log_packet_detailed(" field 'vote_no' has changed");
77849#ifdef FREECIV_JSON_CONNECTION
77850 field_addr.name = "vote_no";
77851#endif /* FREECIV_JSON_CONNECTION */
77852 e = 0;
77853 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
77854 if (e) {
77855 log_packet_detailed("'vote_no' field error detected");
77856 }
77857 }
77858
77859 *old = *real_packet;
77860#endif /* FREECIV_DELTA_PROTOCOL */
77861#ifndef FREECIV_DELTA_PROTOCOL
77862#ifdef FREECIV_JSON_CONNECTION
77863 field_addr.name = "vote_no";
77864#endif /* FREECIV_JSON_CONNECTION */
77865 e = 0;
77866 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
77867 if (e) {
77868 log_packet_detailed("'vote_no' field error detected");
77869 }
77870
77871#endif
77873}
77874
77876{
77877 if (!pc->used) {
77878 log_error("WARNING: trying to send data to the closed connection %s",
77880 return -1;
77881 }
77882 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet != NULL, -1,
77883 "Handler for PACKET_VOTE_REMOVE not installed");
77884 return pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet(pc, packet);
77885}
77886
77887#ifdef FREECIV_DELTA_PROTOCOL
77888#define hash_packet_vote_resolve_100 hash_const
77889
77890#define cmp_packet_vote_resolve_100 cmp_const
77891
77893#endif /* FREECIV_DELTA_PROTOCOL */
77894
77896{
77897#ifdef FREECIV_DELTA_PROTOCOL
77899 struct packet_vote_resolve *old;
77900 struct genhash **hash = pc->phs.received + PACKET_VOTE_RESOLVE;
77901#endif /* FREECIV_DELTA_PROTOCOL */
77903#ifdef FREECIV_JSON_CONNECTION
77904 struct plocation field_addr;
77905 {
77909 }
77910#endif /* FREECIV_JSON_CONNECTION */
77911
77912#ifdef FREECIV_DELTA_PROTOCOL
77913#ifdef FREECIV_JSON_CONNECTION
77914 field_addr.name = "fields";
77915#endif /* FREECIV_JSON_CONNECTION */
77916 DIO_BV_GET(&din, &field_addr, fields);
77917
77918#else /* FREECIV_DELTA_PROTOCOL */
77919#ifdef FREECIV_JSON_CONNECTION
77920 field_addr.name = "vote_no";
77921#endif /* FREECIV_JSON_CONNECTION */
77922 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
77924 }
77925#ifdef FREECIV_JSON_CONNECTION
77926 field_addr.name = "passed";
77927#endif /* FREECIV_JSON_CONNECTION */
77928 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->passed)) {
77930 }
77931#endif
77932 log_packet_detailed("packet_vote_resolve_100: got info about ()");
77933
77934#ifdef FREECIV_DELTA_PROTOCOL
77935 if (NULL == *hash) {
77937 NULL, NULL, NULL, free);
77938 }
77939
77940 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77941 *real_packet = *old;
77942 } else {
77943 log_packet_detailed(" no old info");
77944 memset(real_packet, 0, sizeof(*real_packet));
77945 }
77946
77947 if (BV_ISSET(fields, 0)) {
77948 log_packet_detailed(" got field 'vote_no'");
77949#ifdef FREECIV_JSON_CONNECTION
77950 field_addr.name = "vote_no";
77951#endif /* FREECIV_JSON_CONNECTION */
77952 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
77954 }
77955 }
77956 real_packet->passed = BV_ISSET(fields, 1);
77957
77958 if (NULL == old) {
77959 old = fc_malloc(sizeof(*old));
77960 *old = *real_packet;
77961 genhash_insert(*hash, old, old);
77962 } else {
77963 *old = *real_packet;
77964 }
77965
77966#endif /* FREECIV_DELTA_PROTOCOL */
77968}
77969
77970static int send_packet_vote_resolve_100(struct connection *pc, const struct packet_vote_resolve *packet)
77971{
77972 const struct packet_vote_resolve *real_packet = packet;
77973 int e;
77974#ifdef FREECIV_DELTA_PROTOCOL
77976 struct packet_vote_resolve *old;
77977 bool differ;
77978 struct genhash **hash = pc->phs.sent + PACKET_VOTE_RESOLVE;
77979#endif /* FREECIV_DELTA_PROTOCOL */
77981#ifdef FREECIV_JSON_CONNECTION
77982 struct plocation field_addr;
77983 {
77987 }
77988#endif /* FREECIV_JSON_CONNECTION */
77989
77990 log_packet_detailed("packet_vote_resolve_100: sending info about ()");
77991
77992#ifdef FREECIV_DELTA_PROTOCOL
77993 if (NULL == *hash) {
77995 NULL, NULL, NULL, free);
77996 }
77997 BV_CLR_ALL(fields);
77998
77999 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78000 old = fc_malloc(sizeof(*old));
78001 *old = *real_packet;
78002 genhash_insert(*hash, old, old);
78003 memset(old, 0, sizeof(*old));
78004 }
78005 differ = (old->vote_no != real_packet->vote_no);
78006 if (differ) {
78007 BV_SET(fields, 0);
78008 }
78009
78010 if (packet->passed) {
78011 BV_SET(fields, 1);
78012 }
78013
78014
78015#ifdef FREECIV_JSON_CONNECTION
78016 field_addr.name = "fields";
78017#endif /* FREECIV_JSON_CONNECTION */
78018 e = 0;
78019 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78020 if (e) {
78021 log_packet_detailed("fields bitvector error detected");
78022 }
78023
78024 if (BV_ISSET(fields, 0)) {
78025 log_packet_detailed(" field 'vote_no' has changed");
78026#ifdef FREECIV_JSON_CONNECTION
78027 field_addr.name = "vote_no";
78028#endif /* FREECIV_JSON_CONNECTION */
78029 e = 0;
78030 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
78031 if (e) {
78032 log_packet_detailed("'vote_no' field error detected");
78033 }
78034 }
78035 /* field 1 is folded into the header */
78036
78037 *old = *real_packet;
78038#endif /* FREECIV_DELTA_PROTOCOL */
78039#ifndef FREECIV_DELTA_PROTOCOL
78040#ifdef FREECIV_JSON_CONNECTION
78041 field_addr.name = "vote_no";
78042#endif /* FREECIV_JSON_CONNECTION */
78043 e = 0;
78044 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
78045 if (e) {
78046 log_packet_detailed("'vote_no' field error detected");
78047 }
78048#ifdef FREECIV_JSON_CONNECTION
78049 field_addr.name = "passed";
78050#endif /* FREECIV_JSON_CONNECTION */
78051 e = 0;
78052 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->passed);
78053 if (e) {
78054 log_packet_detailed("'passed' field error detected");
78055 }
78056
78057#endif
78059}
78060
78062{
78063 if (!pc->used) {
78064 log_error("WARNING: trying to send data to the closed connection %s",
78066 return -1;
78067 }
78068 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet != NULL, -1,
78069 "Handler for PACKET_VOTE_RESOLVE not installed");
78070 return pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet(pc, packet);
78071}
78072
78074{
78076#ifdef FREECIV_JSON_CONNECTION
78077 struct plocation field_addr;
78078 {
78082 }
78083#endif /* FREECIV_JSON_CONNECTION */
78084#if 1 /* To match endif */
78085#ifdef FREECIV_JSON_CONNECTION
78086 field_addr.name = "vote_no";
78087#endif /* FREECIV_JSON_CONNECTION */
78088 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
78090 }
78091#ifdef FREECIV_JSON_CONNECTION
78092 field_addr.name = "value";
78093#endif /* FREECIV_JSON_CONNECTION */
78094 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->value)) {
78096 }
78097#endif
78098 log_packet_detailed("packet_vote_submit_100: got info about ()");
78100}
78101
78102static int send_packet_vote_submit_100(struct connection *pc, const struct packet_vote_submit *packet)
78103{
78104 const struct packet_vote_submit *real_packet = packet;
78105 int e;
78107#ifdef FREECIV_JSON_CONNECTION
78108 struct plocation field_addr;
78109 {
78113 }
78114#endif /* FREECIV_JSON_CONNECTION */
78115
78116 log_packet_detailed("packet_vote_submit_100: sending info about ()");
78117#if 1 /* To match endif */
78118#ifdef FREECIV_JSON_CONNECTION
78119 field_addr.name = "vote_no";
78120#endif /* FREECIV_JSON_CONNECTION */
78121 e = 0;
78122 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
78123 if (e) {
78124 log_packet_detailed("'vote_no' field error detected");
78125 }
78126#ifdef FREECIV_JSON_CONNECTION
78127 field_addr.name = "value";
78128#endif /* FREECIV_JSON_CONNECTION */
78129 e = 0;
78130 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->value);
78131 if (e) {
78132 log_packet_detailed("'value' field error detected");
78133 }
78134
78135#endif
78137}
78138
78140{
78141 if (!pc->used) {
78142 log_error("WARNING: trying to send data to the closed connection %s",
78144 return -1;
78145 }
78146 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet != NULL, -1,
78147 "Handler for PACKET_VOTE_SUBMIT not installed");
78148 return pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet(pc, packet);
78149}
78150
78151#ifdef FREECIV_DELTA_PROTOCOL
78152#define hash_packet_edit_mode_100 hash_const
78153
78154#define cmp_packet_edit_mode_100 cmp_const
78155
78157#endif /* FREECIV_DELTA_PROTOCOL */
78158
78160{
78161#ifdef FREECIV_DELTA_PROTOCOL
78163 struct packet_edit_mode *old;
78164 struct genhash **hash = pc->phs.received + PACKET_EDIT_MODE;
78165#endif /* FREECIV_DELTA_PROTOCOL */
78167#ifdef FREECIV_JSON_CONNECTION
78168 struct plocation field_addr;
78169 {
78173 }
78174#endif /* FREECIV_JSON_CONNECTION */
78175
78176#ifdef FREECIV_DELTA_PROTOCOL
78177#ifdef FREECIV_JSON_CONNECTION
78178 field_addr.name = "fields";
78179#endif /* FREECIV_JSON_CONNECTION */
78180 DIO_BV_GET(&din, &field_addr, fields);
78181
78182#else /* FREECIV_DELTA_PROTOCOL */
78183#ifdef FREECIV_JSON_CONNECTION
78184 field_addr.name = "state";
78185#endif /* FREECIV_JSON_CONNECTION */
78186 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->state)) {
78188 }
78189#endif
78190 log_packet_detailed("packet_edit_mode_100: got info about ()");
78191
78192#ifdef FREECIV_DELTA_PROTOCOL
78193 if (NULL == *hash) {
78195 NULL, NULL, NULL, free);
78196 }
78197
78198 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78199 *real_packet = *old;
78200 } else {
78201 log_packet_detailed(" no old info");
78202 memset(real_packet, 0, sizeof(*real_packet));
78203 }
78204
78205 real_packet->state = BV_ISSET(fields, 0);
78206
78207 if (NULL == old) {
78208 old = fc_malloc(sizeof(*old));
78209 *old = *real_packet;
78210 genhash_insert(*hash, old, old);
78211 } else {
78212 *old = *real_packet;
78213 }
78214
78215#endif /* FREECIV_DELTA_PROTOCOL */
78217}
78218
78219static int send_packet_edit_mode_100(struct connection *pc, const struct packet_edit_mode *packet)
78220{
78221 const struct packet_edit_mode *real_packet = packet;
78222 int e;
78223#ifdef FREECIV_DELTA_PROTOCOL
78225 struct packet_edit_mode *old;
78226 struct genhash **hash = pc->phs.sent + PACKET_EDIT_MODE;
78227#endif /* FREECIV_DELTA_PROTOCOL */
78229#ifdef FREECIV_JSON_CONNECTION
78230 struct plocation field_addr;
78231 {
78235 }
78236#endif /* FREECIV_JSON_CONNECTION */
78237
78238 log_packet_detailed("packet_edit_mode_100: sending info about ()");
78239
78240#ifdef FREECIV_DELTA_PROTOCOL
78241 if (NULL == *hash) {
78243 NULL, NULL, NULL, free);
78244 }
78245 BV_CLR_ALL(fields);
78246
78247 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78248 old = fc_malloc(sizeof(*old));
78249 *old = *real_packet;
78250 genhash_insert(*hash, old, old);
78251 memset(old, 0, sizeof(*old));
78252 }
78253 if (packet->state) {
78254 BV_SET(fields, 0);
78255 }
78256
78257
78258#ifdef FREECIV_JSON_CONNECTION
78259 field_addr.name = "fields";
78260#endif /* FREECIV_JSON_CONNECTION */
78261 e = 0;
78262 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78263 if (e) {
78264 log_packet_detailed("fields bitvector error detected");
78265 }
78266
78267 /* field 0 is folded into the header */
78268
78269 *old = *real_packet;
78270#endif /* FREECIV_DELTA_PROTOCOL */
78271#ifndef FREECIV_DELTA_PROTOCOL
78272#ifdef FREECIV_JSON_CONNECTION
78273 field_addr.name = "state";
78274#endif /* FREECIV_JSON_CONNECTION */
78275 e = 0;
78276 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->state);
78277 if (e) {
78278 log_packet_detailed("'state' field error detected");
78279 }
78280
78281#endif
78283}
78284
78285int send_packet_edit_mode(struct connection *pc, const struct packet_edit_mode *packet)
78286{
78287 if (!pc->used) {
78288 log_error("WARNING: trying to send data to the closed connection %s",
78290 return -1;
78291 }
78292 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_MODE].packet != NULL, -1,
78293 "Handler for PACKET_EDIT_MODE not installed");
78294 return pc->phs.handlers->send[PACKET_EDIT_MODE].packet(pc, packet);
78295}
78296
78297int dsend_packet_edit_mode(struct connection *pc, bool state)
78298{
78299 struct packet_edit_mode packet, *real_packet = &packet;
78300
78302
78304}
78305
78307{
78309#if 1 /* To match endif */
78310 real_packet->__dummy = 0xff;
78311#endif
78312 log_packet_detailed("packet_edit_recalculate_borders_100: got info about ()");
78314}
78315
78317{
78319
78320 log_packet_detailed("packet_edit_recalculate_borders_100: sending info about ()");
78322}
78323
78325{
78326 if (!pc->used) {
78327 log_error("WARNING: trying to send data to the closed connection %s",
78329 return -1;
78330 }
78331 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet != NULL, -1,
78332 "Handler for PACKET_EDIT_RECALCULATE_BORDERS not installed");
78333 return pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet(pc);
78334}
78335
78337{
78339#if 1 /* To match endif */
78340 real_packet->__dummy = 0xff;
78341#endif
78342 log_packet_detailed("packet_edit_check_tiles_100: got info about ()");
78344}
78345
78347{
78349
78350 log_packet_detailed("packet_edit_check_tiles_100: sending info about ()");
78352}
78353
78355{
78356 if (!pc->used) {
78357 log_error("WARNING: trying to send data to the closed connection %s",
78359 return -1;
78360 }
78361 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet != NULL, -1,
78362 "Handler for PACKET_EDIT_CHECK_TILES not installed");
78363 return pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet(pc);
78364}
78365
78366#ifdef FREECIV_DELTA_PROTOCOL
78367#define hash_packet_edit_toggle_fogofwar_100 hash_const
78368
78369#define cmp_packet_edit_toggle_fogofwar_100 cmp_const
78370
78372#endif /* FREECIV_DELTA_PROTOCOL */
78373
78375{
78376#ifdef FREECIV_DELTA_PROTOCOL
78378 struct packet_edit_toggle_fogofwar *old;
78379 struct genhash **hash = pc->phs.received + PACKET_EDIT_TOGGLE_FOGOFWAR;
78380#endif /* FREECIV_DELTA_PROTOCOL */
78382#ifdef FREECIV_JSON_CONNECTION
78383 struct plocation field_addr;
78384 {
78388 }
78389#endif /* FREECIV_JSON_CONNECTION */
78390
78391#ifdef FREECIV_DELTA_PROTOCOL
78392#ifdef FREECIV_JSON_CONNECTION
78393 field_addr.name = "fields";
78394#endif /* FREECIV_JSON_CONNECTION */
78395 DIO_BV_GET(&din, &field_addr, fields);
78396
78397#else /* FREECIV_DELTA_PROTOCOL */
78398#ifdef FREECIV_JSON_CONNECTION
78399 field_addr.name = "player";
78400#endif /* FREECIV_JSON_CONNECTION */
78401 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player)) {
78403 }
78404#endif
78405 log_packet_detailed("packet_edit_toggle_fogofwar_100: got info about ()");
78406
78407#ifdef FREECIV_DELTA_PROTOCOL
78408 if (NULL == *hash) {
78410 NULL, NULL, NULL, free);
78411 }
78412
78413 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78414 *real_packet = *old;
78415 } else {
78416 log_packet_detailed(" no old info");
78417 memset(real_packet, 0, sizeof(*real_packet));
78418 }
78419
78420 if (BV_ISSET(fields, 0)) {
78421 log_packet_detailed(" got field 'player'");
78422#ifdef FREECIV_JSON_CONNECTION
78423 field_addr.name = "player";
78424#endif /* FREECIV_JSON_CONNECTION */
78425 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player)) {
78427 }
78428 }
78429
78430 if (NULL == old) {
78431 old = fc_malloc(sizeof(*old));
78432 *old = *real_packet;
78433 genhash_insert(*hash, old, old);
78434 } else {
78435 *old = *real_packet;
78436 }
78437
78438#endif /* FREECIV_DELTA_PROTOCOL */
78440}
78441
78443{
78444 const struct packet_edit_toggle_fogofwar *real_packet = packet;
78445 int e;
78446#ifdef FREECIV_DELTA_PROTOCOL
78448 struct packet_edit_toggle_fogofwar *old;
78449 bool differ;
78450 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TOGGLE_FOGOFWAR;
78451#endif /* FREECIV_DELTA_PROTOCOL */
78453#ifdef FREECIV_JSON_CONNECTION
78454 struct plocation field_addr;
78455 {
78459 }
78460#endif /* FREECIV_JSON_CONNECTION */
78461
78462 log_packet_detailed("packet_edit_toggle_fogofwar_100: sending info about ()");
78463
78464#ifdef FREECIV_DELTA_PROTOCOL
78465 if (NULL == *hash) {
78467 NULL, NULL, NULL, free);
78468 }
78469 BV_CLR_ALL(fields);
78470
78471 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78472 old = fc_malloc(sizeof(*old));
78473 *old = *real_packet;
78474 genhash_insert(*hash, old, old);
78475 memset(old, 0, sizeof(*old));
78476 }
78477 differ = (old->player != real_packet->player);
78478 if (differ) {
78479 BV_SET(fields, 0);
78480 }
78481
78482
78483#ifdef FREECIV_JSON_CONNECTION
78484 field_addr.name = "fields";
78485#endif /* FREECIV_JSON_CONNECTION */
78486 e = 0;
78487 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78488 if (e) {
78489 log_packet_detailed("fields bitvector error detected");
78490 }
78491
78492 if (BV_ISSET(fields, 0)) {
78493 log_packet_detailed(" field 'player' has changed");
78494#ifdef FREECIV_JSON_CONNECTION
78495 field_addr.name = "player";
78496#endif /* FREECIV_JSON_CONNECTION */
78497 e = 0;
78498 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player);
78499 if (e) {
78500 log_packet_detailed("'player' field error detected");
78501 }
78502 }
78503
78504 *old = *real_packet;
78505#endif /* FREECIV_DELTA_PROTOCOL */
78506#ifndef FREECIV_DELTA_PROTOCOL
78507#ifdef FREECIV_JSON_CONNECTION
78508 field_addr.name = "player";
78509#endif /* FREECIV_JSON_CONNECTION */
78510 e = 0;
78511 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player);
78512 if (e) {
78513 log_packet_detailed("'player' field error detected");
78514 }
78515
78516#endif
78518}
78519
78521{
78522 if (!pc->used) {
78523 log_error("WARNING: trying to send data to the closed connection %s",
78525 return -1;
78526 }
78527 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet != NULL, -1,
78528 "Handler for PACKET_EDIT_TOGGLE_FOGOFWAR not installed");
78529 return pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet(pc, packet);
78530}
78531
78533{
78534 struct packet_edit_toggle_fogofwar packet, *real_packet = &packet;
78535
78537
78539}
78540
78541#ifdef FREECIV_DELTA_PROTOCOL
78542#define hash_packet_edit_fogofwar_state_100 hash_const
78543
78544#define cmp_packet_edit_fogofwar_state_100 cmp_const
78545
78547#endif /* FREECIV_DELTA_PROTOCOL */
78548
78550{
78551#ifdef FREECIV_DELTA_PROTOCOL
78553 struct packet_edit_fogofwar_state *old;
78554 struct genhash **hash = pc->phs.received + PACKET_EDIT_FOGOFWAR_STATE;
78555#endif /* FREECIV_DELTA_PROTOCOL */
78557#ifdef FREECIV_JSON_CONNECTION
78558 struct plocation field_addr;
78559 {
78563 }
78564#endif /* FREECIV_JSON_CONNECTION */
78565
78566#ifdef FREECIV_DELTA_PROTOCOL
78567#ifdef FREECIV_JSON_CONNECTION
78568 field_addr.name = "fields";
78569#endif /* FREECIV_JSON_CONNECTION */
78570 DIO_BV_GET(&din, &field_addr, fields);
78571
78572#else /* FREECIV_DELTA_PROTOCOL */
78573#ifdef FREECIV_JSON_CONNECTION
78574 field_addr.name = "enabled";
78575#endif /* FREECIV_JSON_CONNECTION */
78576 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
78578 }
78579#endif
78580 log_packet_detailed("packet_edit_fogofwar_state_100: got info about ()");
78581
78582#ifdef FREECIV_DELTA_PROTOCOL
78583 if (NULL == *hash) {
78585 NULL, NULL, NULL, free);
78586 }
78587
78588 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78589 *real_packet = *old;
78590 } else {
78591 log_packet_detailed(" no old info");
78592 memset(real_packet, 0, sizeof(*real_packet));
78593 }
78594
78595 real_packet->enabled = BV_ISSET(fields, 0);
78596
78597 if (NULL == old) {
78598 old = fc_malloc(sizeof(*old));
78599 *old = *real_packet;
78600 genhash_insert(*hash, old, old);
78601 } else {
78602 *old = *real_packet;
78603 }
78604
78605#endif /* FREECIV_DELTA_PROTOCOL */
78607}
78608
78610{
78611 const struct packet_edit_fogofwar_state *real_packet = packet;
78612 int e;
78613#ifdef FREECIV_DELTA_PROTOCOL
78615 struct packet_edit_fogofwar_state *old;
78616 struct genhash **hash = pc->phs.sent + PACKET_EDIT_FOGOFWAR_STATE;
78617#endif /* FREECIV_DELTA_PROTOCOL */
78619#ifdef FREECIV_JSON_CONNECTION
78620 struct plocation field_addr;
78621 {
78625 }
78626#endif /* FREECIV_JSON_CONNECTION */
78627
78628 log_packet_detailed("packet_edit_fogofwar_state_100: sending info about ()");
78629
78630#ifdef FREECIV_DELTA_PROTOCOL
78631 if (NULL == *hash) {
78633 NULL, NULL, NULL, free);
78634 }
78635 BV_CLR_ALL(fields);
78636
78637 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78638 old = fc_malloc(sizeof(*old));
78639 *old = *real_packet;
78640 genhash_insert(*hash, old, old);
78641 memset(old, 0, sizeof(*old));
78642 }
78643 if (packet->enabled) {
78644 BV_SET(fields, 0);
78645 }
78646
78647
78648#ifdef FREECIV_JSON_CONNECTION
78649 field_addr.name = "fields";
78650#endif /* FREECIV_JSON_CONNECTION */
78651 e = 0;
78652 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78653 if (e) {
78654 log_packet_detailed("fields bitvector error detected");
78655 }
78656
78657 /* field 0 is folded into the header */
78658
78659 *old = *real_packet;
78660#endif /* FREECIV_DELTA_PROTOCOL */
78661#ifndef FREECIV_DELTA_PROTOCOL
78662#ifdef FREECIV_JSON_CONNECTION
78663 field_addr.name = "enabled";
78664#endif /* FREECIV_JSON_CONNECTION */
78665 e = 0;
78666 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
78667 if (e) {
78668 log_packet_detailed("'enabled' field error detected");
78669 }
78670
78671#endif
78673}
78674
78676{
78677 if (!pc->used) {
78678 log_error("WARNING: trying to send data to the closed connection %s",
78680 return -1;
78681 }
78682 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet != NULL, -1,
78683 "Handler for PACKET_EDIT_FOGOFWAR_STATE not installed");
78684 return pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet(pc, packet);
78685}
78686
78688{
78689 conn_list_iterate(dest, pconn) {
78692}
78693
78695{
78696 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
78697
78699
78701}
78702
78704{
78705 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
78706
78708
78710}
78711
78712#ifdef FREECIV_DELTA_PROTOCOL
78714{
78715 const struct packet_edit_tile_terrain *key = (const struct packet_edit_tile_terrain *) vkey;
78716 genhash_val_t result = 0;
78717
78718 result += key->tile;
78719
78720 result &= 0xFFFFFFFF;
78721 return result;
78722}
78723
78724static bool cmp_packet_edit_tile_terrain_100(const void *vkey1, const void *vkey2)
78725{
78726 const struct packet_edit_tile_terrain *old = (const struct packet_edit_tile_terrain *) vkey1;
78727 const struct packet_edit_tile_terrain *real_packet = (const struct packet_edit_tile_terrain *) vkey2;
78728 bool differ;
78729
78730 differ = (old->tile != real_packet->tile);
78731
78732 return !differ;
78733}
78735#endif /* FREECIV_DELTA_PROTOCOL */
78736
78738{
78739#ifdef FREECIV_DELTA_PROTOCOL
78741 struct packet_edit_tile_terrain *old;
78742 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_TERRAIN;
78743#endif /* FREECIV_DELTA_PROTOCOL */
78745#ifdef FREECIV_JSON_CONNECTION
78746 struct plocation field_addr;
78747 {
78751 }
78752#endif /* FREECIV_JSON_CONNECTION */
78753
78754#ifdef FREECIV_DELTA_PROTOCOL
78755#ifdef FREECIV_JSON_CONNECTION
78756 field_addr.name = "fields";
78757#endif /* FREECIV_JSON_CONNECTION */
78758 DIO_BV_GET(&din, &field_addr, fields);
78759#ifdef FREECIV_JSON_CONNECTION
78760 field_addr.name = "tile";
78761#endif /* FREECIV_JSON_CONNECTION */
78762 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
78764 }
78765
78766#else /* FREECIV_DELTA_PROTOCOL */
78767#ifdef FREECIV_JSON_CONNECTION
78768 field_addr.name = "tile";
78769#endif /* FREECIV_JSON_CONNECTION */
78770 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
78772 }
78773#ifdef FREECIV_JSON_CONNECTION
78774 field_addr.name = "terrain";
78775#endif /* FREECIV_JSON_CONNECTION */
78776 {
78777 int readin;
78778
78779 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78781 }
78782 real_packet->terrain = readin;
78783 }
78784#ifdef FREECIV_JSON_CONNECTION
78785 field_addr.name = "size";
78786#endif /* FREECIV_JSON_CONNECTION */
78787 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
78789 }
78790#endif
78791 log_packet_detailed("packet_edit_tile_terrain_100: got info about (%d)",
78792 real_packet->tile);
78793
78794#ifdef FREECIV_DELTA_PROTOCOL
78795 if (NULL == *hash) {
78797 NULL, NULL, NULL, free);
78798 }
78799
78800 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78801 *real_packet = *old;
78802 } else {
78803 int tile;
78804
78805 tile = real_packet->tile;
78806
78807 log_packet_detailed(" no old info");
78808 memset(real_packet, 0, sizeof(*real_packet));
78809
78810 real_packet->tile = tile;
78811 }
78812
78813 if (BV_ISSET(fields, 0)) {
78814 log_packet_detailed(" got field 'terrain'");
78815#ifdef FREECIV_JSON_CONNECTION
78816 field_addr.name = "terrain";
78817#endif /* FREECIV_JSON_CONNECTION */
78818 {
78819 int readin;
78820
78821 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78823 }
78824 real_packet->terrain = readin;
78825 }
78826 }
78827 if (BV_ISSET(fields, 1)) {
78828 log_packet_detailed(" got field 'size'");
78829#ifdef FREECIV_JSON_CONNECTION
78830 field_addr.name = "size";
78831#endif /* FREECIV_JSON_CONNECTION */
78832 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
78834 }
78835 }
78836
78837 if (NULL == old) {
78838 old = fc_malloc(sizeof(*old));
78839 *old = *real_packet;
78840 genhash_insert(*hash, old, old);
78841 } else {
78842 *old = *real_packet;
78843 }
78844
78845#endif /* FREECIV_DELTA_PROTOCOL */
78847}
78848
78850{
78851 const struct packet_edit_tile_terrain *real_packet = packet;
78852 int e;
78853#ifdef FREECIV_DELTA_PROTOCOL
78855 struct packet_edit_tile_terrain *old;
78856 bool differ;
78857 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_TERRAIN;
78858#endif /* FREECIV_DELTA_PROTOCOL */
78860#ifdef FREECIV_JSON_CONNECTION
78861 struct plocation field_addr;
78862 {
78866 }
78867#endif /* FREECIV_JSON_CONNECTION */
78868
78869 log_packet_detailed("packet_edit_tile_terrain_100: sending info about (%d)",
78870 real_packet->tile);
78871
78872#ifdef FREECIV_DELTA_PROTOCOL
78873 if (NULL == *hash) {
78875 NULL, NULL, NULL, free);
78876 }
78877 BV_CLR_ALL(fields);
78878
78879 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78880 old = fc_malloc(sizeof(*old));
78881 *old = *real_packet;
78882 genhash_insert(*hash, old, old);
78883 memset(old, 0, sizeof(*old));
78884 }
78885 differ = (old->terrain != real_packet->terrain);
78886 if (differ) {
78887 BV_SET(fields, 0);
78888 }
78889
78890 differ = (old->size != real_packet->size);
78891 if (differ) {
78892 BV_SET(fields, 1);
78893 }
78894
78895
78896#ifdef FREECIV_JSON_CONNECTION
78897 field_addr.name = "fields";
78898#endif /* FREECIV_JSON_CONNECTION */
78899 e = 0;
78900 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78901 if (e) {
78902 log_packet_detailed("fields bitvector error detected");
78903 }
78904#ifdef FREECIV_JSON_CONNECTION
78905 field_addr.name = "tile";
78906#endif /* FREECIV_JSON_CONNECTION */
78907 e = 0;
78908 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
78909 if (e) {
78910 log_packet_detailed("'tile' field error detected");
78911 }
78912
78913 if (BV_ISSET(fields, 0)) {
78914 log_packet_detailed(" field 'terrain' has changed");
78915#ifdef FREECIV_JSON_CONNECTION
78916 field_addr.name = "terrain";
78917#endif /* FREECIV_JSON_CONNECTION */
78918 e = 0;
78919 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
78920 if (e) {
78921 log_packet_detailed("'terrain' field error detected");
78922 }
78923 }
78924 if (BV_ISSET(fields, 1)) {
78925 log_packet_detailed(" field 'size' has changed");
78926#ifdef FREECIV_JSON_CONNECTION
78927 field_addr.name = "size";
78928#endif /* FREECIV_JSON_CONNECTION */
78929 e = 0;
78930 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
78931 if (e) {
78932 log_packet_detailed("'size' field error detected");
78933 }
78934 }
78935
78936 *old = *real_packet;
78937#endif /* FREECIV_DELTA_PROTOCOL */
78938#ifndef FREECIV_DELTA_PROTOCOL
78939#ifdef FREECIV_JSON_CONNECTION
78940 field_addr.name = "tile";
78941#endif /* FREECIV_JSON_CONNECTION */
78942 e = 0;
78943 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
78944 if (e) {
78945 log_packet_detailed("'tile' field error detected");
78946 }
78947#ifdef FREECIV_JSON_CONNECTION
78948 field_addr.name = "terrain";
78949#endif /* FREECIV_JSON_CONNECTION */
78950 e = 0;
78951 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
78952 if (e) {
78953 log_packet_detailed("'terrain' field error detected");
78954 }
78955#ifdef FREECIV_JSON_CONNECTION
78956 field_addr.name = "size";
78957#endif /* FREECIV_JSON_CONNECTION */
78958 e = 0;
78959 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
78960 if (e) {
78961 log_packet_detailed("'size' field error detected");
78962 }
78963
78964#endif
78966}
78967
78969{
78970 if (!pc->used) {
78971 log_error("WARNING: trying to send data to the closed connection %s",
78973 return -1;
78974 }
78975 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet != NULL, -1,
78976 "Handler for PACKET_EDIT_TILE_TERRAIN not installed");
78977 return pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet(pc, packet);
78978}
78979
78981{
78982 struct packet_edit_tile_terrain packet, *real_packet = &packet;
78983
78985 real_packet->terrain = terrain;
78986 real_packet->size = size;
78987
78989}
78990
78991#ifdef FREECIV_DELTA_PROTOCOL
78993{
78994 const struct packet_edit_tile_extra *key = (const struct packet_edit_tile_extra *) vkey;
78995 genhash_val_t result = 0;
78996
78997 result += key->tile;
78998
78999 result &= 0xFFFFFFFF;
79000 return result;
79001}
79002
79003static bool cmp_packet_edit_tile_extra_100(const void *vkey1, const void *vkey2)
79004{
79005 const struct packet_edit_tile_extra *old = (const struct packet_edit_tile_extra *) vkey1;
79006 const struct packet_edit_tile_extra *real_packet = (const struct packet_edit_tile_extra *) vkey2;
79007 bool differ;
79008
79009 differ = (old->tile != real_packet->tile);
79010
79011 return !differ;
79012}
79014#endif /* FREECIV_DELTA_PROTOCOL */
79015
79017{
79018#ifdef FREECIV_DELTA_PROTOCOL
79020 struct packet_edit_tile_extra *old;
79021 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_EXTRA;
79022#endif /* FREECIV_DELTA_PROTOCOL */
79024#ifdef FREECIV_JSON_CONNECTION
79025 struct plocation field_addr;
79026 {
79030 }
79031#endif /* FREECIV_JSON_CONNECTION */
79032
79033#ifdef FREECIV_DELTA_PROTOCOL
79034#ifdef FREECIV_JSON_CONNECTION
79035 field_addr.name = "fields";
79036#endif /* FREECIV_JSON_CONNECTION */
79037 DIO_BV_GET(&din, &field_addr, fields);
79038#ifdef FREECIV_JSON_CONNECTION
79039 field_addr.name = "tile";
79040#endif /* FREECIV_JSON_CONNECTION */
79041 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
79043 }
79044
79045#else /* FREECIV_DELTA_PROTOCOL */
79046#ifdef FREECIV_JSON_CONNECTION
79047 field_addr.name = "tile";
79048#endif /* FREECIV_JSON_CONNECTION */
79049 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
79051 }
79052#ifdef FREECIV_JSON_CONNECTION
79053 field_addr.name = "extra_type_id";
79054#endif /* FREECIV_JSON_CONNECTION */
79055 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
79056 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
79057 }
79058#ifdef FREECIV_JSON_CONNECTION
79059 field_addr.name = "removal";
79060#endif /* FREECIV_JSON_CONNECTION */
79061 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
79063 }
79064#ifdef FREECIV_JSON_CONNECTION
79065 field_addr.name = "eowner";
79066#endif /* FREECIV_JSON_CONNECTION */
79067 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->eowner)) {
79069 }
79070#ifdef FREECIV_JSON_CONNECTION
79071 field_addr.name = "size";
79072#endif /* FREECIV_JSON_CONNECTION */
79073 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
79075 }
79076#endif
79077 log_packet_detailed("packet_edit_tile_extra_100: got info about (%d)",
79078 real_packet->tile);
79079
79080#ifdef FREECIV_DELTA_PROTOCOL
79081 if (NULL == *hash) {
79083 NULL, NULL, NULL, free);
79084 }
79085
79086 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
79087 *real_packet = *old;
79088 } else {
79089 int tile;
79090
79091 tile = real_packet->tile;
79092
79093 log_packet_detailed(" no old info");
79094 memset(real_packet, 0, sizeof(*real_packet));
79095
79096 real_packet->tile = tile;
79097 }
79098
79099 if (BV_ISSET(fields, 0)) {
79100 log_packet_detailed(" got field 'extra_type_id'");
79101#ifdef FREECIV_JSON_CONNECTION
79102 field_addr.name = "extra_type_id";
79103#endif /* FREECIV_JSON_CONNECTION */
79104 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
79105 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
79106 }
79107 }
79108 real_packet->removal = BV_ISSET(fields, 1);
79109 if (BV_ISSET(fields, 2)) {
79110 log_packet_detailed(" got field 'eowner'");
79111#ifdef FREECIV_JSON_CONNECTION
79112 field_addr.name = "eowner";
79113#endif /* FREECIV_JSON_CONNECTION */
79114 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->eowner)) {
79116 }
79117 }
79118 if (BV_ISSET(fields, 3)) {
79119 log_packet_detailed(" got field 'size'");
79120#ifdef FREECIV_JSON_CONNECTION
79121 field_addr.name = "size";
79122#endif /* FREECIV_JSON_CONNECTION */
79123 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
79125 }
79126 }
79127
79128 if (NULL == old) {
79129 old = fc_malloc(sizeof(*old));
79130 *old = *real_packet;
79131 genhash_insert(*hash, old, old);
79132 } else {
79133 *old = *real_packet;
79134 }
79135
79136#endif /* FREECIV_DELTA_PROTOCOL */
79138}
79139
79141{
79142 const struct packet_edit_tile_extra *real_packet = packet;
79143 int e;
79144#ifdef FREECIV_DELTA_PROTOCOL
79146 struct packet_edit_tile_extra *old;
79147 bool differ;
79148 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_EXTRA;
79149#endif /* FREECIV_DELTA_PROTOCOL */
79151#ifdef FREECIV_JSON_CONNECTION
79152 struct plocation field_addr;
79153 {
79157 }
79158#endif /* FREECIV_JSON_CONNECTION */
79159
79160 log_packet_detailed("packet_edit_tile_extra_100: sending info about (%d)",
79161 real_packet->tile);
79162
79163#ifdef FREECIV_DELTA_PROTOCOL
79164 if (NULL == *hash) {
79166 NULL, NULL, NULL, free);
79167 }
79168 BV_CLR_ALL(fields);
79169
79170 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79171 old = fc_malloc(sizeof(*old));
79172 *old = *real_packet;
79173 genhash_insert(*hash, old, old);
79174 memset(old, 0, sizeof(*old));
79175 }
79176 differ = (old->extra_type_id != real_packet->extra_type_id);
79177 if (differ) {
79178 BV_SET(fields, 0);
79179 }
79180
79181 if (packet->removal) {
79182 BV_SET(fields, 1);
79183 }
79184
79185 differ = (old->eowner != real_packet->eowner);
79186 if (differ) {
79187 BV_SET(fields, 2);
79188 }
79189
79190 differ = (old->size != real_packet->size);
79191 if (differ) {
79192 BV_SET(fields, 3);
79193 }
79194
79195
79196#ifdef FREECIV_JSON_CONNECTION
79197 field_addr.name = "fields";
79198#endif /* FREECIV_JSON_CONNECTION */
79199 e = 0;
79200 e |= DIO_BV_PUT(&dout, &field_addr, fields);
79201 if (e) {
79202 log_packet_detailed("fields bitvector error detected");
79203 }
79204#ifdef FREECIV_JSON_CONNECTION
79205 field_addr.name = "tile";
79206#endif /* FREECIV_JSON_CONNECTION */
79207 e = 0;
79208 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
79209 if (e) {
79210 log_packet_detailed("'tile' field error detected");
79211 }
79212
79213 if (BV_ISSET(fields, 0)) {
79214 log_packet_detailed(" field 'extra_type_id' has changed");
79215#ifdef FREECIV_JSON_CONNECTION
79216 field_addr.name = "extra_type_id";
79217#endif /* FREECIV_JSON_CONNECTION */
79218 e = 0;
79219 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
79220 if (e) {
79221 log_packet_detailed("'extra_type_id' field error detected");
79222 }
79223 }
79224 /* field 1 is folded into the header */
79225 if (BV_ISSET(fields, 2)) {
79226 log_packet_detailed(" field 'eowner' has changed");
79227#ifdef FREECIV_JSON_CONNECTION
79228 field_addr.name = "eowner";
79229#endif /* FREECIV_JSON_CONNECTION */
79230 e = 0;
79231 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->eowner);
79232 if (e) {
79233 log_packet_detailed("'eowner' field error detected");
79234 }
79235 }
79236 if (BV_ISSET(fields, 3)) {
79237 log_packet_detailed(" field 'size' has changed");
79238#ifdef FREECIV_JSON_CONNECTION
79239 field_addr.name = "size";
79240#endif /* FREECIV_JSON_CONNECTION */
79241 e = 0;
79242 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
79243 if (e) {
79244 log_packet_detailed("'size' field error detected");
79245 }
79246 }
79247
79248 *old = *real_packet;
79249#endif /* FREECIV_DELTA_PROTOCOL */
79250#ifndef FREECIV_DELTA_PROTOCOL
79251#ifdef FREECIV_JSON_CONNECTION
79252 field_addr.name = "tile";
79253#endif /* FREECIV_JSON_CONNECTION */
79254 e = 0;
79255 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
79256 if (e) {
79257 log_packet_detailed("'tile' field error detected");
79258 }
79259#ifdef FREECIV_JSON_CONNECTION
79260 field_addr.name = "extra_type_id";
79261#endif /* FREECIV_JSON_CONNECTION */
79262 e = 0;
79263 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
79264 if (e) {
79265 log_packet_detailed("'extra_type_id' field error detected");
79266 }
79267#ifdef FREECIV_JSON_CONNECTION
79268 field_addr.name = "removal";
79269#endif /* FREECIV_JSON_CONNECTION */
79270 e = 0;
79271 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
79272 if (e) {
79273 log_packet_detailed("'removal' field error detected");
79274 }
79275#ifdef FREECIV_JSON_CONNECTION
79276 field_addr.name = "eowner";
79277#endif /* FREECIV_JSON_CONNECTION */
79278 e = 0;
79279 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->eowner);
79280 if (e) {
79281 log_packet_detailed("'eowner' field error detected");
79282 }
79283#ifdef FREECIV_JSON_CONNECTION
79284 field_addr.name = "size";
79285#endif /* FREECIV_JSON_CONNECTION */
79286 e = 0;
79287 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
79288 if (e) {
79289 log_packet_detailed("'size' field error detected");
79290 }
79291
79292#endif
79294}
79295
79297{
79298 if (!pc->used) {
79299 log_error("WARNING: trying to send data to the closed connection %s",
79301 return -1;
79302 }
79303 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet != NULL, -1,
79304 "Handler for PACKET_EDIT_TILE_EXTRA not installed");
79305 return pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet(pc, packet);
79306}
79307
79308int dsend_packet_edit_tile_extra(struct connection *pc, int tile, int extra_type_id, bool removal, int eowner, int size)
79309{
79310 struct packet_edit_tile_extra packet, *real_packet = &packet;
79311
79313 real_packet->extra_type_id = extra_type_id;
79314 real_packet->removal = removal;
79315 real_packet->eowner = eowner;
79316 real_packet->size = size;
79317
79319}
79320
79322{
79324#ifdef FREECIV_JSON_CONNECTION
79325 struct plocation field_addr;
79326 {
79330 }
79331#endif /* FREECIV_JSON_CONNECTION */
79332#if 1 /* To match endif */
79333#ifdef FREECIV_JSON_CONNECTION
79334 field_addr.name = "id";
79335#endif /* FREECIV_JSON_CONNECTION */
79336 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
79338 }
79339#ifdef FREECIV_JSON_CONNECTION
79340 field_addr.name = "removal";
79341#endif /* FREECIV_JSON_CONNECTION */
79342 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
79344 }
79345#ifdef FREECIV_JSON_CONNECTION
79346 field_addr.name = "tag";
79347#endif /* FREECIV_JSON_CONNECTION */
79348 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
79350 }
79351#endif
79352 log_packet_detailed("packet_edit_startpos_100: got info about ()");
79354}
79355
79356static int send_packet_edit_startpos_100(struct connection *pc, const struct packet_edit_startpos *packet)
79357{
79358 const struct packet_edit_startpos *real_packet = packet;
79359 int e;
79361#ifdef FREECIV_JSON_CONNECTION
79362 struct plocation field_addr;
79363 {
79367 }
79368#endif /* FREECIV_JSON_CONNECTION */
79369
79370 log_packet_detailed("packet_edit_startpos_100: sending info about ()");
79371#if 1 /* To match endif */
79372#ifdef FREECIV_JSON_CONNECTION
79373 field_addr.name = "id";
79374#endif /* FREECIV_JSON_CONNECTION */
79375 e = 0;
79376 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
79377 if (e) {
79378 log_packet_detailed("'id' field error detected");
79379 }
79380#ifdef FREECIV_JSON_CONNECTION
79381 field_addr.name = "removal";
79382#endif /* FREECIV_JSON_CONNECTION */
79383 e = 0;
79384 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
79385 if (e) {
79386 log_packet_detailed("'removal' field error detected");
79387 }
79388#ifdef FREECIV_JSON_CONNECTION
79389 field_addr.name = "tag";
79390#endif /* FREECIV_JSON_CONNECTION */
79391 e = 0;
79392 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
79393 if (e) {
79394 log_packet_detailed("'tag' field error detected");
79395 }
79396
79397#endif
79399}
79400
79402{
79403 if (!pc->used) {
79404 log_error("WARNING: trying to send data to the closed connection %s",
79406 return -1;
79407 }
79408 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet != NULL, -1,
79409 "Handler for PACKET_EDIT_STARTPOS not installed");
79410 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet(pc, packet);
79411}
79412
79413int dsend_packet_edit_startpos(struct connection *pc, int id, bool removal, int tag)
79414{
79415 struct packet_edit_startpos packet, *real_packet = &packet;
79416
79417 real_packet->id = id;
79418 real_packet->removal = removal;
79419 real_packet->tag = tag;
79420
79422}
79423
79425{
79427#ifdef FREECIV_JSON_CONNECTION
79428 struct plocation field_addr;
79429 {
79433 }
79434#endif /* FREECIV_JSON_CONNECTION */
79435#if 1 /* To match endif */
79436#ifdef FREECIV_JSON_CONNECTION
79437 field_addr.name = "id";
79438#endif /* FREECIV_JSON_CONNECTION */
79439 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
79441 }
79442#ifdef FREECIV_JSON_CONNECTION
79443 field_addr.name = "exclude";
79444#endif /* FREECIV_JSON_CONNECTION */
79445 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->exclude)) {
79447 }
79448#ifdef FREECIV_JSON_CONNECTION
79449 field_addr.name = "nations";
79450#endif /* FREECIV_JSON_CONNECTION */
79451 if (!DIO_BV_GET(&din, &field_addr, real_packet->nations)) {
79453 }
79454#endif
79455 log_packet_detailed("packet_edit_startpos_full_100: got info about ()");
79457}
79458
79460{
79461 const struct packet_edit_startpos_full *real_packet = packet;
79462 int e;
79464#ifdef FREECIV_JSON_CONNECTION
79465 struct plocation field_addr;
79466 {
79470 }
79471#endif /* FREECIV_JSON_CONNECTION */
79472
79473 log_packet_detailed("packet_edit_startpos_full_100: sending info about ()");
79474#if 1 /* To match endif */
79475#ifdef FREECIV_JSON_CONNECTION
79476 field_addr.name = "id";
79477#endif /* FREECIV_JSON_CONNECTION */
79478 e = 0;
79479 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
79480 if (e) {
79481 log_packet_detailed("'id' field error detected");
79482 }
79483#ifdef FREECIV_JSON_CONNECTION
79484 field_addr.name = "exclude";
79485#endif /* FREECIV_JSON_CONNECTION */
79486 e = 0;
79487 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->exclude);
79488 if (e) {
79489 log_packet_detailed("'exclude' field error detected");
79490 }
79491#ifdef FREECIV_JSON_CONNECTION
79492 field_addr.name = "nations";
79493#endif /* FREECIV_JSON_CONNECTION */
79494 e = 0;
79495 e |= DIO_BV_PUT(&dout, &field_addr, packet->nations);
79496 if (e) {
79497 log_packet_detailed("'nations' field error detected");
79498 }
79499
79500#endif
79502}
79503
79505{
79506 if (!pc->used) {
79507 log_error("WARNING: trying to send data to the closed connection %s",
79509 return -1;
79510 }
79511 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet != NULL, -1,
79512 "Handler for PACKET_EDIT_STARTPOS_FULL not installed");
79513 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet(pc, packet);
79514}
79515
79516#ifdef FREECIV_DELTA_PROTOCOL
79518{
79519 const struct packet_edit_tile *key = (const struct packet_edit_tile *) vkey;
79520 genhash_val_t result = 0;
79521
79522 result += key->tile;
79523
79524 result &= 0xFFFFFFFF;
79525 return result;
79526}
79527
79528static bool cmp_packet_edit_tile_100(const void *vkey1, const void *vkey2)
79529{
79530 const struct packet_edit_tile *old = (const struct packet_edit_tile *) vkey1;
79531 const struct packet_edit_tile *real_packet = (const struct packet_edit_tile *) vkey2;
79532 bool differ;
79533
79534 differ = (old->tile != real_packet->tile);
79535
79536 return !differ;
79537}
79539#endif /* FREECIV_DELTA_PROTOCOL */
79540
79542{
79543#ifdef FREECIV_DELTA_PROTOCOL
79545 struct packet_edit_tile *old;
79546 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE;
79547#endif /* FREECIV_DELTA_PROTOCOL */
79549#ifdef FREECIV_JSON_CONNECTION
79550 struct plocation field_addr;
79551 {
79555 }
79556#endif /* FREECIV_JSON_CONNECTION */
79557
79558#ifdef FREECIV_DELTA_PROTOCOL
79559#ifdef FREECIV_JSON_CONNECTION
79560 field_addr.name = "fields";
79561#endif /* FREECIV_JSON_CONNECTION */
79562 DIO_BV_GET(&din, &field_addr, fields);
79563#ifdef FREECIV_JSON_CONNECTION
79564 field_addr.name = "tile";
79565#endif /* FREECIV_JSON_CONNECTION */
79566 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
79568 }
79569
79570#else /* FREECIV_DELTA_PROTOCOL */
79571#ifdef FREECIV_JSON_CONNECTION
79572 field_addr.name = "tile";
79573#endif /* FREECIV_JSON_CONNECTION */
79574 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
79576 }
79577#ifdef FREECIV_JSON_CONNECTION
79578 field_addr.name = "extras";
79579#endif /* FREECIV_JSON_CONNECTION */
79580 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
79582 }
79583#ifdef FREECIV_JSON_CONNECTION
79584 field_addr.name = "resource";
79585#endif /* FREECIV_JSON_CONNECTION */
79586 {
79587 int readin;
79588
79589 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79591 }
79592 real_packet->resource = readin;
79593 }
79594#ifdef FREECIV_JSON_CONNECTION
79595 field_addr.name = "terrain";
79596#endif /* FREECIV_JSON_CONNECTION */
79597 {
79598 int readin;
79599
79600 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79602 }
79603 real_packet->terrain = readin;
79604 }
79605#ifdef FREECIV_JSON_CONNECTION
79606 field_addr.name = "startpos_nation";
79607#endif /* FREECIV_JSON_CONNECTION */
79608 {
79609 int readin;
79610
79611 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
79612 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
79613 }
79614 real_packet->startpos_nation = readin;
79615 }
79616#ifdef FREECIV_JSON_CONNECTION
79617 field_addr.name = "eowner";
79618#endif /* FREECIV_JSON_CONNECTION */
79619 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->eowner)) {
79621 }
79622#ifdef FREECIV_JSON_CONNECTION
79623 field_addr.name = "label";
79624#endif /* FREECIV_JSON_CONNECTION */
79625 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
79627 }
79628#endif
79629 log_packet_detailed("packet_edit_tile_100: got info about (%d)",
79630 real_packet->tile);
79631
79632#ifdef FREECIV_DELTA_PROTOCOL
79633 if (NULL == *hash) {
79635 NULL, NULL, NULL, free);
79636 }
79637
79638 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
79639 *real_packet = *old;
79640 } else {
79641 int tile;
79642
79643 tile = real_packet->tile;
79644
79645 log_packet_detailed(" no old info");
79646 memset(real_packet, 0, sizeof(*real_packet));
79647
79648 real_packet->tile = tile;
79649 }
79650
79651 if (BV_ISSET(fields, 0)) {
79652 log_packet_detailed(" got field 'extras'");
79653#ifdef FREECIV_JSON_CONNECTION
79654 field_addr.name = "extras";
79655#endif /* FREECIV_JSON_CONNECTION */
79656 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
79658 }
79659 }
79660 if (BV_ISSET(fields, 1)) {
79661 log_packet_detailed(" got field 'resource'");
79662#ifdef FREECIV_JSON_CONNECTION
79663 field_addr.name = "resource";
79664#endif /* FREECIV_JSON_CONNECTION */
79665 {
79666 int readin;
79667
79668 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79670 }
79671 real_packet->resource = readin;
79672 }
79673 }
79674 if (BV_ISSET(fields, 2)) {
79675 log_packet_detailed(" got field 'terrain'");
79676#ifdef FREECIV_JSON_CONNECTION
79677 field_addr.name = "terrain";
79678#endif /* FREECIV_JSON_CONNECTION */
79679 {
79680 int readin;
79681
79682 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
79684 }
79685 real_packet->terrain = readin;
79686 }
79687 }
79688 if (BV_ISSET(fields, 3)) {
79689 log_packet_detailed(" got field 'startpos_nation'");
79690#ifdef FREECIV_JSON_CONNECTION
79691 field_addr.name = "startpos_nation";
79692#endif /* FREECIV_JSON_CONNECTION */
79693 {
79694 int readin;
79695
79696 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
79697 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
79698 }
79699 real_packet->startpos_nation = readin;
79700 }
79701 }
79702 if (BV_ISSET(fields, 4)) {
79703 log_packet_detailed(" got field 'eowner'");
79704#ifdef FREECIV_JSON_CONNECTION
79705 field_addr.name = "eowner";
79706#endif /* FREECIV_JSON_CONNECTION */
79707 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->eowner)) {
79709 }
79710 }
79711 if (BV_ISSET(fields, 5)) {
79712 log_packet_detailed(" got field 'label'");
79713#ifdef FREECIV_JSON_CONNECTION
79714 field_addr.name = "label";
79715#endif /* FREECIV_JSON_CONNECTION */
79716 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
79718 }
79719 }
79720
79721 if (NULL == old) {
79722 old = fc_malloc(sizeof(*old));
79723 *old = *real_packet;
79724 genhash_insert(*hash, old, old);
79725 } else {
79726 *old = *real_packet;
79727 }
79728
79729#endif /* FREECIV_DELTA_PROTOCOL */
79731}
79732
79733static int send_packet_edit_tile_100(struct connection *pc, const struct packet_edit_tile *packet)
79734{
79735 const struct packet_edit_tile *real_packet = packet;
79736 int e;
79737#ifdef FREECIV_DELTA_PROTOCOL
79739 struct packet_edit_tile *old;
79740 bool differ;
79741 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE;
79742#endif /* FREECIV_DELTA_PROTOCOL */
79744#ifdef FREECIV_JSON_CONNECTION
79745 struct plocation field_addr;
79746 {
79750 }
79751#endif /* FREECIV_JSON_CONNECTION */
79752
79753 log_packet_detailed("packet_edit_tile_100: sending info about (%d)",
79754 real_packet->tile);
79755
79756#ifdef FREECIV_DELTA_PROTOCOL
79757 if (NULL == *hash) {
79759 NULL, NULL, NULL, free);
79760 }
79761 BV_CLR_ALL(fields);
79762
79763 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79764 old = fc_malloc(sizeof(*old));
79765 *old = *real_packet;
79766 genhash_insert(*hash, old, old);
79767 memset(old, 0, sizeof(*old));
79768 }
79769 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
79770 if (differ) {
79771 BV_SET(fields, 0);
79772 }
79773
79774 differ = (old->resource != real_packet->resource);
79775 if (differ) {
79776 BV_SET(fields, 1);
79777 }
79778
79779 differ = (old->terrain != real_packet->terrain);
79780 if (differ) {
79781 BV_SET(fields, 2);
79782 }
79783
79784 differ = (old->startpos_nation != real_packet->startpos_nation);
79785 if (differ) {
79786 BV_SET(fields, 3);
79787 }
79788
79789 differ = (old->eowner != real_packet->eowner);
79790 if (differ) {
79791 BV_SET(fields, 4);
79792 }
79793
79794 differ = (strcmp(old->label, real_packet->label) != 0);
79795 if (differ) {
79796 BV_SET(fields, 5);
79797 }
79798
79799
79800#ifdef FREECIV_JSON_CONNECTION
79801 field_addr.name = "fields";
79802#endif /* FREECIV_JSON_CONNECTION */
79803 e = 0;
79804 e |= DIO_BV_PUT(&dout, &field_addr, fields);
79805 if (e) {
79806 log_packet_detailed("fields bitvector error detected");
79807 }
79808#ifdef FREECIV_JSON_CONNECTION
79809 field_addr.name = "tile";
79810#endif /* FREECIV_JSON_CONNECTION */
79811 e = 0;
79812 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
79813 if (e) {
79814 log_packet_detailed("'tile' field error detected");
79815 }
79816
79817 if (BV_ISSET(fields, 0)) {
79818 log_packet_detailed(" field 'extras' has changed");
79819#ifdef FREECIV_JSON_CONNECTION
79820 field_addr.name = "extras";
79821#endif /* FREECIV_JSON_CONNECTION */
79822 e = 0;
79823 e |= DIO_BV_PUT(&dout, &field_addr, packet->extras);
79824 if (e) {
79825 log_packet_detailed("'extras' field error detected");
79826 }
79827 }
79828 if (BV_ISSET(fields, 1)) {
79829 log_packet_detailed(" field 'resource' has changed");
79830#ifdef FREECIV_JSON_CONNECTION
79831 field_addr.name = "resource";
79832#endif /* FREECIV_JSON_CONNECTION */
79833 e = 0;
79834 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
79835 if (e) {
79836 log_packet_detailed("'resource' field error detected");
79837 }
79838 }
79839 if (BV_ISSET(fields, 2)) {
79840 log_packet_detailed(" field 'terrain' has changed");
79841#ifdef FREECIV_JSON_CONNECTION
79842 field_addr.name = "terrain";
79843#endif /* FREECIV_JSON_CONNECTION */
79844 e = 0;
79845 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
79846 if (e) {
79847 log_packet_detailed("'terrain' field error detected");
79848 }
79849 }
79850 if (BV_ISSET(fields, 3)) {
79851 log_packet_detailed(" field 'startpos_nation' has changed");
79852#ifdef FREECIV_JSON_CONNECTION
79853 field_addr.name = "startpos_nation";
79854#endif /* FREECIV_JSON_CONNECTION */
79855 e = 0;
79856 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
79857 if (e) {
79858 log_packet_detailed("'startpos_nation' field error detected");
79859 }
79860 }
79861 if (BV_ISSET(fields, 4)) {
79862 log_packet_detailed(" field 'eowner' has changed");
79863#ifdef FREECIV_JSON_CONNECTION
79864 field_addr.name = "eowner";
79865#endif /* FREECIV_JSON_CONNECTION */
79866 e = 0;
79867 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->eowner);
79868 if (e) {
79869 log_packet_detailed("'eowner' field error detected");
79870 }
79871 }
79872 if (BV_ISSET(fields, 5)) {
79873 log_packet_detailed(" field 'label' has changed");
79874#ifdef FREECIV_JSON_CONNECTION
79875 field_addr.name = "label";
79876#endif /* FREECIV_JSON_CONNECTION */
79877 e = 0;
79878 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
79879 if (e) {
79880 log_packet_detailed("'label' field error detected");
79881 }
79882 }
79883
79884 *old = *real_packet;
79885#endif /* FREECIV_DELTA_PROTOCOL */
79886#ifndef FREECIV_DELTA_PROTOCOL
79887#ifdef FREECIV_JSON_CONNECTION
79888 field_addr.name = "tile";
79889#endif /* FREECIV_JSON_CONNECTION */
79890 e = 0;
79891 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
79892 if (e) {
79893 log_packet_detailed("'tile' field error detected");
79894 }
79895#ifdef FREECIV_JSON_CONNECTION
79896 field_addr.name = "extras";
79897#endif /* FREECIV_JSON_CONNECTION */
79898 e = 0;
79899 e |= DIO_BV_PUT(&dout, &field_addr, packet->extras);
79900 if (e) {
79901 log_packet_detailed("'extras' field error detected");
79902 }
79903#ifdef FREECIV_JSON_CONNECTION
79904 field_addr.name = "resource";
79905#endif /* FREECIV_JSON_CONNECTION */
79906 e = 0;
79907 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
79908 if (e) {
79909 log_packet_detailed("'resource' field error detected");
79910 }
79911#ifdef FREECIV_JSON_CONNECTION
79912 field_addr.name = "terrain";
79913#endif /* FREECIV_JSON_CONNECTION */
79914 e = 0;
79915 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
79916 if (e) {
79917 log_packet_detailed("'terrain' field error detected");
79918 }
79919#ifdef FREECIV_JSON_CONNECTION
79920 field_addr.name = "startpos_nation";
79921#endif /* FREECIV_JSON_CONNECTION */
79922 e = 0;
79923 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
79924 if (e) {
79925 log_packet_detailed("'startpos_nation' field error detected");
79926 }
79927#ifdef FREECIV_JSON_CONNECTION
79928 field_addr.name = "eowner";
79929#endif /* FREECIV_JSON_CONNECTION */
79930 e = 0;
79931 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->eowner);
79932 if (e) {
79933 log_packet_detailed("'eowner' field error detected");
79934 }
79935#ifdef FREECIV_JSON_CONNECTION
79936 field_addr.name = "label";
79937#endif /* FREECIV_JSON_CONNECTION */
79938 e = 0;
79939 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
79940 if (e) {
79941 log_packet_detailed("'label' field error detected");
79942 }
79943
79944#endif
79946}
79947
79948int send_packet_edit_tile(struct connection *pc, const struct packet_edit_tile *packet)
79949{
79950 if (!pc->used) {
79951 log_error("WARNING: trying to send data to the closed connection %s",
79953 return -1;
79954 }
79955 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE].packet != NULL, -1,
79956 "Handler for PACKET_EDIT_TILE not installed");
79957 return pc->phs.handlers->send[PACKET_EDIT_TILE].packet(pc, packet);
79958}
79959
79960#ifdef FREECIV_DELTA_PROTOCOL
79961#define hash_packet_edit_unit_create_100 hash_const
79962
79963#define cmp_packet_edit_unit_create_100 cmp_const
79964
79966#endif /* FREECIV_DELTA_PROTOCOL */
79967
79969{
79970#ifdef FREECIV_DELTA_PROTOCOL
79972 struct packet_edit_unit_create *old;
79973 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_CREATE;
79974#endif /* FREECIV_DELTA_PROTOCOL */
79976#ifdef FREECIV_JSON_CONNECTION
79977 struct plocation field_addr;
79978 {
79982 }
79983#endif /* FREECIV_JSON_CONNECTION */
79984
79985#ifdef FREECIV_DELTA_PROTOCOL
79986#ifdef FREECIV_JSON_CONNECTION
79987 field_addr.name = "fields";
79988#endif /* FREECIV_JSON_CONNECTION */
79989 DIO_BV_GET(&din, &field_addr, fields);
79990
79991#else /* FREECIV_DELTA_PROTOCOL */
79992#ifdef FREECIV_JSON_CONNECTION
79993 field_addr.name = "owner";
79994#endif /* FREECIV_JSON_CONNECTION */
79995 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
79997 }
79998#ifdef FREECIV_JSON_CONNECTION
79999 field_addr.name = "tile";
80000#endif /* FREECIV_JSON_CONNECTION */
80001 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
80003 }
80004#ifdef FREECIV_JSON_CONNECTION
80005 field_addr.name = "type";
80006#endif /* FREECIV_JSON_CONNECTION */
80007 {
80008 int readin;
80009
80010 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
80012 }
80013 real_packet->type = readin;
80014 }
80015#ifdef FREECIV_JSON_CONNECTION
80016 field_addr.name = "count";
80017#endif /* FREECIV_JSON_CONNECTION */
80018 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
80020 }
80021#ifdef FREECIV_JSON_CONNECTION
80022 field_addr.name = "tag";
80023#endif /* FREECIV_JSON_CONNECTION */
80024 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
80026 }
80027#endif
80028 log_packet_detailed("packet_edit_unit_create_100: got info about ()");
80029
80030#ifdef FREECIV_DELTA_PROTOCOL
80031 if (NULL == *hash) {
80033 NULL, NULL, NULL, free);
80034 }
80035
80036 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80037 *real_packet = *old;
80038 } else {
80039 log_packet_detailed(" no old info");
80040 memset(real_packet, 0, sizeof(*real_packet));
80041 }
80042
80043 if (BV_ISSET(fields, 0)) {
80044 log_packet_detailed(" got field 'owner'");
80045#ifdef FREECIV_JSON_CONNECTION
80046 field_addr.name = "owner";
80047#endif /* FREECIV_JSON_CONNECTION */
80048 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
80050 }
80051 }
80052 if (BV_ISSET(fields, 1)) {
80053 log_packet_detailed(" got field 'tile'");
80054#ifdef FREECIV_JSON_CONNECTION
80055 field_addr.name = "tile";
80056#endif /* FREECIV_JSON_CONNECTION */
80057 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
80059 }
80060 }
80061 if (BV_ISSET(fields, 2)) {
80062 log_packet_detailed(" got field 'type'");
80063#ifdef FREECIV_JSON_CONNECTION
80064 field_addr.name = "type";
80065#endif /* FREECIV_JSON_CONNECTION */
80066 {
80067 int readin;
80068
80069 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
80071 }
80072 real_packet->type = readin;
80073 }
80074 }
80075 if (BV_ISSET(fields, 3)) {
80076 log_packet_detailed(" got field 'count'");
80077#ifdef FREECIV_JSON_CONNECTION
80078 field_addr.name = "count";
80079#endif /* FREECIV_JSON_CONNECTION */
80080 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
80082 }
80083 }
80084 if (BV_ISSET(fields, 4)) {
80085 log_packet_detailed(" got field 'tag'");
80086#ifdef FREECIV_JSON_CONNECTION
80087 field_addr.name = "tag";
80088#endif /* FREECIV_JSON_CONNECTION */
80089 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
80091 }
80092 }
80093
80094 if (NULL == old) {
80095 old = fc_malloc(sizeof(*old));
80096 *old = *real_packet;
80097 genhash_insert(*hash, old, old);
80098 } else {
80099 *old = *real_packet;
80100 }
80101
80102#endif /* FREECIV_DELTA_PROTOCOL */
80104}
80105
80107{
80108 const struct packet_edit_unit_create *real_packet = packet;
80109 int e;
80110#ifdef FREECIV_DELTA_PROTOCOL
80112 struct packet_edit_unit_create *old;
80113 bool differ;
80114 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_CREATE;
80115#endif /* FREECIV_DELTA_PROTOCOL */
80117#ifdef FREECIV_JSON_CONNECTION
80118 struct plocation field_addr;
80119 {
80123 }
80124#endif /* FREECIV_JSON_CONNECTION */
80125
80126 log_packet_detailed("packet_edit_unit_create_100: sending info about ()");
80127
80128#ifdef FREECIV_DELTA_PROTOCOL
80129 if (NULL == *hash) {
80131 NULL, NULL, NULL, free);
80132 }
80133 BV_CLR_ALL(fields);
80134
80135 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80136 old = fc_malloc(sizeof(*old));
80137 *old = *real_packet;
80138 genhash_insert(*hash, old, old);
80139 memset(old, 0, sizeof(*old));
80140 }
80141 differ = (old->owner != real_packet->owner);
80142 if (differ) {
80143 BV_SET(fields, 0);
80144 }
80145
80146 differ = (old->tile != real_packet->tile);
80147 if (differ) {
80148 BV_SET(fields, 1);
80149 }
80150
80151 differ = (old->type != real_packet->type);
80152 if (differ) {
80153 BV_SET(fields, 2);
80154 }
80155
80156 differ = (old->count != real_packet->count);
80157 if (differ) {
80158 BV_SET(fields, 3);
80159 }
80160
80161 differ = (old->tag != real_packet->tag);
80162 if (differ) {
80163 BV_SET(fields, 4);
80164 }
80165
80166
80167#ifdef FREECIV_JSON_CONNECTION
80168 field_addr.name = "fields";
80169#endif /* FREECIV_JSON_CONNECTION */
80170 e = 0;
80171 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80172 if (e) {
80173 log_packet_detailed("fields bitvector error detected");
80174 }
80175
80176 if (BV_ISSET(fields, 0)) {
80177 log_packet_detailed(" field 'owner' has changed");
80178#ifdef FREECIV_JSON_CONNECTION
80179 field_addr.name = "owner";
80180#endif /* FREECIV_JSON_CONNECTION */
80181 e = 0;
80182 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
80183 if (e) {
80184 log_packet_detailed("'owner' field error detected");
80185 }
80186 }
80187 if (BV_ISSET(fields, 1)) {
80188 log_packet_detailed(" field 'tile' has changed");
80189#ifdef FREECIV_JSON_CONNECTION
80190 field_addr.name = "tile";
80191#endif /* FREECIV_JSON_CONNECTION */
80192 e = 0;
80193 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
80194 if (e) {
80195 log_packet_detailed("'tile' field error detected");
80196 }
80197 }
80198 if (BV_ISSET(fields, 2)) {
80199 log_packet_detailed(" field 'type' has changed");
80200#ifdef FREECIV_JSON_CONNECTION
80201 field_addr.name = "type";
80202#endif /* FREECIV_JSON_CONNECTION */
80203 e = 0;
80204 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
80205 if (e) {
80206 log_packet_detailed("'type' field error detected");
80207 }
80208 }
80209 if (BV_ISSET(fields, 3)) {
80210 log_packet_detailed(" field 'count' has changed");
80211#ifdef FREECIV_JSON_CONNECTION
80212 field_addr.name = "count";
80213#endif /* FREECIV_JSON_CONNECTION */
80214 e = 0;
80215 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
80216 if (e) {
80217 log_packet_detailed("'count' field error detected");
80218 }
80219 }
80220 if (BV_ISSET(fields, 4)) {
80221 log_packet_detailed(" field 'tag' has changed");
80222#ifdef FREECIV_JSON_CONNECTION
80223 field_addr.name = "tag";
80224#endif /* FREECIV_JSON_CONNECTION */
80225 e = 0;
80226 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
80227 if (e) {
80228 log_packet_detailed("'tag' field error detected");
80229 }
80230 }
80231
80232 *old = *real_packet;
80233#endif /* FREECIV_DELTA_PROTOCOL */
80234#ifndef FREECIV_DELTA_PROTOCOL
80235#ifdef FREECIV_JSON_CONNECTION
80236 field_addr.name = "owner";
80237#endif /* FREECIV_JSON_CONNECTION */
80238 e = 0;
80239 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
80240 if (e) {
80241 log_packet_detailed("'owner' field error detected");
80242 }
80243#ifdef FREECIV_JSON_CONNECTION
80244 field_addr.name = "tile";
80245#endif /* FREECIV_JSON_CONNECTION */
80246 e = 0;
80247 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
80248 if (e) {
80249 log_packet_detailed("'tile' field error detected");
80250 }
80251#ifdef FREECIV_JSON_CONNECTION
80252 field_addr.name = "type";
80253#endif /* FREECIV_JSON_CONNECTION */
80254 e = 0;
80255 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
80256 if (e) {
80257 log_packet_detailed("'type' field error detected");
80258 }
80259#ifdef FREECIV_JSON_CONNECTION
80260 field_addr.name = "count";
80261#endif /* FREECIV_JSON_CONNECTION */
80262 e = 0;
80263 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
80264 if (e) {
80265 log_packet_detailed("'count' field error detected");
80266 }
80267#ifdef FREECIV_JSON_CONNECTION
80268 field_addr.name = "tag";
80269#endif /* FREECIV_JSON_CONNECTION */
80270 e = 0;
80271 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
80272 if (e) {
80273 log_packet_detailed("'tag' field error detected");
80274 }
80275
80276#endif
80278}
80279
80281{
80282 if (!pc->used) {
80283 log_error("WARNING: trying to send data to the closed connection %s",
80285 return -1;
80286 }
80287 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet != NULL, -1,
80288 "Handler for PACKET_EDIT_UNIT_CREATE not installed");
80289 return pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet(pc, packet);
80290}
80291
80292int dsend_packet_edit_unit_create(struct connection *pc, int owner, int tile, Unit_type_id type, int count, int tag)
80293{
80294 struct packet_edit_unit_create packet, *real_packet = &packet;
80295
80298 real_packet->type = type;
80299 real_packet->count = count;
80300 real_packet->tag = tag;
80301
80303}
80304
80305#ifdef FREECIV_DELTA_PROTOCOL
80306#define hash_packet_edit_unit_remove_100 hash_const
80307
80308#define cmp_packet_edit_unit_remove_100 cmp_const
80309
80311#endif /* FREECIV_DELTA_PROTOCOL */
80312
80314{
80315#ifdef FREECIV_DELTA_PROTOCOL
80317 struct packet_edit_unit_remove *old;
80318 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE;
80319#endif /* FREECIV_DELTA_PROTOCOL */
80321#ifdef FREECIV_JSON_CONNECTION
80322 struct plocation field_addr;
80323 {
80327 }
80328#endif /* FREECIV_JSON_CONNECTION */
80329
80330#ifdef FREECIV_DELTA_PROTOCOL
80331#ifdef FREECIV_JSON_CONNECTION
80332 field_addr.name = "fields";
80333#endif /* FREECIV_JSON_CONNECTION */
80334 DIO_BV_GET(&din, &field_addr, fields);
80335
80336#else /* FREECIV_DELTA_PROTOCOL */
80337#ifdef FREECIV_JSON_CONNECTION
80338 field_addr.name = "owner";
80339#endif /* FREECIV_JSON_CONNECTION */
80340 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
80342 }
80343#ifdef FREECIV_JSON_CONNECTION
80344 field_addr.name = "tile";
80345#endif /* FREECIV_JSON_CONNECTION */
80346 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
80348 }
80349#ifdef FREECIV_JSON_CONNECTION
80350 field_addr.name = "type";
80351#endif /* FREECIV_JSON_CONNECTION */
80352 {
80353 int readin;
80354
80355 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
80357 }
80358 real_packet->type = readin;
80359 }
80360#ifdef FREECIV_JSON_CONNECTION
80361 field_addr.name = "count";
80362#endif /* FREECIV_JSON_CONNECTION */
80363 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
80365 }
80366#endif
80367 log_packet_detailed("packet_edit_unit_remove_100: got info about ()");
80368
80369#ifdef FREECIV_DELTA_PROTOCOL
80370 if (NULL == *hash) {
80372 NULL, NULL, NULL, free);
80373 }
80374
80375 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80376 *real_packet = *old;
80377 } else {
80378 log_packet_detailed(" no old info");
80379 memset(real_packet, 0, sizeof(*real_packet));
80380 }
80381
80382 if (BV_ISSET(fields, 0)) {
80383 log_packet_detailed(" got field 'owner'");
80384#ifdef FREECIV_JSON_CONNECTION
80385 field_addr.name = "owner";
80386#endif /* FREECIV_JSON_CONNECTION */
80387 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
80389 }
80390 }
80391 if (BV_ISSET(fields, 1)) {
80392 log_packet_detailed(" got field 'tile'");
80393#ifdef FREECIV_JSON_CONNECTION
80394 field_addr.name = "tile";
80395#endif /* FREECIV_JSON_CONNECTION */
80396 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
80398 }
80399 }
80400 if (BV_ISSET(fields, 2)) {
80401 log_packet_detailed(" got field 'type'");
80402#ifdef FREECIV_JSON_CONNECTION
80403 field_addr.name = "type";
80404#endif /* FREECIV_JSON_CONNECTION */
80405 {
80406 int readin;
80407
80408 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
80410 }
80411 real_packet->type = readin;
80412 }
80413 }
80414 if (BV_ISSET(fields, 3)) {
80415 log_packet_detailed(" got field 'count'");
80416#ifdef FREECIV_JSON_CONNECTION
80417 field_addr.name = "count";
80418#endif /* FREECIV_JSON_CONNECTION */
80419 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
80421 }
80422 }
80423
80424 if (NULL == old) {
80425 old = fc_malloc(sizeof(*old));
80426 *old = *real_packet;
80427 genhash_insert(*hash, old, old);
80428 } else {
80429 *old = *real_packet;
80430 }
80431
80432#endif /* FREECIV_DELTA_PROTOCOL */
80434}
80435
80437{
80438 const struct packet_edit_unit_remove *real_packet = packet;
80439 int e;
80440#ifdef FREECIV_DELTA_PROTOCOL
80442 struct packet_edit_unit_remove *old;
80443 bool differ;
80444 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE;
80445#endif /* FREECIV_DELTA_PROTOCOL */
80447#ifdef FREECIV_JSON_CONNECTION
80448 struct plocation field_addr;
80449 {
80453 }
80454#endif /* FREECIV_JSON_CONNECTION */
80455
80456 log_packet_detailed("packet_edit_unit_remove_100: sending info about ()");
80457
80458#ifdef FREECIV_DELTA_PROTOCOL
80459 if (NULL == *hash) {
80461 NULL, NULL, NULL, free);
80462 }
80463 BV_CLR_ALL(fields);
80464
80465 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80466 old = fc_malloc(sizeof(*old));
80467 *old = *real_packet;
80468 genhash_insert(*hash, old, old);
80469 memset(old, 0, sizeof(*old));
80470 }
80471 differ = (old->owner != real_packet->owner);
80472 if (differ) {
80473 BV_SET(fields, 0);
80474 }
80475
80476 differ = (old->tile != real_packet->tile);
80477 if (differ) {
80478 BV_SET(fields, 1);
80479 }
80480
80481 differ = (old->type != real_packet->type);
80482 if (differ) {
80483 BV_SET(fields, 2);
80484 }
80485
80486 differ = (old->count != real_packet->count);
80487 if (differ) {
80488 BV_SET(fields, 3);
80489 }
80490
80491
80492#ifdef FREECIV_JSON_CONNECTION
80493 field_addr.name = "fields";
80494#endif /* FREECIV_JSON_CONNECTION */
80495 e = 0;
80496 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80497 if (e) {
80498 log_packet_detailed("fields bitvector error detected");
80499 }
80500
80501 if (BV_ISSET(fields, 0)) {
80502 log_packet_detailed(" field 'owner' has changed");
80503#ifdef FREECIV_JSON_CONNECTION
80504 field_addr.name = "owner";
80505#endif /* FREECIV_JSON_CONNECTION */
80506 e = 0;
80507 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
80508 if (e) {
80509 log_packet_detailed("'owner' field error detected");
80510 }
80511 }
80512 if (BV_ISSET(fields, 1)) {
80513 log_packet_detailed(" field 'tile' has changed");
80514#ifdef FREECIV_JSON_CONNECTION
80515 field_addr.name = "tile";
80516#endif /* FREECIV_JSON_CONNECTION */
80517 e = 0;
80518 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
80519 if (e) {
80520 log_packet_detailed("'tile' field error detected");
80521 }
80522 }
80523 if (BV_ISSET(fields, 2)) {
80524 log_packet_detailed(" field 'type' has changed");
80525#ifdef FREECIV_JSON_CONNECTION
80526 field_addr.name = "type";
80527#endif /* FREECIV_JSON_CONNECTION */
80528 e = 0;
80529 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
80530 if (e) {
80531 log_packet_detailed("'type' field error detected");
80532 }
80533 }
80534 if (BV_ISSET(fields, 3)) {
80535 log_packet_detailed(" field 'count' has changed");
80536#ifdef FREECIV_JSON_CONNECTION
80537 field_addr.name = "count";
80538#endif /* FREECIV_JSON_CONNECTION */
80539 e = 0;
80540 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
80541 if (e) {
80542 log_packet_detailed("'count' field error detected");
80543 }
80544 }
80545
80546 *old = *real_packet;
80547#endif /* FREECIV_DELTA_PROTOCOL */
80548#ifndef FREECIV_DELTA_PROTOCOL
80549#ifdef FREECIV_JSON_CONNECTION
80550 field_addr.name = "owner";
80551#endif /* FREECIV_JSON_CONNECTION */
80552 e = 0;
80553 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
80554 if (e) {
80555 log_packet_detailed("'owner' field error detected");
80556 }
80557#ifdef FREECIV_JSON_CONNECTION
80558 field_addr.name = "tile";
80559#endif /* FREECIV_JSON_CONNECTION */
80560 e = 0;
80561 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
80562 if (e) {
80563 log_packet_detailed("'tile' field error detected");
80564 }
80565#ifdef FREECIV_JSON_CONNECTION
80566 field_addr.name = "type";
80567#endif /* FREECIV_JSON_CONNECTION */
80568 e = 0;
80569 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
80570 if (e) {
80571 log_packet_detailed("'type' field error detected");
80572 }
80573#ifdef FREECIV_JSON_CONNECTION
80574 field_addr.name = "count";
80575#endif /* FREECIV_JSON_CONNECTION */
80576 e = 0;
80577 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
80578 if (e) {
80579 log_packet_detailed("'count' field error detected");
80580 }
80581
80582#endif
80584}
80585
80587{
80588 if (!pc->used) {
80589 log_error("WARNING: trying to send data to the closed connection %s",
80591 return -1;
80592 }
80593 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet != NULL, -1,
80594 "Handler for PACKET_EDIT_UNIT_REMOVE not installed");
80595 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet(pc, packet);
80596}
80597
80599{
80600 struct packet_edit_unit_remove packet, *real_packet = &packet;
80601
80604 real_packet->type = type;
80605 real_packet->count = count;
80606
80608}
80609
80610#ifdef FREECIV_DELTA_PROTOCOL
80611#define hash_packet_edit_unit_remove_by_id_100 hash_const
80612
80613#define cmp_packet_edit_unit_remove_by_id_100 cmp_const
80614
80616#endif /* FREECIV_DELTA_PROTOCOL */
80617
80619{
80620#ifdef FREECIV_DELTA_PROTOCOL
80623 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE_BY_ID;
80624#endif /* FREECIV_DELTA_PROTOCOL */
80626#ifdef FREECIV_JSON_CONNECTION
80627 struct plocation field_addr;
80628 {
80632 }
80633#endif /* FREECIV_JSON_CONNECTION */
80634
80635#ifdef FREECIV_DELTA_PROTOCOL
80636#ifdef FREECIV_JSON_CONNECTION
80637 field_addr.name = "fields";
80638#endif /* FREECIV_JSON_CONNECTION */
80639 DIO_BV_GET(&din, &field_addr, fields);
80640
80641#else /* FREECIV_DELTA_PROTOCOL */
80642#ifdef FREECIV_JSON_CONNECTION
80643 field_addr.name = "id";
80644#endif /* FREECIV_JSON_CONNECTION */
80645 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
80647 }
80648#endif
80649 log_packet_detailed("packet_edit_unit_remove_by_id_100: got info about ()");
80650
80651#ifdef FREECIV_DELTA_PROTOCOL
80652 if (NULL == *hash) {
80654 NULL, NULL, NULL, free);
80655 }
80656
80657 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80658 *real_packet = *old;
80659 } else {
80660 log_packet_detailed(" no old info");
80661 memset(real_packet, 0, sizeof(*real_packet));
80662 }
80663
80664 if (BV_ISSET(fields, 0)) {
80665 log_packet_detailed(" got field 'id'");
80666#ifdef FREECIV_JSON_CONNECTION
80667 field_addr.name = "id";
80668#endif /* FREECIV_JSON_CONNECTION */
80669 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
80671 }
80672 }
80673
80674 if (NULL == old) {
80675 old = fc_malloc(sizeof(*old));
80676 *old = *real_packet;
80677 genhash_insert(*hash, old, old);
80678 } else {
80679 *old = *real_packet;
80680 }
80681
80682#endif /* FREECIV_DELTA_PROTOCOL */
80684}
80685
80687{
80688 const struct packet_edit_unit_remove_by_id *real_packet = packet;
80689 int e;
80690#ifdef FREECIV_DELTA_PROTOCOL
80693 bool differ;
80694 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE_BY_ID;
80695#endif /* FREECIV_DELTA_PROTOCOL */
80697#ifdef FREECIV_JSON_CONNECTION
80698 struct plocation field_addr;
80699 {
80703 }
80704#endif /* FREECIV_JSON_CONNECTION */
80705
80706 log_packet_detailed("packet_edit_unit_remove_by_id_100: sending info about ()");
80707
80708#ifdef FREECIV_DELTA_PROTOCOL
80709 if (NULL == *hash) {
80711 NULL, NULL, NULL, free);
80712 }
80713 BV_CLR_ALL(fields);
80714
80715 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80716 old = fc_malloc(sizeof(*old));
80717 *old = *real_packet;
80718 genhash_insert(*hash, old, old);
80719 memset(old, 0, sizeof(*old));
80720 }
80721 differ = (old->id != real_packet->id);
80722 if (differ) {
80723 BV_SET(fields, 0);
80724 }
80725
80726
80727#ifdef FREECIV_JSON_CONNECTION
80728 field_addr.name = "fields";
80729#endif /* FREECIV_JSON_CONNECTION */
80730 e = 0;
80731 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80732 if (e) {
80733 log_packet_detailed("fields bitvector error detected");
80734 }
80735
80736 if (BV_ISSET(fields, 0)) {
80737 log_packet_detailed(" field 'id' has changed");
80738#ifdef FREECIV_JSON_CONNECTION
80739 field_addr.name = "id";
80740#endif /* FREECIV_JSON_CONNECTION */
80741 e = 0;
80742 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
80743 if (e) {
80744 log_packet_detailed("'id' field error detected");
80745 }
80746 }
80747
80748 *old = *real_packet;
80749#endif /* FREECIV_DELTA_PROTOCOL */
80750#ifndef FREECIV_DELTA_PROTOCOL
80751#ifdef FREECIV_JSON_CONNECTION
80752 field_addr.name = "id";
80753#endif /* FREECIV_JSON_CONNECTION */
80754 e = 0;
80755 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
80756 if (e) {
80757 log_packet_detailed("'id' field error detected");
80758 }
80759
80760#endif
80762}
80763
80765{
80766 if (!pc->used) {
80767 log_error("WARNING: trying to send data to the closed connection %s",
80769 return -1;
80770 }
80771 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet != NULL, -1,
80772 "Handler for PACKET_EDIT_UNIT_REMOVE_BY_ID not installed");
80773 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet(pc, packet);
80774}
80775
80777{
80778 struct packet_edit_unit_remove_by_id packet, *real_packet = &packet;
80779
80780 real_packet->id = id;
80781
80783}
80784
80785#ifdef FREECIV_DELTA_PROTOCOL
80787{
80788 const struct packet_edit_unit *key = (const struct packet_edit_unit *) vkey;
80789 genhash_val_t result = 0;
80790
80791 result += key->id;
80792
80793 result &= 0xFFFFFFFF;
80794 return result;
80795}
80796
80797static bool cmp_packet_edit_unit_100(const void *vkey1, const void *vkey2)
80798{
80799 const struct packet_edit_unit *old = (const struct packet_edit_unit *) vkey1;
80800 const struct packet_edit_unit *real_packet = (const struct packet_edit_unit *) vkey2;
80801 bool differ;
80802
80803 differ = (old->id != real_packet->id);
80804
80805 return !differ;
80806}
80808#endif /* FREECIV_DELTA_PROTOCOL */
80809
80811{
80812#ifdef FREECIV_DELTA_PROTOCOL
80814 struct packet_edit_unit *old;
80815 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT;
80816#endif /* FREECIV_DELTA_PROTOCOL */
80818#ifdef FREECIV_JSON_CONNECTION
80819 struct plocation field_addr;
80820 {
80824 }
80825#endif /* FREECIV_JSON_CONNECTION */
80826
80827#ifdef FREECIV_DELTA_PROTOCOL
80828#ifdef FREECIV_JSON_CONNECTION
80829 field_addr.name = "fields";
80830#endif /* FREECIV_JSON_CONNECTION */
80831 DIO_BV_GET(&din, &field_addr, fields);
80832#ifdef FREECIV_JSON_CONNECTION
80833 field_addr.name = "id";
80834#endif /* FREECIV_JSON_CONNECTION */
80835 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
80837 }
80838
80839#else /* FREECIV_DELTA_PROTOCOL */
80840#ifdef FREECIV_JSON_CONNECTION
80841 field_addr.name = "id";
80842#endif /* FREECIV_JSON_CONNECTION */
80843 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
80845 }
80846#ifdef FREECIV_JSON_CONNECTION
80847 field_addr.name = "utype";
80848#endif /* FREECIV_JSON_CONNECTION */
80849 {
80850 int readin;
80851
80852 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
80854 }
80855 real_packet->utype = readin;
80856 }
80857#ifdef FREECIV_JSON_CONNECTION
80858 field_addr.name = "owner";
80859#endif /* FREECIV_JSON_CONNECTION */
80860 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
80862 }
80863#ifdef FREECIV_JSON_CONNECTION
80864 field_addr.name = "homecity";
80865#endif /* FREECIV_JSON_CONNECTION */
80866 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
80868 }
80869#ifdef FREECIV_JSON_CONNECTION
80870 field_addr.name = "moves_left";
80871#endif /* FREECIV_JSON_CONNECTION */
80872 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
80873 RECEIVE_PACKET_FIELD_ERROR(moves_left);
80874 }
80875#ifdef FREECIV_JSON_CONNECTION
80876 field_addr.name = "hp";
80877#endif /* FREECIV_JSON_CONNECTION */
80878 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
80880 }
80881#ifdef FREECIV_JSON_CONNECTION
80882 field_addr.name = "veteran";
80883#endif /* FREECIV_JSON_CONNECTION */
80884 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
80886 }
80887#ifdef FREECIV_JSON_CONNECTION
80888 field_addr.name = "fuel";
80889#endif /* FREECIV_JSON_CONNECTION */
80890 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
80892 }
80893#ifdef FREECIV_JSON_CONNECTION
80894 field_addr.name = "activity";
80895#endif /* FREECIV_JSON_CONNECTION */
80896 {
80897 int readin;
80898
80899 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
80901 }
80902 real_packet->activity = readin;
80903 }
80904#ifdef FREECIV_JSON_CONNECTION
80905 field_addr.name = "activity_count";
80906#endif /* FREECIV_JSON_CONNECTION */
80907 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
80908 RECEIVE_PACKET_FIELD_ERROR(activity_count);
80909 }
80910#ifdef FREECIV_JSON_CONNECTION
80911 field_addr.name = "activity_base";
80912#endif /* FREECIV_JSON_CONNECTION */
80913 {
80914 int readin;
80915
80916 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
80917 RECEIVE_PACKET_FIELD_ERROR(activity_base);
80918 }
80919 real_packet->activity_base = readin;
80920 }
80921#ifdef FREECIV_JSON_CONNECTION
80922 field_addr.name = "debug";
80923#endif /* FREECIV_JSON_CONNECTION */
80924 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
80926 }
80927#ifdef FREECIV_JSON_CONNECTION
80928 field_addr.name = "moved";
80929#endif /* FREECIV_JSON_CONNECTION */
80930 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->moved)) {
80932 }
80933#ifdef FREECIV_JSON_CONNECTION
80934 field_addr.name = "paradropped";
80935#endif /* FREECIV_JSON_CONNECTION */
80936 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
80937 RECEIVE_PACKET_FIELD_ERROR(paradropped);
80938 }
80939#ifdef FREECIV_JSON_CONNECTION
80940 field_addr.name = "done_moving";
80941#endif /* FREECIV_JSON_CONNECTION */
80942 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
80943 RECEIVE_PACKET_FIELD_ERROR(done_moving);
80944 }
80945#ifdef FREECIV_JSON_CONNECTION
80946 field_addr.name = "transported_by";
80947#endif /* FREECIV_JSON_CONNECTION */
80948 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
80949 RECEIVE_PACKET_FIELD_ERROR(transported_by);
80950 }
80951#ifdef FREECIV_JSON_CONNECTION
80952 field_addr.name = "stay";
80953#endif /* FREECIV_JSON_CONNECTION */
80954 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
80956 }
80957#endif
80958 log_packet_detailed("packet_edit_unit_100: got info about (%d)",
80959 real_packet->id);
80960
80961#ifdef FREECIV_DELTA_PROTOCOL
80962 if (NULL == *hash) {
80964 NULL, NULL, NULL, free);
80965 }
80966
80967 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80968 *real_packet = *old;
80969 } else {
80970 int id;
80971
80972 id = real_packet->id;
80973
80974 log_packet_detailed(" no old info");
80975 memset(real_packet, 0, sizeof(*real_packet));
80976
80977 real_packet->id = id;
80978 }
80979
80980 if (BV_ISSET(fields, 0)) {
80981 log_packet_detailed(" got field 'utype'");
80982#ifdef FREECIV_JSON_CONNECTION
80983 field_addr.name = "utype";
80984#endif /* FREECIV_JSON_CONNECTION */
80985 {
80986 int readin;
80987
80988 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
80990 }
80991 real_packet->utype = readin;
80992 }
80993 }
80994 if (BV_ISSET(fields, 1)) {
80995 log_packet_detailed(" got field 'owner'");
80996#ifdef FREECIV_JSON_CONNECTION
80997 field_addr.name = "owner";
80998#endif /* FREECIV_JSON_CONNECTION */
80999 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
81001 }
81002 }
81003 if (BV_ISSET(fields, 2)) {
81004 log_packet_detailed(" got field 'homecity'");
81005#ifdef FREECIV_JSON_CONNECTION
81006 field_addr.name = "homecity";
81007#endif /* FREECIV_JSON_CONNECTION */
81008 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
81010 }
81011 }
81012 if (BV_ISSET(fields, 3)) {
81013 log_packet_detailed(" got field 'moves_left'");
81014#ifdef FREECIV_JSON_CONNECTION
81015 field_addr.name = "moves_left";
81016#endif /* FREECIV_JSON_CONNECTION */
81017 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
81018 RECEIVE_PACKET_FIELD_ERROR(moves_left);
81019 }
81020 }
81021 if (BV_ISSET(fields, 4)) {
81022 log_packet_detailed(" got field 'hp'");
81023#ifdef FREECIV_JSON_CONNECTION
81024 field_addr.name = "hp";
81025#endif /* FREECIV_JSON_CONNECTION */
81026 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
81028 }
81029 }
81030 if (BV_ISSET(fields, 5)) {
81031 log_packet_detailed(" got field 'veteran'");
81032#ifdef FREECIV_JSON_CONNECTION
81033 field_addr.name = "veteran";
81034#endif /* FREECIV_JSON_CONNECTION */
81035 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
81037 }
81038 }
81039 if (BV_ISSET(fields, 6)) {
81040 log_packet_detailed(" got field 'fuel'");
81041#ifdef FREECIV_JSON_CONNECTION
81042 field_addr.name = "fuel";
81043#endif /* FREECIV_JSON_CONNECTION */
81044 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
81046 }
81047 }
81048 if (BV_ISSET(fields, 7)) {
81049 log_packet_detailed(" got field 'activity'");
81050#ifdef FREECIV_JSON_CONNECTION
81051 field_addr.name = "activity";
81052#endif /* FREECIV_JSON_CONNECTION */
81053 {
81054 int readin;
81055
81056 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
81058 }
81059 real_packet->activity = readin;
81060 }
81061 }
81062 if (BV_ISSET(fields, 8)) {
81063 log_packet_detailed(" got field 'activity_count'");
81064#ifdef FREECIV_JSON_CONNECTION
81065 field_addr.name = "activity_count";
81066#endif /* FREECIV_JSON_CONNECTION */
81067 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
81068 RECEIVE_PACKET_FIELD_ERROR(activity_count);
81069 }
81070 }
81071 if (BV_ISSET(fields, 9)) {
81072 log_packet_detailed(" got field 'activity_base'");
81073#ifdef FREECIV_JSON_CONNECTION
81074 field_addr.name = "activity_base";
81075#endif /* FREECIV_JSON_CONNECTION */
81076 {
81077 int readin;
81078
81079 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
81080 RECEIVE_PACKET_FIELD_ERROR(activity_base);
81081 }
81082 real_packet->activity_base = readin;
81083 }
81084 }
81085 real_packet->debug = BV_ISSET(fields, 10);
81086 real_packet->moved = BV_ISSET(fields, 11);
81087 real_packet->paradropped = BV_ISSET(fields, 12);
81088 real_packet->done_moving = BV_ISSET(fields, 13);
81089 if (BV_ISSET(fields, 14)) {
81090 log_packet_detailed(" got field 'transported_by'");
81091#ifdef FREECIV_JSON_CONNECTION
81092 field_addr.name = "transported_by";
81093#endif /* FREECIV_JSON_CONNECTION */
81094 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
81095 RECEIVE_PACKET_FIELD_ERROR(transported_by);
81096 }
81097 }
81098 real_packet->stay = BV_ISSET(fields, 15);
81099
81100 if (NULL == old) {
81101 old = fc_malloc(sizeof(*old));
81102 *old = *real_packet;
81103 genhash_insert(*hash, old, old);
81104 } else {
81105 *old = *real_packet;
81106 }
81107
81108#endif /* FREECIV_DELTA_PROTOCOL */
81110}
81111
81112static int send_packet_edit_unit_100(struct connection *pc, const struct packet_edit_unit *packet)
81113{
81114 const struct packet_edit_unit *real_packet = packet;
81115 int e;
81116#ifdef FREECIV_DELTA_PROTOCOL
81118 struct packet_edit_unit *old;
81119 bool differ;
81120 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT;
81121#endif /* FREECIV_DELTA_PROTOCOL */
81123#ifdef FREECIV_JSON_CONNECTION
81124 struct plocation field_addr;
81125 {
81129 }
81130#endif /* FREECIV_JSON_CONNECTION */
81131
81132 log_packet_detailed("packet_edit_unit_100: sending info about (%d)",
81133 real_packet->id);
81134
81135#ifdef FREECIV_DELTA_PROTOCOL
81136 if (NULL == *hash) {
81138 NULL, NULL, NULL, free);
81139 }
81140 BV_CLR_ALL(fields);
81141
81142 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81143 old = fc_malloc(sizeof(*old));
81144 *old = *real_packet;
81145 genhash_insert(*hash, old, old);
81146 memset(old, 0, sizeof(*old));
81147 }
81148 differ = (old->utype != real_packet->utype);
81149 if (differ) {
81150 BV_SET(fields, 0);
81151 }
81152
81153 differ = (old->owner != real_packet->owner);
81154 if (differ) {
81155 BV_SET(fields, 1);
81156 }
81157
81158 differ = (old->homecity != real_packet->homecity);
81159 if (differ) {
81160 BV_SET(fields, 2);
81161 }
81162
81163 differ = (old->moves_left != real_packet->moves_left);
81164 if (differ) {
81165 BV_SET(fields, 3);
81166 }
81167
81168 differ = (old->hp != real_packet->hp);
81169 if (differ) {
81170 BV_SET(fields, 4);
81171 }
81172
81173 differ = (old->veteran != real_packet->veteran);
81174 if (differ) {
81175 BV_SET(fields, 5);
81176 }
81177
81178 differ = (old->fuel != real_packet->fuel);
81179 if (differ) {
81180 BV_SET(fields, 6);
81181 }
81182
81183 differ = (old->activity != real_packet->activity);
81184 if (differ) {
81185 BV_SET(fields, 7);
81186 }
81187
81188 differ = (old->activity_count != real_packet->activity_count);
81189 if (differ) {
81190 BV_SET(fields, 8);
81191 }
81192
81193 differ = (old->activity_base != real_packet->activity_base);
81194 if (differ) {
81195 BV_SET(fields, 9);
81196 }
81197
81198 if (packet->debug) {
81199 BV_SET(fields, 10);
81200 }
81201
81202 if (packet->moved) {
81203 BV_SET(fields, 11);
81204 }
81205
81206 if (packet->paradropped) {
81207 BV_SET(fields, 12);
81208 }
81209
81210 if (packet->done_moving) {
81211 BV_SET(fields, 13);
81212 }
81213
81214 differ = (old->transported_by != real_packet->transported_by);
81215 if (differ) {
81216 BV_SET(fields, 14);
81217 }
81218
81219 if (packet->stay) {
81220 BV_SET(fields, 15);
81221 }
81222
81223
81224#ifdef FREECIV_JSON_CONNECTION
81225 field_addr.name = "fields";
81226#endif /* FREECIV_JSON_CONNECTION */
81227 e = 0;
81228 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81229 if (e) {
81230 log_packet_detailed("fields bitvector error detected");
81231 }
81232#ifdef FREECIV_JSON_CONNECTION
81233 field_addr.name = "id";
81234#endif /* FREECIV_JSON_CONNECTION */
81235 e = 0;
81236 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
81237 if (e) {
81238 log_packet_detailed("'id' field error detected");
81239 }
81240
81241 if (BV_ISSET(fields, 0)) {
81242 log_packet_detailed(" field 'utype' has changed");
81243#ifdef FREECIV_JSON_CONNECTION
81244 field_addr.name = "utype";
81245#endif /* FREECIV_JSON_CONNECTION */
81246 e = 0;
81247 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
81248 if (e) {
81249 log_packet_detailed("'utype' field error detected");
81250 }
81251 }
81252 if (BV_ISSET(fields, 1)) {
81253 log_packet_detailed(" field 'owner' has changed");
81254#ifdef FREECIV_JSON_CONNECTION
81255 field_addr.name = "owner";
81256#endif /* FREECIV_JSON_CONNECTION */
81257 e = 0;
81258 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
81259 if (e) {
81260 log_packet_detailed("'owner' field error detected");
81261 }
81262 }
81263 if (BV_ISSET(fields, 2)) {
81264 log_packet_detailed(" field 'homecity' has changed");
81265#ifdef FREECIV_JSON_CONNECTION
81266 field_addr.name = "homecity";
81267#endif /* FREECIV_JSON_CONNECTION */
81268 e = 0;
81269 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
81270 if (e) {
81271 log_packet_detailed("'homecity' field error detected");
81272 }
81273 }
81274 if (BV_ISSET(fields, 3)) {
81275 log_packet_detailed(" field 'moves_left' has changed");
81276#ifdef FREECIV_JSON_CONNECTION
81277 field_addr.name = "moves_left";
81278#endif /* FREECIV_JSON_CONNECTION */
81279 e = 0;
81280 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
81281 if (e) {
81282 log_packet_detailed("'moves_left' field error detected");
81283 }
81284 }
81285 if (BV_ISSET(fields, 4)) {
81286 log_packet_detailed(" field 'hp' has changed");
81287#ifdef FREECIV_JSON_CONNECTION
81288 field_addr.name = "hp";
81289#endif /* FREECIV_JSON_CONNECTION */
81290 e = 0;
81291 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
81292 if (e) {
81293 log_packet_detailed("'hp' field error detected");
81294 }
81295 }
81296 if (BV_ISSET(fields, 5)) {
81297 log_packet_detailed(" field 'veteran' has changed");
81298#ifdef FREECIV_JSON_CONNECTION
81299 field_addr.name = "veteran";
81300#endif /* FREECIV_JSON_CONNECTION */
81301 e = 0;
81302 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
81303 if (e) {
81304 log_packet_detailed("'veteran' field error detected");
81305 }
81306 }
81307 if (BV_ISSET(fields, 6)) {
81308 log_packet_detailed(" field 'fuel' has changed");
81309#ifdef FREECIV_JSON_CONNECTION
81310 field_addr.name = "fuel";
81311#endif /* FREECIV_JSON_CONNECTION */
81312 e = 0;
81313 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
81314 if (e) {
81315 log_packet_detailed("'fuel' field error detected");
81316 }
81317 }
81318 if (BV_ISSET(fields, 7)) {
81319 log_packet_detailed(" field 'activity' has changed");
81320#ifdef FREECIV_JSON_CONNECTION
81321 field_addr.name = "activity";
81322#endif /* FREECIV_JSON_CONNECTION */
81323 e = 0;
81324 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
81325 if (e) {
81326 log_packet_detailed("'activity' field error detected");
81327 }
81328 }
81329 if (BV_ISSET(fields, 8)) {
81330 log_packet_detailed(" field 'activity_count' has changed");
81331#ifdef FREECIV_JSON_CONNECTION
81332 field_addr.name = "activity_count";
81333#endif /* FREECIV_JSON_CONNECTION */
81334 e = 0;
81335 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
81336 if (e) {
81337 log_packet_detailed("'activity_count' field error detected");
81338 }
81339 }
81340 if (BV_ISSET(fields, 9)) {
81341 log_packet_detailed(" field 'activity_base' has changed");
81342#ifdef FREECIV_JSON_CONNECTION
81343 field_addr.name = "activity_base";
81344#endif /* FREECIV_JSON_CONNECTION */
81345 e = 0;
81346 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
81347 if (e) {
81348 log_packet_detailed("'activity_base' field error detected");
81349 }
81350 }
81351 /* field 10 is folded into the header */
81352 /* field 11 is folded into the header */
81353 /* field 12 is folded into the header */
81354 /* field 13 is folded into the header */
81355 if (BV_ISSET(fields, 14)) {
81356 log_packet_detailed(" field 'transported_by' has changed");
81357#ifdef FREECIV_JSON_CONNECTION
81358 field_addr.name = "transported_by";
81359#endif /* FREECIV_JSON_CONNECTION */
81360 e = 0;
81361 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
81362 if (e) {
81363 log_packet_detailed("'transported_by' field error detected");
81364 }
81365 }
81366 /* field 15 is folded into the header */
81367
81368 *old = *real_packet;
81369#endif /* FREECIV_DELTA_PROTOCOL */
81370#ifndef FREECIV_DELTA_PROTOCOL
81371#ifdef FREECIV_JSON_CONNECTION
81372 field_addr.name = "id";
81373#endif /* FREECIV_JSON_CONNECTION */
81374 e = 0;
81375 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
81376 if (e) {
81377 log_packet_detailed("'id' field error detected");
81378 }
81379#ifdef FREECIV_JSON_CONNECTION
81380 field_addr.name = "utype";
81381#endif /* FREECIV_JSON_CONNECTION */
81382 e = 0;
81383 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
81384 if (e) {
81385 log_packet_detailed("'utype' field error detected");
81386 }
81387#ifdef FREECIV_JSON_CONNECTION
81388 field_addr.name = "owner";
81389#endif /* FREECIV_JSON_CONNECTION */
81390 e = 0;
81391 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
81392 if (e) {
81393 log_packet_detailed("'owner' field error detected");
81394 }
81395#ifdef FREECIV_JSON_CONNECTION
81396 field_addr.name = "homecity";
81397#endif /* FREECIV_JSON_CONNECTION */
81398 e = 0;
81399 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
81400 if (e) {
81401 log_packet_detailed("'homecity' field error detected");
81402 }
81403#ifdef FREECIV_JSON_CONNECTION
81404 field_addr.name = "moves_left";
81405#endif /* FREECIV_JSON_CONNECTION */
81406 e = 0;
81407 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
81408 if (e) {
81409 log_packet_detailed("'moves_left' field error detected");
81410 }
81411#ifdef FREECIV_JSON_CONNECTION
81412 field_addr.name = "hp";
81413#endif /* FREECIV_JSON_CONNECTION */
81414 e = 0;
81415 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
81416 if (e) {
81417 log_packet_detailed("'hp' field error detected");
81418 }
81419#ifdef FREECIV_JSON_CONNECTION
81420 field_addr.name = "veteran";
81421#endif /* FREECIV_JSON_CONNECTION */
81422 e = 0;
81423 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
81424 if (e) {
81425 log_packet_detailed("'veteran' field error detected");
81426 }
81427#ifdef FREECIV_JSON_CONNECTION
81428 field_addr.name = "fuel";
81429#endif /* FREECIV_JSON_CONNECTION */
81430 e = 0;
81431 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
81432 if (e) {
81433 log_packet_detailed("'fuel' field error detected");
81434 }
81435#ifdef FREECIV_JSON_CONNECTION
81436 field_addr.name = "activity";
81437#endif /* FREECIV_JSON_CONNECTION */
81438 e = 0;
81439 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
81440 if (e) {
81441 log_packet_detailed("'activity' field error detected");
81442 }
81443#ifdef FREECIV_JSON_CONNECTION
81444 field_addr.name = "activity_count";
81445#endif /* FREECIV_JSON_CONNECTION */
81446 e = 0;
81447 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
81448 if (e) {
81449 log_packet_detailed("'activity_count' field error detected");
81450 }
81451#ifdef FREECIV_JSON_CONNECTION
81452 field_addr.name = "activity_base";
81453#endif /* FREECIV_JSON_CONNECTION */
81454 e = 0;
81455 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
81456 if (e) {
81457 log_packet_detailed("'activity_base' field error detected");
81458 }
81459#ifdef FREECIV_JSON_CONNECTION
81460 field_addr.name = "debug";
81461#endif /* FREECIV_JSON_CONNECTION */
81462 e = 0;
81463 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
81464 if (e) {
81465 log_packet_detailed("'debug' field error detected");
81466 }
81467#ifdef FREECIV_JSON_CONNECTION
81468 field_addr.name = "moved";
81469#endif /* FREECIV_JSON_CONNECTION */
81470 e = 0;
81471 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->moved);
81472 if (e) {
81473 log_packet_detailed("'moved' field error detected");
81474 }
81475#ifdef FREECIV_JSON_CONNECTION
81476 field_addr.name = "paradropped";
81477#endif /* FREECIV_JSON_CONNECTION */
81478 e = 0;
81479 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
81480 if (e) {
81481 log_packet_detailed("'paradropped' field error detected");
81482 }
81483#ifdef FREECIV_JSON_CONNECTION
81484 field_addr.name = "done_moving";
81485#endif /* FREECIV_JSON_CONNECTION */
81486 e = 0;
81487 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
81488 if (e) {
81489 log_packet_detailed("'done_moving' field error detected");
81490 }
81491#ifdef FREECIV_JSON_CONNECTION
81492 field_addr.name = "transported_by";
81493#endif /* FREECIV_JSON_CONNECTION */
81494 e = 0;
81495 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
81496 if (e) {
81497 log_packet_detailed("'transported_by' field error detected");
81498 }
81499#ifdef FREECIV_JSON_CONNECTION
81500 field_addr.name = "stay";
81501#endif /* FREECIV_JSON_CONNECTION */
81502 e = 0;
81503 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
81504 if (e) {
81505 log_packet_detailed("'stay' field error detected");
81506 }
81507
81508#endif
81510}
81511
81512int send_packet_edit_unit(struct connection *pc, const struct packet_edit_unit *packet)
81513{
81514 if (!pc->used) {
81515 log_error("WARNING: trying to send data to the closed connection %s",
81517 return -1;
81518 }
81519 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT].packet != NULL, -1,
81520 "Handler for PACKET_EDIT_UNIT not installed");
81521 return pc->phs.handlers->send[PACKET_EDIT_UNIT].packet(pc, packet);
81522}
81523
81524#ifdef FREECIV_DELTA_PROTOCOL
81525#define hash_packet_edit_city_create_100 hash_const
81526
81527#define cmp_packet_edit_city_create_100 cmp_const
81528
81530#endif /* FREECIV_DELTA_PROTOCOL */
81531
81533{
81534#ifdef FREECIV_DELTA_PROTOCOL
81536 struct packet_edit_city_create *old;
81537 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_CREATE;
81538#endif /* FREECIV_DELTA_PROTOCOL */
81540#ifdef FREECIV_JSON_CONNECTION
81541 struct plocation field_addr;
81542 {
81546 }
81547#endif /* FREECIV_JSON_CONNECTION */
81548
81549#ifdef FREECIV_DELTA_PROTOCOL
81550#ifdef FREECIV_JSON_CONNECTION
81551 field_addr.name = "fields";
81552#endif /* FREECIV_JSON_CONNECTION */
81553 DIO_BV_GET(&din, &field_addr, fields);
81554
81555#else /* FREECIV_DELTA_PROTOCOL */
81556#ifdef FREECIV_JSON_CONNECTION
81557 field_addr.name = "owner";
81558#endif /* FREECIV_JSON_CONNECTION */
81559 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
81561 }
81562#ifdef FREECIV_JSON_CONNECTION
81563 field_addr.name = "tile";
81564#endif /* FREECIV_JSON_CONNECTION */
81565 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
81567 }
81568#ifdef FREECIV_JSON_CONNECTION
81569 field_addr.name = "size";
81570#endif /* FREECIV_JSON_CONNECTION */
81571 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
81573 }
81574#ifdef FREECIV_JSON_CONNECTION
81575 field_addr.name = "tag";
81576#endif /* FREECIV_JSON_CONNECTION */
81577 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
81579 }
81580#endif
81581 log_packet_detailed("packet_edit_city_create_100: got info about ()");
81582
81583#ifdef FREECIV_DELTA_PROTOCOL
81584 if (NULL == *hash) {
81586 NULL, NULL, NULL, free);
81587 }
81588
81589 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81590 *real_packet = *old;
81591 } else {
81592 log_packet_detailed(" no old info");
81593 memset(real_packet, 0, sizeof(*real_packet));
81594 }
81595
81596 if (BV_ISSET(fields, 0)) {
81597 log_packet_detailed(" got field 'owner'");
81598#ifdef FREECIV_JSON_CONNECTION
81599 field_addr.name = "owner";
81600#endif /* FREECIV_JSON_CONNECTION */
81601 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
81603 }
81604 }
81605 if (BV_ISSET(fields, 1)) {
81606 log_packet_detailed(" got field 'tile'");
81607#ifdef FREECIV_JSON_CONNECTION
81608 field_addr.name = "tile";
81609#endif /* FREECIV_JSON_CONNECTION */
81610 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
81612 }
81613 }
81614 if (BV_ISSET(fields, 2)) {
81615 log_packet_detailed(" got field 'size'");
81616#ifdef FREECIV_JSON_CONNECTION
81617 field_addr.name = "size";
81618#endif /* FREECIV_JSON_CONNECTION */
81619 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
81621 }
81622 }
81623 if (BV_ISSET(fields, 3)) {
81624 log_packet_detailed(" got field 'tag'");
81625#ifdef FREECIV_JSON_CONNECTION
81626 field_addr.name = "tag";
81627#endif /* FREECIV_JSON_CONNECTION */
81628 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
81630 }
81631 }
81632
81633 if (NULL == old) {
81634 old = fc_malloc(sizeof(*old));
81635 *old = *real_packet;
81636 genhash_insert(*hash, old, old);
81637 } else {
81638 *old = *real_packet;
81639 }
81640
81641#endif /* FREECIV_DELTA_PROTOCOL */
81643}
81644
81646{
81647 const struct packet_edit_city_create *real_packet = packet;
81648 int e;
81649#ifdef FREECIV_DELTA_PROTOCOL
81651 struct packet_edit_city_create *old;
81652 bool differ;
81653 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_CREATE;
81654#endif /* FREECIV_DELTA_PROTOCOL */
81656#ifdef FREECIV_JSON_CONNECTION
81657 struct plocation field_addr;
81658 {
81662 }
81663#endif /* FREECIV_JSON_CONNECTION */
81664
81665 log_packet_detailed("packet_edit_city_create_100: sending info about ()");
81666
81667#ifdef FREECIV_DELTA_PROTOCOL
81668 if (NULL == *hash) {
81670 NULL, NULL, NULL, free);
81671 }
81672 BV_CLR_ALL(fields);
81673
81674 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81675 old = fc_malloc(sizeof(*old));
81676 *old = *real_packet;
81677 genhash_insert(*hash, old, old);
81678 memset(old, 0, sizeof(*old));
81679 }
81680 differ = (old->owner != real_packet->owner);
81681 if (differ) {
81682 BV_SET(fields, 0);
81683 }
81684
81685 differ = (old->tile != real_packet->tile);
81686 if (differ) {
81687 BV_SET(fields, 1);
81688 }
81689
81690 differ = (old->size != real_packet->size);
81691 if (differ) {
81692 BV_SET(fields, 2);
81693 }
81694
81695 differ = (old->tag != real_packet->tag);
81696 if (differ) {
81697 BV_SET(fields, 3);
81698 }
81699
81700
81701#ifdef FREECIV_JSON_CONNECTION
81702 field_addr.name = "fields";
81703#endif /* FREECIV_JSON_CONNECTION */
81704 e = 0;
81705 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81706 if (e) {
81707 log_packet_detailed("fields bitvector error detected");
81708 }
81709
81710 if (BV_ISSET(fields, 0)) {
81711 log_packet_detailed(" field 'owner' has changed");
81712#ifdef FREECIV_JSON_CONNECTION
81713 field_addr.name = "owner";
81714#endif /* FREECIV_JSON_CONNECTION */
81715 e = 0;
81716 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
81717 if (e) {
81718 log_packet_detailed("'owner' field error detected");
81719 }
81720 }
81721 if (BV_ISSET(fields, 1)) {
81722 log_packet_detailed(" field 'tile' has changed");
81723#ifdef FREECIV_JSON_CONNECTION
81724 field_addr.name = "tile";
81725#endif /* FREECIV_JSON_CONNECTION */
81726 e = 0;
81727 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
81728 if (e) {
81729 log_packet_detailed("'tile' field error detected");
81730 }
81731 }
81732 if (BV_ISSET(fields, 2)) {
81733 log_packet_detailed(" field 'size' has changed");
81734#ifdef FREECIV_JSON_CONNECTION
81735 field_addr.name = "size";
81736#endif /* FREECIV_JSON_CONNECTION */
81737 e = 0;
81738 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
81739 if (e) {
81740 log_packet_detailed("'size' field error detected");
81741 }
81742 }
81743 if (BV_ISSET(fields, 3)) {
81744 log_packet_detailed(" field 'tag' has changed");
81745#ifdef FREECIV_JSON_CONNECTION
81746 field_addr.name = "tag";
81747#endif /* FREECIV_JSON_CONNECTION */
81748 e = 0;
81749 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
81750 if (e) {
81751 log_packet_detailed("'tag' field error detected");
81752 }
81753 }
81754
81755 *old = *real_packet;
81756#endif /* FREECIV_DELTA_PROTOCOL */
81757#ifndef FREECIV_DELTA_PROTOCOL
81758#ifdef FREECIV_JSON_CONNECTION
81759 field_addr.name = "owner";
81760#endif /* FREECIV_JSON_CONNECTION */
81761 e = 0;
81762 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
81763 if (e) {
81764 log_packet_detailed("'owner' field error detected");
81765 }
81766#ifdef FREECIV_JSON_CONNECTION
81767 field_addr.name = "tile";
81768#endif /* FREECIV_JSON_CONNECTION */
81769 e = 0;
81770 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
81771 if (e) {
81772 log_packet_detailed("'tile' field error detected");
81773 }
81774#ifdef FREECIV_JSON_CONNECTION
81775 field_addr.name = "size";
81776#endif /* FREECIV_JSON_CONNECTION */
81777 e = 0;
81778 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
81779 if (e) {
81780 log_packet_detailed("'size' field error detected");
81781 }
81782#ifdef FREECIV_JSON_CONNECTION
81783 field_addr.name = "tag";
81784#endif /* FREECIV_JSON_CONNECTION */
81785 e = 0;
81786 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
81787 if (e) {
81788 log_packet_detailed("'tag' field error detected");
81789 }
81790
81791#endif
81793}
81794
81796{
81797 if (!pc->used) {
81798 log_error("WARNING: trying to send data to the closed connection %s",
81800 return -1;
81801 }
81802 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet != NULL, -1,
81803 "Handler for PACKET_EDIT_CITY_CREATE not installed");
81804 return pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet(pc, packet);
81805}
81806
81807int dsend_packet_edit_city_create(struct connection *pc, int owner, int tile, int size, int tag)
81808{
81809 struct packet_edit_city_create packet, *real_packet = &packet;
81810
81813 real_packet->size = size;
81814 real_packet->tag = tag;
81815
81817}
81818
81819#ifdef FREECIV_DELTA_PROTOCOL
81820#define hash_packet_edit_city_remove_100 hash_const
81821
81822#define cmp_packet_edit_city_remove_100 cmp_const
81823
81825#endif /* FREECIV_DELTA_PROTOCOL */
81826
81828{
81829#ifdef FREECIV_DELTA_PROTOCOL
81831 struct packet_edit_city_remove *old;
81832 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_REMOVE;
81833#endif /* FREECIV_DELTA_PROTOCOL */
81835#ifdef FREECIV_JSON_CONNECTION
81836 struct plocation field_addr;
81837 {
81841 }
81842#endif /* FREECIV_JSON_CONNECTION */
81843
81844#ifdef FREECIV_DELTA_PROTOCOL
81845#ifdef FREECIV_JSON_CONNECTION
81846 field_addr.name = "fields";
81847#endif /* FREECIV_JSON_CONNECTION */
81848 DIO_BV_GET(&din, &field_addr, fields);
81849
81850#else /* FREECIV_DELTA_PROTOCOL */
81851#ifdef FREECIV_JSON_CONNECTION
81852 field_addr.name = "id";
81853#endif /* FREECIV_JSON_CONNECTION */
81854 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
81856 }
81857#endif
81858 log_packet_detailed("packet_edit_city_remove_100: got info about ()");
81859
81860#ifdef FREECIV_DELTA_PROTOCOL
81861 if (NULL == *hash) {
81863 NULL, NULL, NULL, free);
81864 }
81865
81866 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81867 *real_packet = *old;
81868 } else {
81869 log_packet_detailed(" no old info");
81870 memset(real_packet, 0, sizeof(*real_packet));
81871 }
81872
81873 if (BV_ISSET(fields, 0)) {
81874 log_packet_detailed(" got field 'id'");
81875#ifdef FREECIV_JSON_CONNECTION
81876 field_addr.name = "id";
81877#endif /* FREECIV_JSON_CONNECTION */
81878 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
81880 }
81881 }
81882
81883 if (NULL == old) {
81884 old = fc_malloc(sizeof(*old));
81885 *old = *real_packet;
81886 genhash_insert(*hash, old, old);
81887 } else {
81888 *old = *real_packet;
81889 }
81890
81891#endif /* FREECIV_DELTA_PROTOCOL */
81893}
81894
81896{
81897 const struct packet_edit_city_remove *real_packet = packet;
81898 int e;
81899#ifdef FREECIV_DELTA_PROTOCOL
81901 struct packet_edit_city_remove *old;
81902 bool differ;
81903 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_REMOVE;
81904#endif /* FREECIV_DELTA_PROTOCOL */
81906#ifdef FREECIV_JSON_CONNECTION
81907 struct plocation field_addr;
81908 {
81912 }
81913#endif /* FREECIV_JSON_CONNECTION */
81914
81915 log_packet_detailed("packet_edit_city_remove_100: sending info about ()");
81916
81917#ifdef FREECIV_DELTA_PROTOCOL
81918 if (NULL == *hash) {
81920 NULL, NULL, NULL, free);
81921 }
81922 BV_CLR_ALL(fields);
81923
81924 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81925 old = fc_malloc(sizeof(*old));
81926 *old = *real_packet;
81927 genhash_insert(*hash, old, old);
81928 memset(old, 0, sizeof(*old));
81929 }
81930 differ = (old->id != real_packet->id);
81931 if (differ) {
81932 BV_SET(fields, 0);
81933 }
81934
81935
81936#ifdef FREECIV_JSON_CONNECTION
81937 field_addr.name = "fields";
81938#endif /* FREECIV_JSON_CONNECTION */
81939 e = 0;
81940 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81941 if (e) {
81942 log_packet_detailed("fields bitvector error detected");
81943 }
81944
81945 if (BV_ISSET(fields, 0)) {
81946 log_packet_detailed(" field 'id' has changed");
81947#ifdef FREECIV_JSON_CONNECTION
81948 field_addr.name = "id";
81949#endif /* FREECIV_JSON_CONNECTION */
81950 e = 0;
81951 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
81952 if (e) {
81953 log_packet_detailed("'id' field error detected");
81954 }
81955 }
81956
81957 *old = *real_packet;
81958#endif /* FREECIV_DELTA_PROTOCOL */
81959#ifndef FREECIV_DELTA_PROTOCOL
81960#ifdef FREECIV_JSON_CONNECTION
81961 field_addr.name = "id";
81962#endif /* FREECIV_JSON_CONNECTION */
81963 e = 0;
81964 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
81965 if (e) {
81966 log_packet_detailed("'id' field error detected");
81967 }
81968
81969#endif
81971}
81972
81974{
81975 if (!pc->used) {
81976 log_error("WARNING: trying to send data to the closed connection %s",
81978 return -1;
81979 }
81980 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet != NULL, -1,
81981 "Handler for PACKET_EDIT_CITY_REMOVE not installed");
81982 return pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet(pc, packet);
81983}
81984
81986{
81987 struct packet_edit_city_remove packet, *real_packet = &packet;
81988
81989 real_packet->id = id;
81990
81992}
81993
81994#ifdef FREECIV_DELTA_PROTOCOL
81996{
81997 const struct packet_edit_city *key = (const struct packet_edit_city *) vkey;
81998 genhash_val_t result = 0;
81999
82000 result += key->id;
82001
82002 result &= 0xFFFFFFFF;
82003 return result;
82004}
82005
82006static bool cmp_packet_edit_city_100(const void *vkey1, const void *vkey2)
82007{
82008 const struct packet_edit_city *old = (const struct packet_edit_city *) vkey1;
82009 const struct packet_edit_city *real_packet = (const struct packet_edit_city *) vkey2;
82010 bool differ;
82011
82012 differ = (old->id != real_packet->id);
82013
82014 return !differ;
82015}
82017#endif /* FREECIV_DELTA_PROTOCOL */
82018
82020{
82021#ifdef FREECIV_DELTA_PROTOCOL
82023 struct packet_edit_city *old;
82024 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY;
82025#endif /* FREECIV_DELTA_PROTOCOL */
82027#ifdef FREECIV_JSON_CONNECTION
82028 struct plocation field_addr;
82029 {
82033 }
82034#endif /* FREECIV_JSON_CONNECTION */
82035
82036#ifdef FREECIV_DELTA_PROTOCOL
82037#ifdef FREECIV_JSON_CONNECTION
82038 field_addr.name = "fields";
82039#endif /* FREECIV_JSON_CONNECTION */
82040 DIO_BV_GET(&din, &field_addr, fields);
82041#ifdef FREECIV_JSON_CONNECTION
82042 field_addr.name = "id";
82043#endif /* FREECIV_JSON_CONNECTION */
82044 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
82046 }
82047
82048#else /* FREECIV_DELTA_PROTOCOL */
82049#ifdef FREECIV_JSON_CONNECTION
82050 field_addr.name = "id";
82051#endif /* FREECIV_JSON_CONNECTION */
82052 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
82054 }
82055#ifdef FREECIV_JSON_CONNECTION
82056 field_addr.name = "name";
82057#endif /* FREECIV_JSON_CONNECTION */
82058 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
82060 }
82061#ifdef FREECIV_JSON_CONNECTION
82062 field_addr.name = "owner";
82063#endif /* FREECIV_JSON_CONNECTION */
82064 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
82066 }
82067#ifdef FREECIV_JSON_CONNECTION
82068 field_addr.name = "original";
82069#endif /* FREECIV_JSON_CONNECTION */
82070 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
82072 }
82073#ifdef FREECIV_JSON_CONNECTION
82074 field_addr.name = "size";
82075#endif /* FREECIV_JSON_CONNECTION */
82076 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
82078 }
82079#ifdef FREECIV_JSON_CONNECTION
82080 field_addr.name = "history";
82081#endif /* FREECIV_JSON_CONNECTION */
82082 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
82084 }
82085#ifdef FREECIV_JSON_CONNECTION
82086 field_addr.name = "ppl_happy";
82087#endif /* FREECIV_JSON_CONNECTION */
82088 {
82089 int i;
82090
82091#ifdef FREECIV_JSON_CONNECTION
82092 /* Enter array. */
82093 field_addr.sub_location = plocation_elem_new(0);
82094#endif /* FREECIV_JSON_CONNECTION */
82095
82096 for (i = 0; i < 5; i++) {
82097#ifdef FREECIV_JSON_CONNECTION
82098 field_addr.sub_location->number = i;
82099#endif /* FREECIV_JSON_CONNECTION */
82100
82101 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
82102 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
82103 }
82104 }
82105
82106#ifdef FREECIV_JSON_CONNECTION
82107 /* Exit array. */
82108 FC_FREE(field_addr.sub_location);
82109#endif /* FREECIV_JSON_CONNECTION */
82110 }
82111#ifdef FREECIV_JSON_CONNECTION
82112 field_addr.name = "ppl_content";
82113#endif /* FREECIV_JSON_CONNECTION */
82114 {
82115 int i;
82116
82117#ifdef FREECIV_JSON_CONNECTION
82118 /* Enter array. */
82119 field_addr.sub_location = plocation_elem_new(0);
82120#endif /* FREECIV_JSON_CONNECTION */
82121
82122 for (i = 0; i < 5; i++) {
82123#ifdef FREECIV_JSON_CONNECTION
82124 field_addr.sub_location->number = i;
82125#endif /* FREECIV_JSON_CONNECTION */
82126
82127 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
82128 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
82129 }
82130 }
82131
82132#ifdef FREECIV_JSON_CONNECTION
82133 /* Exit array. */
82134 FC_FREE(field_addr.sub_location);
82135#endif /* FREECIV_JSON_CONNECTION */
82136 }
82137#ifdef FREECIV_JSON_CONNECTION
82138 field_addr.name = "ppl_unhappy";
82139#endif /* FREECIV_JSON_CONNECTION */
82140 {
82141 int i;
82142
82143#ifdef FREECIV_JSON_CONNECTION
82144 /* Enter array. */
82145 field_addr.sub_location = plocation_elem_new(0);
82146#endif /* FREECIV_JSON_CONNECTION */
82147
82148 for (i = 0; i < 5; i++) {
82149#ifdef FREECIV_JSON_CONNECTION
82150 field_addr.sub_location->number = i;
82151#endif /* FREECIV_JSON_CONNECTION */
82152
82153 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
82154 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
82155 }
82156 }
82157
82158#ifdef FREECIV_JSON_CONNECTION
82159 /* Exit array. */
82160 FC_FREE(field_addr.sub_location);
82161#endif /* FREECIV_JSON_CONNECTION */
82162 }
82163#ifdef FREECIV_JSON_CONNECTION
82164 field_addr.name = "ppl_angry";
82165#endif /* FREECIV_JSON_CONNECTION */
82166 {
82167 int i;
82168
82169#ifdef FREECIV_JSON_CONNECTION
82170 /* Enter array. */
82171 field_addr.sub_location = plocation_elem_new(0);
82172#endif /* FREECIV_JSON_CONNECTION */
82173
82174 for (i = 0; i < 5; i++) {
82175#ifdef FREECIV_JSON_CONNECTION
82176 field_addr.sub_location->number = i;
82177#endif /* FREECIV_JSON_CONNECTION */
82178
82179 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
82180 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
82181 }
82182 }
82183
82184#ifdef FREECIV_JSON_CONNECTION
82185 /* Exit array. */
82186 FC_FREE(field_addr.sub_location);
82187#endif /* FREECIV_JSON_CONNECTION */
82188 }
82189#ifdef FREECIV_JSON_CONNECTION
82190 field_addr.name = "specialists_size";
82191#endif /* FREECIV_JSON_CONNECTION */
82192 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
82193 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
82194 }
82195#ifdef FREECIV_JSON_CONNECTION
82196 field_addr.name = "specialists";
82197#endif /* FREECIV_JSON_CONNECTION */
82198 if (real_packet->specialists_size > SP_MAX) {
82199 RECEIVE_PACKET_FIELD_ERROR(specialists, ": truncation array");
82200 }
82201 {
82202 int i;
82203
82204#ifdef FREECIV_JSON_CONNECTION
82205 /* Enter array. */
82206 field_addr.sub_location = plocation_elem_new(0);
82207#endif /* FREECIV_JSON_CONNECTION */
82208
82209 for (i = 0; i < real_packet->specialists_size; i++) {
82210#ifdef FREECIV_JSON_CONNECTION
82211 field_addr.sub_location->number = i;
82212#endif /* FREECIV_JSON_CONNECTION */
82213
82214 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
82216 }
82217 }
82218
82219#ifdef FREECIV_JSON_CONNECTION
82220 /* Exit array. */
82221 FC_FREE(field_addr.sub_location);
82222#endif /* FREECIV_JSON_CONNECTION */
82223 }
82224#ifdef FREECIV_JSON_CONNECTION
82225 field_addr.name = "food_stock";
82226#endif /* FREECIV_JSON_CONNECTION */
82227 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
82228 RECEIVE_PACKET_FIELD_ERROR(food_stock);
82229 }
82230#ifdef FREECIV_JSON_CONNECTION
82231 field_addr.name = "shield_stock";
82232#endif /* FREECIV_JSON_CONNECTION */
82233 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
82234 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
82235 }
82236#ifdef FREECIV_JSON_CONNECTION
82237 field_addr.name = "airlift";
82238#endif /* FREECIV_JSON_CONNECTION */
82239 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift)) {
82241 }
82242#ifdef FREECIV_JSON_CONNECTION
82243 field_addr.name = "debug";
82244#endif /* FREECIV_JSON_CONNECTION */
82245 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
82247 }
82248#ifdef FREECIV_JSON_CONNECTION
82249 field_addr.name = "did_buy";
82250#endif /* FREECIV_JSON_CONNECTION */
82251 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
82253 }
82254#ifdef FREECIV_JSON_CONNECTION
82255 field_addr.name = "did_sell";
82256#endif /* FREECIV_JSON_CONNECTION */
82257 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
82259 }
82260#ifdef FREECIV_JSON_CONNECTION
82261 field_addr.name = "was_happy";
82262#endif /* FREECIV_JSON_CONNECTION */
82263 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
82264 RECEIVE_PACKET_FIELD_ERROR(was_happy);
82265 }
82266#ifdef FREECIV_JSON_CONNECTION
82267 field_addr.name = "had_famine";
82268#endif /* FREECIV_JSON_CONNECTION */
82269 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
82270 RECEIVE_PACKET_FIELD_ERROR(had_famine);
82271 }
82272#ifdef FREECIV_JSON_CONNECTION
82273 field_addr.name = "anarchy";
82274#endif /* FREECIV_JSON_CONNECTION */
82275 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
82277 }
82278#ifdef FREECIV_JSON_CONNECTION
82279 field_addr.name = "rapture";
82280#endif /* FREECIV_JSON_CONNECTION */
82281 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
82283 }
82284#ifdef FREECIV_JSON_CONNECTION
82285 field_addr.name = "steal";
82286#endif /* FREECIV_JSON_CONNECTION */
82287 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
82289 }
82290#ifdef FREECIV_JSON_CONNECTION
82291 field_addr.name = "turn_founded";
82292#endif /* FREECIV_JSON_CONNECTION */
82293 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
82294 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
82295 }
82296#ifdef FREECIV_JSON_CONNECTION
82297 field_addr.name = "turn_last_built";
82298#endif /* FREECIV_JSON_CONNECTION */
82299 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
82300 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
82301 }
82302#ifdef FREECIV_JSON_CONNECTION
82303 field_addr.name = "built";
82304#endif /* FREECIV_JSON_CONNECTION */
82305 {
82306 int i;
82307
82308#ifdef FREECIV_JSON_CONNECTION
82309 /* Enter array. */
82310 field_addr.sub_location = plocation_elem_new(0);
82311#endif /* FREECIV_JSON_CONNECTION */
82312
82313 for (i = 0; i < B_LAST; i++) {
82314#ifdef FREECIV_JSON_CONNECTION
82315 field_addr.sub_location->number = i;
82316#endif /* FREECIV_JSON_CONNECTION */
82317
82318 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
82320 }
82321 }
82322
82323#ifdef FREECIV_JSON_CONNECTION
82324 /* Exit array. */
82325 FC_FREE(field_addr.sub_location);
82326#endif /* FREECIV_JSON_CONNECTION */
82327 }
82328#ifdef FREECIV_JSON_CONNECTION
82329 field_addr.name = "production_kind";
82330#endif /* FREECIV_JSON_CONNECTION */
82331 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
82332 RECEIVE_PACKET_FIELD_ERROR(production_kind);
82333 }
82334#ifdef FREECIV_JSON_CONNECTION
82335 field_addr.name = "production_value";
82336#endif /* FREECIV_JSON_CONNECTION */
82337 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
82338 RECEIVE_PACKET_FIELD_ERROR(production_value);
82339 }
82340#endif
82341 log_packet_detailed("packet_edit_city_100: got info about (%d)",
82342 real_packet->id);
82343
82344#ifdef FREECIV_DELTA_PROTOCOL
82345 if (NULL == *hash) {
82347 NULL, NULL, NULL, free);
82348 }
82349
82350 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
82351 *real_packet = *old;
82352 } else {
82353 int id;
82354
82355 id = real_packet->id;
82356
82357 log_packet_detailed(" no old info");
82358 memset(real_packet, 0, sizeof(*real_packet));
82359
82360 real_packet->id = id;
82361 }
82362
82363 if (BV_ISSET(fields, 0)) {
82364 log_packet_detailed(" got field 'name'");
82365#ifdef FREECIV_JSON_CONNECTION
82366 field_addr.name = "name";
82367#endif /* FREECIV_JSON_CONNECTION */
82368 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
82370 }
82371 }
82372 if (BV_ISSET(fields, 1)) {
82373 log_packet_detailed(" got field 'owner'");
82374#ifdef FREECIV_JSON_CONNECTION
82375 field_addr.name = "owner";
82376#endif /* FREECIV_JSON_CONNECTION */
82377 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
82379 }
82380 }
82381 if (BV_ISSET(fields, 2)) {
82382 log_packet_detailed(" got field 'original'");
82383#ifdef FREECIV_JSON_CONNECTION
82384 field_addr.name = "original";
82385#endif /* FREECIV_JSON_CONNECTION */
82386 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
82388 }
82389 }
82390 if (BV_ISSET(fields, 3)) {
82391 log_packet_detailed(" got field 'size'");
82392#ifdef FREECIV_JSON_CONNECTION
82393 field_addr.name = "size";
82394#endif /* FREECIV_JSON_CONNECTION */
82395 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
82397 }
82398 }
82399 if (BV_ISSET(fields, 4)) {
82400 log_packet_detailed(" got field 'history'");
82401#ifdef FREECIV_JSON_CONNECTION
82402 field_addr.name = "history";
82403#endif /* FREECIV_JSON_CONNECTION */
82404 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
82406 }
82407 }
82408 if (BV_ISSET(fields, 5)) {
82409 log_packet_detailed(" got field 'ppl_happy'");
82410#ifdef FREECIV_JSON_CONNECTION
82411 field_addr.name = "ppl_happy";
82412#endif /* FREECIV_JSON_CONNECTION */
82413 {
82414 int i;
82415
82416#ifdef FREECIV_JSON_CONNECTION
82417 /* Enter array. */
82418 field_addr.sub_location = plocation_elem_new(0);
82419#endif /* FREECIV_JSON_CONNECTION */
82420
82421 for (i = 0; i < 5; i++) {
82422#ifdef FREECIV_JSON_CONNECTION
82423 field_addr.sub_location->number = i;
82424#endif /* FREECIV_JSON_CONNECTION */
82425
82426 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
82427 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
82428 }
82429 }
82430
82431#ifdef FREECIV_JSON_CONNECTION
82432 /* Exit array. */
82433 FC_FREE(field_addr.sub_location);
82434#endif /* FREECIV_JSON_CONNECTION */
82435 }
82436 }
82437 if (BV_ISSET(fields, 6)) {
82438 log_packet_detailed(" got field 'ppl_content'");
82439#ifdef FREECIV_JSON_CONNECTION
82440 field_addr.name = "ppl_content";
82441#endif /* FREECIV_JSON_CONNECTION */
82442 {
82443 int i;
82444
82445#ifdef FREECIV_JSON_CONNECTION
82446 /* Enter array. */
82447 field_addr.sub_location = plocation_elem_new(0);
82448#endif /* FREECIV_JSON_CONNECTION */
82449
82450 for (i = 0; i < 5; i++) {
82451#ifdef FREECIV_JSON_CONNECTION
82452 field_addr.sub_location->number = i;
82453#endif /* FREECIV_JSON_CONNECTION */
82454
82455 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
82456 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
82457 }
82458 }
82459
82460#ifdef FREECIV_JSON_CONNECTION
82461 /* Exit array. */
82462 FC_FREE(field_addr.sub_location);
82463#endif /* FREECIV_JSON_CONNECTION */
82464 }
82465 }
82466 if (BV_ISSET(fields, 7)) {
82467 log_packet_detailed(" got field 'ppl_unhappy'");
82468#ifdef FREECIV_JSON_CONNECTION
82469 field_addr.name = "ppl_unhappy";
82470#endif /* FREECIV_JSON_CONNECTION */
82471 {
82472 int i;
82473
82474#ifdef FREECIV_JSON_CONNECTION
82475 /* Enter array. */
82476 field_addr.sub_location = plocation_elem_new(0);
82477#endif /* FREECIV_JSON_CONNECTION */
82478
82479 for (i = 0; i < 5; i++) {
82480#ifdef FREECIV_JSON_CONNECTION
82481 field_addr.sub_location->number = i;
82482#endif /* FREECIV_JSON_CONNECTION */
82483
82484 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
82485 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
82486 }
82487 }
82488
82489#ifdef FREECIV_JSON_CONNECTION
82490 /* Exit array. */
82491 FC_FREE(field_addr.sub_location);
82492#endif /* FREECIV_JSON_CONNECTION */
82493 }
82494 }
82495 if (BV_ISSET(fields, 8)) {
82496 log_packet_detailed(" got field 'ppl_angry'");
82497#ifdef FREECIV_JSON_CONNECTION
82498 field_addr.name = "ppl_angry";
82499#endif /* FREECIV_JSON_CONNECTION */
82500 {
82501 int i;
82502
82503#ifdef FREECIV_JSON_CONNECTION
82504 /* Enter array. */
82505 field_addr.sub_location = plocation_elem_new(0);
82506#endif /* FREECIV_JSON_CONNECTION */
82507
82508 for (i = 0; i < 5; i++) {
82509#ifdef FREECIV_JSON_CONNECTION
82510 field_addr.sub_location->number = i;
82511#endif /* FREECIV_JSON_CONNECTION */
82512
82513 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
82514 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
82515 }
82516 }
82517
82518#ifdef FREECIV_JSON_CONNECTION
82519 /* Exit array. */
82520 FC_FREE(field_addr.sub_location);
82521#endif /* FREECIV_JSON_CONNECTION */
82522 }
82523 }
82524 if (BV_ISSET(fields, 9)) {
82525 log_packet_detailed(" got field 'specialists_size'");
82526#ifdef FREECIV_JSON_CONNECTION
82527 field_addr.name = "specialists_size";
82528#endif /* FREECIV_JSON_CONNECTION */
82529 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
82530 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
82531 }
82532 }
82533 if (BV_ISSET(fields, 10)) {
82534 log_packet_detailed(" got field 'specialists'");
82535#ifdef FREECIV_JSON_CONNECTION
82536 field_addr.name = "specialists";
82537#endif /* FREECIV_JSON_CONNECTION */
82538 if (real_packet->specialists_size > SP_MAX) {
82539 RECEIVE_PACKET_FIELD_ERROR(specialists, ": truncation array");
82540 }
82541 {
82542 int i;
82543
82544#ifdef FREECIV_JSON_CONNECTION
82545 /* Enter array. */
82546 field_addr.sub_location = plocation_elem_new(0);
82547#endif /* FREECIV_JSON_CONNECTION */
82548
82549 for (i = 0; i < real_packet->specialists_size; i++) {
82550#ifdef FREECIV_JSON_CONNECTION
82551 field_addr.sub_location->number = i;
82552#endif /* FREECIV_JSON_CONNECTION */
82553
82554 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
82556 }
82557 }
82558
82559#ifdef FREECIV_JSON_CONNECTION
82560 /* Exit array. */
82561 FC_FREE(field_addr.sub_location);
82562#endif /* FREECIV_JSON_CONNECTION */
82563 }
82564 }
82565 if (BV_ISSET(fields, 11)) {
82566 log_packet_detailed(" got field 'food_stock'");
82567#ifdef FREECIV_JSON_CONNECTION
82568 field_addr.name = "food_stock";
82569#endif /* FREECIV_JSON_CONNECTION */
82570 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
82571 RECEIVE_PACKET_FIELD_ERROR(food_stock);
82572 }
82573 }
82574 if (BV_ISSET(fields, 12)) {
82575 log_packet_detailed(" got field 'shield_stock'");
82576#ifdef FREECIV_JSON_CONNECTION
82577 field_addr.name = "shield_stock";
82578#endif /* FREECIV_JSON_CONNECTION */
82579 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
82580 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
82581 }
82582 }
82583 real_packet->airlift = BV_ISSET(fields, 13);
82584 real_packet->debug = BV_ISSET(fields, 14);
82585 real_packet->did_buy = BV_ISSET(fields, 15);
82586 real_packet->did_sell = BV_ISSET(fields, 16);
82587 real_packet->was_happy = BV_ISSET(fields, 17);
82588 real_packet->had_famine = BV_ISSET(fields, 18);
82589 if (BV_ISSET(fields, 19)) {
82590 log_packet_detailed(" got field 'anarchy'");
82591#ifdef FREECIV_JSON_CONNECTION
82592 field_addr.name = "anarchy";
82593#endif /* FREECIV_JSON_CONNECTION */
82594 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
82596 }
82597 }
82598 if (BV_ISSET(fields, 20)) {
82599 log_packet_detailed(" got field 'rapture'");
82600#ifdef FREECIV_JSON_CONNECTION
82601 field_addr.name = "rapture";
82602#endif /* FREECIV_JSON_CONNECTION */
82603 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
82605 }
82606 }
82607 if (BV_ISSET(fields, 21)) {
82608 log_packet_detailed(" got field 'steal'");
82609#ifdef FREECIV_JSON_CONNECTION
82610 field_addr.name = "steal";
82611#endif /* FREECIV_JSON_CONNECTION */
82612 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
82614 }
82615 }
82616 if (BV_ISSET(fields, 22)) {
82617 log_packet_detailed(" got field 'turn_founded'");
82618#ifdef FREECIV_JSON_CONNECTION
82619 field_addr.name = "turn_founded";
82620#endif /* FREECIV_JSON_CONNECTION */
82621 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
82622 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
82623 }
82624 }
82625 if (BV_ISSET(fields, 23)) {
82626 log_packet_detailed(" got field 'turn_last_built'");
82627#ifdef FREECIV_JSON_CONNECTION
82628 field_addr.name = "turn_last_built";
82629#endif /* FREECIV_JSON_CONNECTION */
82630 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
82631 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
82632 }
82633 }
82634 if (BV_ISSET(fields, 24)) {
82635 log_packet_detailed(" got field 'built'");
82636#ifdef FREECIV_JSON_CONNECTION
82637 field_addr.name = "built";
82638#endif /* FREECIV_JSON_CONNECTION */
82640#ifdef FREECIV_JSON_CONNECTION
82641 /* Enter array (start at initial element). */
82642 field_addr.sub_location = plocation_elem_new(0);
82643 /* Enter diff array element (start at the index address). */
82644 field_addr.sub_location->sub_location = plocation_elem_new(0);
82645#endif /* FREECIV_JSON_CONNECTION */
82646
82647 while (TRUE) {
82648 int i;
82649
82650 /* Read next index */
82651#if B_LAST <= MAX_UINT8
82652 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
82653#else
82654 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
82655#endif
82657 }
82658
82659 if (i == B_LAST) {
82660 break;
82661 }
82662 if (i > B_LAST) {
82664 ": unexpected value %d "
82665 "(> B_LAST) in array diff",
82666 i);
82667 }
82668
82669#ifdef FREECIV_JSON_CONNECTION
82670 /* Content address. */
82671 field_addr.sub_location->sub_location->number = 1;
82672#endif /* FREECIV_JSON_CONNECTION */
82673
82674 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
82676 }
82677
82678#ifdef FREECIV_JSON_CONNECTION
82679 /* Move to the next diff array element. */
82680 field_addr.sub_location->number++;
82681 /* Back to the index address. */
82682 field_addr.sub_location->sub_location->number = 0;
82683#endif /* FREECIV_JSON_CONNECTION */
82684 }
82685
82686#ifdef FREECIV_JSON_CONNECTION
82687 /* Exit diff array element. */
82688 FC_FREE(field_addr.sub_location->sub_location);
82689 /* Exit array. */
82690 FC_FREE(field_addr.sub_location);
82691#endif /* FREECIV_JSON_CONNECTION */
82692 }
82693 if (BV_ISSET(fields, 25)) {
82694 log_packet_detailed(" got field 'production_kind'");
82695#ifdef FREECIV_JSON_CONNECTION
82696 field_addr.name = "production_kind";
82697#endif /* FREECIV_JSON_CONNECTION */
82698 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
82699 RECEIVE_PACKET_FIELD_ERROR(production_kind);
82700 }
82701 }
82702 if (BV_ISSET(fields, 26)) {
82703 log_packet_detailed(" got field 'production_value'");
82704#ifdef FREECIV_JSON_CONNECTION
82705 field_addr.name = "production_value";
82706#endif /* FREECIV_JSON_CONNECTION */
82707 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
82708 RECEIVE_PACKET_FIELD_ERROR(production_value);
82709 }
82710 }
82711
82712 if (NULL == old) {
82713 old = fc_malloc(sizeof(*old));
82714 *old = *real_packet;
82715 genhash_insert(*hash, old, old);
82716 } else {
82717 *old = *real_packet;
82718 }
82719
82720#endif /* FREECIV_DELTA_PROTOCOL */
82722}
82723
82724static int send_packet_edit_city_100(struct connection *pc, const struct packet_edit_city *packet)
82725{
82726 const struct packet_edit_city *real_packet = packet;
82727 int e;
82728#ifdef FREECIV_DELTA_PROTOCOL
82730 struct packet_edit_city *old;
82731 bool differ;
82732 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY;
82733#endif /* FREECIV_DELTA_PROTOCOL */
82735#ifdef FREECIV_JSON_CONNECTION
82736 struct plocation field_addr;
82737 {
82741 }
82742#endif /* FREECIV_JSON_CONNECTION */
82743
82744 log_packet_detailed("packet_edit_city_100: sending info about (%d)",
82745 real_packet->id);
82746
82747#ifdef FREECIV_DELTA_PROTOCOL
82748 if (NULL == *hash) {
82750 NULL, NULL, NULL, free);
82751 }
82752 BV_CLR_ALL(fields);
82753
82754 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82755 old = fc_malloc(sizeof(*old));
82756 *old = *real_packet;
82757 genhash_insert(*hash, old, old);
82758 memset(old, 0, sizeof(*old));
82759 }
82760 differ = (strcmp(old->name, real_packet->name) != 0);
82761 if (differ) {
82762 BV_SET(fields, 0);
82763 }
82764
82765 differ = (old->owner != real_packet->owner);
82766 if (differ) {
82767 BV_SET(fields, 1);
82768 }
82769
82770 differ = (old->original != real_packet->original);
82771 if (differ) {
82772 BV_SET(fields, 2);
82773 }
82774
82775 differ = (old->size != real_packet->size);
82776 if (differ) {
82777 BV_SET(fields, 3);
82778 }
82779
82780 differ = (old->history != real_packet->history);
82781 if (differ) {
82782 BV_SET(fields, 4);
82783 }
82784
82785 differ = FALSE;
82786 {
82787 int i;
82788
82789 for (i = 0; i < 5; i++) {
82790 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
82791 if (differ) {
82792 break;
82793 }
82794 }
82795 }
82796 if (differ) {
82797 BV_SET(fields, 5);
82798 }
82799
82800 differ = FALSE;
82801 {
82802 int i;
82803
82804 for (i = 0; i < 5; i++) {
82805 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
82806 if (differ) {
82807 break;
82808 }
82809 }
82810 }
82811 if (differ) {
82812 BV_SET(fields, 6);
82813 }
82814
82815 differ = FALSE;
82816 {
82817 int i;
82818
82819 for (i = 0; i < 5; i++) {
82820 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
82821 if (differ) {
82822 break;
82823 }
82824 }
82825 }
82826 if (differ) {
82827 BV_SET(fields, 7);
82828 }
82829
82830 differ = FALSE;
82831 {
82832 int i;
82833
82834 for (i = 0; i < 5; i++) {
82835 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
82836 if (differ) {
82837 break;
82838 }
82839 }
82840 }
82841 if (differ) {
82842 BV_SET(fields, 8);
82843 }
82844
82845 differ = (old->specialists_size != real_packet->specialists_size);
82846 if (differ) {
82847 BV_SET(fields, 9);
82848 }
82849
82850 differ = (old->specialists_size != real_packet->specialists_size);
82851 if (!differ) {
82852 int i;
82853
82854 for (i = 0; i < real_packet->specialists_size; i++) {
82855 differ = (old->specialists[i] != real_packet->specialists[i]);
82856 if (differ) {
82857 break;
82858 }
82859 }
82860 }
82861 if (differ) {
82862 BV_SET(fields, 10);
82863 }
82864
82865 differ = (old->food_stock != real_packet->food_stock);
82866 if (differ) {
82867 BV_SET(fields, 11);
82868 }
82869
82870 differ = (old->shield_stock != real_packet->shield_stock);
82871 if (differ) {
82872 BV_SET(fields, 12);
82873 }
82874
82875 if (packet->airlift) {
82876 BV_SET(fields, 13);
82877 }
82878
82879 if (packet->debug) {
82880 BV_SET(fields, 14);
82881 }
82882
82883 if (packet->did_buy) {
82884 BV_SET(fields, 15);
82885 }
82886
82887 if (packet->did_sell) {
82888 BV_SET(fields, 16);
82889 }
82890
82891 if (packet->was_happy) {
82892 BV_SET(fields, 17);
82893 }
82894
82895 if (packet->had_famine) {
82896 BV_SET(fields, 18);
82897 }
82898
82899 differ = (old->anarchy != real_packet->anarchy);
82900 if (differ) {
82901 BV_SET(fields, 19);
82902 }
82903
82904 differ = (old->rapture != real_packet->rapture);
82905 if (differ) {
82906 BV_SET(fields, 20);
82907 }
82908
82909 differ = (old->steal != real_packet->steal);
82910 if (differ) {
82911 BV_SET(fields, 21);
82912 }
82913
82914 differ = (old->turn_founded != real_packet->turn_founded);
82915 if (differ) {
82916 BV_SET(fields, 22);
82917 }
82918
82919 differ = (old->turn_last_built != real_packet->turn_last_built);
82920 if (differ) {
82921 BV_SET(fields, 23);
82922 }
82923
82924 differ = FALSE;
82925 {
82926 int i;
82927
82928 for (i = 0; i < B_LAST; i++) {
82929 differ = (old->built[i] != real_packet->built[i]);
82930 if (differ) {
82931 break;
82932 }
82933 }
82934 }
82935 if (differ) {
82936 BV_SET(fields, 24);
82937 }
82938
82939 differ = (old->production_kind != real_packet->production_kind);
82940 if (differ) {
82941 BV_SET(fields, 25);
82942 }
82943
82944 differ = (old->production_value != real_packet->production_value);
82945 if (differ) {
82946 BV_SET(fields, 26);
82947 }
82948
82949
82950#ifdef FREECIV_JSON_CONNECTION
82951 field_addr.name = "fields";
82952#endif /* FREECIV_JSON_CONNECTION */
82953 e = 0;
82954 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82955 if (e) {
82956 log_packet_detailed("fields bitvector error detected");
82957 }
82958#ifdef FREECIV_JSON_CONNECTION
82959 field_addr.name = "id";
82960#endif /* FREECIV_JSON_CONNECTION */
82961 e = 0;
82962 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
82963 if (e) {
82964 log_packet_detailed("'id' field error detected");
82965 }
82966
82967 if (BV_ISSET(fields, 0)) {
82968 log_packet_detailed(" field 'name' has changed");
82969#ifdef FREECIV_JSON_CONNECTION
82970 field_addr.name = "name";
82971#endif /* FREECIV_JSON_CONNECTION */
82972 e = 0;
82973 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
82974 if (e) {
82975 log_packet_detailed("'name' field error detected");
82976 }
82977 }
82978 if (BV_ISSET(fields, 1)) {
82979 log_packet_detailed(" field 'owner' has changed");
82980#ifdef FREECIV_JSON_CONNECTION
82981 field_addr.name = "owner";
82982#endif /* FREECIV_JSON_CONNECTION */
82983 e = 0;
82984 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
82985 if (e) {
82986 log_packet_detailed("'owner' field error detected");
82987 }
82988 }
82989 if (BV_ISSET(fields, 2)) {
82990 log_packet_detailed(" field 'original' has changed");
82991#ifdef FREECIV_JSON_CONNECTION
82992 field_addr.name = "original";
82993#endif /* FREECIV_JSON_CONNECTION */
82994 e = 0;
82995 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
82996 if (e) {
82997 log_packet_detailed("'original' field error detected");
82998 }
82999 }
83000 if (BV_ISSET(fields, 3)) {
83001 log_packet_detailed(" field 'size' has changed");
83002#ifdef FREECIV_JSON_CONNECTION
83003 field_addr.name = "size";
83004#endif /* FREECIV_JSON_CONNECTION */
83005 e = 0;
83006 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
83007 if (e) {
83008 log_packet_detailed("'size' field error detected");
83009 }
83010 }
83011 if (BV_ISSET(fields, 4)) {
83012 log_packet_detailed(" field 'history' has changed");
83013#ifdef FREECIV_JSON_CONNECTION
83014 field_addr.name = "history";
83015#endif /* FREECIV_JSON_CONNECTION */
83016 e = 0;
83017 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
83018 if (e) {
83019 log_packet_detailed("'history' field error detected");
83020 }
83021 }
83022 if (BV_ISSET(fields, 5)) {
83023 log_packet_detailed(" field 'ppl_happy' has changed");
83024#ifdef FREECIV_JSON_CONNECTION
83025 field_addr.name = "ppl_happy";
83026#endif /* FREECIV_JSON_CONNECTION */
83027 e = 0;
83028 {
83029 int i;
83030
83031#ifdef FREECIV_JSON_CONNECTION
83032 /* Create the array. */
83033 e |= DIO_PUT(farray, &dout, &field_addr, 5);
83034
83035 /* Enter the array. */
83036 field_addr.sub_location = plocation_elem_new(0);
83037#endif /* FREECIV_JSON_CONNECTION */
83038
83039 for (i = 0; i < 5; i++) {
83040#ifdef FREECIV_JSON_CONNECTION
83041 /* Next array element. */
83042 field_addr.sub_location->number = i;
83043#endif /* FREECIV_JSON_CONNECTION */
83044
83045 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
83046 }
83047
83048#ifdef FREECIV_JSON_CONNECTION
83049 /* Exit array. */
83050 FC_FREE(field_addr.sub_location);
83051#endif /* FREECIV_JSON_CONNECTION */
83052 }
83053 if (e) {
83054 log_packet_detailed("'ppl_happy' field error detected");
83055 }
83056 }
83057 if (BV_ISSET(fields, 6)) {
83058 log_packet_detailed(" field 'ppl_content' has changed");
83059#ifdef FREECIV_JSON_CONNECTION
83060 field_addr.name = "ppl_content";
83061#endif /* FREECIV_JSON_CONNECTION */
83062 e = 0;
83063 {
83064 int i;
83065
83066#ifdef FREECIV_JSON_CONNECTION
83067 /* Create the array. */
83068 e |= DIO_PUT(farray, &dout, &field_addr, 5);
83069
83070 /* Enter the array. */
83071 field_addr.sub_location = plocation_elem_new(0);
83072#endif /* FREECIV_JSON_CONNECTION */
83073
83074 for (i = 0; i < 5; i++) {
83075#ifdef FREECIV_JSON_CONNECTION
83076 /* Next array element. */
83077 field_addr.sub_location->number = i;
83078#endif /* FREECIV_JSON_CONNECTION */
83079
83080 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
83081 }
83082
83083#ifdef FREECIV_JSON_CONNECTION
83084 /* Exit array. */
83085 FC_FREE(field_addr.sub_location);
83086#endif /* FREECIV_JSON_CONNECTION */
83087 }
83088 if (e) {
83089 log_packet_detailed("'ppl_content' field error detected");
83090 }
83091 }
83092 if (BV_ISSET(fields, 7)) {
83093 log_packet_detailed(" field 'ppl_unhappy' has changed");
83094#ifdef FREECIV_JSON_CONNECTION
83095 field_addr.name = "ppl_unhappy";
83096#endif /* FREECIV_JSON_CONNECTION */
83097 e = 0;
83098 {
83099 int i;
83100
83101#ifdef FREECIV_JSON_CONNECTION
83102 /* Create the array. */
83103 e |= DIO_PUT(farray, &dout, &field_addr, 5);
83104
83105 /* Enter the array. */
83106 field_addr.sub_location = plocation_elem_new(0);
83107#endif /* FREECIV_JSON_CONNECTION */
83108
83109 for (i = 0; i < 5; i++) {
83110#ifdef FREECIV_JSON_CONNECTION
83111 /* Next array element. */
83112 field_addr.sub_location->number = i;
83113#endif /* FREECIV_JSON_CONNECTION */
83114
83115 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
83116 }
83117
83118#ifdef FREECIV_JSON_CONNECTION
83119 /* Exit array. */
83120 FC_FREE(field_addr.sub_location);
83121#endif /* FREECIV_JSON_CONNECTION */
83122 }
83123 if (e) {
83124 log_packet_detailed("'ppl_unhappy' field error detected");
83125 }
83126 }
83127 if (BV_ISSET(fields, 8)) {
83128 log_packet_detailed(" field 'ppl_angry' has changed");
83129#ifdef FREECIV_JSON_CONNECTION
83130 field_addr.name = "ppl_angry";
83131#endif /* FREECIV_JSON_CONNECTION */
83132 e = 0;
83133 {
83134 int i;
83135
83136#ifdef FREECIV_JSON_CONNECTION
83137 /* Create the array. */
83138 e |= DIO_PUT(farray, &dout, &field_addr, 5);
83139
83140 /* Enter the array. */
83141 field_addr.sub_location = plocation_elem_new(0);
83142#endif /* FREECIV_JSON_CONNECTION */
83143
83144 for (i = 0; i < 5; i++) {
83145#ifdef FREECIV_JSON_CONNECTION
83146 /* Next array element. */
83147 field_addr.sub_location->number = i;
83148#endif /* FREECIV_JSON_CONNECTION */
83149
83150 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
83151 }
83152
83153#ifdef FREECIV_JSON_CONNECTION
83154 /* Exit array. */
83155 FC_FREE(field_addr.sub_location);
83156#endif /* FREECIV_JSON_CONNECTION */
83157 }
83158 if (e) {
83159 log_packet_detailed("'ppl_angry' field error detected");
83160 }
83161 }
83162 if (BV_ISSET(fields, 9)) {
83163 log_packet_detailed(" field 'specialists_size' has changed");
83164#ifdef FREECIV_JSON_CONNECTION
83165 field_addr.name = "specialists_size";
83166#endif /* FREECIV_JSON_CONNECTION */
83167 e = 0;
83168 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
83169 if (e) {
83170 log_packet_detailed("'specialists_size' field error detected");
83171 }
83172 }
83173 if (BV_ISSET(fields, 10)) {
83174 log_packet_detailed(" field 'specialists' has changed");
83175#ifdef FREECIV_JSON_CONNECTION
83176 field_addr.name = "specialists";
83177#endif /* FREECIV_JSON_CONNECTION */
83178 e = 0;
83179 {
83180 int i;
83181
83182#ifdef FREECIV_JSON_CONNECTION
83183 /* Create the array. */
83184 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
83185
83186 /* Enter the array. */
83187 field_addr.sub_location = plocation_elem_new(0);
83188#endif /* FREECIV_JSON_CONNECTION */
83189
83190 for (i = 0; i < real_packet->specialists_size; i++) {
83191#ifdef FREECIV_JSON_CONNECTION
83192 /* Next array element. */
83193 field_addr.sub_location->number = i;
83194#endif /* FREECIV_JSON_CONNECTION */
83195
83196 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
83197 }
83198
83199#ifdef FREECIV_JSON_CONNECTION
83200 /* Exit array. */
83201 FC_FREE(field_addr.sub_location);
83202#endif /* FREECIV_JSON_CONNECTION */
83203 }
83204 if (e) {
83205 log_packet_detailed("'specialists' field error detected");
83206 }
83207 }
83208 if (BV_ISSET(fields, 11)) {
83209 log_packet_detailed(" field 'food_stock' has changed");
83210#ifdef FREECIV_JSON_CONNECTION
83211 field_addr.name = "food_stock";
83212#endif /* FREECIV_JSON_CONNECTION */
83213 e = 0;
83214 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
83215 if (e) {
83216 log_packet_detailed("'food_stock' field error detected");
83217 }
83218 }
83219 if (BV_ISSET(fields, 12)) {
83220 log_packet_detailed(" field 'shield_stock' has changed");
83221#ifdef FREECIV_JSON_CONNECTION
83222 field_addr.name = "shield_stock";
83223#endif /* FREECIV_JSON_CONNECTION */
83224 e = 0;
83225 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
83226 if (e) {
83227 log_packet_detailed("'shield_stock' field error detected");
83228 }
83229 }
83230 /* field 13 is folded into the header */
83231 /* field 14 is folded into the header */
83232 /* field 15 is folded into the header */
83233 /* field 16 is folded into the header */
83234 /* field 17 is folded into the header */
83235 /* field 18 is folded into the header */
83236 if (BV_ISSET(fields, 19)) {
83237 log_packet_detailed(" field 'anarchy' has changed");
83238#ifdef FREECIV_JSON_CONNECTION
83239 field_addr.name = "anarchy";
83240#endif /* FREECIV_JSON_CONNECTION */
83241 e = 0;
83242 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
83243 if (e) {
83244 log_packet_detailed("'anarchy' field error detected");
83245 }
83246 }
83247 if (BV_ISSET(fields, 20)) {
83248 log_packet_detailed(" field 'rapture' has changed");
83249#ifdef FREECIV_JSON_CONNECTION
83250 field_addr.name = "rapture";
83251#endif /* FREECIV_JSON_CONNECTION */
83252 e = 0;
83253 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
83254 if (e) {
83255 log_packet_detailed("'rapture' field error detected");
83256 }
83257 }
83258 if (BV_ISSET(fields, 21)) {
83259 log_packet_detailed(" field 'steal' has changed");
83260#ifdef FREECIV_JSON_CONNECTION
83261 field_addr.name = "steal";
83262#endif /* FREECIV_JSON_CONNECTION */
83263 e = 0;
83264 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
83265 if (e) {
83266 log_packet_detailed("'steal' field error detected");
83267 }
83268 }
83269 if (BV_ISSET(fields, 22)) {
83270 log_packet_detailed(" field 'turn_founded' has changed");
83271#ifdef FREECIV_JSON_CONNECTION
83272 field_addr.name = "turn_founded";
83273#endif /* FREECIV_JSON_CONNECTION */
83274 e = 0;
83275 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
83276 if (e) {
83277 log_packet_detailed("'turn_founded' field error detected");
83278 }
83279 }
83280 if (BV_ISSET(fields, 23)) {
83281 log_packet_detailed(" field 'turn_last_built' has changed");
83282#ifdef FREECIV_JSON_CONNECTION
83283 field_addr.name = "turn_last_built";
83284#endif /* FREECIV_JSON_CONNECTION */
83285 e = 0;
83286 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
83287 if (e) {
83288 log_packet_detailed("'turn_last_built' field error detected");
83289 }
83290 }
83291 if (BV_ISSET(fields, 24)) {
83292 log_packet_detailed(" field 'built' has changed");
83293#ifdef FREECIV_JSON_CONNECTION
83294 field_addr.name = "built";
83295#endif /* FREECIV_JSON_CONNECTION */
83296 e = 0;
83298 {
83299 int i;
83300
83301#ifdef FREECIV_JSON_CONNECTION
83302 size_t count_i = 0;
83303
83304 /* Create the array. */
83305 e |= DIO_PUT(farray, &dout, &field_addr, 0);
83306
83307 /* Enter array. */
83308 field_addr.sub_location = plocation_elem_new(0);
83309#endif /* FREECIV_JSON_CONNECTION */
83310
83311 for (i = 0; i < B_LAST; i++) {
83312 differ = (old->built[i] != real_packet->built[i]);
83313
83314 if (differ) {
83315#ifdef FREECIV_JSON_CONNECTION
83316 /* Append next diff array element. */
83317 field_addr.sub_location->number = -1;
83318
83319 /* Create the diff array element. */
83320 e |= DIO_PUT(farray, &dout, &field_addr, 2);
83321
83322 /* Enter diff array element (start at the index address). */
83323 field_addr.sub_location->number = count_i++;
83324 field_addr.sub_location->sub_location = plocation_elem_new(0);
83325#endif /* FREECIV_JSON_CONNECTION */
83326
83327 /* Write the index */
83328#if B_LAST <= MAX_UINT8
83329 e |= DIO_PUT(uint8, &dout, &field_addr, i);
83330#else
83331 e |= DIO_PUT(uint16, &dout, &field_addr, i);
83332#endif
83333
83334#ifdef FREECIV_JSON_CONNECTION
83335 /* Content address. */
83336 field_addr.sub_location->sub_location->number = 1;
83337#endif /* FREECIV_JSON_CONNECTION */
83338
83339 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
83340
83341#ifdef FREECIV_JSON_CONNECTION
83342 /* Exit diff array element. */
83343 FC_FREE(field_addr.sub_location->sub_location);
83344#endif /* FREECIV_JSON_CONNECTION */
83345 }
83346 }
83347
83348#ifdef FREECIV_JSON_CONNECTION
83349 /* Append diff array element. */
83350 field_addr.sub_location->number = -1;
83351
83352 /* Create the terminating diff array element. */
83353 e |= DIO_PUT(farray, &dout, &field_addr, 1);
83354
83355 /* Enter diff array element (start at the index address). */
83356 field_addr.sub_location->number = count_i;
83357 field_addr.sub_location->sub_location = plocation_elem_new(0);
83358#endif /* FREECIV_JSON_CONNECTION */
83359
83360 /* Write the sentinel value */
83361#if B_LAST <= MAX_UINT8
83362 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
83363#else
83364 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
83365#endif
83366
83367#ifdef FREECIV_JSON_CONNECTION
83368 /* Exit diff array element. */
83369 FC_FREE(field_addr.sub_location->sub_location);
83370
83371 /* Exit array. */
83372 FC_FREE(field_addr.sub_location);
83373#endif /* FREECIV_JSON_CONNECTION */
83374 }
83375 if (e) {
83376 log_packet_detailed("'built' field error detected");
83377 }
83378 }
83379 if (BV_ISSET(fields, 25)) {
83380 log_packet_detailed(" field 'production_kind' has changed");
83381#ifdef FREECIV_JSON_CONNECTION
83382 field_addr.name = "production_kind";
83383#endif /* FREECIV_JSON_CONNECTION */
83384 e = 0;
83385 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
83386 if (e) {
83387 log_packet_detailed("'production_kind' field error detected");
83388 }
83389 }
83390 if (BV_ISSET(fields, 26)) {
83391 log_packet_detailed(" field 'production_value' has changed");
83392#ifdef FREECIV_JSON_CONNECTION
83393 field_addr.name = "production_value";
83394#endif /* FREECIV_JSON_CONNECTION */
83395 e = 0;
83396 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
83397 if (e) {
83398 log_packet_detailed("'production_value' field error detected");
83399 }
83400 }
83401
83402 *old = *real_packet;
83403#endif /* FREECIV_DELTA_PROTOCOL */
83404#ifndef FREECIV_DELTA_PROTOCOL
83405#ifdef FREECIV_JSON_CONNECTION
83406 field_addr.name = "id";
83407#endif /* FREECIV_JSON_CONNECTION */
83408 e = 0;
83409 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
83410 if (e) {
83411 log_packet_detailed("'id' field error detected");
83412 }
83413#ifdef FREECIV_JSON_CONNECTION
83414 field_addr.name = "name";
83415#endif /* FREECIV_JSON_CONNECTION */
83416 e = 0;
83417 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
83418 if (e) {
83419 log_packet_detailed("'name' field error detected");
83420 }
83421#ifdef FREECIV_JSON_CONNECTION
83422 field_addr.name = "owner";
83423#endif /* FREECIV_JSON_CONNECTION */
83424 e = 0;
83425 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
83426 if (e) {
83427 log_packet_detailed("'owner' field error detected");
83428 }
83429#ifdef FREECIV_JSON_CONNECTION
83430 field_addr.name = "original";
83431#endif /* FREECIV_JSON_CONNECTION */
83432 e = 0;
83433 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
83434 if (e) {
83435 log_packet_detailed("'original' field error detected");
83436 }
83437#ifdef FREECIV_JSON_CONNECTION
83438 field_addr.name = "size";
83439#endif /* FREECIV_JSON_CONNECTION */
83440 e = 0;
83441 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
83442 if (e) {
83443 log_packet_detailed("'size' field error detected");
83444 }
83445#ifdef FREECIV_JSON_CONNECTION
83446 field_addr.name = "history";
83447#endif /* FREECIV_JSON_CONNECTION */
83448 e = 0;
83449 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
83450 if (e) {
83451 log_packet_detailed("'history' field error detected");
83452 }
83453#ifdef FREECIV_JSON_CONNECTION
83454 field_addr.name = "ppl_happy";
83455#endif /* FREECIV_JSON_CONNECTION */
83456 e = 0;
83457 {
83458 int i;
83459
83460#ifdef FREECIV_JSON_CONNECTION
83461 /* Create the array. */
83462 e |= DIO_PUT(farray, &dout, &field_addr, 5);
83463
83464 /* Enter the array. */
83465 field_addr.sub_location = plocation_elem_new(0);
83466#endif /* FREECIV_JSON_CONNECTION */
83467
83468 for (i = 0; i < 5; i++) {
83469#ifdef FREECIV_JSON_CONNECTION
83470 /* Next array element. */
83471 field_addr.sub_location->number = i;
83472#endif /* FREECIV_JSON_CONNECTION */
83473
83474 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
83475 }
83476
83477#ifdef FREECIV_JSON_CONNECTION
83478 /* Exit array. */
83479 FC_FREE(field_addr.sub_location);
83480#endif /* FREECIV_JSON_CONNECTION */
83481 }
83482 if (e) {
83483 log_packet_detailed("'ppl_happy' field error detected");
83484 }
83485#ifdef FREECIV_JSON_CONNECTION
83486 field_addr.name = "ppl_content";
83487#endif /* FREECIV_JSON_CONNECTION */
83488 e = 0;
83489 {
83490 int i;
83491
83492#ifdef FREECIV_JSON_CONNECTION
83493 /* Create the array. */
83494 e |= DIO_PUT(farray, &dout, &field_addr, 5);
83495
83496 /* Enter the array. */
83497 field_addr.sub_location = plocation_elem_new(0);
83498#endif /* FREECIV_JSON_CONNECTION */
83499
83500 for (i = 0; i < 5; i++) {
83501#ifdef FREECIV_JSON_CONNECTION
83502 /* Next array element. */
83503 field_addr.sub_location->number = i;
83504#endif /* FREECIV_JSON_CONNECTION */
83505
83506 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
83507 }
83508
83509#ifdef FREECIV_JSON_CONNECTION
83510 /* Exit array. */
83511 FC_FREE(field_addr.sub_location);
83512#endif /* FREECIV_JSON_CONNECTION */
83513 }
83514 if (e) {
83515 log_packet_detailed("'ppl_content' field error detected");
83516 }
83517#ifdef FREECIV_JSON_CONNECTION
83518 field_addr.name = "ppl_unhappy";
83519#endif /* FREECIV_JSON_CONNECTION */
83520 e = 0;
83521 {
83522 int i;
83523
83524#ifdef FREECIV_JSON_CONNECTION
83525 /* Create the array. */
83526 e |= DIO_PUT(farray, &dout, &field_addr, 5);
83527
83528 /* Enter the array. */
83529 field_addr.sub_location = plocation_elem_new(0);
83530#endif /* FREECIV_JSON_CONNECTION */
83531
83532 for (i = 0; i < 5; i++) {
83533#ifdef FREECIV_JSON_CONNECTION
83534 /* Next array element. */
83535 field_addr.sub_location->number = i;
83536#endif /* FREECIV_JSON_CONNECTION */
83537
83538 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
83539 }
83540
83541#ifdef FREECIV_JSON_CONNECTION
83542 /* Exit array. */
83543 FC_FREE(field_addr.sub_location);
83544#endif /* FREECIV_JSON_CONNECTION */
83545 }
83546 if (e) {
83547 log_packet_detailed("'ppl_unhappy' field error detected");
83548 }
83549#ifdef FREECIV_JSON_CONNECTION
83550 field_addr.name = "ppl_angry";
83551#endif /* FREECIV_JSON_CONNECTION */
83552 e = 0;
83553 {
83554 int i;
83555
83556#ifdef FREECIV_JSON_CONNECTION
83557 /* Create the array. */
83558 e |= DIO_PUT(farray, &dout, &field_addr, 5);
83559
83560 /* Enter the array. */
83561 field_addr.sub_location = plocation_elem_new(0);
83562#endif /* FREECIV_JSON_CONNECTION */
83563
83564 for (i = 0; i < 5; i++) {
83565#ifdef FREECIV_JSON_CONNECTION
83566 /* Next array element. */
83567 field_addr.sub_location->number = i;
83568#endif /* FREECIV_JSON_CONNECTION */
83569
83570 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
83571 }
83572
83573#ifdef FREECIV_JSON_CONNECTION
83574 /* Exit array. */
83575 FC_FREE(field_addr.sub_location);
83576#endif /* FREECIV_JSON_CONNECTION */
83577 }
83578 if (e) {
83579 log_packet_detailed("'ppl_angry' field error detected");
83580 }
83581#ifdef FREECIV_JSON_CONNECTION
83582 field_addr.name = "specialists_size";
83583#endif /* FREECIV_JSON_CONNECTION */
83584 e = 0;
83585 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
83586 if (e) {
83587 log_packet_detailed("'specialists_size' field error detected");
83588 }
83589#ifdef FREECIV_JSON_CONNECTION
83590 field_addr.name = "specialists";
83591#endif /* FREECIV_JSON_CONNECTION */
83592 e = 0;
83593 {
83594 int i;
83595
83596#ifdef FREECIV_JSON_CONNECTION
83597 /* Create the array. */
83598 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
83599
83600 /* Enter the array. */
83601 field_addr.sub_location = plocation_elem_new(0);
83602#endif /* FREECIV_JSON_CONNECTION */
83603
83604 for (i = 0; i < real_packet->specialists_size; i++) {
83605#ifdef FREECIV_JSON_CONNECTION
83606 /* Next array element. */
83607 field_addr.sub_location->number = i;
83608#endif /* FREECIV_JSON_CONNECTION */
83609
83610 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
83611 }
83612
83613#ifdef FREECIV_JSON_CONNECTION
83614 /* Exit array. */
83615 FC_FREE(field_addr.sub_location);
83616#endif /* FREECIV_JSON_CONNECTION */
83617 }
83618 if (e) {
83619 log_packet_detailed("'specialists' field error detected");
83620 }
83621#ifdef FREECIV_JSON_CONNECTION
83622 field_addr.name = "food_stock";
83623#endif /* FREECIV_JSON_CONNECTION */
83624 e = 0;
83625 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
83626 if (e) {
83627 log_packet_detailed("'food_stock' field error detected");
83628 }
83629#ifdef FREECIV_JSON_CONNECTION
83630 field_addr.name = "shield_stock";
83631#endif /* FREECIV_JSON_CONNECTION */
83632 e = 0;
83633 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
83634 if (e) {
83635 log_packet_detailed("'shield_stock' field error detected");
83636 }
83637#ifdef FREECIV_JSON_CONNECTION
83638 field_addr.name = "airlift";
83639#endif /* FREECIV_JSON_CONNECTION */
83640 e = 0;
83641 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift);
83642 if (e) {
83643 log_packet_detailed("'airlift' field error detected");
83644 }
83645#ifdef FREECIV_JSON_CONNECTION
83646 field_addr.name = "debug";
83647#endif /* FREECIV_JSON_CONNECTION */
83648 e = 0;
83649 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
83650 if (e) {
83651 log_packet_detailed("'debug' field error detected");
83652 }
83653#ifdef FREECIV_JSON_CONNECTION
83654 field_addr.name = "did_buy";
83655#endif /* FREECIV_JSON_CONNECTION */
83656 e = 0;
83657 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
83658 if (e) {
83659 log_packet_detailed("'did_buy' field error detected");
83660 }
83661#ifdef FREECIV_JSON_CONNECTION
83662 field_addr.name = "did_sell";
83663#endif /* FREECIV_JSON_CONNECTION */
83664 e = 0;
83665 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
83666 if (e) {
83667 log_packet_detailed("'did_sell' field error detected");
83668 }
83669#ifdef FREECIV_JSON_CONNECTION
83670 field_addr.name = "was_happy";
83671#endif /* FREECIV_JSON_CONNECTION */
83672 e = 0;
83673 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
83674 if (e) {
83675 log_packet_detailed("'was_happy' field error detected");
83676 }
83677#ifdef FREECIV_JSON_CONNECTION
83678 field_addr.name = "had_famine";
83679#endif /* FREECIV_JSON_CONNECTION */
83680 e = 0;
83681 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
83682 if (e) {
83683 log_packet_detailed("'had_famine' field error detected");
83684 }
83685#ifdef FREECIV_JSON_CONNECTION
83686 field_addr.name = "anarchy";
83687#endif /* FREECIV_JSON_CONNECTION */
83688 e = 0;
83689 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
83690 if (e) {
83691 log_packet_detailed("'anarchy' field error detected");
83692 }
83693#ifdef FREECIV_JSON_CONNECTION
83694 field_addr.name = "rapture";
83695#endif /* FREECIV_JSON_CONNECTION */
83696 e = 0;
83697 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
83698 if (e) {
83699 log_packet_detailed("'rapture' field error detected");
83700 }
83701#ifdef FREECIV_JSON_CONNECTION
83702 field_addr.name = "steal";
83703#endif /* FREECIV_JSON_CONNECTION */
83704 e = 0;
83705 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
83706 if (e) {
83707 log_packet_detailed("'steal' field error detected");
83708 }
83709#ifdef FREECIV_JSON_CONNECTION
83710 field_addr.name = "turn_founded";
83711#endif /* FREECIV_JSON_CONNECTION */
83712 e = 0;
83713 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
83714 if (e) {
83715 log_packet_detailed("'turn_founded' field error detected");
83716 }
83717#ifdef FREECIV_JSON_CONNECTION
83718 field_addr.name = "turn_last_built";
83719#endif /* FREECIV_JSON_CONNECTION */
83720 e = 0;
83721 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
83722 if (e) {
83723 log_packet_detailed("'turn_last_built' field error detected");
83724 }
83725#ifdef FREECIV_JSON_CONNECTION
83726 field_addr.name = "built";
83727#endif /* FREECIV_JSON_CONNECTION */
83728 e = 0;
83729 {
83730 int i;
83731
83732#ifdef FREECIV_JSON_CONNECTION
83733 /* Create the array. */
83734 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
83735
83736 /* Enter the array. */
83737 field_addr.sub_location = plocation_elem_new(0);
83738#endif /* FREECIV_JSON_CONNECTION */
83739
83740 for (i = 0; i < B_LAST; i++) {
83741#ifdef FREECIV_JSON_CONNECTION
83742 /* Next array element. */
83743 field_addr.sub_location->number = i;
83744#endif /* FREECIV_JSON_CONNECTION */
83745
83746 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
83747 }
83748
83749#ifdef FREECIV_JSON_CONNECTION
83750 /* Exit array. */
83751 FC_FREE(field_addr.sub_location);
83752#endif /* FREECIV_JSON_CONNECTION */
83753 }
83754 if (e) {
83755 log_packet_detailed("'built' field error detected");
83756 }
83757#ifdef FREECIV_JSON_CONNECTION
83758 field_addr.name = "production_kind";
83759#endif /* FREECIV_JSON_CONNECTION */
83760 e = 0;
83761 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
83762 if (e) {
83763 log_packet_detailed("'production_kind' field error detected");
83764 }
83765#ifdef FREECIV_JSON_CONNECTION
83766 field_addr.name = "production_value";
83767#endif /* FREECIV_JSON_CONNECTION */
83768 e = 0;
83769 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
83770 if (e) {
83771 log_packet_detailed("'production_value' field error detected");
83772 }
83773
83774#endif
83776}
83777
83778int send_packet_edit_city(struct connection *pc, const struct packet_edit_city *packet)
83779{
83780 if (!pc->used) {
83781 log_error("WARNING: trying to send data to the closed connection %s",
83783 return -1;
83784 }
83785 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY].packet != NULL, -1,
83786 "Handler for PACKET_EDIT_CITY not installed");
83787 return pc->phs.handlers->send[PACKET_EDIT_CITY].packet(pc, packet);
83788}
83789
83790#ifdef FREECIV_DELTA_PROTOCOL
83791#define hash_packet_edit_player_create_100 hash_const
83792
83793#define cmp_packet_edit_player_create_100 cmp_const
83794
83796#endif /* FREECIV_DELTA_PROTOCOL */
83797
83799{
83800#ifdef FREECIV_DELTA_PROTOCOL
83802 struct packet_edit_player_create *old;
83803 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_CREATE;
83804#endif /* FREECIV_DELTA_PROTOCOL */
83806#ifdef FREECIV_JSON_CONNECTION
83807 struct plocation field_addr;
83808 {
83812 }
83813#endif /* FREECIV_JSON_CONNECTION */
83814
83815#ifdef FREECIV_DELTA_PROTOCOL
83816#ifdef FREECIV_JSON_CONNECTION
83817 field_addr.name = "fields";
83818#endif /* FREECIV_JSON_CONNECTION */
83819 DIO_BV_GET(&din, &field_addr, fields);
83820
83821#else /* FREECIV_DELTA_PROTOCOL */
83822#ifdef FREECIV_JSON_CONNECTION
83823 field_addr.name = "tag";
83824#endif /* FREECIV_JSON_CONNECTION */
83825 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
83827 }
83828#endif
83829 log_packet_detailed("packet_edit_player_create_100: got info about ()");
83830
83831#ifdef FREECIV_DELTA_PROTOCOL
83832 if (NULL == *hash) {
83834 NULL, NULL, NULL, free);
83835 }
83836
83837 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83838 *real_packet = *old;
83839 } else {
83840 log_packet_detailed(" no old info");
83841 memset(real_packet, 0, sizeof(*real_packet));
83842 }
83843
83844 if (BV_ISSET(fields, 0)) {
83845 log_packet_detailed(" got field 'tag'");
83846#ifdef FREECIV_JSON_CONNECTION
83847 field_addr.name = "tag";
83848#endif /* FREECIV_JSON_CONNECTION */
83849 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
83851 }
83852 }
83853
83854 if (NULL == old) {
83855 old = fc_malloc(sizeof(*old));
83856 *old = *real_packet;
83857 genhash_insert(*hash, old, old);
83858 } else {
83859 *old = *real_packet;
83860 }
83861
83862#endif /* FREECIV_DELTA_PROTOCOL */
83864}
83865
83867{
83868 const struct packet_edit_player_create *real_packet = packet;
83869 int e;
83870#ifdef FREECIV_DELTA_PROTOCOL
83872 struct packet_edit_player_create *old;
83873 bool differ;
83874 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_CREATE;
83875#endif /* FREECIV_DELTA_PROTOCOL */
83877#ifdef FREECIV_JSON_CONNECTION
83878 struct plocation field_addr;
83879 {
83883 }
83884#endif /* FREECIV_JSON_CONNECTION */
83885
83886 log_packet_detailed("packet_edit_player_create_100: sending info about ()");
83887
83888#ifdef FREECIV_DELTA_PROTOCOL
83889 if (NULL == *hash) {
83891 NULL, NULL, NULL, free);
83892 }
83893 BV_CLR_ALL(fields);
83894
83895 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83896 old = fc_malloc(sizeof(*old));
83897 *old = *real_packet;
83898 genhash_insert(*hash, old, old);
83899 memset(old, 0, sizeof(*old));
83900 }
83901 differ = (old->tag != real_packet->tag);
83902 if (differ) {
83903 BV_SET(fields, 0);
83904 }
83905
83906
83907#ifdef FREECIV_JSON_CONNECTION
83908 field_addr.name = "fields";
83909#endif /* FREECIV_JSON_CONNECTION */
83910 e = 0;
83911 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83912 if (e) {
83913 log_packet_detailed("fields bitvector error detected");
83914 }
83915
83916 if (BV_ISSET(fields, 0)) {
83917 log_packet_detailed(" field 'tag' has changed");
83918#ifdef FREECIV_JSON_CONNECTION
83919 field_addr.name = "tag";
83920#endif /* FREECIV_JSON_CONNECTION */
83921 e = 0;
83922 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
83923 if (e) {
83924 log_packet_detailed("'tag' field error detected");
83925 }
83926 }
83927
83928 *old = *real_packet;
83929#endif /* FREECIV_DELTA_PROTOCOL */
83930#ifndef FREECIV_DELTA_PROTOCOL
83931#ifdef FREECIV_JSON_CONNECTION
83932 field_addr.name = "tag";
83933#endif /* FREECIV_JSON_CONNECTION */
83934 e = 0;
83935 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
83936 if (e) {
83937 log_packet_detailed("'tag' field error detected");
83938 }
83939
83940#endif
83942}
83943
83945{
83946 if (!pc->used) {
83947 log_error("WARNING: trying to send data to the closed connection %s",
83949 return -1;
83950 }
83951 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet != NULL, -1,
83952 "Handler for PACKET_EDIT_PLAYER_CREATE not installed");
83953 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet(pc, packet);
83954}
83955
83957{
83958 struct packet_edit_player_create packet, *real_packet = &packet;
83959
83960 real_packet->tag = tag;
83961
83963}
83964
83965#ifdef FREECIV_DELTA_PROTOCOL
83966#define hash_packet_edit_player_remove_100 hash_const
83967
83968#define cmp_packet_edit_player_remove_100 cmp_const
83969
83971#endif /* FREECIV_DELTA_PROTOCOL */
83972
83974{
83975#ifdef FREECIV_DELTA_PROTOCOL
83977 struct packet_edit_player_remove *old;
83978 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_REMOVE;
83979#endif /* FREECIV_DELTA_PROTOCOL */
83981#ifdef FREECIV_JSON_CONNECTION
83982 struct plocation field_addr;
83983 {
83987 }
83988#endif /* FREECIV_JSON_CONNECTION */
83989
83990#ifdef FREECIV_DELTA_PROTOCOL
83991#ifdef FREECIV_JSON_CONNECTION
83992 field_addr.name = "fields";
83993#endif /* FREECIV_JSON_CONNECTION */
83994 DIO_BV_GET(&din, &field_addr, fields);
83995
83996#else /* FREECIV_DELTA_PROTOCOL */
83997#ifdef FREECIV_JSON_CONNECTION
83998 field_addr.name = "id";
83999#endif /* FREECIV_JSON_CONNECTION */
84000 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
84002 }
84003#endif
84004 log_packet_detailed("packet_edit_player_remove_100: got info about ()");
84005
84006#ifdef FREECIV_DELTA_PROTOCOL
84007 if (NULL == *hash) {
84009 NULL, NULL, NULL, free);
84010 }
84011
84012 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84013 *real_packet = *old;
84014 } else {
84015 log_packet_detailed(" no old info");
84016 memset(real_packet, 0, sizeof(*real_packet));
84017 }
84018
84019 if (BV_ISSET(fields, 0)) {
84020 log_packet_detailed(" got field 'id'");
84021#ifdef FREECIV_JSON_CONNECTION
84022 field_addr.name = "id";
84023#endif /* FREECIV_JSON_CONNECTION */
84024 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
84026 }
84027 }
84028
84029 if (NULL == old) {
84030 old = fc_malloc(sizeof(*old));
84031 *old = *real_packet;
84032 genhash_insert(*hash, old, old);
84033 } else {
84034 *old = *real_packet;
84035 }
84036
84037#endif /* FREECIV_DELTA_PROTOCOL */
84039}
84040
84042{
84043 const struct packet_edit_player_remove *real_packet = packet;
84044 int e;
84045#ifdef FREECIV_DELTA_PROTOCOL
84047 struct packet_edit_player_remove *old;
84048 bool differ;
84049 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_REMOVE;
84050#endif /* FREECIV_DELTA_PROTOCOL */
84052#ifdef FREECIV_JSON_CONNECTION
84053 struct plocation field_addr;
84054 {
84058 }
84059#endif /* FREECIV_JSON_CONNECTION */
84060
84061 log_packet_detailed("packet_edit_player_remove_100: sending info about ()");
84062
84063#ifdef FREECIV_DELTA_PROTOCOL
84064 if (NULL == *hash) {
84066 NULL, NULL, NULL, free);
84067 }
84068 BV_CLR_ALL(fields);
84069
84070 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84071 old = fc_malloc(sizeof(*old));
84072 *old = *real_packet;
84073 genhash_insert(*hash, old, old);
84074 memset(old, 0, sizeof(*old));
84075 }
84076 differ = (old->id != real_packet->id);
84077 if (differ) {
84078 BV_SET(fields, 0);
84079 }
84080
84081
84082#ifdef FREECIV_JSON_CONNECTION
84083 field_addr.name = "fields";
84084#endif /* FREECIV_JSON_CONNECTION */
84085 e = 0;
84086 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84087 if (e) {
84088 log_packet_detailed("fields bitvector error detected");
84089 }
84090
84091 if (BV_ISSET(fields, 0)) {
84092 log_packet_detailed(" field 'id' has changed");
84093#ifdef FREECIV_JSON_CONNECTION
84094 field_addr.name = "id";
84095#endif /* FREECIV_JSON_CONNECTION */
84096 e = 0;
84097 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
84098 if (e) {
84099 log_packet_detailed("'id' field error detected");
84100 }
84101 }
84102
84103 *old = *real_packet;
84104#endif /* FREECIV_DELTA_PROTOCOL */
84105#ifndef FREECIV_DELTA_PROTOCOL
84106#ifdef FREECIV_JSON_CONNECTION
84107 field_addr.name = "id";
84108#endif /* FREECIV_JSON_CONNECTION */
84109 e = 0;
84110 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
84111 if (e) {
84112 log_packet_detailed("'id' field error detected");
84113 }
84114
84115#endif
84117}
84118
84120{
84121 if (!pc->used) {
84122 log_error("WARNING: trying to send data to the closed connection %s",
84124 return -1;
84125 }
84126 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet != NULL, -1,
84127 "Handler for PACKET_EDIT_PLAYER_REMOVE not installed");
84128 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet(pc, packet);
84129}
84130
84132{
84133 struct packet_edit_player_remove packet, *real_packet = &packet;
84134
84135 real_packet->id = id;
84136
84138}
84139
84140#ifdef FREECIV_DELTA_PROTOCOL
84142{
84143 const struct packet_edit_player *key = (const struct packet_edit_player *) vkey;
84144 genhash_val_t result = 0;
84145
84146 result += key->id;
84147
84148 result &= 0xFFFFFFFF;
84149 return result;
84150}
84151
84152static bool cmp_packet_edit_player_100(const void *vkey1, const void *vkey2)
84153{
84154 const struct packet_edit_player *old = (const struct packet_edit_player *) vkey1;
84155 const struct packet_edit_player *real_packet = (const struct packet_edit_player *) vkey2;
84156 bool differ;
84157
84158 differ = (old->id != real_packet->id);
84159
84160 return !differ;
84161}
84163#endif /* FREECIV_DELTA_PROTOCOL */
84164
84166{
84167#ifdef FREECIV_DELTA_PROTOCOL
84169 struct packet_edit_player *old;
84170 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER;
84171#endif /* FREECIV_DELTA_PROTOCOL */
84173#ifdef FREECIV_JSON_CONNECTION
84174 struct plocation field_addr;
84175 {
84179 }
84180#endif /* FREECIV_JSON_CONNECTION */
84181
84182#ifdef FREECIV_DELTA_PROTOCOL
84183#ifdef FREECIV_JSON_CONNECTION
84184 field_addr.name = "fields";
84185#endif /* FREECIV_JSON_CONNECTION */
84186 DIO_BV_GET(&din, &field_addr, fields);
84187#ifdef FREECIV_JSON_CONNECTION
84188 field_addr.name = "id";
84189#endif /* FREECIV_JSON_CONNECTION */
84190 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
84192 }
84193
84194#else /* FREECIV_DELTA_PROTOCOL */
84195#ifdef FREECIV_JSON_CONNECTION
84196 field_addr.name = "id";
84197#endif /* FREECIV_JSON_CONNECTION */
84198 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
84200 }
84201#ifdef FREECIV_JSON_CONNECTION
84202 field_addr.name = "name";
84203#endif /* FREECIV_JSON_CONNECTION */
84204 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
84206 }
84207#ifdef FREECIV_JSON_CONNECTION
84208 field_addr.name = "username";
84209#endif /* FREECIV_JSON_CONNECTION */
84210 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
84212 }
84213#ifdef FREECIV_JSON_CONNECTION
84214 field_addr.name = "ranked_username";
84215#endif /* FREECIV_JSON_CONNECTION */
84216 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
84217 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
84218 }
84219#ifdef FREECIV_JSON_CONNECTION
84220 field_addr.name = "user_turns";
84221#endif /* FREECIV_JSON_CONNECTION */
84222 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
84223 RECEIVE_PACKET_FIELD_ERROR(user_turns);
84224 }
84225#ifdef FREECIV_JSON_CONNECTION
84226 field_addr.name = "is_male";
84227#endif /* FREECIV_JSON_CONNECTION */
84228 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
84230 }
84231#ifdef FREECIV_JSON_CONNECTION
84232 field_addr.name = "government";
84233#endif /* FREECIV_JSON_CONNECTION */
84234 {
84235 int readin;
84236
84237 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
84239 }
84240 real_packet->government = readin;
84241 }
84242#ifdef FREECIV_JSON_CONNECTION
84243 field_addr.name = "target_government";
84244#endif /* FREECIV_JSON_CONNECTION */
84245 {
84246 int readin;
84247
84248 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
84249 RECEIVE_PACKET_FIELD_ERROR(target_government);
84250 }
84251 real_packet->target_government = readin;
84252 }
84253#ifdef FREECIV_JSON_CONNECTION
84254 field_addr.name = "nation";
84255#endif /* FREECIV_JSON_CONNECTION */
84256 {
84257 int readin;
84258
84259 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
84261 }
84262 real_packet->nation = readin;
84263 }
84264#ifdef FREECIV_JSON_CONNECTION
84265 field_addr.name = "team";
84266#endif /* FREECIV_JSON_CONNECTION */
84267 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
84269 }
84270#ifdef FREECIV_JSON_CONNECTION
84271 field_addr.name = "phase_done";
84272#endif /* FREECIV_JSON_CONNECTION */
84273 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
84274 RECEIVE_PACKET_FIELD_ERROR(phase_done);
84275 }
84276#ifdef FREECIV_JSON_CONNECTION
84277 field_addr.name = "nturns_idle";
84278#endif /* FREECIV_JSON_CONNECTION */
84279 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
84280 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
84281 }
84282#ifdef FREECIV_JSON_CONNECTION
84283 field_addr.name = "is_alive";
84284#endif /* FREECIV_JSON_CONNECTION */
84285 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
84287 }
84288#ifdef FREECIV_JSON_CONNECTION
84289 field_addr.name = "revolution_finishes";
84290#endif /* FREECIV_JSON_CONNECTION */
84291 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
84292 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
84293 }
84294#ifdef FREECIV_JSON_CONNECTION
84295 field_addr.name = "autoselect_weight";
84296#endif /* FREECIV_JSON_CONNECTION */
84297 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
84298 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
84299 }
84300#ifdef FREECIV_JSON_CONNECTION
84301 field_addr.name = "embassy";
84302#endif /* FREECIV_JSON_CONNECTION */
84303 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
84305 }
84306#ifdef FREECIV_JSON_CONNECTION
84307 field_addr.name = "gold";
84308#endif /* FREECIV_JSON_CONNECTION */
84309 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
84311 }
84312#ifdef FREECIV_JSON_CONNECTION
84313 field_addr.name = "infrapoints";
84314#endif /* FREECIV_JSON_CONNECTION */
84315 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
84316 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
84317 }
84318#ifdef FREECIV_JSON_CONNECTION
84319 field_addr.name = "tax";
84320#endif /* FREECIV_JSON_CONNECTION */
84321 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
84323 }
84324#ifdef FREECIV_JSON_CONNECTION
84325 field_addr.name = "science";
84326#endif /* FREECIV_JSON_CONNECTION */
84327 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
84329 }
84330#ifdef FREECIV_JSON_CONNECTION
84331 field_addr.name = "luxury";
84332#endif /* FREECIV_JSON_CONNECTION */
84333 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
84335 }
84336#ifdef FREECIV_JSON_CONNECTION
84337 field_addr.name = "future_tech";
84338#endif /* FREECIV_JSON_CONNECTION */
84339 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
84340 RECEIVE_PACKET_FIELD_ERROR(future_tech);
84341 }
84342#ifdef FREECIV_JSON_CONNECTION
84343 field_addr.name = "researching";
84344#endif /* FREECIV_JSON_CONNECTION */
84345 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
84346 RECEIVE_PACKET_FIELD_ERROR(researching);
84347 }
84348#ifdef FREECIV_JSON_CONNECTION
84349 field_addr.name = "bulbs_researched";
84350#endif /* FREECIV_JSON_CONNECTION */
84351 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
84352 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
84353 }
84354#ifdef FREECIV_JSON_CONNECTION
84355 field_addr.name = "inventions";
84356#endif /* FREECIV_JSON_CONNECTION */
84357 {
84358 int i;
84359
84360#ifdef FREECIV_JSON_CONNECTION
84361 /* Enter array. */
84362 field_addr.sub_location = plocation_elem_new(0);
84363#endif /* FREECIV_JSON_CONNECTION */
84364
84365 for (i = 0; i < A_LAST + 1; i++) {
84366#ifdef FREECIV_JSON_CONNECTION
84367 field_addr.sub_location->number = i;
84368#endif /* FREECIV_JSON_CONNECTION */
84369
84370 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
84371 RECEIVE_PACKET_FIELD_ERROR(inventions);
84372 }
84373 }
84374
84375#ifdef FREECIV_JSON_CONNECTION
84376 /* Exit array. */
84377 FC_FREE(field_addr.sub_location);
84378#endif /* FREECIV_JSON_CONNECTION */
84379 }
84380#ifdef FREECIV_JSON_CONNECTION
84381 field_addr.name = "ai";
84382#endif /* FREECIV_JSON_CONNECTION */
84383 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ai)) {
84385 }
84386#ifdef FREECIV_JSON_CONNECTION
84387 field_addr.name = "scenario_reserved";
84388#endif /* FREECIV_JSON_CONNECTION */
84389 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_reserved)) {
84390 RECEIVE_PACKET_FIELD_ERROR(scenario_reserved);
84391 }
84392#endif
84393 log_packet_detailed("packet_edit_player_100: got info about (%d)",
84394 real_packet->id);
84395
84396#ifdef FREECIV_DELTA_PROTOCOL
84397 if (NULL == *hash) {
84399 NULL, NULL, NULL, free);
84400 }
84401
84402 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84403 *real_packet = *old;
84404 } else {
84405 int id;
84406
84407 id = real_packet->id;
84408
84409 log_packet_detailed(" no old info");
84410 memset(real_packet, 0, sizeof(*real_packet));
84411
84412 real_packet->id = id;
84413 }
84414
84415 if (BV_ISSET(fields, 0)) {
84416 log_packet_detailed(" got field 'name'");
84417#ifdef FREECIV_JSON_CONNECTION
84418 field_addr.name = "name";
84419#endif /* FREECIV_JSON_CONNECTION */
84420 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
84422 }
84423 }
84424 if (BV_ISSET(fields, 1)) {
84425 log_packet_detailed(" got field 'username'");
84426#ifdef FREECIV_JSON_CONNECTION
84427 field_addr.name = "username";
84428#endif /* FREECIV_JSON_CONNECTION */
84429 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
84431 }
84432 }
84433 if (BV_ISSET(fields, 2)) {
84434 log_packet_detailed(" got field 'ranked_username'");
84435#ifdef FREECIV_JSON_CONNECTION
84436 field_addr.name = "ranked_username";
84437#endif /* FREECIV_JSON_CONNECTION */
84438 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
84439 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
84440 }
84441 }
84442 if (BV_ISSET(fields, 3)) {
84443 log_packet_detailed(" got field 'user_turns'");
84444#ifdef FREECIV_JSON_CONNECTION
84445 field_addr.name = "user_turns";
84446#endif /* FREECIV_JSON_CONNECTION */
84447 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
84448 RECEIVE_PACKET_FIELD_ERROR(user_turns);
84449 }
84450 }
84451 real_packet->is_male = BV_ISSET(fields, 4);
84452 if (BV_ISSET(fields, 5)) {
84453 log_packet_detailed(" got field 'government'");
84454#ifdef FREECIV_JSON_CONNECTION
84455 field_addr.name = "government";
84456#endif /* FREECIV_JSON_CONNECTION */
84457 {
84458 int readin;
84459
84460 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
84462 }
84463 real_packet->government = readin;
84464 }
84465 }
84466 if (BV_ISSET(fields, 6)) {
84467 log_packet_detailed(" got field 'target_government'");
84468#ifdef FREECIV_JSON_CONNECTION
84469 field_addr.name = "target_government";
84470#endif /* FREECIV_JSON_CONNECTION */
84471 {
84472 int readin;
84473
84474 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
84475 RECEIVE_PACKET_FIELD_ERROR(target_government);
84476 }
84477 real_packet->target_government = readin;
84478 }
84479 }
84480 if (BV_ISSET(fields, 7)) {
84481 log_packet_detailed(" got field 'nation'");
84482#ifdef FREECIV_JSON_CONNECTION
84483 field_addr.name = "nation";
84484#endif /* FREECIV_JSON_CONNECTION */
84485 {
84486 int readin;
84487
84488 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
84490 }
84491 real_packet->nation = readin;
84492 }
84493 }
84494 if (BV_ISSET(fields, 8)) {
84495 log_packet_detailed(" got field 'team'");
84496#ifdef FREECIV_JSON_CONNECTION
84497 field_addr.name = "team";
84498#endif /* FREECIV_JSON_CONNECTION */
84499 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
84501 }
84502 }
84503 real_packet->phase_done = BV_ISSET(fields, 9);
84504 if (BV_ISSET(fields, 10)) {
84505 log_packet_detailed(" got field 'nturns_idle'");
84506#ifdef FREECIV_JSON_CONNECTION
84507 field_addr.name = "nturns_idle";
84508#endif /* FREECIV_JSON_CONNECTION */
84509 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
84510 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
84511 }
84512 }
84513 real_packet->is_alive = BV_ISSET(fields, 11);
84514 if (BV_ISSET(fields, 12)) {
84515 log_packet_detailed(" got field 'revolution_finishes'");
84516#ifdef FREECIV_JSON_CONNECTION
84517 field_addr.name = "revolution_finishes";
84518#endif /* FREECIV_JSON_CONNECTION */
84519 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
84520 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
84521 }
84522 }
84523 if (BV_ISSET(fields, 13)) {
84524 log_packet_detailed(" got field 'autoselect_weight'");
84525#ifdef FREECIV_JSON_CONNECTION
84526 field_addr.name = "autoselect_weight";
84527#endif /* FREECIV_JSON_CONNECTION */
84528 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
84529 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
84530 }
84531 }
84532 if (BV_ISSET(fields, 14)) {
84533 log_packet_detailed(" got field 'embassy'");
84534#ifdef FREECIV_JSON_CONNECTION
84535 field_addr.name = "embassy";
84536#endif /* FREECIV_JSON_CONNECTION */
84537 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
84539 }
84540 }
84541 if (BV_ISSET(fields, 15)) {
84542 log_packet_detailed(" got field 'gold'");
84543#ifdef FREECIV_JSON_CONNECTION
84544 field_addr.name = "gold";
84545#endif /* FREECIV_JSON_CONNECTION */
84546 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
84548 }
84549 }
84550 if (BV_ISSET(fields, 16)) {
84551 log_packet_detailed(" got field 'infrapoints'");
84552#ifdef FREECIV_JSON_CONNECTION
84553 field_addr.name = "infrapoints";
84554#endif /* FREECIV_JSON_CONNECTION */
84555 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
84556 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
84557 }
84558 }
84559 if (BV_ISSET(fields, 17)) {
84560 log_packet_detailed(" got field 'tax'");
84561#ifdef FREECIV_JSON_CONNECTION
84562 field_addr.name = "tax";
84563#endif /* FREECIV_JSON_CONNECTION */
84564 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
84566 }
84567 }
84568 if (BV_ISSET(fields, 18)) {
84569 log_packet_detailed(" got field 'science'");
84570#ifdef FREECIV_JSON_CONNECTION
84571 field_addr.name = "science";
84572#endif /* FREECIV_JSON_CONNECTION */
84573 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
84575 }
84576 }
84577 if (BV_ISSET(fields, 19)) {
84578 log_packet_detailed(" got field 'luxury'");
84579#ifdef FREECIV_JSON_CONNECTION
84580 field_addr.name = "luxury";
84581#endif /* FREECIV_JSON_CONNECTION */
84582 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
84584 }
84585 }
84586 if (BV_ISSET(fields, 20)) {
84587 log_packet_detailed(" got field 'future_tech'");
84588#ifdef FREECIV_JSON_CONNECTION
84589 field_addr.name = "future_tech";
84590#endif /* FREECIV_JSON_CONNECTION */
84591 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
84592 RECEIVE_PACKET_FIELD_ERROR(future_tech);
84593 }
84594 }
84595 if (BV_ISSET(fields, 21)) {
84596 log_packet_detailed(" got field 'researching'");
84597#ifdef FREECIV_JSON_CONNECTION
84598 field_addr.name = "researching";
84599#endif /* FREECIV_JSON_CONNECTION */
84600 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
84601 RECEIVE_PACKET_FIELD_ERROR(researching);
84602 }
84603 }
84604 if (BV_ISSET(fields, 22)) {
84605 log_packet_detailed(" got field 'bulbs_researched'");
84606#ifdef FREECIV_JSON_CONNECTION
84607 field_addr.name = "bulbs_researched";
84608#endif /* FREECIV_JSON_CONNECTION */
84609 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
84610 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
84611 }
84612 }
84613 if (BV_ISSET(fields, 23)) {
84614 log_packet_detailed(" got field 'inventions'");
84615#ifdef FREECIV_JSON_CONNECTION
84616 field_addr.name = "inventions";
84617#endif /* FREECIV_JSON_CONNECTION */
84619#ifdef FREECIV_JSON_CONNECTION
84620 /* Enter array (start at initial element). */
84621 field_addr.sub_location = plocation_elem_new(0);
84622 /* Enter diff array element (start at the index address). */
84623 field_addr.sub_location->sub_location = plocation_elem_new(0);
84624#endif /* FREECIV_JSON_CONNECTION */
84625
84626 while (TRUE) {
84627 int i;
84628
84629 /* Read next index */
84630#if A_LAST + 1 <= MAX_UINT8
84631 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
84632#else
84633 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
84634#endif
84635 RECEIVE_PACKET_FIELD_ERROR(inventions);
84636 }
84637
84638 if (i == A_LAST + 1) {
84639 break;
84640 }
84641 if (i > A_LAST + 1) {
84642 RECEIVE_PACKET_FIELD_ERROR(inventions,
84643 ": unexpected value %d "
84644 "(> A_LAST + 1) in array diff",
84645 i);
84646 }
84647
84648#ifdef FREECIV_JSON_CONNECTION
84649 /* Content address. */
84650 field_addr.sub_location->sub_location->number = 1;
84651#endif /* FREECIV_JSON_CONNECTION */
84652
84653 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
84654 RECEIVE_PACKET_FIELD_ERROR(inventions);
84655 }
84656
84657#ifdef FREECIV_JSON_CONNECTION
84658 /* Move to the next diff array element. */
84659 field_addr.sub_location->number++;
84660 /* Back to the index address. */
84661 field_addr.sub_location->sub_location->number = 0;
84662#endif /* FREECIV_JSON_CONNECTION */
84663 }
84664
84665#ifdef FREECIV_JSON_CONNECTION
84666 /* Exit diff array element. */
84667 FC_FREE(field_addr.sub_location->sub_location);
84668 /* Exit array. */
84669 FC_FREE(field_addr.sub_location);
84670#endif /* FREECIV_JSON_CONNECTION */
84671 }
84672 real_packet->ai = BV_ISSET(fields, 24);
84673 real_packet->scenario_reserved = BV_ISSET(fields, 25);
84674
84675 if (NULL == old) {
84676 old = fc_malloc(sizeof(*old));
84677 *old = *real_packet;
84678 genhash_insert(*hash, old, old);
84679 } else {
84680 *old = *real_packet;
84681 }
84682
84683#endif /* FREECIV_DELTA_PROTOCOL */
84685}
84686
84687static int send_packet_edit_player_100(struct connection *pc, const struct packet_edit_player *packet)
84688{
84689 const struct packet_edit_player *real_packet = packet;
84690 int e;
84691#ifdef FREECIV_DELTA_PROTOCOL
84693 struct packet_edit_player *old;
84694 bool differ;
84695 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER;
84696#endif /* FREECIV_DELTA_PROTOCOL */
84698#ifdef FREECIV_JSON_CONNECTION
84699 struct plocation field_addr;
84700 {
84704 }
84705#endif /* FREECIV_JSON_CONNECTION */
84706
84707 log_packet_detailed("packet_edit_player_100: sending info about (%d)",
84708 real_packet->id);
84709
84710#ifdef FREECIV_DELTA_PROTOCOL
84711 if (NULL == *hash) {
84713 NULL, NULL, NULL, free);
84714 }
84715 BV_CLR_ALL(fields);
84716
84717 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84718 old = fc_malloc(sizeof(*old));
84719 *old = *real_packet;
84720 genhash_insert(*hash, old, old);
84721 memset(old, 0, sizeof(*old));
84722 }
84723 differ = (strcmp(old->name, real_packet->name) != 0);
84724 if (differ) {
84725 BV_SET(fields, 0);
84726 }
84727
84728 differ = (strcmp(old->username, real_packet->username) != 0);
84729 if (differ) {
84730 BV_SET(fields, 1);
84731 }
84732
84733 differ = (strcmp(old->ranked_username, real_packet->ranked_username) != 0);
84734 if (differ) {
84735 BV_SET(fields, 2);
84736 }
84737
84738 differ = (old->user_turns != real_packet->user_turns);
84739 if (differ) {
84740 BV_SET(fields, 3);
84741 }
84742
84743 if (packet->is_male) {
84744 BV_SET(fields, 4);
84745 }
84746
84747 differ = (old->government != real_packet->government);
84748 if (differ) {
84749 BV_SET(fields, 5);
84750 }
84751
84752 differ = (old->target_government != real_packet->target_government);
84753 if (differ) {
84754 BV_SET(fields, 6);
84755 }
84756
84757 differ = (old->nation != real_packet->nation);
84758 if (differ) {
84759 BV_SET(fields, 7);
84760 }
84761
84762 differ = (old->team != real_packet->team);
84763 if (differ) {
84764 BV_SET(fields, 8);
84765 }
84766
84767 if (packet->phase_done) {
84768 BV_SET(fields, 9);
84769 }
84770
84771 differ = (old->nturns_idle != real_packet->nturns_idle);
84772 if (differ) {
84773 BV_SET(fields, 10);
84774 }
84775
84776 if (packet->is_alive) {
84777 BV_SET(fields, 11);
84778 }
84779
84780 differ = (old->revolution_finishes != real_packet->revolution_finishes);
84781 if (differ) {
84782 BV_SET(fields, 12);
84783 }
84784
84785 differ = (old->autoselect_weight != real_packet->autoselect_weight);
84786 if (differ) {
84787 BV_SET(fields, 13);
84788 }
84789
84790 differ = !BV_ARE_EQUAL(old->embassy, real_packet->embassy);
84791 if (differ) {
84792 BV_SET(fields, 14);
84793 }
84794
84795 differ = (old->gold != real_packet->gold);
84796 if (differ) {
84797 BV_SET(fields, 15);
84798 }
84799
84800 differ = (old->infrapoints != real_packet->infrapoints);
84801 if (differ) {
84802 BV_SET(fields, 16);
84803 }
84804
84805 differ = (old->tax != real_packet->tax);
84806 if (differ) {
84807 BV_SET(fields, 17);
84808 }
84809
84810 differ = (old->science != real_packet->science);
84811 if (differ) {
84812 BV_SET(fields, 18);
84813 }
84814
84815 differ = (old->luxury != real_packet->luxury);
84816 if (differ) {
84817 BV_SET(fields, 19);
84818 }
84819
84820 differ = (old->future_tech != real_packet->future_tech);
84821 if (differ) {
84822 BV_SET(fields, 20);
84823 }
84824
84825 differ = (old->researching != real_packet->researching);
84826 if (differ) {
84827 BV_SET(fields, 21);
84828 }
84829
84830 differ = (old->bulbs_researched != real_packet->bulbs_researched);
84831 if (differ) {
84832 BV_SET(fields, 22);
84833 }
84834
84835 differ = FALSE;
84836 {
84837 int i;
84838
84839 for (i = 0; i < A_LAST + 1; i++) {
84840 differ = (old->inventions[i] != real_packet->inventions[i]);
84841 if (differ) {
84842 break;
84843 }
84844 }
84845 }
84846 if (differ) {
84847 BV_SET(fields, 23);
84848 }
84849
84850 if (packet->ai) {
84851 BV_SET(fields, 24);
84852 }
84853
84854 if (packet->scenario_reserved) {
84855 BV_SET(fields, 25);
84856 }
84857
84858
84859#ifdef FREECIV_JSON_CONNECTION
84860 field_addr.name = "fields";
84861#endif /* FREECIV_JSON_CONNECTION */
84862 e = 0;
84863 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84864 if (e) {
84865 log_packet_detailed("fields bitvector error detected");
84866 }
84867#ifdef FREECIV_JSON_CONNECTION
84868 field_addr.name = "id";
84869#endif /* FREECIV_JSON_CONNECTION */
84870 e = 0;
84871 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
84872 if (e) {
84873 log_packet_detailed("'id' field error detected");
84874 }
84875
84876 if (BV_ISSET(fields, 0)) {
84877 log_packet_detailed(" field 'name' has changed");
84878#ifdef FREECIV_JSON_CONNECTION
84879 field_addr.name = "name";
84880#endif /* FREECIV_JSON_CONNECTION */
84881 e = 0;
84882 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
84883 if (e) {
84884 log_packet_detailed("'name' field error detected");
84885 }
84886 }
84887 if (BV_ISSET(fields, 1)) {
84888 log_packet_detailed(" field 'username' has changed");
84889#ifdef FREECIV_JSON_CONNECTION
84890 field_addr.name = "username";
84891#endif /* FREECIV_JSON_CONNECTION */
84892 e = 0;
84893 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
84894 if (e) {
84895 log_packet_detailed("'username' field error detected");
84896 }
84897 }
84898 if (BV_ISSET(fields, 2)) {
84899 log_packet_detailed(" field 'ranked_username' has changed");
84900#ifdef FREECIV_JSON_CONNECTION
84901 field_addr.name = "ranked_username";
84902#endif /* FREECIV_JSON_CONNECTION */
84903 e = 0;
84904 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
84905 if (e) {
84906 log_packet_detailed("'ranked_username' field error detected");
84907 }
84908 }
84909 if (BV_ISSET(fields, 3)) {
84910 log_packet_detailed(" field 'user_turns' has changed");
84911#ifdef FREECIV_JSON_CONNECTION
84912 field_addr.name = "user_turns";
84913#endif /* FREECIV_JSON_CONNECTION */
84914 e = 0;
84915 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
84916 if (e) {
84917 log_packet_detailed("'user_turns' field error detected");
84918 }
84919 }
84920 /* field 4 is folded into the header */
84921 if (BV_ISSET(fields, 5)) {
84922 log_packet_detailed(" field 'government' has changed");
84923#ifdef FREECIV_JSON_CONNECTION
84924 field_addr.name = "government";
84925#endif /* FREECIV_JSON_CONNECTION */
84926 e = 0;
84927 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
84928 if (e) {
84929 log_packet_detailed("'government' field error detected");
84930 }
84931 }
84932 if (BV_ISSET(fields, 6)) {
84933 log_packet_detailed(" field 'target_government' has changed");
84934#ifdef FREECIV_JSON_CONNECTION
84935 field_addr.name = "target_government";
84936#endif /* FREECIV_JSON_CONNECTION */
84937 e = 0;
84938 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
84939 if (e) {
84940 log_packet_detailed("'target_government' field error detected");
84941 }
84942 }
84943 if (BV_ISSET(fields, 7)) {
84944 log_packet_detailed(" field 'nation' has changed");
84945#ifdef FREECIV_JSON_CONNECTION
84946 field_addr.name = "nation";
84947#endif /* FREECIV_JSON_CONNECTION */
84948 e = 0;
84949 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
84950 if (e) {
84951 log_packet_detailed("'nation' field error detected");
84952 }
84953 }
84954 if (BV_ISSET(fields, 8)) {
84955 log_packet_detailed(" field 'team' has changed");
84956#ifdef FREECIV_JSON_CONNECTION
84957 field_addr.name = "team";
84958#endif /* FREECIV_JSON_CONNECTION */
84959 e = 0;
84960 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
84961 if (e) {
84962 log_packet_detailed("'team' field error detected");
84963 }
84964 }
84965 /* field 9 is folded into the header */
84966 if (BV_ISSET(fields, 10)) {
84967 log_packet_detailed(" field 'nturns_idle' has changed");
84968#ifdef FREECIV_JSON_CONNECTION
84969 field_addr.name = "nturns_idle";
84970#endif /* FREECIV_JSON_CONNECTION */
84971 e = 0;
84972 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
84973 if (e) {
84974 log_packet_detailed("'nturns_idle' field error detected");
84975 }
84976 }
84977 /* field 11 is folded into the header */
84978 if (BV_ISSET(fields, 12)) {
84979 log_packet_detailed(" field 'revolution_finishes' has changed");
84980#ifdef FREECIV_JSON_CONNECTION
84981 field_addr.name = "revolution_finishes";
84982#endif /* FREECIV_JSON_CONNECTION */
84983 e = 0;
84984 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
84985 if (e) {
84986 log_packet_detailed("'revolution_finishes' field error detected");
84987 }
84988 }
84989 if (BV_ISSET(fields, 13)) {
84990 log_packet_detailed(" field 'autoselect_weight' has changed");
84991#ifdef FREECIV_JSON_CONNECTION
84992 field_addr.name = "autoselect_weight";
84993#endif /* FREECIV_JSON_CONNECTION */
84994 e = 0;
84995 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
84996 if (e) {
84997 log_packet_detailed("'autoselect_weight' field error detected");
84998 }
84999 }
85000 if (BV_ISSET(fields, 14)) {
85001 log_packet_detailed(" field 'embassy' has changed");
85002#ifdef FREECIV_JSON_CONNECTION
85003 field_addr.name = "embassy";
85004#endif /* FREECIV_JSON_CONNECTION */
85005 e = 0;
85006 e |= DIO_BV_PUT(&dout, &field_addr, packet->embassy);
85007 if (e) {
85008 log_packet_detailed("'embassy' field error detected");
85009 }
85010 }
85011 if (BV_ISSET(fields, 15)) {
85012 log_packet_detailed(" field 'gold' has changed");
85013#ifdef FREECIV_JSON_CONNECTION
85014 field_addr.name = "gold";
85015#endif /* FREECIV_JSON_CONNECTION */
85016 e = 0;
85017 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
85018 if (e) {
85019 log_packet_detailed("'gold' field error detected");
85020 }
85021 }
85022 if (BV_ISSET(fields, 16)) {
85023 log_packet_detailed(" field 'infrapoints' has changed");
85024#ifdef FREECIV_JSON_CONNECTION
85025 field_addr.name = "infrapoints";
85026#endif /* FREECIV_JSON_CONNECTION */
85027 e = 0;
85028 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
85029 if (e) {
85030 log_packet_detailed("'infrapoints' field error detected");
85031 }
85032 }
85033 if (BV_ISSET(fields, 17)) {
85034 log_packet_detailed(" field 'tax' has changed");
85035#ifdef FREECIV_JSON_CONNECTION
85036 field_addr.name = "tax";
85037#endif /* FREECIV_JSON_CONNECTION */
85038 e = 0;
85039 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
85040 if (e) {
85041 log_packet_detailed("'tax' field error detected");
85042 }
85043 }
85044 if (BV_ISSET(fields, 18)) {
85045 log_packet_detailed(" field 'science' has changed");
85046#ifdef FREECIV_JSON_CONNECTION
85047 field_addr.name = "science";
85048#endif /* FREECIV_JSON_CONNECTION */
85049 e = 0;
85050 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
85051 if (e) {
85052 log_packet_detailed("'science' field error detected");
85053 }
85054 }
85055 if (BV_ISSET(fields, 19)) {
85056 log_packet_detailed(" field 'luxury' has changed");
85057#ifdef FREECIV_JSON_CONNECTION
85058 field_addr.name = "luxury";
85059#endif /* FREECIV_JSON_CONNECTION */
85060 e = 0;
85061 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
85062 if (e) {
85063 log_packet_detailed("'luxury' field error detected");
85064 }
85065 }
85066 if (BV_ISSET(fields, 20)) {
85067 log_packet_detailed(" field 'future_tech' has changed");
85068#ifdef FREECIV_JSON_CONNECTION
85069 field_addr.name = "future_tech";
85070#endif /* FREECIV_JSON_CONNECTION */
85071 e = 0;
85072 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
85073 if (e) {
85074 log_packet_detailed("'future_tech' field error detected");
85075 }
85076 }
85077 if (BV_ISSET(fields, 21)) {
85078 log_packet_detailed(" field 'researching' has changed");
85079#ifdef FREECIV_JSON_CONNECTION
85080 field_addr.name = "researching";
85081#endif /* FREECIV_JSON_CONNECTION */
85082 e = 0;
85083 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
85084 if (e) {
85085 log_packet_detailed("'researching' field error detected");
85086 }
85087 }
85088 if (BV_ISSET(fields, 22)) {
85089 log_packet_detailed(" field 'bulbs_researched' has changed");
85090#ifdef FREECIV_JSON_CONNECTION
85091 field_addr.name = "bulbs_researched";
85092#endif /* FREECIV_JSON_CONNECTION */
85093 e = 0;
85094 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
85095 if (e) {
85096 log_packet_detailed("'bulbs_researched' field error detected");
85097 }
85098 }
85099 if (BV_ISSET(fields, 23)) {
85100 log_packet_detailed(" field 'inventions' has changed");
85101#ifdef FREECIV_JSON_CONNECTION
85102 field_addr.name = "inventions";
85103#endif /* FREECIV_JSON_CONNECTION */
85104 e = 0;
85106 {
85107 int i;
85108
85109#ifdef FREECIV_JSON_CONNECTION
85110 size_t count_i = 0;
85111
85112 /* Create the array. */
85113 e |= DIO_PUT(farray, &dout, &field_addr, 0);
85114
85115 /* Enter array. */
85116 field_addr.sub_location = plocation_elem_new(0);
85117#endif /* FREECIV_JSON_CONNECTION */
85118
85119 for (i = 0; i < A_LAST + 1; i++) {
85120 differ = (old->inventions[i] != real_packet->inventions[i]);
85121
85122 if (differ) {
85123#ifdef FREECIV_JSON_CONNECTION
85124 /* Append next diff array element. */
85125 field_addr.sub_location->number = -1;
85126
85127 /* Create the diff array element. */
85128 e |= DIO_PUT(farray, &dout, &field_addr, 2);
85129
85130 /* Enter diff array element (start at the index address). */
85131 field_addr.sub_location->number = count_i++;
85132 field_addr.sub_location->sub_location = plocation_elem_new(0);
85133#endif /* FREECIV_JSON_CONNECTION */
85134
85135 /* Write the index */
85136#if A_LAST + 1 <= MAX_UINT8
85137 e |= DIO_PUT(uint8, &dout, &field_addr, i);
85138#else
85139 e |= DIO_PUT(uint16, &dout, &field_addr, i);
85140#endif
85141
85142#ifdef FREECIV_JSON_CONNECTION
85143 /* Content address. */
85144 field_addr.sub_location->sub_location->number = 1;
85145#endif /* FREECIV_JSON_CONNECTION */
85146
85147 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
85148
85149#ifdef FREECIV_JSON_CONNECTION
85150 /* Exit diff array element. */
85151 FC_FREE(field_addr.sub_location->sub_location);
85152#endif /* FREECIV_JSON_CONNECTION */
85153 }
85154 }
85155
85156#ifdef FREECIV_JSON_CONNECTION
85157 /* Append diff array element. */
85158 field_addr.sub_location->number = -1;
85159
85160 /* Create the terminating diff array element. */
85161 e |= DIO_PUT(farray, &dout, &field_addr, 1);
85162
85163 /* Enter diff array element (start at the index address). */
85164 field_addr.sub_location->number = count_i;
85165 field_addr.sub_location->sub_location = plocation_elem_new(0);
85166#endif /* FREECIV_JSON_CONNECTION */
85167
85168 /* Write the sentinel value */
85169#if A_LAST + 1 <= MAX_UINT8
85170 e |= DIO_PUT(uint8, &dout, &field_addr, A_LAST + 1);
85171#else
85172 e |= DIO_PUT(uint16, &dout, &field_addr, A_LAST + 1);
85173#endif
85174
85175#ifdef FREECIV_JSON_CONNECTION
85176 /* Exit diff array element. */
85177 FC_FREE(field_addr.sub_location->sub_location);
85178
85179 /* Exit array. */
85180 FC_FREE(field_addr.sub_location);
85181#endif /* FREECIV_JSON_CONNECTION */
85182 }
85183 if (e) {
85184 log_packet_detailed("'inventions' field error detected");
85185 }
85186 }
85187 /* field 24 is folded into the header */
85188 /* field 25 is folded into the header */
85189
85190 *old = *real_packet;
85191#endif /* FREECIV_DELTA_PROTOCOL */
85192#ifndef FREECIV_DELTA_PROTOCOL
85193#ifdef FREECIV_JSON_CONNECTION
85194 field_addr.name = "id";
85195#endif /* FREECIV_JSON_CONNECTION */
85196 e = 0;
85197 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
85198 if (e) {
85199 log_packet_detailed("'id' field error detected");
85200 }
85201#ifdef FREECIV_JSON_CONNECTION
85202 field_addr.name = "name";
85203#endif /* FREECIV_JSON_CONNECTION */
85204 e = 0;
85205 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
85206 if (e) {
85207 log_packet_detailed("'name' field error detected");
85208 }
85209#ifdef FREECIV_JSON_CONNECTION
85210 field_addr.name = "username";
85211#endif /* FREECIV_JSON_CONNECTION */
85212 e = 0;
85213 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
85214 if (e) {
85215 log_packet_detailed("'username' field error detected");
85216 }
85217#ifdef FREECIV_JSON_CONNECTION
85218 field_addr.name = "ranked_username";
85219#endif /* FREECIV_JSON_CONNECTION */
85220 e = 0;
85221 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
85222 if (e) {
85223 log_packet_detailed("'ranked_username' field error detected");
85224 }
85225#ifdef FREECIV_JSON_CONNECTION
85226 field_addr.name = "user_turns";
85227#endif /* FREECIV_JSON_CONNECTION */
85228 e = 0;
85229 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
85230 if (e) {
85231 log_packet_detailed("'user_turns' field error detected");
85232 }
85233#ifdef FREECIV_JSON_CONNECTION
85234 field_addr.name = "is_male";
85235#endif /* FREECIV_JSON_CONNECTION */
85236 e = 0;
85237 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
85238 if (e) {
85239 log_packet_detailed("'is_male' field error detected");
85240 }
85241#ifdef FREECIV_JSON_CONNECTION
85242 field_addr.name = "government";
85243#endif /* FREECIV_JSON_CONNECTION */
85244 e = 0;
85245 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
85246 if (e) {
85247 log_packet_detailed("'government' field error detected");
85248 }
85249#ifdef FREECIV_JSON_CONNECTION
85250 field_addr.name = "target_government";
85251#endif /* FREECIV_JSON_CONNECTION */
85252 e = 0;
85253 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
85254 if (e) {
85255 log_packet_detailed("'target_government' field error detected");
85256 }
85257#ifdef FREECIV_JSON_CONNECTION
85258 field_addr.name = "nation";
85259#endif /* FREECIV_JSON_CONNECTION */
85260 e = 0;
85261 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
85262 if (e) {
85263 log_packet_detailed("'nation' field error detected");
85264 }
85265#ifdef FREECIV_JSON_CONNECTION
85266 field_addr.name = "team";
85267#endif /* FREECIV_JSON_CONNECTION */
85268 e = 0;
85269 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
85270 if (e) {
85271 log_packet_detailed("'team' field error detected");
85272 }
85273#ifdef FREECIV_JSON_CONNECTION
85274 field_addr.name = "phase_done";
85275#endif /* FREECIV_JSON_CONNECTION */
85276 e = 0;
85277 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
85278 if (e) {
85279 log_packet_detailed("'phase_done' field error detected");
85280 }
85281#ifdef FREECIV_JSON_CONNECTION
85282 field_addr.name = "nturns_idle";
85283#endif /* FREECIV_JSON_CONNECTION */
85284 e = 0;
85285 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
85286 if (e) {
85287 log_packet_detailed("'nturns_idle' field error detected");
85288 }
85289#ifdef FREECIV_JSON_CONNECTION
85290 field_addr.name = "is_alive";
85291#endif /* FREECIV_JSON_CONNECTION */
85292 e = 0;
85293 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
85294 if (e) {
85295 log_packet_detailed("'is_alive' field error detected");
85296 }
85297#ifdef FREECIV_JSON_CONNECTION
85298 field_addr.name = "revolution_finishes";
85299#endif /* FREECIV_JSON_CONNECTION */
85300 e = 0;
85301 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
85302 if (e) {
85303 log_packet_detailed("'revolution_finishes' field error detected");
85304 }
85305#ifdef FREECIV_JSON_CONNECTION
85306 field_addr.name = "autoselect_weight";
85307#endif /* FREECIV_JSON_CONNECTION */
85308 e = 0;
85309 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
85310 if (e) {
85311 log_packet_detailed("'autoselect_weight' field error detected");
85312 }
85313#ifdef FREECIV_JSON_CONNECTION
85314 field_addr.name = "embassy";
85315#endif /* FREECIV_JSON_CONNECTION */
85316 e = 0;
85317 e |= DIO_BV_PUT(&dout, &field_addr, packet->embassy);
85318 if (e) {
85319 log_packet_detailed("'embassy' field error detected");
85320 }
85321#ifdef FREECIV_JSON_CONNECTION
85322 field_addr.name = "gold";
85323#endif /* FREECIV_JSON_CONNECTION */
85324 e = 0;
85325 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
85326 if (e) {
85327 log_packet_detailed("'gold' field error detected");
85328 }
85329#ifdef FREECIV_JSON_CONNECTION
85330 field_addr.name = "infrapoints";
85331#endif /* FREECIV_JSON_CONNECTION */
85332 e = 0;
85333 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
85334 if (e) {
85335 log_packet_detailed("'infrapoints' field error detected");
85336 }
85337#ifdef FREECIV_JSON_CONNECTION
85338 field_addr.name = "tax";
85339#endif /* FREECIV_JSON_CONNECTION */
85340 e = 0;
85341 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
85342 if (e) {
85343 log_packet_detailed("'tax' field error detected");
85344 }
85345#ifdef FREECIV_JSON_CONNECTION
85346 field_addr.name = "science";
85347#endif /* FREECIV_JSON_CONNECTION */
85348 e = 0;
85349 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
85350 if (e) {
85351 log_packet_detailed("'science' field error detected");
85352 }
85353#ifdef FREECIV_JSON_CONNECTION
85354 field_addr.name = "luxury";
85355#endif /* FREECIV_JSON_CONNECTION */
85356 e = 0;
85357 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
85358 if (e) {
85359 log_packet_detailed("'luxury' field error detected");
85360 }
85361#ifdef FREECIV_JSON_CONNECTION
85362 field_addr.name = "future_tech";
85363#endif /* FREECIV_JSON_CONNECTION */
85364 e = 0;
85365 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
85366 if (e) {
85367 log_packet_detailed("'future_tech' field error detected");
85368 }
85369#ifdef FREECIV_JSON_CONNECTION
85370 field_addr.name = "researching";
85371#endif /* FREECIV_JSON_CONNECTION */
85372 e = 0;
85373 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
85374 if (e) {
85375 log_packet_detailed("'researching' field error detected");
85376 }
85377#ifdef FREECIV_JSON_CONNECTION
85378 field_addr.name = "bulbs_researched";
85379#endif /* FREECIV_JSON_CONNECTION */
85380 e = 0;
85381 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
85382 if (e) {
85383 log_packet_detailed("'bulbs_researched' field error detected");
85384 }
85385#ifdef FREECIV_JSON_CONNECTION
85386 field_addr.name = "inventions";
85387#endif /* FREECIV_JSON_CONNECTION */
85388 e = 0;
85389 {
85390 int i;
85391
85392#ifdef FREECIV_JSON_CONNECTION
85393 /* Create the array. */
85394 e |= DIO_PUT(farray, &dout, &field_addr, A_LAST + 1);
85395
85396 /* Enter the array. */
85397 field_addr.sub_location = plocation_elem_new(0);
85398#endif /* FREECIV_JSON_CONNECTION */
85399
85400 for (i = 0; i < A_LAST + 1; i++) {
85401#ifdef FREECIV_JSON_CONNECTION
85402 /* Next array element. */
85403 field_addr.sub_location->number = i;
85404#endif /* FREECIV_JSON_CONNECTION */
85405
85406 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
85407 }
85408
85409#ifdef FREECIV_JSON_CONNECTION
85410 /* Exit array. */
85411 FC_FREE(field_addr.sub_location);
85412#endif /* FREECIV_JSON_CONNECTION */
85413 }
85414 if (e) {
85415 log_packet_detailed("'inventions' field error detected");
85416 }
85417#ifdef FREECIV_JSON_CONNECTION
85418 field_addr.name = "ai";
85419#endif /* FREECIV_JSON_CONNECTION */
85420 e = 0;
85421 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ai);
85422 if (e) {
85423 log_packet_detailed("'ai' field error detected");
85424 }
85425#ifdef FREECIV_JSON_CONNECTION
85426 field_addr.name = "scenario_reserved";
85427#endif /* FREECIV_JSON_CONNECTION */
85428 e = 0;
85429 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_reserved);
85430 if (e) {
85431 log_packet_detailed("'scenario_reserved' field error detected");
85432 }
85433
85434#endif
85436}
85437
85439{
85440 if (!pc->used) {
85441 log_error("WARNING: trying to send data to the closed connection %s",
85443 return -1;
85444 }
85445 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet != NULL, -1,
85446 "Handler for PACKET_EDIT_PLAYER not installed");
85447 return pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet(pc, packet);
85448}
85449
85450void lsend_packet_edit_player(struct conn_list *dest, const struct packet_edit_player *packet)
85451{
85452 conn_list_iterate(dest, pconn) {
85455}
85456
85457#ifdef FREECIV_DELTA_PROTOCOL
85458#define hash_packet_edit_player_vision_100 hash_const
85459
85460#define cmp_packet_edit_player_vision_100 cmp_const
85461
85463#endif /* FREECIV_DELTA_PROTOCOL */
85464
85466{
85467#ifdef FREECIV_DELTA_PROTOCOL
85469 struct packet_edit_player_vision *old;
85470 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_VISION;
85471#endif /* FREECIV_DELTA_PROTOCOL */
85473#ifdef FREECIV_JSON_CONNECTION
85474 struct plocation field_addr;
85475 {
85479 }
85480#endif /* FREECIV_JSON_CONNECTION */
85481
85482#ifdef FREECIV_DELTA_PROTOCOL
85483#ifdef FREECIV_JSON_CONNECTION
85484 field_addr.name = "fields";
85485#endif /* FREECIV_JSON_CONNECTION */
85486 DIO_BV_GET(&din, &field_addr, fields);
85487
85488#else /* FREECIV_DELTA_PROTOCOL */
85489#ifdef FREECIV_JSON_CONNECTION
85490 field_addr.name = "player";
85491#endif /* FREECIV_JSON_CONNECTION */
85492 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player)) {
85494 }
85495#ifdef FREECIV_JSON_CONNECTION
85496 field_addr.name = "tile";
85497#endif /* FREECIV_JSON_CONNECTION */
85498 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
85500 }
85501#ifdef FREECIV_JSON_CONNECTION
85502 field_addr.name = "known";
85503#endif /* FREECIV_JSON_CONNECTION */
85504 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->known)) {
85506 }
85507#ifdef FREECIV_JSON_CONNECTION
85508 field_addr.name = "size";
85509#endif /* FREECIV_JSON_CONNECTION */
85510 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
85512 }
85513#endif
85514 log_packet_detailed("packet_edit_player_vision_100: got info about ()");
85515
85516#ifdef FREECIV_DELTA_PROTOCOL
85517 if (NULL == *hash) {
85519 NULL, NULL, NULL, free);
85520 }
85521
85522 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85523 *real_packet = *old;
85524 } else {
85525 log_packet_detailed(" no old info");
85526 memset(real_packet, 0, sizeof(*real_packet));
85527 }
85528
85529 if (BV_ISSET(fields, 0)) {
85530 log_packet_detailed(" got field 'player'");
85531#ifdef FREECIV_JSON_CONNECTION
85532 field_addr.name = "player";
85533#endif /* FREECIV_JSON_CONNECTION */
85534 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player)) {
85536 }
85537 }
85538 if (BV_ISSET(fields, 1)) {
85539 log_packet_detailed(" got field 'tile'");
85540#ifdef FREECIV_JSON_CONNECTION
85541 field_addr.name = "tile";
85542#endif /* FREECIV_JSON_CONNECTION */
85543 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
85545 }
85546 }
85547 real_packet->known = BV_ISSET(fields, 2);
85548 if (BV_ISSET(fields, 3)) {
85549 log_packet_detailed(" got field 'size'");
85550#ifdef FREECIV_JSON_CONNECTION
85551 field_addr.name = "size";
85552#endif /* FREECIV_JSON_CONNECTION */
85553 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
85555 }
85556 }
85557
85558 if (NULL == old) {
85559 old = fc_malloc(sizeof(*old));
85560 *old = *real_packet;
85561 genhash_insert(*hash, old, old);
85562 } else {
85563 *old = *real_packet;
85564 }
85565
85566#endif /* FREECIV_DELTA_PROTOCOL */
85568}
85569
85571{
85572 const struct packet_edit_player_vision *real_packet = packet;
85573 int e;
85574#ifdef FREECIV_DELTA_PROTOCOL
85576 struct packet_edit_player_vision *old;
85577 bool differ;
85578 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_VISION;
85579#endif /* FREECIV_DELTA_PROTOCOL */
85581#ifdef FREECIV_JSON_CONNECTION
85582 struct plocation field_addr;
85583 {
85587 }
85588#endif /* FREECIV_JSON_CONNECTION */
85589
85590 log_packet_detailed("packet_edit_player_vision_100: sending info about ()");
85591
85592#ifdef FREECIV_DELTA_PROTOCOL
85593 if (NULL == *hash) {
85595 NULL, NULL, NULL, free);
85596 }
85597 BV_CLR_ALL(fields);
85598
85599 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85600 old = fc_malloc(sizeof(*old));
85601 *old = *real_packet;
85602 genhash_insert(*hash, old, old);
85603 memset(old, 0, sizeof(*old));
85604 }
85605 differ = (old->player != real_packet->player);
85606 if (differ) {
85607 BV_SET(fields, 0);
85608 }
85609
85610 differ = (old->tile != real_packet->tile);
85611 if (differ) {
85612 BV_SET(fields, 1);
85613 }
85614
85615 if (packet->known) {
85616 BV_SET(fields, 2);
85617 }
85618
85619 differ = (old->size != real_packet->size);
85620 if (differ) {
85621 BV_SET(fields, 3);
85622 }
85623
85624
85625#ifdef FREECIV_JSON_CONNECTION
85626 field_addr.name = "fields";
85627#endif /* FREECIV_JSON_CONNECTION */
85628 e = 0;
85629 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85630 if (e) {
85631 log_packet_detailed("fields bitvector error detected");
85632 }
85633
85634 if (BV_ISSET(fields, 0)) {
85635 log_packet_detailed(" field 'player' has changed");
85636#ifdef FREECIV_JSON_CONNECTION
85637 field_addr.name = "player";
85638#endif /* FREECIV_JSON_CONNECTION */
85639 e = 0;
85640 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player);
85641 if (e) {
85642 log_packet_detailed("'player' field error detected");
85643 }
85644 }
85645 if (BV_ISSET(fields, 1)) {
85646 log_packet_detailed(" field 'tile' has changed");
85647#ifdef FREECIV_JSON_CONNECTION
85648 field_addr.name = "tile";
85649#endif /* FREECIV_JSON_CONNECTION */
85650 e = 0;
85651 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
85652 if (e) {
85653 log_packet_detailed("'tile' field error detected");
85654 }
85655 }
85656 /* field 2 is folded into the header */
85657 if (BV_ISSET(fields, 3)) {
85658 log_packet_detailed(" field 'size' has changed");
85659#ifdef FREECIV_JSON_CONNECTION
85660 field_addr.name = "size";
85661#endif /* FREECIV_JSON_CONNECTION */
85662 e = 0;
85663 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
85664 if (e) {
85665 log_packet_detailed("'size' field error detected");
85666 }
85667 }
85668
85669 *old = *real_packet;
85670#endif /* FREECIV_DELTA_PROTOCOL */
85671#ifndef FREECIV_DELTA_PROTOCOL
85672#ifdef FREECIV_JSON_CONNECTION
85673 field_addr.name = "player";
85674#endif /* FREECIV_JSON_CONNECTION */
85675 e = 0;
85676 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player);
85677 if (e) {
85678 log_packet_detailed("'player' field error detected");
85679 }
85680#ifdef FREECIV_JSON_CONNECTION
85681 field_addr.name = "tile";
85682#endif /* FREECIV_JSON_CONNECTION */
85683 e = 0;
85684 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
85685 if (e) {
85686 log_packet_detailed("'tile' field error detected");
85687 }
85688#ifdef FREECIV_JSON_CONNECTION
85689 field_addr.name = "known";
85690#endif /* FREECIV_JSON_CONNECTION */
85691 e = 0;
85692 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->known);
85693 if (e) {
85694 log_packet_detailed("'known' field error detected");
85695 }
85696#ifdef FREECIV_JSON_CONNECTION
85697 field_addr.name = "size";
85698#endif /* FREECIV_JSON_CONNECTION */
85699 e = 0;
85700 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
85701 if (e) {
85702 log_packet_detailed("'size' field error detected");
85703 }
85704
85705#endif
85707}
85708
85710{
85711 if (!pc->used) {
85712 log_error("WARNING: trying to send data to the closed connection %s",
85714 return -1;
85715 }
85716 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet != NULL, -1,
85717 "Handler for PACKET_EDIT_PLAYER_VISION not installed");
85718 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet(pc, packet);
85719}
85720
85721int dsend_packet_edit_player_vision(struct connection *pc, int player, int tile, bool known, int size)
85722{
85723 struct packet_edit_player_vision packet, *real_packet = &packet;
85724
85726 real_packet->tile = tile;
85727 real_packet->known = known;
85728 real_packet->size = size;
85729
85731}
85732
85733#ifdef FREECIV_DELTA_PROTOCOL
85734#define hash_packet_edit_game_100 hash_const
85735
85736#define cmp_packet_edit_game_100 cmp_const
85737
85739#endif /* FREECIV_DELTA_PROTOCOL */
85740
85742{
85743#ifdef FREECIV_DELTA_PROTOCOL
85745 struct packet_edit_game *old;
85746 struct genhash **hash = pc->phs.received + PACKET_EDIT_GAME;
85747#endif /* FREECIV_DELTA_PROTOCOL */
85749#ifdef FREECIV_JSON_CONNECTION
85750 struct plocation field_addr;
85751 {
85755 }
85756#endif /* FREECIV_JSON_CONNECTION */
85757
85758#ifdef FREECIV_DELTA_PROTOCOL
85759#ifdef FREECIV_JSON_CONNECTION
85760 field_addr.name = "fields";
85761#endif /* FREECIV_JSON_CONNECTION */
85762 DIO_BV_GET(&din, &field_addr, fields);
85763
85764#else /* FREECIV_DELTA_PROTOCOL */
85765#ifdef FREECIV_JSON_CONNECTION
85766 field_addr.name = "scenario";
85767#endif /* FREECIV_JSON_CONNECTION */
85768 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario)) {
85770 }
85771#ifdef FREECIV_JSON_CONNECTION
85772 field_addr.name = "scenario_name";
85773#endif /* FREECIV_JSON_CONNECTION */
85774 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
85775 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
85776 }
85777#ifdef FREECIV_JSON_CONNECTION
85778 field_addr.name = "scenario_authors";
85779#endif /* FREECIV_JSON_CONNECTION */
85780 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
85782 }
85783#ifdef FREECIV_JSON_CONNECTION
85784 field_addr.name = "scenario_random";
85785#endif /* FREECIV_JSON_CONNECTION */
85786 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_random)) {
85787 RECEIVE_PACKET_FIELD_ERROR(scenario_random);
85788 }
85789#ifdef FREECIV_JSON_CONNECTION
85790 field_addr.name = "scenario_players";
85791#endif /* FREECIV_JSON_CONNECTION */
85792 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_players)) {
85793 RECEIVE_PACKET_FIELD_ERROR(scenario_players);
85794 }
85795#ifdef FREECIV_JSON_CONNECTION
85796 field_addr.name = "startpos_nations";
85797#endif /* FREECIV_JSON_CONNECTION */
85798 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
85799 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
85800 }
85801#ifdef FREECIV_JSON_CONNECTION
85802 field_addr.name = "prevent_new_cities";
85803#endif /* FREECIV_JSON_CONNECTION */
85804 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
85805 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
85806 }
85807#ifdef FREECIV_JSON_CONNECTION
85808 field_addr.name = "lake_flooding";
85809#endif /* FREECIV_JSON_CONNECTION */
85810 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
85811 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
85812 }
85813#ifdef FREECIV_JSON_CONNECTION
85814 field_addr.name = "ruleset_locked";
85815#endif /* FREECIV_JSON_CONNECTION */
85816 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
85817 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
85818 }
85819#endif
85820 log_packet_detailed("packet_edit_game_100: got info about ()");
85821
85822#ifdef FREECIV_DELTA_PROTOCOL
85823 if (NULL == *hash) {
85825 NULL, NULL, NULL, free);
85826 }
85827
85828 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85829 *real_packet = *old;
85830 } else {
85831 log_packet_detailed(" no old info");
85832 memset(real_packet, 0, sizeof(*real_packet));
85833 }
85834
85835 real_packet->scenario = BV_ISSET(fields, 0);
85836 if (BV_ISSET(fields, 1)) {
85837 log_packet_detailed(" got field 'scenario_name'");
85838#ifdef FREECIV_JSON_CONNECTION
85839 field_addr.name = "scenario_name";
85840#endif /* FREECIV_JSON_CONNECTION */
85841 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
85842 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
85843 }
85844 }
85845 if (BV_ISSET(fields, 2)) {
85846 log_packet_detailed(" got field 'scenario_authors'");
85847#ifdef FREECIV_JSON_CONNECTION
85848 field_addr.name = "scenario_authors";
85849#endif /* FREECIV_JSON_CONNECTION */
85850 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
85852 }
85853 }
85854 real_packet->scenario_random = BV_ISSET(fields, 3);
85855 real_packet->scenario_players = BV_ISSET(fields, 4);
85856 real_packet->startpos_nations = BV_ISSET(fields, 5);
85857 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
85858 real_packet->lake_flooding = BV_ISSET(fields, 7);
85859 real_packet->ruleset_locked = BV_ISSET(fields, 8);
85860
85861 if (NULL == old) {
85862 old = fc_malloc(sizeof(*old));
85863 *old = *real_packet;
85864 genhash_insert(*hash, old, old);
85865 } else {
85866 *old = *real_packet;
85867 }
85868
85869#endif /* FREECIV_DELTA_PROTOCOL */
85871}
85872
85873static int send_packet_edit_game_100(struct connection *pc, const struct packet_edit_game *packet)
85874{
85875 const struct packet_edit_game *real_packet = packet;
85876 int e;
85877#ifdef FREECIV_DELTA_PROTOCOL
85879 struct packet_edit_game *old;
85880 bool differ;
85881 struct genhash **hash = pc->phs.sent + PACKET_EDIT_GAME;
85882#endif /* FREECIV_DELTA_PROTOCOL */
85884#ifdef FREECIV_JSON_CONNECTION
85885 struct plocation field_addr;
85886 {
85890 }
85891#endif /* FREECIV_JSON_CONNECTION */
85892
85893 log_packet_detailed("packet_edit_game_100: sending info about ()");
85894
85895#ifdef FREECIV_DELTA_PROTOCOL
85896 if (NULL == *hash) {
85898 NULL, NULL, NULL, free);
85899 }
85900 BV_CLR_ALL(fields);
85901
85902 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85903 old = fc_malloc(sizeof(*old));
85904 *old = *real_packet;
85905 genhash_insert(*hash, old, old);
85906 memset(old, 0, sizeof(*old));
85907 }
85908 if (packet->scenario) {
85909 BV_SET(fields, 0);
85910 }
85911
85912 differ = (strcmp(old->scenario_name, real_packet->scenario_name) != 0);
85913 if (differ) {
85914 BV_SET(fields, 1);
85915 }
85916
85917 differ = (strcmp(old->scenario_authors, real_packet->scenario_authors) != 0);
85918 if (differ) {
85919 BV_SET(fields, 2);
85920 }
85921
85922 if (packet->scenario_random) {
85923 BV_SET(fields, 3);
85924 }
85925
85926 if (packet->scenario_players) {
85927 BV_SET(fields, 4);
85928 }
85929
85930 if (packet->startpos_nations) {
85931 BV_SET(fields, 5);
85932 }
85933
85934 if (packet->prevent_new_cities) {
85935 BV_SET(fields, 6);
85936 }
85937
85938 if (packet->lake_flooding) {
85939 BV_SET(fields, 7);
85940 }
85941
85942 if (packet->ruleset_locked) {
85943 BV_SET(fields, 8);
85944 }
85945
85946
85947#ifdef FREECIV_JSON_CONNECTION
85948 field_addr.name = "fields";
85949#endif /* FREECIV_JSON_CONNECTION */
85950 e = 0;
85951 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85952 if (e) {
85953 log_packet_detailed("fields bitvector error detected");
85954 }
85955
85956 /* field 0 is folded into the header */
85957 if (BV_ISSET(fields, 1)) {
85958 log_packet_detailed(" field 'scenario_name' has changed");
85959#ifdef FREECIV_JSON_CONNECTION
85960 field_addr.name = "scenario_name";
85961#endif /* FREECIV_JSON_CONNECTION */
85962 e = 0;
85963 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
85964 if (e) {
85965 log_packet_detailed("'scenario_name' field error detected");
85966 }
85967 }
85968 if (BV_ISSET(fields, 2)) {
85969 log_packet_detailed(" field 'scenario_authors' has changed");
85970#ifdef FREECIV_JSON_CONNECTION
85971 field_addr.name = "scenario_authors";
85972#endif /* FREECIV_JSON_CONNECTION */
85973 e = 0;
85974 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
85975 if (e) {
85976 log_packet_detailed("'scenario_authors' field error detected");
85977 }
85978 }
85979 /* field 3 is folded into the header */
85980 /* field 4 is folded into the header */
85981 /* field 5 is folded into the header */
85982 /* field 6 is folded into the header */
85983 /* field 7 is folded into the header */
85984 /* field 8 is folded into the header */
85985
85986 *old = *real_packet;
85987#endif /* FREECIV_DELTA_PROTOCOL */
85988#ifndef FREECIV_DELTA_PROTOCOL
85989#ifdef FREECIV_JSON_CONNECTION
85990 field_addr.name = "scenario";
85991#endif /* FREECIV_JSON_CONNECTION */
85992 e = 0;
85993 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario);
85994 if (e) {
85995 log_packet_detailed("'scenario' field error detected");
85996 }
85997#ifdef FREECIV_JSON_CONNECTION
85998 field_addr.name = "scenario_name";
85999#endif /* FREECIV_JSON_CONNECTION */
86000 e = 0;
86001 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
86002 if (e) {
86003 log_packet_detailed("'scenario_name' field error detected");
86004 }
86005#ifdef FREECIV_JSON_CONNECTION
86006 field_addr.name = "scenario_authors";
86007#endif /* FREECIV_JSON_CONNECTION */
86008 e = 0;
86009 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
86010 if (e) {
86011 log_packet_detailed("'scenario_authors' field error detected");
86012 }
86013#ifdef FREECIV_JSON_CONNECTION
86014 field_addr.name = "scenario_random";
86015#endif /* FREECIV_JSON_CONNECTION */
86016 e = 0;
86017 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_random);
86018 if (e) {
86019 log_packet_detailed("'scenario_random' field error detected");
86020 }
86021#ifdef FREECIV_JSON_CONNECTION
86022 field_addr.name = "scenario_players";
86023#endif /* FREECIV_JSON_CONNECTION */
86024 e = 0;
86025 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_players);
86026 if (e) {
86027 log_packet_detailed("'scenario_players' field error detected");
86028 }
86029#ifdef FREECIV_JSON_CONNECTION
86030 field_addr.name = "startpos_nations";
86031#endif /* FREECIV_JSON_CONNECTION */
86032 e = 0;
86033 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
86034 if (e) {
86035 log_packet_detailed("'startpos_nations' field error detected");
86036 }
86037#ifdef FREECIV_JSON_CONNECTION
86038 field_addr.name = "prevent_new_cities";
86039#endif /* FREECIV_JSON_CONNECTION */
86040 e = 0;
86041 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
86042 if (e) {
86043 log_packet_detailed("'prevent_new_cities' field error detected");
86044 }
86045#ifdef FREECIV_JSON_CONNECTION
86046 field_addr.name = "lake_flooding";
86047#endif /* FREECIV_JSON_CONNECTION */
86048 e = 0;
86049 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
86050 if (e) {
86051 log_packet_detailed("'lake_flooding' field error detected");
86052 }
86053#ifdef FREECIV_JSON_CONNECTION
86054 field_addr.name = "ruleset_locked";
86055#endif /* FREECIV_JSON_CONNECTION */
86056 e = 0;
86057 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
86058 if (e) {
86059 log_packet_detailed("'ruleset_locked' field error detected");
86060 }
86061
86062#endif
86064}
86065
86066int send_packet_edit_game(struct connection *pc, const struct packet_edit_game *packet)
86067{
86068 if (!pc->used) {
86069 log_error("WARNING: trying to send data to the closed connection %s",
86071 return -1;
86072 }
86073 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_GAME].packet != NULL, -1,
86074 "Handler for PACKET_EDIT_GAME not installed");
86075 return pc->phs.handlers->send[PACKET_EDIT_GAME].packet(pc, packet);
86076}
86077
86078#ifdef FREECIV_DELTA_PROTOCOL
86079#define hash_packet_edit_scenario_desc_100 hash_const
86080
86081#define cmp_packet_edit_scenario_desc_100 cmp_const
86082
86084#endif /* FREECIV_DELTA_PROTOCOL */
86085
86087{
86088#ifdef FREECIV_DELTA_PROTOCOL
86090 struct packet_edit_scenario_desc *old;
86091 struct genhash **hash = pc->phs.received + PACKET_EDIT_SCENARIO_DESC;
86092#endif /* FREECIV_DELTA_PROTOCOL */
86094#ifdef FREECIV_JSON_CONNECTION
86095 struct plocation field_addr;
86096 {
86100 }
86101#endif /* FREECIV_JSON_CONNECTION */
86102
86103#ifdef FREECIV_DELTA_PROTOCOL
86104#ifdef FREECIV_JSON_CONNECTION
86105 field_addr.name = "fields";
86106#endif /* FREECIV_JSON_CONNECTION */
86107 DIO_BV_GET(&din, &field_addr, fields);
86108
86109#else /* FREECIV_DELTA_PROTOCOL */
86110#ifdef FREECIV_JSON_CONNECTION
86111 field_addr.name = "scenario_desc";
86112#endif /* FREECIV_JSON_CONNECTION */
86113 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
86114 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
86115 }
86116#endif
86117 log_packet_detailed("packet_edit_scenario_desc_100: got info about ()");
86118
86119#ifdef FREECIV_DELTA_PROTOCOL
86120 if (NULL == *hash) {
86122 NULL, NULL, NULL, free);
86123 }
86124
86125 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86126 *real_packet = *old;
86127 } else {
86128 log_packet_detailed(" no old info");
86129 memset(real_packet, 0, sizeof(*real_packet));
86130 }
86131
86132 if (BV_ISSET(fields, 0)) {
86133 log_packet_detailed(" got field 'scenario_desc'");
86134#ifdef FREECIV_JSON_CONNECTION
86135 field_addr.name = "scenario_desc";
86136#endif /* FREECIV_JSON_CONNECTION */
86137 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
86138 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
86139 }
86140 }
86141
86142 if (NULL == old) {
86143 old = fc_malloc(sizeof(*old));
86144 *old = *real_packet;
86145 genhash_insert(*hash, old, old);
86146 } else {
86147 *old = *real_packet;
86148 }
86149
86150#endif /* FREECIV_DELTA_PROTOCOL */
86152}
86153
86155{
86156 const struct packet_edit_scenario_desc *real_packet = packet;
86157 int e;
86158#ifdef FREECIV_DELTA_PROTOCOL
86160 struct packet_edit_scenario_desc *old;
86161 bool differ;
86162 struct genhash **hash = pc->phs.sent + PACKET_EDIT_SCENARIO_DESC;
86163#endif /* FREECIV_DELTA_PROTOCOL */
86165#ifdef FREECIV_JSON_CONNECTION
86166 struct plocation field_addr;
86167 {
86171 }
86172#endif /* FREECIV_JSON_CONNECTION */
86173
86174 log_packet_detailed("packet_edit_scenario_desc_100: sending info about ()");
86175
86176#ifdef FREECIV_DELTA_PROTOCOL
86177 if (NULL == *hash) {
86179 NULL, NULL, NULL, free);
86180 }
86181 BV_CLR_ALL(fields);
86182
86183 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86184 old = fc_malloc(sizeof(*old));
86185 *old = *real_packet;
86186 genhash_insert(*hash, old, old);
86187 memset(old, 0, sizeof(*old));
86188 }
86189 differ = (strcmp(old->scenario_desc, real_packet->scenario_desc) != 0);
86190 if (differ) {
86191 BV_SET(fields, 0);
86192 }
86193
86194
86195#ifdef FREECIV_JSON_CONNECTION
86196 field_addr.name = "fields";
86197#endif /* FREECIV_JSON_CONNECTION */
86198 e = 0;
86199 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86200 if (e) {
86201 log_packet_detailed("fields bitvector error detected");
86202 }
86203
86204 if (BV_ISSET(fields, 0)) {
86205 log_packet_detailed(" field 'scenario_desc' has changed");
86206#ifdef FREECIV_JSON_CONNECTION
86207 field_addr.name = "scenario_desc";
86208#endif /* FREECIV_JSON_CONNECTION */
86209 e = 0;
86210 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
86211 if (e) {
86212 log_packet_detailed("'scenario_desc' field error detected");
86213 }
86214 }
86215
86216 *old = *real_packet;
86217#endif /* FREECIV_DELTA_PROTOCOL */
86218#ifndef FREECIV_DELTA_PROTOCOL
86219#ifdef FREECIV_JSON_CONNECTION
86220 field_addr.name = "scenario_desc";
86221#endif /* FREECIV_JSON_CONNECTION */
86222 e = 0;
86223 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
86224 if (e) {
86225 log_packet_detailed("'scenario_desc' field error detected");
86226 }
86227
86228#endif
86230}
86231
86233{
86234 if (!pc->used) {
86235 log_error("WARNING: trying to send data to the closed connection %s",
86237 return -1;
86238 }
86239 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet != NULL, -1,
86240 "Handler for PACKET_EDIT_SCENARIO_DESC not installed");
86241 return pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet(pc, packet);
86242}
86243
86244#ifdef FREECIV_DELTA_PROTOCOL
86245#define hash_packet_edit_object_created_100 hash_const
86246
86247#define cmp_packet_edit_object_created_100 cmp_const
86248
86250#endif /* FREECIV_DELTA_PROTOCOL */
86251
86253{
86254#ifdef FREECIV_DELTA_PROTOCOL
86256 struct packet_edit_object_created *old;
86257 struct genhash **hash = pc->phs.received + PACKET_EDIT_OBJECT_CREATED;
86258#endif /* FREECIV_DELTA_PROTOCOL */
86260#ifdef FREECIV_JSON_CONNECTION
86261 struct plocation field_addr;
86262 {
86266 }
86267#endif /* FREECIV_JSON_CONNECTION */
86268
86269#ifdef FREECIV_DELTA_PROTOCOL
86270#ifdef FREECIV_JSON_CONNECTION
86271 field_addr.name = "fields";
86272#endif /* FREECIV_JSON_CONNECTION */
86273 DIO_BV_GET(&din, &field_addr, fields);
86274
86275#else /* FREECIV_DELTA_PROTOCOL */
86276#ifdef FREECIV_JSON_CONNECTION
86277 field_addr.name = "tag";
86278#endif /* FREECIV_JSON_CONNECTION */
86279 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
86281 }
86282#ifdef FREECIV_JSON_CONNECTION
86283 field_addr.name = "id";
86284#endif /* FREECIV_JSON_CONNECTION */
86285 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
86287 }
86288#endif
86289 log_packet_detailed("packet_edit_object_created_100: got info about ()");
86290
86291#ifdef FREECIV_DELTA_PROTOCOL
86292 if (NULL == *hash) {
86294 NULL, NULL, NULL, free);
86295 }
86296
86297 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86298 *real_packet = *old;
86299 } else {
86300 log_packet_detailed(" no old info");
86301 memset(real_packet, 0, sizeof(*real_packet));
86302 }
86303
86304 if (BV_ISSET(fields, 0)) {
86305 log_packet_detailed(" got field 'tag'");
86306#ifdef FREECIV_JSON_CONNECTION
86307 field_addr.name = "tag";
86308#endif /* FREECIV_JSON_CONNECTION */
86309 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
86311 }
86312 }
86313 if (BV_ISSET(fields, 1)) {
86314 log_packet_detailed(" got field 'id'");
86315#ifdef FREECIV_JSON_CONNECTION
86316 field_addr.name = "id";
86317#endif /* FREECIV_JSON_CONNECTION */
86318 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
86320 }
86321 }
86322
86323 if (NULL == old) {
86324 old = fc_malloc(sizeof(*old));
86325 *old = *real_packet;
86326 genhash_insert(*hash, old, old);
86327 } else {
86328 *old = *real_packet;
86329 }
86330
86331#endif /* FREECIV_DELTA_PROTOCOL */
86333}
86334
86336{
86337 const struct packet_edit_object_created *real_packet = packet;
86338 int e;
86339#ifdef FREECIV_DELTA_PROTOCOL
86341 struct packet_edit_object_created *old;
86342 bool differ;
86343 struct genhash **hash = pc->phs.sent + PACKET_EDIT_OBJECT_CREATED;
86344#endif /* FREECIV_DELTA_PROTOCOL */
86346#ifdef FREECIV_JSON_CONNECTION
86347 struct plocation field_addr;
86348 {
86352 }
86353#endif /* FREECIV_JSON_CONNECTION */
86354
86355 log_packet_detailed("packet_edit_object_created_100: sending info about ()");
86356
86357#ifdef FREECIV_DELTA_PROTOCOL
86358 if (NULL == *hash) {
86360 NULL, NULL, NULL, free);
86361 }
86362 BV_CLR_ALL(fields);
86363
86364 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86365 old = fc_malloc(sizeof(*old));
86366 *old = *real_packet;
86367 genhash_insert(*hash, old, old);
86368 memset(old, 0, sizeof(*old));
86369 }
86370 differ = (old->tag != real_packet->tag);
86371 if (differ) {
86372 BV_SET(fields, 0);
86373 }
86374
86375 differ = (old->id != real_packet->id);
86376 if (differ) {
86377 BV_SET(fields, 1);
86378 }
86379
86380
86381#ifdef FREECIV_JSON_CONNECTION
86382 field_addr.name = "fields";
86383#endif /* FREECIV_JSON_CONNECTION */
86384 e = 0;
86385 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86386 if (e) {
86387 log_packet_detailed("fields bitvector error detected");
86388 }
86389
86390 if (BV_ISSET(fields, 0)) {
86391 log_packet_detailed(" field 'tag' has changed");
86392#ifdef FREECIV_JSON_CONNECTION
86393 field_addr.name = "tag";
86394#endif /* FREECIV_JSON_CONNECTION */
86395 e = 0;
86396 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
86397 if (e) {
86398 log_packet_detailed("'tag' field error detected");
86399 }
86400 }
86401 if (BV_ISSET(fields, 1)) {
86402 log_packet_detailed(" field 'id' has changed");
86403#ifdef FREECIV_JSON_CONNECTION
86404 field_addr.name = "id";
86405#endif /* FREECIV_JSON_CONNECTION */
86406 e = 0;
86407 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
86408 if (e) {
86409 log_packet_detailed("'id' field error detected");
86410 }
86411 }
86412
86413 *old = *real_packet;
86414#endif /* FREECIV_DELTA_PROTOCOL */
86415#ifndef FREECIV_DELTA_PROTOCOL
86416#ifdef FREECIV_JSON_CONNECTION
86417 field_addr.name = "tag";
86418#endif /* FREECIV_JSON_CONNECTION */
86419 e = 0;
86420 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
86421 if (e) {
86422 log_packet_detailed("'tag' field error detected");
86423 }
86424#ifdef FREECIV_JSON_CONNECTION
86425 field_addr.name = "id";
86426#endif /* FREECIV_JSON_CONNECTION */
86427 e = 0;
86428 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
86429 if (e) {
86430 log_packet_detailed("'id' field error detected");
86431 }
86432
86433#endif
86435}
86436
86438{
86439 if (!pc->used) {
86440 log_error("WARNING: trying to send data to the closed connection %s",
86442 return -1;
86443 }
86444 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet != NULL, -1,
86445 "Handler for PACKET_EDIT_OBJECT_CREATED not installed");
86446 return pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet(pc, packet);
86447}
86448
86450{
86451 struct packet_edit_object_created packet, *real_packet = &packet;
86452
86453 real_packet->tag = tag;
86454 real_packet->id = id;
86455
86457}
86458
86459#ifdef FREECIV_DELTA_PROTOCOL
86460#define hash_packet_play_music_100 hash_const
86461
86462#define cmp_packet_play_music_100 cmp_const
86463
86465#endif /* FREECIV_DELTA_PROTOCOL */
86466
86468{
86469#ifdef FREECIV_DELTA_PROTOCOL
86471 struct packet_play_music *old;
86472 struct genhash **hash = pc->phs.received + PACKET_PLAY_MUSIC;
86473#endif /* FREECIV_DELTA_PROTOCOL */
86475#ifdef FREECIV_JSON_CONNECTION
86476 struct plocation field_addr;
86477 {
86481 }
86482#endif /* FREECIV_JSON_CONNECTION */
86483
86484#ifdef FREECIV_DELTA_PROTOCOL
86485#ifdef FREECIV_JSON_CONNECTION
86486 field_addr.name = "fields";
86487#endif /* FREECIV_JSON_CONNECTION */
86488 DIO_BV_GET(&din, &field_addr, fields);
86489
86490#else /* FREECIV_DELTA_PROTOCOL */
86491#ifdef FREECIV_JSON_CONNECTION
86492 field_addr.name = "tag";
86493#endif /* FREECIV_JSON_CONNECTION */
86494 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
86496 }
86497#endif
86498 log_packet_detailed("packet_play_music_100: got info about ()");
86499
86500#ifdef FREECIV_DELTA_PROTOCOL
86501 if (NULL == *hash) {
86503 NULL, NULL, NULL, free);
86504 }
86505
86506 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86507 *real_packet = *old;
86508 } else {
86509 log_packet_detailed(" no old info");
86510 memset(real_packet, 0, sizeof(*real_packet));
86511 }
86512
86513 if (BV_ISSET(fields, 0)) {
86514 log_packet_detailed(" got field 'tag'");
86515#ifdef FREECIV_JSON_CONNECTION
86516 field_addr.name = "tag";
86517#endif /* FREECIV_JSON_CONNECTION */
86518 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
86520 }
86521 }
86522
86523 if (NULL == old) {
86524 old = fc_malloc(sizeof(*old));
86525 *old = *real_packet;
86526 genhash_insert(*hash, old, old);
86527 } else {
86528 *old = *real_packet;
86529 }
86530
86531#endif /* FREECIV_DELTA_PROTOCOL */
86533}
86534
86535static int send_packet_play_music_100(struct connection *pc, const struct packet_play_music *packet)
86536{
86537 const struct packet_play_music *real_packet = packet;
86538 int e;
86539#ifdef FREECIV_DELTA_PROTOCOL
86541 struct packet_play_music *old;
86542 bool differ;
86543 struct genhash **hash = pc->phs.sent + PACKET_PLAY_MUSIC;
86544#endif /* FREECIV_DELTA_PROTOCOL */
86546#ifdef FREECIV_JSON_CONNECTION
86547 struct plocation field_addr;
86548 {
86552 }
86553#endif /* FREECIV_JSON_CONNECTION */
86554
86555 log_packet_detailed("packet_play_music_100: sending info about ()");
86556
86557#ifdef FREECIV_DELTA_PROTOCOL
86558 if (NULL == *hash) {
86560 NULL, NULL, NULL, free);
86561 }
86562 BV_CLR_ALL(fields);
86563
86564 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86565 old = fc_malloc(sizeof(*old));
86566 *old = *real_packet;
86567 genhash_insert(*hash, old, old);
86568 memset(old, 0, sizeof(*old));
86569 }
86570 differ = (strcmp(old->tag, real_packet->tag) != 0);
86571 if (differ) {
86572 BV_SET(fields, 0);
86573 }
86574
86575
86576#ifdef FREECIV_JSON_CONNECTION
86577 field_addr.name = "fields";
86578#endif /* FREECIV_JSON_CONNECTION */
86579 e = 0;
86580 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86581 if (e) {
86582 log_packet_detailed("fields bitvector error detected");
86583 }
86584
86585 if (BV_ISSET(fields, 0)) {
86586 log_packet_detailed(" field 'tag' has changed");
86587#ifdef FREECIV_JSON_CONNECTION
86588 field_addr.name = "tag";
86589#endif /* FREECIV_JSON_CONNECTION */
86590 e = 0;
86591 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
86592 if (e) {
86593 log_packet_detailed("'tag' field error detected");
86594 }
86595 }
86596
86597 *old = *real_packet;
86598#endif /* FREECIV_DELTA_PROTOCOL */
86599#ifndef FREECIV_DELTA_PROTOCOL
86600#ifdef FREECIV_JSON_CONNECTION
86601 field_addr.name = "tag";
86602#endif /* FREECIV_JSON_CONNECTION */
86603 e = 0;
86604 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
86605 if (e) {
86606 log_packet_detailed("'tag' field error detected");
86607 }
86608
86609#endif
86611}
86612
86613int send_packet_play_music(struct connection *pc, const struct packet_play_music *packet)
86614{
86615 if (!pc->used) {
86616 log_error("WARNING: trying to send data to the closed connection %s",
86618 return -1;
86619 }
86620 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet != NULL, -1,
86621 "Handler for PACKET_PLAY_MUSIC not installed");
86622 return pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet(pc, packet);
86623}
86624
86625void lsend_packet_play_music(struct conn_list *dest, const struct packet_play_music *packet)
86626{
86627 conn_list_iterate(dest, pconn) {
86630}
86631
86632#ifdef FREECIV_DELTA_PROTOCOL
86633#define hash_packet_popup_image_100 hash_const
86634
86635#define cmp_packet_popup_image_100 cmp_const
86636
86638#endif /* FREECIV_DELTA_PROTOCOL */
86639
86641{
86642#ifdef FREECIV_DELTA_PROTOCOL
86644 struct packet_popup_image *old;
86645 struct genhash **hash = pc->phs.received + PACKET_POPUP_IMAGE;
86646#endif /* FREECIV_DELTA_PROTOCOL */
86648#ifdef FREECIV_JSON_CONNECTION
86649 struct plocation field_addr;
86650 {
86654 }
86655#endif /* FREECIV_JSON_CONNECTION */
86656
86657#ifdef FREECIV_DELTA_PROTOCOL
86658#ifdef FREECIV_JSON_CONNECTION
86659 field_addr.name = "fields";
86660#endif /* FREECIV_JSON_CONNECTION */
86661 DIO_BV_GET(&din, &field_addr, fields);
86662
86663#else /* FREECIV_DELTA_PROTOCOL */
86664#ifdef FREECIV_JSON_CONNECTION
86665 field_addr.name = "tag";
86666#endif /* FREECIV_JSON_CONNECTION */
86667 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
86669 }
86670#endif
86671 log_packet_detailed("packet_popup_image_100: got info about ()");
86672
86673#ifdef FREECIV_DELTA_PROTOCOL
86674 if (NULL == *hash) {
86676 NULL, NULL, NULL, free);
86677 }
86678
86679 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86680 *real_packet = *old;
86681 } else {
86682 log_packet_detailed(" no old info");
86683 memset(real_packet, 0, sizeof(*real_packet));
86684 }
86685
86686 if (BV_ISSET(fields, 0)) {
86687 log_packet_detailed(" got field 'tag'");
86688#ifdef FREECIV_JSON_CONNECTION
86689 field_addr.name = "tag";
86690#endif /* FREECIV_JSON_CONNECTION */
86691 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
86693 }
86694 }
86695
86696 if (NULL == old) {
86697 old = fc_malloc(sizeof(*old));
86698 *old = *real_packet;
86699 genhash_insert(*hash, old, old);
86700 } else {
86701 *old = *real_packet;
86702 }
86703
86704#endif /* FREECIV_DELTA_PROTOCOL */
86706}
86707
86708static int send_packet_popup_image_100(struct connection *pc, const struct packet_popup_image *packet)
86709{
86710 const struct packet_popup_image *real_packet = packet;
86711 int e;
86712#ifdef FREECIV_DELTA_PROTOCOL
86714 struct packet_popup_image *old;
86715 bool differ;
86716 struct genhash **hash = pc->phs.sent + PACKET_POPUP_IMAGE;
86717#endif /* FREECIV_DELTA_PROTOCOL */
86719#ifdef FREECIV_JSON_CONNECTION
86720 struct plocation field_addr;
86721 {
86725 }
86726#endif /* FREECIV_JSON_CONNECTION */
86727
86728 log_packet_detailed("packet_popup_image_100: sending info about ()");
86729
86730#ifdef FREECIV_DELTA_PROTOCOL
86731 if (NULL == *hash) {
86733 NULL, NULL, NULL, free);
86734 }
86735 BV_CLR_ALL(fields);
86736
86737 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86738 old = fc_malloc(sizeof(*old));
86739 *old = *real_packet;
86740 genhash_insert(*hash, old, old);
86741 memset(old, 0, sizeof(*old));
86742 }
86743 differ = (strcmp(old->tag, real_packet->tag) != 0);
86744 if (differ) {
86745 BV_SET(fields, 0);
86746 }
86747
86748
86749#ifdef FREECIV_JSON_CONNECTION
86750 field_addr.name = "fields";
86751#endif /* FREECIV_JSON_CONNECTION */
86752 e = 0;
86753 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86754 if (e) {
86755 log_packet_detailed("fields bitvector error detected");
86756 }
86757
86758 if (BV_ISSET(fields, 0)) {
86759 log_packet_detailed(" field 'tag' has changed");
86760#ifdef FREECIV_JSON_CONNECTION
86761 field_addr.name = "tag";
86762#endif /* FREECIV_JSON_CONNECTION */
86763 e = 0;
86764 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
86765 if (e) {
86766 log_packet_detailed("'tag' field error detected");
86767 }
86768 }
86769
86770 *old = *real_packet;
86771#endif /* FREECIV_DELTA_PROTOCOL */
86772#ifndef FREECIV_DELTA_PROTOCOL
86773#ifdef FREECIV_JSON_CONNECTION
86774 field_addr.name = "tag";
86775#endif /* FREECIV_JSON_CONNECTION */
86776 e = 0;
86777 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
86778 if (e) {
86779 log_packet_detailed("'tag' field error detected");
86780 }
86781
86782#endif
86784}
86785
86787{
86788 if (!pc->used) {
86789 log_error("WARNING: trying to send data to the closed connection %s",
86791 return -1;
86792 }
86793 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet != NULL, -1,
86794 "Handler for PACKET_POPUP_IMAGE not installed");
86795 return pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet(pc, packet);
86796}
86797
86798void lsend_packet_popup_image(struct conn_list *dest, const struct packet_popup_image *packet)
86799{
86800 conn_list_iterate(dest, pconn) {
86803}
86804
86805#ifdef FREECIV_DELTA_PROTOCOL
86806#define hash_packet_sync_serial_100 hash_const
86807
86808#define cmp_packet_sync_serial_100 cmp_const
86809
86811#endif /* FREECIV_DELTA_PROTOCOL */
86812
86814{
86815#ifdef FREECIV_DELTA_PROTOCOL
86817 struct packet_sync_serial *old;
86818 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL;
86819#endif /* FREECIV_DELTA_PROTOCOL */
86821#ifdef FREECIV_JSON_CONNECTION
86822 struct plocation field_addr;
86823 {
86827 }
86828#endif /* FREECIV_JSON_CONNECTION */
86829
86830#ifdef FREECIV_DELTA_PROTOCOL
86831#ifdef FREECIV_JSON_CONNECTION
86832 field_addr.name = "fields";
86833#endif /* FREECIV_JSON_CONNECTION */
86834 DIO_BV_GET(&din, &field_addr, fields);
86835
86836#else /* FREECIV_DELTA_PROTOCOL */
86837#ifdef FREECIV_JSON_CONNECTION
86838 field_addr.name = "serial";
86839#endif /* FREECIV_JSON_CONNECTION */
86840 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
86842 }
86843#endif
86844 log_packet_detailed("packet_sync_serial_100: got info about ()");
86845
86846#ifdef FREECIV_DELTA_PROTOCOL
86847 if (NULL == *hash) {
86849 NULL, NULL, NULL, free);
86850 }
86851
86852 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
86853 *real_packet = *old;
86854 } else {
86855 log_packet_detailed(" no old info");
86856 memset(real_packet, 0, sizeof(*real_packet));
86857 }
86858
86859 if (BV_ISSET(fields, 0)) {
86860 log_packet_detailed(" got field 'serial'");
86861#ifdef FREECIV_JSON_CONNECTION
86862 field_addr.name = "serial";
86863#endif /* FREECIV_JSON_CONNECTION */
86864 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
86866 }
86867 }
86868
86869 if (NULL == old) {
86870 old = fc_malloc(sizeof(*old));
86871 *old = *real_packet;
86872 genhash_insert(*hash, old, old);
86873 } else {
86874 *old = *real_packet;
86875 }
86876
86877#endif /* FREECIV_DELTA_PROTOCOL */
86879}
86880
86881static int send_packet_sync_serial_100(struct connection *pc, const struct packet_sync_serial *packet)
86882{
86883 const struct packet_sync_serial *real_packet = packet;
86884 int e;
86885#ifdef FREECIV_DELTA_PROTOCOL
86887 struct packet_sync_serial *old;
86888 bool differ;
86889 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL;
86890#endif /* FREECIV_DELTA_PROTOCOL */
86892#ifdef FREECIV_JSON_CONNECTION
86893 struct plocation field_addr;
86894 {
86898 }
86899#endif /* FREECIV_JSON_CONNECTION */
86900
86901 log_packet_detailed("packet_sync_serial_100: sending info about ()");
86902
86903#ifdef FREECIV_DELTA_PROTOCOL
86904 if (NULL == *hash) {
86906 NULL, NULL, NULL, free);
86907 }
86908 BV_CLR_ALL(fields);
86909
86910 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86911 old = fc_malloc(sizeof(*old));
86912 *old = *real_packet;
86913 genhash_insert(*hash, old, old);
86914 memset(old, 0, sizeof(*old));
86915 }
86916 differ = (old->serial != real_packet->serial);
86917 if (differ) {
86918 BV_SET(fields, 0);
86919 }
86920
86921
86922#ifdef FREECIV_JSON_CONNECTION
86923 field_addr.name = "fields";
86924#endif /* FREECIV_JSON_CONNECTION */
86925 e = 0;
86926 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86927 if (e) {
86928 log_packet_detailed("fields bitvector error detected");
86929 }
86930
86931 if (BV_ISSET(fields, 0)) {
86932 log_packet_detailed(" field 'serial' has changed");
86933#ifdef FREECIV_JSON_CONNECTION
86934 field_addr.name = "serial";
86935#endif /* FREECIV_JSON_CONNECTION */
86936 e = 0;
86937 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
86938 if (e) {
86939 log_packet_detailed("'serial' field error detected");
86940 }
86941 }
86942
86943 *old = *real_packet;
86944#endif /* FREECIV_DELTA_PROTOCOL */
86945#ifndef FREECIV_DELTA_PROTOCOL
86946#ifdef FREECIV_JSON_CONNECTION
86947 field_addr.name = "serial";
86948#endif /* FREECIV_JSON_CONNECTION */
86949 e = 0;
86950 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
86951 if (e) {
86952 log_packet_detailed("'serial' field error detected");
86953 }
86954
86955#endif
86957}
86958
86960{
86961 if (!pc->used) {
86962 log_error("WARNING: trying to send data to the closed connection %s",
86964 return -1;
86965 }
86966 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet != NULL, -1,
86967 "Handler for PACKET_SYNC_SERIAL not installed");
86968 return pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet(pc, packet);
86969}
86970
86972{
86973 struct packet_sync_serial packet, *real_packet = &packet;
86974
86976
86978}
86979
86980#ifdef FREECIV_DELTA_PROTOCOL
86981#define hash_packet_sync_serial_reply_100 hash_const
86982
86983#define cmp_packet_sync_serial_reply_100 cmp_const
86984
86986#endif /* FREECIV_DELTA_PROTOCOL */
86987
86989{
86990#ifdef FREECIV_DELTA_PROTOCOL
86992 struct packet_sync_serial_reply *old;
86993 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL_REPLY;
86994#endif /* FREECIV_DELTA_PROTOCOL */
86996#ifdef FREECIV_JSON_CONNECTION
86997 struct plocation field_addr;
86998 {
87002 }
87003#endif /* FREECIV_JSON_CONNECTION */
87004
87005#ifdef FREECIV_DELTA_PROTOCOL
87006#ifdef FREECIV_JSON_CONNECTION
87007 field_addr.name = "fields";
87008#endif /* FREECIV_JSON_CONNECTION */
87009 DIO_BV_GET(&din, &field_addr, fields);
87010
87011#else /* FREECIV_DELTA_PROTOCOL */
87012#ifdef FREECIV_JSON_CONNECTION
87013 field_addr.name = "serial";
87014#endif /* FREECIV_JSON_CONNECTION */
87015 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
87017 }
87018#endif
87019 log_packet_detailed("packet_sync_serial_reply_100: got info about ()");
87020
87021#ifdef FREECIV_DELTA_PROTOCOL
87022 if (NULL == *hash) {
87024 NULL, NULL, NULL, free);
87025 }
87026
87027 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87028 *real_packet = *old;
87029 } else {
87030 log_packet_detailed(" no old info");
87031 memset(real_packet, 0, sizeof(*real_packet));
87032 }
87033
87034 if (BV_ISSET(fields, 0)) {
87035 log_packet_detailed(" got field 'serial'");
87036#ifdef FREECIV_JSON_CONNECTION
87037 field_addr.name = "serial";
87038#endif /* FREECIV_JSON_CONNECTION */
87039 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
87041 }
87042 }
87043
87044 if (NULL == old) {
87045 old = fc_malloc(sizeof(*old));
87046 *old = *real_packet;
87047 genhash_insert(*hash, old, old);
87048 } else {
87049 *old = *real_packet;
87050 }
87051
87052#endif /* FREECIV_DELTA_PROTOCOL */
87054}
87055
87057{
87058 const struct packet_sync_serial_reply *real_packet = packet;
87059 int e;
87060#ifdef FREECIV_DELTA_PROTOCOL
87062 struct packet_sync_serial_reply *old;
87063 bool differ;
87064 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL_REPLY;
87065#endif /* FREECIV_DELTA_PROTOCOL */
87067#ifdef FREECIV_JSON_CONNECTION
87068 struct plocation field_addr;
87069 {
87073 }
87074#endif /* FREECIV_JSON_CONNECTION */
87075
87076 log_packet_detailed("packet_sync_serial_reply_100: sending info about ()");
87077
87078#ifdef FREECIV_DELTA_PROTOCOL
87079 if (NULL == *hash) {
87081 NULL, NULL, NULL, free);
87082 }
87083 BV_CLR_ALL(fields);
87084
87085 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
87086 old = fc_malloc(sizeof(*old));
87087 *old = *real_packet;
87088 genhash_insert(*hash, old, old);
87089 memset(old, 0, sizeof(*old));
87090 }
87091 differ = (old->serial != real_packet->serial);
87092 if (differ) {
87093 BV_SET(fields, 0);
87094 }
87095
87096
87097#ifdef FREECIV_JSON_CONNECTION
87098 field_addr.name = "fields";
87099#endif /* FREECIV_JSON_CONNECTION */
87100 e = 0;
87101 e |= DIO_BV_PUT(&dout, &field_addr, fields);
87102 if (e) {
87103 log_packet_detailed("fields bitvector error detected");
87104 }
87105
87106 if (BV_ISSET(fields, 0)) {
87107 log_packet_detailed(" field 'serial' has changed");
87108#ifdef FREECIV_JSON_CONNECTION
87109 field_addr.name = "serial";
87110#endif /* FREECIV_JSON_CONNECTION */
87111 e = 0;
87112 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
87113 if (e) {
87114 log_packet_detailed("'serial' field error detected");
87115 }
87116 }
87117
87118 *old = *real_packet;
87119#endif /* FREECIV_DELTA_PROTOCOL */
87120#ifndef FREECIV_DELTA_PROTOCOL
87121#ifdef FREECIV_JSON_CONNECTION
87122 field_addr.name = "serial";
87123#endif /* FREECIV_JSON_CONNECTION */
87124 e = 0;
87125 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
87126 if (e) {
87127 log_packet_detailed("'serial' field error detected");
87128 }
87129
87130#endif
87132}
87133
87135{
87136 if (!pc->used) {
87137 log_error("WARNING: trying to send data to the closed connection %s",
87139 return -1;
87140 }
87141 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet != NULL, -1,
87142 "Handler for PACKET_SYNC_SERIAL_REPLY not installed");
87143 return pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet(pc, packet);
87144}
87145
87147{
87148 struct packet_sync_serial_reply packet, *real_packet = &packet;
87149
87151
87153}
87154
87155#ifdef FREECIV_DELTA_PROTOCOL
87157{
87158 const struct packet_web_city_info_addition *key = (const struct packet_web_city_info_addition *) vkey;
87159 genhash_val_t result = 0;
87160
87161 result += key->id;
87162
87163 result &= 0xFFFFFFFF;
87164 return result;
87165}
87166
87167static bool cmp_packet_web_city_info_addition_100(const void *vkey1, const void *vkey2)
87168{
87169 const struct packet_web_city_info_addition *old = (const struct packet_web_city_info_addition *) vkey1;
87171 bool differ;
87172
87173 differ = (old->id != real_packet->id);
87174
87175 return !differ;
87176}
87178#endif /* FREECIV_DELTA_PROTOCOL */
87179
87181{
87182#ifdef FREECIV_DELTA_PROTOCOL
87185 struct genhash **hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
87186#endif /* FREECIV_DELTA_PROTOCOL */
87188#ifdef FREECIV_JSON_CONNECTION
87189 struct plocation field_addr;
87190 {
87194 }
87195#endif /* FREECIV_JSON_CONNECTION */
87196
87197#ifdef FREECIV_DELTA_PROTOCOL
87198#ifdef FREECIV_JSON_CONNECTION
87199 field_addr.name = "fields";
87200#endif /* FREECIV_JSON_CONNECTION */
87201 DIO_BV_GET(&din, &field_addr, fields);
87202#ifdef FREECIV_JSON_CONNECTION
87203 field_addr.name = "id";
87204#endif /* FREECIV_JSON_CONNECTION */
87205 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
87207 }
87208
87209#else /* FREECIV_DELTA_PROTOCOL */
87210#ifdef FREECIV_JSON_CONNECTION
87211 field_addr.name = "id";
87212#endif /* FREECIV_JSON_CONNECTION */
87213 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
87215 }
87216#ifdef FREECIV_JSON_CONNECTION
87217 field_addr.name = "cma_enabled";
87218#endif /* FREECIV_JSON_CONNECTION */
87219 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->cma_enabled)) {
87220 RECEIVE_PACKET_FIELD_ERROR(cma_enabled);
87221 }
87222#ifdef FREECIV_JSON_CONNECTION
87223 field_addr.name = "cm_parameter";
87224#endif /* FREECIV_JSON_CONNECTION */
87225 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
87227 }
87228#ifdef FREECIV_JSON_CONNECTION
87229 field_addr.name = "granary_size";
87230#endif /* FREECIV_JSON_CONNECTION */
87231 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
87232 RECEIVE_PACKET_FIELD_ERROR(granary_size);
87233 }
87234#ifdef FREECIV_JSON_CONNECTION
87235 field_addr.name = "granary_turns";
87236#endif /* FREECIV_JSON_CONNECTION */
87237 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
87238 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
87239 }
87240#ifdef FREECIV_JSON_CONNECTION
87241 field_addr.name = "can_build_unit";
87242#endif /* FREECIV_JSON_CONNECTION */
87243 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
87244 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
87245 }
87246#ifdef FREECIV_JSON_CONNECTION
87247 field_addr.name = "can_build_improvement";
87248#endif /* FREECIV_JSON_CONNECTION */
87249 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
87250 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
87251 }
87252#ifdef FREECIV_JSON_CONNECTION
87253 field_addr.name = "output_food";
87254#endif /* FREECIV_JSON_CONNECTION */
87255 {
87256 int i;
87257
87258#ifdef FREECIV_JSON_CONNECTION
87259 /* Enter array. */
87260 field_addr.sub_location = plocation_elem_new(0);
87261#endif /* FREECIV_JSON_CONNECTION */
87262
87263 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87264#ifdef FREECIV_JSON_CONNECTION
87265 field_addr.sub_location->number = i;
87266#endif /* FREECIV_JSON_CONNECTION */
87267
87268 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
87269 RECEIVE_PACKET_FIELD_ERROR(output_food);
87270 }
87271 }
87272
87273#ifdef FREECIV_JSON_CONNECTION
87274 /* Exit array. */
87275 FC_FREE(field_addr.sub_location);
87276#endif /* FREECIV_JSON_CONNECTION */
87277 }
87278#ifdef FREECIV_JSON_CONNECTION
87279 field_addr.name = "output_shield";
87280#endif /* FREECIV_JSON_CONNECTION */
87281 {
87282 int i;
87283
87284#ifdef FREECIV_JSON_CONNECTION
87285 /* Enter array. */
87286 field_addr.sub_location = plocation_elem_new(0);
87287#endif /* FREECIV_JSON_CONNECTION */
87288
87289 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87290#ifdef FREECIV_JSON_CONNECTION
87291 field_addr.sub_location->number = i;
87292#endif /* FREECIV_JSON_CONNECTION */
87293
87294 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
87295 RECEIVE_PACKET_FIELD_ERROR(output_shield);
87296 }
87297 }
87298
87299#ifdef FREECIV_JSON_CONNECTION
87300 /* Exit array. */
87301 FC_FREE(field_addr.sub_location);
87302#endif /* FREECIV_JSON_CONNECTION */
87303 }
87304#ifdef FREECIV_JSON_CONNECTION
87305 field_addr.name = "output_trade";
87306#endif /* FREECIV_JSON_CONNECTION */
87307 {
87308 int i;
87309
87310#ifdef FREECIV_JSON_CONNECTION
87311 /* Enter array. */
87312 field_addr.sub_location = plocation_elem_new(0);
87313#endif /* FREECIV_JSON_CONNECTION */
87314
87315 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87316#ifdef FREECIV_JSON_CONNECTION
87317 field_addr.sub_location->number = i;
87318#endif /* FREECIV_JSON_CONNECTION */
87319
87320 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
87321 RECEIVE_PACKET_FIELD_ERROR(output_trade);
87322 }
87323 }
87324
87325#ifdef FREECIV_JSON_CONNECTION
87326 /* Exit array. */
87327 FC_FREE(field_addr.sub_location);
87328#endif /* FREECIV_JSON_CONNECTION */
87329 }
87330#endif
87331 log_packet_detailed("packet_web_city_info_addition_100: got info about (%d)",
87332 real_packet->id);
87333
87334#ifdef FREECIV_DELTA_PROTOCOL
87335 if (NULL == *hash) {
87337 NULL, NULL, NULL, free);
87338 }
87339
87340 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87341 *real_packet = *old;
87342 } else {
87343 int id;
87344
87345 id = real_packet->id;
87346
87347 log_packet_detailed(" no old info");
87348 memset(real_packet, 0, sizeof(*real_packet));
87349
87350 real_packet->id = id;
87351 }
87352
87353 real_packet->cma_enabled = BV_ISSET(fields, 0);
87354 if (BV_ISSET(fields, 1)) {
87355 log_packet_detailed(" got field 'cm_parameter'");
87356#ifdef FREECIV_JSON_CONNECTION
87357 field_addr.name = "cm_parameter";
87358#endif /* FREECIV_JSON_CONNECTION */
87359 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
87361 }
87362 }
87363 if (BV_ISSET(fields, 2)) {
87364 log_packet_detailed(" got field 'granary_size'");
87365#ifdef FREECIV_JSON_CONNECTION
87366 field_addr.name = "granary_size";
87367#endif /* FREECIV_JSON_CONNECTION */
87368 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
87369 RECEIVE_PACKET_FIELD_ERROR(granary_size);
87370 }
87371 }
87372 if (BV_ISSET(fields, 3)) {
87373 log_packet_detailed(" got field 'granary_turns'");
87374#ifdef FREECIV_JSON_CONNECTION
87375 field_addr.name = "granary_turns";
87376#endif /* FREECIV_JSON_CONNECTION */
87377 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
87378 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
87379 }
87380 }
87381 if (BV_ISSET(fields, 4)) {
87382 log_packet_detailed(" got field 'can_build_unit'");
87383#ifdef FREECIV_JSON_CONNECTION
87384 field_addr.name = "can_build_unit";
87385#endif /* FREECIV_JSON_CONNECTION */
87386 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
87387 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
87388 }
87389 }
87390 if (BV_ISSET(fields, 5)) {
87391 log_packet_detailed(" got field 'can_build_improvement'");
87392#ifdef FREECIV_JSON_CONNECTION
87393 field_addr.name = "can_build_improvement";
87394#endif /* FREECIV_JSON_CONNECTION */
87395 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
87396 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
87397 }
87398 }
87399 if (BV_ISSET(fields, 6)) {
87400 log_packet_detailed(" got field 'output_food'");
87401#ifdef FREECIV_JSON_CONNECTION
87402 field_addr.name = "output_food";
87403#endif /* FREECIV_JSON_CONNECTION */
87404 {
87405 int i;
87406
87407#ifdef FREECIV_JSON_CONNECTION
87408 /* Enter array. */
87409 field_addr.sub_location = plocation_elem_new(0);
87410#endif /* FREECIV_JSON_CONNECTION */
87411
87412 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87413#ifdef FREECIV_JSON_CONNECTION
87414 field_addr.sub_location->number = i;
87415#endif /* FREECIV_JSON_CONNECTION */
87416
87417 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
87418 RECEIVE_PACKET_FIELD_ERROR(output_food);
87419 }
87420 }
87421
87422#ifdef FREECIV_JSON_CONNECTION
87423 /* Exit array. */
87424 FC_FREE(field_addr.sub_location);
87425#endif /* FREECIV_JSON_CONNECTION */
87426 }
87427 }
87428 if (BV_ISSET(fields, 7)) {
87429 log_packet_detailed(" got field 'output_shield'");
87430#ifdef FREECIV_JSON_CONNECTION
87431 field_addr.name = "output_shield";
87432#endif /* FREECIV_JSON_CONNECTION */
87433 {
87434 int i;
87435
87436#ifdef FREECIV_JSON_CONNECTION
87437 /* Enter array. */
87438 field_addr.sub_location = plocation_elem_new(0);
87439#endif /* FREECIV_JSON_CONNECTION */
87440
87441 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87442#ifdef FREECIV_JSON_CONNECTION
87443 field_addr.sub_location->number = i;
87444#endif /* FREECIV_JSON_CONNECTION */
87445
87446 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
87447 RECEIVE_PACKET_FIELD_ERROR(output_shield);
87448 }
87449 }
87450
87451#ifdef FREECIV_JSON_CONNECTION
87452 /* Exit array. */
87453 FC_FREE(field_addr.sub_location);
87454#endif /* FREECIV_JSON_CONNECTION */
87455 }
87456 }
87457 if (BV_ISSET(fields, 8)) {
87458 log_packet_detailed(" got field 'output_trade'");
87459#ifdef FREECIV_JSON_CONNECTION
87460 field_addr.name = "output_trade";
87461#endif /* FREECIV_JSON_CONNECTION */
87462 {
87463 int i;
87464
87465#ifdef FREECIV_JSON_CONNECTION
87466 /* Enter array. */
87467 field_addr.sub_location = plocation_elem_new(0);
87468#endif /* FREECIV_JSON_CONNECTION */
87469
87470 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87471#ifdef FREECIV_JSON_CONNECTION
87472 field_addr.sub_location->number = i;
87473#endif /* FREECIV_JSON_CONNECTION */
87474
87475 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
87476 RECEIVE_PACKET_FIELD_ERROR(output_trade);
87477 }
87478 }
87479
87480#ifdef FREECIV_JSON_CONNECTION
87481 /* Exit array. */
87482 FC_FREE(field_addr.sub_location);
87483#endif /* FREECIV_JSON_CONNECTION */
87484 }
87485 }
87486
87487 if (NULL == old) {
87488 old = fc_malloc(sizeof(*old));
87489 *old = *real_packet;
87490 genhash_insert(*hash, old, old);
87491 } else {
87492 *old = *real_packet;
87493 }
87494
87495 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
87496 if (NULL != *hash) {
87498 }
87499
87500#endif /* FREECIV_DELTA_PROTOCOL */
87502}
87503
87504static int send_packet_web_city_info_addition_100(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
87505{
87506 const struct packet_web_city_info_addition *real_packet = packet;
87507 int e;
87508#ifdef FREECIV_DELTA_PROTOCOL
87511 bool differ;
87512 struct genhash **hash = pc->phs.sent + PACKET_WEB_CITY_INFO_ADDITION;
87513 int different = force_to_send;
87514#endif /* FREECIV_DELTA_PROTOCOL */
87516#ifdef FREECIV_JSON_CONNECTION
87517 struct plocation field_addr;
87518 {
87522 }
87523#endif /* FREECIV_JSON_CONNECTION */
87524
87525 log_packet_detailed("packet_web_city_info_addition_100: sending info about (%d)",
87526 real_packet->id);
87527
87528#ifdef FREECIV_DELTA_PROTOCOL
87529 if (NULL == *hash) {
87531 NULL, NULL, NULL, free);
87532 }
87533 BV_CLR_ALL(fields);
87534
87535 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
87536 old = fc_malloc(sizeof(*old));
87537 *old = *real_packet;
87538 genhash_insert(*hash, old, old);
87539 memset(old, 0, sizeof(*old));
87540 different = 1; /* Force to send. */
87541 }
87542 differ = (old->cma_enabled != real_packet->cma_enabled);
87543 if (differ) {
87544 different++;
87545 }
87546 if (packet->cma_enabled) {
87547 BV_SET(fields, 0);
87548 }
87549
87550 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
87551 if (differ) {
87552 different++;
87553 BV_SET(fields, 1);
87554 }
87555
87556 differ = (old->granary_size != real_packet->granary_size);
87557 if (differ) {
87558 different++;
87559 BV_SET(fields, 2);
87560 }
87561
87562 differ = (old->granary_turns != real_packet->granary_turns);
87563 if (differ) {
87564 different++;
87565 BV_SET(fields, 3);
87566 }
87567
87568 differ = !BV_ARE_EQUAL(old->can_build_unit, real_packet->can_build_unit);
87569 if (differ) {
87570 different++;
87571 BV_SET(fields, 4);
87572 }
87573
87574 differ = !BV_ARE_EQUAL(old->can_build_improvement, real_packet->can_build_improvement);
87575 if (differ) {
87576 different++;
87577 BV_SET(fields, 5);
87578 }
87579
87580 differ = FALSE;
87581 {
87582 int i;
87583
87584 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87585 differ = (old->output_food[i] != real_packet->output_food[i]);
87586 if (differ) {
87587 break;
87588 }
87589 }
87590 }
87591 if (differ) {
87592 different++;
87593 BV_SET(fields, 6);
87594 }
87595
87596 differ = FALSE;
87597 {
87598 int i;
87599
87600 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87601 differ = (old->output_shield[i] != real_packet->output_shield[i]);
87602 if (differ) {
87603 break;
87604 }
87605 }
87606 }
87607 if (differ) {
87608 different++;
87609 BV_SET(fields, 7);
87610 }
87611
87612 differ = FALSE;
87613 {
87614 int i;
87615
87616 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87617 differ = (old->output_trade[i] != real_packet->output_trade[i]);
87618 if (differ) {
87619 break;
87620 }
87621 }
87622 }
87623 if (differ) {
87624 different++;
87625 BV_SET(fields, 8);
87626 }
87627
87628 if (different == 0) {
87629 log_packet_detailed(" no change -> discard");
87631 }
87632
87633#ifdef FREECIV_JSON_CONNECTION
87634 field_addr.name = "fields";
87635#endif /* FREECIV_JSON_CONNECTION */
87636 e = 0;
87637 e |= DIO_BV_PUT(&dout, &field_addr, fields);
87638 if (e) {
87639 log_packet_detailed("fields bitvector error detected");
87640 }
87641#ifdef FREECIV_JSON_CONNECTION
87642 field_addr.name = "id";
87643#endif /* FREECIV_JSON_CONNECTION */
87644 e = 0;
87645 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
87646 if (e) {
87647 log_packet_detailed("'id' field error detected");
87648 }
87649
87650 /* field 0 is folded into the header */
87651 if (BV_ISSET(fields, 1)) {
87652 log_packet_detailed(" field 'cm_parameter' has changed");
87653#ifdef FREECIV_JSON_CONNECTION
87654 field_addr.name = "cm_parameter";
87655#endif /* FREECIV_JSON_CONNECTION */
87656 e = 0;
87657 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
87658 if (e) {
87659 log_packet_detailed("'cm_parameter' field error detected");
87660 }
87661 }
87662 if (BV_ISSET(fields, 2)) {
87663 log_packet_detailed(" field 'granary_size' has changed");
87664#ifdef FREECIV_JSON_CONNECTION
87665 field_addr.name = "granary_size";
87666#endif /* FREECIV_JSON_CONNECTION */
87667 e = 0;
87668 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
87669 if (e) {
87670 log_packet_detailed("'granary_size' field error detected");
87671 }
87672 }
87673 if (BV_ISSET(fields, 3)) {
87674 log_packet_detailed(" field 'granary_turns' has changed");
87675#ifdef FREECIV_JSON_CONNECTION
87676 field_addr.name = "granary_turns";
87677#endif /* FREECIV_JSON_CONNECTION */
87678 e = 0;
87679 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
87680 if (e) {
87681 log_packet_detailed("'granary_turns' field error detected");
87682 }
87683 }
87684 if (BV_ISSET(fields, 4)) {
87685 log_packet_detailed(" field 'can_build_unit' has changed");
87686#ifdef FREECIV_JSON_CONNECTION
87687 field_addr.name = "can_build_unit";
87688#endif /* FREECIV_JSON_CONNECTION */
87689 e = 0;
87690 e |= DIO_BV_PUT(&dout, &field_addr, packet->can_build_unit);
87691 if (e) {
87692 log_packet_detailed("'can_build_unit' field error detected");
87693 }
87694 }
87695 if (BV_ISSET(fields, 5)) {
87696 log_packet_detailed(" field 'can_build_improvement' has changed");
87697#ifdef FREECIV_JSON_CONNECTION
87698 field_addr.name = "can_build_improvement";
87699#endif /* FREECIV_JSON_CONNECTION */
87700 e = 0;
87702 if (e) {
87703 log_packet_detailed("'can_build_improvement' field error detected");
87704 }
87705 }
87706 if (BV_ISSET(fields, 6)) {
87707 log_packet_detailed(" field 'output_food' has changed");
87708#ifdef FREECIV_JSON_CONNECTION
87709 field_addr.name = "output_food";
87710#endif /* FREECIV_JSON_CONNECTION */
87711 e = 0;
87712 {
87713 int i;
87714
87715#ifdef FREECIV_JSON_CONNECTION
87716 /* Create the array. */
87718
87719 /* Enter the array. */
87720 field_addr.sub_location = plocation_elem_new(0);
87721#endif /* FREECIV_JSON_CONNECTION */
87722
87723 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87724#ifdef FREECIV_JSON_CONNECTION
87725 /* Next array element. */
87726 field_addr.sub_location->number = i;
87727#endif /* FREECIV_JSON_CONNECTION */
87728
87729 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
87730 }
87731
87732#ifdef FREECIV_JSON_CONNECTION
87733 /* Exit array. */
87734 FC_FREE(field_addr.sub_location);
87735#endif /* FREECIV_JSON_CONNECTION */
87736 }
87737 if (e) {
87738 log_packet_detailed("'output_food' field error detected");
87739 }
87740 }
87741 if (BV_ISSET(fields, 7)) {
87742 log_packet_detailed(" field 'output_shield' has changed");
87743#ifdef FREECIV_JSON_CONNECTION
87744 field_addr.name = "output_shield";
87745#endif /* FREECIV_JSON_CONNECTION */
87746 e = 0;
87747 {
87748 int i;
87749
87750#ifdef FREECIV_JSON_CONNECTION
87751 /* Create the array. */
87753
87754 /* Enter the array. */
87755 field_addr.sub_location = plocation_elem_new(0);
87756#endif /* FREECIV_JSON_CONNECTION */
87757
87758 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87759#ifdef FREECIV_JSON_CONNECTION
87760 /* Next array element. */
87761 field_addr.sub_location->number = i;
87762#endif /* FREECIV_JSON_CONNECTION */
87763
87764 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
87765 }
87766
87767#ifdef FREECIV_JSON_CONNECTION
87768 /* Exit array. */
87769 FC_FREE(field_addr.sub_location);
87770#endif /* FREECIV_JSON_CONNECTION */
87771 }
87772 if (e) {
87773 log_packet_detailed("'output_shield' field error detected");
87774 }
87775 }
87776 if (BV_ISSET(fields, 8)) {
87777 log_packet_detailed(" field 'output_trade' has changed");
87778#ifdef FREECIV_JSON_CONNECTION
87779 field_addr.name = "output_trade";
87780#endif /* FREECIV_JSON_CONNECTION */
87781 e = 0;
87782 {
87783 int i;
87784
87785#ifdef FREECIV_JSON_CONNECTION
87786 /* Create the array. */
87788
87789 /* Enter the array. */
87790 field_addr.sub_location = plocation_elem_new(0);
87791#endif /* FREECIV_JSON_CONNECTION */
87792
87793 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87794#ifdef FREECIV_JSON_CONNECTION
87795 /* Next array element. */
87796 field_addr.sub_location->number = i;
87797#endif /* FREECIV_JSON_CONNECTION */
87798
87799 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
87800 }
87801
87802#ifdef FREECIV_JSON_CONNECTION
87803 /* Exit array. */
87804 FC_FREE(field_addr.sub_location);
87805#endif /* FREECIV_JSON_CONNECTION */
87806 }
87807 if (e) {
87808 log_packet_detailed("'output_trade' field error detected");
87809 }
87810 }
87811
87812 *old = *real_packet;
87813
87814 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
87815 if (NULL != *hash) {
87817 }
87818#endif /* FREECIV_DELTA_PROTOCOL */
87819#ifndef FREECIV_DELTA_PROTOCOL
87820#ifdef FREECIV_JSON_CONNECTION
87821 field_addr.name = "id";
87822#endif /* FREECIV_JSON_CONNECTION */
87823 e = 0;
87824 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
87825 if (e) {
87826 log_packet_detailed("'id' field error detected");
87827 }
87828#ifdef FREECIV_JSON_CONNECTION
87829 field_addr.name = "cma_enabled";
87830#endif /* FREECIV_JSON_CONNECTION */
87831 e = 0;
87832 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->cma_enabled);
87833 if (e) {
87834 log_packet_detailed("'cma_enabled' field error detected");
87835 }
87836#ifdef FREECIV_JSON_CONNECTION
87837 field_addr.name = "cm_parameter";
87838#endif /* FREECIV_JSON_CONNECTION */
87839 e = 0;
87840 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
87841 if (e) {
87842 log_packet_detailed("'cm_parameter' field error detected");
87843 }
87844#ifdef FREECIV_JSON_CONNECTION
87845 field_addr.name = "granary_size";
87846#endif /* FREECIV_JSON_CONNECTION */
87847 e = 0;
87848 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
87849 if (e) {
87850 log_packet_detailed("'granary_size' field error detected");
87851 }
87852#ifdef FREECIV_JSON_CONNECTION
87853 field_addr.name = "granary_turns";
87854#endif /* FREECIV_JSON_CONNECTION */
87855 e = 0;
87856 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
87857 if (e) {
87858 log_packet_detailed("'granary_turns' field error detected");
87859 }
87860#ifdef FREECIV_JSON_CONNECTION
87861 field_addr.name = "can_build_unit";
87862#endif /* FREECIV_JSON_CONNECTION */
87863 e = 0;
87864 e |= DIO_BV_PUT(&dout, &field_addr, packet->can_build_unit);
87865 if (e) {
87866 log_packet_detailed("'can_build_unit' field error detected");
87867 }
87868#ifdef FREECIV_JSON_CONNECTION
87869 field_addr.name = "can_build_improvement";
87870#endif /* FREECIV_JSON_CONNECTION */
87871 e = 0;
87873 if (e) {
87874 log_packet_detailed("'can_build_improvement' field error detected");
87875 }
87876#ifdef FREECIV_JSON_CONNECTION
87877 field_addr.name = "output_food";
87878#endif /* FREECIV_JSON_CONNECTION */
87879 e = 0;
87880 {
87881 int i;
87882
87883#ifdef FREECIV_JSON_CONNECTION
87884 /* Create the array. */
87886
87887 /* Enter the array. */
87888 field_addr.sub_location = plocation_elem_new(0);
87889#endif /* FREECIV_JSON_CONNECTION */
87890
87891 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87892#ifdef FREECIV_JSON_CONNECTION
87893 /* Next array element. */
87894 field_addr.sub_location->number = i;
87895#endif /* FREECIV_JSON_CONNECTION */
87896
87897 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
87898 }
87899
87900#ifdef FREECIV_JSON_CONNECTION
87901 /* Exit array. */
87902 FC_FREE(field_addr.sub_location);
87903#endif /* FREECIV_JSON_CONNECTION */
87904 }
87905 if (e) {
87906 log_packet_detailed("'output_food' field error detected");
87907 }
87908#ifdef FREECIV_JSON_CONNECTION
87909 field_addr.name = "output_shield";
87910#endif /* FREECIV_JSON_CONNECTION */
87911 e = 0;
87912 {
87913 int i;
87914
87915#ifdef FREECIV_JSON_CONNECTION
87916 /* Create the array. */
87918
87919 /* Enter the array. */
87920 field_addr.sub_location = plocation_elem_new(0);
87921#endif /* FREECIV_JSON_CONNECTION */
87922
87923 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87924#ifdef FREECIV_JSON_CONNECTION
87925 /* Next array element. */
87926 field_addr.sub_location->number = i;
87927#endif /* FREECIV_JSON_CONNECTION */
87928
87929 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
87930 }
87931
87932#ifdef FREECIV_JSON_CONNECTION
87933 /* Exit array. */
87934 FC_FREE(field_addr.sub_location);
87935#endif /* FREECIV_JSON_CONNECTION */
87936 }
87937 if (e) {
87938 log_packet_detailed("'output_shield' field error detected");
87939 }
87940#ifdef FREECIV_JSON_CONNECTION
87941 field_addr.name = "output_trade";
87942#endif /* FREECIV_JSON_CONNECTION */
87943 e = 0;
87944 {
87945 int i;
87946
87947#ifdef FREECIV_JSON_CONNECTION
87948 /* Create the array. */
87950
87951 /* Enter the array. */
87952 field_addr.sub_location = plocation_elem_new(0);
87953#endif /* FREECIV_JSON_CONNECTION */
87954
87955 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
87956#ifdef FREECIV_JSON_CONNECTION
87957 /* Next array element. */
87958 field_addr.sub_location->number = i;
87959#endif /* FREECIV_JSON_CONNECTION */
87960
87961 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
87962 }
87963
87964#ifdef FREECIV_JSON_CONNECTION
87965 /* Exit array. */
87966 FC_FREE(field_addr.sub_location);
87967#endif /* FREECIV_JSON_CONNECTION */
87968 }
87969 if (e) {
87970 log_packet_detailed("'output_trade' field error detected");
87971 }
87972
87973#endif
87975}
87976
87977int send_packet_web_city_info_addition(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
87978{
87979 if (!pc->used) {
87980 log_error("WARNING: trying to send data to the closed connection %s",
87982 return -1;
87983 }
87984 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send != NULL, -1,
87985 "Handler for PACKET_WEB_CITY_INFO_ADDITION not installed");
87986 return pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send(pc, packet, force_to_send);
87987}
87988
87989void lsend_packet_web_city_info_addition(struct conn_list *dest, const struct packet_web_city_info_addition *packet, bool force_to_send)
87990{
87991 conn_list_iterate(dest, pconn) {
87992 send_packet_web_city_info_addition(pconn, packet, force_to_send);
87994}
87995
87996#ifdef FREECIV_DELTA_PROTOCOL
87998{
87999 const struct packet_web_cma_set *key = (const struct packet_web_cma_set *) vkey;
88000 genhash_val_t result = 0;
88001
88002 result += key->id;
88003
88004 result &= 0xFFFFFFFF;
88005 return result;
88006}
88007
88008static bool cmp_packet_web_cma_set_100(const void *vkey1, const void *vkey2)
88009{
88010 const struct packet_web_cma_set *old = (const struct packet_web_cma_set *) vkey1;
88011 const struct packet_web_cma_set *real_packet = (const struct packet_web_cma_set *) vkey2;
88012 bool differ;
88013
88014 differ = (old->id != real_packet->id);
88015
88016 return !differ;
88017}
88019#endif /* FREECIV_DELTA_PROTOCOL */
88020
88022{
88023#ifdef FREECIV_DELTA_PROTOCOL
88025 struct packet_web_cma_set *old;
88026 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_SET;
88027#endif /* FREECIV_DELTA_PROTOCOL */
88029#ifdef FREECIV_JSON_CONNECTION
88030 struct plocation field_addr;
88031 {
88035 }
88036#endif /* FREECIV_JSON_CONNECTION */
88037
88038#ifdef FREECIV_DELTA_PROTOCOL
88039#ifdef FREECIV_JSON_CONNECTION
88040 field_addr.name = "fields";
88041#endif /* FREECIV_JSON_CONNECTION */
88042 DIO_BV_GET(&din, &field_addr, fields);
88043#ifdef FREECIV_JSON_CONNECTION
88044 field_addr.name = "id";
88045#endif /* FREECIV_JSON_CONNECTION */
88046 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
88048 }
88049
88050#else /* FREECIV_DELTA_PROTOCOL */
88051#ifdef FREECIV_JSON_CONNECTION
88052 field_addr.name = "id";
88053#endif /* FREECIV_JSON_CONNECTION */
88054 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
88056 }
88057#ifdef FREECIV_JSON_CONNECTION
88058 field_addr.name = "cm_parameter";
88059#endif /* FREECIV_JSON_CONNECTION */
88060 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
88062 }
88063#endif
88064 log_packet_detailed("packet_web_cma_set_100: got info about (%d)",
88065 real_packet->id);
88066
88067#ifdef FREECIV_DELTA_PROTOCOL
88068 if (NULL == *hash) {
88070 NULL, NULL, NULL, free);
88071 }
88072
88073 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88074 *real_packet = *old;
88075 } else {
88076 int id;
88077
88078 id = real_packet->id;
88079
88080 log_packet_detailed(" no old info");
88081 memset(real_packet, 0, sizeof(*real_packet));
88082
88083 real_packet->id = id;
88084 }
88085
88086 if (BV_ISSET(fields, 0)) {
88087 log_packet_detailed(" got field 'cm_parameter'");
88088#ifdef FREECIV_JSON_CONNECTION
88089 field_addr.name = "cm_parameter";
88090#endif /* FREECIV_JSON_CONNECTION */
88091 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
88093 }
88094 }
88095
88096 if (NULL == old) {
88097 old = fc_malloc(sizeof(*old));
88098 *old = *real_packet;
88099 genhash_insert(*hash, old, old);
88100 } else {
88101 *old = *real_packet;
88102 }
88103
88104#endif /* FREECIV_DELTA_PROTOCOL */
88106}
88107
88108static int send_packet_web_cma_set_100(struct connection *pc, const struct packet_web_cma_set *packet)
88109{
88110 const struct packet_web_cma_set *real_packet = packet;
88111 int e;
88112#ifdef FREECIV_DELTA_PROTOCOL
88114 struct packet_web_cma_set *old;
88115 bool differ;
88116 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_SET;
88117#endif /* FREECIV_DELTA_PROTOCOL */
88119#ifdef FREECIV_JSON_CONNECTION
88120 struct plocation field_addr;
88121 {
88125 }
88126#endif /* FREECIV_JSON_CONNECTION */
88127
88128 log_packet_detailed("packet_web_cma_set_100: sending info about (%d)",
88129 real_packet->id);
88130
88131#ifdef FREECIV_DELTA_PROTOCOL
88132 if (NULL == *hash) {
88134 NULL, NULL, NULL, free);
88135 }
88136 BV_CLR_ALL(fields);
88137
88138 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88139 old = fc_malloc(sizeof(*old));
88140 *old = *real_packet;
88141 genhash_insert(*hash, old, old);
88142 memset(old, 0, sizeof(*old));
88143 }
88144 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
88145 if (differ) {
88146 BV_SET(fields, 0);
88147 }
88148
88149
88150#ifdef FREECIV_JSON_CONNECTION
88151 field_addr.name = "fields";
88152#endif /* FREECIV_JSON_CONNECTION */
88153 e = 0;
88154 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88155 if (e) {
88156 log_packet_detailed("fields bitvector error detected");
88157 }
88158#ifdef FREECIV_JSON_CONNECTION
88159 field_addr.name = "id";
88160#endif /* FREECIV_JSON_CONNECTION */
88161 e = 0;
88162 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
88163 if (e) {
88164 log_packet_detailed("'id' field error detected");
88165 }
88166
88167 if (BV_ISSET(fields, 0)) {
88168 log_packet_detailed(" field 'cm_parameter' has changed");
88169#ifdef FREECIV_JSON_CONNECTION
88170 field_addr.name = "cm_parameter";
88171#endif /* FREECIV_JSON_CONNECTION */
88172 e = 0;
88173 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
88174 if (e) {
88175 log_packet_detailed("'cm_parameter' field error detected");
88176 }
88177 }
88178
88179 *old = *real_packet;
88180#endif /* FREECIV_DELTA_PROTOCOL */
88181#ifndef FREECIV_DELTA_PROTOCOL
88182#ifdef FREECIV_JSON_CONNECTION
88183 field_addr.name = "id";
88184#endif /* FREECIV_JSON_CONNECTION */
88185 e = 0;
88186 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
88187 if (e) {
88188 log_packet_detailed("'id' field error detected");
88189 }
88190#ifdef FREECIV_JSON_CONNECTION
88191 field_addr.name = "cm_parameter";
88192#endif /* FREECIV_JSON_CONNECTION */
88193 e = 0;
88194 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
88195 if (e) {
88196 log_packet_detailed("'cm_parameter' field error detected");
88197 }
88198
88199#endif
88201}
88202
88204{
88205 if (!pc->used) {
88206 log_error("WARNING: trying to send data to the closed connection %s",
88208 return -1;
88209 }
88210 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet != NULL, -1,
88211 "Handler for PACKET_WEB_CMA_SET not installed");
88212 return pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet(pc, packet);
88213}
88214
88215#ifdef FREECIV_DELTA_PROTOCOL
88216#define hash_packet_web_cma_clear_100 hash_const
88217
88218#define cmp_packet_web_cma_clear_100 cmp_const
88219
88221#endif /* FREECIV_DELTA_PROTOCOL */
88222
88224{
88225#ifdef FREECIV_DELTA_PROTOCOL
88227 struct packet_web_cma_clear *old;
88228 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_CLEAR;
88229#endif /* FREECIV_DELTA_PROTOCOL */
88231#ifdef FREECIV_JSON_CONNECTION
88232 struct plocation field_addr;
88233 {
88237 }
88238#endif /* FREECIV_JSON_CONNECTION */
88239
88240#ifdef FREECIV_DELTA_PROTOCOL
88241#ifdef FREECIV_JSON_CONNECTION
88242 field_addr.name = "fields";
88243#endif /* FREECIV_JSON_CONNECTION */
88244 DIO_BV_GET(&din, &field_addr, fields);
88245
88246#else /* FREECIV_DELTA_PROTOCOL */
88247#ifdef FREECIV_JSON_CONNECTION
88248 field_addr.name = "id";
88249#endif /* FREECIV_JSON_CONNECTION */
88250 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
88252 }
88253#endif
88254 log_packet_detailed("packet_web_cma_clear_100: got info about ()");
88255
88256#ifdef FREECIV_DELTA_PROTOCOL
88257 if (NULL == *hash) {
88259 NULL, NULL, NULL, free);
88260 }
88261
88262 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88263 *real_packet = *old;
88264 } else {
88265 log_packet_detailed(" no old info");
88266 memset(real_packet, 0, sizeof(*real_packet));
88267 }
88268
88269 if (BV_ISSET(fields, 0)) {
88270 log_packet_detailed(" got field 'id'");
88271#ifdef FREECIV_JSON_CONNECTION
88272 field_addr.name = "id";
88273#endif /* FREECIV_JSON_CONNECTION */
88274 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
88276 }
88277 }
88278
88279 if (NULL == old) {
88280 old = fc_malloc(sizeof(*old));
88281 *old = *real_packet;
88282 genhash_insert(*hash, old, old);
88283 } else {
88284 *old = *real_packet;
88285 }
88286
88287#endif /* FREECIV_DELTA_PROTOCOL */
88289}
88290
88291static int send_packet_web_cma_clear_100(struct connection *pc, const struct packet_web_cma_clear *packet)
88292{
88293 const struct packet_web_cma_clear *real_packet = packet;
88294 int e;
88295#ifdef FREECIV_DELTA_PROTOCOL
88297 struct packet_web_cma_clear *old;
88298 bool differ;
88299 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_CLEAR;
88300#endif /* FREECIV_DELTA_PROTOCOL */
88302#ifdef FREECIV_JSON_CONNECTION
88303 struct plocation field_addr;
88304 {
88308 }
88309#endif /* FREECIV_JSON_CONNECTION */
88310
88311 log_packet_detailed("packet_web_cma_clear_100: sending info about ()");
88312
88313#ifdef FREECIV_DELTA_PROTOCOL
88314 if (NULL == *hash) {
88316 NULL, NULL, NULL, free);
88317 }
88318 BV_CLR_ALL(fields);
88319
88320 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88321 old = fc_malloc(sizeof(*old));
88322 *old = *real_packet;
88323 genhash_insert(*hash, old, old);
88324 memset(old, 0, sizeof(*old));
88325 }
88326 differ = (old->id != real_packet->id);
88327 if (differ) {
88328 BV_SET(fields, 0);
88329 }
88330
88331
88332#ifdef FREECIV_JSON_CONNECTION
88333 field_addr.name = "fields";
88334#endif /* FREECIV_JSON_CONNECTION */
88335 e = 0;
88336 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88337 if (e) {
88338 log_packet_detailed("fields bitvector error detected");
88339 }
88340
88341 if (BV_ISSET(fields, 0)) {
88342 log_packet_detailed(" field 'id' has changed");
88343#ifdef FREECIV_JSON_CONNECTION
88344 field_addr.name = "id";
88345#endif /* FREECIV_JSON_CONNECTION */
88346 e = 0;
88347 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
88348 if (e) {
88349 log_packet_detailed("'id' field error detected");
88350 }
88351 }
88352
88353 *old = *real_packet;
88354#endif /* FREECIV_DELTA_PROTOCOL */
88355#ifndef FREECIV_DELTA_PROTOCOL
88356#ifdef FREECIV_JSON_CONNECTION
88357 field_addr.name = "id";
88358#endif /* FREECIV_JSON_CONNECTION */
88359 e = 0;
88360 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
88361 if (e) {
88362 log_packet_detailed("'id' field error detected");
88363 }
88364
88365#endif
88367}
88368
88370{
88371 if (!pc->used) {
88372 log_error("WARNING: trying to send data to the closed connection %s",
88374 return -1;
88375 }
88376 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet != NULL, -1,
88377 "Handler for PACKET_WEB_CMA_CLEAR not installed");
88378 return pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet(pc, packet);
88379}
88380
88381#ifdef FREECIV_DELTA_PROTOCOL
88383{
88384 const struct packet_web_player_info_addition *key = (const struct packet_web_player_info_addition *) vkey;
88385 genhash_val_t result = 0;
88386
88387 result += key->playerno;
88388
88389 result &= 0xFFFFFFFF;
88390 return result;
88391}
88392
88393static bool cmp_packet_web_player_info_addition_100(const void *vkey1, const void *vkey2)
88394{
88395 const struct packet_web_player_info_addition *old = (const struct packet_web_player_info_addition *) vkey1;
88397 bool differ;
88398
88399 differ = (old->playerno != real_packet->playerno);
88400
88401 return !differ;
88402}
88404#endif /* FREECIV_DELTA_PROTOCOL */
88405
88407{
88408#ifdef FREECIV_DELTA_PROTOCOL
88411 struct genhash **hash = pc->phs.received + PACKET_WEB_PLAYER_INFO_ADDITION;
88412#endif /* FREECIV_DELTA_PROTOCOL */
88414#ifdef FREECIV_JSON_CONNECTION
88415 struct plocation field_addr;
88416 {
88420 }
88421#endif /* FREECIV_JSON_CONNECTION */
88422
88423#ifdef FREECIV_DELTA_PROTOCOL
88424#ifdef FREECIV_JSON_CONNECTION
88425 field_addr.name = "fields";
88426#endif /* FREECIV_JSON_CONNECTION */
88427 DIO_BV_GET(&din, &field_addr, fields);
88428#ifdef FREECIV_JSON_CONNECTION
88429 field_addr.name = "playerno";
88430#endif /* FREECIV_JSON_CONNECTION */
88431 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
88433 }
88434
88435#else /* FREECIV_DELTA_PROTOCOL */
88436#ifdef FREECIV_JSON_CONNECTION
88437 field_addr.name = "playerno";
88438#endif /* FREECIV_JSON_CONNECTION */
88439 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
88441 }
88442#ifdef FREECIV_JSON_CONNECTION
88443 field_addr.name = "expected_income";
88444#endif /* FREECIV_JSON_CONNECTION */
88445 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
88446 RECEIVE_PACKET_FIELD_ERROR(expected_income);
88447 }
88448#endif
88449 log_packet_detailed("packet_web_player_info_addition_100: got info about (%d)",
88450 real_packet->playerno);
88451
88452#ifdef FREECIV_DELTA_PROTOCOL
88453 if (NULL == *hash) {
88455 NULL, NULL, NULL, free);
88456 }
88457
88458 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88459 *real_packet = *old;
88460 } else {
88461 int playerno;
88462
88463 playerno = real_packet->playerno;
88464
88465 log_packet_detailed(" no old info");
88466 memset(real_packet, 0, sizeof(*real_packet));
88467
88468 real_packet->playerno = playerno;
88469 }
88470
88471 if (BV_ISSET(fields, 0)) {
88472 log_packet_detailed(" got field 'expected_income'");
88473#ifdef FREECIV_JSON_CONNECTION
88474 field_addr.name = "expected_income";
88475#endif /* FREECIV_JSON_CONNECTION */
88476 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
88477 RECEIVE_PACKET_FIELD_ERROR(expected_income);
88478 }
88479 }
88480
88481 if (NULL == old) {
88482 old = fc_malloc(sizeof(*old));
88483 *old = *real_packet;
88484 genhash_insert(*hash, old, old);
88485 } else {
88486 *old = *real_packet;
88487 }
88488
88489#endif /* FREECIV_DELTA_PROTOCOL */
88491}
88492
88494{
88495 const struct packet_web_player_info_addition *real_packet = packet;
88496 int e;
88497#ifdef FREECIV_DELTA_PROTOCOL
88500 bool differ;
88501 struct genhash **hash = pc->phs.sent + PACKET_WEB_PLAYER_INFO_ADDITION;
88502 int different = 0;
88503#endif /* FREECIV_DELTA_PROTOCOL */
88505#ifdef FREECIV_JSON_CONNECTION
88506 struct plocation field_addr;
88507 {
88511 }
88512#endif /* FREECIV_JSON_CONNECTION */
88513
88514 log_packet_detailed("packet_web_player_info_addition_100: sending info about (%d)",
88515 real_packet->playerno);
88516
88517#ifdef FREECIV_DELTA_PROTOCOL
88518 if (NULL == *hash) {
88520 NULL, NULL, NULL, free);
88521 }
88522 BV_CLR_ALL(fields);
88523
88524 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88525 old = fc_malloc(sizeof(*old));
88526 *old = *real_packet;
88527 genhash_insert(*hash, old, old);
88528 memset(old, 0, sizeof(*old));
88529 different = 1; /* Force to send. */
88530 }
88531 differ = (old->expected_income != real_packet->expected_income);
88532 if (differ) {
88533 different++;
88534 BV_SET(fields, 0);
88535 }
88536
88537 if (different == 0) {
88538 log_packet_detailed(" no change -> discard");
88540 }
88541
88542#ifdef FREECIV_JSON_CONNECTION
88543 field_addr.name = "fields";
88544#endif /* FREECIV_JSON_CONNECTION */
88545 e = 0;
88546 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88547 if (e) {
88548 log_packet_detailed("fields bitvector error detected");
88549 }
88550#ifdef FREECIV_JSON_CONNECTION
88551 field_addr.name = "playerno";
88552#endif /* FREECIV_JSON_CONNECTION */
88553 e = 0;
88554 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
88555 if (e) {
88556 log_packet_detailed("'playerno' field error detected");
88557 }
88558
88559 if (BV_ISSET(fields, 0)) {
88560 log_packet_detailed(" field 'expected_income' has changed");
88561#ifdef FREECIV_JSON_CONNECTION
88562 field_addr.name = "expected_income";
88563#endif /* FREECIV_JSON_CONNECTION */
88564 e = 0;
88565 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
88566 if (e) {
88567 log_packet_detailed("'expected_income' field error detected");
88568 }
88569 }
88570
88571 *old = *real_packet;
88572#endif /* FREECIV_DELTA_PROTOCOL */
88573#ifndef FREECIV_DELTA_PROTOCOL
88574#ifdef FREECIV_JSON_CONNECTION
88575 field_addr.name = "playerno";
88576#endif /* FREECIV_JSON_CONNECTION */
88577 e = 0;
88578 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
88579 if (e) {
88580 log_packet_detailed("'playerno' field error detected");
88581 }
88582#ifdef FREECIV_JSON_CONNECTION
88583 field_addr.name = "expected_income";
88584#endif /* FREECIV_JSON_CONNECTION */
88585 e = 0;
88586 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
88587 if (e) {
88588 log_packet_detailed("'expected_income' field error detected");
88589 }
88590
88591#endif
88593}
88594
88596{
88597 if (!pc->used) {
88598 log_error("WARNING: trying to send data to the closed connection %s",
88600 return -1;
88601 }
88602 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet != NULL, -1,
88603 "Handler for PACKET_WEB_PLAYER_INFO_ADDITION not installed");
88604 return pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet(pc, packet);
88605}
88606
88607#ifdef FREECIV_DELTA_PROTOCOL
88609{
88610 const struct packet_web_ruleset_unit_addition *key = (const struct packet_web_ruleset_unit_addition *) vkey;
88611 genhash_val_t result = 0;
88612
88613 result += key->id;
88614
88615 result &= 0xFFFFFFFF;
88616 return result;
88617}
88618
88619static bool cmp_packet_web_ruleset_unit_addition_100(const void *vkey1, const void *vkey2)
88620{
88621 const struct packet_web_ruleset_unit_addition *old = (const struct packet_web_ruleset_unit_addition *) vkey1;
88623 bool differ;
88624
88625 differ = (old->id != real_packet->id);
88626
88627 return !differ;
88628}
88630#endif /* FREECIV_DELTA_PROTOCOL */
88631
88633{
88634#ifdef FREECIV_DELTA_PROTOCOL
88637 struct genhash **hash = pc->phs.received + PACKET_WEB_RULESET_UNIT_ADDITION;
88638#endif /* FREECIV_DELTA_PROTOCOL */
88640#ifdef FREECIV_JSON_CONNECTION
88641 struct plocation field_addr;
88642 {
88646 }
88647#endif /* FREECIV_JSON_CONNECTION */
88648
88649#ifdef FREECIV_DELTA_PROTOCOL
88650#ifdef FREECIV_JSON_CONNECTION
88651 field_addr.name = "fields";
88652#endif /* FREECIV_JSON_CONNECTION */
88653 DIO_BV_GET(&din, &field_addr, fields);
88654#ifdef FREECIV_JSON_CONNECTION
88655 field_addr.name = "id";
88656#endif /* FREECIV_JSON_CONNECTION */
88657 {
88658 int readin;
88659
88660 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
88662 }
88663 real_packet->id = readin;
88664 }
88665
88666#else /* FREECIV_DELTA_PROTOCOL */
88667#ifdef FREECIV_JSON_CONNECTION
88668 field_addr.name = "id";
88669#endif /* FREECIV_JSON_CONNECTION */
88670 {
88671 int readin;
88672
88673 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
88675 }
88676 real_packet->id = readin;
88677 }
88678#ifdef FREECIV_JSON_CONNECTION
88679 field_addr.name = "utype_actions";
88680#endif /* FREECIV_JSON_CONNECTION */
88681 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
88682 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
88683 }
88684#endif
88685 log_packet_detailed("packet_web_ruleset_unit_addition_100: got info about (%d)",
88686 real_packet->id);
88687
88688#ifdef FREECIV_DELTA_PROTOCOL
88689 if (NULL == *hash) {
88691 NULL, NULL, NULL, free);
88692 }
88693
88694 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88695 *real_packet = *old;
88696 } else {
88698
88699 id = real_packet->id;
88700
88701 log_packet_detailed(" no old info");
88702 memset(real_packet, 0, sizeof(*real_packet));
88703
88704 real_packet->id = id;
88705 }
88706
88707 if (BV_ISSET(fields, 0)) {
88708 log_packet_detailed(" got field 'utype_actions'");
88709#ifdef FREECIV_JSON_CONNECTION
88710 field_addr.name = "utype_actions";
88711#endif /* FREECIV_JSON_CONNECTION */
88712 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
88713 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
88714 }
88715 }
88716
88717 if (NULL == old) {
88718 old = fc_malloc(sizeof(*old));
88719 *old = *real_packet;
88720 genhash_insert(*hash, old, old);
88721 } else {
88722 *old = *real_packet;
88723 }
88724
88725#endif /* FREECIV_DELTA_PROTOCOL */
88727}
88728
88730{
88731 const struct packet_web_ruleset_unit_addition *real_packet = packet;
88732 int e;
88733#ifdef FREECIV_DELTA_PROTOCOL
88736 bool differ;
88737 struct genhash **hash = pc->phs.sent + PACKET_WEB_RULESET_UNIT_ADDITION;
88738#endif /* FREECIV_DELTA_PROTOCOL */
88740#ifdef FREECIV_JSON_CONNECTION
88741 struct plocation field_addr;
88742 {
88746 }
88747#endif /* FREECIV_JSON_CONNECTION */
88748
88749 log_packet_detailed("packet_web_ruleset_unit_addition_100: sending info about (%d)",
88750 real_packet->id);
88751
88752#ifdef FREECIV_DELTA_PROTOCOL
88753 if (NULL == *hash) {
88755 NULL, NULL, NULL, free);
88756 }
88757 BV_CLR_ALL(fields);
88758
88759 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88760 old = fc_malloc(sizeof(*old));
88761 *old = *real_packet;
88762 genhash_insert(*hash, old, old);
88763 memset(old, 0, sizeof(*old));
88764 }
88765 differ = !BV_ARE_EQUAL(old->utype_actions, real_packet->utype_actions);
88766 if (differ) {
88767 BV_SET(fields, 0);
88768 }
88769
88770
88771#ifdef FREECIV_JSON_CONNECTION
88772 field_addr.name = "fields";
88773#endif /* FREECIV_JSON_CONNECTION */
88774 e = 0;
88775 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88776 if (e) {
88777 log_packet_detailed("fields bitvector error detected");
88778 }
88779#ifdef FREECIV_JSON_CONNECTION
88780 field_addr.name = "id";
88781#endif /* FREECIV_JSON_CONNECTION */
88782 e = 0;
88783 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
88784 if (e) {
88785 log_packet_detailed("'id' field error detected");
88786 }
88787
88788 if (BV_ISSET(fields, 0)) {
88789 log_packet_detailed(" field 'utype_actions' has changed");
88790#ifdef FREECIV_JSON_CONNECTION
88791 field_addr.name = "utype_actions";
88792#endif /* FREECIV_JSON_CONNECTION */
88793 e = 0;
88794 e |= DIO_BV_PUT(&dout, &field_addr, packet->utype_actions);
88795 if (e) {
88796 log_packet_detailed("'utype_actions' field error detected");
88797 }
88798 }
88799
88800 *old = *real_packet;
88801#endif /* FREECIV_DELTA_PROTOCOL */
88802#ifndef FREECIV_DELTA_PROTOCOL
88803#ifdef FREECIV_JSON_CONNECTION
88804 field_addr.name = "id";
88805#endif /* FREECIV_JSON_CONNECTION */
88806 e = 0;
88807 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
88808 if (e) {
88809 log_packet_detailed("'id' field error detected");
88810 }
88811#ifdef FREECIV_JSON_CONNECTION
88812 field_addr.name = "utype_actions";
88813#endif /* FREECIV_JSON_CONNECTION */
88814 e = 0;
88815 e |= DIO_BV_PUT(&dout, &field_addr, packet->utype_actions);
88816 if (e) {
88817 log_packet_detailed("'utype_actions' field error detected");
88818 }
88819
88820#endif
88822}
88823
88825{
88826 if (!pc->used) {
88827 log_error("WARNING: trying to send data to the closed connection %s",
88829 return -1;
88830 }
88831 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet != NULL, -1,
88832 "Handler for PACKET_WEB_RULESET_UNIT_ADDITION not installed");
88833 return pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet(pc, packet);
88834}
88835
88842
88844{
88846 "Packets have support for unknown 'tu32' capability!");
88847 phandlers->send[PACKET_CITY_RALLY_POINT].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_rally_point_100;
88849 phandlers->send[PACKET_WORKER_TASK].packet = (int(*)(struct connection *, const void *)) send_packet_worker_task_100;
88853 phandlers->send[PACKET_EDIT_STARTPOS].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_100;
88855 phandlers->send[PACKET_EDIT_STARTPOS_FULL].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_full_100;
88857 if (is_server()) {
88860 phandlers->send[PACKET_INVESTIGATE_STARTED].packet = (int(*)(struct connection *, const void *)) send_packet_investigate_started_100;
88862 phandlers->send[PACKET_SERVER_JOIN_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_reply_100;
88863 phandlers->send[PACKET_AUTHENTICATION_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_authentication_req_100;
88865 phandlers->send[PACKET_ENDGAME_REPORT].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_report_100;
88866 phandlers->send[PACKET_ENDGAME_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_player_100;
88867 phandlers->send[PACKET_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_tile_info_100;
88868 phandlers->send[PACKET_GAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_game_info_100;
88869 phandlers->send[PACKET_CALENDAR_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_calendar_info_100;
88870 phandlers->send[PACKET_TIMEOUT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_timeout_info_100;
88871 phandlers->send[PACKET_MAP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_map_info_100;
88872 phandlers->send[PACKET_NUKE_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_nuke_tile_info_100;
88873 phandlers->send[PACKET_TEAM_NAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_team_name_info_100;
88874 phandlers->send[PACKET_ACHIEVEMENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_achievement_info_100;
88875 phandlers->send[PACKET_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_100;
88876 phandlers->send[PACKET_EARLY_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_early_chat_msg_100;
88877 phandlers->send[PACKET_CONNECT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_connect_msg_100;
88878 phandlers->send[PACKET_SERVER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_server_info_100;
88879 phandlers->send[PACKET_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_city_remove_100;
88880 phandlers->send[PACKET_CITY_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_info_100;
88881 phandlers->send[PACKET_CITY_NATIONALITIES].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_nationalities_100;
88883 phandlers->send[PACKET_CITY_SHORT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_city_short_info_100;
88884 phandlers->send[PACKET_TRADE_ROUTE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_trade_route_info_100;
88886 phandlers->send[PACKET_CITY_SABOTAGE_LIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_sabotage_list_100;
88887 phandlers->send[PACKET_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_player_remove_100;
88888 phandlers->send[PACKET_PLAYER_DIPLSTATE].packet = (int(*)(struct connection *, const void *)) send_packet_player_diplstate_100;
88889 phandlers->send[PACKET_RESEARCH_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_research_info_100;
88890 phandlers->send[PACKET_UNKNOWN_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_unknown_research_100;
88891 phandlers->send[PACKET_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_remove_100;
88892 phandlers->send[PACKET_UNIT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_info_100;
88893 phandlers->send[PACKET_UNIT_SHORT_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_unit_short_info_100;
88894 phandlers->send[PACKET_UNIT_COMBAT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_combat_info_100;
88895 phandlers->send[PACKET_UNIT_ACTION_ANSWER].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_answer_100;
88896 phandlers->send[PACKET_UNIT_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_actions_100;
88902 phandlers->send[PACKET_PAGE_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_100;
88903 phandlers->send[PACKET_PAGE_MSG_PART].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_part_100;
88904 phandlers->send[PACKET_CONN_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_info_100;
88905 phandlers->send[PACKET_CONN_PING_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_ping_info_100;
88906 phandlers->send[PACKET_CONN_PING].no_packet = (int(*)(struct connection *)) send_packet_conn_ping_100;
88907 phandlers->send[PACKET_END_PHASE].no_packet = (int(*)(struct connection *)) send_packet_end_phase_100;
88908 phandlers->send[PACKET_START_PHASE].packet = (int(*)(struct connection *, const void *)) send_packet_start_phase_100;
88909 phandlers->send[PACKET_NEW_YEAR].packet = (int(*)(struct connection *, const void *)) send_packet_new_year_100;
88910 phandlers->send[PACKET_BEGIN_TURN].no_packet = (int(*)(struct connection *)) send_packet_begin_turn_100;
88911 phandlers->send[PACKET_END_TURN].no_packet = (int(*)(struct connection *)) send_packet_end_turn_100;
88913 phandlers->send[PACKET_THAW_CLIENT].no_packet = (int(*)(struct connection *)) send_packet_thaw_client_100;
88914 phandlers->send[PACKET_SPACESHIP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_info_100;
88915 phandlers->send[PACKET_RULESET_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_100;
88916 phandlers->send[PACKET_RULESET_UNIT_BONUS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_bonus_100;
88917 phandlers->send[PACKET_RULESET_UNIT_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_flag_100;
88919 phandlers->send[PACKET_RULESET_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_game_100;
88920 phandlers->send[PACKET_RULESET_SPECIALIST].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_specialist_100;
88922 phandlers->send[PACKET_RULESET_TECH].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_100;
88923 phandlers->send[PACKET_RULESET_TECH_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_class_100;
88924 phandlers->send[PACKET_RULESET_TECH_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_flag_100;
88925 phandlers->send[PACKET_RULESET_GOVERNMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_government_100;
88928 phandlers->send[PACKET_RULESET_NATION_SETS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_sets_100;
88930 phandlers->send[PACKET_RULESET_NATION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_100;
88931 phandlers->send[PACKET_NATION_AVAILABILITY].packet = (int(*)(struct connection *, const void *)) send_packet_nation_availability_100;
88932 phandlers->send[PACKET_RULESET_STYLE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_style_100;
88933 phandlers->send[PACKET_RULESET_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_city_100;
88934 phandlers->send[PACKET_RULESET_BUILDING].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_building_100;
88935 phandlers->send[PACKET_RULESET_IMPR_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_impr_flag_100;
88936 phandlers->send[PACKET_RULESET_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_terrain_100;
88938 phandlers->send[PACKET_RULESET_UNIT_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_class_100;
88939 phandlers->send[PACKET_RULESET_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_100;
88940 phandlers->send[PACKET_RULESET_EXTRA_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_flag_100;
88941 phandlers->send[PACKET_RULESET_BASE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_base_100;
88942 phandlers->send[PACKET_RULESET_ROAD].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_road_100;
88943 phandlers->send[PACKET_RULESET_GOODS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_goods_100;
88944 phandlers->send[PACKET_RULESET_DISASTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_disaster_100;
88945 phandlers->send[PACKET_RULESET_ACHIEVEMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_achievement_100;
88946 phandlers->send[PACKET_RULESET_TRADE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_trade_100;
88947 phandlers->send[PACKET_RULESET_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_100;
88949 phandlers->send[PACKET_RULESET_ACTION_AUTO].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_auto_100;
88950 phandlers->send[PACKET_RULESET_COUNTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_counter_100;
88951 phandlers->send[PACKET_RULESET_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_music_100;
88952 phandlers->send[PACKET_RULESET_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_multiplier_100;
88953 phandlers->send[PACKET_RULESET_CLAUSE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_clause_100;
88954 phandlers->send[PACKET_RULESET_CONTROL].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_control_100;
88955 phandlers->send[PACKET_RULESET_SUMMARY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_summary_100;
88958 phandlers->send[PACKET_RULESET_CHOICES].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_choices_100;
88959 phandlers->send[PACKET_GAME_LOAD].packet = (int(*)(struct connection *, const void *)) send_packet_game_load_100;
88962 phandlers->send[PACKET_SERVER_SETTING_BOOL].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_bool_100;
88963 phandlers->send[PACKET_SERVER_SETTING_INT].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_int_100;
88964 phandlers->send[PACKET_SERVER_SETTING_STR].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_str_100;
88965 phandlers->send[PACKET_SERVER_SETTING_ENUM].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_enum_100;
88967 phandlers->send[PACKET_SET_TOPOLOGY].packet = (int(*)(struct connection *, const void *)) send_packet_set_topology_100;
88968 phandlers->send[PACKET_RULESET_EFFECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_effect_100;
88969 phandlers->send[PACKET_RULESET_RESOURCE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_resource_100;
88970 phandlers->send[PACKET_SCENARIO_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_scenario_info_100;
88972 phandlers->send[PACKET_VOTE_NEW].packet = (int(*)(struct connection *, const void *)) send_packet_vote_new_100;
88973 phandlers->send[PACKET_VOTE_UPDATE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_update_100;
88974 phandlers->send[PACKET_VOTE_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_remove_100;
88975 phandlers->send[PACKET_VOTE_RESOLVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_resolve_100;
88976 phandlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_fogofwar_state_100;
88977 phandlers->send[PACKET_EDIT_OBJECT_CREATED].packet = (int(*)(struct connection *, const void *)) send_packet_edit_object_created_100;
88978 phandlers->send[PACKET_PLAY_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_play_music_100;
88979 phandlers->send[PACKET_POPUP_IMAGE].packet = (int(*)(struct connection *, const void *)) send_packet_popup_image_100;
88980 phandlers->send[PACKET_SYNC_SERIAL_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_reply_100;
88981 phandlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_web_city_info_addition_100;
88989 phandlers->receive[PACKET_CITY_SELL] = (void *(*)(struct connection *)) receive_packet_city_sell_100;
88990 phandlers->receive[PACKET_CITY_BUY] = (void *(*)(struct connection *)) receive_packet_city_buy_100;
89022 phandlers->receive[PACKET_REPORT_REQ] = (void *(*)(struct connection *)) receive_packet_report_req_100;
89023 phandlers->receive[PACKET_CONN_PONG] = (void *(*)(struct connection *)) receive_packet_conn_pong_100;
89032 phandlers->receive[PACKET_EDIT_MODE] = (void *(*)(struct connection *)) receive_packet_edit_mode_100;
89038 phandlers->receive[PACKET_EDIT_TILE] = (void *(*)(struct connection *)) receive_packet_edit_tile_100;
89042 phandlers->receive[PACKET_EDIT_UNIT] = (void *(*)(struct connection *)) receive_packet_edit_unit_100;
89045 phandlers->receive[PACKET_EDIT_CITY] = (void *(*)(struct connection *)) receive_packet_edit_city_100;
89050 phandlers->receive[PACKET_EDIT_GAME] = (void *(*)(struct connection *)) receive_packet_edit_game_100;
89055 } else {
89056 phandlers->send[PACKET_SERVER_JOIN_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_req_100;
89058 phandlers->send[PACKET_NATION_SELECT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_nation_select_req_100;
89059 phandlers->send[PACKET_PLAYER_READY].packet = (int(*)(struct connection *, const void *)) send_packet_player_ready_100;
89060 phandlers->send[PACKET_CHAT_MSG_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_req_100;
89061 phandlers->send[PACKET_CITY_SELL].packet = (int(*)(struct connection *, const void *)) send_packet_city_sell_100;
89062 phandlers->send[PACKET_CITY_BUY].packet = (int(*)(struct connection *, const void *)) send_packet_city_buy_100;
89063 phandlers->send[PACKET_CITY_CHANGE].packet = (int(*)(struct connection *, const void *)) send_packet_city_change_100;
89064 phandlers->send[PACKET_CITY_WORKLIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_worklist_100;
89066 phandlers->send[PACKET_CITY_MAKE_WORKER].packet = (int(*)(struct connection *, const void *)) send_packet_city_make_worker_100;
89068 phandlers->send[PACKET_CITY_RENAME].packet = (int(*)(struct connection *, const void *)) send_packet_city_rename_100;
89069 phandlers->send[PACKET_CITY_OPTIONS_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_city_options_req_100;
89070 phandlers->send[PACKET_CITY_REFRESH].packet = (int(*)(struct connection *, const void *)) send_packet_city_refresh_100;
89072 phandlers->send[PACKET_PLAYER_PHASE_DONE].packet = (int(*)(struct connection *, const void *)) send_packet_player_phase_done_100;
89073 phandlers->send[PACKET_PLAYER_RATES].packet = (int(*)(struct connection *, const void *)) send_packet_player_rates_100;
89075 phandlers->send[PACKET_PLAYER_PLACE_INFRA].packet = (int(*)(struct connection *, const void *)) send_packet_player_place_infra_100;
89077 phandlers->send[PACKET_PLAYER_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_player_multiplier_100;
89078 phandlers->send[PACKET_PLAYER_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_player_research_100;
89079 phandlers->send[PACKET_PLAYER_TECH_GOAL].packet = (int(*)(struct connection *, const void *)) send_packet_player_tech_goal_100;
89080 phandlers->send[PACKET_UNIT_SSCS_SET].packet = (int(*)(struct connection *, const void *)) send_packet_unit_sscs_set_100;
89081 phandlers->send[PACKET_UNIT_ORDERS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_orders_100;
89083 phandlers->send[PACKET_UNIT_ACTION_QUERY].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_query_100;
89084 phandlers->send[PACKET_UNIT_TYPE_UPGRADE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_type_upgrade_100;
89085 phandlers->send[PACKET_UNIT_DO_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_unit_do_action_100;
89086 phandlers->send[PACKET_UNIT_GET_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_get_actions_100;
89094 phandlers->send[PACKET_REPORT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_report_req_100;
89095 phandlers->send[PACKET_CONN_PONG].no_packet = (int(*)(struct connection *)) send_packet_conn_pong_100;
89097 phandlers->send[PACKET_CLIENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_client_info_100;
89099 phandlers->send[PACKET_SPACESHIP_PLACE].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_place_100;
89101 phandlers->send[PACKET_RULESET_SELECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_select_100;
89102 phandlers->send[PACKET_SAVE_SCENARIO].packet = (int(*)(struct connection *, const void *)) send_packet_save_scenario_100;
89103 phandlers->send[PACKET_VOTE_SUBMIT].packet = (int(*)(struct connection *, const void *)) send_packet_vote_submit_100;
89104 phandlers->send[PACKET_EDIT_MODE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_mode_100;
89108 phandlers->send[PACKET_EDIT_TILE_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_terrain_100;
89109 phandlers->send[PACKET_EDIT_TILE_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_extra_100;
89110 phandlers->send[PACKET_EDIT_TILE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_100;
89111 phandlers->send[PACKET_EDIT_UNIT_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_create_100;
89112 phandlers->send[PACKET_EDIT_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_remove_100;
89114 phandlers->send[PACKET_EDIT_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_100;
89115 phandlers->send[PACKET_EDIT_CITY_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_create_100;
89116 phandlers->send[PACKET_EDIT_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_remove_100;
89117 phandlers->send[PACKET_EDIT_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_100;
89118 phandlers->send[PACKET_EDIT_PLAYER_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_create_100;
89119 phandlers->send[PACKET_EDIT_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_remove_100;
89120 phandlers->send[PACKET_EDIT_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_100;
89121 phandlers->send[PACKET_EDIT_PLAYER_VISION].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_vision_100;
89122 phandlers->send[PACKET_EDIT_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_edit_game_100;
89123 phandlers->send[PACKET_EDIT_SCENARIO_DESC].packet = (int(*)(struct connection *, const void *)) send_packet_edit_scenario_desc_100;
89124 phandlers->send[PACKET_SYNC_SERIAL].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_100;
89125 phandlers->send[PACKET_WEB_CMA_SET].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_set_100;
89126 phandlers->send[PACKET_WEB_CMA_CLEAR].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_clear_100;
89136 phandlers->receive[PACKET_TILE_INFO] = (void *(*)(struct connection *)) receive_packet_tile_info_100;
89137 phandlers->receive[PACKET_GAME_INFO] = (void *(*)(struct connection *)) receive_packet_game_info_100;
89140 phandlers->receive[PACKET_MAP_INFO] = (void *(*)(struct connection *)) receive_packet_map_info_100;
89144 phandlers->receive[PACKET_CHAT_MSG] = (void *(*)(struct connection *)) receive_packet_chat_msg_100;
89149 phandlers->receive[PACKET_CITY_INFO] = (void *(*)(struct connection *)) receive_packet_city_info_100;
89161 phandlers->receive[PACKET_UNIT_INFO] = (void *(*)(struct connection *)) receive_packet_unit_info_100;
89171 phandlers->receive[PACKET_PAGE_MSG] = (void *(*)(struct connection *)) receive_packet_page_msg_100;
89173 phandlers->receive[PACKET_CONN_INFO] = (void *(*)(struct connection *)) receive_packet_conn_info_100;
89175 phandlers->receive[PACKET_CONN_PING] = (void *(*)(struct connection *)) receive_packet_conn_ping_100;
89176 phandlers->receive[PACKET_END_PHASE] = (void *(*)(struct connection *)) receive_packet_end_phase_100;
89178 phandlers->receive[PACKET_NEW_YEAR] = (void *(*)(struct connection *)) receive_packet_new_year_100;
89179 phandlers->receive[PACKET_BEGIN_TURN] = (void *(*)(struct connection *)) receive_packet_begin_turn_100;
89180 phandlers->receive[PACKET_END_TURN] = (void *(*)(struct connection *)) receive_packet_end_turn_100;
89228 phandlers->receive[PACKET_GAME_LOAD] = (void *(*)(struct connection *)) receive_packet_game_load_100;
89241 phandlers->receive[PACKET_VOTE_NEW] = (void *(*)(struct connection *)) receive_packet_vote_new_100;
89247 phandlers->receive[PACKET_PLAY_MUSIC] = (void *(*)(struct connection *)) receive_packet_play_music_100;
89253 }
89254}
89255
89257 const char *capability)
89258{
89259 if (is_server()) {
89260 if (!has_capability("tu32", capability)) {
89261 log_packet_detailed("PACKET_PLAYER_INFO: using variant=100 cap=%s", capability);
89262 phandlers->send[PACKET_PLAYER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_player_info_100;
89263 } else if (has_capability("tu32", capability)) {
89264 log_packet_detailed("PACKET_PLAYER_INFO: using variant=101 cap=%s", capability);
89265 phandlers->send[PACKET_PLAYER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_player_info_101;
89266 } else {
89267 log_error("Unknown PACKET_PLAYER_INFO variant for cap %s", capability);
89268 }
89269 } else {
89270 if (!has_capability("tu32", capability)) {
89271 log_packet_detailed("PACKET_PLAYER_INFO: using variant=100 cap=%s", capability);
89273 } else if (has_capability("tu32", capability)) {
89274 log_packet_detailed("PACKET_PLAYER_INFO: using variant=101 cap=%s", capability);
89276 } else {
89277 log_error("Unknown PACKET_PLAYER_INFO variant for cap %s", capability);
89278 }
89279 }
89280}
bool are_action_probabilitys_equal(const struct act_prob *ap1, const struct act_prob *ap2)
Definition actions.c:5872
#define MAX_NUM_ACTIONS
Definition actions.h:314
#define BV_DEFINE(name, bits)
Definition bitvector.h:132
#define BV_CLR_ALL(bv)
Definition bitvector.h:95
#define BV_SET(bv, bit)
Definition bitvector.h:81
#define BV_ARE_EQUAL(vec1, vec2)
Definition bitvector.h:113
#define BV_ISSET(bv, bit)
Definition bitvector.h:78
bool has_capability(const char *cap, const char *capstr)
Definition capability.c:77
const char *const our_capability
Definition capstr.c:32
@ FEELING_LAST
Definition city.h:285
bool cm_are_parameter_equal(const struct cm_parameter *const p1, const struct cm_parameter *const p2)
Definition cm.c:2141
char * calendar_fragments
Definition comments.c:100
char * resources
Definition comments.c:37
char * disasters
Definition comments.c:46
char * culture_migration_pml
Definition comments.c:99
char * incite_cost
Definition comments.c:75
#define ATTRIBUTE_CHUNK_SIZE
Definition conn_types.h:66
report_type
Definition conn_types.h:49
#define MAX_LEN_ROUTE
Definition conn_types.h:38
authentication_type
Definition conn_types.h:41
const char * conn_description(const struct connection *pconn)
Definition connection.c:474
#define conn_list_iterate(connlist, pconn)
Definition connection.h:108
#define conn_list_iterate_end
Definition connection.h:110
static struct counter counters[MAX_COUNTERS]
Definition counters.c:31
#define DIO_BV_PUT(pdout, location, bv)
#define DIO_BV_GET(pdin, location, bv)
#define DIO_GET(f, d, l,...)
#define DIO_PUT(f, d, l,...)
struct plocation * plocation_field_new(char *name)
struct plocation * plocation_elem_new(int number)
static void airlift(QVariant data1, QVariant data2)
Definition dialogs.cpp:1835
const char * caption
Definition dialogs_g.h:37
const char const char * headline
Definition dialogs_g.h:38
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit int cost
Definition dialogs_g.h:74
bool diplomat_investigate(struct player *pplayer, struct unit *pdiplomat, struct city *pcity, const struct action *paction)
Definition diplomats.c:324
int int id
Definition editgui_g.h:28
struct effect_list * effects[EFT_COUNT]
Definition effects.c:127
struct @21::@22 reqs
enum event_type event
Definition events.c:81
static struct extra_type extras[MAX_EXTRA_TYPES]
Definition extras.c:31
int extra_count(void)
Definition extras.c:153
static bool is_server(void)
#define MAX_NUM_CONNECTIONS
Definition fc_types.h:38
#define MAX_CITY_NATIONALITIES
Definition fc_types.h:89
#define MAX_VET_LEVELS
Definition fc_types.h:49
#define MAX_GRANARY_INIS
Definition fc_types.h:72
#define MAX_NUM_NATIONS
Definition fc_types.h:60
#define MAX_NUM_RULESETS
Definition fc_types.h:412
#define MAX_NUM_NATION_SETS
Definition fc_types.h:57
#define MAX_NUM_BUILDING_LIST
Definition fc_types.h:46
#define MAX_NUM_REQS
Definition fc_types.h:410
int Nation_type_id
Definition fc_types.h:380
int Terrain_type_id
Definition fc_types.h:373
int action_id
Definition fc_types.h:389
#define SP_MAX
Definition fc_types.h:409
int Specialist_type_id
Definition fc_types.h:375
int Government_type_id
Definition fc_types.h:381
#define MAX_CALENDAR_FRAGMENTS
Definition fc_types.h:62
#define MAX_NUM_NATION_GROUPS
Definition fc_types.h:58
#define MAX_NUM_PLAYER_SLOTS
Definition fc_types.h:32
#define MAX_NUM_LEADERS
Definition fc_types.h:56
#define MAX_NUM_MULTIPLIERS
Definition fc_types.h:55
#define MAX_NUM_UNIT_LIST
Definition fc_types.h:45
#define MAX_EXTRA_TYPES
Definition fc_types.h:50
spaceship_place_type
Definition fc_types.h:1296
int Unit_type_id
Definition fc_types.h:382
#define MAX_NUM_TECH_LIST
Definition fc_types.h:44
@ O_LAST
Definition fc_types.h:101
#define MAX_CITY_TILES
Definition fc_types.h:87
#define MAX_COUNTERS
Definition fc_types.h:106
int Multiplier_type_id
Definition fc_types.h:386
struct genhash * genhash_new_full(genhash_val_fn_t key_val_func, genhash_comp_fn_t key_comp_func, genhash_copy_fn_t key_copy_func, genhash_free_fn_t key_free_func, genhash_copy_fn_t data_copy_func, genhash_free_fn_t data_free_func)
Definition genhash.c:268
bool genhash_insert(struct genhash *pgenhash, const void *key, const void *data)
Definition genhash.c:604
bool genhash_lookup(const struct genhash *pgenhash, const void *key, void **pdata)
Definition genhash.c:681
bool genhash_remove(struct genhash *pgenhash, const void *key)
Definition genhash.c:702
unsigned int genhash_val_t
Definition genhash.h:32
Government_type_id government_count(void)
Definition government.c:71
static int actor_unit_id
static int target_extra_id
struct city * owner
Definition citydlg.c:226
static void load_filename(const char *filename)
Definition pages.c:2856
static GtkWidget * scenario_authors
Definition pages.c:64
static GtkWidget * persistent
GType type
Definition repodlgs.c:1313
static GHashTable * hash
Definition wldlg.c:322
static char * leader_name
Definition dialogs.c:97
#define B_LAST
Definition improvement.h:42
const char * name
Definition inputfile.c:127
#define fc_assert_msg(condition, message,...)
Definition log.h:181
#define log_packet_detailed
Definition log.h:138
#define log_error(message,...)
Definition log.h:103
#define FC_STATIC_ASSERT(cond, tag)
Definition log.h:235
#define fc_assert_ret_val_msg(condition, val, message,...)
Definition log.h:208
void nuclear_winter(int effect)
Definition maphand.c:119
void global_warming(int effect)
Definition maphand.c:106
#define FC_FREE(ptr)
Definition mem.h:41
#define fc_malloc(sz)
Definition mem.h:34
static mpgui * gui
Definition mpgui_qt.cpp:52
static mpqt_worker * worker
Definition mpgui_qt.cpp:54
static struct multiplier multipliers[MAX_NUM_MULTIPLIERS]
Definition multipliers.c:23
Nation_type_id nation_count(void)
Definition nation.c:507
static int num_nation_sets
Definition nation.c:48
static int num_nation_groups
Definition nation.c:50
static struct nation_type * nations
Definition nation.c:46
void post_receive_packet_server_join_reply(struct connection *pconn, const struct packet_server_join_reply *packet)
Definition packets.c:652
void pre_send_packet_player_attribute_chunk(struct connection *pc, struct packet_player_attribute_chunk *packet)
Definition packets.c:793
void post_send_packet_server_join_reply(struct connection *pconn, const struct packet_server_join_reply *packet)
Definition packets.c:640
#define SEND_PACKET_START(packet_type)
Definition packets.h:128
#define SEND_PACKET_DISCARD()
Definition packets.h:146
#define RECEIVE_PACKET_START(packet_type, result)
Definition packets.h:149
#define SEND_PACKET_END(packet_type)
Definition packets.h:136
#define RECEIVE_PACKET_FIELD_ERROR(field,...)
Definition packets.h:173
#define RECEIVE_PACKET_END(result)
Definition packets.h:164
static int send_packet_map_info_100(struct connection *pc, const struct packet_map_info *packet)
static struct packet_set_topology * receive_packet_set_topology_100(struct connection *pc)
int send_packet_sync_serial(struct connection *pc, const struct packet_sync_serial *packet)
static struct packet_chat_msg * receive_packet_chat_msg_100(struct connection *pc)
static int send_packet_city_sabotage_list_100(struct connection *pc, const struct packet_city_sabotage_list *packet)
static int send_packet_ruleset_nation_100(struct connection *pc, const struct packet_ruleset_nation *packet)
static struct packet_edit_tile * receive_packet_edit_tile_100(struct connection *pc)
static int send_packet_page_msg_part_100(struct connection *pc, const struct packet_page_msg_part *packet)
int dsend_packet_edit_city_create(struct connection *pc, int owner, int tile, int size, int tag)
int dsend_packet_unit_change_activity(struct connection *pc, int unit_id, enum unit_activity activity, int target)
static int send_packet_ruleset_unit_100(struct connection *pc, const struct packet_ruleset_unit *packet)
static int send_packet_sync_serial_reply_100(struct connection *pc, const struct packet_sync_serial_reply *packet)
void lsend_packet_ruleset_summary(struct conn_list *dest, const struct packet_ruleset_summary *packet)
static int send_packet_diplomacy_remove_clause_req_100(struct connection *pc, const struct packet_diplomacy_remove_clause_req *packet)
static struct packet_thaw_client * receive_packet_thaw_client_100(struct connection *pc)
int dsend_packet_diplomacy_create_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
int send_packet_conn_ping(struct connection *pc)
void lsend_packet_diplomacy_create_clause(struct conn_list *dest, const struct packet_diplomacy_create_clause *packet)
static int send_packet_endgame_player_100(struct connection *pc, const struct packet_endgame_player *packet)
static int send_packet_diplomacy_cancel_meeting_100(struct connection *pc, const struct packet_diplomacy_cancel_meeting *packet)
static struct packet_unit_actions * receive_packet_unit_actions_100(struct connection *pc)
int send_packet_player_change_government(struct connection *pc, const struct packet_player_change_government *packet)
int send_packet_diplomacy_accept_treaty(struct connection *pc, const struct packet_diplomacy_accept_treaty *packet)
int send_packet_ruleset_counter(struct connection *pc, const struct packet_ruleset_counter *packet)
int dsend_packet_sync_serial(struct connection *pc, int serial)
static int send_packet_ruleset_terrain_100(struct connection *pc, const struct packet_ruleset_terrain *packet)
static int send_packet_player_attribute_chunk_100(struct connection *pc, const struct packet_player_attribute_chunk *packet)
int send_packet_city_rally_point(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
void delta_stats_reset(void)
Definition packets_gen.c:46
static int send_packet_connect_msg_100(struct connection *pc, const struct packet_connect_msg *packet)
int send_packet_vote_resolve(struct connection *pc, const struct packet_vote_resolve *packet)
void lsend_packet_start_phase(struct conn_list *dest, const struct packet_start_phase *packet)
void lsend_packet_ruleset_building(struct conn_list *dest, const struct packet_ruleset_building *packet)
int send_packet_edit_city(struct connection *pc, const struct packet_edit_city *packet)
int send_packet_server_setting_bitwise(struct connection *pc, const struct packet_server_setting_bitwise *packet)
void lsend_packet_new_year(struct conn_list *dest, const struct packet_new_year *packet)
static struct packet_game_info * receive_packet_game_info_100(struct connection *pc)
static int send_packet_ruleset_choices_100(struct connection *pc, const struct packet_ruleset_choices *packet)
void lsend_packet_endgame_player(struct conn_list *dest, const struct packet_endgame_player *packet)
static int send_packet_player_attribute_block_100(struct connection *pc)
static int send_packet_ruleset_music_100(struct connection *pc, const struct packet_ruleset_music *packet)
static int send_packet_conn_pong_100(struct connection *pc)
int send_packet_ruleset_game(struct connection *pc, const struct packet_ruleset_game *packet)
void lsend_packet_ruleset_unit_class_flag(struct conn_list *dest, const struct packet_ruleset_unit_class_flag *packet)
int send_packet_unknown_research(struct connection *pc, const struct packet_unknown_research *packet)
void lsend_packet_tile_info(struct conn_list *dest, const struct packet_tile_info *packet)
static int send_packet_player_diplstate_100(struct connection *pc, const struct packet_player_diplstate *packet)
static struct packet_ruleset_control * receive_packet_ruleset_control_100(struct connection *pc)
int send_packet_ruleset_resource(struct connection *pc, const struct packet_ruleset_resource *packet)
static struct packet_unit_action_query * receive_packet_unit_action_query_100(struct connection *pc)
int dsend_packet_player_rates(struct connection *pc, int tax, int luxury, int science)
int dsend_packet_spaceship_place(struct connection *pc, enum spaceship_place_type type, int num)
void dlsend_packet_city_remove(struct conn_list *dest, int city_id)
static int send_packet_processing_finished_100(struct connection *pc)
int send_packet_ruleset_unit_bonus(struct connection *pc, const struct packet_ruleset_unit_bonus *packet)
int send_packet_edit_unit_create(struct connection *pc, const struct packet_edit_unit_create *packet)
static struct packet_edit_fogofwar_state * receive_packet_edit_fogofwar_state_100(struct connection *pc)
static int send_packet_spaceship_info_100(struct connection *pc, const struct packet_spaceship_info *packet)
void lsend_packet_edit_player(struct conn_list *dest, const struct packet_edit_player *packet)
static struct packet_ruleset_nation_sets * receive_packet_ruleset_nation_sets_100(struct connection *pc)
int send_packet_end_turn(struct connection *pc)
static int send_packet_city_short_info_100(struct connection *pc, const struct packet_city_short_info *packet)
int send_packet_ruleset_achievement(struct connection *pc, const struct packet_ruleset_achievement *packet)
static int send_packet_ruleset_action_auto_100(struct connection *pc, const struct packet_ruleset_action_auto *packet)
static int send_packet_edit_player_vision_100(struct connection *pc, const struct packet_edit_player_vision *packet)
static struct packet_conn_ping * receive_packet_conn_ping_100(struct connection *pc)
int send_packet_edit_city_create(struct connection *pc, const struct packet_edit_city_create *packet)
void dlsend_packet_edit_fogofwar_state(struct conn_list *dest, bool enabled)
void lsend_packet_research_info(struct conn_list *dest, const struct packet_research_info *packet)
int send_packet_worker_task(struct connection *pc, const struct packet_worker_task *packet)
void lsend_packet_city_update_counters(struct conn_list *dest, const struct packet_city_update_counters *packet)
void lsend_packet_web_ruleset_unit_addition(struct conn_list *dest, const struct packet_web_ruleset_unit_addition *packet)
void dlsend_packet_ruleset_multiplier(struct conn_list *dest, Multiplier_type_id id, int start, int stop, int step, int def, int offset, int factor, int minimum_turns, const char *name, const char *rule_name, int reqs_count, const struct requirement *reqs, const char *helptext)
void lsend_packet_map_info(struct conn_list *dest, const struct packet_map_info *packet)
static struct packet_ruleset_nation_groups * receive_packet_ruleset_nation_groups_100(struct connection *pc)
static struct packet_ruleset_city * receive_packet_ruleset_city_100(struct connection *pc)
static struct packet_ruleset_choices * receive_packet_ruleset_choices_100(struct connection *pc)
int dsend_packet_connect_msg(struct connection *pc, const char *message)
static struct packet_rulesets_ready * receive_packet_rulesets_ready_100(struct connection *pc)
int send_packet_edit_toggle_fogofwar(struct connection *pc, const struct packet_edit_toggle_fogofwar *packet)
void lsend_packet_game_load(struct conn_list *dest, const struct packet_game_load *packet)
void lsend_packet_ruleset_achievement(struct conn_list *dest, const struct packet_ruleset_achievement *packet)
static struct packet_ruleset_unit * receive_packet_ruleset_unit_100(struct connection *pc)
static struct packet_report_req * receive_packet_report_req_100(struct connection *pc)
void lsend_packet_ruleset_nation_sets(struct conn_list *dest, const struct packet_ruleset_nation_sets *packet)
int send_packet_city_name_suggestion_info(struct connection *pc, const struct packet_city_name_suggestion_info *packet)
int send_packet_ruleset_government(struct connection *pc, const struct packet_ruleset_government *packet)
static int send_packet_edit_fogofwar_state_100(struct connection *pc, const struct packet_edit_fogofwar_state *packet)
static struct packet_city_info * receive_packet_city_info_100(struct connection *pc)
static struct packet_edit_object_created * receive_packet_edit_object_created_100(struct connection *pc)
int send_packet_unit_remove(struct connection *pc, const struct packet_unit_remove *packet)
static int send_packet_nation_select_req_100(struct connection *pc, const struct packet_nation_select_req *packet)
void lsend_packet_city_nationalities(struct conn_list *dest, const struct packet_city_nationalities *packet, bool force_to_send)
int send_packet_popup_image(struct connection *pc, const struct packet_popup_image *packet)
static int send_packet_web_cma_clear_100(struct connection *pc, const struct packet_web_cma_clear *packet)
int send_packet_player_phase_done(struct connection *pc, const struct packet_player_phase_done *packet)
static int send_packet_scenario_info_100(struct connection *pc, const struct packet_scenario_info *packet)
void lsend_packet_edit_fogofwar_state(struct conn_list *dest, const struct packet_edit_fogofwar_state *packet)
static struct packet_edit_startpos_full * receive_packet_edit_startpos_full_100(struct connection *pc)
static struct packet_ruleset_multiplier * receive_packet_ruleset_multiplier_100(struct connection *pc)
static struct packet_tile_info * receive_packet_tile_info_100(struct connection *pc)
static struct packet_page_msg * receive_packet_page_msg_100(struct connection *pc)
static struct packet_vote_update * receive_packet_vote_update_100(struct connection *pc)
static int send_packet_edit_tile_100(struct connection *pc, const struct packet_edit_tile *packet)
void lsend_packet_ruleset_multiplier(struct conn_list *dest, const struct packet_ruleset_multiplier *packet)
static struct packet_team_name_info * receive_packet_team_name_info_100(struct connection *pc)
static int send_packet_ruleset_clause_100(struct connection *pc, const struct packet_ruleset_clause *packet)
static struct packet_unit_do_action * receive_packet_unit_do_action_100(struct connection *pc)
static int send_packet_ruleset_tech_class_100(struct connection *pc, const struct packet_ruleset_tech_class *packet)
static int send_packet_edit_check_tiles_100(struct connection *pc)
static int send_packet_player_ready_100(struct connection *pc, const struct packet_player_ready *packet)
static int send_packet_conn_ping_100(struct connection *pc)
int dsend_packet_diplomacy_cancel_meeting(struct connection *pc, int counterpart, int initiated_from)
static struct packet_endgame_report * receive_packet_endgame_report_100(struct connection *pc)
static int send_packet_game_load_100(struct connection *pc, const struct packet_game_load *packet)
static struct packet_ruleset_action_auto * receive_packet_ruleset_action_auto_100(struct connection *pc)
int dsend_packet_player_remove(struct connection *pc, int playerno)
bool packet_has_game_info_flag(enum packet_type type)
void lsend_packet_ruleset_city(struct conn_list *dest, const struct packet_ruleset_city *packet)
static int send_packet_edit_recalculate_borders_100(struct connection *pc)
int send_packet_edit_game(struct connection *pc, const struct packet_edit_game *packet)
static struct packet_unit_type_upgrade * receive_packet_unit_type_upgrade_100(struct connection *pc)
void lsend_packet_diplomacy_cancel_meeting(struct conn_list *dest, const struct packet_diplomacy_cancel_meeting *packet)
int dsend_packet_diplomacy_cancel_pact(struct connection *pc, int other_player_id, enum clause_type clause)
static struct packet_unit_combat_info * receive_packet_unit_combat_info_100(struct connection *pc)
int send_packet_nation_availability(struct connection *pc, const struct packet_nation_availability *packet)
static int send_packet_ruleset_terrain_control_100(struct connection *pc, const struct packet_ruleset_terrain_control *packet)
int dsend_packet_authentication_req(struct connection *pc, enum authentication_type type, const char *message)
int send_packet_ruleset_nation_sets(struct connection *pc, const struct packet_ruleset_nation_sets *packet)
int dsend_packet_city_sell(struct connection *pc, int city_id, int build_id)
static struct packet_city_rally_point * receive_packet_city_rally_point_100(struct connection *pc)
void lsend_packet_ruleset_unit(struct conn_list *dest, const struct packet_ruleset_unit *packet)
static int send_packet_server_setting_int_100(struct connection *pc, const struct packet_server_setting_int *packet)
int send_packet_unit_action_query(struct connection *pc, const struct packet_unit_action_query *packet)
int dsend_packet_diplomacy_init_meeting_req(struct connection *pc, int counterpart)
static int send_packet_ruleset_control_100(struct connection *pc, const struct packet_ruleset_control *packet)
int dsend_packet_unit_do_action(struct connection *pc, int actor_id, int target_id, int sub_tgt_id, const char *name, action_id action_type)
int send_packet_city_make_specialist(struct connection *pc, const struct packet_city_make_specialist *packet)
static struct packet_server_setting_bitwise * receive_packet_server_setting_bitwise_100(struct connection *pc)
int send_packet_ruleset_unit_class(struct connection *pc, const struct packet_ruleset_unit_class *packet)
static struct packet_spaceship_info * receive_packet_spaceship_info_100(struct connection *pc)
int send_packet_ruleset_multiplier(struct connection *pc, const struct packet_ruleset_multiplier *packet)
static struct packet_city_worklist * receive_packet_city_worklist_100(struct connection *pc)
int send_packet_ruleset_extra_flag(struct connection *pc, const struct packet_ruleset_extra_flag *packet)
void lsend_packet_unit_remove(struct conn_list *dest, const struct packet_unit_remove *packet)
int dsend_packet_diplomacy_remove_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
int send_packet_city_rename(struct connection *pc, const struct packet_city_rename *packet)
static int send_packet_edit_unit_remove_100(struct connection *pc, const struct packet_edit_unit_remove *packet)
static struct packet_ruleset_game * receive_packet_ruleset_game_100(struct connection *pc)
void dlsend_packet_diplomacy_init_meeting(struct conn_list *dest, int counterpart, int initiated_from)
int send_packet_ruleset_select(struct connection *pc, const struct packet_ruleset_select *packet)
static struct packet_ruleset_unit_flag * receive_packet_ruleset_unit_flag_100(struct connection *pc)
static int send_packet_city_nationalities_100(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
static struct packet_diplomacy_cancel_pact * receive_packet_diplomacy_cancel_pact_100(struct connection *pc)
static int send_packet_chat_msg_100(struct connection *pc, const struct packet_chat_msg *packet)
int send_packet_endgame_player(struct connection *pc, const struct packet_endgame_player *packet)
void lsend_packet_ruleset_clause(struct conn_list *dest, const struct packet_ruleset_clause *packet)
int send_packet_new_year(struct connection *pc, const struct packet_new_year *packet)
static struct packet_edit_mode * receive_packet_edit_mode_100(struct connection *pc)
static struct packet_spaceship_place * receive_packet_spaceship_place_100(struct connection *pc)
static struct packet_single_want_hack_reply * receive_packet_single_want_hack_reply_100(struct connection *pc)
static int send_packet_ruleset_road_100(struct connection *pc, const struct packet_ruleset_road *packet)
int send_packet_server_setting_str(struct connection *pc, const struct packet_server_setting_str *packet)
int send_packet_ruleset_road(struct connection *pc, const struct packet_ruleset_road *packet)
void lsend_packet_chat_msg(struct conn_list *dest, const struct packet_chat_msg *packet)
int send_packet_ruleset_unit_flag(struct connection *pc, const struct packet_ruleset_unit_flag *packet)
static int send_packet_edit_game_100(struct connection *pc, const struct packet_edit_game *packet)
int send_packet_ruleset_city(struct connection *pc, const struct packet_ruleset_city *packet)
int send_packet_ruleset_goods(struct connection *pc, const struct packet_ruleset_goods *packet)
static struct packet_server_join_req * receive_packet_server_join_req_100(struct connection *pc)
void lsend_packet_begin_turn(struct conn_list *dest)
static int send_packet_thaw_client_100(struct connection *pc)
int send_packet_unit_type_upgrade(struct connection *pc, const struct packet_unit_type_upgrade *packet)
static struct packet_ruleset_building * receive_packet_ruleset_building_100(struct connection *pc)
static struct packet_ruleset_description_part * receive_packet_ruleset_description_part_100(struct connection *pc)
void delta_stats_report(void)
Definition packets_gen.c:44
int send_packet_processing_finished(struct connection *pc)
static int send_packet_authentication_reply_100(struct connection *pc, const struct packet_authentication_reply *packet)
void lsend_packet_ruleset_unit_flag(struct conn_list *dest, const struct packet_ruleset_unit_flag *packet)
static int send_packet_player_rates_100(struct connection *pc, const struct packet_player_rates *packet)
int send_packet_page_msg(struct connection *pc, const struct packet_page_msg *packet)
int send_packet_conn_pong(struct connection *pc)
static int send_packet_trade_route_info_100(struct connection *pc, const struct packet_trade_route_info *packet)
int send_packet_player_multiplier(struct connection *pc, const struct packet_player_multiplier *packet)
static int send_packet_ruleset_style_100(struct connection *pc, const struct packet_ruleset_style *packet)
static int send_packet_ruleset_counter_100(struct connection *pc, const struct packet_ruleset_counter *packet)
int send_packet_server_join_req(struct connection *pc, const struct packet_server_join_req *packet)
void lsend_packet_endgame_report(struct conn_list *dest, const struct packet_endgame_report *packet)
int send_packet_endgame_report(struct connection *pc, const struct packet_endgame_report *packet)
static int send_packet_ruleset_city_100(struct connection *pc, const struct packet_ruleset_city *packet)
static int send_packet_vote_remove_100(struct connection *pc, const struct packet_vote_remove *packet)
int dsend_packet_city_options_req(struct connection *pc, int city_id, bv_city_options options, enum city_wl_cancel_behavior wl_cb)
int send_packet_server_setting_const(struct connection *pc, const struct packet_server_setting_const *packet)
static int send_packet_city_remove_100(struct connection *pc, const struct packet_city_remove *packet)
static struct packet_edit_city_remove * receive_packet_edit_city_remove_100(struct connection *pc)
int send_packet_city_remove(struct connection *pc, const struct packet_city_remove *packet)
static int send_packet_server_setting_bool_100(struct connection *pc, const struct packet_server_setting_bool *packet)
static int send_packet_ruleset_government_ruler_title_100(struct connection *pc, const struct packet_ruleset_government_ruler_title *packet)
void lsend_packet_conn_info(struct conn_list *dest, const struct packet_conn_info *packet)
static int send_packet_edit_tile_terrain_100(struct connection *pc, const struct packet_edit_tile_terrain *packet)
static int send_packet_unit_orders_100(struct connection *pc, const struct packet_unit_orders *packet)
int send_packet_server_info(struct connection *pc, const struct packet_server_info *packet)
static struct packet_achievement_info * receive_packet_achievement_info_100(struct connection *pc)
static struct packet_authentication_reply * receive_packet_authentication_reply_100(struct connection *pc)
static int send_packet_server_join_reply_100(struct connection *pc, const struct packet_server_join_reply *packet)
static struct packet_map_info * receive_packet_map_info_100(struct connection *pc)
static struct packet_server_info * receive_packet_server_info_100(struct connection *pc)
static int send_packet_single_want_hack_reply_100(struct connection *pc, const struct packet_single_want_hack_reply *packet)
static struct packet_city_remove * receive_packet_city_remove_100(struct connection *pc)
static struct packet_server_setting_enum * receive_packet_server_setting_enum_100(struct connection *pc)
static struct packet_unit_action_answer * receive_packet_unit_action_answer_100(struct connection *pc)
int send_packet_edit_unit_remove(struct connection *pc, const struct packet_edit_unit_remove *packet)
static int send_packet_game_info_100(struct connection *pc, const struct packet_game_info *packet)
static int send_packet_freeze_client_100(struct connection *pc)
static struct packet_spaceship_launch * receive_packet_spaceship_launch_100(struct connection *pc)
int send_packet_unit_server_side_agent_set(struct connection *pc, const struct packet_unit_server_side_agent_set *packet)
void lsend_packet_early_chat_msg(struct conn_list *dest, const struct packet_early_chat_msg *packet)
int send_packet_city_name_suggestion_req(struct connection *pc, const struct packet_city_name_suggestion_req *packet)
static struct packet_nation_availability * receive_packet_nation_availability_100(struct connection *pc)
int send_packet_ruleset_extra(struct connection *pc, const struct packet_ruleset_extra *packet)
int send_packet_city_info(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
void lsend_packet_ruleset_action(struct conn_list *dest, const struct packet_ruleset_action *packet)
static struct packet_ruleset_effect * receive_packet_ruleset_effect_100(struct connection *pc)
int send_packet_unit_actions(struct connection *pc, const struct packet_unit_actions *packet)
static struct packet_player_multiplier * receive_packet_player_multiplier_100(struct connection *pc)
int send_packet_ruleset_tech_class(struct connection *pc, const struct packet_ruleset_tech_class *packet)
static int send_packet_ruleset_tech_flag_100(struct connection *pc, const struct packet_ruleset_tech_flag *packet)
static struct packet_unit_server_side_agent_set * receive_packet_unit_server_side_agent_set_100(struct connection *pc)
static struct packet_save_scenario * receive_packet_save_scenario_100(struct connection *pc)
static struct packet_edit_tile_terrain * receive_packet_edit_tile_terrain_100(struct connection *pc)
void lsend_packet_trade_route_info(struct conn_list *dest, const struct packet_trade_route_info *packet)
void lsend_packet_diplomacy_accept_treaty(struct conn_list *dest, const struct packet_diplomacy_accept_treaty *packet)
int dsend_packet_server_join_req(struct connection *pc, const char *username, const char *capability, const char *version_label, int major_version, int minor_version, int patch_version)
static struct packet_city_update_counters * receive_packet_city_update_counters_100(struct connection *pc)
int send_packet_ruleset_summary(struct connection *pc, const struct packet_ruleset_summary *packet)
void lsend_packet_ruleset_extra(struct conn_list *dest, const struct packet_ruleset_extra *packet)
int send_packet_edit_tile_extra(struct connection *pc, const struct packet_edit_tile_extra *packet)
static struct packet_edit_game * receive_packet_edit_game_100(struct connection *pc)
void packet_handlers_fill_capability(struct packet_handlers *phandlers, const char *capability)
int dsend_packet_server_info(struct connection *pc, const char *version_label, int major_version, int minor_version, int patch_version, int emerg_version)
void lsend_packet_ruleset_nation_groups(struct conn_list *dest, const struct packet_ruleset_nation_groups *packet)
static int send_packet_edit_unit_remove_by_id_100(struct connection *pc, const struct packet_edit_unit_remove_by_id *packet)
static struct packet_ruleset_counter * receive_packet_ruleset_counter_100(struct connection *pc)
static struct packet_edit_player * receive_packet_edit_player_100(struct connection *pc)
void lsend_packet_ruleset_terrain_control(struct conn_list *dest, const struct packet_ruleset_terrain_control *packet)
int send_packet_single_want_hack_req(struct connection *pc, const struct packet_single_want_hack_req *packet)
void dlsend_packet_diplomacy_remove_clause(struct conn_list *dest, int counterpart, int giver, enum clause_type type, int value)
static int send_packet_unit_change_activity_100(struct connection *pc, const struct packet_unit_change_activity *packet)
void dlsend_packet_investigate_finished(struct conn_list *dest, int city_id)
static struct packet_ruleset_trade * receive_packet_ruleset_trade_100(struct connection *pc)
void lsend_packet_ruleset_government_ruler_title(struct conn_list *dest, const struct packet_ruleset_government_ruler_title *packet)
int send_packet_scenario_info(struct connection *pc, const struct packet_scenario_info *packet)
static struct packet_server_setting_str * receive_packet_server_setting_str_100(struct connection *pc)
int send_packet_ruleset_base(struct connection *pc, const struct packet_ruleset_base *packet)
static struct packet_edit_unit_remove * receive_packet_edit_unit_remove_100(struct connection *pc)
static struct packet_ruleset_extra_flag * receive_packet_ruleset_extra_flag_100(struct connection *pc)
void dlsend_packet_unit_remove(struct conn_list *dest, int unit_id)
static struct packet_edit_player_vision * receive_packet_edit_player_vision_100(struct connection *pc)
static struct packet_nuke_tile_info * receive_packet_nuke_tile_info_100(struct connection *pc)
int send_packet_server_setting_int(struct connection *pc, const struct packet_server_setting_int *packet)
int send_packet_web_ruleset_unit_addition(struct connection *pc, const struct packet_web_ruleset_unit_addition *packet)
void lsend_packet_ruleset_music(struct conn_list *dest, const struct packet_ruleset_music *packet)
int send_packet_ruleset_choices(struct connection *pc, const struct packet_ruleset_choices *packet)
static struct packet_edit_city_create * receive_packet_edit_city_create_100(struct connection *pc)
int send_packet_server_setting_control(struct connection *pc, const struct packet_server_setting_control *packet)
static struct packet_timeout_info * receive_packet_timeout_info_100(struct connection *pc)
static int send_packet_ruleset_trade_100(struct connection *pc, const struct packet_ruleset_trade *packet)
static struct packet_ruleset_tech * receive_packet_ruleset_tech_100(struct connection *pc)
static int send_packet_diplomacy_init_meeting_req_100(struct connection *pc, const struct packet_diplomacy_init_meeting_req *packet)
int dsend_packet_chat_msg_req(struct connection *pc, const char *message)
static struct packet_server_join_reply * receive_packet_server_join_reply_100(struct connection *pc)
int send_packet_play_music(struct connection *pc, const struct packet_play_music *packet)
int send_packet_sync_serial_reply(struct connection *pc, const struct packet_sync_serial_reply *packet)
static int send_packet_unit_short_info_100(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
int send_packet_server_setting_bool(struct connection *pc, const struct packet_server_setting_bool *packet)
static struct packet_player_tech_goal * receive_packet_player_tech_goal_100(struct connection *pc)
int dsend_packet_unit_remove(struct connection *pc, int unit_id)
int dsend_packet_city_worklist(struct connection *pc, int city_id, const struct worklist *worklist)
static struct packet_city_change_specialist * receive_packet_city_change_specialist_100(struct connection *pc)
static int send_packet_tile_info_100(struct connection *pc, const struct packet_tile_info *packet)
static struct packet_city_rename * receive_packet_city_rename_100(struct connection *pc)
static struct packet_investigate_started * receive_packet_investigate_started_100(struct connection *pc)
static int send_packet_edit_startpos_full_100(struct connection *pc, const struct packet_edit_startpos_full *packet)
int send_packet_city_change(struct connection *pc, const struct packet_city_change *packet)
static struct packet_server_setting_const * receive_packet_server_setting_const_100(struct connection *pc)
int send_packet_processing_started(struct connection *pc)
static struct packet_vote_new * receive_packet_vote_new_100(struct connection *pc)
static struct packet_unit_orders * receive_packet_unit_orders_100(struct connection *pc)
int send_packet_report_req(struct connection *pc, const struct packet_report_req *packet)
int dsend_packet_diplomacy_create_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
static int send_packet_edit_player_100(struct connection *pc, const struct packet_edit_player *packet)
int send_packet_vote_submit(struct connection *pc, const struct packet_vote_submit *packet)
static struct packet_sync_serial * receive_packet_sync_serial_100(struct connection *pc)
int send_packet_trade_route_info(struct connection *pc, const struct packet_trade_route_info *packet)
static struct packet_unit_info * receive_packet_unit_info_100(struct connection *pc)
static struct packet_new_year * receive_packet_new_year_100(struct connection *pc)
void lsend_packet_city_info(struct conn_list *dest, const struct packet_city_info *packet, bool force_to_send)
const char *const packet_functional_capability
Definition packets_gen.c:30
static int send_packet_server_join_req_100(struct connection *pc, const struct packet_server_join_req *packet)
int dsend_packet_city_make_specialist(struct connection *pc, int city_id, int tile_id)
int send_packet_chat_msg(struct connection *pc, const struct packet_chat_msg *packet)
static int send_packet_diplomacy_accept_treaty_req_100(struct connection *pc, const struct packet_diplomacy_accept_treaty_req *packet)
void lsend_packet_ruleset_control(struct conn_list *dest, const struct packet_ruleset_control *packet)
static struct packet_sync_serial_reply * receive_packet_sync_serial_reply_100(struct connection *pc)
static int send_packet_sync_serial_100(struct connection *pc, const struct packet_sync_serial *packet)
void lsend_packet_popup_image(struct conn_list *dest, const struct packet_popup_image *packet)
static int send_packet_edit_startpos_100(struct connection *pc, const struct packet_edit_startpos *packet)
int send_packet_unit_do_action(struct connection *pc, const struct packet_unit_do_action *packet)
static int send_packet_diplomacy_accept_treaty_100(struct connection *pc, const struct packet_diplomacy_accept_treaty *packet)
static struct packet_nation_select_req * receive_packet_nation_select_req_100(struct connection *pc)
int send_packet_early_chat_msg(struct connection *pc, const struct packet_early_chat_msg *packet)
static int send_packet_ruleset_tech_100(struct connection *pc, const struct packet_ruleset_tech *packet)
static struct packet_city_buy * receive_packet_city_buy_100(struct connection *pc)
static struct packet_edit_unit_remove_by_id * receive_packet_edit_unit_remove_by_id_100(struct connection *pc)
static int send_packet_ruleset_select_100(struct connection *pc, const struct packet_ruleset_select *packet)
int send_packet_ruleset_action_auto(struct connection *pc, const struct packet_ruleset_action_auto *packet)
int dsend_packet_nuke_tile_info(struct connection *pc, int tile)
static int send_packet_research_info_100(struct connection *pc, const struct packet_research_info *packet)
int send_packet_city_make_worker(struct connection *pc, const struct packet_city_make_worker *packet)
static int send_packet_ruleset_description_part_100(struct connection *pc, const struct packet_ruleset_description_part *packet)
static int send_packet_calendar_info_100(struct connection *pc, const struct packet_calendar_info *packet)
int send_packet_diplomacy_remove_clause_req(struct connection *pc, const struct packet_diplomacy_remove_clause_req *packet)
int dsend_packet_diplomacy_cancel_meeting_req(struct connection *pc, int counterpart)
int send_packet_unit_orders(struct connection *pc, const struct packet_unit_orders *packet)
int send_packet_conn_ping_info(struct connection *pc, const struct packet_conn_ping_info *packet)
int dsend_packet_unit_get_actions(struct connection *pc, int actor_unit_id, int target_unit_id, int target_tile_id, int target_extra_id, int request_kind)
int dsend_packet_player_tech_goal(struct connection *pc, int tech)
static int send_packet_ruleset_action_enabler_100(struct connection *pc, const struct packet_ruleset_action_enabler *packet)
int send_packet_player_rates(struct connection *pc, const struct packet_player_rates *packet)
int send_packet_player_diplstate(struct connection *pc, const struct packet_player_diplstate *packet)
int dsend_packet_city_change(struct connection *pc, int city_id, int production_kind, int production_value)
int send_packet_edit_player_remove(struct connection *pc, const struct packet_edit_player_remove *packet)
static struct packet_web_cma_clear * receive_packet_web_cma_clear_100(struct connection *pc)
static struct packet_server_setting_bool * receive_packet_server_setting_bool_100(struct connection *pc)
static struct packet_endgame_player * receive_packet_endgame_player_100(struct connection *pc)
static int send_packet_city_make_specialist_100(struct connection *pc, const struct packet_city_make_specialist *packet)
static int send_packet_edit_toggle_fogofwar_100(struct connection *pc, const struct packet_edit_toggle_fogofwar *packet)
static struct packet_diplomacy_cancel_meeting * receive_packet_diplomacy_cancel_meeting_100(struct connection *pc)
int send_packet_city_sabotage_list(struct connection *pc, const struct packet_city_sabotage_list *packet)
static int send_packet_edit_unit_create_100(struct connection *pc, const struct packet_edit_unit_create *packet)
static int send_packet_city_refresh_100(struct connection *pc, const struct packet_city_refresh *packet)
static int send_packet_conn_ping_info_100(struct connection *pc, const struct packet_conn_ping_info *packet)
static int send_packet_diplomacy_create_clause_req_100(struct connection *pc, const struct packet_diplomacy_create_clause_req *packet)
void lsend_packet_team_name_info(struct conn_list *dest, const struct packet_team_name_info *packet)
static int send_packet_client_info_100(struct connection *pc, const struct packet_client_info *packet)
static struct packet_edit_unit_create * receive_packet_edit_unit_create_100(struct connection *pc)
static struct packet_city_nationalities * receive_packet_city_nationalities_100(struct connection *pc)
int send_packet_web_cma_clear(struct connection *pc, const struct packet_web_cma_clear *packet)
void lsend_packet_ruleset_effect(struct conn_list *dest, const struct packet_ruleset_effect *packet)
int dsend_packet_ruleset_multiplier(struct connection *pc, Multiplier_type_id id, int start, int stop, int step, int def, int offset, int factor, int minimum_turns, const char *name, const char *rule_name, int reqs_count, const struct requirement *reqs, const char *helptext)
static int send_packet_vote_new_100(struct connection *pc, const struct packet_vote_new *packet)
int send_packet_city_refresh(struct connection *pc, const struct packet_city_refresh *packet)
void lsend_packet_unit_short_info(struct conn_list *dest, const struct packet_unit_short_info *packet, bool force_to_send)
static int send_packet_city_buy_100(struct connection *pc, const struct packet_city_buy *packet)
static int send_packet_city_name_suggestion_req_100(struct connection *pc, const struct packet_city_name_suggestion_req *packet)
int send_packet_diplomacy_accept_treaty_req(struct connection *pc, const struct packet_diplomacy_accept_treaty_req *packet)
int send_packet_unit_action_answer(struct connection *pc, const struct packet_unit_action_answer *packet)
static int send_packet_scenario_description_100(struct connection *pc, const struct packet_scenario_description *packet)
void lsend_packet_ruleset_terrain_flag(struct conn_list *dest, const struct packet_ruleset_terrain_flag *packet)
void lsend_packet_ruleset_unit_class(struct conn_list *dest, const struct packet_ruleset_unit_class *packet)
static int send_packet_city_update_counters_100(struct connection *pc, const struct packet_city_update_counters *packet)
static struct packet_chat_msg_req * receive_packet_chat_msg_req_100(struct connection *pc)
static struct packet_web_cma_set * receive_packet_web_cma_set_100(struct connection *pc)
static int send_packet_timeout_info_100(struct connection *pc, const struct packet_timeout_info *packet)
static struct packet_diplomacy_create_clause_req * receive_packet_diplomacy_create_clause_req_100(struct connection *pc)
int dsend_packet_unit_server_side_agent_set(struct connection *pc, int unit_id, enum server_side_agent agent)
int send_packet_edit_player_vision(struct connection *pc, const struct packet_edit_player_vision *packet)
int send_packet_single_want_hack_reply(struct connection *pc, const struct packet_single_want_hack_reply *packet)
static struct packet_ruleset_terrain * receive_packet_ruleset_terrain_100(struct connection *pc)
static int send_packet_ruleset_unit_class_100(struct connection *pc, const struct packet_ruleset_unit_class *packet)
static int send_packet_player_info_100(struct connection *pc, const struct packet_player_info *packet)
int send_packet_end_phase(struct connection *pc)
int send_packet_edit_startpos_full(struct connection *pc, const struct packet_edit_startpos_full *packet)
void lsend_packet_ruleset_disaster(struct conn_list *dest, const struct packet_ruleset_disaster *packet)
void lsend_packet_spaceship_info(struct conn_list *dest, const struct packet_spaceship_info *packet)
int dsend_packet_diplomacy_init_meeting(struct connection *pc, int counterpart, int initiated_from)
static struct packet_trade_route_info * receive_packet_trade_route_info_100(struct connection *pc)
static struct packet_edit_player_create * receive_packet_edit_player_create_100(struct connection *pc)
static int send_packet_save_scenario_100(struct connection *pc, const struct packet_save_scenario *packet)
int dsend_packet_city_change_specialist(struct connection *pc, int city_id, Specialist_type_id from, Specialist_type_id to)
int send_packet_ruleset_terrain(struct connection *pc, const struct packet_ruleset_terrain *packet)
static int send_packet_ruleset_unit_class_flag_100(struct connection *pc, const struct packet_ruleset_unit_class_flag *packet)
static int send_packet_edit_tile_extra_100(struct connection *pc, const struct packet_edit_tile_extra *packet)
static int send_packet_city_name_suggestion_info_100(struct connection *pc, const struct packet_city_name_suggestion_info *packet)
void lsend_packet_page_msg(struct conn_list *dest, const struct packet_page_msg *packet)
static int send_packet_unit_type_upgrade_100(struct connection *pc, const struct packet_unit_type_upgrade *packet)
int send_packet_player_info(struct connection *pc, const struct packet_player_info *packet)
static int send_packet_player_place_infra_100(struct connection *pc, const struct packet_player_place_infra *packet)
int send_packet_city_options_req(struct connection *pc, const struct packet_city_options_req *packet)
static int send_packet_end_phase_100(struct connection *pc)
int dsend_packet_nation_select_req(struct connection *pc, int player_no, Nation_type_id nation_no, bool is_male, const char *name, int style)
int send_packet_ruleset_clause(struct connection *pc, const struct packet_ruleset_clause *packet)
int send_packet_diplomacy_create_clause_req(struct connection *pc, const struct packet_diplomacy_create_clause_req *packet)
static int send_packet_worker_task_100(struct connection *pc, const struct packet_worker_task *packet)
static struct packet_ruleset_government * receive_packet_ruleset_government_100(struct connection *pc)
static int send_packet_spaceship_launch_100(struct connection *pc)
int send_packet_city_nationalities(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
static int send_packet_edit_player_remove_100(struct connection *pc, const struct packet_edit_player_remove *packet)
int dsend_packet_edit_startpos(struct connection *pc, int id, bool removal, int tag)
static struct packet_ruleset_music * receive_packet_ruleset_music_100(struct connection *pc)
static int send_packet_unit_do_action_100(struct connection *pc, const struct packet_unit_do_action *packet)
int send_packet_nation_select_req(struct connection *pc, const struct packet_nation_select_req *packet)
static struct packet_ruleset_unit_class * receive_packet_ruleset_unit_class_100(struct connection *pc)
void lsend_packet_ruleset_description_part(struct conn_list *dest, const struct packet_ruleset_description_part *packet)
static int send_packet_end_turn_100(struct connection *pc)
static struct packet_connect_msg * receive_packet_connect_msg_100(struct connection *pc)
void lsend_packet_city_short_info(struct conn_list *dest, const struct packet_city_short_info *packet)
int dsend_packet_city_refresh(struct connection *pc, int city_id)
void lsend_packet_ruleset_government(struct conn_list *dest, const struct packet_ruleset_government *packet)
int send_packet_ruleset_tech(struct connection *pc, const struct packet_ruleset_tech *packet)
static int send_packet_nuke_tile_info_100(struct connection *pc, const struct packet_nuke_tile_info *packet)
static int send_packet_server_setting_enum_100(struct connection *pc, const struct packet_server_setting_enum *packet)
static struct packet_ruleset_action_enabler * receive_packet_ruleset_action_enabler_100(struct connection *pc)
static struct packet_unit_change_activity * receive_packet_unit_change_activity_100(struct connection *pc)
static int send_packet_diplomacy_remove_clause_100(struct connection *pc, const struct packet_diplomacy_remove_clause *packet)
static int send_packet_player_phase_done_100(struct connection *pc, const struct packet_player_phase_done *packet)
int send_packet_player_place_infra(struct connection *pc, const struct packet_player_place_infra *packet)
int send_packet_ruleset_nation(struct connection *pc, const struct packet_ruleset_nation *packet)
static int send_packet_city_make_worker_100(struct connection *pc, const struct packet_city_make_worker *packet)
static int send_packet_server_shutdown_100(struct connection *pc)
int send_packet_begin_turn(struct connection *pc)
void lsend_packet_ruleset_unit_bonus(struct conn_list *dest, const struct packet_ruleset_unit_bonus *packet)
static struct packet_unit_sscs_set * receive_packet_unit_sscs_set_100(struct connection *pc)
static int send_packet_ruleset_base_100(struct connection *pc, const struct packet_ruleset_base *packet)
void dlsend_packet_nuke_tile_info(struct conn_list *dest, int tile)
static struct packet_client_info * receive_packet_client_info_100(struct connection *pc)
int send_packet_connect_msg(struct connection *pc, const struct packet_connect_msg *packet)
static struct packet_unit_remove * receive_packet_unit_remove_100(struct connection *pc)
int dsend_packet_city_make_worker(struct connection *pc, int city_id, int tile_id)
static int send_packet_ruleset_effect_100(struct connection *pc, const struct packet_ruleset_effect *packet)
static int send_packet_ruleset_game_100(struct connection *pc, const struct packet_ruleset_game *packet)
static struct packet_calendar_info * receive_packet_calendar_info_100(struct connection *pc)
int send_packet_player_remove(struct connection *pc, const struct packet_player_remove *packet)
static struct packet_diplomacy_create_clause * receive_packet_diplomacy_create_clause_100(struct connection *pc)
static struct packet_web_player_info_addition * receive_packet_web_player_info_addition_100(struct connection *pc)
int send_packet_diplomacy_cancel_meeting_req(struct connection *pc, const struct packet_diplomacy_cancel_meeting_req *packet)
static struct packet_play_music * receive_packet_play_music_100(struct connection *pc)
void lsend_packet_worker_task(struct conn_list *dest, const struct packet_worker_task *packet)
int dsend_packet_player_phase_done(struct connection *pc, int turn)
static int send_packet_unit_sscs_set_100(struct connection *pc, const struct packet_unit_sscs_set *packet)
int send_packet_investigate_started(struct connection *pc, const struct packet_investigate_started *packet)
static int send_packet_early_chat_msg_100(struct connection *pc, const struct packet_early_chat_msg *packet)
static int send_packet_unit_action_answer_100(struct connection *pc, const struct packet_unit_action_answer *packet)
static struct packet_city_name_suggestion_info * receive_packet_city_name_suggestion_info_100(struct connection *pc)
int send_packet_investigate_finished(struct connection *pc, const struct packet_investigate_finished *packet)
static int send_packet_play_music_100(struct connection *pc, const struct packet_play_music *packet)
int send_packet_client_heartbeat(struct connection *pc)
int send_packet_city_short_info(struct connection *pc, const struct packet_city_short_info *packet)
int send_packet_edit_object_created(struct connection *pc, const struct packet_edit_object_created *packet)
static int send_packet_player_multiplier_100(struct connection *pc, const struct packet_player_multiplier *packet)
int send_packet_authentication_reply(struct connection *pc, const struct packet_authentication_reply *packet)
int send_packet_edit_player(struct connection *pc, const struct packet_edit_player *packet)
static int send_packet_city_change_specialist_100(struct connection *pc, const struct packet_city_change_specialist *packet)
static int send_packet_edit_city_remove_100(struct connection *pc, const struct packet_edit_city_remove *packet)
static struct packet_ruleset_style * receive_packet_ruleset_style_100(struct connection *pc)
static int send_packet_edit_city_100(struct connection *pc, const struct packet_edit_city *packet)
void lsend_packet_ruleset_base(struct conn_list *dest, const struct packet_ruleset_base *packet)
int dsend_packet_game_load(struct connection *pc, bool load_successful, const char *load_filename)
int dsend_packet_unit_actions(struct connection *pc, int actor_unit_id, int target_unit_id, int target_city_id, int target_tile_id, int target_extra_id, int request_kind, const struct act_prob *action_probabilities)
static int send_packet_diplomacy_create_clause_100(struct connection *pc, const struct packet_diplomacy_create_clause *packet)
static int send_packet_ruleset_impr_flag_100(struct connection *pc, const struct packet_ruleset_impr_flag *packet)
int send_packet_unit_short_info(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
static struct packet_end_turn * receive_packet_end_turn_100(struct connection *pc)
int send_packet_ruleset_terrain_flag(struct connection *pc, const struct packet_ruleset_terrain_flag *packet)
void lsend_packet_unit_info(struct conn_list *dest, const struct packet_unit_info *packet)
int dsend_packet_player_change_government(struct connection *pc, Government_type_id government)
void lsend_packet_ruleset_resource(struct conn_list *dest, const struct packet_ruleset_resource *packet)
static int send_packet_vote_update_100(struct connection *pc, const struct packet_vote_update *packet)
void dlsend_packet_diplomacy_create_clause(struct conn_list *dest, int counterpart, int giver, enum clause_type type, int value)
static struct packet_vote_remove * receive_packet_vote_remove_100(struct connection *pc)
int send_packet_city_update_counters(struct connection *pc, const struct packet_city_update_counters *packet)
void lsend_packet_ruleset_specialist(struct conn_list *dest, const struct packet_ruleset_specialist *packet)
int send_packet_conn_info(struct connection *pc, const struct packet_conn_info *packet)
void lsend_packet_play_music(struct conn_list *dest, const struct packet_play_music *packet)
static int send_packet_player_tech_goal_100(struct connection *pc, const struct packet_player_tech_goal *packet)
static struct packet_diplomacy_init_meeting_req * receive_packet_diplomacy_init_meeting_req_100(struct connection *pc)
static int send_packet_city_change_100(struct connection *pc, const struct packet_city_change *packet)
int send_packet_game_info(struct connection *pc, const struct packet_game_info *packet)
static int send_packet_ruleset_goods_100(struct connection *pc, const struct packet_ruleset_goods *packet)
int dsend_packet_edit_player_create(struct connection *pc, int tag)
void lsend_packet_city_name_suggestion_info(struct conn_list *dest, const struct packet_city_name_suggestion_info *packet)
static int send_packet_endgame_report_100(struct connection *pc, const struct packet_endgame_report *packet)
static int send_packet_server_setting_bitwise_100(struct connection *pc, const struct packet_server_setting_bitwise *packet)
int send_packet_web_city_info_addition(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
int send_packet_edit_unit_remove_by_id(struct connection *pc, const struct packet_edit_unit_remove_by_id *packet)
int send_packet_diplomacy_cancel_pact(struct connection *pc, const struct packet_diplomacy_cancel_pact *packet)
static struct packet_vote_resolve * receive_packet_vote_resolve_100(struct connection *pc)
void dlsend_packet_diplomacy_accept_treaty(struct conn_list *dest, int counterpart, bool I_accepted, bool other_accepted)
static struct packet_ruleset_resource * receive_packet_ruleset_resource_100(struct connection *pc)
static struct packet_research_info * receive_packet_research_info_100(struct connection *pc)
static int send_packet_report_req_100(struct connection *pc, const struct packet_report_req *packet)
static struct packet_ruleset_goods * receive_packet_ruleset_goods_100(struct connection *pc)
int send_packet_edit_recalculate_borders(struct connection *pc)
static int send_packet_conn_info_100(struct connection *pc, const struct packet_conn_info *packet)
int send_packet_set_topology(struct connection *pc, const struct packet_set_topology *packet)
static int send_packet_web_city_info_addition_100(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
int send_packet_spaceship_place(struct connection *pc, const struct packet_spaceship_place *packet)
void dlsend_packet_start_phase(struct conn_list *dest, int phase)
static struct packet_ruleset_tech_flag * receive_packet_ruleset_tech_flag_100(struct connection *pc)
void dlsend_packet_city_name_suggestion_info(struct conn_list *dest, int unit_id, const char *name)
void lsend_packet_ruleset_tech(struct conn_list *dest, const struct packet_ruleset_tech *packet)
int send_packet_authentication_req(struct connection *pc, const struct packet_authentication_req *packet)
void lsend_packet_ruleset_trade(struct conn_list *dest, const struct packet_ruleset_trade *packet)
static struct packet_edit_recalculate_borders * receive_packet_edit_recalculate_borders_100(struct connection *pc)
int send_packet_map_info(struct connection *pc, const struct packet_map_info *packet)
int send_packet_freeze_client(struct connection *pc)
static struct packet_ruleset_impr_flag * receive_packet_ruleset_impr_flag_100(struct connection *pc)
int send_packet_player_attribute_chunk(struct connection *pc, const struct packet_player_attribute_chunk *packet)
int send_packet_tile_info(struct connection *pc, const struct packet_tile_info *packet)
int send_packet_edit_unit(struct connection *pc, const struct packet_edit_unit *packet)
static struct packet_scenario_description * receive_packet_scenario_description_100(struct connection *pc)
static int send_packet_single_want_hack_req_100(struct connection *pc, const struct packet_single_want_hack_req *packet)
static int send_packet_start_phase_100(struct connection *pc, const struct packet_start_phase *packet)
static struct packet_player_info * receive_packet_player_info_101(struct connection *pc)
int dsend_packet_player_research(struct connection *pc, int tech)
static struct packet_ruleset_unit_class_flag * receive_packet_ruleset_unit_class_flag_100(struct connection *pc)
static struct packet_city_options_req * receive_packet_city_options_req_100(struct connection *pc)
static struct packet_client_heartbeat * receive_packet_client_heartbeat_100(struct connection *pc)
static struct packet_begin_turn * receive_packet_begin_turn_100(struct connection *pc)
static int send_packet_investigate_finished_100(struct connection *pc, const struct packet_investigate_finished *packet)
static struct packet_processing_started * receive_packet_processing_started_100(struct connection *pc)
int dsend_packet_unit_action_query(struct connection *pc, int actor_id, int target_id, action_id action_type, int request_kind)
int dsend_packet_city_remove(struct connection *pc, int city_id)
static struct packet_investigate_finished * receive_packet_investigate_finished_100(struct connection *pc)
int send_packet_nuke_tile_info(struct connection *pc, const struct packet_nuke_tile_info *packet)
int send_packet_ruleset_unit_class_flag(struct connection *pc, const struct packet_ruleset_unit_class_flag *packet)
static struct packet_edit_check_tiles * receive_packet_edit_check_tiles_100(struct connection *pc)
int dsend_packet_city_rename(struct connection *pc, int city_id, const char *name)
static int send_packet_ruleset_specialist_100(struct connection *pc, const struct packet_ruleset_specialist *packet)
static int send_packet_set_topology_100(struct connection *pc, const struct packet_set_topology *packet)
static int send_packet_ruleset_extra_flag_100(struct connection *pc, const struct packet_ruleset_extra_flag *packet)
static int send_packet_ruleset_disaster_100(struct connection *pc, const struct packet_ruleset_disaster *packet)
int dsend_packet_sync_serial_reply(struct connection *pc, int serial)
static struct packet_diplomacy_cancel_meeting_req * receive_packet_diplomacy_cancel_meeting_req_100(struct connection *pc)
static struct packet_ruleset_disaster * receive_packet_ruleset_disaster_100(struct connection *pc)
int dsend_packet_investigate_finished(struct connection *pc, int city_id)
int send_packet_ruleset_terrain_control(struct connection *pc, const struct packet_ruleset_terrain_control *packet)
static struct packet_diplomacy_remove_clause * receive_packet_diplomacy_remove_clause_100(struct connection *pc)
void lsend_packet_ruleset_action_enabler(struct conn_list *dest, const struct packet_ruleset_action_enabler *packet)
static struct packet_ruleset_nation * receive_packet_ruleset_nation_100(struct connection *pc)
int send_packet_city_buy(struct connection *pc, const struct packet_city_buy *packet)
void dlsend_packet_game_load(struct conn_list *dest, bool load_successful, const char *load_filename)
int dsend_packet_edit_object_created(struct connection *pc, int tag, int id)
static int send_packet_ruleset_unit_flag_100(struct connection *pc, const struct packet_ruleset_unit_flag *packet)
static struct packet_city_sell * receive_packet_city_sell_100(struct connection *pc)
int send_packet_edit_scenario_desc(struct connection *pc, const struct packet_edit_scenario_desc *packet)
const char * packet_name(enum packet_type type)
Definition packets_gen.c:48
static int send_packet_ruleset_multiplier_100(struct connection *pc, const struct packet_ruleset_multiplier *packet)
static struct packet_scenario_info * receive_packet_scenario_info_100(struct connection *pc)
static int send_packet_ruleset_extra_100(struct connection *pc, const struct packet_ruleset_extra *packet)
int send_packet_diplomacy_create_clause(struct connection *pc, const struct packet_diplomacy_create_clause *packet)
static struct packet_ruleset_select * receive_packet_ruleset_select_100(struct connection *pc)
int send_packet_ruleset_trade(struct connection *pc, const struct packet_ruleset_trade *packet)
static int send_packet_player_change_government_100(struct connection *pc, const struct packet_player_change_government *packet)
int send_packet_player_ready(struct connection *pc, const struct packet_player_ready *packet)
static struct packet_edit_unit * receive_packet_edit_unit_100(struct connection *pc)
static struct packet_diplomacy_accept_treaty_req * receive_packet_diplomacy_accept_treaty_req_100(struct connection *pc)
static struct packet_server_setting_control * receive_packet_server_setting_control_100(struct connection *pc)
static struct packet_player_remove * receive_packet_player_remove_100(struct connection *pc)
static struct packet_vote_submit * receive_packet_vote_submit_100(struct connection *pc)
static int send_packet_diplomacy_cancel_pact_100(struct connection *pc, const struct packet_diplomacy_cancel_pact *packet)
void lsend_packet_nuke_tile_info(struct conn_list *dest, const struct packet_nuke_tile_info *packet)
void lsend_packet_freeze_client(struct conn_list *dest)
void dlsend_packet_diplomacy_cancel_meeting(struct conn_list *dest, int counterpart, int initiated_from)
static int send_packet_ruleset_unit_bonus_100(struct connection *pc, const struct packet_ruleset_unit_bonus *packet)
void lsend_packet_nation_availability(struct conn_list *dest, const struct packet_nation_availability *packet)
int dsend_packet_edit_unit_remove(struct connection *pc, int owner, int tile, Unit_type_id type, int count)
static int send_packet_edit_unit_100(struct connection *pc, const struct packet_edit_unit *packet)
int send_packet_city_change_specialist(struct connection *pc, const struct packet_city_change_specialist *packet)
static int send_packet_web_cma_set_100(struct connection *pc, const struct packet_web_cma_set *packet)
static struct packet_ruleset_terrain_flag * receive_packet_ruleset_terrain_flag_100(struct connection *pc)
void lsend_packet_web_city_info_addition(struct conn_list *dest, const struct packet_web_city_info_addition *packet, bool force_to_send)
static int send_packet_edit_object_created_100(struct connection *pc, const struct packet_edit_object_created *packet)
int send_packet_calendar_info(struct connection *pc, const struct packet_calendar_info *packet)
int dsend_packet_edit_unit_remove_by_id(struct connection *pc, int id)
static struct packet_unknown_research * receive_packet_unknown_research_100(struct connection *pc)
static struct packet_player_place_infra * receive_packet_player_place_infra_100(struct connection *pc)
static int send_packet_player_remove_100(struct connection *pc, const struct packet_player_remove *packet)
int dsend_packet_investigate_started(struct connection *pc, int city_id)
static struct packet_authentication_req * receive_packet_authentication_req_100(struct connection *pc)
int dsend_packet_diplomacy_remove_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
static struct packet_edit_scenario_desc * receive_packet_edit_scenario_desc_100(struct connection *pc)
static struct packet_city_make_specialist * receive_packet_city_make_specialist_100(struct connection *pc)
static struct packet_edit_toggle_fogofwar * receive_packet_edit_toggle_fogofwar_100(struct connection *pc)
static struct packet_player_ready * receive_packet_player_ready_100(struct connection *pc)
int send_packet_vote_remove(struct connection *pc, const struct packet_vote_remove *packet)
int dsend_packet_city_buy(struct connection *pc, int city_id)
int send_packet_unit_get_actions(struct connection *pc, const struct packet_unit_get_actions *packet)
int send_packet_unit_change_activity(struct connection *pc, const struct packet_unit_change_activity *packet)
static struct packet_city_refresh * receive_packet_city_refresh_100(struct connection *pc)
void dlsend_packet_investigate_started(struct conn_list *dest, int city_id)
int dsend_packet_start_phase(struct connection *pc, int phase)
static int send_packet_unit_server_side_agent_set_100(struct connection *pc, const struct packet_unit_server_side_agent_set *packet)
static struct packet_game_load * receive_packet_game_load_100(struct connection *pc)
static int send_packet_edit_mode_100(struct connection *pc, const struct packet_edit_mode *packet)
static int send_packet_server_setting_const_100(struct connection *pc, const struct packet_server_setting_const *packet)
void lsend_packet_ruleset_style(struct conn_list *dest, const struct packet_ruleset_style *packet)
int send_packet_chat_msg_req(struct connection *pc, const struct packet_chat_msg_req *packet)
void lsend_packet_conn_ping_info(struct conn_list *dest, const struct packet_conn_ping_info *packet)
static int send_packet_server_info_100(struct connection *pc, const struct packet_server_info *packet)
static int send_packet_ruleset_building_100(struct connection *pc, const struct packet_ruleset_building *packet)
void lsend_packet_end_phase(struct conn_list *dest)
int dsend_packet_edit_unit_create(struct connection *pc, int owner, int tile, Unit_type_id type, int count, int tag)
int dsend_packet_edit_player_remove(struct connection *pc, int id)
int dsend_packet_unit_type_upgrade(struct connection *pc, Unit_type_id type)
int send_packet_ruleset_action(struct connection *pc, const struct packet_ruleset_action *packet)
void lsend_packet_unit_combat_info(struct conn_list *dest, const struct packet_unit_combat_info *packet)
static int send_packet_unit_get_actions_100(struct connection *pc, const struct packet_unit_get_actions *packet)
static struct packet_player_diplstate * receive_packet_player_diplstate_100(struct connection *pc)
static struct packet_edit_city * receive_packet_edit_city_100(struct connection *pc)
static struct packet_conn_pong * receive_packet_conn_pong_100(struct connection *pc)
static struct packet_ruleset_tech_class * receive_packet_ruleset_tech_class_100(struct connection *pc)
int send_packet_edit_city_remove(struct connection *pc, const struct packet_edit_city_remove *packet)
static struct packet_diplomacy_init_meeting * receive_packet_diplomacy_init_meeting_100(struct connection *pc)
int send_packet_ruleset_effect(struct connection *pc, const struct packet_ruleset_effect *packet)
static int send_packet_ruleset_action_100(struct connection *pc, const struct packet_ruleset_action *packet)
static int send_packet_server_setting_str_100(struct connection *pc, const struct packet_server_setting_str *packet)
static struct packet_ruleset_action * receive_packet_ruleset_action_100(struct connection *pc)
int send_packet_edit_mode(struct connection *pc, const struct packet_edit_mode *packet)
static int send_packet_ruleset_summary_100(struct connection *pc, const struct packet_ruleset_summary *packet)
int dsend_packet_player_place_infra(struct connection *pc, int tile, int extra)
int send_packet_ruleset_style(struct connection *pc, const struct packet_ruleset_style *packet)
static struct packet_ruleset_road * receive_packet_ruleset_road_100(struct connection *pc)
int send_packet_ruleset_disaster(struct connection *pc, const struct packet_ruleset_disaster *packet)
static int send_packet_unit_actions_100(struct connection *pc, const struct packet_unit_actions *packet)
void lsend_packet_server_shutdown(struct conn_list *dest)
static int send_packet_edit_scenario_desc_100(struct connection *pc, const struct packet_edit_scenario_desc *packet)
int dsend_packet_diplomacy_accept_treaty(struct connection *pc, int counterpart, bool I_accepted, bool other_accepted)
static struct packet_player_info * receive_packet_player_info_100(struct connection *pc)
int send_packet_ruleset_unit(struct connection *pc, const struct packet_ruleset_unit *packet)
static int send_packet_ruleset_achievement_100(struct connection *pc, const struct packet_ruleset_achievement *packet)
static struct packet_early_chat_msg * receive_packet_early_chat_msg_100(struct connection *pc)
static int send_packet_ruleset_terrain_flag_100(struct connection *pc, const struct packet_ruleset_terrain_flag *packet)
static struct packet_edit_player_remove * receive_packet_edit_player_remove_100(struct connection *pc)
static int send_packet_popup_image_100(struct connection *pc, const struct packet_popup_image *packet)
static struct packet_ruleset_government_ruler_title * receive_packet_ruleset_government_ruler_title_100(struct connection *pc)
int send_packet_vote_update(struct connection *pc, const struct packet_vote_update *packet)
int dsend_packet_save_scenario(struct connection *pc, const char *name)
static struct packet_player_phase_done * receive_packet_player_phase_done_100(struct connection *pc)
static int send_packet_investigate_started_100(struct connection *pc, const struct packet_investigate_started *packet)
int dsend_packet_edit_tile_extra(struct connection *pc, int tile, int extra_type_id, bool removal, int eowner, int size)
int send_packet_ruleset_nation_groups(struct connection *pc, const struct packet_ruleset_nation_groups *packet)
int send_packet_server_join_reply(struct connection *pc, const struct packet_server_join_reply *packet)
int send_packet_edit_startpos(struct connection *pc, const struct packet_edit_startpos *packet)
void lsend_packet_ruleset_tech_flag(struct conn_list *dest, const struct packet_ruleset_tech_flag *packet)
void lsend_packet_investigate_finished(struct conn_list *dest, const struct packet_investigate_finished *packet)
int dsend_packet_unit_action_answer(struct connection *pc, int actor_id, int target_id, int cost, action_id action_type, int request_kind)
int send_packet_edit_tile_terrain(struct connection *pc, const struct packet_edit_tile_terrain *packet)
static struct packet_city_short_info * receive_packet_city_short_info_100(struct connection *pc)
static int send_packet_unit_action_query_100(struct connection *pc, const struct packet_unit_action_query *packet)
int send_packet_edit_tile(struct connection *pc, const struct packet_edit_tile *packet)
static struct packet_diplomacy_remove_clause_req * receive_packet_diplomacy_remove_clause_req_100(struct connection *pc)
static int send_packet_server_setting_control_100(struct connection *pc, const struct packet_server_setting_control *packet)
static struct packet_player_change_government * receive_packet_player_change_government_100(struct connection *pc)
int send_packet_server_setting_enum(struct connection *pc, const struct packet_server_setting_enum *packet)
void lsend_packet_achievement_info(struct conn_list *dest, const struct packet_achievement_info *packet)
int send_packet_edit_check_tiles(struct connection *pc)
int send_packet_ruleset_control(struct connection *pc, const struct packet_ruleset_control *packet)
static int send_packet_chat_msg_req_100(struct connection *pc, const struct packet_chat_msg_req *packet)
void lsend_packet_city_sabotage_list(struct conn_list *dest, const struct packet_city_sabotage_list *packet)
static struct packet_web_city_info_addition * receive_packet_web_city_info_addition_100(struct connection *pc)
static struct packet_player_attribute_chunk * receive_packet_player_attribute_chunk_100(struct connection *pc)
int send_packet_diplomacy_remove_clause(struct connection *pc, const struct packet_diplomacy_remove_clause *packet)
static int send_packet_new_year_100(struct connection *pc, const struct packet_new_year *packet)
int send_packet_ruleset_government_ruler_title(struct connection *pc, const struct packet_ruleset_government_ruler_title *packet)
int send_packet_diplomacy_cancel_meeting(struct connection *pc, const struct packet_diplomacy_cancel_meeting *packet)
static int send_packet_unit_combat_info_100(struct connection *pc, const struct packet_unit_combat_info *packet)
static struct packet_conn_info * receive_packet_conn_info_100(struct connection *pc)
int send_packet_thaw_client(struct connection *pc)
static int send_packet_city_rename_100(struct connection *pc, const struct packet_city_rename *packet)
static struct packet_ruleset_extra * receive_packet_ruleset_extra_100(struct connection *pc)
int send_packet_edit_player_create(struct connection *pc, const struct packet_edit_player_create *packet)
int send_packet_unit_info(struct connection *pc, const struct packet_unit_info *packet)
int send_packet_ruleset_action_enabler(struct connection *pc, const struct packet_ruleset_action_enabler *packet)
static int send_packet_authentication_req_100(struct connection *pc, const struct packet_authentication_req *packet)
static int send_packet_city_worklist_100(struct connection *pc, const struct packet_city_worklist *packet)
static int send_packet_rulesets_ready_100(struct connection *pc)
int send_packet_player_tech_goal(struct connection *pc, const struct packet_player_tech_goal *packet)
int send_packet_diplomacy_init_meeting(struct connection *pc, const struct packet_diplomacy_init_meeting *packet)
static struct packet_diplomacy_accept_treaty * receive_packet_diplomacy_accept_treaty_100(struct connection *pc)
static int send_packet_unit_info_100(struct connection *pc, const struct packet_unit_info *packet)
int send_packet_team_name_info(struct connection *pc, const struct packet_team_name_info *packet)
static struct packet_edit_tile_extra * receive_packet_edit_tile_extra_100(struct connection *pc)
static struct packet_server_shutdown * receive_packet_server_shutdown_100(struct connection *pc)
int dsend_packet_single_want_hack_reply(struct connection *pc, bool you_have_hack)
static int send_packet_client_heartbeat_100(struct connection *pc)
int send_packet_server_shutdown(struct connection *pc)
static int send_packet_city_options_req_100(struct connection *pc, const struct packet_city_options_req *packet)
int send_packet_research_info(struct connection *pc, const struct packet_research_info *packet)
static struct packet_server_setting_int * receive_packet_server_setting_int_100(struct connection *pc)
int dsend_packet_edit_fogofwar_state(struct connection *pc, bool enabled)
static int send_packet_player_research_100(struct connection *pc, const struct packet_player_research *packet)
static struct packet_freeze_client * receive_packet_freeze_client_100(struct connection *pc)
int send_packet_vote_new(struct connection *pc, const struct packet_vote_new *packet)
int send_packet_unit_sscs_set(struct connection *pc, const struct packet_unit_sscs_set *packet)
void lsend_packet_ruleset_tech_class(struct conn_list *dest, const struct packet_ruleset_tech_class *packet)
int send_packet_scenario_description(struct connection *pc, const struct packet_scenario_description *packet)
int send_packet_player_attribute_block(struct connection *pc)
static int send_packet_ruleset_nation_sets_100(struct connection *pc, const struct packet_ruleset_nation_sets *packet)
static int send_packet_diplomacy_cancel_meeting_req_100(struct connection *pc, const struct packet_diplomacy_cancel_meeting_req *packet)
int send_packet_achievement_info(struct connection *pc, const struct packet_achievement_info *packet)
int send_packet_web_player_info_addition(struct connection *pc, const struct packet_web_player_info_addition *packet)
int send_packet_web_cma_set(struct connection *pc, const struct packet_web_cma_set *packet)
static struct packet_start_phase * receive_packet_start_phase_100(struct connection *pc)
static int send_packet_web_player_info_addition_100(struct connection *pc, const struct packet_web_player_info_addition *packet)
static struct packet_unit_get_actions * receive_packet_unit_get_actions_100(struct connection *pc)
int dsend_packet_report_req(struct connection *pc, enum report_type type)
static struct packet_player_research * receive_packet_player_research_100(struct connection *pc)
void lsend_packet_ruleset_goods(struct conn_list *dest, const struct packet_ruleset_goods *packet)
int send_packet_spaceship_launch(struct connection *pc)
static int send_packet_team_name_info_100(struct connection *pc, const struct packet_team_name_info *packet)
void lsend_packet_end_turn(struct conn_list *dest)
static int send_packet_web_ruleset_unit_addition_100(struct connection *pc, const struct packet_web_ruleset_unit_addition *packet)
void lsend_packet_diplomacy_remove_clause(struct conn_list *dest, const struct packet_diplomacy_remove_clause *packet)
static struct packet_ruleset_terrain_control * receive_packet_ruleset_terrain_control_100(struct connection *pc)
int send_packet_spaceship_info(struct connection *pc, const struct packet_spaceship_info *packet)
static int send_packet_nation_availability_100(struct connection *pc, const struct packet_nation_availability *packet)
static struct packet_edit_startpos * receive_packet_edit_startpos_100(struct connection *pc)
static struct packet_ruleset_specialist * receive_packet_ruleset_specialist_100(struct connection *pc)
int send_packet_page_msg_part(struct connection *pc, const struct packet_page_msg_part *packet)
void lsend_packet_ruleset_game(struct conn_list *dest, const struct packet_ruleset_game *packet)
int send_packet_ruleset_building(struct connection *pc, const struct packet_ruleset_building *packet)
static int send_packet_city_info_100(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
static int send_packet_page_msg_100(struct connection *pc, const struct packet_page_msg *packet)
void lsend_packet_page_msg_part(struct conn_list *dest, const struct packet_page_msg_part *packet)
void lsend_packet_ruleset_nation(struct conn_list *dest, const struct packet_ruleset_nation *packet)
int send_packet_diplomacy_init_meeting_req(struct connection *pc, const struct packet_diplomacy_init_meeting_req *packet)
static int send_packet_achievement_info_100(struct connection *pc, const struct packet_achievement_info *packet)
int dsend_packet_edit_tile_terrain(struct connection *pc, int tile, Terrain_type_id terrain, int size)
void lsend_packet_ruleset_counter(struct conn_list *dest, const struct packet_ruleset_counter *packet)
static struct packet_ruleset_summary * receive_packet_ruleset_summary_100(struct connection *pc)
void lsend_packet_rulesets_ready(struct conn_list *dest)
static int send_packet_unknown_research_100(struct connection *pc, const struct packet_unknown_research *packet)
static int send_packet_ruleset_nation_groups_100(struct connection *pc, const struct packet_ruleset_nation_groups *packet)
int dsend_packet_edit_city_remove(struct connection *pc, int id)
static struct packet_ruleset_clause * receive_packet_ruleset_clause_100(struct connection *pc)
int dsend_packet_diplomacy_accept_treaty_req(struct connection *pc, int counterpart)
int dsend_packet_city_name_suggestion_req(struct connection *pc, int unit_id)
static struct packet_web_ruleset_unit_addition * receive_packet_web_ruleset_unit_addition_100(struct connection *pc)
static int send_packet_vote_resolve_100(struct connection *pc, const struct packet_vote_resolve *packet)
static struct packet_end_phase * receive_packet_end_phase_100(struct connection *pc)
static int send_packet_processing_started_100(struct connection *pc)
int send_packet_rulesets_ready(struct connection *pc)
static int send_packet_edit_player_create_100(struct connection *pc, const struct packet_edit_player_create *packet)
void lsend_packet_city_remove(struct conn_list *dest, const struct packet_city_remove *packet)
int send_packet_timeout_info(struct connection *pc, const struct packet_timeout_info *packet)
int send_packet_player_research(struct connection *pc, const struct packet_player_research *packet)
static int send_packet_player_info_101(struct connection *pc, const struct packet_player_info *packet)
void lsend_packet_ruleset_impr_flag(struct conn_list *dest, const struct packet_ruleset_impr_flag *packet)
int send_packet_ruleset_music(struct connection *pc, const struct packet_ruleset_music *packet)
int send_packet_start_phase(struct connection *pc, const struct packet_start_phase *packet)
static int send_packet_unit_remove_100(struct connection *pc, const struct packet_unit_remove *packet)
static struct packet_worker_task * receive_packet_worker_task_100(struct connection *pc)
int send_packet_edit_fogofwar_state(struct connection *pc, const struct packet_edit_fogofwar_state *packet)
static struct packet_popup_image * receive_packet_popup_image_100(struct connection *pc)
void lsend_packet_ruleset_extra_flag(struct conn_list *dest, const struct packet_ruleset_extra_flag *packet)
static struct packet_city_make_worker * receive_packet_city_make_worker_100(struct connection *pc)
int send_packet_city_worklist(struct connection *pc, const struct packet_city_worklist *packet)
static int send_packet_edit_city_create_100(struct connection *pc, const struct packet_edit_city_create *packet)
void lsend_packet_diplomacy_init_meeting(struct conn_list *dest, const struct packet_diplomacy_init_meeting *packet)
void lsend_packet_ruleset_road(struct conn_list *dest, const struct packet_ruleset_road *packet)
static int send_packet_diplomacy_init_meeting_100(struct connection *pc, const struct packet_diplomacy_init_meeting *packet)
void lsend_packet_investigate_started(struct conn_list *dest, const struct packet_investigate_started *packet)
static struct packet_single_want_hack_req * receive_packet_single_want_hack_req_100(struct connection *pc)
static struct packet_city_name_suggestion_req * receive_packet_city_name_suggestion_req_100(struct connection *pc)
static int send_packet_city_rally_point_100(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
int send_packet_ruleset_tech_flag(struct connection *pc, const struct packet_ruleset_tech_flag *packet)
void lsend_packet_thaw_client(struct conn_list *dest)
int send_packet_ruleset_description_part(struct connection *pc, const struct packet_ruleset_description_part *packet)
static struct packet_ruleset_base * receive_packet_ruleset_base_100(struct connection *pc)
static int send_packet_vote_submit_100(struct connection *pc, const struct packet_vote_submit *packet)
int dsend_packet_edit_player_vision(struct connection *pc, int player, int tile, bool known, int size)
int dsend_packet_edit_toggle_fogofwar(struct connection *pc, int player)
static int send_packet_spaceship_place_100(struct connection *pc, const struct packet_spaceship_place *packet)
void lsend_packet_ruleset_terrain(struct conn_list *dest, const struct packet_ruleset_terrain *packet)
int dsend_packet_unit_sscs_set(struct connection *pc, int unit_id, enum unit_ss_data_type type, int value)
static int send_packet_city_sell_100(struct connection *pc, const struct packet_city_sell *packet)
static struct packet_conn_ping_info * receive_packet_conn_ping_info_100(struct connection *pc)
static struct packet_city_sabotage_list * receive_packet_city_sabotage_list_100(struct connection *pc)
static struct packet_city_change * receive_packet_city_change_100(struct connection *pc)
static struct packet_processing_finished * receive_packet_processing_finished_100(struct connection *pc)
static int send_packet_begin_turn_100(struct connection *pc)
static struct packet_ruleset_achievement * receive_packet_ruleset_achievement_100(struct connection *pc)
int send_packet_ruleset_impr_flag(struct connection *pc, const struct packet_ruleset_impr_flag *packet)
void lsend_packet_ruleset_action_auto(struct conn_list *dest, const struct packet_ruleset_action_auto *packet)
static struct packet_ruleset_unit_bonus * receive_packet_ruleset_unit_bonus_100(struct connection *pc)
static int send_packet_ruleset_government_100(struct connection *pc, const struct packet_ruleset_government *packet)
int send_packet_ruleset_specialist(struct connection *pc, const struct packet_ruleset_specialist *packet)
int dsend_packet_player_ready(struct connection *pc, int player_no, bool is_ready)
static struct packet_unit_short_info * receive_packet_unit_short_info_100(struct connection *pc)
int send_packet_client_info(struct connection *pc, const struct packet_client_info *packet)
static int send_packet_ruleset_resource_100(struct connection *pc, const struct packet_ruleset_resource *packet)
void packet_handlers_fill_initial(struct packet_handlers *phandlers)
int send_packet_game_load(struct connection *pc, const struct packet_game_load *packet)
int dsend_packet_edit_mode(struct connection *pc, bool state)
static struct packet_player_attribute_block * receive_packet_player_attribute_block_100(struct connection *pc)
int send_packet_city_sell(struct connection *pc, const struct packet_city_sell *packet)
static struct packet_player_rates * receive_packet_player_rates_100(struct connection *pc)
int send_packet_save_scenario(struct connection *pc, const struct packet_save_scenario *packet)
static struct packet_page_msg_part * receive_packet_page_msg_part_100(struct connection *pc)
int dsend_packet_city_name_suggestion_info(struct connection *pc, int unit_id, const char *name)
int send_packet_unit_combat_info(struct connection *pc, const struct packet_unit_combat_info *packet)
void lsend_packet_city_rally_point(struct conn_list *dest, const struct packet_city_rally_point *packet, bool force_to_send)
packet_type
@ PACKET_PLAYER_MULTIPLIER
@ PACKET_DIPLOMACY_ACCEPT_TREATY
@ PACKET_PLAYER_CHANGE_GOVERNMENT
@ PACKET_WEB_PLAYER_INFO_ADDITION
@ PACKET_SAVE_SCENARIO
@ PACKET_RULESET_MULTIPLIER
@ PACKET_THAW_CLIENT
@ PACKET_EDIT_TOGGLE_FOGOFWAR
@ PACKET_WEB_CMA_SET
@ PACKET_EDIT_MODE
@ PACKET_RULESET_MUSIC
@ PACKET_LAST
@ PACKET_RULESET_GOODS
@ PACKET_ENDGAME_PLAYER
@ PACKET_UNIT_ACTION_ANSWER
@ PACKET_EDIT_PLAYER
@ PACKET_DIPLOMACY_CANCEL_MEETING_REQ
@ PACKET_SERVER_SETTING_ENUM
@ PACKET_SET_TOPOLOGY
@ PACKET_WEB_CITY_INFO_ADDITION
@ PACKET_CONN_PING
@ PACKET_CITY_MAKE_WORKER
@ PACKET_CITY_OPTIONS_REQ
@ PACKET_RULESET_COUNTER
@ PACKET_VOTE_UPDATE
@ PACKET_CITY_NAME_SUGGESTION_INFO
@ PACKET_CITY_CHANGE
@ PACKET_UNIT_SSCS_SET
@ PACKET_PROCESSING_STARTED
@ PACKET_UNIT_DO_ACTION
@ PACKET_UNIT_REMOVE
@ PACKET_END_PHASE
@ PACKET_SERVER_SETTING_INT
@ PACKET_RULESET_EXTRA
@ PACKET_EDIT_PLAYER_CREATE
@ PACKET_EDIT_GAME
@ PACKET_CONN_PING_INFO
@ PACKET_END_TURN
@ PACKET_EDIT_TILE_EXTRA
@ PACKET_SPACESHIP_PLACE
@ PACKET_NEW_YEAR
@ PACKET_NATION_SELECT_REQ
@ PACKET_ENDGAME_REPORT
@ PACKET_RULESET_ACTION_AUTO
@ PACKET_UNIT_COMBAT_INFO
@ PACKET_RULESETS_READY
@ PACKET_UNIT_SHORT_INFO
@ PACKET_SERVER_JOIN_REQ
@ PACKET_REPORT_REQ
@ PACKET_RULESET_UNIT_CLASS_FLAG
@ PACKET_RULESET_TECH_CLASS
@ PACKET_EDIT_CITY_CREATE
@ PACKET_SINGLE_WANT_HACK_REPLY
@ PACKET_GAME_INFO
@ PACKET_DIPLOMACY_INIT_MEETING_REQ
@ PACKET_PROCESSING_FINISHED
@ PACKET_RULESET_ACTION
@ PACKET_PLAYER_ATTRIBUTE_BLOCK
@ PACKET_CITY_SELL
@ PACKET_CITY_NAME_SUGGESTION_REQ
@ PACKET_UNKNOWN_RESEARCH
@ PACKET_CHAT_MSG_REQ
@ PACKET_NUKE_TILE_INFO
@ PACKET_PLAYER_DIPLSTATE
@ PACKET_RULESET_IMPR_FLAG
@ PACKET_RULESET_TECH
@ PACKET_CLIENT_HEARTBEAT
@ PACKET_RULESET_ROAD
@ PACKET_RULESET_NATION_SETS
@ PACKET_CITY_SABOTAGE_LIST
@ PACKET_MAP_INFO
@ PACKET_RULESET_CLAUSE
@ PACKET_DIPLOMACY_CREATE_CLAUSE_REQ
@ PACKET_CITY_BUY
@ PACKET_CHAT_MSG
@ PACKET_EDIT_CITY_REMOVE
@ PACKET_EDIT_STARTPOS
@ PACKET_SERVER_SETTING_CONST
@ PACKET_PLAYER_RESEARCH
@ PACKET_BEGIN_TURN
@ PACKET_RULESET_TERRAIN_CONTROL
@ PACKET_PLAYER_PHASE_DONE
@ PACKET_RULESET_SELECT
@ PACKET_GAME_LOAD
@ PACKET_CITY_UPDATE_COUNTERS
@ PACKET_PLAYER_REMOVE
@ PACKET_CLIENT_INFO
@ PACKET_CITY_WORKLIST
@ PACKET_SYNC_SERIAL
@ PACKET_DIPLOMACY_CANCEL_MEETING
@ PACKET_UNIT_TYPE_UPGRADE
@ PACKET_START_PHASE
@ PACKET_AUTHENTICATION_REPLY
@ PACKET_SPACESHIP_INFO
@ PACKET_UNIT_GET_ACTIONS
@ PACKET_PLAYER_ATTRIBUTE_CHUNK
@ PACKET_RULESET_TERRAIN_FLAG
@ PACKET_CITY_MAKE_SPECIALIST
@ PACKET_RULESET_ACHIEVEMENT
@ PACKET_RULESET_EFFECT
@ PACKET_RULESET_DISASTER
@ PACKET_RULESET_CONTROL
@ PACKET_SINGLE_WANT_HACK_REQ
@ PACKET_PLAYER_PLACE_INFRA
@ PACKET_VOTE_NEW
@ PACKET_AUTHENTICATION_REQ
@ PACKET_RULESET_TRADE
@ PACKET_EDIT_PLAYER_REMOVE
@ PACKET_CONN_INFO
@ PACKET_SERVER_SETTING_BITWISE
@ PACKET_EDIT_TILE_TERRAIN
@ PACKET_DIPLOMACY_INIT_MEETING
@ PACKET_RULESET_SUMMARY
@ PACKET_UNIT_ACTION_QUERY
@ PACKET_PLAY_MUSIC
@ PACKET_TRADE_ROUTE_INFO
@ PACKET_RULESET_STYLE
@ PACKET_RULESET_CITY
@ PACKET_CITY_NATIONALITIES
@ PACKET_EDIT_SCENARIO_DESC
@ PACKET_FREEZE_CLIENT
@ PACKET_VOTE_RESOLVE
@ PACKET_EDIT_UNIT_CREATE
@ PACKET_POPUP_IMAGE
@ PACKET_TIMEOUT_INFO
@ PACKET_RULESET_GAME
@ PACKET_UNIT_CHANGE_ACTIVITY
@ PACKET_EDIT_UNIT_REMOVE
@ PACKET_RULESET_UNIT_FLAG
@ PACKET_EDIT_FOGOFWAR_STATE
@ PACKET_DIPLOMACY_REMOVE_CLAUSE
@ PACKET_TILE_INFO
@ PACKET_EDIT_OBJECT_CREATED
@ PACKET_CITY_SHORT_INFO
@ PACKET_SYNC_SERIAL_REPLY
@ PACKET_CALENDAR_INFO
@ PACKET_SERVER_JOIN_REPLY
@ PACKET_SERVER_SETTING_STR
@ PACKET_VOTE_SUBMIT
@ PACKET_WEB_CMA_CLEAR
@ PACKET_EDIT_PLAYER_VISION
@ PACKET_SCENARIO_INFO
@ PACKET_EDIT_CHECK_TILES
@ PACKET_RULESET_CHOICES
@ PACKET_CITY_CHANGE_SPECIALIST
@ PACKET_RULESET_SPECIALIST
@ PACKET_CITY_REFRESH
@ PACKET_CITY_REMOVE
@ PACKET_UNIT_INFO
@ PACKET_RULESET_NATION_GROUPS
@ PACKET_CONNECT_MSG
@ PACKET_EARLY_CHAT_MSG
@ PACKET_RULESET_UNIT_CLASS
@ PACKET_PLAYER_INFO
@ PACKET_EDIT_TILE
@ PACKET_PLAYER_READY
@ PACKET_WEB_RULESET_UNIT_ADDITION
@ PACKET_SERVER_SHUTDOWN
@ PACKET_RULESET_TERRAIN
@ PACKET_RULESET_EXTRA_FLAG
@ PACKET_RULESET_DESCRIPTION_PART
@ PACKET_EDIT_UNIT
@ PACKET_RULESET_BASE
@ PACKET_SERVER_SETTING_BOOL
@ PACKET_RESEARCH_INFO
@ PACKET_CONN_PONG
@ PACKET_EDIT_RECALCULATE_BORDERS
@ PACKET_PAGE_MSG_PART
@ PACKET_EDIT_CITY
@ PACKET_RULESET_UNIT
@ PACKET_PLAYER_TECH_GOAL
@ PACKET_UNIT_ACTIONS
@ PACKET_INVESTIGATE_FINISHED
@ PACKET_RULESET_ACTION_ENABLER
@ PACKET_INVESTIGATE_STARTED
@ PACKET_CITY_RALLY_POINT
@ PACKET_RULESET_UNIT_BONUS
@ PACKET_RULESET_BUILDING
@ PACKET_RULESET_NATION
@ PACKET_UNIT_SERVER_SIDE_AGENT_SET
@ PACKET_SERVER_INFO
@ PACKET_RULESET_GOVERNMENT_RULER_TITLE
@ PACKET_SPACESHIP_LAUNCH
@ PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ
@ PACKET_DIPLOMACY_ACCEPT_TREATY_REQ
@ PACKET_DIPLOMACY_CREATE_CLAUSE
@ PACKET_RULESET_GOVERNMENT
@ PACKET_SCENARIO_DESCRIPTION
@ PACKET_SERVER_SETTING_CONTROL
@ PACKET_ACHIEVEMENT_INFO
@ PACKET_PAGE_MSG
@ PACKET_RULESET_TECH_FLAG
@ PACKET_RULESET_RESOURCE
@ PACKET_UNIT_ORDERS
@ PACKET_EDIT_UNIT_REMOVE_BY_ID
@ PACKET_EDIT_STARTPOS_FULL
@ PACKET_DIPLOMACY_CANCEL_PACT
@ PACKET_TEAM_NAME_INFO
@ PACKET_CITY_INFO
@ PACKET_PLAYER_RATES
@ PACKET_NATION_AVAILABILITY
@ PACKET_CITY_RENAME
@ PACKET_VOTE_REMOVE
@ PACKET_WORKER_TASK
int parts
Definition packhand.c:132
char * lines
Definition packhand.c:131
int len
Definition packhand.c:127
bool gives_shared_tiles(const struct player *me, const struct player *them)
Definition player.c:1493
bool gives_shared_vision(const struct player *me, const struct player *them)
Definition player.c:1485
bool are_requirements_equal(const struct requirement *req1, const struct requirement *req2)
static struct compatibility compat[]
Definition savecompat.c:105
static struct connection connections[MAX_NUM_CONNECTIONS]
Definition sernet.c:94
#define MAX_UINT16
Definition shared.h:82
struct specialist specialists[SP_MAX]
Definition specialist.c:30
int default_specialist
Definition specialist.c:31
int step
Definition specpq.h:92
size_t size
Definition specvec.h:72
const char * aifill(int amount)
Definition srv_main.c:2466
Definition agents.h:40
Definition city.h:320
struct tile * tile
Definition city.h:322
char capability[MAX_LEN_CAPSTR]
Definition connection.h:171
char password[MAX_LEN_PASSWORD]
Definition packets_gen.h:63
char message[MAX_LEN_MSG]
Definition packets_gen.h:59
enum authentication_type type
Definition packets_gen.h:58
char positive_year_label[MAX_LEN_NAME]
char negative_year_label[MAX_LEN_NAME]
char calendar_fragment_name[MAX_CALENDAR_FRAGMENTS][MAX_LEN_NAME]
char message[MAX_LEN_MSG]
char message[MAX_LEN_MSG]
enum event_type event
int last_turns_shield_surplus
int usage[O_LAST]
int ppl_content[FEELING_LAST]
bv_city_options city_options
enum capital_type capital
int surplus[O_LAST]
enum city_acquire_type acquire_type
int ppl_unhappy[FEELING_LAST]
int citizen_base[O_LAST]
enum city_wl_cancel_behavior wl_cb
int specialists[SP_MAX]
int ppl_angry[FEELING_LAST]
bv_imprs improvements
struct worklist worklist
char name[MAX_LEN_CITYNAME]
int ppl_happy[FEELING_LAST]
int prod[O_LAST]
int unhappy_penalty[O_LAST]
int waste[O_LAST]
char name[MAX_LEN_CITYNAME]
int nation_id[MAX_CITY_NATIONALITIES]
int nation_citizens[MAX_CITY_NATIONALITIES]
bv_city_options options
enum city_wl_cancel_behavior wl_cb
struct unit_order orders[MAX_LEN_ROUTE]
char name[MAX_LEN_CITYNAME]
enum capital_type capital
char name[MAX_LEN_CITYNAME]
int counters[MAX_COUNTERS]
struct worklist worklist
char distribution[MAX_LEN_NAME]
enum gui_type gui
char capability[MAX_LEN_CAPSTR]
char addr[MAX_LEN_ADDR]
char username[MAX_LEN_NAME]
enum cmdlevel access_level
float ping_time[MAX_NUM_CONNECTIONS]
int conn_id[MAX_NUM_CONNECTIONS]
char message[MAX_LEN_MSG]
enum event_type event
char message[MAX_LEN_MSG]
int specialists[SP_MAX]
int built[B_LAST]
char name[MAX_LEN_CITYNAME]
char scenario_name[256]
char scenario_authors[MAX_LEN_PACKET/3]
char ranked_username[MAX_LEN_NAME]
Nation_type_id nation
char username[MAX_LEN_NAME]
char name[MAX_LEN_NAME]
Government_type_id government
bool inventions[A_LAST+1]
Government_type_id target_government
char scenario_desc[MAX_LEN_CONTENT]
bv_startpos_nations nations
Terrain_type_id terrain
Resource_type_id resource
Nation_type_id startpos_nation
char label[MAX_LEN_NAME]
Terrain_type_id terrain
Unit_type_id utype
enum unit_activity activity
Base_type_id activity_base
bool tech_steal_allow_holes
enum gameloss_style gameloss_style
enum goods_selection_method goods_selection
enum borders_mode borders
enum happyborders_type happyborders
Government_type_id government_during_revolution_id
enum gold_upkeep_style gold_upkeep_style
bool damage_reduces_bombard_rate
int nuke_defender_survival_chance_pct
enum tech_upkeep_style tech_upkeep_style
bool tech_trade_loss_allow_holes
int granary_food_ini[MAX_GRANARY_INIS]
enum diplomacy_mode diplomacy
enum free_tech_method free_tech_method
bool steal_maps_reveals_all_cities
enum trade_revenue_style trade_revenue_style
bool only_real_fight_makes_veteran
int great_wonder_owners[B_LAST]
int low_firepower_pearl_harbour
bool global_advances[A_LAST]
enum airlifting_style airlifting_style
enum tech_leakage_style tech_leakage
enum ai_level skill_level
enum revolen_type revolentype
enum phase_mode_type phase_mode
bool airlift_from_always_enabled
enum caravan_bonus_style caravan_bonus_style
bool only_killing_makes_veteran
bool poison_empties_food_stock
bv_actions diplchance_initial_odds
bool tech_trade_allow_holes
int low_firepower_nonnat_bombard
bool tech_parasite_allow_holes
int low_firepower_combat_bonus
int border_city_permanent_radius_sq
enum persistent_ready persistent_ready
int low_firepower_badwallattacker
bool airlift_to_always_enabled
enum wonder_visib_type small_wonder_visibility
enum tech_cost_style tech_cost_style
bool combat_odds_scaled_veterancy
bool unit_builders_nationality
enum victory_condition_type victory_conditions
int civil_war_bonus_celebrating
Government_type_id default_government_id
int min_city_center_output[O_LAST]
char load_filename[MAX_LEN_PACKET]
bool is_pickable[MAX_NUM_NATIONS]
char name[MAX_LEN_NAME]
Definition packets_gen.h:74
Nation_type_id nation_no
Definition packets_gen.h:72
char lines[MAX_LEN_CONTENT]
enum event_type event
char headline[MAX_LEN_MSG]
char caption[MAX_LEN_MSG]
char tag[MAX_LEN_NAME]
unsigned char data[ATTRIBUTE_CHUNK_SIZE]
Government_type_id government
enum diplstate_type type
enum ai_level ai_skill_level
int multiplier[MAX_NUM_MULTIPLIERS]
char username[MAX_LEN_NAME]
bv_plr_flags flags
enum mood_type mood
bv_player gives_shared_vision
int love[MAX_NUM_PLAYER_SLOTS]
Government_type_id target_government
int multiplier_target[MAX_NUM_MULTIPLIERS]
int multiplier_changed[MAX_NUM_MULTIPLIERS]
bv_player gives_shared_tiles
Nation_type_id nation
enum barbarian_type barbarian_type
char name[MAX_LEN_NAME]
Government_type_id government
bv_player real_embassy
int wonders[B_LAST]
int multipliers[MAX_NUM_MULTIPLIERS]
char tag[MAX_LEN_NAME]
enum report_type type
char inventions[A_LAST+1]
char rule_name[MAX_LEN_NAME]
enum achievement_type type
char name[MAX_LEN_NAME]
action_id alternatives[MAX_NUM_ACTIONS]
struct requirement reqs[MAX_NUM_REQS]
enum action_auto_perf_cause cause
struct requirement actor_reqs[MAX_NUM_REQS]
struct requirement target_reqs[MAX_NUM_REQS]
enum action_sub_target_kind sub_tgt_kind
enum action_actor_kind act_kind
bv_action_sub_results sub_results
char ui_name[MAX_LEN_NAME]
enum action_target_kind tgt_kind
enum action_result result
enum base_gui_type gui_type
char helptext[MAX_LEN_PACKET]
struct requirement obs_reqs[MAX_NUM_REQS]
char soundtag_alt[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
enum impr_genus_id genus
char name[MAX_LEN_NAME]
char soundtag[MAX_LEN_NAME]
char soundtag_alt2[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
char graphic_alt2[MAX_LEN_NAME]
char graphic_str[MAX_LEN_NAME]
char graphic_alt[MAX_LEN_NAME]
char rulesets[MAX_NUM_RULESETS][MAX_RULESET_NAME_LENGTH]
char citizens_graphic[MAX_LEN_NAME]
char name[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
char graphic_alt[MAX_LEN_NAME]
char graphic[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
enum clause_type type
struct requirement receiver_reqs[MAX_NUM_REQS]
struct requirement giver_reqs[MAX_NUM_REQS]
char preferred_soundset[MAX_LEN_NAME]
char version[MAX_LEN_NAME]
char preferred_tileset[MAX_LEN_NAME]
char alt_dir[MAX_LEN_NAME]
char preferred_musicset[MAX_LEN_NAME]
char name[MAX_LEN_NAME]
enum counter_target type
char name[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
char helptext[MAX_LEN_PACKET]
enum counter_behavior behavior
char text[MAX_LEN_CONTENT]
char rule_name[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
bv_disaster_effects effects
char name[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
Multiplier_type_id multiplier
enum effect_type effect_type
char helptxt[MAX_LEN_PACKET]
char name[MAX_LEN_NAME]
bv_unit_classes native_to
char rmact_gfx_alt2[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
char graphic_alt[MAX_LEN_NAME]
char act_gfx_alt2[MAX_LEN_NAME]
struct requirement disappearance_reqs[MAX_NUM_REQS]
bv_extra_flags flags
char act_gfx_alt[MAX_LEN_NAME]
char activity_gfx[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
enum extra_unit_seen_type eus
struct requirement appearance_reqs[MAX_NUM_REQS]
char name[MAX_LEN_NAME]
char graphic_str[MAX_LEN_NAME]
char rmact_gfx_alt[MAX_LEN_NAME]
char rmact_gfx[MAX_LEN_NAME]
struct requirement rmreqs[MAX_NUM_REQS]
char helptext[MAX_LEN_PACKET]
int work_raise_chance[MAX_VET_LEVELS]
int base_raise_chance[MAX_VET_LEVELS]
int global_init_techs[MAX_NUM_TECH_LIST]
int move_bonus[MAX_VET_LEVELS]
char veteran_name[MAX_VET_LEVELS][MAX_LEN_NAME]
Impr_type_id global_init_buildings[MAX_NUM_BUILDING_LIST]
int power_fact[MAX_VET_LEVELS]
char helptext[MAX_LEN_PACKET]
bv_goods_flags flags
char name[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
char sound_alt[MAX_LEN_NAME]
char graphic_alt[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
char name[MAX_LEN_NAME]
Government_type_id id
char sound_str[MAX_LEN_NAME]
char graphic_str[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
char helptext[MAX_LEN_PACKET]
char sound_alt2[MAX_LEN_NAME]
char name[MAX_LEN_NAME]
char helptxt[MAX_LEN_PACKET]
char name[MAX_LEN_NAME]
Multiplier_type_id id
struct requirement reqs[MAX_NUM_REQS]
char rule_name[MAX_LEN_NAME]
char helptext[MAX_LEN_PACKET]
char music_combat[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
char music_peaceful[MAX_LEN_NAME]
char groups[MAX_NUM_NATION_GROUPS][MAX_LEN_NAME]
bool hidden[MAX_NUM_NATION_GROUPS]
char rule_names[MAX_NUM_NATION_SETS][MAX_LEN_NAME]
char names[MAX_NUM_NATION_SETS][MAX_LEN_NAME]
char descriptions[MAX_NUM_NATION_SETS][MAX_LEN_MSG]
int init_techs[MAX_NUM_TECH_LIST]
char leader_name[MAX_NUM_LEADERS][MAX_LEN_NAME]
char noun_plural[MAX_LEN_NAME]
char adjective[MAX_LEN_NAME]
Impr_type_id init_buildings[MAX_NUM_BUILDING_LIST]
Unit_type_id init_units[MAX_NUM_UNIT_LIST]
bool leader_is_male[MAX_NUM_LEADERS]
char translation_domain[MAX_LEN_NAME]
char graphic_str[MAX_LEN_NAME]
Government_type_id init_government_id
int groups[MAX_NUM_NATION_GROUPS]
enum barbarian_type barbarian_type
int sets[MAX_NUM_NATION_SETS]
char graphic_alt[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
char legend[MAX_LEN_MSG]
bv_road_flags flags
int tile_incr_const[O_LAST]
enum road_gui_type gui_type
bv_max_extras integrates
enum road_compat compat
enum road_move_mode move_mode
int tile_bonus[O_LAST]
int tile_incr[O_LAST]
struct requirement first_reqs[MAX_NUM_REQS]
char modpack[MAX_RULESET_NAME_LENGTH]
char rule_name[MAX_LEN_NAME]
char graphic_alt[MAX_LEN_NAME]
struct requirement reqs[MAX_NUM_REQS]
Specialist_type_id id
char helptext[MAX_LEN_PACKET]
char short_name[MAX_LEN_NAME]
char graphic_str[MAX_LEN_NAME]
char plural_name[MAX_LEN_NAME]
char name[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
char text[MAX_LEN_CONTENT]
char name[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
char name[MAX_LEN_NAME]
char helptxt[MAX_LEN_PACKET]
char name[MAX_LEN_NAME]
struct requirement research_reqs[MAX_NUM_REQS]
char graphic_str[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
char graphic_alt[MAX_LEN_NAME]
bv_tech_flags flags
char helptext[MAX_LEN_PACKET]
char gui_type_base0[MAX_LEN_NAME]
char gui_type_base1[MAX_LEN_NAME]
char name[MAX_LEN_NAME]
char helptxt[MAX_LEN_PACKET]
int extra_removal_times[MAX_EXTRA_TYPES]
Terrain_type_id transform_result
int resource_freq[MAX_EXTRA_TYPES]
char helptext[MAX_LEN_PACKET]
Resource_type_id resources[MAX_EXTRA_TYPES]
bv_terrain_flags flags
char graphic_str[MAX_LEN_NAME]
bv_unit_classes native_to
Terrain_type_id cultivate_result
Terrain_type_id plant_result
char name[MAX_LEN_NAME]
int road_output_incr_pct[O_LAST]
char graphic_alt[MAX_LEN_NAME]
char graphic_alt2[MAX_LEN_NAME]
char rule_name[MAX_LEN_NAME]
enum trade_route_illegal_cancelling cancelling
enum trade_route_bonus_type bonus_type
enum combat_bonus_type type
enum unit_type_flag_id flag
char helptxt[MAX_LEN_PACKET]
char rule_name[MAX_LEN_NAME]
bv_unit_class_flags flags
char name[MAX_LEN_NAME]
char helptext[MAX_LEN_PACKET]
char name[MAX_LEN_NAME]
char helptxt[MAX_LEN_PACKET]
char graphic_alt[MAX_LEN_NAME]
enum vision_layer vlayer
enum transp_def_type tp_defense
char rule_name[MAX_LEN_NAME]
int power_fact[MAX_VET_LEVELS]
char name[MAX_LEN_NAME]
char graphic_alt2[MAX_LEN_NAME]
char graphic_str[MAX_LEN_NAME]
char sound_fight_alt[MAX_LEN_NAME]
bv_unit_classes disembarks
bv_unit_classes cargo
bv_unit_type_flags flags
char sound_move_alt[MAX_LEN_NAME]
bv_unit_classes targets
struct requirement build_reqs[MAX_NUM_REQS]
int base_raise_chance[MAX_VET_LEVELS]
int work_raise_chance[MAX_VET_LEVELS]
char sound_fight[MAX_LEN_NAME]
bv_unit_classes embarks
char veteran_name[MAX_VET_LEVELS][MAX_LEN_NAME]
char sound_move[MAX_LEN_NAME]
char helptext[MAX_LEN_PACKET]
bv_unit_type_roles roles
int move_bonus[MAX_VET_LEVELS]
char name[MAX_LEN_NAME]
char description[MAX_LEN_CONTENT]
char datafile[MAX_LEN_NAME]
char authors[MAX_LEN_PACKET/3]
char support_names[64][MAX_LEN_NAME]
char pretty_names[64][MAX_LEN_ENUM]
enum setting_default_level setdef
enum setting_default_level setdef
char name[MAX_LEN_NAME]
char short_help[MAX_LEN_PACKET]
char extra_help[MAX_LEN_PACKET]
char category_names[256][MAX_LEN_NAME]
enum setting_default_level setdef
char pretty_names[64][MAX_LEN_ENUM]
char support_names[64][MAX_LEN_NAME]
enum setting_default_level setdef
char default_val[MAX_LEN_PACKET]
char val[MAX_LEN_PACKET]
enum setting_default_level setdef
char token[MAX_LEN_NAME]
bv_spaceship_structure structure
enum spaceship_place_type type
char team_name[MAX_LEN_NAME]
Resource_type_id resource
enum known_type known
char label[MAX_LEN_MAP_LABEL]
Continent_id continent
Definition packets_gen.h:99
Terrain_type_id terrain
char spec_sprite[MAX_LEN_NAME]
enum route_direction direction
struct act_prob action_probabilities[MAX_NUM_ACTIONS]
enum unit_activity activity
char name[MAX_LEN_NAME]
int upkeep[O_LAST]
enum action_decision action_decision_want
struct unit_order orders[MAX_LEN_ROUTE]
enum unit_activity activity
Unit_type_id type
enum unit_activity changed_from
enum direction8 facing
enum server_side_agent ssa_controller
struct unit_order orders[MAX_LEN_ROUTE]
enum server_side_agent agent
enum direction8 facing
enum unit_ss_data_type type
char user[MAX_LEN_NAME]
struct cm_parameter cm_parameter
int output_shield[MAX_CITY_TILES+1]
int output_trade[MAX_CITY_TILES+1]
int output_food[MAX_CITY_TILES+1]
struct cm_parameter cm_parameter
enum unit_activity activity
Definition team.c:40
Definition tile.h:50
Definition unit.h:138
#define sz_strlcpy(dest, src)
Definition support.h:195
#define TRUE
Definition support.h:46
#define FALSE
Definition support.h:47
#define bool
Definition support.h:71
#define A_LAST
Definition tech.h:45
Terrain_type_id terrain_count(void)
Definition terrain.c:118
static struct goods_type goods[MAX_GOODS_TYPES]
Definition traderoutes.c:43
bool are_unit_orders_equal(const struct unit_order *order1, const struct unit_order *order2)
Definition unit.c:59
void worklist_copy(struct worklist *dst, const struct worklist *src)
Definition worklist.c:112
bool are_worklists_equal(const struct worklist *wlist1, const struct worklist *wlist2)
Definition worklist.c:192