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 = "hap2clnt 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
16112#ifdef FREECIV_DELTA_PROTOCOL
16114{
16115 const struct packet_city_info *key = (const struct packet_city_info *) vkey;
16116 genhash_val_t result = 0;
16117
16118 result += key->id;
16119
16120 result &= 0xFFFFFFFF;
16121 return result;
16122}
16123
16124static bool cmp_packet_city_info_101(const void *vkey1, const void *vkey2)
16125{
16126 const struct packet_city_info *old = (const struct packet_city_info *) vkey1;
16127 const struct packet_city_info *real_packet = (const struct packet_city_info *) vkey2;
16128 bool differ;
16129
16130 differ = (old->id != real_packet->id);
16131
16132 return !differ;
16133}
16135#endif /* FREECIV_DELTA_PROTOCOL */
16136
16138{
16139#ifdef FREECIV_DELTA_PROTOCOL
16141 struct packet_city_info *old;
16142 struct genhash **hash = pc->phs.received + PACKET_CITY_INFO;
16143#endif /* FREECIV_DELTA_PROTOCOL */
16145#ifdef FREECIV_JSON_CONNECTION
16146 struct plocation field_addr;
16147 {
16151 }
16152#endif /* FREECIV_JSON_CONNECTION */
16153
16154#ifdef FREECIV_DELTA_PROTOCOL
16155#ifdef FREECIV_JSON_CONNECTION
16156 field_addr.name = "fields";
16157#endif /* FREECIV_JSON_CONNECTION */
16158 DIO_BV_GET(&din, &field_addr, fields);
16159#ifdef FREECIV_JSON_CONNECTION
16160 field_addr.name = "id";
16161#endif /* FREECIV_JSON_CONNECTION */
16162 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
16164 }
16165
16166#else /* FREECIV_DELTA_PROTOCOL */
16167#ifdef FREECIV_JSON_CONNECTION
16168 field_addr.name = "id";
16169#endif /* FREECIV_JSON_CONNECTION */
16170 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
16172 }
16173#ifdef FREECIV_JSON_CONNECTION
16174 field_addr.name = "tile";
16175#endif /* FREECIV_JSON_CONNECTION */
16176 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
16178 }
16179#ifdef FREECIV_JSON_CONNECTION
16180 field_addr.name = "owner";
16181#endif /* FREECIV_JSON_CONNECTION */
16182 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
16184 }
16185#ifdef FREECIV_JSON_CONNECTION
16186 field_addr.name = "original";
16187#endif /* FREECIV_JSON_CONNECTION */
16188 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
16190 }
16191#ifdef FREECIV_JSON_CONNECTION
16192 field_addr.name = "size";
16193#endif /* FREECIV_JSON_CONNECTION */
16194 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
16196 }
16197#ifdef FREECIV_JSON_CONNECTION
16198 field_addr.name = "city_radius_sq";
16199#endif /* FREECIV_JSON_CONNECTION */
16200 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
16201 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
16202 }
16203#ifdef FREECIV_JSON_CONNECTION
16204 field_addr.name = "style";
16205#endif /* FREECIV_JSON_CONNECTION */
16206 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
16208 }
16209#ifdef FREECIV_JSON_CONNECTION
16210 field_addr.name = "capital";
16211#endif /* FREECIV_JSON_CONNECTION */
16212 {
16213 int readin;
16214
16215 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16217 }
16218 real_packet->capital = readin;
16219 }
16220#ifdef FREECIV_JSON_CONNECTION
16221 field_addr.name = "ppl_happy";
16222#endif /* FREECIV_JSON_CONNECTION */
16223 {
16224 int i;
16225
16226#ifdef FREECIV_JSON_CONNECTION
16227 /* Enter array. */
16228 field_addr.sub_location = plocation_elem_new(0);
16229#endif /* FREECIV_JSON_CONNECTION */
16230
16231 for (i = 0; i < FEELING_LAST; i++) {
16232#ifdef FREECIV_JSON_CONNECTION
16233 field_addr.sub_location->number = i;
16234#endif /* FREECIV_JSON_CONNECTION */
16235
16236 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
16237 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
16238 }
16239 }
16240
16241#ifdef FREECIV_JSON_CONNECTION
16242 /* Exit array. */
16243 FC_FREE(field_addr.sub_location);
16244#endif /* FREECIV_JSON_CONNECTION */
16245 }
16246#ifdef FREECIV_JSON_CONNECTION
16247 field_addr.name = "ppl_content";
16248#endif /* FREECIV_JSON_CONNECTION */
16249 {
16250 int i;
16251
16252#ifdef FREECIV_JSON_CONNECTION
16253 /* Enter array. */
16254 field_addr.sub_location = plocation_elem_new(0);
16255#endif /* FREECIV_JSON_CONNECTION */
16256
16257 for (i = 0; i < FEELING_LAST; i++) {
16258#ifdef FREECIV_JSON_CONNECTION
16259 field_addr.sub_location->number = i;
16260#endif /* FREECIV_JSON_CONNECTION */
16261
16262 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
16263 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
16264 }
16265 }
16266
16267#ifdef FREECIV_JSON_CONNECTION
16268 /* Exit array. */
16269 FC_FREE(field_addr.sub_location);
16270#endif /* FREECIV_JSON_CONNECTION */
16271 }
16272#ifdef FREECIV_JSON_CONNECTION
16273 field_addr.name = "ppl_unhappy";
16274#endif /* FREECIV_JSON_CONNECTION */
16275 {
16276 int i;
16277
16278#ifdef FREECIV_JSON_CONNECTION
16279 /* Enter array. */
16280 field_addr.sub_location = plocation_elem_new(0);
16281#endif /* FREECIV_JSON_CONNECTION */
16282
16283 for (i = 0; i < FEELING_LAST; i++) {
16284#ifdef FREECIV_JSON_CONNECTION
16285 field_addr.sub_location->number = i;
16286#endif /* FREECIV_JSON_CONNECTION */
16287
16288 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
16289 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
16290 }
16291 }
16292
16293#ifdef FREECIV_JSON_CONNECTION
16294 /* Exit array. */
16295 FC_FREE(field_addr.sub_location);
16296#endif /* FREECIV_JSON_CONNECTION */
16297 }
16298#ifdef FREECIV_JSON_CONNECTION
16299 field_addr.name = "ppl_angry";
16300#endif /* FREECIV_JSON_CONNECTION */
16301 {
16302 int i;
16303
16304#ifdef FREECIV_JSON_CONNECTION
16305 /* Enter array. */
16306 field_addr.sub_location = plocation_elem_new(0);
16307#endif /* FREECIV_JSON_CONNECTION */
16308
16309 for (i = 0; i < FEELING_LAST; i++) {
16310#ifdef FREECIV_JSON_CONNECTION
16311 field_addr.sub_location->number = i;
16312#endif /* FREECIV_JSON_CONNECTION */
16313
16314 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
16315 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
16316 }
16317 }
16318
16319#ifdef FREECIV_JSON_CONNECTION
16320 /* Exit array. */
16321 FC_FREE(field_addr.sub_location);
16322#endif /* FREECIV_JSON_CONNECTION */
16323 }
16324#ifdef FREECIV_JSON_CONNECTION
16325 field_addr.name = "specialists_size";
16326#endif /* FREECIV_JSON_CONNECTION */
16327 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
16328 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
16329 }
16330#ifdef FREECIV_JSON_CONNECTION
16331 field_addr.name = "specialists";
16332#endif /* FREECIV_JSON_CONNECTION */
16333 if (real_packet->specialists_size > SP_MAX) {
16334 RECEIVE_PACKET_FIELD_ERROR(specialists, ": truncation array");
16335 }
16336 {
16337 int i;
16338
16339#ifdef FREECIV_JSON_CONNECTION
16340 /* Enter array. */
16341 field_addr.sub_location = plocation_elem_new(0);
16342#endif /* FREECIV_JSON_CONNECTION */
16343
16344 for (i = 0; i < real_packet->specialists_size; i++) {
16345#ifdef FREECIV_JSON_CONNECTION
16346 field_addr.sub_location->number = i;
16347#endif /* FREECIV_JSON_CONNECTION */
16348
16349 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
16351 }
16352 }
16353
16354#ifdef FREECIV_JSON_CONNECTION
16355 /* Exit array. */
16356 FC_FREE(field_addr.sub_location);
16357#endif /* FREECIV_JSON_CONNECTION */
16358 }
16359#ifdef FREECIV_JSON_CONNECTION
16360 field_addr.name = "history";
16361#endif /* FREECIV_JSON_CONNECTION */
16362 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
16364 }
16365#ifdef FREECIV_JSON_CONNECTION
16366 field_addr.name = "culture";
16367#endif /* FREECIV_JSON_CONNECTION */
16368 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
16370 }
16371#ifdef FREECIV_JSON_CONNECTION
16372 field_addr.name = "buy_cost";
16373#endif /* FREECIV_JSON_CONNECTION */
16374 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
16376 }
16377#ifdef FREECIV_JSON_CONNECTION
16378 field_addr.name = "surplus";
16379#endif /* FREECIV_JSON_CONNECTION */
16380 {
16381 int i;
16382
16383#ifdef FREECIV_JSON_CONNECTION
16384 /* Enter array. */
16385 field_addr.sub_location = plocation_elem_new(0);
16386#endif /* FREECIV_JSON_CONNECTION */
16387
16388 for (i = 0; i < O_LAST; i++) {
16389#ifdef FREECIV_JSON_CONNECTION
16390 field_addr.sub_location->number = i;
16391#endif /* FREECIV_JSON_CONNECTION */
16392
16393 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
16395 }
16396 }
16397
16398#ifdef FREECIV_JSON_CONNECTION
16399 /* Exit array. */
16400 FC_FREE(field_addr.sub_location);
16401#endif /* FREECIV_JSON_CONNECTION */
16402 }
16403#ifdef FREECIV_JSON_CONNECTION
16404 field_addr.name = "waste";
16405#endif /* FREECIV_JSON_CONNECTION */
16406 {
16407 int i;
16408
16409#ifdef FREECIV_JSON_CONNECTION
16410 /* Enter array. */
16411 field_addr.sub_location = plocation_elem_new(0);
16412#endif /* FREECIV_JSON_CONNECTION */
16413
16414 for (i = 0; i < O_LAST; i++) {
16415#ifdef FREECIV_JSON_CONNECTION
16416 field_addr.sub_location->number = i;
16417#endif /* FREECIV_JSON_CONNECTION */
16418
16419 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
16421 }
16422 }
16423
16424#ifdef FREECIV_JSON_CONNECTION
16425 /* Exit array. */
16426 FC_FREE(field_addr.sub_location);
16427#endif /* FREECIV_JSON_CONNECTION */
16428 }
16429#ifdef FREECIV_JSON_CONNECTION
16430 field_addr.name = "unhappy_penalty";
16431#endif /* FREECIV_JSON_CONNECTION */
16432 {
16433 int i;
16434
16435#ifdef FREECIV_JSON_CONNECTION
16436 /* Enter array. */
16437 field_addr.sub_location = plocation_elem_new(0);
16438#endif /* FREECIV_JSON_CONNECTION */
16439
16440 for (i = 0; i < O_LAST; i++) {
16441#ifdef FREECIV_JSON_CONNECTION
16442 field_addr.sub_location->number = i;
16443#endif /* FREECIV_JSON_CONNECTION */
16444
16445 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
16446 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
16447 }
16448 }
16449
16450#ifdef FREECIV_JSON_CONNECTION
16451 /* Exit array. */
16452 FC_FREE(field_addr.sub_location);
16453#endif /* FREECIV_JSON_CONNECTION */
16454 }
16455#ifdef FREECIV_JSON_CONNECTION
16456 field_addr.name = "prod";
16457#endif /* FREECIV_JSON_CONNECTION */
16458 {
16459 int i;
16460
16461#ifdef FREECIV_JSON_CONNECTION
16462 /* Enter array. */
16463 field_addr.sub_location = plocation_elem_new(0);
16464#endif /* FREECIV_JSON_CONNECTION */
16465
16466 for (i = 0; i < O_LAST; i++) {
16467#ifdef FREECIV_JSON_CONNECTION
16468 field_addr.sub_location->number = i;
16469#endif /* FREECIV_JSON_CONNECTION */
16470
16471 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
16473 }
16474 }
16475
16476#ifdef FREECIV_JSON_CONNECTION
16477 /* Exit array. */
16478 FC_FREE(field_addr.sub_location);
16479#endif /* FREECIV_JSON_CONNECTION */
16480 }
16481#ifdef FREECIV_JSON_CONNECTION
16482 field_addr.name = "citizen_base";
16483#endif /* FREECIV_JSON_CONNECTION */
16484 {
16485 int i;
16486
16487#ifdef FREECIV_JSON_CONNECTION
16488 /* Enter array. */
16489 field_addr.sub_location = plocation_elem_new(0);
16490#endif /* FREECIV_JSON_CONNECTION */
16491
16492 for (i = 0; i < O_LAST; i++) {
16493#ifdef FREECIV_JSON_CONNECTION
16494 field_addr.sub_location->number = i;
16495#endif /* FREECIV_JSON_CONNECTION */
16496
16497 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
16498 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
16499 }
16500 }
16501
16502#ifdef FREECIV_JSON_CONNECTION
16503 /* Exit array. */
16504 FC_FREE(field_addr.sub_location);
16505#endif /* FREECIV_JSON_CONNECTION */
16506 }
16507#ifdef FREECIV_JSON_CONNECTION
16508 field_addr.name = "usage";
16509#endif /* FREECIV_JSON_CONNECTION */
16510 {
16511 int i;
16512
16513#ifdef FREECIV_JSON_CONNECTION
16514 /* Enter array. */
16515 field_addr.sub_location = plocation_elem_new(0);
16516#endif /* FREECIV_JSON_CONNECTION */
16517
16518 for (i = 0; i < O_LAST; i++) {
16519#ifdef FREECIV_JSON_CONNECTION
16520 field_addr.sub_location->number = i;
16521#endif /* FREECIV_JSON_CONNECTION */
16522
16523 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
16525 }
16526 }
16527
16528#ifdef FREECIV_JSON_CONNECTION
16529 /* Exit array. */
16530 FC_FREE(field_addr.sub_location);
16531#endif /* FREECIV_JSON_CONNECTION */
16532 }
16533#ifdef FREECIV_JSON_CONNECTION
16534 field_addr.name = "food_stock";
16535#endif /* FREECIV_JSON_CONNECTION */
16536 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
16537 RECEIVE_PACKET_FIELD_ERROR(food_stock);
16538 }
16539#ifdef FREECIV_JSON_CONNECTION
16540 field_addr.name = "shield_stock";
16541#endif /* FREECIV_JSON_CONNECTION */
16542 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
16543 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
16544 }
16545#ifdef FREECIV_JSON_CONNECTION
16546 field_addr.name = "trade_route_count";
16547#endif /* FREECIV_JSON_CONNECTION */
16548 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
16549 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
16550 }
16551#ifdef FREECIV_JSON_CONNECTION
16552 field_addr.name = "pollution";
16553#endif /* FREECIV_JSON_CONNECTION */
16554 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
16555 RECEIVE_PACKET_FIELD_ERROR(pollution);
16556 }
16557#ifdef FREECIV_JSON_CONNECTION
16558 field_addr.name = "illness_trade";
16559#endif /* FREECIV_JSON_CONNECTION */
16560 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
16561 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
16562 }
16563#ifdef FREECIV_JSON_CONNECTION
16564 field_addr.name = "production_kind";
16565#endif /* FREECIV_JSON_CONNECTION */
16566 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
16567 RECEIVE_PACKET_FIELD_ERROR(production_kind);
16568 }
16569#ifdef FREECIV_JSON_CONNECTION
16570 field_addr.name = "production_value";
16571#endif /* FREECIV_JSON_CONNECTION */
16572 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
16573 RECEIVE_PACKET_FIELD_ERROR(production_value);
16574 }
16575#ifdef FREECIV_JSON_CONNECTION
16576 field_addr.name = "turn_founded";
16577#endif /* FREECIV_JSON_CONNECTION */
16578 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
16579 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
16580 }
16581#ifdef FREECIV_JSON_CONNECTION
16582 field_addr.name = "turn_last_built";
16583#endif /* FREECIV_JSON_CONNECTION */
16584 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
16585 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
16586 }
16587#ifdef FREECIV_JSON_CONNECTION
16588 field_addr.name = "changed_from_kind";
16589#endif /* FREECIV_JSON_CONNECTION */
16590 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
16591 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
16592 }
16593#ifdef FREECIV_JSON_CONNECTION
16594 field_addr.name = "changed_from_value";
16595#endif /* FREECIV_JSON_CONNECTION */
16596 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
16597 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
16598 }
16599#ifdef FREECIV_JSON_CONNECTION
16600 field_addr.name = "before_change_shields";
16601#endif /* FREECIV_JSON_CONNECTION */
16602 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
16603 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
16604 }
16605#ifdef FREECIV_JSON_CONNECTION
16606 field_addr.name = "disbanded_shields";
16607#endif /* FREECIV_JSON_CONNECTION */
16608 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
16609 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
16610 }
16611#ifdef FREECIV_JSON_CONNECTION
16612 field_addr.name = "caravan_shields";
16613#endif /* FREECIV_JSON_CONNECTION */
16614 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
16615 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
16616 }
16617#ifdef FREECIV_JSON_CONNECTION
16618 field_addr.name = "last_turns_shield_surplus";
16619#endif /* FREECIV_JSON_CONNECTION */
16620 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
16621 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
16622 }
16623#ifdef FREECIV_JSON_CONNECTION
16624 field_addr.name = "airlift";
16625#endif /* FREECIV_JSON_CONNECTION */
16626 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
16628 }
16629#ifdef FREECIV_JSON_CONNECTION
16630 field_addr.name = "did_buy";
16631#endif /* FREECIV_JSON_CONNECTION */
16632 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
16634 }
16635#ifdef FREECIV_JSON_CONNECTION
16636 field_addr.name = "did_sell";
16637#endif /* FREECIV_JSON_CONNECTION */
16638 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
16640 }
16641#ifdef FREECIV_JSON_CONNECTION
16642 field_addr.name = "was_happy";
16643#endif /* FREECIV_JSON_CONNECTION */
16644 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
16645 RECEIVE_PACKET_FIELD_ERROR(was_happy);
16646 }
16647#ifdef FREECIV_JSON_CONNECTION
16648 field_addr.name = "had_famine";
16649#endif /* FREECIV_JSON_CONNECTION */
16650 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
16651 RECEIVE_PACKET_FIELD_ERROR(had_famine);
16652 }
16653#ifdef FREECIV_JSON_CONNECTION
16654 field_addr.name = "anarchy";
16655#endif /* FREECIV_JSON_CONNECTION */
16656 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->anarchy)) {
16658 }
16659#ifdef FREECIV_JSON_CONNECTION
16660 field_addr.name = "rapture";
16661#endif /* FREECIV_JSON_CONNECTION */
16662 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->rapture)) {
16664 }
16665#ifdef FREECIV_JSON_CONNECTION
16666 field_addr.name = "diplomat_investigate";
16667#endif /* FREECIV_JSON_CONNECTION */
16668 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->diplomat_investigate)) {
16670 }
16671#ifdef FREECIV_JSON_CONNECTION
16672 field_addr.name = "walls";
16673#endif /* FREECIV_JSON_CONNECTION */
16674 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
16676 }
16677#ifdef FREECIV_JSON_CONNECTION
16678 field_addr.name = "city_image";
16679#endif /* FREECIV_JSON_CONNECTION */
16680 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
16681 RECEIVE_PACKET_FIELD_ERROR(city_image);
16682 }
16683#ifdef FREECIV_JSON_CONNECTION
16684 field_addr.name = "steal";
16685#endif /* FREECIV_JSON_CONNECTION */
16686 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
16688 }
16689#ifdef FREECIV_JSON_CONNECTION
16690 field_addr.name = "worklist";
16691#endif /* FREECIV_JSON_CONNECTION */
16692 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
16694 }
16695#ifdef FREECIV_JSON_CONNECTION
16696 field_addr.name = "improvements";
16697#endif /* FREECIV_JSON_CONNECTION */
16698 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
16699 RECEIVE_PACKET_FIELD_ERROR(improvements);
16700 }
16701#ifdef FREECIV_JSON_CONNECTION
16702 field_addr.name = "city_options";
16703#endif /* FREECIV_JSON_CONNECTION */
16704 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
16705 RECEIVE_PACKET_FIELD_ERROR(city_options);
16706 }
16707#ifdef FREECIV_JSON_CONNECTION
16708 field_addr.name = "wl_cb";
16709#endif /* FREECIV_JSON_CONNECTION */
16710 {
16711 int readin;
16712
16713 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16715 }
16716 real_packet->wl_cb = readin;
16717 }
16718#ifdef FREECIV_JSON_CONNECTION
16719 field_addr.name = "acquire_type";
16720#endif /* FREECIV_JSON_CONNECTION */
16721 {
16722 int readin;
16723
16724 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16725 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
16726 }
16727 real_packet->acquire_type = readin;
16728 }
16729#ifdef FREECIV_JSON_CONNECTION
16730 field_addr.name = "name";
16731#endif /* FREECIV_JSON_CONNECTION */
16732 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
16734 }
16735#endif
16736 log_packet_detailed("packet_city_info_101: got info about (%d)",
16737 real_packet->id);
16738
16739#ifdef FREECIV_DELTA_PROTOCOL
16740 if (NULL == *hash) {
16742 NULL, NULL, NULL, free);
16743 }
16744
16745 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
16746 *real_packet = *old;
16747 } else {
16748 int id;
16749
16750 id = real_packet->id;
16751
16752 log_packet_detailed(" no old info");
16753 memset(real_packet, 0, sizeof(*real_packet));
16754
16755 real_packet->id = id;
16756 }
16757
16758 if (BV_ISSET(fields, 0)) {
16759 log_packet_detailed(" got field 'tile'");
16760#ifdef FREECIV_JSON_CONNECTION
16761 field_addr.name = "tile";
16762#endif /* FREECIV_JSON_CONNECTION */
16763 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
16765 }
16766 }
16767 if (BV_ISSET(fields, 1)) {
16768 log_packet_detailed(" got field 'owner'");
16769#ifdef FREECIV_JSON_CONNECTION
16770 field_addr.name = "owner";
16771#endif /* FREECIV_JSON_CONNECTION */
16772 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
16774 }
16775 }
16776 if (BV_ISSET(fields, 2)) {
16777 log_packet_detailed(" got field 'original'");
16778#ifdef FREECIV_JSON_CONNECTION
16779 field_addr.name = "original";
16780#endif /* FREECIV_JSON_CONNECTION */
16781 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
16783 }
16784 }
16785 if (BV_ISSET(fields, 3)) {
16786 log_packet_detailed(" got field 'size'");
16787#ifdef FREECIV_JSON_CONNECTION
16788 field_addr.name = "size";
16789#endif /* FREECIV_JSON_CONNECTION */
16790 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
16792 }
16793 }
16794 if (BV_ISSET(fields, 4)) {
16795 log_packet_detailed(" got field 'city_radius_sq'");
16796#ifdef FREECIV_JSON_CONNECTION
16797 field_addr.name = "city_radius_sq";
16798#endif /* FREECIV_JSON_CONNECTION */
16799 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_radius_sq)) {
16800 RECEIVE_PACKET_FIELD_ERROR(city_radius_sq);
16801 }
16802 }
16803 if (BV_ISSET(fields, 5)) {
16804 log_packet_detailed(" got field 'style'");
16805#ifdef FREECIV_JSON_CONNECTION
16806 field_addr.name = "style";
16807#endif /* FREECIV_JSON_CONNECTION */
16808 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
16810 }
16811 }
16812 if (BV_ISSET(fields, 6)) {
16813 log_packet_detailed(" got field 'capital'");
16814#ifdef FREECIV_JSON_CONNECTION
16815 field_addr.name = "capital";
16816#endif /* FREECIV_JSON_CONNECTION */
16817 {
16818 int readin;
16819
16820 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
16822 }
16823 real_packet->capital = readin;
16824 }
16825 }
16826 if (BV_ISSET(fields, 7)) {
16827 log_packet_detailed(" got field 'ppl_happy'");
16828#ifdef FREECIV_JSON_CONNECTION
16829 field_addr.name = "ppl_happy";
16830#endif /* FREECIV_JSON_CONNECTION */
16831 {
16832 int i;
16833
16834#ifdef FREECIV_JSON_CONNECTION
16835 /* Enter array. */
16836 field_addr.sub_location = plocation_elem_new(0);
16837#endif /* FREECIV_JSON_CONNECTION */
16838
16839 for (i = 0; i < FEELING_LAST; i++) {
16840#ifdef FREECIV_JSON_CONNECTION
16841 field_addr.sub_location->number = i;
16842#endif /* FREECIV_JSON_CONNECTION */
16843
16844 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
16845 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
16846 }
16847 }
16848
16849#ifdef FREECIV_JSON_CONNECTION
16850 /* Exit array. */
16851 FC_FREE(field_addr.sub_location);
16852#endif /* FREECIV_JSON_CONNECTION */
16853 }
16854 }
16855 if (BV_ISSET(fields, 8)) {
16856 log_packet_detailed(" got field 'ppl_content'");
16857#ifdef FREECIV_JSON_CONNECTION
16858 field_addr.name = "ppl_content";
16859#endif /* FREECIV_JSON_CONNECTION */
16860 {
16861 int i;
16862
16863#ifdef FREECIV_JSON_CONNECTION
16864 /* Enter array. */
16865 field_addr.sub_location = plocation_elem_new(0);
16866#endif /* FREECIV_JSON_CONNECTION */
16867
16868 for (i = 0; i < FEELING_LAST; i++) {
16869#ifdef FREECIV_JSON_CONNECTION
16870 field_addr.sub_location->number = i;
16871#endif /* FREECIV_JSON_CONNECTION */
16872
16873 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
16874 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
16875 }
16876 }
16877
16878#ifdef FREECIV_JSON_CONNECTION
16879 /* Exit array. */
16880 FC_FREE(field_addr.sub_location);
16881#endif /* FREECIV_JSON_CONNECTION */
16882 }
16883 }
16884 if (BV_ISSET(fields, 9)) {
16885 log_packet_detailed(" got field 'ppl_unhappy'");
16886#ifdef FREECIV_JSON_CONNECTION
16887 field_addr.name = "ppl_unhappy";
16888#endif /* FREECIV_JSON_CONNECTION */
16889 {
16890 int i;
16891
16892#ifdef FREECIV_JSON_CONNECTION
16893 /* Enter array. */
16894 field_addr.sub_location = plocation_elem_new(0);
16895#endif /* FREECIV_JSON_CONNECTION */
16896
16897 for (i = 0; i < FEELING_LAST; i++) {
16898#ifdef FREECIV_JSON_CONNECTION
16899 field_addr.sub_location->number = i;
16900#endif /* FREECIV_JSON_CONNECTION */
16901
16902 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
16903 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
16904 }
16905 }
16906
16907#ifdef FREECIV_JSON_CONNECTION
16908 /* Exit array. */
16909 FC_FREE(field_addr.sub_location);
16910#endif /* FREECIV_JSON_CONNECTION */
16911 }
16912 }
16913 if (BV_ISSET(fields, 10)) {
16914 log_packet_detailed(" got field 'ppl_angry'");
16915#ifdef FREECIV_JSON_CONNECTION
16916 field_addr.name = "ppl_angry";
16917#endif /* FREECIV_JSON_CONNECTION */
16918 {
16919 int i;
16920
16921#ifdef FREECIV_JSON_CONNECTION
16922 /* Enter array. */
16923 field_addr.sub_location = plocation_elem_new(0);
16924#endif /* FREECIV_JSON_CONNECTION */
16925
16926 for (i = 0; i < FEELING_LAST; i++) {
16927#ifdef FREECIV_JSON_CONNECTION
16928 field_addr.sub_location->number = i;
16929#endif /* FREECIV_JSON_CONNECTION */
16930
16931 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
16932 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
16933 }
16934 }
16935
16936#ifdef FREECIV_JSON_CONNECTION
16937 /* Exit array. */
16938 FC_FREE(field_addr.sub_location);
16939#endif /* FREECIV_JSON_CONNECTION */
16940 }
16941 }
16942 if (BV_ISSET(fields, 11)) {
16943 log_packet_detailed(" got field 'specialists_size'");
16944#ifdef FREECIV_JSON_CONNECTION
16945 field_addr.name = "specialists_size";
16946#endif /* FREECIV_JSON_CONNECTION */
16947 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
16948 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
16949 }
16950 }
16951 if (BV_ISSET(fields, 12)) {
16952 log_packet_detailed(" got field 'specialists'");
16953#ifdef FREECIV_JSON_CONNECTION
16954 field_addr.name = "specialists";
16955#endif /* FREECIV_JSON_CONNECTION */
16956 if (real_packet->specialists_size > SP_MAX) {
16957 RECEIVE_PACKET_FIELD_ERROR(specialists, ": truncation array");
16958 }
16959 {
16960 int i;
16961
16962#ifdef FREECIV_JSON_CONNECTION
16963 /* Enter array. */
16964 field_addr.sub_location = plocation_elem_new(0);
16965#endif /* FREECIV_JSON_CONNECTION */
16966
16967 for (i = 0; i < real_packet->specialists_size; i++) {
16968#ifdef FREECIV_JSON_CONNECTION
16969 field_addr.sub_location->number = i;
16970#endif /* FREECIV_JSON_CONNECTION */
16971
16972 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
16974 }
16975 }
16976
16977#ifdef FREECIV_JSON_CONNECTION
16978 /* Exit array. */
16979 FC_FREE(field_addr.sub_location);
16980#endif /* FREECIV_JSON_CONNECTION */
16981 }
16982 }
16983 if (BV_ISSET(fields, 13)) {
16984 log_packet_detailed(" got field 'history'");
16985#ifdef FREECIV_JSON_CONNECTION
16986 field_addr.name = "history";
16987#endif /* FREECIV_JSON_CONNECTION */
16988 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
16990 }
16991 }
16992 if (BV_ISSET(fields, 14)) {
16993 log_packet_detailed(" got field 'culture'");
16994#ifdef FREECIV_JSON_CONNECTION
16995 field_addr.name = "culture";
16996#endif /* FREECIV_JSON_CONNECTION */
16997 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
16999 }
17000 }
17001 if (BV_ISSET(fields, 15)) {
17002 log_packet_detailed(" got field 'buy_cost'");
17003#ifdef FREECIV_JSON_CONNECTION
17004 field_addr.name = "buy_cost";
17005#endif /* FREECIV_JSON_CONNECTION */
17006 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->buy_cost)) {
17008 }
17009 }
17010 if (BV_ISSET(fields, 16)) {
17011 log_packet_detailed(" got field 'surplus'");
17012#ifdef FREECIV_JSON_CONNECTION
17013 field_addr.name = "surplus";
17014#endif /* FREECIV_JSON_CONNECTION */
17015 {
17016 int i;
17017
17018#ifdef FREECIV_JSON_CONNECTION
17019 /* Enter array. */
17020 field_addr.sub_location = plocation_elem_new(0);
17021#endif /* FREECIV_JSON_CONNECTION */
17022
17023 for (i = 0; i < O_LAST; i++) {
17024#ifdef FREECIV_JSON_CONNECTION
17025 field_addr.sub_location->number = i;
17026#endif /* FREECIV_JSON_CONNECTION */
17027
17028 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->surplus[i])) {
17030 }
17031 }
17032
17033#ifdef FREECIV_JSON_CONNECTION
17034 /* Exit array. */
17035 FC_FREE(field_addr.sub_location);
17036#endif /* FREECIV_JSON_CONNECTION */
17037 }
17038 }
17039 if (BV_ISSET(fields, 17)) {
17040 log_packet_detailed(" got field 'waste'");
17041#ifdef FREECIV_JSON_CONNECTION
17042 field_addr.name = "waste";
17043#endif /* FREECIV_JSON_CONNECTION */
17044 {
17045 int i;
17046
17047#ifdef FREECIV_JSON_CONNECTION
17048 /* Enter array. */
17049 field_addr.sub_location = plocation_elem_new(0);
17050#endif /* FREECIV_JSON_CONNECTION */
17051
17052 for (i = 0; i < O_LAST; i++) {
17053#ifdef FREECIV_JSON_CONNECTION
17054 field_addr.sub_location->number = i;
17055#endif /* FREECIV_JSON_CONNECTION */
17056
17057 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->waste[i])) {
17059 }
17060 }
17061
17062#ifdef FREECIV_JSON_CONNECTION
17063 /* Exit array. */
17064 FC_FREE(field_addr.sub_location);
17065#endif /* FREECIV_JSON_CONNECTION */
17066 }
17067 }
17068 if (BV_ISSET(fields, 18)) {
17069 log_packet_detailed(" got field 'unhappy_penalty'");
17070#ifdef FREECIV_JSON_CONNECTION
17071 field_addr.name = "unhappy_penalty";
17072#endif /* FREECIV_JSON_CONNECTION */
17073 {
17074 int i;
17075
17076#ifdef FREECIV_JSON_CONNECTION
17077 /* Enter array. */
17078 field_addr.sub_location = plocation_elem_new(0);
17079#endif /* FREECIV_JSON_CONNECTION */
17080
17081 for (i = 0; i < O_LAST; i++) {
17082#ifdef FREECIV_JSON_CONNECTION
17083 field_addr.sub_location->number = i;
17084#endif /* FREECIV_JSON_CONNECTION */
17085
17086 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->unhappy_penalty[i])) {
17087 RECEIVE_PACKET_FIELD_ERROR(unhappy_penalty);
17088 }
17089 }
17090
17091#ifdef FREECIV_JSON_CONNECTION
17092 /* Exit array. */
17093 FC_FREE(field_addr.sub_location);
17094#endif /* FREECIV_JSON_CONNECTION */
17095 }
17096 }
17097 if (BV_ISSET(fields, 19)) {
17098 log_packet_detailed(" got field 'prod'");
17099#ifdef FREECIV_JSON_CONNECTION
17100 field_addr.name = "prod";
17101#endif /* FREECIV_JSON_CONNECTION */
17102 {
17103 int i;
17104
17105#ifdef FREECIV_JSON_CONNECTION
17106 /* Enter array. */
17107 field_addr.sub_location = plocation_elem_new(0);
17108#endif /* FREECIV_JSON_CONNECTION */
17109
17110 for (i = 0; i < O_LAST; i++) {
17111#ifdef FREECIV_JSON_CONNECTION
17112 field_addr.sub_location->number = i;
17113#endif /* FREECIV_JSON_CONNECTION */
17114
17115 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->prod[i])) {
17117 }
17118 }
17119
17120#ifdef FREECIV_JSON_CONNECTION
17121 /* Exit array. */
17122 FC_FREE(field_addr.sub_location);
17123#endif /* FREECIV_JSON_CONNECTION */
17124 }
17125 }
17126 if (BV_ISSET(fields, 20)) {
17127 log_packet_detailed(" got field 'citizen_base'");
17128#ifdef FREECIV_JSON_CONNECTION
17129 field_addr.name = "citizen_base";
17130#endif /* FREECIV_JSON_CONNECTION */
17131 {
17132 int i;
17133
17134#ifdef FREECIV_JSON_CONNECTION
17135 /* Enter array. */
17136 field_addr.sub_location = plocation_elem_new(0);
17137#endif /* FREECIV_JSON_CONNECTION */
17138
17139 for (i = 0; i < O_LAST; i++) {
17140#ifdef FREECIV_JSON_CONNECTION
17141 field_addr.sub_location->number = i;
17142#endif /* FREECIV_JSON_CONNECTION */
17143
17144 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->citizen_base[i])) {
17145 RECEIVE_PACKET_FIELD_ERROR(citizen_base);
17146 }
17147 }
17148
17149#ifdef FREECIV_JSON_CONNECTION
17150 /* Exit array. */
17151 FC_FREE(field_addr.sub_location);
17152#endif /* FREECIV_JSON_CONNECTION */
17153 }
17154 }
17155 if (BV_ISSET(fields, 21)) {
17156 log_packet_detailed(" got field 'usage'");
17157#ifdef FREECIV_JSON_CONNECTION
17158 field_addr.name = "usage";
17159#endif /* FREECIV_JSON_CONNECTION */
17160 {
17161 int i;
17162
17163#ifdef FREECIV_JSON_CONNECTION
17164 /* Enter array. */
17165 field_addr.sub_location = plocation_elem_new(0);
17166#endif /* FREECIV_JSON_CONNECTION */
17167
17168 for (i = 0; i < O_LAST; i++) {
17169#ifdef FREECIV_JSON_CONNECTION
17170 field_addr.sub_location->number = i;
17171#endif /* FREECIV_JSON_CONNECTION */
17172
17173 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->usage[i])) {
17175 }
17176 }
17177
17178#ifdef FREECIV_JSON_CONNECTION
17179 /* Exit array. */
17180 FC_FREE(field_addr.sub_location);
17181#endif /* FREECIV_JSON_CONNECTION */
17182 }
17183 }
17184 if (BV_ISSET(fields, 22)) {
17185 log_packet_detailed(" got field 'food_stock'");
17186#ifdef FREECIV_JSON_CONNECTION
17187 field_addr.name = "food_stock";
17188#endif /* FREECIV_JSON_CONNECTION */
17189 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->food_stock)) {
17190 RECEIVE_PACKET_FIELD_ERROR(food_stock);
17191 }
17192 }
17193 if (BV_ISSET(fields, 23)) {
17194 log_packet_detailed(" got field 'shield_stock'");
17195#ifdef FREECIV_JSON_CONNECTION
17196 field_addr.name = "shield_stock";
17197#endif /* FREECIV_JSON_CONNECTION */
17198 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
17199 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
17200 }
17201 }
17202 if (BV_ISSET(fields, 24)) {
17203 log_packet_detailed(" got field 'trade_route_count'");
17204#ifdef FREECIV_JSON_CONNECTION
17205 field_addr.name = "trade_route_count";
17206#endif /* FREECIV_JSON_CONNECTION */
17207 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->trade_route_count)) {
17208 RECEIVE_PACKET_FIELD_ERROR(trade_route_count);
17209 }
17210 }
17211 if (BV_ISSET(fields, 25)) {
17212 log_packet_detailed(" got field 'pollution'");
17213#ifdef FREECIV_JSON_CONNECTION
17214 field_addr.name = "pollution";
17215#endif /* FREECIV_JSON_CONNECTION */
17216 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->pollution)) {
17217 RECEIVE_PACKET_FIELD_ERROR(pollution);
17218 }
17219 }
17220 if (BV_ISSET(fields, 26)) {
17221 log_packet_detailed(" got field 'illness_trade'");
17222#ifdef FREECIV_JSON_CONNECTION
17223 field_addr.name = "illness_trade";
17224#endif /* FREECIV_JSON_CONNECTION */
17225 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->illness_trade)) {
17226 RECEIVE_PACKET_FIELD_ERROR(illness_trade);
17227 }
17228 }
17229 if (BV_ISSET(fields, 27)) {
17230 log_packet_detailed(" got field 'production_kind'");
17231#ifdef FREECIV_JSON_CONNECTION
17232 field_addr.name = "production_kind";
17233#endif /* FREECIV_JSON_CONNECTION */
17234 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
17235 RECEIVE_PACKET_FIELD_ERROR(production_kind);
17236 }
17237 }
17238 if (BV_ISSET(fields, 28)) {
17239 log_packet_detailed(" got field 'production_value'");
17240#ifdef FREECIV_JSON_CONNECTION
17241 field_addr.name = "production_value";
17242#endif /* FREECIV_JSON_CONNECTION */
17243 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
17244 RECEIVE_PACKET_FIELD_ERROR(production_value);
17245 }
17246 }
17247 if (BV_ISSET(fields, 29)) {
17248 log_packet_detailed(" got field 'turn_founded'");
17249#ifdef FREECIV_JSON_CONNECTION
17250 field_addr.name = "turn_founded";
17251#endif /* FREECIV_JSON_CONNECTION */
17252 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
17253 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
17254 }
17255 }
17256 if (BV_ISSET(fields, 30)) {
17257 log_packet_detailed(" got field 'turn_last_built'");
17258#ifdef FREECIV_JSON_CONNECTION
17259 field_addr.name = "turn_last_built";
17260#endif /* FREECIV_JSON_CONNECTION */
17261 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
17262 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
17263 }
17264 }
17265 if (BV_ISSET(fields, 31)) {
17266 log_packet_detailed(" got field 'changed_from_kind'");
17267#ifdef FREECIV_JSON_CONNECTION
17268 field_addr.name = "changed_from_kind";
17269#endif /* FREECIV_JSON_CONNECTION */
17270 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_kind)) {
17271 RECEIVE_PACKET_FIELD_ERROR(changed_from_kind);
17272 }
17273 }
17274 if (BV_ISSET(fields, 32)) {
17275 log_packet_detailed(" got field 'changed_from_value'");
17276#ifdef FREECIV_JSON_CONNECTION
17277 field_addr.name = "changed_from_value";
17278#endif /* FREECIV_JSON_CONNECTION */
17279 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->changed_from_value)) {
17280 RECEIVE_PACKET_FIELD_ERROR(changed_from_value);
17281 }
17282 }
17283 if (BV_ISSET(fields, 33)) {
17284 log_packet_detailed(" got field 'before_change_shields'");
17285#ifdef FREECIV_JSON_CONNECTION
17286 field_addr.name = "before_change_shields";
17287#endif /* FREECIV_JSON_CONNECTION */
17288 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->before_change_shields)) {
17289 RECEIVE_PACKET_FIELD_ERROR(before_change_shields);
17290 }
17291 }
17292 if (BV_ISSET(fields, 34)) {
17293 log_packet_detailed(" got field 'disbanded_shields'");
17294#ifdef FREECIV_JSON_CONNECTION
17295 field_addr.name = "disbanded_shields";
17296#endif /* FREECIV_JSON_CONNECTION */
17297 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disbanded_shields)) {
17298 RECEIVE_PACKET_FIELD_ERROR(disbanded_shields);
17299 }
17300 }
17301 if (BV_ISSET(fields, 35)) {
17302 log_packet_detailed(" got field 'caravan_shields'");
17303#ifdef FREECIV_JSON_CONNECTION
17304 field_addr.name = "caravan_shields";
17305#endif /* FREECIV_JSON_CONNECTION */
17306 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->caravan_shields)) {
17307 RECEIVE_PACKET_FIELD_ERROR(caravan_shields);
17308 }
17309 }
17310 if (BV_ISSET(fields, 36)) {
17311 log_packet_detailed(" got field 'last_turns_shield_surplus'");
17312#ifdef FREECIV_JSON_CONNECTION
17313 field_addr.name = "last_turns_shield_surplus";
17314#endif /* FREECIV_JSON_CONNECTION */
17315 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->last_turns_shield_surplus)) {
17316 RECEIVE_PACKET_FIELD_ERROR(last_turns_shield_surplus);
17317 }
17318 }
17319 if (BV_ISSET(fields, 37)) {
17320 log_packet_detailed(" got field 'airlift'");
17321#ifdef FREECIV_JSON_CONNECTION
17322 field_addr.name = "airlift";
17323#endif /* FREECIV_JSON_CONNECTION */
17324 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->airlift)) {
17326 }
17327 }
17328 real_packet->did_buy = BV_ISSET(fields, 38);
17329 real_packet->did_sell = BV_ISSET(fields, 39);
17330 real_packet->was_happy = BV_ISSET(fields, 40);
17331 real_packet->had_famine = BV_ISSET(fields, 41);
17332 if (BV_ISSET(fields, 42)) {
17333 log_packet_detailed(" got field 'anarchy'");
17334#ifdef FREECIV_JSON_CONNECTION
17335 field_addr.name = "anarchy";
17336#endif /* FREECIV_JSON_CONNECTION */
17337 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->anarchy)) {
17339 }
17340 }
17341 if (BV_ISSET(fields, 43)) {
17342 log_packet_detailed(" got field 'rapture'");
17343#ifdef FREECIV_JSON_CONNECTION
17344 field_addr.name = "rapture";
17345#endif /* FREECIV_JSON_CONNECTION */
17346 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->rapture)) {
17348 }
17349 }
17350 real_packet->diplomat_investigate = BV_ISSET(fields, 44);
17351 if (BV_ISSET(fields, 45)) {
17352 log_packet_detailed(" got field 'walls'");
17353#ifdef FREECIV_JSON_CONNECTION
17354 field_addr.name = "walls";
17355#endif /* FREECIV_JSON_CONNECTION */
17356 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
17358 }
17359 }
17360 if (BV_ISSET(fields, 46)) {
17361 log_packet_detailed(" got field 'city_image'");
17362#ifdef FREECIV_JSON_CONNECTION
17363 field_addr.name = "city_image";
17364#endif /* FREECIV_JSON_CONNECTION */
17365 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
17366 RECEIVE_PACKET_FIELD_ERROR(city_image);
17367 }
17368 }
17369 if (BV_ISSET(fields, 47)) {
17370 log_packet_detailed(" got field 'steal'");
17371#ifdef FREECIV_JSON_CONNECTION
17372 field_addr.name = "steal";
17373#endif /* FREECIV_JSON_CONNECTION */
17374 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->steal)) {
17376 }
17377 }
17378 if (BV_ISSET(fields, 48)) {
17379 log_packet_detailed(" got field 'worklist'");
17380#ifdef FREECIV_JSON_CONNECTION
17381 field_addr.name = "worklist";
17382#endif /* FREECIV_JSON_CONNECTION */
17383 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
17385 }
17386 }
17387 if (BV_ISSET(fields, 49)) {
17388 log_packet_detailed(" got field 'improvements'");
17389#ifdef FREECIV_JSON_CONNECTION
17390 field_addr.name = "improvements";
17391#endif /* FREECIV_JSON_CONNECTION */
17392 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
17393 RECEIVE_PACKET_FIELD_ERROR(improvements);
17394 }
17395 }
17396 if (BV_ISSET(fields, 50)) {
17397 log_packet_detailed(" got field 'city_options'");
17398#ifdef FREECIV_JSON_CONNECTION
17399 field_addr.name = "city_options";
17400#endif /* FREECIV_JSON_CONNECTION */
17401 if (!DIO_BV_GET(&din, &field_addr, real_packet->city_options)) {
17402 RECEIVE_PACKET_FIELD_ERROR(city_options);
17403 }
17404 }
17405 if (BV_ISSET(fields, 51)) {
17406 log_packet_detailed(" got field 'wl_cb'");
17407#ifdef FREECIV_JSON_CONNECTION
17408 field_addr.name = "wl_cb";
17409#endif /* FREECIV_JSON_CONNECTION */
17410 {
17411 int readin;
17412
17413 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
17415 }
17416 real_packet->wl_cb = readin;
17417 }
17418 }
17419 if (BV_ISSET(fields, 52)) {
17420 log_packet_detailed(" got field 'acquire_type'");
17421#ifdef FREECIV_JSON_CONNECTION
17422 field_addr.name = "acquire_type";
17423#endif /* FREECIV_JSON_CONNECTION */
17424 {
17425 int readin;
17426
17427 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
17428 RECEIVE_PACKET_FIELD_ERROR(acquire_type);
17429 }
17430 real_packet->acquire_type = readin;
17431 }
17432 }
17433 if (BV_ISSET(fields, 53)) {
17434 log_packet_detailed(" got field 'name'");
17435#ifdef FREECIV_JSON_CONNECTION
17436 field_addr.name = "name";
17437#endif /* FREECIV_JSON_CONNECTION */
17438 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
17440 }
17441 }
17442
17443 if (NULL == old) {
17444 old = fc_malloc(sizeof(*old));
17445 *old = *real_packet;
17446 genhash_insert(*hash, old, old);
17447 } else {
17448 *old = *real_packet;
17449 }
17450
17451 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
17452 if (NULL != *hash) {
17454 }
17455
17456#endif /* FREECIV_DELTA_PROTOCOL */
17458}
17459
17460static int send_packet_city_info_101(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
17461{
17462 const struct packet_city_info *real_packet = packet;
17463 int e;
17464#ifdef FREECIV_DELTA_PROTOCOL
17466 struct packet_city_info *old;
17467 bool differ;
17468 struct genhash **hash = pc->phs.sent + PACKET_CITY_INFO;
17469 int different = force_to_send;
17470#endif /* FREECIV_DELTA_PROTOCOL */
17472#ifdef FREECIV_JSON_CONNECTION
17473 struct plocation field_addr;
17474 {
17478 }
17479#endif /* FREECIV_JSON_CONNECTION */
17480
17481 log_packet_detailed("packet_city_info_101: sending info about (%d)",
17482 real_packet->id);
17483
17484#ifdef FREECIV_DELTA_PROTOCOL
17485 if (NULL == *hash) {
17487 NULL, NULL, NULL, free);
17488 }
17489 BV_CLR_ALL(fields);
17490
17491 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
17492 old = fc_malloc(sizeof(*old));
17493 *old = *real_packet;
17494 genhash_insert(*hash, old, old);
17495 memset(old, 0, sizeof(*old));
17496 different = 1; /* Force to send. */
17497 }
17498 differ = (old->tile != real_packet->tile);
17499 if (differ) {
17500 different++;
17501 BV_SET(fields, 0);
17502 }
17503
17504 differ = (old->owner != real_packet->owner);
17505 if (differ) {
17506 different++;
17507 BV_SET(fields, 1);
17508 }
17509
17510 differ = (old->original != real_packet->original);
17511 if (differ) {
17512 different++;
17513 BV_SET(fields, 2);
17514 }
17515
17516 differ = (old->size != real_packet->size);
17517 if (differ) {
17518 different++;
17519 BV_SET(fields, 3);
17520 }
17521
17522 differ = (old->city_radius_sq != real_packet->city_radius_sq);
17523 if (differ) {
17524 different++;
17525 BV_SET(fields, 4);
17526 }
17527
17528 differ = (old->style != real_packet->style);
17529 if (differ) {
17530 different++;
17531 BV_SET(fields, 5);
17532 }
17533
17534 differ = (old->capital != real_packet->capital);
17535 if (differ) {
17536 different++;
17537 BV_SET(fields, 6);
17538 }
17539
17540 differ = FALSE;
17541 {
17542 int i;
17543
17544 for (i = 0; i < FEELING_LAST; i++) {
17545 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
17546 if (differ) {
17547 break;
17548 }
17549 }
17550 }
17551 if (differ) {
17552 different++;
17553 BV_SET(fields, 7);
17554 }
17555
17556 differ = FALSE;
17557 {
17558 int i;
17559
17560 for (i = 0; i < FEELING_LAST; i++) {
17561 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
17562 if (differ) {
17563 break;
17564 }
17565 }
17566 }
17567 if (differ) {
17568 different++;
17569 BV_SET(fields, 8);
17570 }
17571
17572 differ = FALSE;
17573 {
17574 int i;
17575
17576 for (i = 0; i < FEELING_LAST; i++) {
17577 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
17578 if (differ) {
17579 break;
17580 }
17581 }
17582 }
17583 if (differ) {
17584 different++;
17585 BV_SET(fields, 9);
17586 }
17587
17588 differ = FALSE;
17589 {
17590 int i;
17591
17592 for (i = 0; i < FEELING_LAST; i++) {
17593 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
17594 if (differ) {
17595 break;
17596 }
17597 }
17598 }
17599 if (differ) {
17600 different++;
17601 BV_SET(fields, 10);
17602 }
17603
17604 differ = (old->specialists_size != real_packet->specialists_size);
17605 if (differ) {
17606 different++;
17607 BV_SET(fields, 11);
17608 }
17609
17610 differ = (old->specialists_size != real_packet->specialists_size);
17611 if (!differ) {
17612 int i;
17613
17614 for (i = 0; i < real_packet->specialists_size; i++) {
17615 differ = (old->specialists[i] != real_packet->specialists[i]);
17616 if (differ) {
17617 break;
17618 }
17619 }
17620 }
17621 if (differ) {
17622 different++;
17623 BV_SET(fields, 12);
17624 }
17625
17626 differ = (old->history != real_packet->history);
17627 if (differ) {
17628 different++;
17629 BV_SET(fields, 13);
17630 }
17631
17632 differ = (old->culture != real_packet->culture);
17633 if (differ) {
17634 different++;
17635 BV_SET(fields, 14);
17636 }
17637
17638 differ = (old->buy_cost != real_packet->buy_cost);
17639 if (differ) {
17640 different++;
17641 BV_SET(fields, 15);
17642 }
17643
17644 differ = FALSE;
17645 {
17646 int i;
17647
17648 for (i = 0; i < O_LAST; i++) {
17649 differ = (old->surplus[i] != real_packet->surplus[i]);
17650 if (differ) {
17651 break;
17652 }
17653 }
17654 }
17655 if (differ) {
17656 different++;
17657 BV_SET(fields, 16);
17658 }
17659
17660 differ = FALSE;
17661 {
17662 int i;
17663
17664 for (i = 0; i < O_LAST; i++) {
17665 differ = (old->waste[i] != real_packet->waste[i]);
17666 if (differ) {
17667 break;
17668 }
17669 }
17670 }
17671 if (differ) {
17672 different++;
17673 BV_SET(fields, 17);
17674 }
17675
17676 differ = FALSE;
17677 {
17678 int i;
17679
17680 for (i = 0; i < O_LAST; i++) {
17681 differ = (old->unhappy_penalty[i] != real_packet->unhappy_penalty[i]);
17682 if (differ) {
17683 break;
17684 }
17685 }
17686 }
17687 if (differ) {
17688 different++;
17689 BV_SET(fields, 18);
17690 }
17691
17692 differ = FALSE;
17693 {
17694 int i;
17695
17696 for (i = 0; i < O_LAST; i++) {
17697 differ = (old->prod[i] != real_packet->prod[i]);
17698 if (differ) {
17699 break;
17700 }
17701 }
17702 }
17703 if (differ) {
17704 different++;
17705 BV_SET(fields, 19);
17706 }
17707
17708 differ = FALSE;
17709 {
17710 int i;
17711
17712 for (i = 0; i < O_LAST; i++) {
17713 differ = (old->citizen_base[i] != real_packet->citizen_base[i]);
17714 if (differ) {
17715 break;
17716 }
17717 }
17718 }
17719 if (differ) {
17720 different++;
17721 BV_SET(fields, 20);
17722 }
17723
17724 differ = FALSE;
17725 {
17726 int i;
17727
17728 for (i = 0; i < O_LAST; i++) {
17729 differ = (old->usage[i] != real_packet->usage[i]);
17730 if (differ) {
17731 break;
17732 }
17733 }
17734 }
17735 if (differ) {
17736 different++;
17737 BV_SET(fields, 21);
17738 }
17739
17740 differ = (old->food_stock != real_packet->food_stock);
17741 if (differ) {
17742 different++;
17743 BV_SET(fields, 22);
17744 }
17745
17746 differ = (old->shield_stock != real_packet->shield_stock);
17747 if (differ) {
17748 different++;
17749 BV_SET(fields, 23);
17750 }
17751
17752 differ = (old->trade_route_count != real_packet->trade_route_count);
17753 if (differ) {
17754 different++;
17755 BV_SET(fields, 24);
17756 }
17757
17758 differ = (old->pollution != real_packet->pollution);
17759 if (differ) {
17760 different++;
17761 BV_SET(fields, 25);
17762 }
17763
17764 differ = (old->illness_trade != real_packet->illness_trade);
17765 if (differ) {
17766 different++;
17767 BV_SET(fields, 26);
17768 }
17769
17770 differ = (old->production_kind != real_packet->production_kind);
17771 if (differ) {
17772 different++;
17773 BV_SET(fields, 27);
17774 }
17775
17776 differ = (old->production_value != real_packet->production_value);
17777 if (differ) {
17778 different++;
17779 BV_SET(fields, 28);
17780 }
17781
17782 differ = (old->turn_founded != real_packet->turn_founded);
17783 if (differ) {
17784 different++;
17785 BV_SET(fields, 29);
17786 }
17787
17788 differ = (old->turn_last_built != real_packet->turn_last_built);
17789 if (differ) {
17790 different++;
17791 BV_SET(fields, 30);
17792 }
17793
17794 differ = (old->changed_from_kind != real_packet->changed_from_kind);
17795 if (differ) {
17796 different++;
17797 BV_SET(fields, 31);
17798 }
17799
17800 differ = (old->changed_from_value != real_packet->changed_from_value);
17801 if (differ) {
17802 different++;
17803 BV_SET(fields, 32);
17804 }
17805
17806 differ = (old->before_change_shields != real_packet->before_change_shields);
17807 if (differ) {
17808 different++;
17809 BV_SET(fields, 33);
17810 }
17811
17812 differ = (old->disbanded_shields != real_packet->disbanded_shields);
17813 if (differ) {
17814 different++;
17815 BV_SET(fields, 34);
17816 }
17817
17818 differ = (old->caravan_shields != real_packet->caravan_shields);
17819 if (differ) {
17820 different++;
17821 BV_SET(fields, 35);
17822 }
17823
17824 differ = (old->last_turns_shield_surplus != real_packet->last_turns_shield_surplus);
17825 if (differ) {
17826 different++;
17827 BV_SET(fields, 36);
17828 }
17829
17830 differ = (old->airlift != real_packet->airlift);
17831 if (differ) {
17832 different++;
17833 BV_SET(fields, 37);
17834 }
17835
17836 differ = (old->did_buy != real_packet->did_buy);
17837 if (differ) {
17838 different++;
17839 }
17840 if (packet->did_buy) {
17841 BV_SET(fields, 38);
17842 }
17843
17844 differ = (old->did_sell != real_packet->did_sell);
17845 if (differ) {
17846 different++;
17847 }
17848 if (packet->did_sell) {
17849 BV_SET(fields, 39);
17850 }
17851
17852 differ = (old->was_happy != real_packet->was_happy);
17853 if (differ) {
17854 different++;
17855 }
17856 if (packet->was_happy) {
17857 BV_SET(fields, 40);
17858 }
17859
17860 differ = (old->had_famine != real_packet->had_famine);
17861 if (differ) {
17862 different++;
17863 }
17864 if (packet->had_famine) {
17865 BV_SET(fields, 41);
17866 }
17867
17868 differ = (old->anarchy != real_packet->anarchy);
17869 if (differ) {
17870 different++;
17871 BV_SET(fields, 42);
17872 }
17873
17874 differ = (old->rapture != real_packet->rapture);
17875 if (differ) {
17876 different++;
17877 BV_SET(fields, 43);
17878 }
17879
17880 differ = (old->diplomat_investigate != real_packet->diplomat_investigate);
17881 if (differ) {
17882 different++;
17883 }
17884 if (packet->diplomat_investigate) {
17885 BV_SET(fields, 44);
17886 }
17887
17888 differ = (old->walls != real_packet->walls);
17889 if (differ) {
17890 different++;
17891 BV_SET(fields, 45);
17892 }
17893
17894 differ = (old->city_image != real_packet->city_image);
17895 if (differ) {
17896 different++;
17897 BV_SET(fields, 46);
17898 }
17899
17900 differ = (old->steal != real_packet->steal);
17901 if (differ) {
17902 different++;
17903 BV_SET(fields, 47);
17904 }
17905
17906 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
17907 if (differ) {
17908 different++;
17909 BV_SET(fields, 48);
17910 }
17911
17912 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
17913 if (differ) {
17914 different++;
17915 BV_SET(fields, 49);
17916 }
17917
17918 differ = !BV_ARE_EQUAL(old->city_options, real_packet->city_options);
17919 if (differ) {
17920 different++;
17921 BV_SET(fields, 50);
17922 }
17923
17924 differ = (old->wl_cb != real_packet->wl_cb);
17925 if (differ) {
17926 different++;
17927 BV_SET(fields, 51);
17928 }
17929
17930 differ = (old->acquire_type != real_packet->acquire_type);
17931 if (differ) {
17932 different++;
17933 BV_SET(fields, 52);
17934 }
17935
17936 differ = (strcmp(old->name, real_packet->name) != 0);
17937 if (differ) {
17938 different++;
17939 BV_SET(fields, 53);
17940 }
17941
17942 if (different == 0) {
17943 log_packet_detailed(" no change -> discard");
17945 }
17946
17947#ifdef FREECIV_JSON_CONNECTION
17948 field_addr.name = "fields";
17949#endif /* FREECIV_JSON_CONNECTION */
17950 e = 0;
17951 e |= DIO_BV_PUT(&dout, &field_addr, fields);
17952 if (e) {
17953 log_packet_detailed("fields bitvector error detected");
17954 }
17955#ifdef FREECIV_JSON_CONNECTION
17956 field_addr.name = "id";
17957#endif /* FREECIV_JSON_CONNECTION */
17958 e = 0;
17959 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
17960 if (e) {
17961 log_packet_detailed("'id' field error detected");
17962 }
17963
17964 if (BV_ISSET(fields, 0)) {
17965 log_packet_detailed(" field 'tile' has changed");
17966#ifdef FREECIV_JSON_CONNECTION
17967 field_addr.name = "tile";
17968#endif /* FREECIV_JSON_CONNECTION */
17969 e = 0;
17970 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
17971 if (e) {
17972 log_packet_detailed("'tile' field error detected");
17973 }
17974 }
17975 if (BV_ISSET(fields, 1)) {
17976 log_packet_detailed(" field 'owner' has changed");
17977#ifdef FREECIV_JSON_CONNECTION
17978 field_addr.name = "owner";
17979#endif /* FREECIV_JSON_CONNECTION */
17980 e = 0;
17981 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
17982 if (e) {
17983 log_packet_detailed("'owner' field error detected");
17984 }
17985 }
17986 if (BV_ISSET(fields, 2)) {
17987 log_packet_detailed(" field 'original' has changed");
17988#ifdef FREECIV_JSON_CONNECTION
17989 field_addr.name = "original";
17990#endif /* FREECIV_JSON_CONNECTION */
17991 e = 0;
17992 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
17993 if (e) {
17994 log_packet_detailed("'original' field error detected");
17995 }
17996 }
17997 if (BV_ISSET(fields, 3)) {
17998 log_packet_detailed(" field 'size' has changed");
17999#ifdef FREECIV_JSON_CONNECTION
18000 field_addr.name = "size";
18001#endif /* FREECIV_JSON_CONNECTION */
18002 e = 0;
18003 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
18004 if (e) {
18005 log_packet_detailed("'size' field error detected");
18006 }
18007 }
18008 if (BV_ISSET(fields, 4)) {
18009 log_packet_detailed(" field 'city_radius_sq' has changed");
18010#ifdef FREECIV_JSON_CONNECTION
18011 field_addr.name = "city_radius_sq";
18012#endif /* FREECIV_JSON_CONNECTION */
18013 e = 0;
18014 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
18015 if (e) {
18016 log_packet_detailed("'city_radius_sq' field error detected");
18017 }
18018 }
18019 if (BV_ISSET(fields, 5)) {
18020 log_packet_detailed(" field 'style' has changed");
18021#ifdef FREECIV_JSON_CONNECTION
18022 field_addr.name = "style";
18023#endif /* FREECIV_JSON_CONNECTION */
18024 e = 0;
18025 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
18026 if (e) {
18027 log_packet_detailed("'style' field error detected");
18028 }
18029 }
18030 if (BV_ISSET(fields, 6)) {
18031 log_packet_detailed(" field 'capital' has changed");
18032#ifdef FREECIV_JSON_CONNECTION
18033 field_addr.name = "capital";
18034#endif /* FREECIV_JSON_CONNECTION */
18035 e = 0;
18036 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
18037 if (e) {
18038 log_packet_detailed("'capital' field error detected");
18039 }
18040 }
18041 if (BV_ISSET(fields, 7)) {
18042 log_packet_detailed(" field 'ppl_happy' has changed");
18043#ifdef FREECIV_JSON_CONNECTION
18044 field_addr.name = "ppl_happy";
18045#endif /* FREECIV_JSON_CONNECTION */
18046 e = 0;
18047 {
18048 int i;
18049
18050#ifdef FREECIV_JSON_CONNECTION
18051 /* Create the array. */
18053
18054 /* Enter the array. */
18055 field_addr.sub_location = plocation_elem_new(0);
18056#endif /* FREECIV_JSON_CONNECTION */
18057
18058 for (i = 0; i < FEELING_LAST; i++) {
18059#ifdef FREECIV_JSON_CONNECTION
18060 /* Next array element. */
18061 field_addr.sub_location->number = i;
18062#endif /* FREECIV_JSON_CONNECTION */
18063
18064 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
18065 }
18066
18067#ifdef FREECIV_JSON_CONNECTION
18068 /* Exit array. */
18069 FC_FREE(field_addr.sub_location);
18070#endif /* FREECIV_JSON_CONNECTION */
18071 }
18072 if (e) {
18073 log_packet_detailed("'ppl_happy' field error detected");
18074 }
18075 }
18076 if (BV_ISSET(fields, 8)) {
18077 log_packet_detailed(" field 'ppl_content' has changed");
18078#ifdef FREECIV_JSON_CONNECTION
18079 field_addr.name = "ppl_content";
18080#endif /* FREECIV_JSON_CONNECTION */
18081 e = 0;
18082 {
18083 int i;
18084
18085#ifdef FREECIV_JSON_CONNECTION
18086 /* Create the array. */
18088
18089 /* Enter the array. */
18090 field_addr.sub_location = plocation_elem_new(0);
18091#endif /* FREECIV_JSON_CONNECTION */
18092
18093 for (i = 0; i < FEELING_LAST; i++) {
18094#ifdef FREECIV_JSON_CONNECTION
18095 /* Next array element. */
18096 field_addr.sub_location->number = i;
18097#endif /* FREECIV_JSON_CONNECTION */
18098
18099 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
18100 }
18101
18102#ifdef FREECIV_JSON_CONNECTION
18103 /* Exit array. */
18104 FC_FREE(field_addr.sub_location);
18105#endif /* FREECIV_JSON_CONNECTION */
18106 }
18107 if (e) {
18108 log_packet_detailed("'ppl_content' field error detected");
18109 }
18110 }
18111 if (BV_ISSET(fields, 9)) {
18112 log_packet_detailed(" field 'ppl_unhappy' has changed");
18113#ifdef FREECIV_JSON_CONNECTION
18114 field_addr.name = "ppl_unhappy";
18115#endif /* FREECIV_JSON_CONNECTION */
18116 e = 0;
18117 {
18118 int i;
18119
18120#ifdef FREECIV_JSON_CONNECTION
18121 /* Create the array. */
18123
18124 /* Enter the array. */
18125 field_addr.sub_location = plocation_elem_new(0);
18126#endif /* FREECIV_JSON_CONNECTION */
18127
18128 for (i = 0; i < FEELING_LAST; i++) {
18129#ifdef FREECIV_JSON_CONNECTION
18130 /* Next array element. */
18131 field_addr.sub_location->number = i;
18132#endif /* FREECIV_JSON_CONNECTION */
18133
18134 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
18135 }
18136
18137#ifdef FREECIV_JSON_CONNECTION
18138 /* Exit array. */
18139 FC_FREE(field_addr.sub_location);
18140#endif /* FREECIV_JSON_CONNECTION */
18141 }
18142 if (e) {
18143 log_packet_detailed("'ppl_unhappy' field error detected");
18144 }
18145 }
18146 if (BV_ISSET(fields, 10)) {
18147 log_packet_detailed(" field 'ppl_angry' has changed");
18148#ifdef FREECIV_JSON_CONNECTION
18149 field_addr.name = "ppl_angry";
18150#endif /* FREECIV_JSON_CONNECTION */
18151 e = 0;
18152 {
18153 int i;
18154
18155#ifdef FREECIV_JSON_CONNECTION
18156 /* Create the array. */
18158
18159 /* Enter the array. */
18160 field_addr.sub_location = plocation_elem_new(0);
18161#endif /* FREECIV_JSON_CONNECTION */
18162
18163 for (i = 0; i < FEELING_LAST; i++) {
18164#ifdef FREECIV_JSON_CONNECTION
18165 /* Next array element. */
18166 field_addr.sub_location->number = i;
18167#endif /* FREECIV_JSON_CONNECTION */
18168
18169 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
18170 }
18171
18172#ifdef FREECIV_JSON_CONNECTION
18173 /* Exit array. */
18174 FC_FREE(field_addr.sub_location);
18175#endif /* FREECIV_JSON_CONNECTION */
18176 }
18177 if (e) {
18178 log_packet_detailed("'ppl_angry' field error detected");
18179 }
18180 }
18181 if (BV_ISSET(fields, 11)) {
18182 log_packet_detailed(" field 'specialists_size' has changed");
18183#ifdef FREECIV_JSON_CONNECTION
18184 field_addr.name = "specialists_size";
18185#endif /* FREECIV_JSON_CONNECTION */
18186 e = 0;
18187 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
18188 if (e) {
18189 log_packet_detailed("'specialists_size' field error detected");
18190 }
18191 }
18192 if (BV_ISSET(fields, 12)) {
18193 log_packet_detailed(" field 'specialists' has changed");
18194#ifdef FREECIV_JSON_CONNECTION
18195 field_addr.name = "specialists";
18196#endif /* FREECIV_JSON_CONNECTION */
18197 e = 0;
18198 {
18199 int i;
18200
18201#ifdef FREECIV_JSON_CONNECTION
18202 /* Create the array. */
18203 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
18204
18205 /* Enter the array. */
18206 field_addr.sub_location = plocation_elem_new(0);
18207#endif /* FREECIV_JSON_CONNECTION */
18208
18209 for (i = 0; i < real_packet->specialists_size; i++) {
18210#ifdef FREECIV_JSON_CONNECTION
18211 /* Next array element. */
18212 field_addr.sub_location->number = i;
18213#endif /* FREECIV_JSON_CONNECTION */
18214
18215 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
18216 }
18217
18218#ifdef FREECIV_JSON_CONNECTION
18219 /* Exit array. */
18220 FC_FREE(field_addr.sub_location);
18221#endif /* FREECIV_JSON_CONNECTION */
18222 }
18223 if (e) {
18224 log_packet_detailed("'specialists' field error detected");
18225 }
18226 }
18227 if (BV_ISSET(fields, 13)) {
18228 log_packet_detailed(" field 'history' has changed");
18229#ifdef FREECIV_JSON_CONNECTION
18230 field_addr.name = "history";
18231#endif /* FREECIV_JSON_CONNECTION */
18232 e = 0;
18233 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
18234 if (e) {
18235 log_packet_detailed("'history' field error detected");
18236 }
18237 }
18238 if (BV_ISSET(fields, 14)) {
18239 log_packet_detailed(" field 'culture' has changed");
18240#ifdef FREECIV_JSON_CONNECTION
18241 field_addr.name = "culture";
18242#endif /* FREECIV_JSON_CONNECTION */
18243 e = 0;
18244 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
18245 if (e) {
18246 log_packet_detailed("'culture' field error detected");
18247 }
18248 }
18249 if (BV_ISSET(fields, 15)) {
18250 log_packet_detailed(" field 'buy_cost' has changed");
18251#ifdef FREECIV_JSON_CONNECTION
18252 field_addr.name = "buy_cost";
18253#endif /* FREECIV_JSON_CONNECTION */
18254 e = 0;
18255 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
18256 if (e) {
18257 log_packet_detailed("'buy_cost' field error detected");
18258 }
18259 }
18260 if (BV_ISSET(fields, 16)) {
18261 log_packet_detailed(" field 'surplus' has changed");
18262#ifdef FREECIV_JSON_CONNECTION
18263 field_addr.name = "surplus";
18264#endif /* FREECIV_JSON_CONNECTION */
18265 e = 0;
18266 {
18267 int i;
18268
18269#ifdef FREECIV_JSON_CONNECTION
18270 /* Create the array. */
18271 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18272
18273 /* Enter the array. */
18274 field_addr.sub_location = plocation_elem_new(0);
18275#endif /* FREECIV_JSON_CONNECTION */
18276
18277 for (i = 0; i < O_LAST; i++) {
18278#ifdef FREECIV_JSON_CONNECTION
18279 /* Next array element. */
18280 field_addr.sub_location->number = i;
18281#endif /* FREECIV_JSON_CONNECTION */
18282
18283 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
18284 }
18285
18286#ifdef FREECIV_JSON_CONNECTION
18287 /* Exit array. */
18288 FC_FREE(field_addr.sub_location);
18289#endif /* FREECIV_JSON_CONNECTION */
18290 }
18291 if (e) {
18292 log_packet_detailed("'surplus' field error detected");
18293 }
18294 }
18295 if (BV_ISSET(fields, 17)) {
18296 log_packet_detailed(" field 'waste' has changed");
18297#ifdef FREECIV_JSON_CONNECTION
18298 field_addr.name = "waste";
18299#endif /* FREECIV_JSON_CONNECTION */
18300 e = 0;
18301 {
18302 int i;
18303
18304#ifdef FREECIV_JSON_CONNECTION
18305 /* Create the array. */
18306 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18307
18308 /* Enter the array. */
18309 field_addr.sub_location = plocation_elem_new(0);
18310#endif /* FREECIV_JSON_CONNECTION */
18311
18312 for (i = 0; i < O_LAST; i++) {
18313#ifdef FREECIV_JSON_CONNECTION
18314 /* Next array element. */
18315 field_addr.sub_location->number = i;
18316#endif /* FREECIV_JSON_CONNECTION */
18317
18318 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
18319 }
18320
18321#ifdef FREECIV_JSON_CONNECTION
18322 /* Exit array. */
18323 FC_FREE(field_addr.sub_location);
18324#endif /* FREECIV_JSON_CONNECTION */
18325 }
18326 if (e) {
18327 log_packet_detailed("'waste' field error detected");
18328 }
18329 }
18330 if (BV_ISSET(fields, 18)) {
18331 log_packet_detailed(" field 'unhappy_penalty' has changed");
18332#ifdef FREECIV_JSON_CONNECTION
18333 field_addr.name = "unhappy_penalty";
18334#endif /* FREECIV_JSON_CONNECTION */
18335 e = 0;
18336 {
18337 int i;
18338
18339#ifdef FREECIV_JSON_CONNECTION
18340 /* Create the array. */
18341 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18342
18343 /* Enter the array. */
18344 field_addr.sub_location = plocation_elem_new(0);
18345#endif /* FREECIV_JSON_CONNECTION */
18346
18347 for (i = 0; i < O_LAST; i++) {
18348#ifdef FREECIV_JSON_CONNECTION
18349 /* Next array element. */
18350 field_addr.sub_location->number = i;
18351#endif /* FREECIV_JSON_CONNECTION */
18352
18353 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
18354 }
18355
18356#ifdef FREECIV_JSON_CONNECTION
18357 /* Exit array. */
18358 FC_FREE(field_addr.sub_location);
18359#endif /* FREECIV_JSON_CONNECTION */
18360 }
18361 if (e) {
18362 log_packet_detailed("'unhappy_penalty' field error detected");
18363 }
18364 }
18365 if (BV_ISSET(fields, 19)) {
18366 log_packet_detailed(" field 'prod' has changed");
18367#ifdef FREECIV_JSON_CONNECTION
18368 field_addr.name = "prod";
18369#endif /* FREECIV_JSON_CONNECTION */
18370 e = 0;
18371 {
18372 int i;
18373
18374#ifdef FREECIV_JSON_CONNECTION
18375 /* Create the array. */
18376 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18377
18378 /* Enter the array. */
18379 field_addr.sub_location = plocation_elem_new(0);
18380#endif /* FREECIV_JSON_CONNECTION */
18381
18382 for (i = 0; i < O_LAST; i++) {
18383#ifdef FREECIV_JSON_CONNECTION
18384 /* Next array element. */
18385 field_addr.sub_location->number = i;
18386#endif /* FREECIV_JSON_CONNECTION */
18387
18388 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
18389 }
18390
18391#ifdef FREECIV_JSON_CONNECTION
18392 /* Exit array. */
18393 FC_FREE(field_addr.sub_location);
18394#endif /* FREECIV_JSON_CONNECTION */
18395 }
18396 if (e) {
18397 log_packet_detailed("'prod' field error detected");
18398 }
18399 }
18400 if (BV_ISSET(fields, 20)) {
18401 log_packet_detailed(" field 'citizen_base' has changed");
18402#ifdef FREECIV_JSON_CONNECTION
18403 field_addr.name = "citizen_base";
18404#endif /* FREECIV_JSON_CONNECTION */
18405 e = 0;
18406 {
18407 int i;
18408
18409#ifdef FREECIV_JSON_CONNECTION
18410 /* Create the array. */
18411 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18412
18413 /* Enter the array. */
18414 field_addr.sub_location = plocation_elem_new(0);
18415#endif /* FREECIV_JSON_CONNECTION */
18416
18417 for (i = 0; i < O_LAST; i++) {
18418#ifdef FREECIV_JSON_CONNECTION
18419 /* Next array element. */
18420 field_addr.sub_location->number = i;
18421#endif /* FREECIV_JSON_CONNECTION */
18422
18423 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
18424 }
18425
18426#ifdef FREECIV_JSON_CONNECTION
18427 /* Exit array. */
18428 FC_FREE(field_addr.sub_location);
18429#endif /* FREECIV_JSON_CONNECTION */
18430 }
18431 if (e) {
18432 log_packet_detailed("'citizen_base' field error detected");
18433 }
18434 }
18435 if (BV_ISSET(fields, 21)) {
18436 log_packet_detailed(" field 'usage' has changed");
18437#ifdef FREECIV_JSON_CONNECTION
18438 field_addr.name = "usage";
18439#endif /* FREECIV_JSON_CONNECTION */
18440 e = 0;
18441 {
18442 int i;
18443
18444#ifdef FREECIV_JSON_CONNECTION
18445 /* Create the array. */
18446 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
18447
18448 /* Enter the array. */
18449 field_addr.sub_location = plocation_elem_new(0);
18450#endif /* FREECIV_JSON_CONNECTION */
18451
18452 for (i = 0; i < O_LAST; i++) {
18453#ifdef FREECIV_JSON_CONNECTION
18454 /* Next array element. */
18455 field_addr.sub_location->number = i;
18456#endif /* FREECIV_JSON_CONNECTION */
18457
18458 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
18459 }
18460
18461#ifdef FREECIV_JSON_CONNECTION
18462 /* Exit array. */
18463 FC_FREE(field_addr.sub_location);
18464#endif /* FREECIV_JSON_CONNECTION */
18465 }
18466 if (e) {
18467 log_packet_detailed("'usage' field error detected");
18468 }
18469 }
18470 if (BV_ISSET(fields, 22)) {
18471 log_packet_detailed(" field 'food_stock' has changed");
18472#ifdef FREECIV_JSON_CONNECTION
18473 field_addr.name = "food_stock";
18474#endif /* FREECIV_JSON_CONNECTION */
18475 e = 0;
18476 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
18477 if (e) {
18478 log_packet_detailed("'food_stock' field error detected");
18479 }
18480 }
18481 if (BV_ISSET(fields, 23)) {
18482 log_packet_detailed(" field 'shield_stock' has changed");
18483#ifdef FREECIV_JSON_CONNECTION
18484 field_addr.name = "shield_stock";
18485#endif /* FREECIV_JSON_CONNECTION */
18486 e = 0;
18487 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
18488 if (e) {
18489 log_packet_detailed("'shield_stock' field error detected");
18490 }
18491 }
18492 if (BV_ISSET(fields, 24)) {
18493 log_packet_detailed(" field 'trade_route_count' has changed");
18494#ifdef FREECIV_JSON_CONNECTION
18495 field_addr.name = "trade_route_count";
18496#endif /* FREECIV_JSON_CONNECTION */
18497 e = 0;
18498 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
18499 if (e) {
18500 log_packet_detailed("'trade_route_count' field error detected");
18501 }
18502 }
18503 if (BV_ISSET(fields, 25)) {
18504 log_packet_detailed(" field 'pollution' has changed");
18505#ifdef FREECIV_JSON_CONNECTION
18506 field_addr.name = "pollution";
18507#endif /* FREECIV_JSON_CONNECTION */
18508 e = 0;
18509 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
18510 if (e) {
18511 log_packet_detailed("'pollution' field error detected");
18512 }
18513 }
18514 if (BV_ISSET(fields, 26)) {
18515 log_packet_detailed(" field 'illness_trade' has changed");
18516#ifdef FREECIV_JSON_CONNECTION
18517 field_addr.name = "illness_trade";
18518#endif /* FREECIV_JSON_CONNECTION */
18519 e = 0;
18520 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
18521 if (e) {
18522 log_packet_detailed("'illness_trade' field error detected");
18523 }
18524 }
18525 if (BV_ISSET(fields, 27)) {
18526 log_packet_detailed(" field 'production_kind' has changed");
18527#ifdef FREECIV_JSON_CONNECTION
18528 field_addr.name = "production_kind";
18529#endif /* FREECIV_JSON_CONNECTION */
18530 e = 0;
18531 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
18532 if (e) {
18533 log_packet_detailed("'production_kind' field error detected");
18534 }
18535 }
18536 if (BV_ISSET(fields, 28)) {
18537 log_packet_detailed(" field 'production_value' has changed");
18538#ifdef FREECIV_JSON_CONNECTION
18539 field_addr.name = "production_value";
18540#endif /* FREECIV_JSON_CONNECTION */
18541 e = 0;
18542 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
18543 if (e) {
18544 log_packet_detailed("'production_value' field error detected");
18545 }
18546 }
18547 if (BV_ISSET(fields, 29)) {
18548 log_packet_detailed(" field 'turn_founded' has changed");
18549#ifdef FREECIV_JSON_CONNECTION
18550 field_addr.name = "turn_founded";
18551#endif /* FREECIV_JSON_CONNECTION */
18552 e = 0;
18553 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
18554 if (e) {
18555 log_packet_detailed("'turn_founded' field error detected");
18556 }
18557 }
18558 if (BV_ISSET(fields, 30)) {
18559 log_packet_detailed(" field 'turn_last_built' has changed");
18560#ifdef FREECIV_JSON_CONNECTION
18561 field_addr.name = "turn_last_built";
18562#endif /* FREECIV_JSON_CONNECTION */
18563 e = 0;
18564 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
18565 if (e) {
18566 log_packet_detailed("'turn_last_built' field error detected");
18567 }
18568 }
18569 if (BV_ISSET(fields, 31)) {
18570 log_packet_detailed(" field 'changed_from_kind' has changed");
18571#ifdef FREECIV_JSON_CONNECTION
18572 field_addr.name = "changed_from_kind";
18573#endif /* FREECIV_JSON_CONNECTION */
18574 e = 0;
18575 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
18576 if (e) {
18577 log_packet_detailed("'changed_from_kind' field error detected");
18578 }
18579 }
18580 if (BV_ISSET(fields, 32)) {
18581 log_packet_detailed(" field 'changed_from_value' has changed");
18582#ifdef FREECIV_JSON_CONNECTION
18583 field_addr.name = "changed_from_value";
18584#endif /* FREECIV_JSON_CONNECTION */
18585 e = 0;
18586 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
18587 if (e) {
18588 log_packet_detailed("'changed_from_value' field error detected");
18589 }
18590 }
18591 if (BV_ISSET(fields, 33)) {
18592 log_packet_detailed(" field 'before_change_shields' has changed");
18593#ifdef FREECIV_JSON_CONNECTION
18594 field_addr.name = "before_change_shields";
18595#endif /* FREECIV_JSON_CONNECTION */
18596 e = 0;
18597 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
18598 if (e) {
18599 log_packet_detailed("'before_change_shields' field error detected");
18600 }
18601 }
18602 if (BV_ISSET(fields, 34)) {
18603 log_packet_detailed(" field 'disbanded_shields' has changed");
18604#ifdef FREECIV_JSON_CONNECTION
18605 field_addr.name = "disbanded_shields";
18606#endif /* FREECIV_JSON_CONNECTION */
18607 e = 0;
18608 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
18609 if (e) {
18610 log_packet_detailed("'disbanded_shields' field error detected");
18611 }
18612 }
18613 if (BV_ISSET(fields, 35)) {
18614 log_packet_detailed(" field 'caravan_shields' has changed");
18615#ifdef FREECIV_JSON_CONNECTION
18616 field_addr.name = "caravan_shields";
18617#endif /* FREECIV_JSON_CONNECTION */
18618 e = 0;
18619 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
18620 if (e) {
18621 log_packet_detailed("'caravan_shields' field error detected");
18622 }
18623 }
18624 if (BV_ISSET(fields, 36)) {
18625 log_packet_detailed(" field 'last_turns_shield_surplus' has changed");
18626#ifdef FREECIV_JSON_CONNECTION
18627 field_addr.name = "last_turns_shield_surplus";
18628#endif /* FREECIV_JSON_CONNECTION */
18629 e = 0;
18630 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
18631 if (e) {
18632 log_packet_detailed("'last_turns_shield_surplus' field error detected");
18633 }
18634 }
18635 if (BV_ISSET(fields, 37)) {
18636 log_packet_detailed(" field 'airlift' has changed");
18637#ifdef FREECIV_JSON_CONNECTION
18638 field_addr.name = "airlift";
18639#endif /* FREECIV_JSON_CONNECTION */
18640 e = 0;
18641 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
18642 if (e) {
18643 log_packet_detailed("'airlift' field error detected");
18644 }
18645 }
18646 /* field 38 is folded into the header */
18647 /* field 39 is folded into the header */
18648 /* field 40 is folded into the header */
18649 /* field 41 is folded into the header */
18650 if (BV_ISSET(fields, 42)) {
18651 log_packet_detailed(" field 'anarchy' has changed");
18652#ifdef FREECIV_JSON_CONNECTION
18653 field_addr.name = "anarchy";
18654#endif /* FREECIV_JSON_CONNECTION */
18655 e = 0;
18656 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->anarchy);
18657 if (e) {
18658 log_packet_detailed("'anarchy' field error detected");
18659 }
18660 }
18661 if (BV_ISSET(fields, 43)) {
18662 log_packet_detailed(" field 'rapture' has changed");
18663#ifdef FREECIV_JSON_CONNECTION
18664 field_addr.name = "rapture";
18665#endif /* FREECIV_JSON_CONNECTION */
18666 e = 0;
18667 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->rapture);
18668 if (e) {
18669 log_packet_detailed("'rapture' field error detected");
18670 }
18671 }
18672 /* field 44 is folded into the header */
18673 if (BV_ISSET(fields, 45)) {
18674 log_packet_detailed(" field 'walls' has changed");
18675#ifdef FREECIV_JSON_CONNECTION
18676 field_addr.name = "walls";
18677#endif /* FREECIV_JSON_CONNECTION */
18678 e = 0;
18679 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
18680 if (e) {
18681 log_packet_detailed("'walls' field error detected");
18682 }
18683 }
18684 if (BV_ISSET(fields, 46)) {
18685 log_packet_detailed(" field 'city_image' has changed");
18686#ifdef FREECIV_JSON_CONNECTION
18687 field_addr.name = "city_image";
18688#endif /* FREECIV_JSON_CONNECTION */
18689 e = 0;
18690 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
18691 if (e) {
18692 log_packet_detailed("'city_image' field error detected");
18693 }
18694 }
18695 if (BV_ISSET(fields, 47)) {
18696 log_packet_detailed(" field 'steal' has changed");
18697#ifdef FREECIV_JSON_CONNECTION
18698 field_addr.name = "steal";
18699#endif /* FREECIV_JSON_CONNECTION */
18700 e = 0;
18701 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
18702 if (e) {
18703 log_packet_detailed("'steal' field error detected");
18704 }
18705 }
18706 if (BV_ISSET(fields, 48)) {
18707 log_packet_detailed(" field 'worklist' has changed");
18708#ifdef FREECIV_JSON_CONNECTION
18709 field_addr.name = "worklist";
18710#endif /* FREECIV_JSON_CONNECTION */
18711 e = 0;
18712 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
18713 if (e) {
18714 log_packet_detailed("'worklist' field error detected");
18715 }
18716 }
18717 if (BV_ISSET(fields, 49)) {
18718 log_packet_detailed(" field 'improvements' has changed");
18719#ifdef FREECIV_JSON_CONNECTION
18720 field_addr.name = "improvements";
18721#endif /* FREECIV_JSON_CONNECTION */
18722 e = 0;
18723 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
18724 if (e) {
18725 log_packet_detailed("'improvements' field error detected");
18726 }
18727 }
18728 if (BV_ISSET(fields, 50)) {
18729 log_packet_detailed(" field 'city_options' has changed");
18730#ifdef FREECIV_JSON_CONNECTION
18731 field_addr.name = "city_options";
18732#endif /* FREECIV_JSON_CONNECTION */
18733 e = 0;
18734 e |= DIO_BV_PUT(&dout, &field_addr, packet->city_options);
18735 if (e) {
18736 log_packet_detailed("'city_options' field error detected");
18737 }
18738 }
18739 if (BV_ISSET(fields, 51)) {
18740 log_packet_detailed(" field 'wl_cb' has changed");
18741#ifdef FREECIV_JSON_CONNECTION
18742 field_addr.name = "wl_cb";
18743#endif /* FREECIV_JSON_CONNECTION */
18744 e = 0;
18745 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
18746 if (e) {
18747 log_packet_detailed("'wl_cb' field error detected");
18748 }
18749 }
18750 if (BV_ISSET(fields, 52)) {
18751 log_packet_detailed(" field 'acquire_type' has changed");
18752#ifdef FREECIV_JSON_CONNECTION
18753 field_addr.name = "acquire_type";
18754#endif /* FREECIV_JSON_CONNECTION */
18755 e = 0;
18756 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
18757 if (e) {
18758 log_packet_detailed("'acquire_type' field error detected");
18759 }
18760 }
18761 if (BV_ISSET(fields, 53)) {
18762 log_packet_detailed(" field 'name' has changed");
18763#ifdef FREECIV_JSON_CONNECTION
18764 field_addr.name = "name";
18765#endif /* FREECIV_JSON_CONNECTION */
18766 e = 0;
18767 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
18768 if (e) {
18769 log_packet_detailed("'name' field error detected");
18770 }
18771 }
18772
18773 *old = *real_packet;
18774
18775 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
18776 if (NULL != *hash) {
18778 }
18779#endif /* FREECIV_DELTA_PROTOCOL */
18780#ifndef FREECIV_DELTA_PROTOCOL
18781#ifdef FREECIV_JSON_CONNECTION
18782 field_addr.name = "id";
18783#endif /* FREECIV_JSON_CONNECTION */
18784 e = 0;
18785 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
18786 if (e) {
18787 log_packet_detailed("'id' field error detected");
18788 }
18789#ifdef FREECIV_JSON_CONNECTION
18790 field_addr.name = "tile";
18791#endif /* FREECIV_JSON_CONNECTION */
18792 e = 0;
18793 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
18794 if (e) {
18795 log_packet_detailed("'tile' field error detected");
18796 }
18797#ifdef FREECIV_JSON_CONNECTION
18798 field_addr.name = "owner";
18799#endif /* FREECIV_JSON_CONNECTION */
18800 e = 0;
18801 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
18802 if (e) {
18803 log_packet_detailed("'owner' field error detected");
18804 }
18805#ifdef FREECIV_JSON_CONNECTION
18806 field_addr.name = "original";
18807#endif /* FREECIV_JSON_CONNECTION */
18808 e = 0;
18809 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
18810 if (e) {
18811 log_packet_detailed("'original' field error detected");
18812 }
18813#ifdef FREECIV_JSON_CONNECTION
18814 field_addr.name = "size";
18815#endif /* FREECIV_JSON_CONNECTION */
18816 e = 0;
18817 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
18818 if (e) {
18819 log_packet_detailed("'size' field error detected");
18820 }
18821#ifdef FREECIV_JSON_CONNECTION
18822 field_addr.name = "city_radius_sq";
18823#endif /* FREECIV_JSON_CONNECTION */
18824 e = 0;
18825 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_radius_sq);
18826 if (e) {
18827 log_packet_detailed("'city_radius_sq' field error detected");
18828 }
18829#ifdef FREECIV_JSON_CONNECTION
18830 field_addr.name = "style";
18831#endif /* FREECIV_JSON_CONNECTION */
18832 e = 0;
18833 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
18834 if (e) {
18835 log_packet_detailed("'style' field error detected");
18836 }
18837#ifdef FREECIV_JSON_CONNECTION
18838 field_addr.name = "capital";
18839#endif /* FREECIV_JSON_CONNECTION */
18840 e = 0;
18841 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
18842 if (e) {
18843 log_packet_detailed("'capital' field error detected");
18844 }
18845#ifdef FREECIV_JSON_CONNECTION
18846 field_addr.name = "ppl_happy";
18847#endif /* FREECIV_JSON_CONNECTION */
18848 e = 0;
18849 {
18850 int i;
18851
18852#ifdef FREECIV_JSON_CONNECTION
18853 /* Create the array. */
18855
18856 /* Enter the array. */
18857 field_addr.sub_location = plocation_elem_new(0);
18858#endif /* FREECIV_JSON_CONNECTION */
18859
18860 for (i = 0; i < FEELING_LAST; i++) {
18861#ifdef FREECIV_JSON_CONNECTION
18862 /* Next array element. */
18863 field_addr.sub_location->number = i;
18864#endif /* FREECIV_JSON_CONNECTION */
18865
18866 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
18867 }
18868
18869#ifdef FREECIV_JSON_CONNECTION
18870 /* Exit array. */
18871 FC_FREE(field_addr.sub_location);
18872#endif /* FREECIV_JSON_CONNECTION */
18873 }
18874 if (e) {
18875 log_packet_detailed("'ppl_happy' field error detected");
18876 }
18877#ifdef FREECIV_JSON_CONNECTION
18878 field_addr.name = "ppl_content";
18879#endif /* FREECIV_JSON_CONNECTION */
18880 e = 0;
18881 {
18882 int i;
18883
18884#ifdef FREECIV_JSON_CONNECTION
18885 /* Create the array. */
18887
18888 /* Enter the array. */
18889 field_addr.sub_location = plocation_elem_new(0);
18890#endif /* FREECIV_JSON_CONNECTION */
18891
18892 for (i = 0; i < FEELING_LAST; i++) {
18893#ifdef FREECIV_JSON_CONNECTION
18894 /* Next array element. */
18895 field_addr.sub_location->number = i;
18896#endif /* FREECIV_JSON_CONNECTION */
18897
18898 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
18899 }
18900
18901#ifdef FREECIV_JSON_CONNECTION
18902 /* Exit array. */
18903 FC_FREE(field_addr.sub_location);
18904#endif /* FREECIV_JSON_CONNECTION */
18905 }
18906 if (e) {
18907 log_packet_detailed("'ppl_content' field error detected");
18908 }
18909#ifdef FREECIV_JSON_CONNECTION
18910 field_addr.name = "ppl_unhappy";
18911#endif /* FREECIV_JSON_CONNECTION */
18912 e = 0;
18913 {
18914 int i;
18915
18916#ifdef FREECIV_JSON_CONNECTION
18917 /* Create the array. */
18919
18920 /* Enter the array. */
18921 field_addr.sub_location = plocation_elem_new(0);
18922#endif /* FREECIV_JSON_CONNECTION */
18923
18924 for (i = 0; i < FEELING_LAST; i++) {
18925#ifdef FREECIV_JSON_CONNECTION
18926 /* Next array element. */
18927 field_addr.sub_location->number = i;
18928#endif /* FREECIV_JSON_CONNECTION */
18929
18930 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
18931 }
18932
18933#ifdef FREECIV_JSON_CONNECTION
18934 /* Exit array. */
18935 FC_FREE(field_addr.sub_location);
18936#endif /* FREECIV_JSON_CONNECTION */
18937 }
18938 if (e) {
18939 log_packet_detailed("'ppl_unhappy' field error detected");
18940 }
18941#ifdef FREECIV_JSON_CONNECTION
18942 field_addr.name = "ppl_angry";
18943#endif /* FREECIV_JSON_CONNECTION */
18944 e = 0;
18945 {
18946 int i;
18947
18948#ifdef FREECIV_JSON_CONNECTION
18949 /* Create the array. */
18951
18952 /* Enter the array. */
18953 field_addr.sub_location = plocation_elem_new(0);
18954#endif /* FREECIV_JSON_CONNECTION */
18955
18956 for (i = 0; i < FEELING_LAST; i++) {
18957#ifdef FREECIV_JSON_CONNECTION
18958 /* Next array element. */
18959 field_addr.sub_location->number = i;
18960#endif /* FREECIV_JSON_CONNECTION */
18961
18962 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
18963 }
18964
18965#ifdef FREECIV_JSON_CONNECTION
18966 /* Exit array. */
18967 FC_FREE(field_addr.sub_location);
18968#endif /* FREECIV_JSON_CONNECTION */
18969 }
18970 if (e) {
18971 log_packet_detailed("'ppl_angry' field error detected");
18972 }
18973#ifdef FREECIV_JSON_CONNECTION
18974 field_addr.name = "specialists_size";
18975#endif /* FREECIV_JSON_CONNECTION */
18976 e = 0;
18977 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
18978 if (e) {
18979 log_packet_detailed("'specialists_size' field error detected");
18980 }
18981#ifdef FREECIV_JSON_CONNECTION
18982 field_addr.name = "specialists";
18983#endif /* FREECIV_JSON_CONNECTION */
18984 e = 0;
18985 {
18986 int i;
18987
18988#ifdef FREECIV_JSON_CONNECTION
18989 /* Create the array. */
18990 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
18991
18992 /* Enter the array. */
18993 field_addr.sub_location = plocation_elem_new(0);
18994#endif /* FREECIV_JSON_CONNECTION */
18995
18996 for (i = 0; i < real_packet->specialists_size; i++) {
18997#ifdef FREECIV_JSON_CONNECTION
18998 /* Next array element. */
18999 field_addr.sub_location->number = i;
19000#endif /* FREECIV_JSON_CONNECTION */
19001
19002 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
19003 }
19004
19005#ifdef FREECIV_JSON_CONNECTION
19006 /* Exit array. */
19007 FC_FREE(field_addr.sub_location);
19008#endif /* FREECIV_JSON_CONNECTION */
19009 }
19010 if (e) {
19011 log_packet_detailed("'specialists' field error detected");
19012 }
19013#ifdef FREECIV_JSON_CONNECTION
19014 field_addr.name = "history";
19015#endif /* FREECIV_JSON_CONNECTION */
19016 e = 0;
19017 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
19018 if (e) {
19019 log_packet_detailed("'history' field error detected");
19020 }
19021#ifdef FREECIV_JSON_CONNECTION
19022 field_addr.name = "culture";
19023#endif /* FREECIV_JSON_CONNECTION */
19024 e = 0;
19025 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
19026 if (e) {
19027 log_packet_detailed("'culture' field error detected");
19028 }
19029#ifdef FREECIV_JSON_CONNECTION
19030 field_addr.name = "buy_cost";
19031#endif /* FREECIV_JSON_CONNECTION */
19032 e = 0;
19033 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->buy_cost);
19034 if (e) {
19035 log_packet_detailed("'buy_cost' field error detected");
19036 }
19037#ifdef FREECIV_JSON_CONNECTION
19038 field_addr.name = "surplus";
19039#endif /* FREECIV_JSON_CONNECTION */
19040 e = 0;
19041 {
19042 int i;
19043
19044#ifdef FREECIV_JSON_CONNECTION
19045 /* Create the array. */
19046 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
19047
19048 /* Enter the array. */
19049 field_addr.sub_location = plocation_elem_new(0);
19050#endif /* FREECIV_JSON_CONNECTION */
19051
19052 for (i = 0; i < O_LAST; i++) {
19053#ifdef FREECIV_JSON_CONNECTION
19054 /* Next array element. */
19055 field_addr.sub_location->number = i;
19056#endif /* FREECIV_JSON_CONNECTION */
19057
19058 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->surplus[i]);
19059 }
19060
19061#ifdef FREECIV_JSON_CONNECTION
19062 /* Exit array. */
19063 FC_FREE(field_addr.sub_location);
19064#endif /* FREECIV_JSON_CONNECTION */
19065 }
19066 if (e) {
19067 log_packet_detailed("'surplus' field error detected");
19068 }
19069#ifdef FREECIV_JSON_CONNECTION
19070 field_addr.name = "waste";
19071#endif /* FREECIV_JSON_CONNECTION */
19072 e = 0;
19073 {
19074 int i;
19075
19076#ifdef FREECIV_JSON_CONNECTION
19077 /* Create the array. */
19078 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
19079
19080 /* Enter the array. */
19081 field_addr.sub_location = plocation_elem_new(0);
19082#endif /* FREECIV_JSON_CONNECTION */
19083
19084 for (i = 0; i < O_LAST; i++) {
19085#ifdef FREECIV_JSON_CONNECTION
19086 /* Next array element. */
19087 field_addr.sub_location->number = i;
19088#endif /* FREECIV_JSON_CONNECTION */
19089
19090 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->waste[i]);
19091 }
19092
19093#ifdef FREECIV_JSON_CONNECTION
19094 /* Exit array. */
19095 FC_FREE(field_addr.sub_location);
19096#endif /* FREECIV_JSON_CONNECTION */
19097 }
19098 if (e) {
19099 log_packet_detailed("'waste' field error detected");
19100 }
19101#ifdef FREECIV_JSON_CONNECTION
19102 field_addr.name = "unhappy_penalty";
19103#endif /* FREECIV_JSON_CONNECTION */
19104 e = 0;
19105 {
19106 int i;
19107
19108#ifdef FREECIV_JSON_CONNECTION
19109 /* Create the array. */
19110 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
19111
19112 /* Enter the array. */
19113 field_addr.sub_location = plocation_elem_new(0);
19114#endif /* FREECIV_JSON_CONNECTION */
19115
19116 for (i = 0; i < O_LAST; i++) {
19117#ifdef FREECIV_JSON_CONNECTION
19118 /* Next array element. */
19119 field_addr.sub_location->number = i;
19120#endif /* FREECIV_JSON_CONNECTION */
19121
19122 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->unhappy_penalty[i]);
19123 }
19124
19125#ifdef FREECIV_JSON_CONNECTION
19126 /* Exit array. */
19127 FC_FREE(field_addr.sub_location);
19128#endif /* FREECIV_JSON_CONNECTION */
19129 }
19130 if (e) {
19131 log_packet_detailed("'unhappy_penalty' field error detected");
19132 }
19133#ifdef FREECIV_JSON_CONNECTION
19134 field_addr.name = "prod";
19135#endif /* FREECIV_JSON_CONNECTION */
19136 e = 0;
19137 {
19138 int i;
19139
19140#ifdef FREECIV_JSON_CONNECTION
19141 /* Create the array. */
19142 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
19143
19144 /* Enter the array. */
19145 field_addr.sub_location = plocation_elem_new(0);
19146#endif /* FREECIV_JSON_CONNECTION */
19147
19148 for (i = 0; i < O_LAST; i++) {
19149#ifdef FREECIV_JSON_CONNECTION
19150 /* Next array element. */
19151 field_addr.sub_location->number = i;
19152#endif /* FREECIV_JSON_CONNECTION */
19153
19154 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->prod[i]);
19155 }
19156
19157#ifdef FREECIV_JSON_CONNECTION
19158 /* Exit array. */
19159 FC_FREE(field_addr.sub_location);
19160#endif /* FREECIV_JSON_CONNECTION */
19161 }
19162 if (e) {
19163 log_packet_detailed("'prod' field error detected");
19164 }
19165#ifdef FREECIV_JSON_CONNECTION
19166 field_addr.name = "citizen_base";
19167#endif /* FREECIV_JSON_CONNECTION */
19168 e = 0;
19169 {
19170 int i;
19171
19172#ifdef FREECIV_JSON_CONNECTION
19173 /* Create the array. */
19174 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
19175
19176 /* Enter the array. */
19177 field_addr.sub_location = plocation_elem_new(0);
19178#endif /* FREECIV_JSON_CONNECTION */
19179
19180 for (i = 0; i < O_LAST; i++) {
19181#ifdef FREECIV_JSON_CONNECTION
19182 /* Next array element. */
19183 field_addr.sub_location->number = i;
19184#endif /* FREECIV_JSON_CONNECTION */
19185
19186 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->citizen_base[i]);
19187 }
19188
19189#ifdef FREECIV_JSON_CONNECTION
19190 /* Exit array. */
19191 FC_FREE(field_addr.sub_location);
19192#endif /* FREECIV_JSON_CONNECTION */
19193 }
19194 if (e) {
19195 log_packet_detailed("'citizen_base' field error detected");
19196 }
19197#ifdef FREECIV_JSON_CONNECTION
19198 field_addr.name = "usage";
19199#endif /* FREECIV_JSON_CONNECTION */
19200 e = 0;
19201 {
19202 int i;
19203
19204#ifdef FREECIV_JSON_CONNECTION
19205 /* Create the array. */
19206 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
19207
19208 /* Enter the array. */
19209 field_addr.sub_location = plocation_elem_new(0);
19210#endif /* FREECIV_JSON_CONNECTION */
19211
19212 for (i = 0; i < O_LAST; i++) {
19213#ifdef FREECIV_JSON_CONNECTION
19214 /* Next array element. */
19215 field_addr.sub_location->number = i;
19216#endif /* FREECIV_JSON_CONNECTION */
19217
19218 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->usage[i]);
19219 }
19220
19221#ifdef FREECIV_JSON_CONNECTION
19222 /* Exit array. */
19223 FC_FREE(field_addr.sub_location);
19224#endif /* FREECIV_JSON_CONNECTION */
19225 }
19226 if (e) {
19227 log_packet_detailed("'usage' field error detected");
19228 }
19229#ifdef FREECIV_JSON_CONNECTION
19230 field_addr.name = "food_stock";
19231#endif /* FREECIV_JSON_CONNECTION */
19232 e = 0;
19233 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->food_stock);
19234 if (e) {
19235 log_packet_detailed("'food_stock' field error detected");
19236 }
19237#ifdef FREECIV_JSON_CONNECTION
19238 field_addr.name = "shield_stock";
19239#endif /* FREECIV_JSON_CONNECTION */
19240 e = 0;
19241 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
19242 if (e) {
19243 log_packet_detailed("'shield_stock' field error detected");
19244 }
19245#ifdef FREECIV_JSON_CONNECTION
19246 field_addr.name = "trade_route_count";
19247#endif /* FREECIV_JSON_CONNECTION */
19248 e = 0;
19249 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->trade_route_count);
19250 if (e) {
19251 log_packet_detailed("'trade_route_count' field error detected");
19252 }
19253#ifdef FREECIV_JSON_CONNECTION
19254 field_addr.name = "pollution";
19255#endif /* FREECIV_JSON_CONNECTION */
19256 e = 0;
19257 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->pollution);
19258 if (e) {
19259 log_packet_detailed("'pollution' field error detected");
19260 }
19261#ifdef FREECIV_JSON_CONNECTION
19262 field_addr.name = "illness_trade";
19263#endif /* FREECIV_JSON_CONNECTION */
19264 e = 0;
19265 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->illness_trade);
19266 if (e) {
19267 log_packet_detailed("'illness_trade' field error detected");
19268 }
19269#ifdef FREECIV_JSON_CONNECTION
19270 field_addr.name = "production_kind";
19271#endif /* FREECIV_JSON_CONNECTION */
19272 e = 0;
19273 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
19274 if (e) {
19275 log_packet_detailed("'production_kind' field error detected");
19276 }
19277#ifdef FREECIV_JSON_CONNECTION
19278 field_addr.name = "production_value";
19279#endif /* FREECIV_JSON_CONNECTION */
19280 e = 0;
19281 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
19282 if (e) {
19283 log_packet_detailed("'production_value' field error detected");
19284 }
19285#ifdef FREECIV_JSON_CONNECTION
19286 field_addr.name = "turn_founded";
19287#endif /* FREECIV_JSON_CONNECTION */
19288 e = 0;
19289 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
19290 if (e) {
19291 log_packet_detailed("'turn_founded' field error detected");
19292 }
19293#ifdef FREECIV_JSON_CONNECTION
19294 field_addr.name = "turn_last_built";
19295#endif /* FREECIV_JSON_CONNECTION */
19296 e = 0;
19297 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
19298 if (e) {
19299 log_packet_detailed("'turn_last_built' field error detected");
19300 }
19301#ifdef FREECIV_JSON_CONNECTION
19302 field_addr.name = "changed_from_kind";
19303#endif /* FREECIV_JSON_CONNECTION */
19304 e = 0;
19305 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_kind);
19306 if (e) {
19307 log_packet_detailed("'changed_from_kind' field error detected");
19308 }
19309#ifdef FREECIV_JSON_CONNECTION
19310 field_addr.name = "changed_from_value";
19311#endif /* FREECIV_JSON_CONNECTION */
19312 e = 0;
19313 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from_value);
19314 if (e) {
19315 log_packet_detailed("'changed_from_value' field error detected");
19316 }
19317#ifdef FREECIV_JSON_CONNECTION
19318 field_addr.name = "before_change_shields";
19319#endif /* FREECIV_JSON_CONNECTION */
19320 e = 0;
19321 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->before_change_shields);
19322 if (e) {
19323 log_packet_detailed("'before_change_shields' field error detected");
19324 }
19325#ifdef FREECIV_JSON_CONNECTION
19326 field_addr.name = "disbanded_shields";
19327#endif /* FREECIV_JSON_CONNECTION */
19328 e = 0;
19329 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disbanded_shields);
19330 if (e) {
19331 log_packet_detailed("'disbanded_shields' field error detected");
19332 }
19333#ifdef FREECIV_JSON_CONNECTION
19334 field_addr.name = "caravan_shields";
19335#endif /* FREECIV_JSON_CONNECTION */
19336 e = 0;
19337 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->caravan_shields);
19338 if (e) {
19339 log_packet_detailed("'caravan_shields' field error detected");
19340 }
19341#ifdef FREECIV_JSON_CONNECTION
19342 field_addr.name = "last_turns_shield_surplus";
19343#endif /* FREECIV_JSON_CONNECTION */
19344 e = 0;
19345 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->last_turns_shield_surplus);
19346 if (e) {
19347 log_packet_detailed("'last_turns_shield_surplus' field error detected");
19348 }
19349#ifdef FREECIV_JSON_CONNECTION
19350 field_addr.name = "airlift";
19351#endif /* FREECIV_JSON_CONNECTION */
19352 e = 0;
19353 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->airlift);
19354 if (e) {
19355 log_packet_detailed("'airlift' field error detected");
19356 }
19357#ifdef FREECIV_JSON_CONNECTION
19358 field_addr.name = "did_buy";
19359#endif /* FREECIV_JSON_CONNECTION */
19360 e = 0;
19361 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
19362 if (e) {
19363 log_packet_detailed("'did_buy' field error detected");
19364 }
19365#ifdef FREECIV_JSON_CONNECTION
19366 field_addr.name = "did_sell";
19367#endif /* FREECIV_JSON_CONNECTION */
19368 e = 0;
19369 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
19370 if (e) {
19371 log_packet_detailed("'did_sell' field error detected");
19372 }
19373#ifdef FREECIV_JSON_CONNECTION
19374 field_addr.name = "was_happy";
19375#endif /* FREECIV_JSON_CONNECTION */
19376 e = 0;
19377 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
19378 if (e) {
19379 log_packet_detailed("'was_happy' field error detected");
19380 }
19381#ifdef FREECIV_JSON_CONNECTION
19382 field_addr.name = "had_famine";
19383#endif /* FREECIV_JSON_CONNECTION */
19384 e = 0;
19385 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
19386 if (e) {
19387 log_packet_detailed("'had_famine' field error detected");
19388 }
19389#ifdef FREECIV_JSON_CONNECTION
19390 field_addr.name = "anarchy";
19391#endif /* FREECIV_JSON_CONNECTION */
19392 e = 0;
19393 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->anarchy);
19394 if (e) {
19395 log_packet_detailed("'anarchy' field error detected");
19396 }
19397#ifdef FREECIV_JSON_CONNECTION
19398 field_addr.name = "rapture";
19399#endif /* FREECIV_JSON_CONNECTION */
19400 e = 0;
19401 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->rapture);
19402 if (e) {
19403 log_packet_detailed("'rapture' field error detected");
19404 }
19405#ifdef FREECIV_JSON_CONNECTION
19406 field_addr.name = "diplomat_investigate";
19407#endif /* FREECIV_JSON_CONNECTION */
19408 e = 0;
19409 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->diplomat_investigate);
19410 if (e) {
19411 log_packet_detailed("'diplomat_investigate' field error detected");
19412 }
19413#ifdef FREECIV_JSON_CONNECTION
19414 field_addr.name = "walls";
19415#endif /* FREECIV_JSON_CONNECTION */
19416 e = 0;
19417 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
19418 if (e) {
19419 log_packet_detailed("'walls' field error detected");
19420 }
19421#ifdef FREECIV_JSON_CONNECTION
19422 field_addr.name = "city_image";
19423#endif /* FREECIV_JSON_CONNECTION */
19424 e = 0;
19425 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
19426 if (e) {
19427 log_packet_detailed("'city_image' field error detected");
19428 }
19429#ifdef FREECIV_JSON_CONNECTION
19430 field_addr.name = "steal";
19431#endif /* FREECIV_JSON_CONNECTION */
19432 e = 0;
19433 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->steal);
19434 if (e) {
19435 log_packet_detailed("'steal' field error detected");
19436 }
19437#ifdef FREECIV_JSON_CONNECTION
19438 field_addr.name = "worklist";
19439#endif /* FREECIV_JSON_CONNECTION */
19440 e = 0;
19441 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
19442 if (e) {
19443 log_packet_detailed("'worklist' field error detected");
19444 }
19445#ifdef FREECIV_JSON_CONNECTION
19446 field_addr.name = "improvements";
19447#endif /* FREECIV_JSON_CONNECTION */
19448 e = 0;
19449 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
19450 if (e) {
19451 log_packet_detailed("'improvements' field error detected");
19452 }
19453#ifdef FREECIV_JSON_CONNECTION
19454 field_addr.name = "city_options";
19455#endif /* FREECIV_JSON_CONNECTION */
19456 e = 0;
19457 e |= DIO_BV_PUT(&dout, &field_addr, packet->city_options);
19458 if (e) {
19459 log_packet_detailed("'city_options' field error detected");
19460 }
19461#ifdef FREECIV_JSON_CONNECTION
19462 field_addr.name = "wl_cb";
19463#endif /* FREECIV_JSON_CONNECTION */
19464 e = 0;
19465 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
19466 if (e) {
19467 log_packet_detailed("'wl_cb' field error detected");
19468 }
19469#ifdef FREECIV_JSON_CONNECTION
19470 field_addr.name = "acquire_type";
19471#endif /* FREECIV_JSON_CONNECTION */
19472 e = 0;
19473 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->acquire_type);
19474 if (e) {
19475 log_packet_detailed("'acquire_type' field error detected");
19476 }
19477#ifdef FREECIV_JSON_CONNECTION
19478 field_addr.name = "name";
19479#endif /* FREECIV_JSON_CONNECTION */
19480 e = 0;
19481 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
19482 if (e) {
19483 log_packet_detailed("'name' field error detected");
19484 }
19485
19486#endif
19488}
19489
19490int send_packet_city_info(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
19491{
19492 if (!pc->used) {
19493 log_error("WARNING: trying to send data to the closed connection %s",
19495 return -1;
19496 }
19497 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send != NULL, -1,
19498 "Handler for PACKET_CITY_INFO not installed");
19499 return pc->phs.handlers->send[PACKET_CITY_INFO].force_to_send(pc, packet, force_to_send);
19500}
19501
19502void lsend_packet_city_info(struct conn_list *dest, const struct packet_city_info *packet, bool force_to_send)
19503{
19504 conn_list_iterate(dest, pconn) {
19505 send_packet_city_info(pconn, packet, force_to_send);
19507}
19508
19509#ifdef FREECIV_DELTA_PROTOCOL
19511{
19512 const struct packet_city_nationalities *key = (const struct packet_city_nationalities *) vkey;
19513 genhash_val_t result = 0;
19514
19515 result += key->id;
19516
19517 result &= 0xFFFFFFFF;
19518 return result;
19519}
19520
19521static bool cmp_packet_city_nationalities_100(const void *vkey1, const void *vkey2)
19522{
19523 const struct packet_city_nationalities *old = (const struct packet_city_nationalities *) vkey1;
19525 bool differ;
19526
19527 differ = (old->id != real_packet->id);
19528
19529 return !differ;
19530}
19532#endif /* FREECIV_DELTA_PROTOCOL */
19533
19535{
19536#ifdef FREECIV_DELTA_PROTOCOL
19538 struct packet_city_nationalities *old;
19539 struct genhash **hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
19540#endif /* FREECIV_DELTA_PROTOCOL */
19542#ifdef FREECIV_JSON_CONNECTION
19543 struct plocation field_addr;
19544 {
19548 }
19549#endif /* FREECIV_JSON_CONNECTION */
19550
19551#ifdef FREECIV_DELTA_PROTOCOL
19552#ifdef FREECIV_JSON_CONNECTION
19553 field_addr.name = "fields";
19554#endif /* FREECIV_JSON_CONNECTION */
19555 DIO_BV_GET(&din, &field_addr, fields);
19556#ifdef FREECIV_JSON_CONNECTION
19557 field_addr.name = "id";
19558#endif /* FREECIV_JSON_CONNECTION */
19559 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
19561 }
19562
19563#else /* FREECIV_DELTA_PROTOCOL */
19564#ifdef FREECIV_JSON_CONNECTION
19565 field_addr.name = "id";
19566#endif /* FREECIV_JSON_CONNECTION */
19567 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
19569 }
19570#ifdef FREECIV_JSON_CONNECTION
19571 field_addr.name = "nationalities_count";
19572#endif /* FREECIV_JSON_CONNECTION */
19573 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
19574 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
19575 }
19576#ifdef FREECIV_JSON_CONNECTION
19577 field_addr.name = "nation_id";
19578#endif /* FREECIV_JSON_CONNECTION */
19579 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19580 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": truncation array");
19581 }
19582 {
19583 int i;
19584
19585#ifdef FREECIV_JSON_CONNECTION
19586 /* Enter array. */
19587 field_addr.sub_location = plocation_elem_new(0);
19588#endif /* FREECIV_JSON_CONNECTION */
19589
19590 for (i = 0; i < real_packet->nationalities_count; i++) {
19591#ifdef FREECIV_JSON_CONNECTION
19592 field_addr.sub_location->number = i;
19593#endif /* FREECIV_JSON_CONNECTION */
19594
19595 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_id[i])) {
19596 RECEIVE_PACKET_FIELD_ERROR(nation_id);
19597 }
19598 }
19599
19600#ifdef FREECIV_JSON_CONNECTION
19601 /* Exit array. */
19602 FC_FREE(field_addr.sub_location);
19603#endif /* FREECIV_JSON_CONNECTION */
19604 }
19605#ifdef FREECIV_JSON_CONNECTION
19606 field_addr.name = "nation_citizens";
19607#endif /* FREECIV_JSON_CONNECTION */
19608 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19609 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": truncation array");
19610 }
19611 {
19612 int i;
19613
19614#ifdef FREECIV_JSON_CONNECTION
19615 /* Enter array. */
19616 field_addr.sub_location = plocation_elem_new(0);
19617#endif /* FREECIV_JSON_CONNECTION */
19618
19619 for (i = 0; i < real_packet->nationalities_count; i++) {
19620#ifdef FREECIV_JSON_CONNECTION
19621 field_addr.sub_location->number = i;
19622#endif /* FREECIV_JSON_CONNECTION */
19623
19624 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
19625 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
19626 }
19627 }
19628
19629#ifdef FREECIV_JSON_CONNECTION
19630 /* Exit array. */
19631 FC_FREE(field_addr.sub_location);
19632#endif /* FREECIV_JSON_CONNECTION */
19633 }
19634#endif
19635 log_packet_detailed("packet_city_nationalities_100: got info about (%d)",
19636 real_packet->id);
19637
19638#ifdef FREECIV_DELTA_PROTOCOL
19639 if (NULL == *hash) {
19641 NULL, NULL, NULL, free);
19642 }
19643
19644 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
19645 *real_packet = *old;
19646 } else {
19647 int id;
19648
19649 id = real_packet->id;
19650
19651 log_packet_detailed(" no old info");
19652 memset(real_packet, 0, sizeof(*real_packet));
19653
19654 real_packet->id = id;
19655 }
19656
19657 if (BV_ISSET(fields, 0)) {
19658 log_packet_detailed(" got field 'nationalities_count'");
19659#ifdef FREECIV_JSON_CONNECTION
19660 field_addr.name = "nationalities_count";
19661#endif /* FREECIV_JSON_CONNECTION */
19662 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nationalities_count)) {
19663 RECEIVE_PACKET_FIELD_ERROR(nationalities_count);
19664 }
19665 }
19666 if (BV_ISSET(fields, 1)) {
19667 log_packet_detailed(" got field 'nation_id'");
19668#ifdef FREECIV_JSON_CONNECTION
19669 field_addr.name = "nation_id";
19670#endif /* FREECIV_JSON_CONNECTION */
19671 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19672 RECEIVE_PACKET_FIELD_ERROR(nation_id, ": truncation array");
19673 }
19674 {
19675 int i;
19676
19677#ifdef FREECIV_JSON_CONNECTION
19678 /* Enter array. */
19679 field_addr.sub_location = plocation_elem_new(0);
19680#endif /* FREECIV_JSON_CONNECTION */
19681
19682 for (i = 0; i < real_packet->nationalities_count; i++) {
19683#ifdef FREECIV_JSON_CONNECTION
19684 field_addr.sub_location->number = i;
19685#endif /* FREECIV_JSON_CONNECTION */
19686
19687 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_id[i])) {
19688 RECEIVE_PACKET_FIELD_ERROR(nation_id);
19689 }
19690 }
19691
19692#ifdef FREECIV_JSON_CONNECTION
19693 /* Exit array. */
19694 FC_FREE(field_addr.sub_location);
19695#endif /* FREECIV_JSON_CONNECTION */
19696 }
19697 }
19698 if (BV_ISSET(fields, 2)) {
19699 log_packet_detailed(" got field 'nation_citizens'");
19700#ifdef FREECIV_JSON_CONNECTION
19701 field_addr.name = "nation_citizens";
19702#endif /* FREECIV_JSON_CONNECTION */
19703 if (real_packet->nationalities_count > MAX_CITY_NATIONALITIES) {
19704 RECEIVE_PACKET_FIELD_ERROR(nation_citizens, ": truncation array");
19705 }
19706 {
19707 int i;
19708
19709#ifdef FREECIV_JSON_CONNECTION
19710 /* Enter array. */
19711 field_addr.sub_location = plocation_elem_new(0);
19712#endif /* FREECIV_JSON_CONNECTION */
19713
19714 for (i = 0; i < real_packet->nationalities_count; i++) {
19715#ifdef FREECIV_JSON_CONNECTION
19716 field_addr.sub_location->number = i;
19717#endif /* FREECIV_JSON_CONNECTION */
19718
19719 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nation_citizens[i])) {
19720 RECEIVE_PACKET_FIELD_ERROR(nation_citizens);
19721 }
19722 }
19723
19724#ifdef FREECIV_JSON_CONNECTION
19725 /* Exit array. */
19726 FC_FREE(field_addr.sub_location);
19727#endif /* FREECIV_JSON_CONNECTION */
19728 }
19729 }
19730
19731 if (NULL == old) {
19732 old = fc_malloc(sizeof(*old));
19733 *old = *real_packet;
19734 genhash_insert(*hash, old, old);
19735 } else {
19736 *old = *real_packet;
19737 }
19738
19739#endif /* FREECIV_DELTA_PROTOCOL */
19741}
19742
19743static int send_packet_city_nationalities_100(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
19744{
19745 const struct packet_city_nationalities *real_packet = packet;
19746 int e;
19747#ifdef FREECIV_DELTA_PROTOCOL
19749 struct packet_city_nationalities *old;
19750 bool differ;
19751 struct genhash **hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
19752 int different = force_to_send;
19753#endif /* FREECIV_DELTA_PROTOCOL */
19755#ifdef FREECIV_JSON_CONNECTION
19756 struct plocation field_addr;
19757 {
19761 }
19762#endif /* FREECIV_JSON_CONNECTION */
19763
19764 log_packet_detailed("packet_city_nationalities_100: sending info about (%d)",
19765 real_packet->id);
19766
19767#ifdef FREECIV_DELTA_PROTOCOL
19768 if (NULL == *hash) {
19770 NULL, NULL, NULL, free);
19771 }
19772 BV_CLR_ALL(fields);
19773
19774 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
19775 old = fc_malloc(sizeof(*old));
19776 *old = *real_packet;
19777 genhash_insert(*hash, old, old);
19778 memset(old, 0, sizeof(*old));
19779 different = 1; /* Force to send. */
19780 }
19781 differ = (old->nationalities_count != real_packet->nationalities_count);
19782 if (differ) {
19783 different++;
19784 BV_SET(fields, 0);
19785 }
19786
19787 differ = (old->nationalities_count != real_packet->nationalities_count);
19788 if (!differ) {
19789 int i;
19790
19791 for (i = 0; i < real_packet->nationalities_count; i++) {
19792 differ = (old->nation_id[i] != real_packet->nation_id[i]);
19793 if (differ) {
19794 break;
19795 }
19796 }
19797 }
19798 if (differ) {
19799 different++;
19800 BV_SET(fields, 1);
19801 }
19802
19803 differ = (old->nationalities_count != real_packet->nationalities_count);
19804 if (!differ) {
19805 int i;
19806
19807 for (i = 0; i < real_packet->nationalities_count; i++) {
19808 differ = (old->nation_citizens[i] != real_packet->nation_citizens[i]);
19809 if (differ) {
19810 break;
19811 }
19812 }
19813 }
19814 if (differ) {
19815 different++;
19816 BV_SET(fields, 2);
19817 }
19818
19819 if (different == 0) {
19820 log_packet_detailed(" no change -> discard");
19822 }
19823
19824#ifdef FREECIV_JSON_CONNECTION
19825 field_addr.name = "fields";
19826#endif /* FREECIV_JSON_CONNECTION */
19827 e = 0;
19828 e |= DIO_BV_PUT(&dout, &field_addr, fields);
19829 if (e) {
19830 log_packet_detailed("fields bitvector error detected");
19831 }
19832#ifdef FREECIV_JSON_CONNECTION
19833 field_addr.name = "id";
19834#endif /* FREECIV_JSON_CONNECTION */
19835 e = 0;
19836 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
19837 if (e) {
19838 log_packet_detailed("'id' field error detected");
19839 }
19840
19841 if (BV_ISSET(fields, 0)) {
19842 log_packet_detailed(" field 'nationalities_count' has changed");
19843#ifdef FREECIV_JSON_CONNECTION
19844 field_addr.name = "nationalities_count";
19845#endif /* FREECIV_JSON_CONNECTION */
19846 e = 0;
19847 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
19848 if (e) {
19849 log_packet_detailed("'nationalities_count' field error detected");
19850 }
19851 }
19852 if (BV_ISSET(fields, 1)) {
19853 log_packet_detailed(" field 'nation_id' has changed");
19854#ifdef FREECIV_JSON_CONNECTION
19855 field_addr.name = "nation_id";
19856#endif /* FREECIV_JSON_CONNECTION */
19857 e = 0;
19858 {
19859 int i;
19860
19861#ifdef FREECIV_JSON_CONNECTION
19862 /* Create the array. */
19863 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19864
19865 /* Enter the array. */
19866 field_addr.sub_location = plocation_elem_new(0);
19867#endif /* FREECIV_JSON_CONNECTION */
19868
19869 for (i = 0; i < real_packet->nationalities_count; i++) {
19870#ifdef FREECIV_JSON_CONNECTION
19871 /* Next array element. */
19872 field_addr.sub_location->number = i;
19873#endif /* FREECIV_JSON_CONNECTION */
19874
19875 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_id[i]);
19876 }
19877
19878#ifdef FREECIV_JSON_CONNECTION
19879 /* Exit array. */
19880 FC_FREE(field_addr.sub_location);
19881#endif /* FREECIV_JSON_CONNECTION */
19882 }
19883 if (e) {
19884 log_packet_detailed("'nation_id' field error detected");
19885 }
19886 }
19887 if (BV_ISSET(fields, 2)) {
19888 log_packet_detailed(" field 'nation_citizens' has changed");
19889#ifdef FREECIV_JSON_CONNECTION
19890 field_addr.name = "nation_citizens";
19891#endif /* FREECIV_JSON_CONNECTION */
19892 e = 0;
19893 {
19894 int i;
19895
19896#ifdef FREECIV_JSON_CONNECTION
19897 /* Create the array. */
19898 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19899
19900 /* Enter the array. */
19901 field_addr.sub_location = plocation_elem_new(0);
19902#endif /* FREECIV_JSON_CONNECTION */
19903
19904 for (i = 0; i < real_packet->nationalities_count; i++) {
19905#ifdef FREECIV_JSON_CONNECTION
19906 /* Next array element. */
19907 field_addr.sub_location->number = i;
19908#endif /* FREECIV_JSON_CONNECTION */
19909
19910 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
19911 }
19912
19913#ifdef FREECIV_JSON_CONNECTION
19914 /* Exit array. */
19915 FC_FREE(field_addr.sub_location);
19916#endif /* FREECIV_JSON_CONNECTION */
19917 }
19918 if (e) {
19919 log_packet_detailed("'nation_citizens' field error detected");
19920 }
19921 }
19922
19923 *old = *real_packet;
19924#endif /* FREECIV_DELTA_PROTOCOL */
19925#ifndef FREECIV_DELTA_PROTOCOL
19926#ifdef FREECIV_JSON_CONNECTION
19927 field_addr.name = "id";
19928#endif /* FREECIV_JSON_CONNECTION */
19929 e = 0;
19930 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
19931 if (e) {
19932 log_packet_detailed("'id' field error detected");
19933 }
19934#ifdef FREECIV_JSON_CONNECTION
19935 field_addr.name = "nationalities_count";
19936#endif /* FREECIV_JSON_CONNECTION */
19937 e = 0;
19938 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nationalities_count);
19939 if (e) {
19940 log_packet_detailed("'nationalities_count' field error detected");
19941 }
19942#ifdef FREECIV_JSON_CONNECTION
19943 field_addr.name = "nation_id";
19944#endif /* FREECIV_JSON_CONNECTION */
19945 e = 0;
19946 {
19947 int i;
19948
19949#ifdef FREECIV_JSON_CONNECTION
19950 /* Create the array. */
19951 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19952
19953 /* Enter the array. */
19954 field_addr.sub_location = plocation_elem_new(0);
19955#endif /* FREECIV_JSON_CONNECTION */
19956
19957 for (i = 0; i < real_packet->nationalities_count; i++) {
19958#ifdef FREECIV_JSON_CONNECTION
19959 /* Next array element. */
19960 field_addr.sub_location->number = i;
19961#endif /* FREECIV_JSON_CONNECTION */
19962
19963 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_id[i]);
19964 }
19965
19966#ifdef FREECIV_JSON_CONNECTION
19967 /* Exit array. */
19968 FC_FREE(field_addr.sub_location);
19969#endif /* FREECIV_JSON_CONNECTION */
19970 }
19971 if (e) {
19972 log_packet_detailed("'nation_id' field error detected");
19973 }
19974#ifdef FREECIV_JSON_CONNECTION
19975 field_addr.name = "nation_citizens";
19976#endif /* FREECIV_JSON_CONNECTION */
19977 e = 0;
19978 {
19979 int i;
19980
19981#ifdef FREECIV_JSON_CONNECTION
19982 /* Create the array. */
19983 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nationalities_count);
19984
19985 /* Enter the array. */
19986 field_addr.sub_location = plocation_elem_new(0);
19987#endif /* FREECIV_JSON_CONNECTION */
19988
19989 for (i = 0; i < real_packet->nationalities_count; i++) {
19990#ifdef FREECIV_JSON_CONNECTION
19991 /* Next array element. */
19992 field_addr.sub_location->number = i;
19993#endif /* FREECIV_JSON_CONNECTION */
19994
19995 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nation_citizens[i]);
19996 }
19997
19998#ifdef FREECIV_JSON_CONNECTION
19999 /* Exit array. */
20000 FC_FREE(field_addr.sub_location);
20001#endif /* FREECIV_JSON_CONNECTION */
20002 }
20003 if (e) {
20004 log_packet_detailed("'nation_citizens' field error detected");
20005 }
20006
20007#endif
20009}
20010
20011int send_packet_city_nationalities(struct connection *pc, const struct packet_city_nationalities *packet, bool force_to_send)
20012{
20013 if (!pc->used) {
20014 log_error("WARNING: trying to send data to the closed connection %s",
20016 return -1;
20017 }
20018 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send != NULL, -1,
20019 "Handler for PACKET_CITY_NATIONALITIES not installed");
20020 return pc->phs.handlers->send[PACKET_CITY_NATIONALITIES].force_to_send(pc, packet, force_to_send);
20021}
20022
20023void lsend_packet_city_nationalities(struct conn_list *dest, const struct packet_city_nationalities *packet, bool force_to_send)
20024{
20025 conn_list_iterate(dest, pconn) {
20026 send_packet_city_nationalities(pconn, packet, force_to_send);
20028}
20029
20030#ifdef FREECIV_DELTA_PROTOCOL
20032{
20033 const struct packet_city_update_counters *key = (const struct packet_city_update_counters *) vkey;
20034 genhash_val_t result = 0;
20035
20036 result += key->city;
20037
20038 result &= 0xFFFFFFFF;
20039 return result;
20040}
20041
20042static bool cmp_packet_city_update_counters_100(const void *vkey1, const void *vkey2)
20043{
20044 const struct packet_city_update_counters *old = (const struct packet_city_update_counters *) vkey1;
20046 bool differ;
20047
20048 differ = (old->city != real_packet->city);
20049
20050 return !differ;
20051}
20053#endif /* FREECIV_DELTA_PROTOCOL */
20054
20056{
20057#ifdef FREECIV_DELTA_PROTOCOL
20059 struct packet_city_update_counters *old;
20060 struct genhash **hash = pc->phs.received + PACKET_CITY_UPDATE_COUNTERS;
20061#endif /* FREECIV_DELTA_PROTOCOL */
20063#ifdef FREECIV_JSON_CONNECTION
20064 struct plocation field_addr;
20065 {
20069 }
20070#endif /* FREECIV_JSON_CONNECTION */
20071
20072#ifdef FREECIV_DELTA_PROTOCOL
20073#ifdef FREECIV_JSON_CONNECTION
20074 field_addr.name = "fields";
20075#endif /* FREECIV_JSON_CONNECTION */
20076 DIO_BV_GET(&din, &field_addr, fields);
20077#ifdef FREECIV_JSON_CONNECTION
20078 field_addr.name = "city";
20079#endif /* FREECIV_JSON_CONNECTION */
20080 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
20082 }
20083
20084#else /* FREECIV_DELTA_PROTOCOL */
20085#ifdef FREECIV_JSON_CONNECTION
20086 field_addr.name = "city";
20087#endif /* FREECIV_JSON_CONNECTION */
20088 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
20090 }
20091#ifdef FREECIV_JSON_CONNECTION
20092 field_addr.name = "count";
20093#endif /* FREECIV_JSON_CONNECTION */
20094 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
20096 }
20097#ifdef FREECIV_JSON_CONNECTION
20098 field_addr.name = "counters";
20099#endif /* FREECIV_JSON_CONNECTION */
20100 if (real_packet->count > MAX_COUNTERS) {
20101 RECEIVE_PACKET_FIELD_ERROR(counters, ": truncation array");
20102 }
20103 {
20104 int i;
20105
20106#ifdef FREECIV_JSON_CONNECTION
20107 /* Enter array. */
20108 field_addr.sub_location = plocation_elem_new(0);
20109#endif /* FREECIV_JSON_CONNECTION */
20110
20111 for (i = 0; i < real_packet->count; i++) {
20112#ifdef FREECIV_JSON_CONNECTION
20113 field_addr.sub_location->number = i;
20114#endif /* FREECIV_JSON_CONNECTION */
20115
20116 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
20118 }
20119 }
20120
20121#ifdef FREECIV_JSON_CONNECTION
20122 /* Exit array. */
20123 FC_FREE(field_addr.sub_location);
20124#endif /* FREECIV_JSON_CONNECTION */
20125 }
20126#endif
20127 log_packet_detailed("packet_city_update_counters_100: got info about (%d)",
20128 real_packet->city);
20129
20130#ifdef FREECIV_DELTA_PROTOCOL
20131 if (NULL == *hash) {
20133 NULL, NULL, NULL, free);
20134 }
20135
20136 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20137 *real_packet = *old;
20138 } else {
20139 int city;
20140
20141 city = real_packet->city;
20142
20143 log_packet_detailed(" no old info");
20144 memset(real_packet, 0, sizeof(*real_packet));
20145
20146 real_packet->city = city;
20147 }
20148
20149 if (BV_ISSET(fields, 0)) {
20150 log_packet_detailed(" got field 'count'");
20151#ifdef FREECIV_JSON_CONNECTION
20152 field_addr.name = "count";
20153#endif /* FREECIV_JSON_CONNECTION */
20154 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
20156 }
20157 }
20158 if (BV_ISSET(fields, 1)) {
20159 log_packet_detailed(" got field 'counters'");
20160#ifdef FREECIV_JSON_CONNECTION
20161 field_addr.name = "counters";
20162#endif /* FREECIV_JSON_CONNECTION */
20163 if (real_packet->count > MAX_COUNTERS) {
20164 RECEIVE_PACKET_FIELD_ERROR(counters, ": truncation array");
20165 }
20166 {
20167 int i;
20168
20169#ifdef FREECIV_JSON_CONNECTION
20170 /* Enter array. */
20171 field_addr.sub_location = plocation_elem_new(0);
20172#endif /* FREECIV_JSON_CONNECTION */
20173
20174 for (i = 0; i < real_packet->count; i++) {
20175#ifdef FREECIV_JSON_CONNECTION
20176 field_addr.sub_location->number = i;
20177#endif /* FREECIV_JSON_CONNECTION */
20178
20179 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->counters[i])) {
20181 }
20182 }
20183
20184#ifdef FREECIV_JSON_CONNECTION
20185 /* Exit array. */
20186 FC_FREE(field_addr.sub_location);
20187#endif /* FREECIV_JSON_CONNECTION */
20188 }
20189 }
20190
20191 if (NULL == old) {
20192 old = fc_malloc(sizeof(*old));
20193 *old = *real_packet;
20194 genhash_insert(*hash, old, old);
20195 } else {
20196 *old = *real_packet;
20197 }
20198
20199#endif /* FREECIV_DELTA_PROTOCOL */
20201}
20202
20204{
20205 const struct packet_city_update_counters *real_packet = packet;
20206 int e;
20207#ifdef FREECIV_DELTA_PROTOCOL
20209 struct packet_city_update_counters *old;
20210 bool differ;
20211 struct genhash **hash = pc->phs.sent + PACKET_CITY_UPDATE_COUNTERS;
20212 int different = 0;
20213#endif /* FREECIV_DELTA_PROTOCOL */
20215#ifdef FREECIV_JSON_CONNECTION
20216 struct plocation field_addr;
20217 {
20221 }
20222#endif /* FREECIV_JSON_CONNECTION */
20223
20224 log_packet_detailed("packet_city_update_counters_100: sending info about (%d)",
20225 real_packet->city);
20226
20227#ifdef FREECIV_DELTA_PROTOCOL
20228 if (NULL == *hash) {
20230 NULL, NULL, NULL, free);
20231 }
20232 BV_CLR_ALL(fields);
20233
20234 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20235 old = fc_malloc(sizeof(*old));
20236 *old = *real_packet;
20237 genhash_insert(*hash, old, old);
20238 memset(old, 0, sizeof(*old));
20239 different = 1; /* Force to send. */
20240 }
20241 differ = (old->count != real_packet->count);
20242 if (differ) {
20243 different++;
20244 BV_SET(fields, 0);
20245 }
20246
20247 differ = (old->count != real_packet->count);
20248 if (!differ) {
20249 int i;
20250
20251 for (i = 0; i < real_packet->count; i++) {
20252 differ = (old->counters[i] != real_packet->counters[i]);
20253 if (differ) {
20254 break;
20255 }
20256 }
20257 }
20258 if (differ) {
20259 different++;
20260 BV_SET(fields, 1);
20261 }
20262
20263 if (different == 0) {
20264 log_packet_detailed(" no change -> discard");
20266 }
20267
20268#ifdef FREECIV_JSON_CONNECTION
20269 field_addr.name = "fields";
20270#endif /* FREECIV_JSON_CONNECTION */
20271 e = 0;
20272 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20273 if (e) {
20274 log_packet_detailed("fields bitvector error detected");
20275 }
20276#ifdef FREECIV_JSON_CONNECTION
20277 field_addr.name = "city";
20278#endif /* FREECIV_JSON_CONNECTION */
20279 e = 0;
20280 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
20281 if (e) {
20282 log_packet_detailed("'city' field error detected");
20283 }
20284
20285 if (BV_ISSET(fields, 0)) {
20286 log_packet_detailed(" field 'count' has changed");
20287#ifdef FREECIV_JSON_CONNECTION
20288 field_addr.name = "count";
20289#endif /* FREECIV_JSON_CONNECTION */
20290 e = 0;
20291 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
20292 if (e) {
20293 log_packet_detailed("'count' field error detected");
20294 }
20295 }
20296 if (BV_ISSET(fields, 1)) {
20297 log_packet_detailed(" field 'counters' has changed");
20298#ifdef FREECIV_JSON_CONNECTION
20299 field_addr.name = "counters";
20300#endif /* FREECIV_JSON_CONNECTION */
20301 e = 0;
20302 {
20303 int i;
20304
20305#ifdef FREECIV_JSON_CONNECTION
20306 /* Create the array. */
20307 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
20308
20309 /* Enter the array. */
20310 field_addr.sub_location = plocation_elem_new(0);
20311#endif /* FREECIV_JSON_CONNECTION */
20312
20313 for (i = 0; i < real_packet->count; i++) {
20314#ifdef FREECIV_JSON_CONNECTION
20315 /* Next array element. */
20316 field_addr.sub_location->number = i;
20317#endif /* FREECIV_JSON_CONNECTION */
20318
20319 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
20320 }
20321
20322#ifdef FREECIV_JSON_CONNECTION
20323 /* Exit array. */
20324 FC_FREE(field_addr.sub_location);
20325#endif /* FREECIV_JSON_CONNECTION */
20326 }
20327 if (e) {
20328 log_packet_detailed("'counters' field error detected");
20329 }
20330 }
20331
20332 *old = *real_packet;
20333#endif /* FREECIV_DELTA_PROTOCOL */
20334#ifndef FREECIV_DELTA_PROTOCOL
20335#ifdef FREECIV_JSON_CONNECTION
20336 field_addr.name = "city";
20337#endif /* FREECIV_JSON_CONNECTION */
20338 e = 0;
20339 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
20340 if (e) {
20341 log_packet_detailed("'city' field error detected");
20342 }
20343#ifdef FREECIV_JSON_CONNECTION
20344 field_addr.name = "count";
20345#endif /* FREECIV_JSON_CONNECTION */
20346 e = 0;
20347 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
20348 if (e) {
20349 log_packet_detailed("'count' field error detected");
20350 }
20351#ifdef FREECIV_JSON_CONNECTION
20352 field_addr.name = "counters";
20353#endif /* FREECIV_JSON_CONNECTION */
20354 e = 0;
20355 {
20356 int i;
20357
20358#ifdef FREECIV_JSON_CONNECTION
20359 /* Create the array. */
20360 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
20361
20362 /* Enter the array. */
20363 field_addr.sub_location = plocation_elem_new(0);
20364#endif /* FREECIV_JSON_CONNECTION */
20365
20366 for (i = 0; i < real_packet->count; i++) {
20367#ifdef FREECIV_JSON_CONNECTION
20368 /* Next array element. */
20369 field_addr.sub_location->number = i;
20370#endif /* FREECIV_JSON_CONNECTION */
20371
20372 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->counters[i]);
20373 }
20374
20375#ifdef FREECIV_JSON_CONNECTION
20376 /* Exit array. */
20377 FC_FREE(field_addr.sub_location);
20378#endif /* FREECIV_JSON_CONNECTION */
20379 }
20380 if (e) {
20381 log_packet_detailed("'counters' field error detected");
20382 }
20383
20384#endif
20386}
20387
20389{
20390 if (!pc->used) {
20391 log_error("WARNING: trying to send data to the closed connection %s",
20393 return -1;
20394 }
20395 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet != NULL, -1,
20396 "Handler for PACKET_CITY_UPDATE_COUNTERS not installed");
20397 return pc->phs.handlers->send[PACKET_CITY_UPDATE_COUNTERS].packet(pc, packet);
20398}
20399
20401{
20402 conn_list_iterate(dest, pconn) {
20405}
20406
20407#ifdef FREECIV_DELTA_PROTOCOL
20409{
20410 const struct packet_city_short_info *key = (const struct packet_city_short_info *) vkey;
20411 genhash_val_t result = 0;
20412
20413 result += key->id;
20414
20415 result &= 0xFFFFFFFF;
20416 return result;
20417}
20418
20419static bool cmp_packet_city_short_info_100(const void *vkey1, const void *vkey2)
20420{
20421 const struct packet_city_short_info *old = (const struct packet_city_short_info *) vkey1;
20422 const struct packet_city_short_info *real_packet = (const struct packet_city_short_info *) vkey2;
20423 bool differ;
20424
20425 differ = (old->id != real_packet->id);
20426
20427 return !differ;
20428}
20430#endif /* FREECIV_DELTA_PROTOCOL */
20431
20433{
20434#ifdef FREECIV_DELTA_PROTOCOL
20436 struct packet_city_short_info *old;
20437 struct genhash **hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
20438#endif /* FREECIV_DELTA_PROTOCOL */
20440#ifdef FREECIV_JSON_CONNECTION
20441 struct plocation field_addr;
20442 {
20446 }
20447#endif /* FREECIV_JSON_CONNECTION */
20448
20449#ifdef FREECIV_DELTA_PROTOCOL
20450#ifdef FREECIV_JSON_CONNECTION
20451 field_addr.name = "fields";
20452#endif /* FREECIV_JSON_CONNECTION */
20453 DIO_BV_GET(&din, &field_addr, fields);
20454#ifdef FREECIV_JSON_CONNECTION
20455 field_addr.name = "id";
20456#endif /* FREECIV_JSON_CONNECTION */
20457 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
20459 }
20460
20461#else /* FREECIV_DELTA_PROTOCOL */
20462#ifdef FREECIV_JSON_CONNECTION
20463 field_addr.name = "id";
20464#endif /* FREECIV_JSON_CONNECTION */
20465 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
20467 }
20468#ifdef FREECIV_JSON_CONNECTION
20469 field_addr.name = "tile";
20470#endif /* FREECIV_JSON_CONNECTION */
20471 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
20473 }
20474#ifdef FREECIV_JSON_CONNECTION
20475 field_addr.name = "owner";
20476#endif /* FREECIV_JSON_CONNECTION */
20477 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
20479 }
20480#ifdef FREECIV_JSON_CONNECTION
20481 field_addr.name = "original";
20482#endif /* FREECIV_JSON_CONNECTION */
20483 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
20485 }
20486#ifdef FREECIV_JSON_CONNECTION
20487 field_addr.name = "size";
20488#endif /* FREECIV_JSON_CONNECTION */
20489 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
20491 }
20492#ifdef FREECIV_JSON_CONNECTION
20493 field_addr.name = "style";
20494#endif /* FREECIV_JSON_CONNECTION */
20495 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
20497 }
20498#ifdef FREECIV_JSON_CONNECTION
20499 field_addr.name = "capital";
20500#endif /* FREECIV_JSON_CONNECTION */
20501 {
20502 int readin;
20503
20504 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20506 }
20507 real_packet->capital = readin;
20508 }
20509#ifdef FREECIV_JSON_CONNECTION
20510 field_addr.name = "occupied";
20511#endif /* FREECIV_JSON_CONNECTION */
20512 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
20514 }
20515#ifdef FREECIV_JSON_CONNECTION
20516 field_addr.name = "walls";
20517#endif /* FREECIV_JSON_CONNECTION */
20518 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
20520 }
20521#ifdef FREECIV_JSON_CONNECTION
20522 field_addr.name = "happy";
20523#endif /* FREECIV_JSON_CONNECTION */
20524 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->happy)) {
20526 }
20527#ifdef FREECIV_JSON_CONNECTION
20528 field_addr.name = "unhappy";
20529#endif /* FREECIV_JSON_CONNECTION */
20530 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unhappy)) {
20532 }
20533#ifdef FREECIV_JSON_CONNECTION
20534 field_addr.name = "city_image";
20535#endif /* FREECIV_JSON_CONNECTION */
20536 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
20537 RECEIVE_PACKET_FIELD_ERROR(city_image);
20538 }
20539#ifdef FREECIV_JSON_CONNECTION
20540 field_addr.name = "improvements";
20541#endif /* FREECIV_JSON_CONNECTION */
20542 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20543 RECEIVE_PACKET_FIELD_ERROR(improvements);
20544 }
20545#ifdef FREECIV_JSON_CONNECTION
20546 field_addr.name = "name";
20547#endif /* FREECIV_JSON_CONNECTION */
20548 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20550 }
20551#endif
20552 log_packet_detailed("packet_city_short_info_100: got info about (%d)",
20553 real_packet->id);
20554
20555#ifdef FREECIV_DELTA_PROTOCOL
20556 if (NULL == *hash) {
20558 NULL, NULL, NULL, free);
20559 }
20560
20561 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
20562 *real_packet = *old;
20563 } else {
20564 int id;
20565
20566 id = real_packet->id;
20567
20568 log_packet_detailed(" no old info");
20569 memset(real_packet, 0, sizeof(*real_packet));
20570
20571 real_packet->id = id;
20572 }
20573
20574 if (BV_ISSET(fields, 0)) {
20575 log_packet_detailed(" got field 'tile'");
20576#ifdef FREECIV_JSON_CONNECTION
20577 field_addr.name = "tile";
20578#endif /* FREECIV_JSON_CONNECTION */
20579 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
20581 }
20582 }
20583 if (BV_ISSET(fields, 1)) {
20584 log_packet_detailed(" got field 'owner'");
20585#ifdef FREECIV_JSON_CONNECTION
20586 field_addr.name = "owner";
20587#endif /* FREECIV_JSON_CONNECTION */
20588 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
20590 }
20591 }
20592 if (BV_ISSET(fields, 2)) {
20593 log_packet_detailed(" got field 'original'");
20594#ifdef FREECIV_JSON_CONNECTION
20595 field_addr.name = "original";
20596#endif /* FREECIV_JSON_CONNECTION */
20597 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
20599 }
20600 }
20601 if (BV_ISSET(fields, 3)) {
20602 log_packet_detailed(" got field 'size'");
20603#ifdef FREECIV_JSON_CONNECTION
20604 field_addr.name = "size";
20605#endif /* FREECIV_JSON_CONNECTION */
20606 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
20608 }
20609 }
20610 if (BV_ISSET(fields, 4)) {
20611 log_packet_detailed(" got field 'style'");
20612#ifdef FREECIV_JSON_CONNECTION
20613 field_addr.name = "style";
20614#endif /* FREECIV_JSON_CONNECTION */
20615 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
20617 }
20618 }
20619 if (BV_ISSET(fields, 5)) {
20620 log_packet_detailed(" got field 'capital'");
20621#ifdef FREECIV_JSON_CONNECTION
20622 field_addr.name = "capital";
20623#endif /* FREECIV_JSON_CONNECTION */
20624 {
20625 int readin;
20626
20627 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
20629 }
20630 real_packet->capital = readin;
20631 }
20632 }
20633 real_packet->occupied = BV_ISSET(fields, 6);
20634 if (BV_ISSET(fields, 7)) {
20635 log_packet_detailed(" got field 'walls'");
20636#ifdef FREECIV_JSON_CONNECTION
20637 field_addr.name = "walls";
20638#endif /* FREECIV_JSON_CONNECTION */
20639 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->walls)) {
20641 }
20642 }
20643 real_packet->happy = BV_ISSET(fields, 8);
20644 real_packet->unhappy = BV_ISSET(fields, 9);
20645 if (BV_ISSET(fields, 10)) {
20646 log_packet_detailed(" got field 'city_image'");
20647#ifdef FREECIV_JSON_CONNECTION
20648 field_addr.name = "city_image";
20649#endif /* FREECIV_JSON_CONNECTION */
20650 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->city_image)) {
20651 RECEIVE_PACKET_FIELD_ERROR(city_image);
20652 }
20653 }
20654 if (BV_ISSET(fields, 11)) {
20655 log_packet_detailed(" got field 'improvements'");
20656#ifdef FREECIV_JSON_CONNECTION
20657 field_addr.name = "improvements";
20658#endif /* FREECIV_JSON_CONNECTION */
20659 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
20660 RECEIVE_PACKET_FIELD_ERROR(improvements);
20661 }
20662 }
20663 if (BV_ISSET(fields, 12)) {
20664 log_packet_detailed(" got field 'name'");
20665#ifdef FREECIV_JSON_CONNECTION
20666 field_addr.name = "name";
20667#endif /* FREECIV_JSON_CONNECTION */
20668 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
20670 }
20671 }
20672
20673 if (NULL == old) {
20674 old = fc_malloc(sizeof(*old));
20675 *old = *real_packet;
20676 genhash_insert(*hash, old, old);
20677 } else {
20678 *old = *real_packet;
20679 }
20680
20681 hash = pc->phs.received + PACKET_CITY_INFO;
20682 if (NULL != *hash) {
20684 }
20685
20686 hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
20687 if (NULL != *hash) {
20689 }
20690
20691 hash = pc->phs.received + PACKET_CITY_NATIONALITIES;
20692 if (NULL != *hash) {
20694 }
20695
20696 hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
20697 if (NULL != *hash) {
20699 }
20700
20701#endif /* FREECIV_DELTA_PROTOCOL */
20703}
20704
20706{
20707 const struct packet_city_short_info *real_packet = packet;
20708 int e;
20709#ifdef FREECIV_DELTA_PROTOCOL
20711 struct packet_city_short_info *old;
20712 bool differ;
20713 struct genhash **hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
20714 int different = 0;
20715#endif /* FREECIV_DELTA_PROTOCOL */
20717#ifdef FREECIV_JSON_CONNECTION
20718 struct plocation field_addr;
20719 {
20723 }
20724#endif /* FREECIV_JSON_CONNECTION */
20725
20726 log_packet_detailed("packet_city_short_info_100: sending info about (%d)",
20727 real_packet->id);
20728
20729#ifdef FREECIV_DELTA_PROTOCOL
20730 if (NULL == *hash) {
20732 NULL, NULL, NULL, free);
20733 }
20734 BV_CLR_ALL(fields);
20735
20736 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
20737 old = fc_malloc(sizeof(*old));
20738 *old = *real_packet;
20739 genhash_insert(*hash, old, old);
20740 memset(old, 0, sizeof(*old));
20741 different = 1; /* Force to send. */
20742 }
20743 differ = (old->tile != real_packet->tile);
20744 if (differ) {
20745 different++;
20746 BV_SET(fields, 0);
20747 }
20748
20749 differ = (old->owner != real_packet->owner);
20750 if (differ) {
20751 different++;
20752 BV_SET(fields, 1);
20753 }
20754
20755 differ = (old->original != real_packet->original);
20756 if (differ) {
20757 different++;
20758 BV_SET(fields, 2);
20759 }
20760
20761 differ = (old->size != real_packet->size);
20762 if (differ) {
20763 different++;
20764 BV_SET(fields, 3);
20765 }
20766
20767 differ = (old->style != real_packet->style);
20768 if (differ) {
20769 different++;
20770 BV_SET(fields, 4);
20771 }
20772
20773 differ = (old->capital != real_packet->capital);
20774 if (differ) {
20775 different++;
20776 BV_SET(fields, 5);
20777 }
20778
20779 differ = (old->occupied != real_packet->occupied);
20780 if (differ) {
20781 different++;
20782 }
20783 if (packet->occupied) {
20784 BV_SET(fields, 6);
20785 }
20786
20787 differ = (old->walls != real_packet->walls);
20788 if (differ) {
20789 different++;
20790 BV_SET(fields, 7);
20791 }
20792
20793 differ = (old->happy != real_packet->happy);
20794 if (differ) {
20795 different++;
20796 }
20797 if (packet->happy) {
20798 BV_SET(fields, 8);
20799 }
20800
20801 differ = (old->unhappy != real_packet->unhappy);
20802 if (differ) {
20803 different++;
20804 }
20805 if (packet->unhappy) {
20806 BV_SET(fields, 9);
20807 }
20808
20809 differ = (old->city_image != real_packet->city_image);
20810 if (differ) {
20811 different++;
20812 BV_SET(fields, 10);
20813 }
20814
20815 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
20816 if (differ) {
20817 different++;
20818 BV_SET(fields, 11);
20819 }
20820
20821 differ = (strcmp(old->name, real_packet->name) != 0);
20822 if (differ) {
20823 different++;
20824 BV_SET(fields, 12);
20825 }
20826
20827 if (different == 0) {
20828 log_packet_detailed(" no change -> discard");
20830 }
20831
20832#ifdef FREECIV_JSON_CONNECTION
20833 field_addr.name = "fields";
20834#endif /* FREECIV_JSON_CONNECTION */
20835 e = 0;
20836 e |= DIO_BV_PUT(&dout, &field_addr, fields);
20837 if (e) {
20838 log_packet_detailed("fields bitvector error detected");
20839 }
20840#ifdef FREECIV_JSON_CONNECTION
20841 field_addr.name = "id";
20842#endif /* FREECIV_JSON_CONNECTION */
20843 e = 0;
20844 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
20845 if (e) {
20846 log_packet_detailed("'id' field error detected");
20847 }
20848
20849 if (BV_ISSET(fields, 0)) {
20850 log_packet_detailed(" field 'tile' has changed");
20851#ifdef FREECIV_JSON_CONNECTION
20852 field_addr.name = "tile";
20853#endif /* FREECIV_JSON_CONNECTION */
20854 e = 0;
20855 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
20856 if (e) {
20857 log_packet_detailed("'tile' field error detected");
20858 }
20859 }
20860 if (BV_ISSET(fields, 1)) {
20861 log_packet_detailed(" field 'owner' has changed");
20862#ifdef FREECIV_JSON_CONNECTION
20863 field_addr.name = "owner";
20864#endif /* FREECIV_JSON_CONNECTION */
20865 e = 0;
20866 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
20867 if (e) {
20868 log_packet_detailed("'owner' field error detected");
20869 }
20870 }
20871 if (BV_ISSET(fields, 2)) {
20872 log_packet_detailed(" field 'original' has changed");
20873#ifdef FREECIV_JSON_CONNECTION
20874 field_addr.name = "original";
20875#endif /* FREECIV_JSON_CONNECTION */
20876 e = 0;
20877 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
20878 if (e) {
20879 log_packet_detailed("'original' field error detected");
20880 }
20881 }
20882 if (BV_ISSET(fields, 3)) {
20883 log_packet_detailed(" field 'size' has changed");
20884#ifdef FREECIV_JSON_CONNECTION
20885 field_addr.name = "size";
20886#endif /* FREECIV_JSON_CONNECTION */
20887 e = 0;
20888 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
20889 if (e) {
20890 log_packet_detailed("'size' field error detected");
20891 }
20892 }
20893 if (BV_ISSET(fields, 4)) {
20894 log_packet_detailed(" field 'style' has changed");
20895#ifdef FREECIV_JSON_CONNECTION
20896 field_addr.name = "style";
20897#endif /* FREECIV_JSON_CONNECTION */
20898 e = 0;
20899 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
20900 if (e) {
20901 log_packet_detailed("'style' field error detected");
20902 }
20903 }
20904 if (BV_ISSET(fields, 5)) {
20905 log_packet_detailed(" field 'capital' has changed");
20906#ifdef FREECIV_JSON_CONNECTION
20907 field_addr.name = "capital";
20908#endif /* FREECIV_JSON_CONNECTION */
20909 e = 0;
20910 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
20911 if (e) {
20912 log_packet_detailed("'capital' field error detected");
20913 }
20914 }
20915 /* field 6 is folded into the header */
20916 if (BV_ISSET(fields, 7)) {
20917 log_packet_detailed(" field 'walls' has changed");
20918#ifdef FREECIV_JSON_CONNECTION
20919 field_addr.name = "walls";
20920#endif /* FREECIV_JSON_CONNECTION */
20921 e = 0;
20922 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
20923 if (e) {
20924 log_packet_detailed("'walls' field error detected");
20925 }
20926 }
20927 /* field 8 is folded into the header */
20928 /* field 9 is folded into the header */
20929 if (BV_ISSET(fields, 10)) {
20930 log_packet_detailed(" field 'city_image' has changed");
20931#ifdef FREECIV_JSON_CONNECTION
20932 field_addr.name = "city_image";
20933#endif /* FREECIV_JSON_CONNECTION */
20934 e = 0;
20935 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
20936 if (e) {
20937 log_packet_detailed("'city_image' field error detected");
20938 }
20939 }
20940 if (BV_ISSET(fields, 11)) {
20941 log_packet_detailed(" field 'improvements' has changed");
20942#ifdef FREECIV_JSON_CONNECTION
20943 field_addr.name = "improvements";
20944#endif /* FREECIV_JSON_CONNECTION */
20945 e = 0;
20946 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
20947 if (e) {
20948 log_packet_detailed("'improvements' field error detected");
20949 }
20950 }
20951 if (BV_ISSET(fields, 12)) {
20952 log_packet_detailed(" field 'name' has changed");
20953#ifdef FREECIV_JSON_CONNECTION
20954 field_addr.name = "name";
20955#endif /* FREECIV_JSON_CONNECTION */
20956 e = 0;
20957 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
20958 if (e) {
20959 log_packet_detailed("'name' field error detected");
20960 }
20961 }
20962
20963 *old = *real_packet;
20964
20965 hash = pc->phs.sent + PACKET_CITY_INFO;
20966 if (NULL != *hash) {
20968 }
20969
20971 if (NULL != *hash) {
20973 }
20974
20975 hash = pc->phs.sent + PACKET_CITY_NATIONALITIES;
20976 if (NULL != *hash) {
20978 }
20979
20980 hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
20981 if (NULL != *hash) {
20983 }
20984#endif /* FREECIV_DELTA_PROTOCOL */
20985#ifndef FREECIV_DELTA_PROTOCOL
20986#ifdef FREECIV_JSON_CONNECTION
20987 field_addr.name = "id";
20988#endif /* FREECIV_JSON_CONNECTION */
20989 e = 0;
20990 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
20991 if (e) {
20992 log_packet_detailed("'id' field error detected");
20993 }
20994#ifdef FREECIV_JSON_CONNECTION
20995 field_addr.name = "tile";
20996#endif /* FREECIV_JSON_CONNECTION */
20997 e = 0;
20998 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
20999 if (e) {
21000 log_packet_detailed("'tile' field error detected");
21001 }
21002#ifdef FREECIV_JSON_CONNECTION
21003 field_addr.name = "owner";
21004#endif /* FREECIV_JSON_CONNECTION */
21005 e = 0;
21006 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
21007 if (e) {
21008 log_packet_detailed("'owner' field error detected");
21009 }
21010#ifdef FREECIV_JSON_CONNECTION
21011 field_addr.name = "original";
21012#endif /* FREECIV_JSON_CONNECTION */
21013 e = 0;
21014 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
21015 if (e) {
21016 log_packet_detailed("'original' field error detected");
21017 }
21018#ifdef FREECIV_JSON_CONNECTION
21019 field_addr.name = "size";
21020#endif /* FREECIV_JSON_CONNECTION */
21021 e = 0;
21022 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
21023 if (e) {
21024 log_packet_detailed("'size' field error detected");
21025 }
21026#ifdef FREECIV_JSON_CONNECTION
21027 field_addr.name = "style";
21028#endif /* FREECIV_JSON_CONNECTION */
21029 e = 0;
21030 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
21031 if (e) {
21032 log_packet_detailed("'style' field error detected");
21033 }
21034#ifdef FREECIV_JSON_CONNECTION
21035 field_addr.name = "capital";
21036#endif /* FREECIV_JSON_CONNECTION */
21037 e = 0;
21038 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->capital);
21039 if (e) {
21040 log_packet_detailed("'capital' field error detected");
21041 }
21042#ifdef FREECIV_JSON_CONNECTION
21043 field_addr.name = "occupied";
21044#endif /* FREECIV_JSON_CONNECTION */
21045 e = 0;
21046 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
21047 if (e) {
21048 log_packet_detailed("'occupied' field error detected");
21049 }
21050#ifdef FREECIV_JSON_CONNECTION
21051 field_addr.name = "walls";
21052#endif /* FREECIV_JSON_CONNECTION */
21053 e = 0;
21054 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->walls);
21055 if (e) {
21056 log_packet_detailed("'walls' field error detected");
21057 }
21058#ifdef FREECIV_JSON_CONNECTION
21059 field_addr.name = "happy";
21060#endif /* FREECIV_JSON_CONNECTION */
21061 e = 0;
21062 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->happy);
21063 if (e) {
21064 log_packet_detailed("'happy' field error detected");
21065 }
21066#ifdef FREECIV_JSON_CONNECTION
21067 field_addr.name = "unhappy";
21068#endif /* FREECIV_JSON_CONNECTION */
21069 e = 0;
21070 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unhappy);
21071 if (e) {
21072 log_packet_detailed("'unhappy' field error detected");
21073 }
21074#ifdef FREECIV_JSON_CONNECTION
21075 field_addr.name = "city_image";
21076#endif /* FREECIV_JSON_CONNECTION */
21077 e = 0;
21078 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->city_image);
21079 if (e) {
21080 log_packet_detailed("'city_image' field error detected");
21081 }
21082#ifdef FREECIV_JSON_CONNECTION
21083 field_addr.name = "improvements";
21084#endif /* FREECIV_JSON_CONNECTION */
21085 e = 0;
21086 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
21087 if (e) {
21088 log_packet_detailed("'improvements' field error detected");
21089 }
21090#ifdef FREECIV_JSON_CONNECTION
21091 field_addr.name = "name";
21092#endif /* FREECIV_JSON_CONNECTION */
21093 e = 0;
21094 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
21095 if (e) {
21096 log_packet_detailed("'name' field error detected");
21097 }
21098
21099#endif
21101}
21102
21104{
21105 if (!pc->used) {
21106 log_error("WARNING: trying to send data to the closed connection %s",
21108 return -1;
21109 }
21110 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet != NULL, -1,
21111 "Handler for PACKET_CITY_SHORT_INFO not installed");
21112 return pc->phs.handlers->send[PACKET_CITY_SHORT_INFO].packet(pc, packet);
21113}
21114
21115void lsend_packet_city_short_info(struct conn_list *dest, const struct packet_city_short_info *packet)
21116{
21117 conn_list_iterate(dest, pconn) {
21120}
21121
21122#ifdef FREECIV_DELTA_PROTOCOL
21123#define hash_packet_trade_route_info_100 hash_const
21124
21125#define cmp_packet_trade_route_info_100 cmp_const
21126
21128#endif /* FREECIV_DELTA_PROTOCOL */
21129
21131{
21132#ifdef FREECIV_DELTA_PROTOCOL
21134 struct packet_trade_route_info *old;
21135 struct genhash **hash = pc->phs.received + PACKET_TRADE_ROUTE_INFO;
21136#endif /* FREECIV_DELTA_PROTOCOL */
21138#ifdef FREECIV_JSON_CONNECTION
21139 struct plocation field_addr;
21140 {
21144 }
21145#endif /* FREECIV_JSON_CONNECTION */
21146
21147#ifdef FREECIV_DELTA_PROTOCOL
21148#ifdef FREECIV_JSON_CONNECTION
21149 field_addr.name = "fields";
21150#endif /* FREECIV_JSON_CONNECTION */
21151 DIO_BV_GET(&din, &field_addr, fields);
21152
21153#else /* FREECIV_DELTA_PROTOCOL */
21154#ifdef FREECIV_JSON_CONNECTION
21155 field_addr.name = "city";
21156#endif /* FREECIV_JSON_CONNECTION */
21157 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
21159 }
21160#ifdef FREECIV_JSON_CONNECTION
21161 field_addr.name = "index";
21162#endif /* FREECIV_JSON_CONNECTION */
21163 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
21165 }
21166#ifdef FREECIV_JSON_CONNECTION
21167 field_addr.name = "partner";
21168#endif /* FREECIV_JSON_CONNECTION */
21169 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
21171 }
21172#ifdef FREECIV_JSON_CONNECTION
21173 field_addr.name = "value";
21174#endif /* FREECIV_JSON_CONNECTION */
21175 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
21177 }
21178#ifdef FREECIV_JSON_CONNECTION
21179 field_addr.name = "direction";
21180#endif /* FREECIV_JSON_CONNECTION */
21181 {
21182 int readin;
21183
21184 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
21185 RECEIVE_PACKET_FIELD_ERROR(direction);
21186 }
21187 real_packet->direction = readin;
21188 }
21189#ifdef FREECIV_JSON_CONNECTION
21190 field_addr.name = "goods";
21191#endif /* FREECIV_JSON_CONNECTION */
21192 {
21193 int readin;
21194
21195 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
21197 }
21198 real_packet->goods = readin;
21199 }
21200#endif
21201 log_packet_detailed("packet_trade_route_info_100: got info about ()");
21202
21203#ifdef FREECIV_DELTA_PROTOCOL
21204 if (NULL == *hash) {
21206 NULL, NULL, NULL, free);
21207 }
21208
21209 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21210 *real_packet = *old;
21211 } else {
21212 log_packet_detailed(" no old info");
21213 memset(real_packet, 0, sizeof(*real_packet));
21214 }
21215
21216 if (BV_ISSET(fields, 0)) {
21217 log_packet_detailed(" got field 'city'");
21218#ifdef FREECIV_JSON_CONNECTION
21219 field_addr.name = "city";
21220#endif /* FREECIV_JSON_CONNECTION */
21221 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city)) {
21223 }
21224 }
21225 if (BV_ISSET(fields, 1)) {
21226 log_packet_detailed(" got field 'index'");
21227#ifdef FREECIV_JSON_CONNECTION
21228 field_addr.name = "index";
21229#endif /* FREECIV_JSON_CONNECTION */
21230 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->index)) {
21232 }
21233 }
21234 if (BV_ISSET(fields, 2)) {
21235 log_packet_detailed(" got field 'partner'");
21236#ifdef FREECIV_JSON_CONNECTION
21237 field_addr.name = "partner";
21238#endif /* FREECIV_JSON_CONNECTION */
21239 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->partner)) {
21241 }
21242 }
21243 if (BV_ISSET(fields, 3)) {
21244 log_packet_detailed(" got field 'value'");
21245#ifdef FREECIV_JSON_CONNECTION
21246 field_addr.name = "value";
21247#endif /* FREECIV_JSON_CONNECTION */
21248 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
21250 }
21251 }
21252 if (BV_ISSET(fields, 4)) {
21253 log_packet_detailed(" got field 'direction'");
21254#ifdef FREECIV_JSON_CONNECTION
21255 field_addr.name = "direction";
21256#endif /* FREECIV_JSON_CONNECTION */
21257 {
21258 int readin;
21259
21260 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
21261 RECEIVE_PACKET_FIELD_ERROR(direction);
21262 }
21263 real_packet->direction = readin;
21264 }
21265 }
21266 if (BV_ISSET(fields, 5)) {
21267 log_packet_detailed(" got field 'goods'");
21268#ifdef FREECIV_JSON_CONNECTION
21269 field_addr.name = "goods";
21270#endif /* FREECIV_JSON_CONNECTION */
21271 {
21272 int readin;
21273
21274 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
21276 }
21277 real_packet->goods = readin;
21278 }
21279 }
21280
21281 if (NULL == old) {
21282 old = fc_malloc(sizeof(*old));
21283 *old = *real_packet;
21284 genhash_insert(*hash, old, old);
21285 } else {
21286 *old = *real_packet;
21287 }
21288
21289#endif /* FREECIV_DELTA_PROTOCOL */
21291}
21292
21294{
21295 const struct packet_trade_route_info *real_packet = packet;
21296 int e;
21297#ifdef FREECIV_DELTA_PROTOCOL
21299 struct packet_trade_route_info *old;
21300 bool differ;
21301 struct genhash **hash = pc->phs.sent + PACKET_TRADE_ROUTE_INFO;
21302#endif /* FREECIV_DELTA_PROTOCOL */
21304#ifdef FREECIV_JSON_CONNECTION
21305 struct plocation field_addr;
21306 {
21310 }
21311#endif /* FREECIV_JSON_CONNECTION */
21312
21313 log_packet_detailed("packet_trade_route_info_100: sending info about ()");
21314
21315#ifdef FREECIV_DELTA_PROTOCOL
21316 if (NULL == *hash) {
21318 NULL, NULL, NULL, free);
21319 }
21320 BV_CLR_ALL(fields);
21321
21322 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21323 old = fc_malloc(sizeof(*old));
21324 *old = *real_packet;
21325 genhash_insert(*hash, old, old);
21326 memset(old, 0, sizeof(*old));
21327 }
21328 differ = (old->city != real_packet->city);
21329 if (differ) {
21330 BV_SET(fields, 0);
21331 }
21332
21333 differ = (old->index != real_packet->index);
21334 if (differ) {
21335 BV_SET(fields, 1);
21336 }
21337
21338 differ = (old->partner != real_packet->partner);
21339 if (differ) {
21340 BV_SET(fields, 2);
21341 }
21342
21343 differ = (old->value != real_packet->value);
21344 if (differ) {
21345 BV_SET(fields, 3);
21346 }
21347
21348 differ = (old->direction != real_packet->direction);
21349 if (differ) {
21350 BV_SET(fields, 4);
21351 }
21352
21353 differ = (old->goods != real_packet->goods);
21354 if (differ) {
21355 BV_SET(fields, 5);
21356 }
21357
21358
21359#ifdef FREECIV_JSON_CONNECTION
21360 field_addr.name = "fields";
21361#endif /* FREECIV_JSON_CONNECTION */
21362 e = 0;
21363 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21364 if (e) {
21365 log_packet_detailed("fields bitvector error detected");
21366 }
21367
21368 if (BV_ISSET(fields, 0)) {
21369 log_packet_detailed(" field 'city' has changed");
21370#ifdef FREECIV_JSON_CONNECTION
21371 field_addr.name = "city";
21372#endif /* FREECIV_JSON_CONNECTION */
21373 e = 0;
21374 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
21375 if (e) {
21376 log_packet_detailed("'city' field error detected");
21377 }
21378 }
21379 if (BV_ISSET(fields, 1)) {
21380 log_packet_detailed(" field 'index' has changed");
21381#ifdef FREECIV_JSON_CONNECTION
21382 field_addr.name = "index";
21383#endif /* FREECIV_JSON_CONNECTION */
21384 e = 0;
21385 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
21386 if (e) {
21387 log_packet_detailed("'index' field error detected");
21388 }
21389 }
21390 if (BV_ISSET(fields, 2)) {
21391 log_packet_detailed(" field 'partner' has changed");
21392#ifdef FREECIV_JSON_CONNECTION
21393 field_addr.name = "partner";
21394#endif /* FREECIV_JSON_CONNECTION */
21395 e = 0;
21396 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
21397 if (e) {
21398 log_packet_detailed("'partner' field error detected");
21399 }
21400 }
21401 if (BV_ISSET(fields, 3)) {
21402 log_packet_detailed(" field 'value' has changed");
21403#ifdef FREECIV_JSON_CONNECTION
21404 field_addr.name = "value";
21405#endif /* FREECIV_JSON_CONNECTION */
21406 e = 0;
21407 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
21408 if (e) {
21409 log_packet_detailed("'value' field error detected");
21410 }
21411 }
21412 if (BV_ISSET(fields, 4)) {
21413 log_packet_detailed(" field 'direction' has changed");
21414#ifdef FREECIV_JSON_CONNECTION
21415 field_addr.name = "direction";
21416#endif /* FREECIV_JSON_CONNECTION */
21417 e = 0;
21418 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
21419 if (e) {
21420 log_packet_detailed("'direction' field error detected");
21421 }
21422 }
21423 if (BV_ISSET(fields, 5)) {
21424 log_packet_detailed(" field 'goods' has changed");
21425#ifdef FREECIV_JSON_CONNECTION
21426 field_addr.name = "goods";
21427#endif /* FREECIV_JSON_CONNECTION */
21428 e = 0;
21429 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
21430 if (e) {
21431 log_packet_detailed("'goods' field error detected");
21432 }
21433 }
21434
21435 *old = *real_packet;
21436#endif /* FREECIV_DELTA_PROTOCOL */
21437#ifndef FREECIV_DELTA_PROTOCOL
21438#ifdef FREECIV_JSON_CONNECTION
21439 field_addr.name = "city";
21440#endif /* FREECIV_JSON_CONNECTION */
21441 e = 0;
21442 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city);
21443 if (e) {
21444 log_packet_detailed("'city' field error detected");
21445 }
21446#ifdef FREECIV_JSON_CONNECTION
21447 field_addr.name = "index";
21448#endif /* FREECIV_JSON_CONNECTION */
21449 e = 0;
21450 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->index);
21451 if (e) {
21452 log_packet_detailed("'index' field error detected");
21453 }
21454#ifdef FREECIV_JSON_CONNECTION
21455 field_addr.name = "partner";
21456#endif /* FREECIV_JSON_CONNECTION */
21457 e = 0;
21458 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->partner);
21459 if (e) {
21460 log_packet_detailed("'partner' field error detected");
21461 }
21462#ifdef FREECIV_JSON_CONNECTION
21463 field_addr.name = "value";
21464#endif /* FREECIV_JSON_CONNECTION */
21465 e = 0;
21466 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
21467 if (e) {
21468 log_packet_detailed("'value' field error detected");
21469 }
21470#ifdef FREECIV_JSON_CONNECTION
21471 field_addr.name = "direction";
21472#endif /* FREECIV_JSON_CONNECTION */
21473 e = 0;
21474 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->direction);
21475 if (e) {
21476 log_packet_detailed("'direction' field error detected");
21477 }
21478#ifdef FREECIV_JSON_CONNECTION
21479 field_addr.name = "goods";
21480#endif /* FREECIV_JSON_CONNECTION */
21481 e = 0;
21482 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->goods);
21483 if (e) {
21484 log_packet_detailed("'goods' field error detected");
21485 }
21486
21487#endif
21489}
21490
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_TRADE_ROUTE_INFO].packet != NULL, -1,
21499 "Handler for PACKET_TRADE_ROUTE_INFO not installed");
21500 return pc->phs.handlers->send[PACKET_TRADE_ROUTE_INFO].packet(pc, packet);
21501}
21502
21504{
21505 conn_list_iterate(dest, pconn) {
21508}
21509
21510#ifdef FREECIV_DELTA_PROTOCOL
21511#define hash_packet_city_sell_100 hash_const
21512
21513#define cmp_packet_city_sell_100 cmp_const
21514
21516#endif /* FREECIV_DELTA_PROTOCOL */
21517
21519{
21520#ifdef FREECIV_DELTA_PROTOCOL
21522 struct packet_city_sell *old;
21523 struct genhash **hash = pc->phs.received + PACKET_CITY_SELL;
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 = "build_id";
21550#endif /* FREECIV_JSON_CONNECTION */
21551 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
21553 }
21554#endif
21555 log_packet_detailed("packet_city_sell_100: got info about ()");
21556
21557#ifdef FREECIV_DELTA_PROTOCOL
21558 if (NULL == *hash) {
21560 NULL, NULL, NULL, free);
21561 }
21562
21563 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21564 *real_packet = *old;
21565 } else {
21566 log_packet_detailed(" no old info");
21567 memset(real_packet, 0, sizeof(*real_packet));
21568 }
21569
21570 if (BV_ISSET(fields, 0)) {
21571 log_packet_detailed(" got field 'city_id'");
21572#ifdef FREECIV_JSON_CONNECTION
21573 field_addr.name = "city_id";
21574#endif /* FREECIV_JSON_CONNECTION */
21575 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21577 }
21578 }
21579 if (BV_ISSET(fields, 1)) {
21580 log_packet_detailed(" got field 'build_id'");
21581#ifdef FREECIV_JSON_CONNECTION
21582 field_addr.name = "build_id";
21583#endif /* FREECIV_JSON_CONNECTION */
21584 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_id)) {
21586 }
21587 }
21588
21589 if (NULL == old) {
21590 old = fc_malloc(sizeof(*old));
21591 *old = *real_packet;
21592 genhash_insert(*hash, old, old);
21593 } else {
21594 *old = *real_packet;
21595 }
21596
21597#endif /* FREECIV_DELTA_PROTOCOL */
21599}
21600
21601static int send_packet_city_sell_100(struct connection *pc, const struct packet_city_sell *packet)
21602{
21603 const struct packet_city_sell *real_packet = packet;
21604 int e;
21605#ifdef FREECIV_DELTA_PROTOCOL
21607 struct packet_city_sell *old;
21608 bool differ;
21609 struct genhash **hash = pc->phs.sent + PACKET_CITY_SELL;
21610#endif /* FREECIV_DELTA_PROTOCOL */
21612#ifdef FREECIV_JSON_CONNECTION
21613 struct plocation field_addr;
21614 {
21618 }
21619#endif /* FREECIV_JSON_CONNECTION */
21620
21621 log_packet_detailed("packet_city_sell_100: sending info about ()");
21622
21623#ifdef FREECIV_DELTA_PROTOCOL
21624 if (NULL == *hash) {
21626 NULL, NULL, NULL, free);
21627 }
21628 BV_CLR_ALL(fields);
21629
21630 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21631 old = fc_malloc(sizeof(*old));
21632 *old = *real_packet;
21633 genhash_insert(*hash, old, old);
21634 memset(old, 0, sizeof(*old));
21635 }
21636 differ = (old->city_id != real_packet->city_id);
21637 if (differ) {
21638 BV_SET(fields, 0);
21639 }
21640
21641 differ = (old->build_id != real_packet->build_id);
21642 if (differ) {
21643 BV_SET(fields, 1);
21644 }
21645
21646
21647#ifdef FREECIV_JSON_CONNECTION
21648 field_addr.name = "fields";
21649#endif /* FREECIV_JSON_CONNECTION */
21650 e = 0;
21651 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21652 if (e) {
21653 log_packet_detailed("fields bitvector error detected");
21654 }
21655
21656 if (BV_ISSET(fields, 0)) {
21657 log_packet_detailed(" field 'city_id' has changed");
21658#ifdef FREECIV_JSON_CONNECTION
21659 field_addr.name = "city_id";
21660#endif /* FREECIV_JSON_CONNECTION */
21661 e = 0;
21662 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21663 if (e) {
21664 log_packet_detailed("'city_id' field error detected");
21665 }
21666 }
21667 if (BV_ISSET(fields, 1)) {
21668 log_packet_detailed(" field 'build_id' has changed");
21669#ifdef FREECIV_JSON_CONNECTION
21670 field_addr.name = "build_id";
21671#endif /* FREECIV_JSON_CONNECTION */
21672 e = 0;
21673 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
21674 if (e) {
21675 log_packet_detailed("'build_id' field error detected");
21676 }
21677 }
21678
21679 *old = *real_packet;
21680#endif /* FREECIV_DELTA_PROTOCOL */
21681#ifndef FREECIV_DELTA_PROTOCOL
21682#ifdef FREECIV_JSON_CONNECTION
21683 field_addr.name = "city_id";
21684#endif /* FREECIV_JSON_CONNECTION */
21685 e = 0;
21686 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21687 if (e) {
21688 log_packet_detailed("'city_id' field error detected");
21689 }
21690#ifdef FREECIV_JSON_CONNECTION
21691 field_addr.name = "build_id";
21692#endif /* FREECIV_JSON_CONNECTION */
21693 e = 0;
21694 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_id);
21695 if (e) {
21696 log_packet_detailed("'build_id' field error detected");
21697 }
21698
21699#endif
21701}
21702
21703int send_packet_city_sell(struct connection *pc, const struct packet_city_sell *packet)
21704{
21705 if (!pc->used) {
21706 log_error("WARNING: trying to send data to the closed connection %s",
21708 return -1;
21709 }
21710 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SELL].packet != NULL, -1,
21711 "Handler for PACKET_CITY_SELL not installed");
21712 return pc->phs.handlers->send[PACKET_CITY_SELL].packet(pc, packet);
21713}
21714
21715int dsend_packet_city_sell(struct connection *pc, int city_id, int build_id)
21716{
21717 struct packet_city_sell packet, *real_packet = &packet;
21718
21720 real_packet->build_id = build_id;
21721
21723}
21724
21725#ifdef FREECIV_DELTA_PROTOCOL
21726#define hash_packet_city_buy_100 hash_const
21727
21728#define cmp_packet_city_buy_100 cmp_const
21729
21731#endif /* FREECIV_DELTA_PROTOCOL */
21732
21734{
21735#ifdef FREECIV_DELTA_PROTOCOL
21737 struct packet_city_buy *old;
21738 struct genhash **hash = pc->phs.received + PACKET_CITY_BUY;
21739#endif /* FREECIV_DELTA_PROTOCOL */
21741#ifdef FREECIV_JSON_CONNECTION
21742 struct plocation field_addr;
21743 {
21747 }
21748#endif /* FREECIV_JSON_CONNECTION */
21749
21750#ifdef FREECIV_DELTA_PROTOCOL
21751#ifdef FREECIV_JSON_CONNECTION
21752 field_addr.name = "fields";
21753#endif /* FREECIV_JSON_CONNECTION */
21754 DIO_BV_GET(&din, &field_addr, fields);
21755
21756#else /* FREECIV_DELTA_PROTOCOL */
21757#ifdef FREECIV_JSON_CONNECTION
21758 field_addr.name = "city_id";
21759#endif /* FREECIV_JSON_CONNECTION */
21760 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21762 }
21763#endif
21764 log_packet_detailed("packet_city_buy_100: got info about ()");
21765
21766#ifdef FREECIV_DELTA_PROTOCOL
21767 if (NULL == *hash) {
21769 NULL, NULL, NULL, free);
21770 }
21771
21772 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21773 *real_packet = *old;
21774 } else {
21775 log_packet_detailed(" no old info");
21776 memset(real_packet, 0, sizeof(*real_packet));
21777 }
21778
21779 if (BV_ISSET(fields, 0)) {
21780 log_packet_detailed(" got field 'city_id'");
21781#ifdef FREECIV_JSON_CONNECTION
21782 field_addr.name = "city_id";
21783#endif /* FREECIV_JSON_CONNECTION */
21784 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21786 }
21787 }
21788
21789 if (NULL == old) {
21790 old = fc_malloc(sizeof(*old));
21791 *old = *real_packet;
21792 genhash_insert(*hash, old, old);
21793 } else {
21794 *old = *real_packet;
21795 }
21796
21797#endif /* FREECIV_DELTA_PROTOCOL */
21799}
21800
21801static int send_packet_city_buy_100(struct connection *pc, const struct packet_city_buy *packet)
21802{
21803 const struct packet_city_buy *real_packet = packet;
21804 int e;
21805#ifdef FREECIV_DELTA_PROTOCOL
21807 struct packet_city_buy *old;
21808 bool differ;
21809 struct genhash **hash = pc->phs.sent + PACKET_CITY_BUY;
21810#endif /* FREECIV_DELTA_PROTOCOL */
21812#ifdef FREECIV_JSON_CONNECTION
21813 struct plocation field_addr;
21814 {
21818 }
21819#endif /* FREECIV_JSON_CONNECTION */
21820
21821 log_packet_detailed("packet_city_buy_100: sending info about ()");
21822
21823#ifdef FREECIV_DELTA_PROTOCOL
21824 if (NULL == *hash) {
21826 NULL, NULL, NULL, free);
21827 }
21828 BV_CLR_ALL(fields);
21829
21830 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
21831 old = fc_malloc(sizeof(*old));
21832 *old = *real_packet;
21833 genhash_insert(*hash, old, old);
21834 memset(old, 0, sizeof(*old));
21835 }
21836 differ = (old->city_id != real_packet->city_id);
21837 if (differ) {
21838 BV_SET(fields, 0);
21839 }
21840
21841
21842#ifdef FREECIV_JSON_CONNECTION
21843 field_addr.name = "fields";
21844#endif /* FREECIV_JSON_CONNECTION */
21845 e = 0;
21846 e |= DIO_BV_PUT(&dout, &field_addr, fields);
21847 if (e) {
21848 log_packet_detailed("fields bitvector error detected");
21849 }
21850
21851 if (BV_ISSET(fields, 0)) {
21852 log_packet_detailed(" field 'city_id' has changed");
21853#ifdef FREECIV_JSON_CONNECTION
21854 field_addr.name = "city_id";
21855#endif /* FREECIV_JSON_CONNECTION */
21856 e = 0;
21857 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21858 if (e) {
21859 log_packet_detailed("'city_id' field error detected");
21860 }
21861 }
21862
21863 *old = *real_packet;
21864#endif /* FREECIV_DELTA_PROTOCOL */
21865#ifndef FREECIV_DELTA_PROTOCOL
21866#ifdef FREECIV_JSON_CONNECTION
21867 field_addr.name = "city_id";
21868#endif /* FREECIV_JSON_CONNECTION */
21869 e = 0;
21870 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
21871 if (e) {
21872 log_packet_detailed("'city_id' field error detected");
21873 }
21874
21875#endif
21877}
21878
21879int send_packet_city_buy(struct connection *pc, const struct packet_city_buy *packet)
21880{
21881 if (!pc->used) {
21882 log_error("WARNING: trying to send data to the closed connection %s",
21884 return -1;
21885 }
21886 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_BUY].packet != NULL, -1,
21887 "Handler for PACKET_CITY_BUY not installed");
21888 return pc->phs.handlers->send[PACKET_CITY_BUY].packet(pc, packet);
21889}
21890
21891int dsend_packet_city_buy(struct connection *pc, int city_id)
21892{
21893 struct packet_city_buy packet, *real_packet = &packet;
21894
21896
21898}
21899
21900#ifdef FREECIV_DELTA_PROTOCOL
21901#define hash_packet_city_change_100 hash_const
21902
21903#define cmp_packet_city_change_100 cmp_const
21904
21906#endif /* FREECIV_DELTA_PROTOCOL */
21907
21909{
21910#ifdef FREECIV_DELTA_PROTOCOL
21912 struct packet_city_change *old;
21913 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE;
21914#endif /* FREECIV_DELTA_PROTOCOL */
21916#ifdef FREECIV_JSON_CONNECTION
21917 struct plocation field_addr;
21918 {
21922 }
21923#endif /* FREECIV_JSON_CONNECTION */
21924
21925#ifdef FREECIV_DELTA_PROTOCOL
21926#ifdef FREECIV_JSON_CONNECTION
21927 field_addr.name = "fields";
21928#endif /* FREECIV_JSON_CONNECTION */
21929 DIO_BV_GET(&din, &field_addr, fields);
21930
21931#else /* FREECIV_DELTA_PROTOCOL */
21932#ifdef FREECIV_JSON_CONNECTION
21933 field_addr.name = "city_id";
21934#endif /* FREECIV_JSON_CONNECTION */
21935 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21937 }
21938#ifdef FREECIV_JSON_CONNECTION
21939 field_addr.name = "production_kind";
21940#endif /* FREECIV_JSON_CONNECTION */
21941 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
21942 RECEIVE_PACKET_FIELD_ERROR(production_kind);
21943 }
21944#ifdef FREECIV_JSON_CONNECTION
21945 field_addr.name = "production_value";
21946#endif /* FREECIV_JSON_CONNECTION */
21947 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
21948 RECEIVE_PACKET_FIELD_ERROR(production_value);
21949 }
21950#endif
21951 log_packet_detailed("packet_city_change_100: got info about ()");
21952
21953#ifdef FREECIV_DELTA_PROTOCOL
21954 if (NULL == *hash) {
21956 NULL, NULL, NULL, free);
21957 }
21958
21959 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
21960 *real_packet = *old;
21961 } else {
21962 log_packet_detailed(" no old info");
21963 memset(real_packet, 0, sizeof(*real_packet));
21964 }
21965
21966 if (BV_ISSET(fields, 0)) {
21967 log_packet_detailed(" got field 'city_id'");
21968#ifdef FREECIV_JSON_CONNECTION
21969 field_addr.name = "city_id";
21970#endif /* FREECIV_JSON_CONNECTION */
21971 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
21973 }
21974 }
21975 if (BV_ISSET(fields, 1)) {
21976 log_packet_detailed(" got field 'production_kind'");
21977#ifdef FREECIV_JSON_CONNECTION
21978 field_addr.name = "production_kind";
21979#endif /* FREECIV_JSON_CONNECTION */
21980 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
21981 RECEIVE_PACKET_FIELD_ERROR(production_kind);
21982 }
21983 }
21984 if (BV_ISSET(fields, 2)) {
21985 log_packet_detailed(" got field 'production_value'");
21986#ifdef FREECIV_JSON_CONNECTION
21987 field_addr.name = "production_value";
21988#endif /* FREECIV_JSON_CONNECTION */
21989 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
21990 RECEIVE_PACKET_FIELD_ERROR(production_value);
21991 }
21992 }
21993
21994 if (NULL == old) {
21995 old = fc_malloc(sizeof(*old));
21996 *old = *real_packet;
21997 genhash_insert(*hash, old, old);
21998 } else {
21999 *old = *real_packet;
22000 }
22001
22002#endif /* FREECIV_DELTA_PROTOCOL */
22004}
22005
22006static int send_packet_city_change_100(struct connection *pc, const struct packet_city_change *packet)
22007{
22008 const struct packet_city_change *real_packet = packet;
22009 int e;
22010#ifdef FREECIV_DELTA_PROTOCOL
22012 struct packet_city_change *old;
22013 bool differ;
22014 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE;
22015#endif /* FREECIV_DELTA_PROTOCOL */
22017#ifdef FREECIV_JSON_CONNECTION
22018 struct plocation field_addr;
22019 {
22023 }
22024#endif /* FREECIV_JSON_CONNECTION */
22025
22026 log_packet_detailed("packet_city_change_100: sending info about ()");
22027
22028#ifdef FREECIV_DELTA_PROTOCOL
22029 if (NULL == *hash) {
22031 NULL, NULL, NULL, free);
22032 }
22033 BV_CLR_ALL(fields);
22034
22035 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22036 old = fc_malloc(sizeof(*old));
22037 *old = *real_packet;
22038 genhash_insert(*hash, old, old);
22039 memset(old, 0, sizeof(*old));
22040 }
22041 differ = (old->city_id != real_packet->city_id);
22042 if (differ) {
22043 BV_SET(fields, 0);
22044 }
22045
22046 differ = (old->production_kind != real_packet->production_kind);
22047 if (differ) {
22048 BV_SET(fields, 1);
22049 }
22050
22051 differ = (old->production_value != real_packet->production_value);
22052 if (differ) {
22053 BV_SET(fields, 2);
22054 }
22055
22056
22057#ifdef FREECIV_JSON_CONNECTION
22058 field_addr.name = "fields";
22059#endif /* FREECIV_JSON_CONNECTION */
22060 e = 0;
22061 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22062 if (e) {
22063 log_packet_detailed("fields bitvector error detected");
22064 }
22065
22066 if (BV_ISSET(fields, 0)) {
22067 log_packet_detailed(" field 'city_id' has changed");
22068#ifdef FREECIV_JSON_CONNECTION
22069 field_addr.name = "city_id";
22070#endif /* FREECIV_JSON_CONNECTION */
22071 e = 0;
22072 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22073 if (e) {
22074 log_packet_detailed("'city_id' field error detected");
22075 }
22076 }
22077 if (BV_ISSET(fields, 1)) {
22078 log_packet_detailed(" field 'production_kind' has changed");
22079#ifdef FREECIV_JSON_CONNECTION
22080 field_addr.name = "production_kind";
22081#endif /* FREECIV_JSON_CONNECTION */
22082 e = 0;
22083 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
22084 if (e) {
22085 log_packet_detailed("'production_kind' field error detected");
22086 }
22087 }
22088 if (BV_ISSET(fields, 2)) {
22089 log_packet_detailed(" field 'production_value' has changed");
22090#ifdef FREECIV_JSON_CONNECTION
22091 field_addr.name = "production_value";
22092#endif /* FREECIV_JSON_CONNECTION */
22093 e = 0;
22094 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
22095 if (e) {
22096 log_packet_detailed("'production_value' field error detected");
22097 }
22098 }
22099
22100 *old = *real_packet;
22101#endif /* FREECIV_DELTA_PROTOCOL */
22102#ifndef FREECIV_DELTA_PROTOCOL
22103#ifdef FREECIV_JSON_CONNECTION
22104 field_addr.name = "city_id";
22105#endif /* FREECIV_JSON_CONNECTION */
22106 e = 0;
22107 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22108 if (e) {
22109 log_packet_detailed("'city_id' field error detected");
22110 }
22111#ifdef FREECIV_JSON_CONNECTION
22112 field_addr.name = "production_kind";
22113#endif /* FREECIV_JSON_CONNECTION */
22114 e = 0;
22115 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
22116 if (e) {
22117 log_packet_detailed("'production_kind' field error detected");
22118 }
22119#ifdef FREECIV_JSON_CONNECTION
22120 field_addr.name = "production_value";
22121#endif /* FREECIV_JSON_CONNECTION */
22122 e = 0;
22123 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
22124 if (e) {
22125 log_packet_detailed("'production_value' field error detected");
22126 }
22127
22128#endif
22130}
22131
22133{
22134 if (!pc->used) {
22135 log_error("WARNING: trying to send data to the closed connection %s",
22137 return -1;
22138 }
22139 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE].packet != NULL, -1,
22140 "Handler for PACKET_CITY_CHANGE not installed");
22141 return pc->phs.handlers->send[PACKET_CITY_CHANGE].packet(pc, packet);
22142}
22143
22144int dsend_packet_city_change(struct connection *pc, int city_id, int production_kind, int production_value)
22145{
22146 struct packet_city_change packet, *real_packet = &packet;
22147
22149 real_packet->production_kind = production_kind;
22150 real_packet->production_value = production_value;
22151
22153}
22154
22155#ifdef FREECIV_DELTA_PROTOCOL
22156#define hash_packet_city_worklist_100 hash_const
22157
22158#define cmp_packet_city_worklist_100 cmp_const
22159
22161#endif /* FREECIV_DELTA_PROTOCOL */
22162
22164{
22165#ifdef FREECIV_DELTA_PROTOCOL
22167 struct packet_city_worklist *old;
22168 struct genhash **hash = pc->phs.received + PACKET_CITY_WORKLIST;
22169#endif /* FREECIV_DELTA_PROTOCOL */
22171#ifdef FREECIV_JSON_CONNECTION
22172 struct plocation field_addr;
22173 {
22177 }
22178#endif /* FREECIV_JSON_CONNECTION */
22179
22180#ifdef FREECIV_DELTA_PROTOCOL
22181#ifdef FREECIV_JSON_CONNECTION
22182 field_addr.name = "fields";
22183#endif /* FREECIV_JSON_CONNECTION */
22184 DIO_BV_GET(&din, &field_addr, fields);
22185
22186#else /* FREECIV_DELTA_PROTOCOL */
22187#ifdef FREECIV_JSON_CONNECTION
22188 field_addr.name = "city_id";
22189#endif /* FREECIV_JSON_CONNECTION */
22190 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22192 }
22193#ifdef FREECIV_JSON_CONNECTION
22194 field_addr.name = "worklist";
22195#endif /* FREECIV_JSON_CONNECTION */
22196 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
22198 }
22199#endif
22200 log_packet_detailed("packet_city_worklist_100: got info about ()");
22201
22202#ifdef FREECIV_DELTA_PROTOCOL
22203 if (NULL == *hash) {
22205 NULL, NULL, NULL, free);
22206 }
22207
22208 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22209 *real_packet = *old;
22210 } else {
22211 log_packet_detailed(" no old info");
22212 memset(real_packet, 0, sizeof(*real_packet));
22213 }
22214
22215 if (BV_ISSET(fields, 0)) {
22216 log_packet_detailed(" got field 'city_id'");
22217#ifdef FREECIV_JSON_CONNECTION
22218 field_addr.name = "city_id";
22219#endif /* FREECIV_JSON_CONNECTION */
22220 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22222 }
22223 }
22224 if (BV_ISSET(fields, 1)) {
22225 log_packet_detailed(" got field 'worklist'");
22226#ifdef FREECIV_JSON_CONNECTION
22227 field_addr.name = "worklist";
22228#endif /* FREECIV_JSON_CONNECTION */
22229 if (!DIO_GET(worklist, &din, &field_addr, &real_packet->worklist)) {
22231 }
22232 }
22233
22234 if (NULL == old) {
22235 old = fc_malloc(sizeof(*old));
22236 *old = *real_packet;
22237 genhash_insert(*hash, old, old);
22238 } else {
22239 *old = *real_packet;
22240 }
22241
22242#endif /* FREECIV_DELTA_PROTOCOL */
22244}
22245
22246static int send_packet_city_worklist_100(struct connection *pc, const struct packet_city_worklist *packet)
22247{
22248 const struct packet_city_worklist *real_packet = packet;
22249 int e;
22250#ifdef FREECIV_DELTA_PROTOCOL
22252 struct packet_city_worklist *old;
22253 bool differ;
22254 struct genhash **hash = pc->phs.sent + PACKET_CITY_WORKLIST;
22255#endif /* FREECIV_DELTA_PROTOCOL */
22257#ifdef FREECIV_JSON_CONNECTION
22258 struct plocation field_addr;
22259 {
22263 }
22264#endif /* FREECIV_JSON_CONNECTION */
22265
22266 log_packet_detailed("packet_city_worklist_100: sending info about ()");
22267
22268#ifdef FREECIV_DELTA_PROTOCOL
22269 if (NULL == *hash) {
22271 NULL, NULL, NULL, free);
22272 }
22273 BV_CLR_ALL(fields);
22274
22275 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22276 old = fc_malloc(sizeof(*old));
22277 *old = *real_packet;
22278 genhash_insert(*hash, old, old);
22279 memset(old, 0, sizeof(*old));
22280 }
22281 differ = (old->city_id != real_packet->city_id);
22282 if (differ) {
22283 BV_SET(fields, 0);
22284 }
22285
22286 differ = !are_worklists_equal(&old->worklist, &real_packet->worklist);
22287 if (differ) {
22288 BV_SET(fields, 1);
22289 }
22290
22291
22292#ifdef FREECIV_JSON_CONNECTION
22293 field_addr.name = "fields";
22294#endif /* FREECIV_JSON_CONNECTION */
22295 e = 0;
22296 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22297 if (e) {
22298 log_packet_detailed("fields bitvector error detected");
22299 }
22300
22301 if (BV_ISSET(fields, 0)) {
22302 log_packet_detailed(" field 'city_id' has changed");
22303#ifdef FREECIV_JSON_CONNECTION
22304 field_addr.name = "city_id";
22305#endif /* FREECIV_JSON_CONNECTION */
22306 e = 0;
22307 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22308 if (e) {
22309 log_packet_detailed("'city_id' field error detected");
22310 }
22311 }
22312 if (BV_ISSET(fields, 1)) {
22313 log_packet_detailed(" field 'worklist' has changed");
22314#ifdef FREECIV_JSON_CONNECTION
22315 field_addr.name = "worklist";
22316#endif /* FREECIV_JSON_CONNECTION */
22317 e = 0;
22318 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
22319 if (e) {
22320 log_packet_detailed("'worklist' field error detected");
22321 }
22322 }
22323
22324 *old = *real_packet;
22325#endif /* FREECIV_DELTA_PROTOCOL */
22326#ifndef FREECIV_DELTA_PROTOCOL
22327#ifdef FREECIV_JSON_CONNECTION
22328 field_addr.name = "city_id";
22329#endif /* FREECIV_JSON_CONNECTION */
22330 e = 0;
22331 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22332 if (e) {
22333 log_packet_detailed("'city_id' field error detected");
22334 }
22335#ifdef FREECIV_JSON_CONNECTION
22336 field_addr.name = "worklist";
22337#endif /* FREECIV_JSON_CONNECTION */
22338 e = 0;
22339 e |= DIO_PUT(worklist, &dout, &field_addr, &real_packet->worklist);
22340 if (e) {
22341 log_packet_detailed("'worklist' field error detected");
22342 }
22343
22344#endif
22346}
22347
22349{
22350 if (!pc->used) {
22351 log_error("WARNING: trying to send data to the closed connection %s",
22353 return -1;
22354 }
22355 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet != NULL, -1,
22356 "Handler for PACKET_CITY_WORKLIST not installed");
22357 return pc->phs.handlers->send[PACKET_CITY_WORKLIST].packet(pc, packet);
22358}
22359
22360int dsend_packet_city_worklist(struct connection *pc, int city_id, const struct worklist *worklist)
22361{
22362 struct packet_city_worklist packet, *real_packet = &packet;
22363
22365 worklist_copy(&real_packet->worklist, worklist);
22366
22368}
22369
22370#ifdef FREECIV_DELTA_PROTOCOL
22371#define hash_packet_city_make_specialist_100 hash_const
22372
22373#define cmp_packet_city_make_specialist_100 cmp_const
22374
22376#endif /* FREECIV_DELTA_PROTOCOL */
22377
22379{
22380#ifdef FREECIV_DELTA_PROTOCOL
22382 struct packet_city_make_specialist *old;
22383 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_SPECIALIST;
22384#endif /* FREECIV_DELTA_PROTOCOL */
22386#ifdef FREECIV_JSON_CONNECTION
22387 struct plocation field_addr;
22388 {
22392 }
22393#endif /* FREECIV_JSON_CONNECTION */
22394
22395#ifdef FREECIV_DELTA_PROTOCOL
22396#ifdef FREECIV_JSON_CONNECTION
22397 field_addr.name = "fields";
22398#endif /* FREECIV_JSON_CONNECTION */
22399 DIO_BV_GET(&din, &field_addr, fields);
22400
22401#else /* FREECIV_DELTA_PROTOCOL */
22402#ifdef FREECIV_JSON_CONNECTION
22403 field_addr.name = "city_id";
22404#endif /* FREECIV_JSON_CONNECTION */
22405 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22407 }
22408#ifdef FREECIV_JSON_CONNECTION
22409 field_addr.name = "tile_id";
22410#endif /* FREECIV_JSON_CONNECTION */
22411 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22413 }
22414#endif
22415 log_packet_detailed("packet_city_make_specialist_100: got info about ()");
22416
22417#ifdef FREECIV_DELTA_PROTOCOL
22418 if (NULL == *hash) {
22420 NULL, NULL, NULL, free);
22421 }
22422
22423 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22424 *real_packet = *old;
22425 } else {
22426 log_packet_detailed(" no old info");
22427 memset(real_packet, 0, sizeof(*real_packet));
22428 }
22429
22430 if (BV_ISSET(fields, 0)) {
22431 log_packet_detailed(" got field 'city_id'");
22432#ifdef FREECIV_JSON_CONNECTION
22433 field_addr.name = "city_id";
22434#endif /* FREECIV_JSON_CONNECTION */
22435 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22437 }
22438 }
22439 if (BV_ISSET(fields, 1)) {
22440 log_packet_detailed(" got field 'tile_id'");
22441#ifdef FREECIV_JSON_CONNECTION
22442 field_addr.name = "tile_id";
22443#endif /* FREECIV_JSON_CONNECTION */
22444 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22446 }
22447 }
22448
22449 if (NULL == old) {
22450 old = fc_malloc(sizeof(*old));
22451 *old = *real_packet;
22452 genhash_insert(*hash, old, old);
22453 } else {
22454 *old = *real_packet;
22455 }
22456
22457#endif /* FREECIV_DELTA_PROTOCOL */
22459}
22460
22462{
22463 const struct packet_city_make_specialist *real_packet = packet;
22464 int e;
22465#ifdef FREECIV_DELTA_PROTOCOL
22467 struct packet_city_make_specialist *old;
22468 bool differ;
22469 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_SPECIALIST;
22470#endif /* FREECIV_DELTA_PROTOCOL */
22472#ifdef FREECIV_JSON_CONNECTION
22473 struct plocation field_addr;
22474 {
22478 }
22479#endif /* FREECIV_JSON_CONNECTION */
22480
22481 log_packet_detailed("packet_city_make_specialist_100: sending info about ()");
22482
22483#ifdef FREECIV_DELTA_PROTOCOL
22484 if (NULL == *hash) {
22486 NULL, NULL, NULL, free);
22487 }
22488 BV_CLR_ALL(fields);
22489
22490 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22491 old = fc_malloc(sizeof(*old));
22492 *old = *real_packet;
22493 genhash_insert(*hash, old, old);
22494 memset(old, 0, sizeof(*old));
22495 }
22496 differ = (old->city_id != real_packet->city_id);
22497 if (differ) {
22498 BV_SET(fields, 0);
22499 }
22500
22501 differ = (old->tile_id != real_packet->tile_id);
22502 if (differ) {
22503 BV_SET(fields, 1);
22504 }
22505
22506
22507#ifdef FREECIV_JSON_CONNECTION
22508 field_addr.name = "fields";
22509#endif /* FREECIV_JSON_CONNECTION */
22510 e = 0;
22511 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22512 if (e) {
22513 log_packet_detailed("fields bitvector error detected");
22514 }
22515
22516 if (BV_ISSET(fields, 0)) {
22517 log_packet_detailed(" field 'city_id' has changed");
22518#ifdef FREECIV_JSON_CONNECTION
22519 field_addr.name = "city_id";
22520#endif /* FREECIV_JSON_CONNECTION */
22521 e = 0;
22522 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22523 if (e) {
22524 log_packet_detailed("'city_id' field error detected");
22525 }
22526 }
22527 if (BV_ISSET(fields, 1)) {
22528 log_packet_detailed(" field 'tile_id' has changed");
22529#ifdef FREECIV_JSON_CONNECTION
22530 field_addr.name = "tile_id";
22531#endif /* FREECIV_JSON_CONNECTION */
22532 e = 0;
22533 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22534 if (e) {
22535 log_packet_detailed("'tile_id' field error detected");
22536 }
22537 }
22538
22539 *old = *real_packet;
22540#endif /* FREECIV_DELTA_PROTOCOL */
22541#ifndef FREECIV_DELTA_PROTOCOL
22542#ifdef FREECIV_JSON_CONNECTION
22543 field_addr.name = "city_id";
22544#endif /* FREECIV_JSON_CONNECTION */
22545 e = 0;
22546 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22547 if (e) {
22548 log_packet_detailed("'city_id' field error detected");
22549 }
22550#ifdef FREECIV_JSON_CONNECTION
22551 field_addr.name = "tile_id";
22552#endif /* FREECIV_JSON_CONNECTION */
22553 e = 0;
22554 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22555 if (e) {
22556 log_packet_detailed("'tile_id' field error detected");
22557 }
22558
22559#endif
22561}
22562
22564{
22565 if (!pc->used) {
22566 log_error("WARNING: trying to send data to the closed connection %s",
22568 return -1;
22569 }
22570 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet != NULL, -1,
22571 "Handler for PACKET_CITY_MAKE_SPECIALIST not installed");
22572 return pc->phs.handlers->send[PACKET_CITY_MAKE_SPECIALIST].packet(pc, packet);
22573}
22574
22575int dsend_packet_city_make_specialist(struct connection *pc, int city_id, int tile_id)
22576{
22577 struct packet_city_make_specialist packet, *real_packet = &packet;
22578
22580 real_packet->tile_id = tile_id;
22581
22583}
22584
22585#ifdef FREECIV_DELTA_PROTOCOL
22586#define hash_packet_city_make_worker_100 hash_const
22587
22588#define cmp_packet_city_make_worker_100 cmp_const
22589
22591#endif /* FREECIV_DELTA_PROTOCOL */
22592
22594{
22595#ifdef FREECIV_DELTA_PROTOCOL
22597 struct packet_city_make_worker *old;
22598 struct genhash **hash = pc->phs.received + PACKET_CITY_MAKE_WORKER;
22599#endif /* FREECIV_DELTA_PROTOCOL */
22601#ifdef FREECIV_JSON_CONNECTION
22602 struct plocation field_addr;
22603 {
22607 }
22608#endif /* FREECIV_JSON_CONNECTION */
22609
22610#ifdef FREECIV_DELTA_PROTOCOL
22611#ifdef FREECIV_JSON_CONNECTION
22612 field_addr.name = "fields";
22613#endif /* FREECIV_JSON_CONNECTION */
22614 DIO_BV_GET(&din, &field_addr, fields);
22615
22616#else /* FREECIV_DELTA_PROTOCOL */
22617#ifdef FREECIV_JSON_CONNECTION
22618 field_addr.name = "city_id";
22619#endif /* FREECIV_JSON_CONNECTION */
22620 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22622 }
22623#ifdef FREECIV_JSON_CONNECTION
22624 field_addr.name = "tile_id";
22625#endif /* FREECIV_JSON_CONNECTION */
22626 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22628 }
22629#endif
22630 log_packet_detailed("packet_city_make_worker_100: got info about ()");
22631
22632#ifdef FREECIV_DELTA_PROTOCOL
22633 if (NULL == *hash) {
22635 NULL, NULL, NULL, free);
22636 }
22637
22638 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22639 *real_packet = *old;
22640 } else {
22641 log_packet_detailed(" no old info");
22642 memset(real_packet, 0, sizeof(*real_packet));
22643 }
22644
22645 if (BV_ISSET(fields, 0)) {
22646 log_packet_detailed(" got field 'city_id'");
22647#ifdef FREECIV_JSON_CONNECTION
22648 field_addr.name = "city_id";
22649#endif /* FREECIV_JSON_CONNECTION */
22650 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22652 }
22653 }
22654 if (BV_ISSET(fields, 1)) {
22655 log_packet_detailed(" got field 'tile_id'");
22656#ifdef FREECIV_JSON_CONNECTION
22657 field_addr.name = "tile_id";
22658#endif /* FREECIV_JSON_CONNECTION */
22659 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
22661 }
22662 }
22663
22664 if (NULL == old) {
22665 old = fc_malloc(sizeof(*old));
22666 *old = *real_packet;
22667 genhash_insert(*hash, old, old);
22668 } else {
22669 *old = *real_packet;
22670 }
22671
22672#endif /* FREECIV_DELTA_PROTOCOL */
22674}
22675
22677{
22678 const struct packet_city_make_worker *real_packet = packet;
22679 int e;
22680#ifdef FREECIV_DELTA_PROTOCOL
22682 struct packet_city_make_worker *old;
22683 bool differ;
22684 struct genhash **hash = pc->phs.sent + PACKET_CITY_MAKE_WORKER;
22685#endif /* FREECIV_DELTA_PROTOCOL */
22687#ifdef FREECIV_JSON_CONNECTION
22688 struct plocation field_addr;
22689 {
22693 }
22694#endif /* FREECIV_JSON_CONNECTION */
22695
22696 log_packet_detailed("packet_city_make_worker_100: sending info about ()");
22697
22698#ifdef FREECIV_DELTA_PROTOCOL
22699 if (NULL == *hash) {
22701 NULL, NULL, NULL, free);
22702 }
22703 BV_CLR_ALL(fields);
22704
22705 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22706 old = fc_malloc(sizeof(*old));
22707 *old = *real_packet;
22708 genhash_insert(*hash, old, old);
22709 memset(old, 0, sizeof(*old));
22710 }
22711 differ = (old->city_id != real_packet->city_id);
22712 if (differ) {
22713 BV_SET(fields, 0);
22714 }
22715
22716 differ = (old->tile_id != real_packet->tile_id);
22717 if (differ) {
22718 BV_SET(fields, 1);
22719 }
22720
22721
22722#ifdef FREECIV_JSON_CONNECTION
22723 field_addr.name = "fields";
22724#endif /* FREECIV_JSON_CONNECTION */
22725 e = 0;
22726 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22727 if (e) {
22728 log_packet_detailed("fields bitvector error detected");
22729 }
22730
22731 if (BV_ISSET(fields, 0)) {
22732 log_packet_detailed(" field 'city_id' has changed");
22733#ifdef FREECIV_JSON_CONNECTION
22734 field_addr.name = "city_id";
22735#endif /* FREECIV_JSON_CONNECTION */
22736 e = 0;
22737 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22738 if (e) {
22739 log_packet_detailed("'city_id' field error detected");
22740 }
22741 }
22742 if (BV_ISSET(fields, 1)) {
22743 log_packet_detailed(" field 'tile_id' has changed");
22744#ifdef FREECIV_JSON_CONNECTION
22745 field_addr.name = "tile_id";
22746#endif /* FREECIV_JSON_CONNECTION */
22747 e = 0;
22748 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22749 if (e) {
22750 log_packet_detailed("'tile_id' field error detected");
22751 }
22752 }
22753
22754 *old = *real_packet;
22755#endif /* FREECIV_DELTA_PROTOCOL */
22756#ifndef FREECIV_DELTA_PROTOCOL
22757#ifdef FREECIV_JSON_CONNECTION
22758 field_addr.name = "city_id";
22759#endif /* FREECIV_JSON_CONNECTION */
22760 e = 0;
22761 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22762 if (e) {
22763 log_packet_detailed("'city_id' field error detected");
22764 }
22765#ifdef FREECIV_JSON_CONNECTION
22766 field_addr.name = "tile_id";
22767#endif /* FREECIV_JSON_CONNECTION */
22768 e = 0;
22769 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
22770 if (e) {
22771 log_packet_detailed("'tile_id' field error detected");
22772 }
22773
22774#endif
22776}
22777
22779{
22780 if (!pc->used) {
22781 log_error("WARNING: trying to send data to the closed connection %s",
22783 return -1;
22784 }
22785 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet != NULL, -1,
22786 "Handler for PACKET_CITY_MAKE_WORKER not installed");
22787 return pc->phs.handlers->send[PACKET_CITY_MAKE_WORKER].packet(pc, packet);
22788}
22789
22790int dsend_packet_city_make_worker(struct connection *pc, int city_id, int tile_id)
22791{
22792 struct packet_city_make_worker packet, *real_packet = &packet;
22793
22795 real_packet->tile_id = tile_id;
22796
22798}
22799
22800#ifdef FREECIV_DELTA_PROTOCOL
22801#define hash_packet_city_change_specialist_100 hash_const
22802
22803#define cmp_packet_city_change_specialist_100 cmp_const
22804
22806#endif /* FREECIV_DELTA_PROTOCOL */
22807
22809{
22810#ifdef FREECIV_DELTA_PROTOCOL
22813 struct genhash **hash = pc->phs.received + PACKET_CITY_CHANGE_SPECIALIST;
22814#endif /* FREECIV_DELTA_PROTOCOL */
22816#ifdef FREECIV_JSON_CONNECTION
22817 struct plocation field_addr;
22818 {
22822 }
22823#endif /* FREECIV_JSON_CONNECTION */
22824
22825#ifdef FREECIV_DELTA_PROTOCOL
22826#ifdef FREECIV_JSON_CONNECTION
22827 field_addr.name = "fields";
22828#endif /* FREECIV_JSON_CONNECTION */
22829 DIO_BV_GET(&din, &field_addr, fields);
22830
22831#else /* FREECIV_DELTA_PROTOCOL */
22832#ifdef FREECIV_JSON_CONNECTION
22833 field_addr.name = "city_id";
22834#endif /* FREECIV_JSON_CONNECTION */
22835 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22837 }
22838#ifdef FREECIV_JSON_CONNECTION
22839 field_addr.name = "from";
22840#endif /* FREECIV_JSON_CONNECTION */
22841 {
22842 int readin;
22843
22844 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22846 }
22847 real_packet->from = readin;
22848 }
22849#ifdef FREECIV_JSON_CONNECTION
22850 field_addr.name = "to";
22851#endif /* FREECIV_JSON_CONNECTION */
22852 {
22853 int readin;
22854
22855 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22857 }
22858 real_packet->to = readin;
22859 }
22860#endif
22861 log_packet_detailed("packet_city_change_specialist_100: got info about ()");
22862
22863#ifdef FREECIV_DELTA_PROTOCOL
22864 if (NULL == *hash) {
22866 NULL, NULL, NULL, free);
22867 }
22868
22869 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
22870 *real_packet = *old;
22871 } else {
22872 log_packet_detailed(" no old info");
22873 memset(real_packet, 0, sizeof(*real_packet));
22874 }
22875
22876 if (BV_ISSET(fields, 0)) {
22877 log_packet_detailed(" got field 'city_id'");
22878#ifdef FREECIV_JSON_CONNECTION
22879 field_addr.name = "city_id";
22880#endif /* FREECIV_JSON_CONNECTION */
22881 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
22883 }
22884 }
22885 if (BV_ISSET(fields, 1)) {
22886 log_packet_detailed(" got field 'from'");
22887#ifdef FREECIV_JSON_CONNECTION
22888 field_addr.name = "from";
22889#endif /* FREECIV_JSON_CONNECTION */
22890 {
22891 int readin;
22892
22893 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22895 }
22896 real_packet->from = readin;
22897 }
22898 }
22899 if (BV_ISSET(fields, 2)) {
22900 log_packet_detailed(" got field 'to'");
22901#ifdef FREECIV_JSON_CONNECTION
22902 field_addr.name = "to";
22903#endif /* FREECIV_JSON_CONNECTION */
22904 {
22905 int readin;
22906
22907 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
22909 }
22910 real_packet->to = readin;
22911 }
22912 }
22913
22914 if (NULL == old) {
22915 old = fc_malloc(sizeof(*old));
22916 *old = *real_packet;
22917 genhash_insert(*hash, old, old);
22918 } else {
22919 *old = *real_packet;
22920 }
22921
22922#endif /* FREECIV_DELTA_PROTOCOL */
22924}
22925
22927{
22928 const struct packet_city_change_specialist *real_packet = packet;
22929 int e;
22930#ifdef FREECIV_DELTA_PROTOCOL
22933 bool differ;
22934 struct genhash **hash = pc->phs.sent + PACKET_CITY_CHANGE_SPECIALIST;
22935#endif /* FREECIV_DELTA_PROTOCOL */
22937#ifdef FREECIV_JSON_CONNECTION
22938 struct plocation field_addr;
22939 {
22943 }
22944#endif /* FREECIV_JSON_CONNECTION */
22945
22946 log_packet_detailed("packet_city_change_specialist_100: sending info about ()");
22947
22948#ifdef FREECIV_DELTA_PROTOCOL
22949 if (NULL == *hash) {
22951 NULL, NULL, NULL, free);
22952 }
22953 BV_CLR_ALL(fields);
22954
22955 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
22956 old = fc_malloc(sizeof(*old));
22957 *old = *real_packet;
22958 genhash_insert(*hash, old, old);
22959 memset(old, 0, sizeof(*old));
22960 }
22961 differ = (old->city_id != real_packet->city_id);
22962 if (differ) {
22963 BV_SET(fields, 0);
22964 }
22965
22966 differ = (old->from != real_packet->from);
22967 if (differ) {
22968 BV_SET(fields, 1);
22969 }
22970
22971 differ = (old->to != real_packet->to);
22972 if (differ) {
22973 BV_SET(fields, 2);
22974 }
22975
22976
22977#ifdef FREECIV_JSON_CONNECTION
22978 field_addr.name = "fields";
22979#endif /* FREECIV_JSON_CONNECTION */
22980 e = 0;
22981 e |= DIO_BV_PUT(&dout, &field_addr, fields);
22982 if (e) {
22983 log_packet_detailed("fields bitvector error detected");
22984 }
22985
22986 if (BV_ISSET(fields, 0)) {
22987 log_packet_detailed(" field 'city_id' has changed");
22988#ifdef FREECIV_JSON_CONNECTION
22989 field_addr.name = "city_id";
22990#endif /* FREECIV_JSON_CONNECTION */
22991 e = 0;
22992 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
22993 if (e) {
22994 log_packet_detailed("'city_id' field error detected");
22995 }
22996 }
22997 if (BV_ISSET(fields, 1)) {
22998 log_packet_detailed(" field 'from' has changed");
22999#ifdef FREECIV_JSON_CONNECTION
23000 field_addr.name = "from";
23001#endif /* FREECIV_JSON_CONNECTION */
23002 e = 0;
23003 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
23004 if (e) {
23005 log_packet_detailed("'from' field error detected");
23006 }
23007 }
23008 if (BV_ISSET(fields, 2)) {
23009 log_packet_detailed(" field 'to' has changed");
23010#ifdef FREECIV_JSON_CONNECTION
23011 field_addr.name = "to";
23012#endif /* FREECIV_JSON_CONNECTION */
23013 e = 0;
23014 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
23015 if (e) {
23016 log_packet_detailed("'to' field error detected");
23017 }
23018 }
23019
23020 *old = *real_packet;
23021#endif /* FREECIV_DELTA_PROTOCOL */
23022#ifndef FREECIV_DELTA_PROTOCOL
23023#ifdef FREECIV_JSON_CONNECTION
23024 field_addr.name = "city_id";
23025#endif /* FREECIV_JSON_CONNECTION */
23026 e = 0;
23027 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23028 if (e) {
23029 log_packet_detailed("'city_id' field error detected");
23030 }
23031#ifdef FREECIV_JSON_CONNECTION
23032 field_addr.name = "from";
23033#endif /* FREECIV_JSON_CONNECTION */
23034 e = 0;
23035 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->from);
23036 if (e) {
23037 log_packet_detailed("'from' field error detected");
23038 }
23039#ifdef FREECIV_JSON_CONNECTION
23040 field_addr.name = "to";
23041#endif /* FREECIV_JSON_CONNECTION */
23042 e = 0;
23043 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->to);
23044 if (e) {
23045 log_packet_detailed("'to' field error detected");
23046 }
23047
23048#endif
23050}
23051
23053{
23054 if (!pc->used) {
23055 log_error("WARNING: trying to send data to the closed connection %s",
23057 return -1;
23058 }
23059 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet != NULL, -1,
23060 "Handler for PACKET_CITY_CHANGE_SPECIALIST not installed");
23061 return pc->phs.handlers->send[PACKET_CITY_CHANGE_SPECIALIST].packet(pc, packet);
23062}
23063
23065{
23066 struct packet_city_change_specialist packet, *real_packet = &packet;
23067
23069 real_packet->from = from;
23070 real_packet->to = to;
23071
23073}
23074
23075#ifdef FREECIV_DELTA_PROTOCOL
23076#define hash_packet_city_rename_100 hash_const
23077
23078#define cmp_packet_city_rename_100 cmp_const
23079
23081#endif /* FREECIV_DELTA_PROTOCOL */
23082
23084{
23085#ifdef FREECIV_DELTA_PROTOCOL
23087 struct packet_city_rename *old;
23088 struct genhash **hash = pc->phs.received + PACKET_CITY_RENAME;
23089#endif /* FREECIV_DELTA_PROTOCOL */
23091#ifdef FREECIV_JSON_CONNECTION
23092 struct plocation field_addr;
23093 {
23097 }
23098#endif /* FREECIV_JSON_CONNECTION */
23099
23100#ifdef FREECIV_DELTA_PROTOCOL
23101#ifdef FREECIV_JSON_CONNECTION
23102 field_addr.name = "fields";
23103#endif /* FREECIV_JSON_CONNECTION */
23104 DIO_BV_GET(&din, &field_addr, fields);
23105
23106#else /* FREECIV_DELTA_PROTOCOL */
23107#ifdef FREECIV_JSON_CONNECTION
23108 field_addr.name = "city_id";
23109#endif /* FREECIV_JSON_CONNECTION */
23110 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23112 }
23113#ifdef FREECIV_JSON_CONNECTION
23114 field_addr.name = "name";
23115#endif /* FREECIV_JSON_CONNECTION */
23116 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23118 }
23119#endif
23120 log_packet_detailed("packet_city_rename_100: got info about ()");
23121
23122#ifdef FREECIV_DELTA_PROTOCOL
23123 if (NULL == *hash) {
23125 NULL, NULL, NULL, free);
23126 }
23127
23128 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23129 *real_packet = *old;
23130 } else {
23131 log_packet_detailed(" no old info");
23132 memset(real_packet, 0, sizeof(*real_packet));
23133 }
23134
23135 if (BV_ISSET(fields, 0)) {
23136 log_packet_detailed(" got field 'city_id'");
23137#ifdef FREECIV_JSON_CONNECTION
23138 field_addr.name = "city_id";
23139#endif /* FREECIV_JSON_CONNECTION */
23140 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23142 }
23143 }
23144 if (BV_ISSET(fields, 1)) {
23145 log_packet_detailed(" got field 'name'");
23146#ifdef FREECIV_JSON_CONNECTION
23147 field_addr.name = "name";
23148#endif /* FREECIV_JSON_CONNECTION */
23149 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23151 }
23152 }
23153
23154 if (NULL == old) {
23155 old = fc_malloc(sizeof(*old));
23156 *old = *real_packet;
23157 genhash_insert(*hash, old, old);
23158 } else {
23159 *old = *real_packet;
23160 }
23161
23162#endif /* FREECIV_DELTA_PROTOCOL */
23164}
23165
23166static int send_packet_city_rename_100(struct connection *pc, const struct packet_city_rename *packet)
23167{
23168 const struct packet_city_rename *real_packet = packet;
23169 int e;
23170#ifdef FREECIV_DELTA_PROTOCOL
23172 struct packet_city_rename *old;
23173 bool differ;
23174 struct genhash **hash = pc->phs.sent + PACKET_CITY_RENAME;
23175#endif /* FREECIV_DELTA_PROTOCOL */
23177#ifdef FREECIV_JSON_CONNECTION
23178 struct plocation field_addr;
23179 {
23183 }
23184#endif /* FREECIV_JSON_CONNECTION */
23185
23186 log_packet_detailed("packet_city_rename_100: sending info about ()");
23187
23188#ifdef FREECIV_DELTA_PROTOCOL
23189 if (NULL == *hash) {
23191 NULL, NULL, NULL, free);
23192 }
23193 BV_CLR_ALL(fields);
23194
23195 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23196 old = fc_malloc(sizeof(*old));
23197 *old = *real_packet;
23198 genhash_insert(*hash, old, old);
23199 memset(old, 0, sizeof(*old));
23200 }
23201 differ = (old->city_id != real_packet->city_id);
23202 if (differ) {
23203 BV_SET(fields, 0);
23204 }
23205
23206 differ = (strcmp(old->name, real_packet->name) != 0);
23207 if (differ) {
23208 BV_SET(fields, 1);
23209 }
23210
23211
23212#ifdef FREECIV_JSON_CONNECTION
23213 field_addr.name = "fields";
23214#endif /* FREECIV_JSON_CONNECTION */
23215 e = 0;
23216 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23217 if (e) {
23218 log_packet_detailed("fields bitvector error detected");
23219 }
23220
23221 if (BV_ISSET(fields, 0)) {
23222 log_packet_detailed(" field 'city_id' has changed");
23223#ifdef FREECIV_JSON_CONNECTION
23224 field_addr.name = "city_id";
23225#endif /* FREECIV_JSON_CONNECTION */
23226 e = 0;
23227 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23228 if (e) {
23229 log_packet_detailed("'city_id' field error detected");
23230 }
23231 }
23232 if (BV_ISSET(fields, 1)) {
23233 log_packet_detailed(" field 'name' has changed");
23234#ifdef FREECIV_JSON_CONNECTION
23235 field_addr.name = "name";
23236#endif /* FREECIV_JSON_CONNECTION */
23237 e = 0;
23238 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23239 if (e) {
23240 log_packet_detailed("'name' field error detected");
23241 }
23242 }
23243
23244 *old = *real_packet;
23245#endif /* FREECIV_DELTA_PROTOCOL */
23246#ifndef FREECIV_DELTA_PROTOCOL
23247#ifdef FREECIV_JSON_CONNECTION
23248 field_addr.name = "city_id";
23249#endif /* FREECIV_JSON_CONNECTION */
23250 e = 0;
23251 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23252 if (e) {
23253 log_packet_detailed("'city_id' field error detected");
23254 }
23255#ifdef FREECIV_JSON_CONNECTION
23256 field_addr.name = "name";
23257#endif /* FREECIV_JSON_CONNECTION */
23258 e = 0;
23259 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
23260 if (e) {
23261 log_packet_detailed("'name' field error detected");
23262 }
23263
23264#endif
23266}
23267
23269{
23270 if (!pc->used) {
23271 log_error("WARNING: trying to send data to the closed connection %s",
23273 return -1;
23274 }
23275 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RENAME].packet != NULL, -1,
23276 "Handler for PACKET_CITY_RENAME not installed");
23277 return pc->phs.handlers->send[PACKET_CITY_RENAME].packet(pc, packet);
23278}
23279
23280int dsend_packet_city_rename(struct connection *pc, int city_id, const char *name)
23281{
23282 struct packet_city_rename packet, *real_packet = &packet;
23283
23285 sz_strlcpy(real_packet->name, name);
23286
23288}
23289
23290#ifdef FREECIV_DELTA_PROTOCOL
23291#define hash_packet_city_options_req_100 hash_const
23292
23293#define cmp_packet_city_options_req_100 cmp_const
23294
23296#endif /* FREECIV_DELTA_PROTOCOL */
23297
23299{
23300#ifdef FREECIV_DELTA_PROTOCOL
23302 struct packet_city_options_req *old;
23303 struct genhash **hash = pc->phs.received + PACKET_CITY_OPTIONS_REQ;
23304#endif /* FREECIV_DELTA_PROTOCOL */
23306#ifdef FREECIV_JSON_CONNECTION
23307 struct plocation field_addr;
23308 {
23312 }
23313#endif /* FREECIV_JSON_CONNECTION */
23314
23315#ifdef FREECIV_DELTA_PROTOCOL
23316#ifdef FREECIV_JSON_CONNECTION
23317 field_addr.name = "fields";
23318#endif /* FREECIV_JSON_CONNECTION */
23319 DIO_BV_GET(&din, &field_addr, fields);
23320
23321#else /* FREECIV_DELTA_PROTOCOL */
23322#ifdef FREECIV_JSON_CONNECTION
23323 field_addr.name = "city_id";
23324#endif /* FREECIV_JSON_CONNECTION */
23325 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23327 }
23328#ifdef FREECIV_JSON_CONNECTION
23329 field_addr.name = "options";
23330#endif /* FREECIV_JSON_CONNECTION */
23331 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
23333 }
23334#ifdef FREECIV_JSON_CONNECTION
23335 field_addr.name = "wl_cb";
23336#endif /* FREECIV_JSON_CONNECTION */
23337 {
23338 int readin;
23339
23340 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
23342 }
23343 real_packet->wl_cb = readin;
23344 }
23345#endif
23346 log_packet_detailed("packet_city_options_req_100: got info about ()");
23347
23348#ifdef FREECIV_DELTA_PROTOCOL
23349 if (NULL == *hash) {
23351 NULL, NULL, NULL, free);
23352 }
23353
23354 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23355 *real_packet = *old;
23356 } else {
23357 log_packet_detailed(" no old info");
23358 memset(real_packet, 0, sizeof(*real_packet));
23359 }
23360
23361 if (BV_ISSET(fields, 0)) {
23362 log_packet_detailed(" got field 'city_id'");
23363#ifdef FREECIV_JSON_CONNECTION
23364 field_addr.name = "city_id";
23365#endif /* FREECIV_JSON_CONNECTION */
23366 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23368 }
23369 }
23370 if (BV_ISSET(fields, 1)) {
23371 log_packet_detailed(" got field 'options'");
23372#ifdef FREECIV_JSON_CONNECTION
23373 field_addr.name = "options";
23374#endif /* FREECIV_JSON_CONNECTION */
23375 if (!DIO_BV_GET(&din, &field_addr, real_packet->options)) {
23377 }
23378 }
23379 if (BV_ISSET(fields, 2)) {
23380 log_packet_detailed(" got field 'wl_cb'");
23381#ifdef FREECIV_JSON_CONNECTION
23382 field_addr.name = "wl_cb";
23383#endif /* FREECIV_JSON_CONNECTION */
23384 {
23385 int readin;
23386
23387 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
23389 }
23390 real_packet->wl_cb = readin;
23391 }
23392 }
23393
23394 if (NULL == old) {
23395 old = fc_malloc(sizeof(*old));
23396 *old = *real_packet;
23397 genhash_insert(*hash, old, old);
23398 } else {
23399 *old = *real_packet;
23400 }
23401
23402#endif /* FREECIV_DELTA_PROTOCOL */
23404}
23405
23407{
23408 const struct packet_city_options_req *real_packet = packet;
23409 int e;
23410#ifdef FREECIV_DELTA_PROTOCOL
23412 struct packet_city_options_req *old;
23413 bool differ;
23414 struct genhash **hash = pc->phs.sent + PACKET_CITY_OPTIONS_REQ;
23415#endif /* FREECIV_DELTA_PROTOCOL */
23417#ifdef FREECIV_JSON_CONNECTION
23418 struct plocation field_addr;
23419 {
23423 }
23424#endif /* FREECIV_JSON_CONNECTION */
23425
23426 log_packet_detailed("packet_city_options_req_100: sending info about ()");
23427
23428#ifdef FREECIV_DELTA_PROTOCOL
23429 if (NULL == *hash) {
23431 NULL, NULL, NULL, free);
23432 }
23433 BV_CLR_ALL(fields);
23434
23435 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23436 old = fc_malloc(sizeof(*old));
23437 *old = *real_packet;
23438 genhash_insert(*hash, old, old);
23439 memset(old, 0, sizeof(*old));
23440 }
23441 differ = (old->city_id != real_packet->city_id);
23442 if (differ) {
23443 BV_SET(fields, 0);
23444 }
23445
23446 differ = !BV_ARE_EQUAL(old->options, real_packet->options);
23447 if (differ) {
23448 BV_SET(fields, 1);
23449 }
23450
23451 differ = (old->wl_cb != real_packet->wl_cb);
23452 if (differ) {
23453 BV_SET(fields, 2);
23454 }
23455
23456
23457#ifdef FREECIV_JSON_CONNECTION
23458 field_addr.name = "fields";
23459#endif /* FREECIV_JSON_CONNECTION */
23460 e = 0;
23461 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23462 if (e) {
23463 log_packet_detailed("fields bitvector error detected");
23464 }
23465
23466 if (BV_ISSET(fields, 0)) {
23467 log_packet_detailed(" field 'city_id' has changed");
23468#ifdef FREECIV_JSON_CONNECTION
23469 field_addr.name = "city_id";
23470#endif /* FREECIV_JSON_CONNECTION */
23471 e = 0;
23472 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23473 if (e) {
23474 log_packet_detailed("'city_id' field error detected");
23475 }
23476 }
23477 if (BV_ISSET(fields, 1)) {
23478 log_packet_detailed(" field 'options' has changed");
23479#ifdef FREECIV_JSON_CONNECTION
23480 field_addr.name = "options";
23481#endif /* FREECIV_JSON_CONNECTION */
23482 e = 0;
23483 e |= DIO_BV_PUT(&dout, &field_addr, packet->options);
23484 if (e) {
23485 log_packet_detailed("'options' field error detected");
23486 }
23487 }
23488 if (BV_ISSET(fields, 2)) {
23489 log_packet_detailed(" field 'wl_cb' has changed");
23490#ifdef FREECIV_JSON_CONNECTION
23491 field_addr.name = "wl_cb";
23492#endif /* FREECIV_JSON_CONNECTION */
23493 e = 0;
23494 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
23495 if (e) {
23496 log_packet_detailed("'wl_cb' field error detected");
23497 }
23498 }
23499
23500 *old = *real_packet;
23501#endif /* FREECIV_DELTA_PROTOCOL */
23502#ifndef FREECIV_DELTA_PROTOCOL
23503#ifdef FREECIV_JSON_CONNECTION
23504 field_addr.name = "city_id";
23505#endif /* FREECIV_JSON_CONNECTION */
23506 e = 0;
23507 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23508 if (e) {
23509 log_packet_detailed("'city_id' field error detected");
23510 }
23511#ifdef FREECIV_JSON_CONNECTION
23512 field_addr.name = "options";
23513#endif /* FREECIV_JSON_CONNECTION */
23514 e = 0;
23515 e |= DIO_BV_PUT(&dout, &field_addr, packet->options);
23516 if (e) {
23517 log_packet_detailed("'options' field error detected");
23518 }
23519#ifdef FREECIV_JSON_CONNECTION
23520 field_addr.name = "wl_cb";
23521#endif /* FREECIV_JSON_CONNECTION */
23522 e = 0;
23523 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wl_cb);
23524 if (e) {
23525 log_packet_detailed("'wl_cb' field error detected");
23526 }
23527
23528#endif
23530}
23531
23533{
23534 if (!pc->used) {
23535 log_error("WARNING: trying to send data to the closed connection %s",
23537 return -1;
23538 }
23539 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet != NULL, -1,
23540 "Handler for PACKET_CITY_OPTIONS_REQ not installed");
23541 return pc->phs.handlers->send[PACKET_CITY_OPTIONS_REQ].packet(pc, packet);
23542}
23543
23545{
23546 struct packet_city_options_req packet, *real_packet = &packet;
23547
23549 real_packet->options = options;
23550 real_packet->wl_cb = wl_cb;
23551
23553}
23554
23555#ifdef FREECIV_DELTA_PROTOCOL
23556#define hash_packet_city_refresh_100 hash_const
23557
23558#define cmp_packet_city_refresh_100 cmp_const
23559
23561#endif /* FREECIV_DELTA_PROTOCOL */
23562
23564{
23565#ifdef FREECIV_DELTA_PROTOCOL
23567 struct packet_city_refresh *old;
23568 struct genhash **hash = pc->phs.received + PACKET_CITY_REFRESH;
23569#endif /* FREECIV_DELTA_PROTOCOL */
23571#ifdef FREECIV_JSON_CONNECTION
23572 struct plocation field_addr;
23573 {
23577 }
23578#endif /* FREECIV_JSON_CONNECTION */
23579
23580#ifdef FREECIV_DELTA_PROTOCOL
23581#ifdef FREECIV_JSON_CONNECTION
23582 field_addr.name = "fields";
23583#endif /* FREECIV_JSON_CONNECTION */
23584 DIO_BV_GET(&din, &field_addr, fields);
23585
23586#else /* FREECIV_DELTA_PROTOCOL */
23587#ifdef FREECIV_JSON_CONNECTION
23588 field_addr.name = "city_id";
23589#endif /* FREECIV_JSON_CONNECTION */
23590 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23592 }
23593#endif
23594 log_packet_detailed("packet_city_refresh_100: got info about ()");
23595
23596#ifdef FREECIV_DELTA_PROTOCOL
23597 if (NULL == *hash) {
23599 NULL, NULL, NULL, free);
23600 }
23601
23602 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23603 *real_packet = *old;
23604 } else {
23605 log_packet_detailed(" no old info");
23606 memset(real_packet, 0, sizeof(*real_packet));
23607 }
23608
23609 if (BV_ISSET(fields, 0)) {
23610 log_packet_detailed(" got field 'city_id'");
23611#ifdef FREECIV_JSON_CONNECTION
23612 field_addr.name = "city_id";
23613#endif /* FREECIV_JSON_CONNECTION */
23614 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
23616 }
23617 }
23618
23619 if (NULL == old) {
23620 old = fc_malloc(sizeof(*old));
23621 *old = *real_packet;
23622 genhash_insert(*hash, old, old);
23623 } else {
23624 *old = *real_packet;
23625 }
23626
23627#endif /* FREECIV_DELTA_PROTOCOL */
23629}
23630
23631static int send_packet_city_refresh_100(struct connection *pc, const struct packet_city_refresh *packet)
23632{
23633 const struct packet_city_refresh *real_packet = packet;
23634 int e;
23635#ifdef FREECIV_DELTA_PROTOCOL
23637 struct packet_city_refresh *old;
23638 bool differ;
23639 struct genhash **hash = pc->phs.sent + PACKET_CITY_REFRESH;
23640#endif /* FREECIV_DELTA_PROTOCOL */
23642#ifdef FREECIV_JSON_CONNECTION
23643 struct plocation field_addr;
23644 {
23648 }
23649#endif /* FREECIV_JSON_CONNECTION */
23650
23651 log_packet_detailed("packet_city_refresh_100: sending info about ()");
23652
23653#ifdef FREECIV_DELTA_PROTOCOL
23654 if (NULL == *hash) {
23656 NULL, NULL, NULL, free);
23657 }
23658 BV_CLR_ALL(fields);
23659
23660 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23661 old = fc_malloc(sizeof(*old));
23662 *old = *real_packet;
23663 genhash_insert(*hash, old, old);
23664 memset(old, 0, sizeof(*old));
23665 }
23666 differ = (old->city_id != real_packet->city_id);
23667 if (differ) {
23668 BV_SET(fields, 0);
23669 }
23670
23671
23672#ifdef FREECIV_JSON_CONNECTION
23673 field_addr.name = "fields";
23674#endif /* FREECIV_JSON_CONNECTION */
23675 e = 0;
23676 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23677 if (e) {
23678 log_packet_detailed("fields bitvector error detected");
23679 }
23680
23681 if (BV_ISSET(fields, 0)) {
23682 log_packet_detailed(" field 'city_id' has changed");
23683#ifdef FREECIV_JSON_CONNECTION
23684 field_addr.name = "city_id";
23685#endif /* FREECIV_JSON_CONNECTION */
23686 e = 0;
23687 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23688 if (e) {
23689 log_packet_detailed("'city_id' field error detected");
23690 }
23691 }
23692
23693 *old = *real_packet;
23694#endif /* FREECIV_DELTA_PROTOCOL */
23695#ifndef FREECIV_DELTA_PROTOCOL
23696#ifdef FREECIV_JSON_CONNECTION
23697 field_addr.name = "city_id";
23698#endif /* FREECIV_JSON_CONNECTION */
23699 e = 0;
23700 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
23701 if (e) {
23702 log_packet_detailed("'city_id' field error detected");
23703 }
23704
23705#endif
23707}
23708
23710{
23711 if (!pc->used) {
23712 log_error("WARNING: trying to send data to the closed connection %s",
23714 return -1;
23715 }
23716 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_REFRESH].packet != NULL, -1,
23717 "Handler for PACKET_CITY_REFRESH not installed");
23718 return pc->phs.handlers->send[PACKET_CITY_REFRESH].packet(pc, packet);
23719}
23720
23721int dsend_packet_city_refresh(struct connection *pc, int city_id)
23722{
23723 struct packet_city_refresh packet, *real_packet = &packet;
23724
23726
23728}
23729
23730#ifdef FREECIV_DELTA_PROTOCOL
23731#define hash_packet_city_name_suggestion_req_100 hash_const
23732
23733#define cmp_packet_city_name_suggestion_req_100 cmp_const
23734
23736#endif /* FREECIV_DELTA_PROTOCOL */
23737
23739{
23740#ifdef FREECIV_DELTA_PROTOCOL
23743 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_REQ;
23744#endif /* FREECIV_DELTA_PROTOCOL */
23746#ifdef FREECIV_JSON_CONNECTION
23747 struct plocation field_addr;
23748 {
23752 }
23753#endif /* FREECIV_JSON_CONNECTION */
23754
23755#ifdef FREECIV_DELTA_PROTOCOL
23756#ifdef FREECIV_JSON_CONNECTION
23757 field_addr.name = "fields";
23758#endif /* FREECIV_JSON_CONNECTION */
23759 DIO_BV_GET(&din, &field_addr, fields);
23760
23761#else /* FREECIV_DELTA_PROTOCOL */
23762#ifdef FREECIV_JSON_CONNECTION
23763 field_addr.name = "unit_id";
23764#endif /* FREECIV_JSON_CONNECTION */
23765 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23767 }
23768#endif
23769 log_packet_detailed("packet_city_name_suggestion_req_100: got info about ()");
23770
23771#ifdef FREECIV_DELTA_PROTOCOL
23772 if (NULL == *hash) {
23774 NULL, NULL, NULL, free);
23775 }
23776
23777 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23778 *real_packet = *old;
23779 } else {
23780 log_packet_detailed(" no old info");
23781 memset(real_packet, 0, sizeof(*real_packet));
23782 }
23783
23784 if (BV_ISSET(fields, 0)) {
23785 log_packet_detailed(" got field 'unit_id'");
23786#ifdef FREECIV_JSON_CONNECTION
23787 field_addr.name = "unit_id";
23788#endif /* FREECIV_JSON_CONNECTION */
23789 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23791 }
23792 }
23793
23794 if (NULL == old) {
23795 old = fc_malloc(sizeof(*old));
23796 *old = *real_packet;
23797 genhash_insert(*hash, old, old);
23798 } else {
23799 *old = *real_packet;
23800 }
23801
23802#endif /* FREECIV_DELTA_PROTOCOL */
23804}
23805
23807{
23808 const struct packet_city_name_suggestion_req *real_packet = packet;
23809 int e;
23810#ifdef FREECIV_DELTA_PROTOCOL
23813 bool differ;
23814 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_REQ;
23815#endif /* FREECIV_DELTA_PROTOCOL */
23817#ifdef FREECIV_JSON_CONNECTION
23818 struct plocation field_addr;
23819 {
23823 }
23824#endif /* FREECIV_JSON_CONNECTION */
23825
23826 log_packet_detailed("packet_city_name_suggestion_req_100: sending info about ()");
23827
23828#ifdef FREECIV_DELTA_PROTOCOL
23829 if (NULL == *hash) {
23831 NULL, NULL, NULL, free);
23832 }
23833 BV_CLR_ALL(fields);
23834
23835 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
23836 old = fc_malloc(sizeof(*old));
23837 *old = *real_packet;
23838 genhash_insert(*hash, old, old);
23839 memset(old, 0, sizeof(*old));
23840 }
23841 differ = (old->unit_id != real_packet->unit_id);
23842 if (differ) {
23843 BV_SET(fields, 0);
23844 }
23845
23846
23847#ifdef FREECIV_JSON_CONNECTION
23848 field_addr.name = "fields";
23849#endif /* FREECIV_JSON_CONNECTION */
23850 e = 0;
23851 e |= DIO_BV_PUT(&dout, &field_addr, fields);
23852 if (e) {
23853 log_packet_detailed("fields bitvector error detected");
23854 }
23855
23856 if (BV_ISSET(fields, 0)) {
23857 log_packet_detailed(" field 'unit_id' has changed");
23858#ifdef FREECIV_JSON_CONNECTION
23859 field_addr.name = "unit_id";
23860#endif /* FREECIV_JSON_CONNECTION */
23861 e = 0;
23862 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23863 if (e) {
23864 log_packet_detailed("'unit_id' field error detected");
23865 }
23866 }
23867
23868 *old = *real_packet;
23869#endif /* FREECIV_DELTA_PROTOCOL */
23870#ifndef FREECIV_DELTA_PROTOCOL
23871#ifdef FREECIV_JSON_CONNECTION
23872 field_addr.name = "unit_id";
23873#endif /* FREECIV_JSON_CONNECTION */
23874 e = 0;
23875 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
23876 if (e) {
23877 log_packet_detailed("'unit_id' field error detected");
23878 }
23879
23880#endif
23882}
23883
23885{
23886 if (!pc->used) {
23887 log_error("WARNING: trying to send data to the closed connection %s",
23889 return -1;
23890 }
23891 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet != NULL, -1,
23892 "Handler for PACKET_CITY_NAME_SUGGESTION_REQ not installed");
23893 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_REQ].packet(pc, packet);
23894}
23895
23897{
23898 struct packet_city_name_suggestion_req packet, *real_packet = &packet;
23899
23901
23903}
23904
23905#ifdef FREECIV_DELTA_PROTOCOL
23906#define hash_packet_city_name_suggestion_info_100 hash_const
23907
23908#define cmp_packet_city_name_suggestion_info_100 cmp_const
23909
23911#endif /* FREECIV_DELTA_PROTOCOL */
23912
23914{
23915#ifdef FREECIV_DELTA_PROTOCOL
23918 struct genhash **hash = pc->phs.received + PACKET_CITY_NAME_SUGGESTION_INFO;
23919#endif /* FREECIV_DELTA_PROTOCOL */
23921#ifdef FREECIV_JSON_CONNECTION
23922 struct plocation field_addr;
23923 {
23927 }
23928#endif /* FREECIV_JSON_CONNECTION */
23929
23930#ifdef FREECIV_DELTA_PROTOCOL
23931#ifdef FREECIV_JSON_CONNECTION
23932 field_addr.name = "fields";
23933#endif /* FREECIV_JSON_CONNECTION */
23934 DIO_BV_GET(&din, &field_addr, fields);
23935
23936#else /* FREECIV_DELTA_PROTOCOL */
23937#ifdef FREECIV_JSON_CONNECTION
23938 field_addr.name = "unit_id";
23939#endif /* FREECIV_JSON_CONNECTION */
23940 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23942 }
23943#ifdef FREECIV_JSON_CONNECTION
23944 field_addr.name = "name";
23945#endif /* FREECIV_JSON_CONNECTION */
23946 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23948 }
23949#endif
23950 log_packet_detailed("packet_city_name_suggestion_info_100: got info about ()");
23951
23952#ifdef FREECIV_DELTA_PROTOCOL
23953 if (NULL == *hash) {
23955 NULL, NULL, NULL, free);
23956 }
23957
23958 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
23959 *real_packet = *old;
23960 } else {
23961 log_packet_detailed(" no old info");
23962 memset(real_packet, 0, sizeof(*real_packet));
23963 }
23964
23965 if (BV_ISSET(fields, 0)) {
23966 log_packet_detailed(" got field 'unit_id'");
23967#ifdef FREECIV_JSON_CONNECTION
23968 field_addr.name = "unit_id";
23969#endif /* FREECIV_JSON_CONNECTION */
23970 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
23972 }
23973 }
23974 if (BV_ISSET(fields, 1)) {
23975 log_packet_detailed(" got field 'name'");
23976#ifdef FREECIV_JSON_CONNECTION
23977 field_addr.name = "name";
23978#endif /* FREECIV_JSON_CONNECTION */
23979 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
23981 }
23982 }
23983
23984 if (NULL == old) {
23985 old = fc_malloc(sizeof(*old));
23986 *old = *real_packet;
23987 genhash_insert(*hash, old, old);
23988 } else {
23989 *old = *real_packet;
23990 }
23991
23992#endif /* FREECIV_DELTA_PROTOCOL */
23994}
23995
23997{
23998 const struct packet_city_name_suggestion_info *real_packet = packet;
23999 int e;
24000#ifdef FREECIV_DELTA_PROTOCOL
24003 bool differ;
24004 struct genhash **hash = pc->phs.sent + PACKET_CITY_NAME_SUGGESTION_INFO;
24005#endif /* FREECIV_DELTA_PROTOCOL */
24007#ifdef FREECIV_JSON_CONNECTION
24008 struct plocation field_addr;
24009 {
24013 }
24014#endif /* FREECIV_JSON_CONNECTION */
24015
24016 log_packet_detailed("packet_city_name_suggestion_info_100: sending info about ()");
24017
24018#ifdef FREECIV_DELTA_PROTOCOL
24019 if (NULL == *hash) {
24021 NULL, NULL, NULL, free);
24022 }
24023 BV_CLR_ALL(fields);
24024
24025 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24026 old = fc_malloc(sizeof(*old));
24027 *old = *real_packet;
24028 genhash_insert(*hash, old, old);
24029 memset(old, 0, sizeof(*old));
24030 }
24031 differ = (old->unit_id != real_packet->unit_id);
24032 if (differ) {
24033 BV_SET(fields, 0);
24034 }
24035
24036 differ = (strcmp(old->name, real_packet->name) != 0);
24037 if (differ) {
24038 BV_SET(fields, 1);
24039 }
24040
24041
24042#ifdef FREECIV_JSON_CONNECTION
24043 field_addr.name = "fields";
24044#endif /* FREECIV_JSON_CONNECTION */
24045 e = 0;
24046 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24047 if (e) {
24048 log_packet_detailed("fields bitvector error detected");
24049 }
24050
24051 if (BV_ISSET(fields, 0)) {
24052 log_packet_detailed(" field 'unit_id' has changed");
24053#ifdef FREECIV_JSON_CONNECTION
24054 field_addr.name = "unit_id";
24055#endif /* FREECIV_JSON_CONNECTION */
24056 e = 0;
24057 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
24058 if (e) {
24059 log_packet_detailed("'unit_id' field error detected");
24060 }
24061 }
24062 if (BV_ISSET(fields, 1)) {
24063 log_packet_detailed(" field 'name' has changed");
24064#ifdef FREECIV_JSON_CONNECTION
24065 field_addr.name = "name";
24066#endif /* FREECIV_JSON_CONNECTION */
24067 e = 0;
24068 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
24069 if (e) {
24070 log_packet_detailed("'name' field error detected");
24071 }
24072 }
24073
24074 *old = *real_packet;
24075#endif /* FREECIV_DELTA_PROTOCOL */
24076#ifndef FREECIV_DELTA_PROTOCOL
24077#ifdef FREECIV_JSON_CONNECTION
24078 field_addr.name = "unit_id";
24079#endif /* FREECIV_JSON_CONNECTION */
24080 e = 0;
24081 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
24082 if (e) {
24083 log_packet_detailed("'unit_id' field error detected");
24084 }
24085#ifdef FREECIV_JSON_CONNECTION
24086 field_addr.name = "name";
24087#endif /* FREECIV_JSON_CONNECTION */
24088 e = 0;
24089 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
24090 if (e) {
24091 log_packet_detailed("'name' field error detected");
24092 }
24093
24094#endif
24096}
24097
24099{
24100 if (!pc->used) {
24101 log_error("WARNING: trying to send data to the closed connection %s",
24103 return -1;
24104 }
24105 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet != NULL, -1,
24106 "Handler for PACKET_CITY_NAME_SUGGESTION_INFO not installed");
24107 return pc->phs.handlers->send[PACKET_CITY_NAME_SUGGESTION_INFO].packet(pc, packet);
24108}
24109
24116
24117int dsend_packet_city_name_suggestion_info(struct connection *pc, int unit_id, const char *name)
24118{
24119 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
24120
24122 sz_strlcpy(real_packet->name, name);
24123
24125}
24126
24128{
24129 struct packet_city_name_suggestion_info packet, *real_packet = &packet;
24130
24132 sz_strlcpy(real_packet->name, name);
24133
24135}
24136
24137#ifdef FREECIV_DELTA_PROTOCOL
24138#define hash_packet_city_sabotage_list_100 hash_const
24139
24140#define cmp_packet_city_sabotage_list_100 cmp_const
24141
24143#endif /* FREECIV_DELTA_PROTOCOL */
24144
24146{
24147#ifdef FREECIV_DELTA_PROTOCOL
24149 struct packet_city_sabotage_list *old;
24150 struct genhash **hash = pc->phs.received + PACKET_CITY_SABOTAGE_LIST;
24151#endif /* FREECIV_DELTA_PROTOCOL */
24153#ifdef FREECIV_JSON_CONNECTION
24154 struct plocation field_addr;
24155 {
24159 }
24160#endif /* FREECIV_JSON_CONNECTION */
24161
24162#ifdef FREECIV_DELTA_PROTOCOL
24163#ifdef FREECIV_JSON_CONNECTION
24164 field_addr.name = "fields";
24165#endif /* FREECIV_JSON_CONNECTION */
24166 DIO_BV_GET(&din, &field_addr, fields);
24167
24168#else /* FREECIV_DELTA_PROTOCOL */
24169#ifdef FREECIV_JSON_CONNECTION
24170 field_addr.name = "actor_id";
24171#endif /* FREECIV_JSON_CONNECTION */
24172 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
24174 }
24175#ifdef FREECIV_JSON_CONNECTION
24176 field_addr.name = "city_id";
24177#endif /* FREECIV_JSON_CONNECTION */
24178 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24180 }
24181#ifdef FREECIV_JSON_CONNECTION
24182 field_addr.name = "improvements";
24183#endif /* FREECIV_JSON_CONNECTION */
24184 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
24185 RECEIVE_PACKET_FIELD_ERROR(improvements);
24186 }
24187#ifdef FREECIV_JSON_CONNECTION
24188 field_addr.name = "act_id";
24189#endif /* FREECIV_JSON_CONNECTION */
24190 {
24191 int readin;
24192
24193 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24195 }
24196 real_packet->act_id = readin;
24197 }
24198#ifdef FREECIV_JSON_CONNECTION
24199 field_addr.name = "request_kind";
24200#endif /* FREECIV_JSON_CONNECTION */
24201 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
24202 RECEIVE_PACKET_FIELD_ERROR(request_kind);
24203 }
24204#endif
24205 log_packet_detailed("packet_city_sabotage_list_100: got info about ()");
24206
24207#ifdef FREECIV_DELTA_PROTOCOL
24208 if (NULL == *hash) {
24210 NULL, NULL, NULL, free);
24211 }
24212
24213 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24214 *real_packet = *old;
24215 } else {
24216 log_packet_detailed(" no old info");
24217 memset(real_packet, 0, sizeof(*real_packet));
24218 }
24219
24220 if (BV_ISSET(fields, 0)) {
24221 log_packet_detailed(" got field 'actor_id'");
24222#ifdef FREECIV_JSON_CONNECTION
24223 field_addr.name = "actor_id";
24224#endif /* FREECIV_JSON_CONNECTION */
24225 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
24227 }
24228 }
24229 if (BV_ISSET(fields, 1)) {
24230 log_packet_detailed(" got field 'city_id'");
24231#ifdef FREECIV_JSON_CONNECTION
24232 field_addr.name = "city_id";
24233#endif /* FREECIV_JSON_CONNECTION */
24234 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24236 }
24237 }
24238 if (BV_ISSET(fields, 2)) {
24239 log_packet_detailed(" got field 'improvements'");
24240#ifdef FREECIV_JSON_CONNECTION
24241 field_addr.name = "improvements";
24242#endif /* FREECIV_JSON_CONNECTION */
24243 if (!DIO_BV_GET(&din, &field_addr, real_packet->improvements)) {
24244 RECEIVE_PACKET_FIELD_ERROR(improvements);
24245 }
24246 }
24247 if (BV_ISSET(fields, 3)) {
24248 log_packet_detailed(" got field 'act_id'");
24249#ifdef FREECIV_JSON_CONNECTION
24250 field_addr.name = "act_id";
24251#endif /* FREECIV_JSON_CONNECTION */
24252 {
24253 int readin;
24254
24255 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24257 }
24258 real_packet->act_id = readin;
24259 }
24260 }
24261 if (BV_ISSET(fields, 4)) {
24262 log_packet_detailed(" got field 'request_kind'");
24263#ifdef FREECIV_JSON_CONNECTION
24264 field_addr.name = "request_kind";
24265#endif /* FREECIV_JSON_CONNECTION */
24266 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
24267 RECEIVE_PACKET_FIELD_ERROR(request_kind);
24268 }
24269 }
24270
24271 if (NULL == old) {
24272 old = fc_malloc(sizeof(*old));
24273 *old = *real_packet;
24274 genhash_insert(*hash, old, old);
24275 } else {
24276 *old = *real_packet;
24277 }
24278
24279#endif /* FREECIV_DELTA_PROTOCOL */
24281}
24282
24284{
24285 const struct packet_city_sabotage_list *real_packet = packet;
24286 int e;
24287#ifdef FREECIV_DELTA_PROTOCOL
24289 struct packet_city_sabotage_list *old;
24290 bool differ;
24291 struct genhash **hash = pc->phs.sent + PACKET_CITY_SABOTAGE_LIST;
24292#endif /* FREECIV_DELTA_PROTOCOL */
24294#ifdef FREECIV_JSON_CONNECTION
24295 struct plocation field_addr;
24296 {
24300 }
24301#endif /* FREECIV_JSON_CONNECTION */
24302
24303 log_packet_detailed("packet_city_sabotage_list_100: sending info about ()");
24304
24305#ifdef FREECIV_DELTA_PROTOCOL
24306 if (NULL == *hash) {
24308 NULL, NULL, NULL, free);
24309 }
24310 BV_CLR_ALL(fields);
24311
24312 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24313 old = fc_malloc(sizeof(*old));
24314 *old = *real_packet;
24315 genhash_insert(*hash, old, old);
24316 memset(old, 0, sizeof(*old));
24317 }
24318 differ = (old->actor_id != real_packet->actor_id);
24319 if (differ) {
24320 BV_SET(fields, 0);
24321 }
24322
24323 differ = (old->city_id != real_packet->city_id);
24324 if (differ) {
24325 BV_SET(fields, 1);
24326 }
24327
24328 differ = !BV_ARE_EQUAL(old->improvements, real_packet->improvements);
24329 if (differ) {
24330 BV_SET(fields, 2);
24331 }
24332
24333 differ = (old->act_id != real_packet->act_id);
24334 if (differ) {
24335 BV_SET(fields, 3);
24336 }
24337
24338 differ = (old->request_kind != real_packet->request_kind);
24339 if (differ) {
24340 BV_SET(fields, 4);
24341 }
24342
24343
24344#ifdef FREECIV_JSON_CONNECTION
24345 field_addr.name = "fields";
24346#endif /* FREECIV_JSON_CONNECTION */
24347 e = 0;
24348 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24349 if (e) {
24350 log_packet_detailed("fields bitvector error detected");
24351 }
24352
24353 if (BV_ISSET(fields, 0)) {
24354 log_packet_detailed(" field 'actor_id' has changed");
24355#ifdef FREECIV_JSON_CONNECTION
24356 field_addr.name = "actor_id";
24357#endif /* FREECIV_JSON_CONNECTION */
24358 e = 0;
24359 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
24360 if (e) {
24361 log_packet_detailed("'actor_id' field error detected");
24362 }
24363 }
24364 if (BV_ISSET(fields, 1)) {
24365 log_packet_detailed(" field 'city_id' has changed");
24366#ifdef FREECIV_JSON_CONNECTION
24367 field_addr.name = "city_id";
24368#endif /* FREECIV_JSON_CONNECTION */
24369 e = 0;
24370 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
24371 if (e) {
24372 log_packet_detailed("'city_id' field error detected");
24373 }
24374 }
24375 if (BV_ISSET(fields, 2)) {
24376 log_packet_detailed(" field 'improvements' has changed");
24377#ifdef FREECIV_JSON_CONNECTION
24378 field_addr.name = "improvements";
24379#endif /* FREECIV_JSON_CONNECTION */
24380 e = 0;
24381 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
24382 if (e) {
24383 log_packet_detailed("'improvements' field error detected");
24384 }
24385 }
24386 if (BV_ISSET(fields, 3)) {
24387 log_packet_detailed(" field 'act_id' has changed");
24388#ifdef FREECIV_JSON_CONNECTION
24389 field_addr.name = "act_id";
24390#endif /* FREECIV_JSON_CONNECTION */
24391 e = 0;
24392 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
24393 if (e) {
24394 log_packet_detailed("'act_id' field error detected");
24395 }
24396 }
24397 if (BV_ISSET(fields, 4)) {
24398 log_packet_detailed(" field 'request_kind' has changed");
24399#ifdef FREECIV_JSON_CONNECTION
24400 field_addr.name = "request_kind";
24401#endif /* FREECIV_JSON_CONNECTION */
24402 e = 0;
24403 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
24404 if (e) {
24405 log_packet_detailed("'request_kind' field error detected");
24406 }
24407 }
24408
24409 *old = *real_packet;
24410#endif /* FREECIV_DELTA_PROTOCOL */
24411#ifndef FREECIV_DELTA_PROTOCOL
24412#ifdef FREECIV_JSON_CONNECTION
24413 field_addr.name = "actor_id";
24414#endif /* FREECIV_JSON_CONNECTION */
24415 e = 0;
24416 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
24417 if (e) {
24418 log_packet_detailed("'actor_id' field error detected");
24419 }
24420#ifdef FREECIV_JSON_CONNECTION
24421 field_addr.name = "city_id";
24422#endif /* FREECIV_JSON_CONNECTION */
24423 e = 0;
24424 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
24425 if (e) {
24426 log_packet_detailed("'city_id' field error detected");
24427 }
24428#ifdef FREECIV_JSON_CONNECTION
24429 field_addr.name = "improvements";
24430#endif /* FREECIV_JSON_CONNECTION */
24431 e = 0;
24432 e |= DIO_BV_PUT(&dout, &field_addr, packet->improvements);
24433 if (e) {
24434 log_packet_detailed("'improvements' field error detected");
24435 }
24436#ifdef FREECIV_JSON_CONNECTION
24437 field_addr.name = "act_id";
24438#endif /* FREECIV_JSON_CONNECTION */
24439 e = 0;
24440 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_id);
24441 if (e) {
24442 log_packet_detailed("'act_id' field error detected");
24443 }
24444#ifdef FREECIV_JSON_CONNECTION
24445 field_addr.name = "request_kind";
24446#endif /* FREECIV_JSON_CONNECTION */
24447 e = 0;
24448 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
24449 if (e) {
24450 log_packet_detailed("'request_kind' field error detected");
24451 }
24452
24453#endif
24455}
24456
24458{
24459 if (!pc->used) {
24460 log_error("WARNING: trying to send data to the closed connection %s",
24462 return -1;
24463 }
24464 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet != NULL, -1,
24465 "Handler for PACKET_CITY_SABOTAGE_LIST not installed");
24466 return pc->phs.handlers->send[PACKET_CITY_SABOTAGE_LIST].packet(pc, packet);
24467}
24468
24470{
24471 conn_list_iterate(dest, pconn) {
24474}
24475
24476#ifdef FREECIV_DELTA_PROTOCOL
24477#define hash_packet_city_rally_point_100 hash_const
24478
24479#define cmp_packet_city_rally_point_100 cmp_const
24480
24482#endif /* FREECIV_DELTA_PROTOCOL */
24483
24485{
24486#ifdef FREECIV_DELTA_PROTOCOL
24488 struct packet_city_rally_point *old;
24489 struct genhash **hash = pc->phs.received + PACKET_CITY_RALLY_POINT;
24490#endif /* FREECIV_DELTA_PROTOCOL */
24492#ifdef FREECIV_JSON_CONNECTION
24493 struct plocation field_addr;
24494 {
24498 }
24499#endif /* FREECIV_JSON_CONNECTION */
24500
24501#ifdef FREECIV_DELTA_PROTOCOL
24502#ifdef FREECIV_JSON_CONNECTION
24503 field_addr.name = "fields";
24504#endif /* FREECIV_JSON_CONNECTION */
24505 DIO_BV_GET(&din, &field_addr, fields);
24506
24507#else /* FREECIV_DELTA_PROTOCOL */
24508#ifdef FREECIV_JSON_CONNECTION
24509 field_addr.name = "id";
24510#endif /* FREECIV_JSON_CONNECTION */
24511 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
24513 }
24514#ifdef FREECIV_JSON_CONNECTION
24515 field_addr.name = "length";
24516#endif /* FREECIV_JSON_CONNECTION */
24517 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
24519 }
24520#ifdef FREECIV_JSON_CONNECTION
24521 field_addr.name = "persistent";
24522#endif /* FREECIV_JSON_CONNECTION */
24523 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->persistent)) {
24525 }
24526#ifdef FREECIV_JSON_CONNECTION
24527 field_addr.name = "vigilant";
24528#endif /* FREECIV_JSON_CONNECTION */
24529 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
24531 }
24532#ifdef FREECIV_JSON_CONNECTION
24533 field_addr.name = "orders";
24534#endif /* FREECIV_JSON_CONNECTION */
24535 if (real_packet->length > MAX_LEN_ROUTE) {
24536 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
24537 }
24538 {
24539 int i;
24540
24541#ifdef FREECIV_JSON_CONNECTION
24542 /* Enter array. */
24543 field_addr.sub_location = plocation_elem_new(0);
24544#endif /* FREECIV_JSON_CONNECTION */
24545
24546 for (i = 0; i < real_packet->length; i++) {
24547#ifdef FREECIV_JSON_CONNECTION
24548 field_addr.sub_location->number = i;
24549#endif /* FREECIV_JSON_CONNECTION */
24550
24551 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
24553 }
24554 }
24555
24556#ifdef FREECIV_JSON_CONNECTION
24557 /* Exit array. */
24558 FC_FREE(field_addr.sub_location);
24559#endif /* FREECIV_JSON_CONNECTION */
24560 }
24561#endif
24562 log_packet_detailed("packet_city_rally_point_100: got info about ()");
24563
24564#ifdef FREECIV_DELTA_PROTOCOL
24565 if (NULL == *hash) {
24567 NULL, NULL, NULL, free);
24568 }
24569
24570 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24571 *real_packet = *old;
24572 } else {
24573 log_packet_detailed(" no old info");
24574 memset(real_packet, 0, sizeof(*real_packet));
24575 }
24576
24577 if (BV_ISSET(fields, 0)) {
24578 log_packet_detailed(" got field 'id'");
24579#ifdef FREECIV_JSON_CONNECTION
24580 field_addr.name = "id";
24581#endif /* FREECIV_JSON_CONNECTION */
24582 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
24584 }
24585 }
24586 if (BV_ISSET(fields, 1)) {
24587 log_packet_detailed(" got field 'length'");
24588#ifdef FREECIV_JSON_CONNECTION
24589 field_addr.name = "length";
24590#endif /* FREECIV_JSON_CONNECTION */
24591 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
24593 }
24594 }
24595 real_packet->persistent = BV_ISSET(fields, 2);
24596 real_packet->vigilant = BV_ISSET(fields, 3);
24597 if (BV_ISSET(fields, 4)) {
24598 log_packet_detailed(" got field 'orders'");
24599#ifdef FREECIV_JSON_CONNECTION
24600 field_addr.name = "orders";
24601#endif /* FREECIV_JSON_CONNECTION */
24602 if (real_packet->length > MAX_LEN_ROUTE) {
24603 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
24604 }
24605 {
24606 int i;
24607
24608#ifdef FREECIV_JSON_CONNECTION
24609 /* Enter array. */
24610 field_addr.sub_location = plocation_elem_new(0);
24611#endif /* FREECIV_JSON_CONNECTION */
24612
24613 for (i = 0; i < real_packet->length; i++) {
24614#ifdef FREECIV_JSON_CONNECTION
24615 field_addr.sub_location->number = i;
24616#endif /* FREECIV_JSON_CONNECTION */
24617
24618 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
24620 }
24621 }
24622
24623#ifdef FREECIV_JSON_CONNECTION
24624 /* Exit array. */
24625 FC_FREE(field_addr.sub_location);
24626#endif /* FREECIV_JSON_CONNECTION */
24627 }
24628 }
24629
24630 if (NULL == old) {
24631 old = fc_malloc(sizeof(*old));
24632 *old = *real_packet;
24633 genhash_insert(*hash, old, old);
24634 } else {
24635 *old = *real_packet;
24636 }
24637
24638#endif /* FREECIV_DELTA_PROTOCOL */
24640}
24641
24642static int send_packet_city_rally_point_100(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
24643{
24644 const struct packet_city_rally_point *real_packet = packet;
24645 int e;
24646#ifdef FREECIV_DELTA_PROTOCOL
24648 struct packet_city_rally_point *old;
24649 bool differ;
24650 struct genhash **hash = pc->phs.sent + PACKET_CITY_RALLY_POINT;
24651 int different = force_to_send;
24652#endif /* FREECIV_DELTA_PROTOCOL */
24654#ifdef FREECIV_JSON_CONNECTION
24655 struct plocation field_addr;
24656 {
24660 }
24661#endif /* FREECIV_JSON_CONNECTION */
24662
24663 log_packet_detailed("packet_city_rally_point_100: sending info about ()");
24664
24665#ifdef FREECIV_DELTA_PROTOCOL
24666 if (NULL == *hash) {
24668 NULL, NULL, NULL, free);
24669 }
24670 BV_CLR_ALL(fields);
24671
24672 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
24673 old = fc_malloc(sizeof(*old));
24674 *old = *real_packet;
24675 genhash_insert(*hash, old, old);
24676 memset(old, 0, sizeof(*old));
24677 different = 1; /* Force to send. */
24678 }
24679 differ = (old->id != real_packet->id);
24680 if (differ) {
24681 different++;
24682 BV_SET(fields, 0);
24683 }
24684
24685 differ = (old->length != real_packet->length);
24686 if (differ) {
24687 different++;
24688 BV_SET(fields, 1);
24689 }
24690
24691 differ = (old->persistent != real_packet->persistent);
24692 if (differ) {
24693 different++;
24694 }
24695 if (packet->persistent) {
24696 BV_SET(fields, 2);
24697 }
24698
24699 differ = (old->vigilant != real_packet->vigilant);
24700 if (differ) {
24701 different++;
24702 }
24703 if (packet->vigilant) {
24704 BV_SET(fields, 3);
24705 }
24706
24707 differ = (old->length != real_packet->length);
24708 if (!differ) {
24709 int i;
24710
24711 for (i = 0; i < real_packet->length; i++) {
24712 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
24713 if (differ) {
24714 break;
24715 }
24716 }
24717 }
24718 if (differ) {
24719 different++;
24720 BV_SET(fields, 4);
24721 }
24722
24723 if (different == 0) {
24724 log_packet_detailed(" no change -> discard");
24726 }
24727
24728#ifdef FREECIV_JSON_CONNECTION
24729 field_addr.name = "fields";
24730#endif /* FREECIV_JSON_CONNECTION */
24731 e = 0;
24732 e |= DIO_BV_PUT(&dout, &field_addr, fields);
24733 if (e) {
24734 log_packet_detailed("fields bitvector error detected");
24735 }
24736
24737 if (BV_ISSET(fields, 0)) {
24738 log_packet_detailed(" field 'id' has changed");
24739#ifdef FREECIV_JSON_CONNECTION
24740 field_addr.name = "id";
24741#endif /* FREECIV_JSON_CONNECTION */
24742 e = 0;
24743 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
24744 if (e) {
24745 log_packet_detailed("'id' field error detected");
24746 }
24747 }
24748 if (BV_ISSET(fields, 1)) {
24749 log_packet_detailed(" field 'length' has changed");
24750#ifdef FREECIV_JSON_CONNECTION
24751 field_addr.name = "length";
24752#endif /* FREECIV_JSON_CONNECTION */
24753 e = 0;
24754 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
24755 if (e) {
24756 log_packet_detailed("'length' field error detected");
24757 }
24758 }
24759 /* field 2 is folded into the header */
24760 /* field 3 is folded into the header */
24761 if (BV_ISSET(fields, 4)) {
24762 log_packet_detailed(" field 'orders' has changed");
24763#ifdef FREECIV_JSON_CONNECTION
24764 field_addr.name = "orders";
24765#endif /* FREECIV_JSON_CONNECTION */
24766 e = 0;
24767 {
24768 int i;
24769
24770#ifdef FREECIV_JSON_CONNECTION
24771 /* Create the array. */
24772 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
24773
24774 /* Enter the array. */
24775 field_addr.sub_location = plocation_elem_new(0);
24776#endif /* FREECIV_JSON_CONNECTION */
24777
24778 for (i = 0; i < real_packet->length; i++) {
24779#ifdef FREECIV_JSON_CONNECTION
24780 /* Next array element. */
24781 field_addr.sub_location->number = i;
24782#endif /* FREECIV_JSON_CONNECTION */
24783
24784 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
24785 }
24786
24787#ifdef FREECIV_JSON_CONNECTION
24788 /* Exit array. */
24789 FC_FREE(field_addr.sub_location);
24790#endif /* FREECIV_JSON_CONNECTION */
24791 }
24792 if (e) {
24793 log_packet_detailed("'orders' field error detected");
24794 }
24795 }
24796
24797 *old = *real_packet;
24798#endif /* FREECIV_DELTA_PROTOCOL */
24799#ifndef FREECIV_DELTA_PROTOCOL
24800#ifdef FREECIV_JSON_CONNECTION
24801 field_addr.name = "id";
24802#endif /* FREECIV_JSON_CONNECTION */
24803 e = 0;
24804 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
24805 if (e) {
24806 log_packet_detailed("'id' field error detected");
24807 }
24808#ifdef FREECIV_JSON_CONNECTION
24809 field_addr.name = "length";
24810#endif /* FREECIV_JSON_CONNECTION */
24811 e = 0;
24812 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
24813 if (e) {
24814 log_packet_detailed("'length' field error detected");
24815 }
24816#ifdef FREECIV_JSON_CONNECTION
24817 field_addr.name = "persistent";
24818#endif /* FREECIV_JSON_CONNECTION */
24819 e = 0;
24820 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->persistent);
24821 if (e) {
24822 log_packet_detailed("'persistent' field error detected");
24823 }
24824#ifdef FREECIV_JSON_CONNECTION
24825 field_addr.name = "vigilant";
24826#endif /* FREECIV_JSON_CONNECTION */
24827 e = 0;
24828 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
24829 if (e) {
24830 log_packet_detailed("'vigilant' field error detected");
24831 }
24832#ifdef FREECIV_JSON_CONNECTION
24833 field_addr.name = "orders";
24834#endif /* FREECIV_JSON_CONNECTION */
24835 e = 0;
24836 {
24837 int i;
24838
24839#ifdef FREECIV_JSON_CONNECTION
24840 /* Create the array. */
24841 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
24842
24843 /* Enter the array. */
24844 field_addr.sub_location = plocation_elem_new(0);
24845#endif /* FREECIV_JSON_CONNECTION */
24846
24847 for (i = 0; i < real_packet->length; i++) {
24848#ifdef FREECIV_JSON_CONNECTION
24849 /* Next array element. */
24850 field_addr.sub_location->number = i;
24851#endif /* FREECIV_JSON_CONNECTION */
24852
24853 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
24854 }
24855
24856#ifdef FREECIV_JSON_CONNECTION
24857 /* Exit array. */
24858 FC_FREE(field_addr.sub_location);
24859#endif /* FREECIV_JSON_CONNECTION */
24860 }
24861 if (e) {
24862 log_packet_detailed("'orders' field error detected");
24863 }
24864
24865#endif
24867}
24868
24869int send_packet_city_rally_point(struct connection *pc, const struct packet_city_rally_point *packet, bool force_to_send)
24870{
24871 if (!pc->used) {
24872 log_error("WARNING: trying to send data to the closed connection %s",
24874 return -1;
24875 }
24876 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send != NULL, -1,
24877 "Handler for PACKET_CITY_RALLY_POINT not installed");
24878 return pc->phs.handlers->send[PACKET_CITY_RALLY_POINT].force_to_send(pc, packet, force_to_send);
24879}
24880
24881void lsend_packet_city_rally_point(struct conn_list *dest, const struct packet_city_rally_point *packet, bool force_to_send)
24882{
24883 conn_list_iterate(dest, pconn) {
24884 send_packet_city_rally_point(pconn, packet, force_to_send);
24886}
24887
24888#ifdef FREECIV_DELTA_PROTOCOL
24889#define hash_packet_worker_task_100 hash_const
24890
24891#define cmp_packet_worker_task_100 cmp_const
24892
24894#endif /* FREECIV_DELTA_PROTOCOL */
24895
24897{
24898#ifdef FREECIV_DELTA_PROTOCOL
24900 struct packet_worker_task *old;
24901 struct genhash **hash = pc->phs.received + PACKET_WORKER_TASK;
24902#endif /* FREECIV_DELTA_PROTOCOL */
24904#ifdef FREECIV_JSON_CONNECTION
24905 struct plocation field_addr;
24906 {
24910 }
24911#endif /* FREECIV_JSON_CONNECTION */
24912
24913#ifdef FREECIV_DELTA_PROTOCOL
24914#ifdef FREECIV_JSON_CONNECTION
24915 field_addr.name = "fields";
24916#endif /* FREECIV_JSON_CONNECTION */
24917 DIO_BV_GET(&din, &field_addr, fields);
24918
24919#else /* FREECIV_DELTA_PROTOCOL */
24920#ifdef FREECIV_JSON_CONNECTION
24921 field_addr.name = "city_id";
24922#endif /* FREECIV_JSON_CONNECTION */
24923 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24925 }
24926#ifdef FREECIV_JSON_CONNECTION
24927 field_addr.name = "tile_id";
24928#endif /* FREECIV_JSON_CONNECTION */
24929 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
24931 }
24932#ifdef FREECIV_JSON_CONNECTION
24933 field_addr.name = "activity";
24934#endif /* FREECIV_JSON_CONNECTION */
24935 {
24936 int readin;
24937
24938 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24940 }
24941 real_packet->activity = readin;
24942 }
24943#ifdef FREECIV_JSON_CONNECTION
24944 field_addr.name = "tgt";
24945#endif /* FREECIV_JSON_CONNECTION */
24946 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
24948 }
24949#ifdef FREECIV_JSON_CONNECTION
24950 field_addr.name = "want";
24951#endif /* FREECIV_JSON_CONNECTION */
24952 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
24954 }
24955#endif
24956 log_packet_detailed("packet_worker_task_100: got info about ()");
24957
24958#ifdef FREECIV_DELTA_PROTOCOL
24959 if (NULL == *hash) {
24961 NULL, NULL, NULL, free);
24962 }
24963
24964 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
24965 *real_packet = *old;
24966 } else {
24967 log_packet_detailed(" no old info");
24968 memset(real_packet, 0, sizeof(*real_packet));
24969 }
24970
24971 if (BV_ISSET(fields, 0)) {
24972 log_packet_detailed(" got field 'city_id'");
24973#ifdef FREECIV_JSON_CONNECTION
24974 field_addr.name = "city_id";
24975#endif /* FREECIV_JSON_CONNECTION */
24976 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->city_id)) {
24978 }
24979 }
24980 if (BV_ISSET(fields, 1)) {
24981 log_packet_detailed(" got field 'tile_id'");
24982#ifdef FREECIV_JSON_CONNECTION
24983 field_addr.name = "tile_id";
24984#endif /* FREECIV_JSON_CONNECTION */
24985 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile_id)) {
24987 }
24988 }
24989 if (BV_ISSET(fields, 2)) {
24990 log_packet_detailed(" got field 'activity'");
24991#ifdef FREECIV_JSON_CONNECTION
24992 field_addr.name = "activity";
24993#endif /* FREECIV_JSON_CONNECTION */
24994 {
24995 int readin;
24996
24997 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
24999 }
25000 real_packet->activity = readin;
25001 }
25002 }
25003 if (BV_ISSET(fields, 3)) {
25004 log_packet_detailed(" got field 'tgt'");
25005#ifdef FREECIV_JSON_CONNECTION
25006 field_addr.name = "tgt";
25007#endif /* FREECIV_JSON_CONNECTION */
25008 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->tgt)) {
25010 }
25011 }
25012 if (BV_ISSET(fields, 4)) {
25013 log_packet_detailed(" got field 'want'");
25014#ifdef FREECIV_JSON_CONNECTION
25015 field_addr.name = "want";
25016#endif /* FREECIV_JSON_CONNECTION */
25017 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->want)) {
25019 }
25020 }
25021
25022 if (NULL == old) {
25023 old = fc_malloc(sizeof(*old));
25024 *old = *real_packet;
25025 genhash_insert(*hash, old, old);
25026 } else {
25027 *old = *real_packet;
25028 }
25029
25030#endif /* FREECIV_DELTA_PROTOCOL */
25032}
25033
25034static int send_packet_worker_task_100(struct connection *pc, const struct packet_worker_task *packet)
25035{
25036 const struct packet_worker_task *real_packet = packet;
25037 int e;
25038#ifdef FREECIV_DELTA_PROTOCOL
25040 struct packet_worker_task *old;
25041 bool differ;
25042 struct genhash **hash = pc->phs.sent + PACKET_WORKER_TASK;
25043#endif /* FREECIV_DELTA_PROTOCOL */
25045#ifdef FREECIV_JSON_CONNECTION
25046 struct plocation field_addr;
25047 {
25051 }
25052#endif /* FREECIV_JSON_CONNECTION */
25053
25054 log_packet_detailed("packet_worker_task_100: sending info about ()");
25055
25056#ifdef FREECIV_DELTA_PROTOCOL
25057 if (NULL == *hash) {
25059 NULL, NULL, NULL, free);
25060 }
25061 BV_CLR_ALL(fields);
25062
25063 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25064 old = fc_malloc(sizeof(*old));
25065 *old = *real_packet;
25066 genhash_insert(*hash, old, old);
25067 memset(old, 0, sizeof(*old));
25068 }
25069 differ = (old->city_id != real_packet->city_id);
25070 if (differ) {
25071 BV_SET(fields, 0);
25072 }
25073
25074 differ = (old->tile_id != real_packet->tile_id);
25075 if (differ) {
25076 BV_SET(fields, 1);
25077 }
25078
25079 differ = (old->activity != real_packet->activity);
25080 if (differ) {
25081 BV_SET(fields, 2);
25082 }
25083
25084 differ = (old->tgt != real_packet->tgt);
25085 if (differ) {
25086 BV_SET(fields, 3);
25087 }
25088
25089 differ = (old->want != real_packet->want);
25090 if (differ) {
25091 BV_SET(fields, 4);
25092 }
25093
25094
25095#ifdef FREECIV_JSON_CONNECTION
25096 field_addr.name = "fields";
25097#endif /* FREECIV_JSON_CONNECTION */
25098 e = 0;
25099 e |= DIO_BV_PUT(&dout, &field_addr, fields);
25100 if (e) {
25101 log_packet_detailed("fields bitvector error detected");
25102 }
25103
25104 if (BV_ISSET(fields, 0)) {
25105 log_packet_detailed(" field 'city_id' has changed");
25106#ifdef FREECIV_JSON_CONNECTION
25107 field_addr.name = "city_id";
25108#endif /* FREECIV_JSON_CONNECTION */
25109 e = 0;
25110 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
25111 if (e) {
25112 log_packet_detailed("'city_id' field error detected");
25113 }
25114 }
25115 if (BV_ISSET(fields, 1)) {
25116 log_packet_detailed(" field 'tile_id' has changed");
25117#ifdef FREECIV_JSON_CONNECTION
25118 field_addr.name = "tile_id";
25119#endif /* FREECIV_JSON_CONNECTION */
25120 e = 0;
25121 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
25122 if (e) {
25123 log_packet_detailed("'tile_id' field error detected");
25124 }
25125 }
25126 if (BV_ISSET(fields, 2)) {
25127 log_packet_detailed(" field 'activity' has changed");
25128#ifdef FREECIV_JSON_CONNECTION
25129 field_addr.name = "activity";
25130#endif /* FREECIV_JSON_CONNECTION */
25131 e = 0;
25132 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
25133 if (e) {
25134 log_packet_detailed("'activity' field error detected");
25135 }
25136 }
25137 if (BV_ISSET(fields, 3)) {
25138 log_packet_detailed(" field 'tgt' has changed");
25139#ifdef FREECIV_JSON_CONNECTION
25140 field_addr.name = "tgt";
25141#endif /* FREECIV_JSON_CONNECTION */
25142 e = 0;
25143 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
25144 if (e) {
25145 log_packet_detailed("'tgt' field error detected");
25146 }
25147 }
25148 if (BV_ISSET(fields, 4)) {
25149 log_packet_detailed(" field 'want' has changed");
25150#ifdef FREECIV_JSON_CONNECTION
25151 field_addr.name = "want";
25152#endif /* FREECIV_JSON_CONNECTION */
25153 e = 0;
25154 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
25155 if (e) {
25156 log_packet_detailed("'want' field error detected");
25157 }
25158 }
25159
25160 *old = *real_packet;
25161#endif /* FREECIV_DELTA_PROTOCOL */
25162#ifndef FREECIV_DELTA_PROTOCOL
25163#ifdef FREECIV_JSON_CONNECTION
25164 field_addr.name = "city_id";
25165#endif /* FREECIV_JSON_CONNECTION */
25166 e = 0;
25167 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->city_id);
25168 if (e) {
25169 log_packet_detailed("'city_id' field error detected");
25170 }
25171#ifdef FREECIV_JSON_CONNECTION
25172 field_addr.name = "tile_id";
25173#endif /* FREECIV_JSON_CONNECTION */
25174 e = 0;
25175 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile_id);
25176 if (e) {
25177 log_packet_detailed("'tile_id' field error detected");
25178 }
25179#ifdef FREECIV_JSON_CONNECTION
25180 field_addr.name = "activity";
25181#endif /* FREECIV_JSON_CONNECTION */
25182 e = 0;
25183 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
25184 if (e) {
25185 log_packet_detailed("'activity' field error detected");
25186 }
25187#ifdef FREECIV_JSON_CONNECTION
25188 field_addr.name = "tgt";
25189#endif /* FREECIV_JSON_CONNECTION */
25190 e = 0;
25191 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->tgt);
25192 if (e) {
25193 log_packet_detailed("'tgt' field error detected");
25194 }
25195#ifdef FREECIV_JSON_CONNECTION
25196 field_addr.name = "want";
25197#endif /* FREECIV_JSON_CONNECTION */
25198 e = 0;
25199 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->want);
25200 if (e) {
25201 log_packet_detailed("'want' field error detected");
25202 }
25203
25204#endif
25206}
25207
25209{
25210 if (!pc->used) {
25211 log_error("WARNING: trying to send data to the closed connection %s",
25213 return -1;
25214 }
25215 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WORKER_TASK].packet != NULL, -1,
25216 "Handler for PACKET_WORKER_TASK not installed");
25217 return pc->phs.handlers->send[PACKET_WORKER_TASK].packet(pc, packet);
25218}
25219
25220void lsend_packet_worker_task(struct conn_list *dest, const struct packet_worker_task *packet)
25221{
25222 conn_list_iterate(dest, pconn) {
25225}
25226
25227#ifdef FREECIV_DELTA_PROTOCOL
25228#define hash_packet_player_remove_100 hash_const
25229
25230#define cmp_packet_player_remove_100 cmp_const
25231
25233#endif /* FREECIV_DELTA_PROTOCOL */
25234
25236{
25237#ifdef FREECIV_DELTA_PROTOCOL
25239 struct packet_player_remove *old;
25240 struct genhash **hash = pc->phs.received + PACKET_PLAYER_REMOVE;
25241#endif /* FREECIV_DELTA_PROTOCOL */
25243#ifdef FREECIV_JSON_CONNECTION
25244 struct plocation field_addr;
25245 {
25249 }
25250#endif /* FREECIV_JSON_CONNECTION */
25251
25252#ifdef FREECIV_DELTA_PROTOCOL
25253#ifdef FREECIV_JSON_CONNECTION
25254 field_addr.name = "fields";
25255#endif /* FREECIV_JSON_CONNECTION */
25256 DIO_BV_GET(&din, &field_addr, fields);
25257
25258#else /* FREECIV_DELTA_PROTOCOL */
25259#ifdef FREECIV_JSON_CONNECTION
25260 field_addr.name = "playerno";
25261#endif /* FREECIV_JSON_CONNECTION */
25262 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
25264 }
25265#endif
25266 log_packet_detailed("packet_player_remove_100: got info about ()");
25267
25268#ifdef FREECIV_DELTA_PROTOCOL
25269 if (NULL == *hash) {
25271 NULL, NULL, NULL, free);
25272 }
25273
25274 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25275 *real_packet = *old;
25276 } else {
25277 log_packet_detailed(" no old info");
25278 memset(real_packet, 0, sizeof(*real_packet));
25279 }
25280
25281 if (BV_ISSET(fields, 0)) {
25282 log_packet_detailed(" got field 'playerno'");
25283#ifdef FREECIV_JSON_CONNECTION
25284 field_addr.name = "playerno";
25285#endif /* FREECIV_JSON_CONNECTION */
25286 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
25288 }
25289 }
25290
25291 if (NULL == old) {
25292 old = fc_malloc(sizeof(*old));
25293 *old = *real_packet;
25294 genhash_insert(*hash, old, old);
25295 } else {
25296 *old = *real_packet;
25297 }
25298
25299 hash = pc->phs.received + PACKET_PLAYER_INFO;
25300 if (NULL != *hash) {
25302 }
25303
25304#endif /* FREECIV_DELTA_PROTOCOL */
25306}
25307
25308static int send_packet_player_remove_100(struct connection *pc, const struct packet_player_remove *packet)
25309{
25310 const struct packet_player_remove *real_packet = packet;
25311 int e;
25312#ifdef FREECIV_DELTA_PROTOCOL
25314 struct packet_player_remove *old;
25315 bool differ;
25316 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_REMOVE;
25317#endif /* FREECIV_DELTA_PROTOCOL */
25319#ifdef FREECIV_JSON_CONNECTION
25320 struct plocation field_addr;
25321 {
25325 }
25326#endif /* FREECIV_JSON_CONNECTION */
25327
25328 log_packet_detailed("packet_player_remove_100: sending info about ()");
25329
25330#ifdef FREECIV_DELTA_PROTOCOL
25331 if (NULL == *hash) {
25333 NULL, NULL, NULL, free);
25334 }
25335 BV_CLR_ALL(fields);
25336
25337 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
25338 old = fc_malloc(sizeof(*old));
25339 *old = *real_packet;
25340 genhash_insert(*hash, old, old);
25341 memset(old, 0, sizeof(*old));
25342 }
25343 differ = (old->playerno != real_packet->playerno);
25344 if (differ) {
25345 BV_SET(fields, 0);
25346 }
25347
25348
25349#ifdef FREECIV_JSON_CONNECTION
25350 field_addr.name = "fields";
25351#endif /* FREECIV_JSON_CONNECTION */
25352 e = 0;
25353 e |= DIO_BV_PUT(&dout, &field_addr, fields);
25354 if (e) {
25355 log_packet_detailed("fields bitvector error detected");
25356 }
25357
25358 if (BV_ISSET(fields, 0)) {
25359 log_packet_detailed(" field 'playerno' has changed");
25360#ifdef FREECIV_JSON_CONNECTION
25361 field_addr.name = "playerno";
25362#endif /* FREECIV_JSON_CONNECTION */
25363 e = 0;
25364 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
25365 if (e) {
25366 log_packet_detailed("'playerno' field error detected");
25367 }
25368 }
25369
25370 *old = *real_packet;
25371
25372 hash = pc->phs.sent + PACKET_PLAYER_INFO;
25373 if (NULL != *hash) {
25375 }
25376#endif /* FREECIV_DELTA_PROTOCOL */
25377#ifndef FREECIV_DELTA_PROTOCOL
25378#ifdef FREECIV_JSON_CONNECTION
25379 field_addr.name = "playerno";
25380#endif /* FREECIV_JSON_CONNECTION */
25381 e = 0;
25382 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
25383 if (e) {
25384 log_packet_detailed("'playerno' field error detected");
25385 }
25386
25387#endif
25389}
25390
25392{
25393 if (!pc->used) {
25394 log_error("WARNING: trying to send data to the closed connection %s",
25396 return -1;
25397 }
25398 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet != NULL, -1,
25399 "Handler for PACKET_PLAYER_REMOVE not installed");
25400 return pc->phs.handlers->send[PACKET_PLAYER_REMOVE].packet(pc, packet);
25401}
25402
25403int dsend_packet_player_remove(struct connection *pc, int playerno)
25404{
25405 struct packet_player_remove packet, *real_packet = &packet;
25406
25408
25410}
25411
25412#ifdef FREECIV_DELTA_PROTOCOL
25414{
25415 const struct packet_player_info *key = (const struct packet_player_info *) vkey;
25416 genhash_val_t result = 0;
25417
25418 result += key->playerno;
25419
25420 result &= 0xFFFFFFFF;
25421 return result;
25422}
25423
25424static bool cmp_packet_player_info_100(const void *vkey1, const void *vkey2)
25425{
25426 const struct packet_player_info *old = (const struct packet_player_info *) vkey1;
25427 const struct packet_player_info *real_packet = (const struct packet_player_info *) vkey2;
25428 bool differ;
25429
25430 differ = (old->playerno != real_packet->playerno);
25431
25432 return !differ;
25433}
25435#endif /* FREECIV_DELTA_PROTOCOL */
25436
25438{
25439#ifdef FREECIV_DELTA_PROTOCOL
25441 struct packet_player_info *old;
25442 struct genhash **hash = pc->phs.received + PACKET_PLAYER_INFO;
25443#endif /* FREECIV_DELTA_PROTOCOL */
25445#ifdef FREECIV_JSON_CONNECTION
25446 struct plocation field_addr;
25447 {
25451 }
25452#endif /* FREECIV_JSON_CONNECTION */
25453
25454#ifdef FREECIV_DELTA_PROTOCOL
25455#ifdef FREECIV_JSON_CONNECTION
25456 field_addr.name = "fields";
25457#endif /* FREECIV_JSON_CONNECTION */
25458 DIO_BV_GET(&din, &field_addr, fields);
25459#ifdef FREECIV_JSON_CONNECTION
25460 field_addr.name = "playerno";
25461#endif /* FREECIV_JSON_CONNECTION */
25462 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
25464 }
25465
25466#else /* FREECIV_DELTA_PROTOCOL */
25467#ifdef FREECIV_JSON_CONNECTION
25468 field_addr.name = "playerno";
25469#endif /* FREECIV_JSON_CONNECTION */
25470 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
25472 }
25473#ifdef FREECIV_JSON_CONNECTION
25474 field_addr.name = "name";
25475#endif /* FREECIV_JSON_CONNECTION */
25476 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
25478 }
25479#ifdef FREECIV_JSON_CONNECTION
25480 field_addr.name = "username";
25481#endif /* FREECIV_JSON_CONNECTION */
25482 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
25484 }
25485#ifdef FREECIV_JSON_CONNECTION
25486 field_addr.name = "unassigned_user";
25487#endif /* FREECIV_JSON_CONNECTION */
25488 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unassigned_user)) {
25489 RECEIVE_PACKET_FIELD_ERROR(unassigned_user);
25490 }
25491#ifdef FREECIV_JSON_CONNECTION
25492 field_addr.name = "score";
25493#endif /* FREECIV_JSON_CONNECTION */
25494 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
25496 }
25497#ifdef FREECIV_JSON_CONNECTION
25498 field_addr.name = "is_male";
25499#endif /* FREECIV_JSON_CONNECTION */
25500 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
25502 }
25503#ifdef FREECIV_JSON_CONNECTION
25504 field_addr.name = "was_created";
25505#endif /* FREECIV_JSON_CONNECTION */
25506 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_created)) {
25507 RECEIVE_PACKET_FIELD_ERROR(was_created);
25508 }
25509#ifdef FREECIV_JSON_CONNECTION
25510 field_addr.name = "government";
25511#endif /* FREECIV_JSON_CONNECTION */
25512 {
25513 int readin;
25514
25515 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25517 }
25518 real_packet->government = readin;
25519 }
25520#ifdef FREECIV_JSON_CONNECTION
25521 field_addr.name = "target_government";
25522#endif /* FREECIV_JSON_CONNECTION */
25523 {
25524 int readin;
25525
25526 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25527 RECEIVE_PACKET_FIELD_ERROR(target_government);
25528 }
25529 real_packet->target_government = readin;
25530 }
25531#ifdef FREECIV_JSON_CONNECTION
25532 field_addr.name = "real_embassy";
25533#endif /* FREECIV_JSON_CONNECTION */
25534 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
25535 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
25536 }
25537#ifdef FREECIV_JSON_CONNECTION
25538 field_addr.name = "mood";
25539#endif /* FREECIV_JSON_CONNECTION */
25540 {
25541 int readin;
25542
25543 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25545 }
25546 real_packet->mood = readin;
25547 }
25548#ifdef FREECIV_JSON_CONNECTION
25549 field_addr.name = "style";
25550#endif /* FREECIV_JSON_CONNECTION */
25551 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
25553 }
25554#ifdef FREECIV_JSON_CONNECTION
25555 field_addr.name = "music_style";
25556#endif /* FREECIV_JSON_CONNECTION */
25557 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
25559 }
25560#ifdef FREECIV_JSON_CONNECTION
25561 field_addr.name = "nation";
25562#endif /* FREECIV_JSON_CONNECTION */
25563 {
25564 int readin;
25565
25566 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
25568 }
25569 real_packet->nation = readin;
25570 }
25571#ifdef FREECIV_JSON_CONNECTION
25572 field_addr.name = "team";
25573#endif /* FREECIV_JSON_CONNECTION */
25574 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
25576 }
25577#ifdef FREECIV_JSON_CONNECTION
25578 field_addr.name = "is_ready";
25579#endif /* FREECIV_JSON_CONNECTION */
25580 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
25582 }
25583#ifdef FREECIV_JSON_CONNECTION
25584 field_addr.name = "phase_done";
25585#endif /* FREECIV_JSON_CONNECTION */
25586 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
25587 RECEIVE_PACKET_FIELD_ERROR(phase_done);
25588 }
25589#ifdef FREECIV_JSON_CONNECTION
25590 field_addr.name = "nturns_idle";
25591#endif /* FREECIV_JSON_CONNECTION */
25592 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
25593 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
25594 }
25595#ifdef FREECIV_JSON_CONNECTION
25596 field_addr.name = "turns_alive";
25597#endif /* FREECIV_JSON_CONNECTION */
25598 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
25599 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
25600 }
25601#ifdef FREECIV_JSON_CONNECTION
25602 field_addr.name = "is_alive";
25603#endif /* FREECIV_JSON_CONNECTION */
25604 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
25606 }
25607#ifdef FREECIV_JSON_CONNECTION
25608 field_addr.name = "autoselect_weight";
25609#endif /* FREECIV_JSON_CONNECTION */
25610 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
25611 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
25612 }
25613#ifdef FREECIV_JSON_CONNECTION
25614 field_addr.name = "gold";
25615#endif /* FREECIV_JSON_CONNECTION */
25616 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
25618 }
25619#ifdef FREECIV_JSON_CONNECTION
25620 field_addr.name = "tax";
25621#endif /* FREECIV_JSON_CONNECTION */
25622 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
25624 }
25625#ifdef FREECIV_JSON_CONNECTION
25626 field_addr.name = "science";
25627#endif /* FREECIV_JSON_CONNECTION */
25628 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
25630 }
25631#ifdef FREECIV_JSON_CONNECTION
25632 field_addr.name = "luxury";
25633#endif /* FREECIV_JSON_CONNECTION */
25634 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
25636 }
25637#ifdef FREECIV_JSON_CONNECTION
25638 field_addr.name = "infrapoints";
25639#endif /* FREECIV_JSON_CONNECTION */
25640 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
25641 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
25642 }
25643#ifdef FREECIV_JSON_CONNECTION
25644 field_addr.name = "tech_upkeep_16";
25645#endif /* FREECIV_JSON_CONNECTION */
25646 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_16)) {
25647 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_16);
25648 }
25649#ifdef FREECIV_JSON_CONNECTION
25650 field_addr.name = "science_cost";
25651#endif /* FREECIV_JSON_CONNECTION */
25652 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
25653 RECEIVE_PACKET_FIELD_ERROR(science_cost);
25654 }
25655#ifdef FREECIV_JSON_CONNECTION
25656 field_addr.name = "is_connected";
25657#endif /* FREECIV_JSON_CONNECTION */
25658 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_connected)) {
25659 RECEIVE_PACKET_FIELD_ERROR(is_connected);
25660 }
25661#ifdef FREECIV_JSON_CONNECTION
25662 field_addr.name = "revolution_finishes";
25663#endif /* FREECIV_JSON_CONNECTION */
25664 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
25665 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
25666 }
25667#ifdef FREECIV_JSON_CONNECTION
25668 field_addr.name = "ai_skill_level";
25669#endif /* FREECIV_JSON_CONNECTION */
25670 {
25671 int readin;
25672
25673 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25674 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
25675 }
25676 real_packet->ai_skill_level = readin;
25677 }
25678#ifdef FREECIV_JSON_CONNECTION
25679 field_addr.name = "barbarian_type";
25680#endif /* FREECIV_JSON_CONNECTION */
25681 {
25682 int readin;
25683
25684 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25685 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
25686 }
25687 real_packet->barbarian_type = readin;
25688 }
25689#ifdef FREECIV_JSON_CONNECTION
25690 field_addr.name = "gives_shared_vision";
25691#endif /* FREECIV_JSON_CONNECTION */
25692 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
25694 }
25695#ifdef FREECIV_JSON_CONNECTION
25696 field_addr.name = "gives_shared_tiles";
25697#endif /* FREECIV_JSON_CONNECTION */
25698 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
25700 }
25701#ifdef FREECIV_JSON_CONNECTION
25702 field_addr.name = "history";
25703#endif /* FREECIV_JSON_CONNECTION */
25704 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
25706 }
25707#ifdef FREECIV_JSON_CONNECTION
25708 field_addr.name = "culture";
25709#endif /* FREECIV_JSON_CONNECTION */
25710 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
25712 }
25713#ifdef FREECIV_JSON_CONNECTION
25714 field_addr.name = "love";
25715#endif /* FREECIV_JSON_CONNECTION */
25716 {
25717 int i;
25718
25719#ifdef FREECIV_JSON_CONNECTION
25720 /* Enter array. */
25721 field_addr.sub_location = plocation_elem_new(0);
25722#endif /* FREECIV_JSON_CONNECTION */
25723
25724 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
25725#ifdef FREECIV_JSON_CONNECTION
25726 field_addr.sub_location->number = i;
25727#endif /* FREECIV_JSON_CONNECTION */
25728
25729 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
25731 }
25732 }
25733
25734#ifdef FREECIV_JSON_CONNECTION
25735 /* Exit array. */
25736 FC_FREE(field_addr.sub_location);
25737#endif /* FREECIV_JSON_CONNECTION */
25738 }
25739#ifdef FREECIV_JSON_CONNECTION
25740 field_addr.name = "color_valid";
25741#endif /* FREECIV_JSON_CONNECTION */
25742 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_valid)) {
25743 RECEIVE_PACKET_FIELD_ERROR(color_valid);
25744 }
25745#ifdef FREECIV_JSON_CONNECTION
25746 field_addr.name = "color_changeable";
25747#endif /* FREECIV_JSON_CONNECTION */
25748 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_changeable)) {
25749 RECEIVE_PACKET_FIELD_ERROR(color_changeable);
25750 }
25751#ifdef FREECIV_JSON_CONNECTION
25752 field_addr.name = "color_red";
25753#endif /* FREECIV_JSON_CONNECTION */
25754 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
25755 RECEIVE_PACKET_FIELD_ERROR(color_red);
25756 }
25757#ifdef FREECIV_JSON_CONNECTION
25758 field_addr.name = "color_green";
25759#endif /* FREECIV_JSON_CONNECTION */
25760 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
25761 RECEIVE_PACKET_FIELD_ERROR(color_green);
25762 }
25763#ifdef FREECIV_JSON_CONNECTION
25764 field_addr.name = "color_blue";
25765#endif /* FREECIV_JSON_CONNECTION */
25766 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
25767 RECEIVE_PACKET_FIELD_ERROR(color_blue);
25768 }
25769#ifdef FREECIV_JSON_CONNECTION
25770 field_addr.name = "flags";
25771#endif /* FREECIV_JSON_CONNECTION */
25772 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
25774 }
25775#ifdef FREECIV_JSON_CONNECTION
25776 field_addr.name = "wonders";
25777#endif /* FREECIV_JSON_CONNECTION */
25778 {
25779 int i;
25780
25781#ifdef FREECIV_JSON_CONNECTION
25782 /* Enter array. */
25783 field_addr.sub_location = plocation_elem_new(0);
25784#endif /* FREECIV_JSON_CONNECTION */
25785
25786 for (i = 0; i < B_LAST; i++) {
25787#ifdef FREECIV_JSON_CONNECTION
25788 field_addr.sub_location->number = i;
25789#endif /* FREECIV_JSON_CONNECTION */
25790
25791 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
25793 }
25794 }
25795
25796#ifdef FREECIV_JSON_CONNECTION
25797 /* Exit array. */
25798 FC_FREE(field_addr.sub_location);
25799#endif /* FREECIV_JSON_CONNECTION */
25800 }
25801#ifdef FREECIV_JSON_CONNECTION
25802 field_addr.name = "multip_count";
25803#endif /* FREECIV_JSON_CONNECTION */
25804 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
25805 RECEIVE_PACKET_FIELD_ERROR(multip_count);
25806 }
25807#ifdef FREECIV_JSON_CONNECTION
25808 field_addr.name = "multiplier";
25809#endif /* FREECIV_JSON_CONNECTION */
25810 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
25811 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": truncation array");
25812 }
25813 {
25814 int i;
25815
25816#ifdef FREECIV_JSON_CONNECTION
25817 /* Enter array. */
25818 field_addr.sub_location = plocation_elem_new(0);
25819#endif /* FREECIV_JSON_CONNECTION */
25820
25821 for (i = 0; i < real_packet->multip_count; i++) {
25822#ifdef FREECIV_JSON_CONNECTION
25823 field_addr.sub_location->number = i;
25824#endif /* FREECIV_JSON_CONNECTION */
25825
25826 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
25828 }
25829 }
25830
25831#ifdef FREECIV_JSON_CONNECTION
25832 /* Exit array. */
25833 FC_FREE(field_addr.sub_location);
25834#endif /* FREECIV_JSON_CONNECTION */
25835 }
25836#ifdef FREECIV_JSON_CONNECTION
25837 field_addr.name = "multiplier_target";
25838#endif /* FREECIV_JSON_CONNECTION */
25839 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
25840 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": truncation array");
25841 }
25842 {
25843 int i;
25844
25845#ifdef FREECIV_JSON_CONNECTION
25846 /* Enter array. */
25847 field_addr.sub_location = plocation_elem_new(0);
25848#endif /* FREECIV_JSON_CONNECTION */
25849
25850 for (i = 0; i < real_packet->multip_count; i++) {
25851#ifdef FREECIV_JSON_CONNECTION
25852 field_addr.sub_location->number = i;
25853#endif /* FREECIV_JSON_CONNECTION */
25854
25855 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
25856 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
25857 }
25858 }
25859
25860#ifdef FREECIV_JSON_CONNECTION
25861 /* Exit array. */
25862 FC_FREE(field_addr.sub_location);
25863#endif /* FREECIV_JSON_CONNECTION */
25864 }
25865#ifdef FREECIV_JSON_CONNECTION
25866 field_addr.name = "multiplier_changed";
25867#endif /* FREECIV_JSON_CONNECTION */
25868 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
25869 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": truncation array");
25870 }
25871 {
25872 int i;
25873
25874#ifdef FREECIV_JSON_CONNECTION
25875 /* Enter array. */
25876 field_addr.sub_location = plocation_elem_new(0);
25877#endif /* FREECIV_JSON_CONNECTION */
25878
25879 for (i = 0; i < real_packet->multip_count; i++) {
25880#ifdef FREECIV_JSON_CONNECTION
25881 field_addr.sub_location->number = i;
25882#endif /* FREECIV_JSON_CONNECTION */
25883
25884 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
25885 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
25886 }
25887 }
25888
25889#ifdef FREECIV_JSON_CONNECTION
25890 /* Exit array. */
25891 FC_FREE(field_addr.sub_location);
25892#endif /* FREECIV_JSON_CONNECTION */
25893 }
25894#endif
25895 log_packet_detailed("packet_player_info_100: got info about (%d)",
25896 real_packet->playerno);
25897
25898#ifdef FREECIV_DELTA_PROTOCOL
25899 if (NULL == *hash) {
25901 NULL, NULL, NULL, free);
25902 }
25903
25904 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
25905 *real_packet = *old;
25906 } else {
25907 int playerno;
25908
25909 playerno = real_packet->playerno;
25910
25911 log_packet_detailed(" no old info");
25912 memset(real_packet, 0, sizeof(*real_packet));
25913
25914 real_packet->playerno = playerno;
25915 }
25916
25917 if (BV_ISSET(fields, 0)) {
25918 log_packet_detailed(" got field 'name'");
25919#ifdef FREECIV_JSON_CONNECTION
25920 field_addr.name = "name";
25921#endif /* FREECIV_JSON_CONNECTION */
25922 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
25924 }
25925 }
25926 if (BV_ISSET(fields, 1)) {
25927 log_packet_detailed(" got field 'username'");
25928#ifdef FREECIV_JSON_CONNECTION
25929 field_addr.name = "username";
25930#endif /* FREECIV_JSON_CONNECTION */
25931 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
25933 }
25934 }
25935 real_packet->unassigned_user = BV_ISSET(fields, 2);
25936 if (BV_ISSET(fields, 3)) {
25937 log_packet_detailed(" got field 'score'");
25938#ifdef FREECIV_JSON_CONNECTION
25939 field_addr.name = "score";
25940#endif /* FREECIV_JSON_CONNECTION */
25941 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
25943 }
25944 }
25945 real_packet->is_male = BV_ISSET(fields, 4);
25946 real_packet->was_created = BV_ISSET(fields, 5);
25947 if (BV_ISSET(fields, 6)) {
25948 log_packet_detailed(" got field 'government'");
25949#ifdef FREECIV_JSON_CONNECTION
25950 field_addr.name = "government";
25951#endif /* FREECIV_JSON_CONNECTION */
25952 {
25953 int readin;
25954
25955 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25957 }
25958 real_packet->government = readin;
25959 }
25960 }
25961 if (BV_ISSET(fields, 7)) {
25962 log_packet_detailed(" got field 'target_government'");
25963#ifdef FREECIV_JSON_CONNECTION
25964 field_addr.name = "target_government";
25965#endif /* FREECIV_JSON_CONNECTION */
25966 {
25967 int readin;
25968
25969 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
25970 RECEIVE_PACKET_FIELD_ERROR(target_government);
25971 }
25972 real_packet->target_government = readin;
25973 }
25974 }
25975 if (BV_ISSET(fields, 8)) {
25976 log_packet_detailed(" got field 'real_embassy'");
25977#ifdef FREECIV_JSON_CONNECTION
25978 field_addr.name = "real_embassy";
25979#endif /* FREECIV_JSON_CONNECTION */
25980 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
25981 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
25982 }
25983 }
25984 if (BV_ISSET(fields, 9)) {
25985 log_packet_detailed(" got field 'mood'");
25986#ifdef FREECIV_JSON_CONNECTION
25987 field_addr.name = "mood";
25988#endif /* FREECIV_JSON_CONNECTION */
25989 {
25990 int readin;
25991
25992 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
25994 }
25995 real_packet->mood = readin;
25996 }
25997 }
25998 if (BV_ISSET(fields, 10)) {
25999 log_packet_detailed(" got field 'style'");
26000#ifdef FREECIV_JSON_CONNECTION
26001 field_addr.name = "style";
26002#endif /* FREECIV_JSON_CONNECTION */
26003 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
26005 }
26006 }
26007 if (BV_ISSET(fields, 11)) {
26008 log_packet_detailed(" got field 'music_style'");
26009#ifdef FREECIV_JSON_CONNECTION
26010 field_addr.name = "music_style";
26011#endif /* FREECIV_JSON_CONNECTION */
26012 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
26014 }
26015 }
26016 if (BV_ISSET(fields, 12)) {
26017 log_packet_detailed(" got field 'nation'");
26018#ifdef FREECIV_JSON_CONNECTION
26019 field_addr.name = "nation";
26020#endif /* FREECIV_JSON_CONNECTION */
26021 {
26022 int readin;
26023
26024 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
26026 }
26027 real_packet->nation = readin;
26028 }
26029 }
26030 if (BV_ISSET(fields, 13)) {
26031 log_packet_detailed(" got field 'team'");
26032#ifdef FREECIV_JSON_CONNECTION
26033 field_addr.name = "team";
26034#endif /* FREECIV_JSON_CONNECTION */
26035 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
26037 }
26038 }
26039 real_packet->is_ready = BV_ISSET(fields, 14);
26040 real_packet->phase_done = BV_ISSET(fields, 15);
26041 if (BV_ISSET(fields, 16)) {
26042 log_packet_detailed(" got field 'nturns_idle'");
26043#ifdef FREECIV_JSON_CONNECTION
26044 field_addr.name = "nturns_idle";
26045#endif /* FREECIV_JSON_CONNECTION */
26046 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
26047 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
26048 }
26049 }
26050 if (BV_ISSET(fields, 17)) {
26051 log_packet_detailed(" got field 'turns_alive'");
26052#ifdef FREECIV_JSON_CONNECTION
26053 field_addr.name = "turns_alive";
26054#endif /* FREECIV_JSON_CONNECTION */
26055 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
26056 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
26057 }
26058 }
26059 real_packet->is_alive = BV_ISSET(fields, 18);
26060 if (BV_ISSET(fields, 19)) {
26061 log_packet_detailed(" got field 'autoselect_weight'");
26062#ifdef FREECIV_JSON_CONNECTION
26063 field_addr.name = "autoselect_weight";
26064#endif /* FREECIV_JSON_CONNECTION */
26065 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
26066 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
26067 }
26068 }
26069 if (BV_ISSET(fields, 20)) {
26070 log_packet_detailed(" got field 'gold'");
26071#ifdef FREECIV_JSON_CONNECTION
26072 field_addr.name = "gold";
26073#endif /* FREECIV_JSON_CONNECTION */
26074 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
26076 }
26077 }
26078 if (BV_ISSET(fields, 21)) {
26079 log_packet_detailed(" got field 'tax'");
26080#ifdef FREECIV_JSON_CONNECTION
26081 field_addr.name = "tax";
26082#endif /* FREECIV_JSON_CONNECTION */
26083 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
26085 }
26086 }
26087 if (BV_ISSET(fields, 22)) {
26088 log_packet_detailed(" got field 'science'");
26089#ifdef FREECIV_JSON_CONNECTION
26090 field_addr.name = "science";
26091#endif /* FREECIV_JSON_CONNECTION */
26092 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
26094 }
26095 }
26096 if (BV_ISSET(fields, 23)) {
26097 log_packet_detailed(" got field 'luxury'");
26098#ifdef FREECIV_JSON_CONNECTION
26099 field_addr.name = "luxury";
26100#endif /* FREECIV_JSON_CONNECTION */
26101 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
26103 }
26104 }
26105 if (BV_ISSET(fields, 24)) {
26106 log_packet_detailed(" got field 'infrapoints'");
26107#ifdef FREECIV_JSON_CONNECTION
26108 field_addr.name = "infrapoints";
26109#endif /* FREECIV_JSON_CONNECTION */
26110 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
26111 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
26112 }
26113 }
26114 if (BV_ISSET(fields, 25)) {
26115 log_packet_detailed(" got field 'tech_upkeep_16'");
26116#ifdef FREECIV_JSON_CONNECTION
26117 field_addr.name = "tech_upkeep_16";
26118#endif /* FREECIV_JSON_CONNECTION */
26119 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_upkeep_16)) {
26120 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_16);
26121 }
26122 }
26123 if (BV_ISSET(fields, 26)) {
26124 log_packet_detailed(" got field 'science_cost'");
26125#ifdef FREECIV_JSON_CONNECTION
26126 field_addr.name = "science_cost";
26127#endif /* FREECIV_JSON_CONNECTION */
26128 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
26129 RECEIVE_PACKET_FIELD_ERROR(science_cost);
26130 }
26131 }
26132 real_packet->is_connected = BV_ISSET(fields, 27);
26133 if (BV_ISSET(fields, 28)) {
26134 log_packet_detailed(" got field 'revolution_finishes'");
26135#ifdef FREECIV_JSON_CONNECTION
26136 field_addr.name = "revolution_finishes";
26137#endif /* FREECIV_JSON_CONNECTION */
26138 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
26139 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
26140 }
26141 }
26142 if (BV_ISSET(fields, 29)) {
26143 log_packet_detailed(" got field 'ai_skill_level'");
26144#ifdef FREECIV_JSON_CONNECTION
26145 field_addr.name = "ai_skill_level";
26146#endif /* FREECIV_JSON_CONNECTION */
26147 {
26148 int readin;
26149
26150 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26151 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
26152 }
26153 real_packet->ai_skill_level = readin;
26154 }
26155 }
26156 if (BV_ISSET(fields, 30)) {
26157 log_packet_detailed(" got field 'barbarian_type'");
26158#ifdef FREECIV_JSON_CONNECTION
26159 field_addr.name = "barbarian_type";
26160#endif /* FREECIV_JSON_CONNECTION */
26161 {
26162 int readin;
26163
26164 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
26165 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
26166 }
26167 real_packet->barbarian_type = readin;
26168 }
26169 }
26170 if (BV_ISSET(fields, 31)) {
26171 log_packet_detailed(" got field 'gives_shared_vision'");
26172#ifdef FREECIV_JSON_CONNECTION
26173 field_addr.name = "gives_shared_vision";
26174#endif /* FREECIV_JSON_CONNECTION */
26175 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
26177 }
26178 }
26179 if (BV_ISSET(fields, 32)) {
26180 log_packet_detailed(" got field 'gives_shared_tiles'");
26181#ifdef FREECIV_JSON_CONNECTION
26182 field_addr.name = "gives_shared_tiles";
26183#endif /* FREECIV_JSON_CONNECTION */
26184 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
26186 }
26187 }
26188 if (BV_ISSET(fields, 33)) {
26189 log_packet_detailed(" got field 'history'");
26190#ifdef FREECIV_JSON_CONNECTION
26191 field_addr.name = "history";
26192#endif /* FREECIV_JSON_CONNECTION */
26193 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
26195 }
26196 }
26197 if (BV_ISSET(fields, 34)) {
26198 log_packet_detailed(" got field 'culture'");
26199#ifdef FREECIV_JSON_CONNECTION
26200 field_addr.name = "culture";
26201#endif /* FREECIV_JSON_CONNECTION */
26202 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
26204 }
26205 }
26206 if (BV_ISSET(fields, 35)) {
26207 log_packet_detailed(" got field 'love'");
26208#ifdef FREECIV_JSON_CONNECTION
26209 field_addr.name = "love";
26210#endif /* FREECIV_JSON_CONNECTION */
26211 {
26212 int i;
26213
26214#ifdef FREECIV_JSON_CONNECTION
26215 /* Enter array. */
26216 field_addr.sub_location = plocation_elem_new(0);
26217#endif /* FREECIV_JSON_CONNECTION */
26218
26219 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26220#ifdef FREECIV_JSON_CONNECTION
26221 field_addr.sub_location->number = i;
26222#endif /* FREECIV_JSON_CONNECTION */
26223
26224 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
26226 }
26227 }
26228
26229#ifdef FREECIV_JSON_CONNECTION
26230 /* Exit array. */
26231 FC_FREE(field_addr.sub_location);
26232#endif /* FREECIV_JSON_CONNECTION */
26233 }
26234 }
26235 real_packet->color_valid = BV_ISSET(fields, 36);
26236 real_packet->color_changeable = BV_ISSET(fields, 37);
26237 if (BV_ISSET(fields, 38)) {
26238 log_packet_detailed(" got field 'color_red'");
26239#ifdef FREECIV_JSON_CONNECTION
26240 field_addr.name = "color_red";
26241#endif /* FREECIV_JSON_CONNECTION */
26242 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
26243 RECEIVE_PACKET_FIELD_ERROR(color_red);
26244 }
26245 }
26246 if (BV_ISSET(fields, 39)) {
26247 log_packet_detailed(" got field 'color_green'");
26248#ifdef FREECIV_JSON_CONNECTION
26249 field_addr.name = "color_green";
26250#endif /* FREECIV_JSON_CONNECTION */
26251 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
26252 RECEIVE_PACKET_FIELD_ERROR(color_green);
26253 }
26254 }
26255 if (BV_ISSET(fields, 40)) {
26256 log_packet_detailed(" got field 'color_blue'");
26257#ifdef FREECIV_JSON_CONNECTION
26258 field_addr.name = "color_blue";
26259#endif /* FREECIV_JSON_CONNECTION */
26260 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
26261 RECEIVE_PACKET_FIELD_ERROR(color_blue);
26262 }
26263 }
26264 if (BV_ISSET(fields, 41)) {
26265 log_packet_detailed(" got field 'flags'");
26266#ifdef FREECIV_JSON_CONNECTION
26267 field_addr.name = "flags";
26268#endif /* FREECIV_JSON_CONNECTION */
26269 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
26271 }
26272 }
26273 if (BV_ISSET(fields, 42)) {
26274 log_packet_detailed(" got field 'wonders'");
26275#ifdef FREECIV_JSON_CONNECTION
26276 field_addr.name = "wonders";
26277#endif /* FREECIV_JSON_CONNECTION */
26279#ifdef FREECIV_JSON_CONNECTION
26280 /* Enter array (start at initial element). */
26281 field_addr.sub_location = plocation_elem_new(0);
26282 /* Enter diff array element (start at the index address). */
26283 field_addr.sub_location->sub_location = plocation_elem_new(0);
26284#endif /* FREECIV_JSON_CONNECTION */
26285
26286 while (TRUE) {
26287 int i;
26288
26289 /* Read next index */
26290#if B_LAST <= MAX_UINT8
26291 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
26292#else
26293 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
26294#endif
26296 }
26297
26298 if (i == B_LAST) {
26299 break;
26300 }
26301 if (i > B_LAST) {
26303 ": unexpected value %d "
26304 "(> B_LAST) in array diff",
26305 i);
26306 }
26307
26308#ifdef FREECIV_JSON_CONNECTION
26309 /* Content address. */
26310 field_addr.sub_location->sub_location->number = 1;
26311#endif /* FREECIV_JSON_CONNECTION */
26312
26313 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
26315 }
26316
26317#ifdef FREECIV_JSON_CONNECTION
26318 /* Move to the next diff array element. */
26319 field_addr.sub_location->number++;
26320 /* Back to the index address. */
26321 field_addr.sub_location->sub_location->number = 0;
26322#endif /* FREECIV_JSON_CONNECTION */
26323 }
26324
26325#ifdef FREECIV_JSON_CONNECTION
26326 /* Exit diff array element. */
26327 FC_FREE(field_addr.sub_location->sub_location);
26328 /* Exit array. */
26329 FC_FREE(field_addr.sub_location);
26330#endif /* FREECIV_JSON_CONNECTION */
26331 }
26332 if (BV_ISSET(fields, 43)) {
26333 log_packet_detailed(" got field 'multip_count'");
26334#ifdef FREECIV_JSON_CONNECTION
26335 field_addr.name = "multip_count";
26336#endif /* FREECIV_JSON_CONNECTION */
26337 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
26338 RECEIVE_PACKET_FIELD_ERROR(multip_count);
26339 }
26340 }
26341 if (BV_ISSET(fields, 44)) {
26342 log_packet_detailed(" got field 'multiplier'");
26343#ifdef FREECIV_JSON_CONNECTION
26344 field_addr.name = "multiplier";
26345#endif /* FREECIV_JSON_CONNECTION */
26346 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26347 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": truncation array");
26348 }
26349 {
26350 int i;
26351
26352#ifdef FREECIV_JSON_CONNECTION
26353 /* Enter array. */
26354 field_addr.sub_location = plocation_elem_new(0);
26355#endif /* FREECIV_JSON_CONNECTION */
26356
26357 for (i = 0; i < real_packet->multip_count; i++) {
26358#ifdef FREECIV_JSON_CONNECTION
26359 field_addr.sub_location->number = i;
26360#endif /* FREECIV_JSON_CONNECTION */
26361
26362 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
26364 }
26365 }
26366
26367#ifdef FREECIV_JSON_CONNECTION
26368 /* Exit array. */
26369 FC_FREE(field_addr.sub_location);
26370#endif /* FREECIV_JSON_CONNECTION */
26371 }
26372 }
26373 if (BV_ISSET(fields, 45)) {
26374 log_packet_detailed(" got field 'multiplier_target'");
26375#ifdef FREECIV_JSON_CONNECTION
26376 field_addr.name = "multiplier_target";
26377#endif /* FREECIV_JSON_CONNECTION */
26378 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26379 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": truncation array");
26380 }
26381 {
26382 int i;
26383
26384#ifdef FREECIV_JSON_CONNECTION
26385 /* Enter array. */
26386 field_addr.sub_location = plocation_elem_new(0);
26387#endif /* FREECIV_JSON_CONNECTION */
26388
26389 for (i = 0; i < real_packet->multip_count; i++) {
26390#ifdef FREECIV_JSON_CONNECTION
26391 field_addr.sub_location->number = i;
26392#endif /* FREECIV_JSON_CONNECTION */
26393
26394 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
26395 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
26396 }
26397 }
26398
26399#ifdef FREECIV_JSON_CONNECTION
26400 /* Exit array. */
26401 FC_FREE(field_addr.sub_location);
26402#endif /* FREECIV_JSON_CONNECTION */
26403 }
26404 }
26405 if (BV_ISSET(fields, 46)) {
26406 log_packet_detailed(" got field 'multiplier_changed'");
26407#ifdef FREECIV_JSON_CONNECTION
26408 field_addr.name = "multiplier_changed";
26409#endif /* FREECIV_JSON_CONNECTION */
26410 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
26411 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": truncation array");
26412 }
26413 {
26414 int i;
26415
26416#ifdef FREECIV_JSON_CONNECTION
26417 /* Enter array. */
26418 field_addr.sub_location = plocation_elem_new(0);
26419#endif /* FREECIV_JSON_CONNECTION */
26420
26421 for (i = 0; i < real_packet->multip_count; i++) {
26422#ifdef FREECIV_JSON_CONNECTION
26423 field_addr.sub_location->number = i;
26424#endif /* FREECIV_JSON_CONNECTION */
26425
26426 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
26427 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
26428 }
26429 }
26430
26431#ifdef FREECIV_JSON_CONNECTION
26432 /* Exit array. */
26433 FC_FREE(field_addr.sub_location);
26434#endif /* FREECIV_JSON_CONNECTION */
26435 }
26436 }
26437
26438 if (NULL == old) {
26439 old = fc_malloc(sizeof(*old));
26440 *old = *real_packet;
26441 genhash_insert(*hash, old, old);
26442 } else {
26443 *old = *real_packet;
26444 }
26445
26446#endif /* FREECIV_DELTA_PROTOCOL */
26448}
26449
26450static int send_packet_player_info_100(struct connection *pc, const struct packet_player_info *packet)
26451{
26452 const struct packet_player_info *real_packet = packet;
26453 int e;
26454#ifdef FREECIV_DELTA_PROTOCOL
26456 struct packet_player_info *old;
26457 bool differ;
26458 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_INFO;
26459 int different = 0;
26460#endif /* FREECIV_DELTA_PROTOCOL */
26462#ifdef FREECIV_JSON_CONNECTION
26463 struct plocation field_addr;
26464 {
26468 }
26469#endif /* FREECIV_JSON_CONNECTION */
26470
26471 log_packet_detailed("packet_player_info_100: sending info about (%d)",
26472 real_packet->playerno);
26473
26474#ifdef FREECIV_DELTA_PROTOCOL
26475 if (NULL == *hash) {
26477 NULL, NULL, NULL, free);
26478 }
26479 BV_CLR_ALL(fields);
26480
26481 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
26482 old = fc_malloc(sizeof(*old));
26483 *old = *real_packet;
26484 genhash_insert(*hash, old, old);
26485 memset(old, 0, sizeof(*old));
26486 different = 1; /* Force to send. */
26487 }
26488 differ = (strcmp(old->name, real_packet->name) != 0);
26489 if (differ) {
26490 different++;
26491 BV_SET(fields, 0);
26492 }
26493
26494 differ = (strcmp(old->username, real_packet->username) != 0);
26495 if (differ) {
26496 different++;
26497 BV_SET(fields, 1);
26498 }
26499
26500 differ = (old->unassigned_user != real_packet->unassigned_user);
26501 if (differ) {
26502 different++;
26503 }
26504 if (packet->unassigned_user) {
26505 BV_SET(fields, 2);
26506 }
26507
26508 differ = (old->score != real_packet->score);
26509 if (differ) {
26510 different++;
26511 BV_SET(fields, 3);
26512 }
26513
26514 differ = (old->is_male != real_packet->is_male);
26515 if (differ) {
26516 different++;
26517 }
26518 if (packet->is_male) {
26519 BV_SET(fields, 4);
26520 }
26521
26522 differ = (old->was_created != real_packet->was_created);
26523 if (differ) {
26524 different++;
26525 }
26526 if (packet->was_created) {
26527 BV_SET(fields, 5);
26528 }
26529
26530 differ = (old->government != real_packet->government);
26531 if (differ) {
26532 different++;
26533 BV_SET(fields, 6);
26534 }
26535
26536 differ = (old->target_government != real_packet->target_government);
26537 if (differ) {
26538 different++;
26539 BV_SET(fields, 7);
26540 }
26541
26542 differ = !BV_ARE_EQUAL(old->real_embassy, real_packet->real_embassy);
26543 if (differ) {
26544 different++;
26545 BV_SET(fields, 8);
26546 }
26547
26548 differ = (old->mood != real_packet->mood);
26549 if (differ) {
26550 different++;
26551 BV_SET(fields, 9);
26552 }
26553
26554 differ = (old->style != real_packet->style);
26555 if (differ) {
26556 different++;
26557 BV_SET(fields, 10);
26558 }
26559
26560 differ = (old->music_style != real_packet->music_style);
26561 if (differ) {
26562 different++;
26563 BV_SET(fields, 11);
26564 }
26565
26566 differ = (old->nation != real_packet->nation);
26567 if (differ) {
26568 different++;
26569 BV_SET(fields, 12);
26570 }
26571
26572 differ = (old->team != real_packet->team);
26573 if (differ) {
26574 different++;
26575 BV_SET(fields, 13);
26576 }
26577
26578 differ = (old->is_ready != real_packet->is_ready);
26579 if (differ) {
26580 different++;
26581 }
26582 if (packet->is_ready) {
26583 BV_SET(fields, 14);
26584 }
26585
26586 differ = (old->phase_done != real_packet->phase_done);
26587 if (differ) {
26588 different++;
26589 }
26590 if (packet->phase_done) {
26591 BV_SET(fields, 15);
26592 }
26593
26594 differ = (old->nturns_idle != real_packet->nturns_idle);
26595 if (differ) {
26596 different++;
26597 BV_SET(fields, 16);
26598 }
26599
26600 differ = (old->turns_alive != real_packet->turns_alive);
26601 if (differ) {
26602 different++;
26603 BV_SET(fields, 17);
26604 }
26605
26606 differ = (old->is_alive != real_packet->is_alive);
26607 if (differ) {
26608 different++;
26609 }
26610 if (packet->is_alive) {
26611 BV_SET(fields, 18);
26612 }
26613
26614 differ = (old->autoselect_weight != real_packet->autoselect_weight);
26615 if (differ) {
26616 different++;
26617 BV_SET(fields, 19);
26618 }
26619
26620 differ = (old->gold != real_packet->gold);
26621 if (differ) {
26622 different++;
26623 BV_SET(fields, 20);
26624 }
26625
26626 differ = (old->tax != real_packet->tax);
26627 if (differ) {
26628 different++;
26629 BV_SET(fields, 21);
26630 }
26631
26632 differ = (old->science != real_packet->science);
26633 if (differ) {
26634 different++;
26635 BV_SET(fields, 22);
26636 }
26637
26638 differ = (old->luxury != real_packet->luxury);
26639 if (differ) {
26640 different++;
26641 BV_SET(fields, 23);
26642 }
26643
26644 differ = (old->infrapoints != real_packet->infrapoints);
26645 if (differ) {
26646 different++;
26647 BV_SET(fields, 24);
26648 }
26649
26650 differ = (old->tech_upkeep_16 != real_packet->tech_upkeep_16);
26651 if (differ) {
26652 different++;
26653 BV_SET(fields, 25);
26654 }
26655
26656 differ = (old->science_cost != real_packet->science_cost);
26657 if (differ) {
26658 different++;
26659 BV_SET(fields, 26);
26660 }
26661
26662 differ = (old->is_connected != real_packet->is_connected);
26663 if (differ) {
26664 different++;
26665 }
26666 if (packet->is_connected) {
26667 BV_SET(fields, 27);
26668 }
26669
26670 differ = (old->revolution_finishes != real_packet->revolution_finishes);
26671 if (differ) {
26672 different++;
26673 BV_SET(fields, 28);
26674 }
26675
26676 differ = (old->ai_skill_level != real_packet->ai_skill_level);
26677 if (differ) {
26678 different++;
26679 BV_SET(fields, 29);
26680 }
26681
26682 differ = (old->barbarian_type != real_packet->barbarian_type);
26683 if (differ) {
26684 different++;
26685 BV_SET(fields, 30);
26686 }
26687
26688 differ = !BV_ARE_EQUAL(old->gives_shared_vision, real_packet->gives_shared_vision);
26689 if (differ) {
26690 different++;
26691 BV_SET(fields, 31);
26692 }
26693
26694 differ = !BV_ARE_EQUAL(old->gives_shared_tiles, real_packet->gives_shared_tiles);
26695 if (differ) {
26696 different++;
26697 BV_SET(fields, 32);
26698 }
26699
26700 differ = (old->history != real_packet->history);
26701 if (differ) {
26702 different++;
26703 BV_SET(fields, 33);
26704 }
26705
26706 differ = (old->culture != real_packet->culture);
26707 if (differ) {
26708 different++;
26709 BV_SET(fields, 34);
26710 }
26711
26712 differ = FALSE;
26713 {
26714 int i;
26715
26716 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
26717 differ = (old->love[i] != real_packet->love[i]);
26718 if (differ) {
26719 break;
26720 }
26721 }
26722 }
26723 if (differ) {
26724 different++;
26725 BV_SET(fields, 35);
26726 }
26727
26728 differ = (old->color_valid != real_packet->color_valid);
26729 if (differ) {
26730 different++;
26731 }
26732 if (packet->color_valid) {
26733 BV_SET(fields, 36);
26734 }
26735
26736 differ = (old->color_changeable != real_packet->color_changeable);
26737 if (differ) {
26738 different++;
26739 }
26740 if (packet->color_changeable) {
26741 BV_SET(fields, 37);
26742 }
26743
26744 differ = (old->color_red != real_packet->color_red);
26745 if (differ) {
26746 different++;
26747 BV_SET(fields, 38);
26748 }
26749
26750 differ = (old->color_green != real_packet->color_green);
26751 if (differ) {
26752 different++;
26753 BV_SET(fields, 39);
26754 }
26755
26756 differ = (old->color_blue != real_packet->color_blue);
26757 if (differ) {
26758 different++;
26759 BV_SET(fields, 40);
26760 }
26761
26762 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
26763 if (differ) {
26764 different++;
26765 BV_SET(fields, 41);
26766 }
26767
26768 differ = FALSE;
26769 {
26770 int i;
26771
26772 for (i = 0; i < B_LAST; i++) {
26773 differ = (old->wonders[i] != real_packet->wonders[i]);
26774 if (differ) {
26775 break;
26776 }
26777 }
26778 }
26779 if (differ) {
26780 different++;
26781 BV_SET(fields, 42);
26782 }
26783
26784 differ = (old->multip_count != real_packet->multip_count);
26785 if (differ) {
26786 different++;
26787 BV_SET(fields, 43);
26788 }
26789
26790 differ = (old->multip_count != real_packet->multip_count);
26791 if (!differ) {
26792 int i;
26793
26794 for (i = 0; i < real_packet->multip_count; i++) {
26795 differ = (old->multiplier[i] != real_packet->multiplier[i]);
26796 if (differ) {
26797 break;
26798 }
26799 }
26800 }
26801 if (differ) {
26802 different++;
26803 BV_SET(fields, 44);
26804 }
26805
26806 differ = (old->multip_count != real_packet->multip_count);
26807 if (!differ) {
26808 int i;
26809
26810 for (i = 0; i < real_packet->multip_count; i++) {
26811 differ = (old->multiplier_target[i] != real_packet->multiplier_target[i]);
26812 if (differ) {
26813 break;
26814 }
26815 }
26816 }
26817 if (differ) {
26818 different++;
26819 BV_SET(fields, 45);
26820 }
26821
26822 differ = (old->multip_count != real_packet->multip_count);
26823 if (!differ) {
26824 int i;
26825
26826 for (i = 0; i < real_packet->multip_count; i++) {
26827 differ = (old->multiplier_changed[i] != real_packet->multiplier_changed[i]);
26828 if (differ) {
26829 break;
26830 }
26831 }
26832 }
26833 if (differ) {
26834 different++;
26835 BV_SET(fields, 46);
26836 }
26837
26838 if (different == 0) {
26839 log_packet_detailed(" no change -> discard");
26841 }
26842
26843#ifdef FREECIV_JSON_CONNECTION
26844 field_addr.name = "fields";
26845#endif /* FREECIV_JSON_CONNECTION */
26846 e = 0;
26847 e |= DIO_BV_PUT(&dout, &field_addr, fields);
26848 if (e) {
26849 log_packet_detailed("fields bitvector error detected");
26850 }
26851#ifdef FREECIV_JSON_CONNECTION
26852 field_addr.name = "playerno";
26853#endif /* FREECIV_JSON_CONNECTION */
26854 e = 0;
26855 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
26856 if (e) {
26857 log_packet_detailed("'playerno' field error detected");
26858 }
26859
26860 if (BV_ISSET(fields, 0)) {
26861 log_packet_detailed(" field 'name' has changed");
26862#ifdef FREECIV_JSON_CONNECTION
26863 field_addr.name = "name";
26864#endif /* FREECIV_JSON_CONNECTION */
26865 e = 0;
26866 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
26867 if (e) {
26868 log_packet_detailed("'name' field error detected");
26869 }
26870 }
26871 if (BV_ISSET(fields, 1)) {
26872 log_packet_detailed(" field 'username' has changed");
26873#ifdef FREECIV_JSON_CONNECTION
26874 field_addr.name = "username";
26875#endif /* FREECIV_JSON_CONNECTION */
26876 e = 0;
26877 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
26878 if (e) {
26879 log_packet_detailed("'username' field error detected");
26880 }
26881 }
26882 /* field 2 is folded into the header */
26883 if (BV_ISSET(fields, 3)) {
26884 log_packet_detailed(" field 'score' has changed");
26885#ifdef FREECIV_JSON_CONNECTION
26886 field_addr.name = "score";
26887#endif /* FREECIV_JSON_CONNECTION */
26888 e = 0;
26889 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
26890 if (e) {
26891 log_packet_detailed("'score' field error detected");
26892 }
26893 }
26894 /* field 4 is folded into the header */
26895 /* field 5 is folded into the header */
26896 if (BV_ISSET(fields, 6)) {
26897 log_packet_detailed(" field 'government' has changed");
26898#ifdef FREECIV_JSON_CONNECTION
26899 field_addr.name = "government";
26900#endif /* FREECIV_JSON_CONNECTION */
26901 e = 0;
26902 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
26903 if (e) {
26904 log_packet_detailed("'government' field error detected");
26905 }
26906 }
26907 if (BV_ISSET(fields, 7)) {
26908 log_packet_detailed(" field 'target_government' has changed");
26909#ifdef FREECIV_JSON_CONNECTION
26910 field_addr.name = "target_government";
26911#endif /* FREECIV_JSON_CONNECTION */
26912 e = 0;
26913 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
26914 if (e) {
26915 log_packet_detailed("'target_government' field error detected");
26916 }
26917 }
26918 if (BV_ISSET(fields, 8)) {
26919 log_packet_detailed(" field 'real_embassy' has changed");
26920#ifdef FREECIV_JSON_CONNECTION
26921 field_addr.name = "real_embassy";
26922#endif /* FREECIV_JSON_CONNECTION */
26923 e = 0;
26924 e |= DIO_BV_PUT(&dout, &field_addr, packet->real_embassy);
26925 if (e) {
26926 log_packet_detailed("'real_embassy' field error detected");
26927 }
26928 }
26929 if (BV_ISSET(fields, 9)) {
26930 log_packet_detailed(" field 'mood' has changed");
26931#ifdef FREECIV_JSON_CONNECTION
26932 field_addr.name = "mood";
26933#endif /* FREECIV_JSON_CONNECTION */
26934 e = 0;
26935 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
26936 if (e) {
26937 log_packet_detailed("'mood' field error detected");
26938 }
26939 }
26940 if (BV_ISSET(fields, 10)) {
26941 log_packet_detailed(" field 'style' has changed");
26942#ifdef FREECIV_JSON_CONNECTION
26943 field_addr.name = "style";
26944#endif /* FREECIV_JSON_CONNECTION */
26945 e = 0;
26946 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
26947 if (e) {
26948 log_packet_detailed("'style' field error detected");
26949 }
26950 }
26951 if (BV_ISSET(fields, 11)) {
26952 log_packet_detailed(" field 'music_style' has changed");
26953#ifdef FREECIV_JSON_CONNECTION
26954 field_addr.name = "music_style";
26955#endif /* FREECIV_JSON_CONNECTION */
26956 e = 0;
26957 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
26958 if (e) {
26959 log_packet_detailed("'music_style' field error detected");
26960 }
26961 }
26962 if (BV_ISSET(fields, 12)) {
26963 log_packet_detailed(" field 'nation' has changed");
26964#ifdef FREECIV_JSON_CONNECTION
26965 field_addr.name = "nation";
26966#endif /* FREECIV_JSON_CONNECTION */
26967 e = 0;
26968 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
26969 if (e) {
26970 log_packet_detailed("'nation' field error detected");
26971 }
26972 }
26973 if (BV_ISSET(fields, 13)) {
26974 log_packet_detailed(" field 'team' has changed");
26975#ifdef FREECIV_JSON_CONNECTION
26976 field_addr.name = "team";
26977#endif /* FREECIV_JSON_CONNECTION */
26978 e = 0;
26979 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
26980 if (e) {
26981 log_packet_detailed("'team' field error detected");
26982 }
26983 }
26984 /* field 14 is folded into the header */
26985 /* field 15 is folded into the header */
26986 if (BV_ISSET(fields, 16)) {
26987 log_packet_detailed(" field 'nturns_idle' has changed");
26988#ifdef FREECIV_JSON_CONNECTION
26989 field_addr.name = "nturns_idle";
26990#endif /* FREECIV_JSON_CONNECTION */
26991 e = 0;
26992 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
26993 if (e) {
26994 log_packet_detailed("'nturns_idle' field error detected");
26995 }
26996 }
26997 if (BV_ISSET(fields, 17)) {
26998 log_packet_detailed(" field 'turns_alive' has changed");
26999#ifdef FREECIV_JSON_CONNECTION
27000 field_addr.name = "turns_alive";
27001#endif /* FREECIV_JSON_CONNECTION */
27002 e = 0;
27003 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
27004 if (e) {
27005 log_packet_detailed("'turns_alive' field error detected");
27006 }
27007 }
27008 /* field 18 is folded into the header */
27009 if (BV_ISSET(fields, 19)) {
27010 log_packet_detailed(" field 'autoselect_weight' has changed");
27011#ifdef FREECIV_JSON_CONNECTION
27012 field_addr.name = "autoselect_weight";
27013#endif /* FREECIV_JSON_CONNECTION */
27014 e = 0;
27015 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
27016 if (e) {
27017 log_packet_detailed("'autoselect_weight' field error detected");
27018 }
27019 }
27020 if (BV_ISSET(fields, 20)) {
27021 log_packet_detailed(" field 'gold' has changed");
27022#ifdef FREECIV_JSON_CONNECTION
27023 field_addr.name = "gold";
27024#endif /* FREECIV_JSON_CONNECTION */
27025 e = 0;
27026 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
27027 if (e) {
27028 log_packet_detailed("'gold' field error detected");
27029 }
27030 }
27031 if (BV_ISSET(fields, 21)) {
27032 log_packet_detailed(" field 'tax' has changed");
27033#ifdef FREECIV_JSON_CONNECTION
27034 field_addr.name = "tax";
27035#endif /* FREECIV_JSON_CONNECTION */
27036 e = 0;
27037 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
27038 if (e) {
27039 log_packet_detailed("'tax' field error detected");
27040 }
27041 }
27042 if (BV_ISSET(fields, 22)) {
27043 log_packet_detailed(" field 'science' has changed");
27044#ifdef FREECIV_JSON_CONNECTION
27045 field_addr.name = "science";
27046#endif /* FREECIV_JSON_CONNECTION */
27047 e = 0;
27048 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
27049 if (e) {
27050 log_packet_detailed("'science' field error detected");
27051 }
27052 }
27053 if (BV_ISSET(fields, 23)) {
27054 log_packet_detailed(" field 'luxury' has changed");
27055#ifdef FREECIV_JSON_CONNECTION
27056 field_addr.name = "luxury";
27057#endif /* FREECIV_JSON_CONNECTION */
27058 e = 0;
27059 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
27060 if (e) {
27061 log_packet_detailed("'luxury' field error detected");
27062 }
27063 }
27064 if (BV_ISSET(fields, 24)) {
27065 log_packet_detailed(" field 'infrapoints' has changed");
27066#ifdef FREECIV_JSON_CONNECTION
27067 field_addr.name = "infrapoints";
27068#endif /* FREECIV_JSON_CONNECTION */
27069 e = 0;
27070 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
27071 if (e) {
27072 log_packet_detailed("'infrapoints' field error detected");
27073 }
27074 }
27075 if (BV_ISSET(fields, 25)) {
27076 log_packet_detailed(" field 'tech_upkeep_16' has changed");
27077#ifdef FREECIV_JSON_CONNECTION
27078 field_addr.name = "tech_upkeep_16";
27079#endif /* FREECIV_JSON_CONNECTION */
27080 e = 0;
27081 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_16);
27082 if (e) {
27083 log_packet_detailed("'tech_upkeep_16' field error detected");
27084 }
27085 }
27086 if (BV_ISSET(fields, 26)) {
27087 log_packet_detailed(" field 'science_cost' has changed");
27088#ifdef FREECIV_JSON_CONNECTION
27089 field_addr.name = "science_cost";
27090#endif /* FREECIV_JSON_CONNECTION */
27091 e = 0;
27092 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
27093 if (e) {
27094 log_packet_detailed("'science_cost' field error detected");
27095 }
27096 }
27097 /* field 27 is folded into the header */
27098 if (BV_ISSET(fields, 28)) {
27099 log_packet_detailed(" field 'revolution_finishes' has changed");
27100#ifdef FREECIV_JSON_CONNECTION
27101 field_addr.name = "revolution_finishes";
27102#endif /* FREECIV_JSON_CONNECTION */
27103 e = 0;
27104 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
27105 if (e) {
27106 log_packet_detailed("'revolution_finishes' field error detected");
27107 }
27108 }
27109 if (BV_ISSET(fields, 29)) {
27110 log_packet_detailed(" field 'ai_skill_level' has changed");
27111#ifdef FREECIV_JSON_CONNECTION
27112 field_addr.name = "ai_skill_level";
27113#endif /* FREECIV_JSON_CONNECTION */
27114 e = 0;
27115 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
27116 if (e) {
27117 log_packet_detailed("'ai_skill_level' field error detected");
27118 }
27119 }
27120 if (BV_ISSET(fields, 30)) {
27121 log_packet_detailed(" field 'barbarian_type' has changed");
27122#ifdef FREECIV_JSON_CONNECTION
27123 field_addr.name = "barbarian_type";
27124#endif /* FREECIV_JSON_CONNECTION */
27125 e = 0;
27126 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
27127 if (e) {
27128 log_packet_detailed("'barbarian_type' field error detected");
27129 }
27130 }
27131 if (BV_ISSET(fields, 31)) {
27132 log_packet_detailed(" field 'gives_shared_vision' has changed");
27133#ifdef FREECIV_JSON_CONNECTION
27134 field_addr.name = "gives_shared_vision";
27135#endif /* FREECIV_JSON_CONNECTION */
27136 e = 0;
27138 if (e) {
27139 log_packet_detailed("'gives_shared_vision' field error detected");
27140 }
27141 }
27142 if (BV_ISSET(fields, 32)) {
27143 log_packet_detailed(" field 'gives_shared_tiles' has changed");
27144#ifdef FREECIV_JSON_CONNECTION
27145 field_addr.name = "gives_shared_tiles";
27146#endif /* FREECIV_JSON_CONNECTION */
27147 e = 0;
27148 e |= DIO_BV_PUT(&dout, &field_addr, packet->gives_shared_tiles);
27149 if (e) {
27150 log_packet_detailed("'gives_shared_tiles' field error detected");
27151 }
27152 }
27153 if (BV_ISSET(fields, 33)) {
27154 log_packet_detailed(" field 'history' has changed");
27155#ifdef FREECIV_JSON_CONNECTION
27156 field_addr.name = "history";
27157#endif /* FREECIV_JSON_CONNECTION */
27158 e = 0;
27159 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
27160 if (e) {
27161 log_packet_detailed("'history' field error detected");
27162 }
27163 }
27164 if (BV_ISSET(fields, 34)) {
27165 log_packet_detailed(" field 'culture' has changed");
27166#ifdef FREECIV_JSON_CONNECTION
27167 field_addr.name = "culture";
27168#endif /* FREECIV_JSON_CONNECTION */
27169 e = 0;
27170 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
27171 if (e) {
27172 log_packet_detailed("'culture' field error detected");
27173 }
27174 }
27175 if (BV_ISSET(fields, 35)) {
27176 log_packet_detailed(" field 'love' has changed");
27177#ifdef FREECIV_JSON_CONNECTION
27178 field_addr.name = "love";
27179#endif /* FREECIV_JSON_CONNECTION */
27180 e = 0;
27181 {
27182 int i;
27183
27184#ifdef FREECIV_JSON_CONNECTION
27185 /* Create the array. */
27187
27188 /* Enter the array. */
27189 field_addr.sub_location = plocation_elem_new(0);
27190#endif /* FREECIV_JSON_CONNECTION */
27191
27192 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
27193#ifdef FREECIV_JSON_CONNECTION
27194 /* Next array element. */
27195 field_addr.sub_location->number = i;
27196#endif /* FREECIV_JSON_CONNECTION */
27197
27198 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
27199 }
27200
27201#ifdef FREECIV_JSON_CONNECTION
27202 /* Exit array. */
27203 FC_FREE(field_addr.sub_location);
27204#endif /* FREECIV_JSON_CONNECTION */
27205 }
27206 if (e) {
27207 log_packet_detailed("'love' field error detected");
27208 }
27209 }
27210 /* field 36 is folded into the header */
27211 /* field 37 is folded into the header */
27212 if (BV_ISSET(fields, 38)) {
27213 log_packet_detailed(" field 'color_red' has changed");
27214#ifdef FREECIV_JSON_CONNECTION
27215 field_addr.name = "color_red";
27216#endif /* FREECIV_JSON_CONNECTION */
27217 e = 0;
27218 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
27219 if (e) {
27220 log_packet_detailed("'color_red' field error detected");
27221 }
27222 }
27223 if (BV_ISSET(fields, 39)) {
27224 log_packet_detailed(" field 'color_green' has changed");
27225#ifdef FREECIV_JSON_CONNECTION
27226 field_addr.name = "color_green";
27227#endif /* FREECIV_JSON_CONNECTION */
27228 e = 0;
27229 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
27230 if (e) {
27231 log_packet_detailed("'color_green' field error detected");
27232 }
27233 }
27234 if (BV_ISSET(fields, 40)) {
27235 log_packet_detailed(" field 'color_blue' has changed");
27236#ifdef FREECIV_JSON_CONNECTION
27237 field_addr.name = "color_blue";
27238#endif /* FREECIV_JSON_CONNECTION */
27239 e = 0;
27240 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
27241 if (e) {
27242 log_packet_detailed("'color_blue' field error detected");
27243 }
27244 }
27245 if (BV_ISSET(fields, 41)) {
27246 log_packet_detailed(" field 'flags' has changed");
27247#ifdef FREECIV_JSON_CONNECTION
27248 field_addr.name = "flags";
27249#endif /* FREECIV_JSON_CONNECTION */
27250 e = 0;
27251 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
27252 if (e) {
27253 log_packet_detailed("'flags' field error detected");
27254 }
27255 }
27256 if (BV_ISSET(fields, 42)) {
27257 log_packet_detailed(" field 'wonders' has changed");
27258#ifdef FREECIV_JSON_CONNECTION
27259 field_addr.name = "wonders";
27260#endif /* FREECIV_JSON_CONNECTION */
27261 e = 0;
27263 {
27264 int i;
27265
27266#ifdef FREECIV_JSON_CONNECTION
27267 size_t count_i = 0;
27268
27269 /* Create the array. */
27270 e |= DIO_PUT(farray, &dout, &field_addr, 0);
27271
27272 /* Enter array. */
27273 field_addr.sub_location = plocation_elem_new(0);
27274#endif /* FREECIV_JSON_CONNECTION */
27275
27276 for (i = 0; i < B_LAST; i++) {
27277 differ = (old->wonders[i] != real_packet->wonders[i]);
27278
27279 if (differ) {
27280#ifdef FREECIV_JSON_CONNECTION
27281 /* Append next diff array element. */
27282 field_addr.sub_location->number = -1;
27283
27284 /* Create the diff array element. */
27285 e |= DIO_PUT(farray, &dout, &field_addr, 2);
27286
27287 /* Enter diff array element (start at the index address). */
27288 field_addr.sub_location->number = count_i++;
27289 field_addr.sub_location->sub_location = plocation_elem_new(0);
27290#endif /* FREECIV_JSON_CONNECTION */
27291
27292 /* Write the index */
27293#if B_LAST <= MAX_UINT8
27294 e |= DIO_PUT(uint8, &dout, &field_addr, i);
27295#else
27296 e |= DIO_PUT(uint16, &dout, &field_addr, i);
27297#endif
27298
27299#ifdef FREECIV_JSON_CONNECTION
27300 /* Content address. */
27301 field_addr.sub_location->sub_location->number = 1;
27302#endif /* FREECIV_JSON_CONNECTION */
27303
27304 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
27305
27306#ifdef FREECIV_JSON_CONNECTION
27307 /* Exit diff array element. */
27308 FC_FREE(field_addr.sub_location->sub_location);
27309#endif /* FREECIV_JSON_CONNECTION */
27310 }
27311 }
27312
27313#ifdef FREECIV_JSON_CONNECTION
27314 /* Append diff array element. */
27315 field_addr.sub_location->number = -1;
27316
27317 /* Create the terminating diff array element. */
27318 e |= DIO_PUT(farray, &dout, &field_addr, 1);
27319
27320 /* Enter diff array element (start at the index address). */
27321 field_addr.sub_location->number = count_i;
27322 field_addr.sub_location->sub_location = plocation_elem_new(0);
27323#endif /* FREECIV_JSON_CONNECTION */
27324
27325 /* Write the sentinel value */
27326#if B_LAST <= MAX_UINT8
27327 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
27328#else
27329 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
27330#endif
27331
27332#ifdef FREECIV_JSON_CONNECTION
27333 /* Exit diff array element. */
27334 FC_FREE(field_addr.sub_location->sub_location);
27335
27336 /* Exit array. */
27337 FC_FREE(field_addr.sub_location);
27338#endif /* FREECIV_JSON_CONNECTION */
27339 }
27340 if (e) {
27341 log_packet_detailed("'wonders' field error detected");
27342 }
27343 }
27344 if (BV_ISSET(fields, 43)) {
27345 log_packet_detailed(" field 'multip_count' has changed");
27346#ifdef FREECIV_JSON_CONNECTION
27347 field_addr.name = "multip_count";
27348#endif /* FREECIV_JSON_CONNECTION */
27349 e = 0;
27350 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
27351 if (e) {
27352 log_packet_detailed("'multip_count' field error detected");
27353 }
27354 }
27355 if (BV_ISSET(fields, 44)) {
27356 log_packet_detailed(" field 'multiplier' has changed");
27357#ifdef FREECIV_JSON_CONNECTION
27358 field_addr.name = "multiplier";
27359#endif /* FREECIV_JSON_CONNECTION */
27360 e = 0;
27361 {
27362 int i;
27363
27364#ifdef FREECIV_JSON_CONNECTION
27365 /* Create the array. */
27366 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27367
27368 /* Enter the array. */
27369 field_addr.sub_location = plocation_elem_new(0);
27370#endif /* FREECIV_JSON_CONNECTION */
27371
27372 for (i = 0; i < real_packet->multip_count; i++) {
27373#ifdef FREECIV_JSON_CONNECTION
27374 /* Next array element. */
27375 field_addr.sub_location->number = i;
27376#endif /* FREECIV_JSON_CONNECTION */
27377
27378 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
27379 }
27380
27381#ifdef FREECIV_JSON_CONNECTION
27382 /* Exit array. */
27383 FC_FREE(field_addr.sub_location);
27384#endif /* FREECIV_JSON_CONNECTION */
27385 }
27386 if (e) {
27387 log_packet_detailed("'multiplier' field error detected");
27388 }
27389 }
27390 if (BV_ISSET(fields, 45)) {
27391 log_packet_detailed(" field 'multiplier_target' has changed");
27392#ifdef FREECIV_JSON_CONNECTION
27393 field_addr.name = "multiplier_target";
27394#endif /* FREECIV_JSON_CONNECTION */
27395 e = 0;
27396 {
27397 int i;
27398
27399#ifdef FREECIV_JSON_CONNECTION
27400 /* Create the array. */
27401 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27402
27403 /* Enter the array. */
27404 field_addr.sub_location = plocation_elem_new(0);
27405#endif /* FREECIV_JSON_CONNECTION */
27406
27407 for (i = 0; i < real_packet->multip_count; i++) {
27408#ifdef FREECIV_JSON_CONNECTION
27409 /* Next array element. */
27410 field_addr.sub_location->number = i;
27411#endif /* FREECIV_JSON_CONNECTION */
27412
27413 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
27414 }
27415
27416#ifdef FREECIV_JSON_CONNECTION
27417 /* Exit array. */
27418 FC_FREE(field_addr.sub_location);
27419#endif /* FREECIV_JSON_CONNECTION */
27420 }
27421 if (e) {
27422 log_packet_detailed("'multiplier_target' field error detected");
27423 }
27424 }
27425 if (BV_ISSET(fields, 46)) {
27426 log_packet_detailed(" field 'multiplier_changed' has changed");
27427#ifdef FREECIV_JSON_CONNECTION
27428 field_addr.name = "multiplier_changed";
27429#endif /* FREECIV_JSON_CONNECTION */
27430 e = 0;
27431 {
27432 int i;
27433
27434#ifdef FREECIV_JSON_CONNECTION
27435 /* Create the array. */
27436 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27437
27438 /* Enter the array. */
27439 field_addr.sub_location = plocation_elem_new(0);
27440#endif /* FREECIV_JSON_CONNECTION */
27441
27442 for (i = 0; i < real_packet->multip_count; i++) {
27443#ifdef FREECIV_JSON_CONNECTION
27444 /* Next array element. */
27445 field_addr.sub_location->number = i;
27446#endif /* FREECIV_JSON_CONNECTION */
27447
27448 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
27449 }
27450
27451#ifdef FREECIV_JSON_CONNECTION
27452 /* Exit array. */
27453 FC_FREE(field_addr.sub_location);
27454#endif /* FREECIV_JSON_CONNECTION */
27455 }
27456 if (e) {
27457 log_packet_detailed("'multiplier_changed' field error detected");
27458 }
27459 }
27460
27461 *old = *real_packet;
27462#endif /* FREECIV_DELTA_PROTOCOL */
27463#ifndef FREECIV_DELTA_PROTOCOL
27464#ifdef FREECIV_JSON_CONNECTION
27465 field_addr.name = "playerno";
27466#endif /* FREECIV_JSON_CONNECTION */
27467 e = 0;
27468 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
27469 if (e) {
27470 log_packet_detailed("'playerno' field error detected");
27471 }
27472#ifdef FREECIV_JSON_CONNECTION
27473 field_addr.name = "name";
27474#endif /* FREECIV_JSON_CONNECTION */
27475 e = 0;
27476 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
27477 if (e) {
27478 log_packet_detailed("'name' field error detected");
27479 }
27480#ifdef FREECIV_JSON_CONNECTION
27481 field_addr.name = "username";
27482#endif /* FREECIV_JSON_CONNECTION */
27483 e = 0;
27484 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
27485 if (e) {
27486 log_packet_detailed("'username' field error detected");
27487 }
27488#ifdef FREECIV_JSON_CONNECTION
27489 field_addr.name = "unassigned_user";
27490#endif /* FREECIV_JSON_CONNECTION */
27491 e = 0;
27492 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unassigned_user);
27493 if (e) {
27494 log_packet_detailed("'unassigned_user' field error detected");
27495 }
27496#ifdef FREECIV_JSON_CONNECTION
27497 field_addr.name = "score";
27498#endif /* FREECIV_JSON_CONNECTION */
27499 e = 0;
27500 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
27501 if (e) {
27502 log_packet_detailed("'score' field error detected");
27503 }
27504#ifdef FREECIV_JSON_CONNECTION
27505 field_addr.name = "is_male";
27506#endif /* FREECIV_JSON_CONNECTION */
27507 e = 0;
27508 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
27509 if (e) {
27510 log_packet_detailed("'is_male' field error detected");
27511 }
27512#ifdef FREECIV_JSON_CONNECTION
27513 field_addr.name = "was_created";
27514#endif /* FREECIV_JSON_CONNECTION */
27515 e = 0;
27516 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_created);
27517 if (e) {
27518 log_packet_detailed("'was_created' field error detected");
27519 }
27520#ifdef FREECIV_JSON_CONNECTION
27521 field_addr.name = "government";
27522#endif /* FREECIV_JSON_CONNECTION */
27523 e = 0;
27524 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
27525 if (e) {
27526 log_packet_detailed("'government' field error detected");
27527 }
27528#ifdef FREECIV_JSON_CONNECTION
27529 field_addr.name = "target_government";
27530#endif /* FREECIV_JSON_CONNECTION */
27531 e = 0;
27532 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
27533 if (e) {
27534 log_packet_detailed("'target_government' field error detected");
27535 }
27536#ifdef FREECIV_JSON_CONNECTION
27537 field_addr.name = "real_embassy";
27538#endif /* FREECIV_JSON_CONNECTION */
27539 e = 0;
27540 e |= DIO_BV_PUT(&dout, &field_addr, packet->real_embassy);
27541 if (e) {
27542 log_packet_detailed("'real_embassy' field error detected");
27543 }
27544#ifdef FREECIV_JSON_CONNECTION
27545 field_addr.name = "mood";
27546#endif /* FREECIV_JSON_CONNECTION */
27547 e = 0;
27548 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
27549 if (e) {
27550 log_packet_detailed("'mood' field error detected");
27551 }
27552#ifdef FREECIV_JSON_CONNECTION
27553 field_addr.name = "style";
27554#endif /* FREECIV_JSON_CONNECTION */
27555 e = 0;
27556 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
27557 if (e) {
27558 log_packet_detailed("'style' field error detected");
27559 }
27560#ifdef FREECIV_JSON_CONNECTION
27561 field_addr.name = "music_style";
27562#endif /* FREECIV_JSON_CONNECTION */
27563 e = 0;
27564 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
27565 if (e) {
27566 log_packet_detailed("'music_style' field error detected");
27567 }
27568#ifdef FREECIV_JSON_CONNECTION
27569 field_addr.name = "nation";
27570#endif /* FREECIV_JSON_CONNECTION */
27571 e = 0;
27572 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
27573 if (e) {
27574 log_packet_detailed("'nation' field error detected");
27575 }
27576#ifdef FREECIV_JSON_CONNECTION
27577 field_addr.name = "team";
27578#endif /* FREECIV_JSON_CONNECTION */
27579 e = 0;
27580 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
27581 if (e) {
27582 log_packet_detailed("'team' field error detected");
27583 }
27584#ifdef FREECIV_JSON_CONNECTION
27585 field_addr.name = "is_ready";
27586#endif /* FREECIV_JSON_CONNECTION */
27587 e = 0;
27588 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
27589 if (e) {
27590 log_packet_detailed("'is_ready' field error detected");
27591 }
27592#ifdef FREECIV_JSON_CONNECTION
27593 field_addr.name = "phase_done";
27594#endif /* FREECIV_JSON_CONNECTION */
27595 e = 0;
27596 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
27597 if (e) {
27598 log_packet_detailed("'phase_done' field error detected");
27599 }
27600#ifdef FREECIV_JSON_CONNECTION
27601 field_addr.name = "nturns_idle";
27602#endif /* FREECIV_JSON_CONNECTION */
27603 e = 0;
27604 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
27605 if (e) {
27606 log_packet_detailed("'nturns_idle' field error detected");
27607 }
27608#ifdef FREECIV_JSON_CONNECTION
27609 field_addr.name = "turns_alive";
27610#endif /* FREECIV_JSON_CONNECTION */
27611 e = 0;
27612 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
27613 if (e) {
27614 log_packet_detailed("'turns_alive' field error detected");
27615 }
27616#ifdef FREECIV_JSON_CONNECTION
27617 field_addr.name = "is_alive";
27618#endif /* FREECIV_JSON_CONNECTION */
27619 e = 0;
27620 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
27621 if (e) {
27622 log_packet_detailed("'is_alive' field error detected");
27623 }
27624#ifdef FREECIV_JSON_CONNECTION
27625 field_addr.name = "autoselect_weight";
27626#endif /* FREECIV_JSON_CONNECTION */
27627 e = 0;
27628 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
27629 if (e) {
27630 log_packet_detailed("'autoselect_weight' field error detected");
27631 }
27632#ifdef FREECIV_JSON_CONNECTION
27633 field_addr.name = "gold";
27634#endif /* FREECIV_JSON_CONNECTION */
27635 e = 0;
27636 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
27637 if (e) {
27638 log_packet_detailed("'gold' field error detected");
27639 }
27640#ifdef FREECIV_JSON_CONNECTION
27641 field_addr.name = "tax";
27642#endif /* FREECIV_JSON_CONNECTION */
27643 e = 0;
27644 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
27645 if (e) {
27646 log_packet_detailed("'tax' field error detected");
27647 }
27648#ifdef FREECIV_JSON_CONNECTION
27649 field_addr.name = "science";
27650#endif /* FREECIV_JSON_CONNECTION */
27651 e = 0;
27652 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
27653 if (e) {
27654 log_packet_detailed("'science' field error detected");
27655 }
27656#ifdef FREECIV_JSON_CONNECTION
27657 field_addr.name = "luxury";
27658#endif /* FREECIV_JSON_CONNECTION */
27659 e = 0;
27660 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
27661 if (e) {
27662 log_packet_detailed("'luxury' field error detected");
27663 }
27664#ifdef FREECIV_JSON_CONNECTION
27665 field_addr.name = "infrapoints";
27666#endif /* FREECIV_JSON_CONNECTION */
27667 e = 0;
27668 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
27669 if (e) {
27670 log_packet_detailed("'infrapoints' field error detected");
27671 }
27672#ifdef FREECIV_JSON_CONNECTION
27673 field_addr.name = "tech_upkeep_16";
27674#endif /* FREECIV_JSON_CONNECTION */
27675 e = 0;
27676 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_upkeep_16);
27677 if (e) {
27678 log_packet_detailed("'tech_upkeep_16' field error detected");
27679 }
27680#ifdef FREECIV_JSON_CONNECTION
27681 field_addr.name = "science_cost";
27682#endif /* FREECIV_JSON_CONNECTION */
27683 e = 0;
27684 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
27685 if (e) {
27686 log_packet_detailed("'science_cost' field error detected");
27687 }
27688#ifdef FREECIV_JSON_CONNECTION
27689 field_addr.name = "is_connected";
27690#endif /* FREECIV_JSON_CONNECTION */
27691 e = 0;
27692 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_connected);
27693 if (e) {
27694 log_packet_detailed("'is_connected' field error detected");
27695 }
27696#ifdef FREECIV_JSON_CONNECTION
27697 field_addr.name = "revolution_finishes";
27698#endif /* FREECIV_JSON_CONNECTION */
27699 e = 0;
27700 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
27701 if (e) {
27702 log_packet_detailed("'revolution_finishes' field error detected");
27703 }
27704#ifdef FREECIV_JSON_CONNECTION
27705 field_addr.name = "ai_skill_level";
27706#endif /* FREECIV_JSON_CONNECTION */
27707 e = 0;
27708 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
27709 if (e) {
27710 log_packet_detailed("'ai_skill_level' field error detected");
27711 }
27712#ifdef FREECIV_JSON_CONNECTION
27713 field_addr.name = "barbarian_type";
27714#endif /* FREECIV_JSON_CONNECTION */
27715 e = 0;
27716 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
27717 if (e) {
27718 log_packet_detailed("'barbarian_type' field error detected");
27719 }
27720#ifdef FREECIV_JSON_CONNECTION
27721 field_addr.name = "gives_shared_vision";
27722#endif /* FREECIV_JSON_CONNECTION */
27723 e = 0;
27725 if (e) {
27726 log_packet_detailed("'gives_shared_vision' field error detected");
27727 }
27728#ifdef FREECIV_JSON_CONNECTION
27729 field_addr.name = "gives_shared_tiles";
27730#endif /* FREECIV_JSON_CONNECTION */
27731 e = 0;
27732 e |= DIO_BV_PUT(&dout, &field_addr, packet->gives_shared_tiles);
27733 if (e) {
27734 log_packet_detailed("'gives_shared_tiles' field error detected");
27735 }
27736#ifdef FREECIV_JSON_CONNECTION
27737 field_addr.name = "history";
27738#endif /* FREECIV_JSON_CONNECTION */
27739 e = 0;
27740 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
27741 if (e) {
27742 log_packet_detailed("'history' field error detected");
27743 }
27744#ifdef FREECIV_JSON_CONNECTION
27745 field_addr.name = "culture";
27746#endif /* FREECIV_JSON_CONNECTION */
27747 e = 0;
27748 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
27749 if (e) {
27750 log_packet_detailed("'culture' field error detected");
27751 }
27752#ifdef FREECIV_JSON_CONNECTION
27753 field_addr.name = "love";
27754#endif /* FREECIV_JSON_CONNECTION */
27755 e = 0;
27756 {
27757 int i;
27758
27759#ifdef FREECIV_JSON_CONNECTION
27760 /* Create the array. */
27762
27763 /* Enter the array. */
27764 field_addr.sub_location = plocation_elem_new(0);
27765#endif /* FREECIV_JSON_CONNECTION */
27766
27767 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
27768#ifdef FREECIV_JSON_CONNECTION
27769 /* Next array element. */
27770 field_addr.sub_location->number = i;
27771#endif /* FREECIV_JSON_CONNECTION */
27772
27773 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
27774 }
27775
27776#ifdef FREECIV_JSON_CONNECTION
27777 /* Exit array. */
27778 FC_FREE(field_addr.sub_location);
27779#endif /* FREECIV_JSON_CONNECTION */
27780 }
27781 if (e) {
27782 log_packet_detailed("'love' field error detected");
27783 }
27784#ifdef FREECIV_JSON_CONNECTION
27785 field_addr.name = "color_valid";
27786#endif /* FREECIV_JSON_CONNECTION */
27787 e = 0;
27788 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_valid);
27789 if (e) {
27790 log_packet_detailed("'color_valid' field error detected");
27791 }
27792#ifdef FREECIV_JSON_CONNECTION
27793 field_addr.name = "color_changeable";
27794#endif /* FREECIV_JSON_CONNECTION */
27795 e = 0;
27796 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_changeable);
27797 if (e) {
27798 log_packet_detailed("'color_changeable' field error detected");
27799 }
27800#ifdef FREECIV_JSON_CONNECTION
27801 field_addr.name = "color_red";
27802#endif /* FREECIV_JSON_CONNECTION */
27803 e = 0;
27804 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
27805 if (e) {
27806 log_packet_detailed("'color_red' field error detected");
27807 }
27808#ifdef FREECIV_JSON_CONNECTION
27809 field_addr.name = "color_green";
27810#endif /* FREECIV_JSON_CONNECTION */
27811 e = 0;
27812 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
27813 if (e) {
27814 log_packet_detailed("'color_green' field error detected");
27815 }
27816#ifdef FREECIV_JSON_CONNECTION
27817 field_addr.name = "color_blue";
27818#endif /* FREECIV_JSON_CONNECTION */
27819 e = 0;
27820 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
27821 if (e) {
27822 log_packet_detailed("'color_blue' field error detected");
27823 }
27824#ifdef FREECIV_JSON_CONNECTION
27825 field_addr.name = "flags";
27826#endif /* FREECIV_JSON_CONNECTION */
27827 e = 0;
27828 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
27829 if (e) {
27830 log_packet_detailed("'flags' field error detected");
27831 }
27832#ifdef FREECIV_JSON_CONNECTION
27833 field_addr.name = "wonders";
27834#endif /* FREECIV_JSON_CONNECTION */
27835 e = 0;
27836 {
27837 int i;
27838
27839#ifdef FREECIV_JSON_CONNECTION
27840 /* Create the array. */
27841 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
27842
27843 /* Enter the array. */
27844 field_addr.sub_location = plocation_elem_new(0);
27845#endif /* FREECIV_JSON_CONNECTION */
27846
27847 for (i = 0; i < B_LAST; i++) {
27848#ifdef FREECIV_JSON_CONNECTION
27849 /* Next array element. */
27850 field_addr.sub_location->number = i;
27851#endif /* FREECIV_JSON_CONNECTION */
27852
27853 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
27854 }
27855
27856#ifdef FREECIV_JSON_CONNECTION
27857 /* Exit array. */
27858 FC_FREE(field_addr.sub_location);
27859#endif /* FREECIV_JSON_CONNECTION */
27860 }
27861 if (e) {
27862 log_packet_detailed("'wonders' field error detected");
27863 }
27864#ifdef FREECIV_JSON_CONNECTION
27865 field_addr.name = "multip_count";
27866#endif /* FREECIV_JSON_CONNECTION */
27867 e = 0;
27868 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
27869 if (e) {
27870 log_packet_detailed("'multip_count' field error detected");
27871 }
27872#ifdef FREECIV_JSON_CONNECTION
27873 field_addr.name = "multiplier";
27874#endif /* FREECIV_JSON_CONNECTION */
27875 e = 0;
27876 {
27877 int i;
27878
27879#ifdef FREECIV_JSON_CONNECTION
27880 /* Create the array. */
27881 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27882
27883 /* Enter the array. */
27884 field_addr.sub_location = plocation_elem_new(0);
27885#endif /* FREECIV_JSON_CONNECTION */
27886
27887 for (i = 0; i < real_packet->multip_count; i++) {
27888#ifdef FREECIV_JSON_CONNECTION
27889 /* Next array element. */
27890 field_addr.sub_location->number = i;
27891#endif /* FREECIV_JSON_CONNECTION */
27892
27893 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
27894 }
27895
27896#ifdef FREECIV_JSON_CONNECTION
27897 /* Exit array. */
27898 FC_FREE(field_addr.sub_location);
27899#endif /* FREECIV_JSON_CONNECTION */
27900 }
27901 if (e) {
27902 log_packet_detailed("'multiplier' field error detected");
27903 }
27904#ifdef FREECIV_JSON_CONNECTION
27905 field_addr.name = "multiplier_target";
27906#endif /* FREECIV_JSON_CONNECTION */
27907 e = 0;
27908 {
27909 int i;
27910
27911#ifdef FREECIV_JSON_CONNECTION
27912 /* Create the array. */
27913 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27914
27915 /* Enter the array. */
27916 field_addr.sub_location = plocation_elem_new(0);
27917#endif /* FREECIV_JSON_CONNECTION */
27918
27919 for (i = 0; i < real_packet->multip_count; i++) {
27920#ifdef FREECIV_JSON_CONNECTION
27921 /* Next array element. */
27922 field_addr.sub_location->number = i;
27923#endif /* FREECIV_JSON_CONNECTION */
27924
27925 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
27926 }
27927
27928#ifdef FREECIV_JSON_CONNECTION
27929 /* Exit array. */
27930 FC_FREE(field_addr.sub_location);
27931#endif /* FREECIV_JSON_CONNECTION */
27932 }
27933 if (e) {
27934 log_packet_detailed("'multiplier_target' field error detected");
27935 }
27936#ifdef FREECIV_JSON_CONNECTION
27937 field_addr.name = "multiplier_changed";
27938#endif /* FREECIV_JSON_CONNECTION */
27939 e = 0;
27940 {
27941 int i;
27942
27943#ifdef FREECIV_JSON_CONNECTION
27944 /* Create the array. */
27945 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
27946
27947 /* Enter the array. */
27948 field_addr.sub_location = plocation_elem_new(0);
27949#endif /* FREECIV_JSON_CONNECTION */
27950
27951 for (i = 0; i < real_packet->multip_count; i++) {
27952#ifdef FREECIV_JSON_CONNECTION
27953 /* Next array element. */
27954 field_addr.sub_location->number = i;
27955#endif /* FREECIV_JSON_CONNECTION */
27956
27957 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
27958 }
27959
27960#ifdef FREECIV_JSON_CONNECTION
27961 /* Exit array. */
27962 FC_FREE(field_addr.sub_location);
27963#endif /* FREECIV_JSON_CONNECTION */
27964 }
27965 if (e) {
27966 log_packet_detailed("'multiplier_changed' field error detected");
27967 }
27968
27969#endif
27971}
27972
27973#ifdef FREECIV_DELTA_PROTOCOL
27975{
27976 const struct packet_player_info *key = (const struct packet_player_info *) vkey;
27977 genhash_val_t result = 0;
27978
27979 result += key->playerno;
27980
27981 result &= 0xFFFFFFFF;
27982 return result;
27983}
27984
27985static bool cmp_packet_player_info_101(const void *vkey1, const void *vkey2)
27986{
27987 const struct packet_player_info *old = (const struct packet_player_info *) vkey1;
27988 const struct packet_player_info *real_packet = (const struct packet_player_info *) vkey2;
27989 bool differ;
27990
27991 differ = (old->playerno != real_packet->playerno);
27992
27993 return !differ;
27994}
27996#endif /* FREECIV_DELTA_PROTOCOL */
27997
27999{
28000#ifdef FREECIV_DELTA_PROTOCOL
28002 struct packet_player_info *old;
28003 struct genhash **hash = pc->phs.received + PACKET_PLAYER_INFO;
28004#endif /* FREECIV_DELTA_PROTOCOL */
28006#ifdef FREECIV_JSON_CONNECTION
28007 struct plocation field_addr;
28008 {
28012 }
28013#endif /* FREECIV_JSON_CONNECTION */
28014
28015#ifdef FREECIV_DELTA_PROTOCOL
28016#ifdef FREECIV_JSON_CONNECTION
28017 field_addr.name = "fields";
28018#endif /* FREECIV_JSON_CONNECTION */
28019 DIO_BV_GET(&din, &field_addr, fields);
28020#ifdef FREECIV_JSON_CONNECTION
28021 field_addr.name = "playerno";
28022#endif /* FREECIV_JSON_CONNECTION */
28023 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
28025 }
28026
28027#else /* FREECIV_DELTA_PROTOCOL */
28028#ifdef FREECIV_JSON_CONNECTION
28029 field_addr.name = "playerno";
28030#endif /* FREECIV_JSON_CONNECTION */
28031 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
28033 }
28034#ifdef FREECIV_JSON_CONNECTION
28035 field_addr.name = "name";
28036#endif /* FREECIV_JSON_CONNECTION */
28037 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
28039 }
28040#ifdef FREECIV_JSON_CONNECTION
28041 field_addr.name = "username";
28042#endif /* FREECIV_JSON_CONNECTION */
28043 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
28045 }
28046#ifdef FREECIV_JSON_CONNECTION
28047 field_addr.name = "unassigned_user";
28048#endif /* FREECIV_JSON_CONNECTION */
28049 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unassigned_user)) {
28050 RECEIVE_PACKET_FIELD_ERROR(unassigned_user);
28051 }
28052#ifdef FREECIV_JSON_CONNECTION
28053 field_addr.name = "score";
28054#endif /* FREECIV_JSON_CONNECTION */
28055 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
28057 }
28058#ifdef FREECIV_JSON_CONNECTION
28059 field_addr.name = "is_male";
28060#endif /* FREECIV_JSON_CONNECTION */
28061 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
28063 }
28064#ifdef FREECIV_JSON_CONNECTION
28065 field_addr.name = "was_created";
28066#endif /* FREECIV_JSON_CONNECTION */
28067 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_created)) {
28068 RECEIVE_PACKET_FIELD_ERROR(was_created);
28069 }
28070#ifdef FREECIV_JSON_CONNECTION
28071 field_addr.name = "government";
28072#endif /* FREECIV_JSON_CONNECTION */
28073 {
28074 int readin;
28075
28076 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
28078 }
28079 real_packet->government = readin;
28080 }
28081#ifdef FREECIV_JSON_CONNECTION
28082 field_addr.name = "target_government";
28083#endif /* FREECIV_JSON_CONNECTION */
28084 {
28085 int readin;
28086
28087 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
28088 RECEIVE_PACKET_FIELD_ERROR(target_government);
28089 }
28090 real_packet->target_government = readin;
28091 }
28092#ifdef FREECIV_JSON_CONNECTION
28093 field_addr.name = "real_embassy";
28094#endif /* FREECIV_JSON_CONNECTION */
28095 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
28096 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
28097 }
28098#ifdef FREECIV_JSON_CONNECTION
28099 field_addr.name = "mood";
28100#endif /* FREECIV_JSON_CONNECTION */
28101 {
28102 int readin;
28103
28104 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
28106 }
28107 real_packet->mood = readin;
28108 }
28109#ifdef FREECIV_JSON_CONNECTION
28110 field_addr.name = "style";
28111#endif /* FREECIV_JSON_CONNECTION */
28112 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
28114 }
28115#ifdef FREECIV_JSON_CONNECTION
28116 field_addr.name = "music_style";
28117#endif /* FREECIV_JSON_CONNECTION */
28118 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
28120 }
28121#ifdef FREECIV_JSON_CONNECTION
28122 field_addr.name = "nation";
28123#endif /* FREECIV_JSON_CONNECTION */
28124 {
28125 int readin;
28126
28127 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
28129 }
28130 real_packet->nation = readin;
28131 }
28132#ifdef FREECIV_JSON_CONNECTION
28133 field_addr.name = "team";
28134#endif /* FREECIV_JSON_CONNECTION */
28135 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
28137 }
28138#ifdef FREECIV_JSON_CONNECTION
28139 field_addr.name = "is_ready";
28140#endif /* FREECIV_JSON_CONNECTION */
28141 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_ready)) {
28143 }
28144#ifdef FREECIV_JSON_CONNECTION
28145 field_addr.name = "phase_done";
28146#endif /* FREECIV_JSON_CONNECTION */
28147 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
28148 RECEIVE_PACKET_FIELD_ERROR(phase_done);
28149 }
28150#ifdef FREECIV_JSON_CONNECTION
28151 field_addr.name = "nturns_idle";
28152#endif /* FREECIV_JSON_CONNECTION */
28153 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
28154 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
28155 }
28156#ifdef FREECIV_JSON_CONNECTION
28157 field_addr.name = "turns_alive";
28158#endif /* FREECIV_JSON_CONNECTION */
28159 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
28160 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
28161 }
28162#ifdef FREECIV_JSON_CONNECTION
28163 field_addr.name = "is_alive";
28164#endif /* FREECIV_JSON_CONNECTION */
28165 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
28167 }
28168#ifdef FREECIV_JSON_CONNECTION
28169 field_addr.name = "autoselect_weight";
28170#endif /* FREECIV_JSON_CONNECTION */
28171 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
28172 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
28173 }
28174#ifdef FREECIV_JSON_CONNECTION
28175 field_addr.name = "gold";
28176#endif /* FREECIV_JSON_CONNECTION */
28177 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
28179 }
28180#ifdef FREECIV_JSON_CONNECTION
28181 field_addr.name = "tax";
28182#endif /* FREECIV_JSON_CONNECTION */
28183 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
28185 }
28186#ifdef FREECIV_JSON_CONNECTION
28187 field_addr.name = "science";
28188#endif /* FREECIV_JSON_CONNECTION */
28189 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
28191 }
28192#ifdef FREECIV_JSON_CONNECTION
28193 field_addr.name = "luxury";
28194#endif /* FREECIV_JSON_CONNECTION */
28195 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
28197 }
28198#ifdef FREECIV_JSON_CONNECTION
28199 field_addr.name = "infrapoints";
28200#endif /* FREECIV_JSON_CONNECTION */
28201 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
28202 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
28203 }
28204#ifdef FREECIV_JSON_CONNECTION
28205 field_addr.name = "tech_upkeep_32";
28206#endif /* FREECIV_JSON_CONNECTION */
28207 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep_32)) {
28208 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_32);
28209 }
28210#ifdef FREECIV_JSON_CONNECTION
28211 field_addr.name = "science_cost";
28212#endif /* FREECIV_JSON_CONNECTION */
28213 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
28214 RECEIVE_PACKET_FIELD_ERROR(science_cost);
28215 }
28216#ifdef FREECIV_JSON_CONNECTION
28217 field_addr.name = "is_connected";
28218#endif /* FREECIV_JSON_CONNECTION */
28219 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_connected)) {
28220 RECEIVE_PACKET_FIELD_ERROR(is_connected);
28221 }
28222#ifdef FREECIV_JSON_CONNECTION
28223 field_addr.name = "revolution_finishes";
28224#endif /* FREECIV_JSON_CONNECTION */
28225 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
28226 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
28227 }
28228#ifdef FREECIV_JSON_CONNECTION
28229 field_addr.name = "ai_skill_level";
28230#endif /* FREECIV_JSON_CONNECTION */
28231 {
28232 int readin;
28233
28234 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
28235 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
28236 }
28237 real_packet->ai_skill_level = readin;
28238 }
28239#ifdef FREECIV_JSON_CONNECTION
28240 field_addr.name = "barbarian_type";
28241#endif /* FREECIV_JSON_CONNECTION */
28242 {
28243 int readin;
28244
28245 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
28246 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
28247 }
28248 real_packet->barbarian_type = readin;
28249 }
28250#ifdef FREECIV_JSON_CONNECTION
28251 field_addr.name = "gives_shared_vision";
28252#endif /* FREECIV_JSON_CONNECTION */
28253 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
28255 }
28256#ifdef FREECIV_JSON_CONNECTION
28257 field_addr.name = "gives_shared_tiles";
28258#endif /* FREECIV_JSON_CONNECTION */
28259 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
28261 }
28262#ifdef FREECIV_JSON_CONNECTION
28263 field_addr.name = "history";
28264#endif /* FREECIV_JSON_CONNECTION */
28265 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
28267 }
28268#ifdef FREECIV_JSON_CONNECTION
28269 field_addr.name = "culture";
28270#endif /* FREECIV_JSON_CONNECTION */
28271 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
28273 }
28274#ifdef FREECIV_JSON_CONNECTION
28275 field_addr.name = "love";
28276#endif /* FREECIV_JSON_CONNECTION */
28277 {
28278 int i;
28279
28280#ifdef FREECIV_JSON_CONNECTION
28281 /* Enter array. */
28282 field_addr.sub_location = plocation_elem_new(0);
28283#endif /* FREECIV_JSON_CONNECTION */
28284
28285 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
28286#ifdef FREECIV_JSON_CONNECTION
28287 field_addr.sub_location->number = i;
28288#endif /* FREECIV_JSON_CONNECTION */
28289
28290 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
28292 }
28293 }
28294
28295#ifdef FREECIV_JSON_CONNECTION
28296 /* Exit array. */
28297 FC_FREE(field_addr.sub_location);
28298#endif /* FREECIV_JSON_CONNECTION */
28299 }
28300#ifdef FREECIV_JSON_CONNECTION
28301 field_addr.name = "color_valid";
28302#endif /* FREECIV_JSON_CONNECTION */
28303 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_valid)) {
28304 RECEIVE_PACKET_FIELD_ERROR(color_valid);
28305 }
28306#ifdef FREECIV_JSON_CONNECTION
28307 field_addr.name = "color_changeable";
28308#endif /* FREECIV_JSON_CONNECTION */
28309 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->color_changeable)) {
28310 RECEIVE_PACKET_FIELD_ERROR(color_changeable);
28311 }
28312#ifdef FREECIV_JSON_CONNECTION
28313 field_addr.name = "color_red";
28314#endif /* FREECIV_JSON_CONNECTION */
28315 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
28316 RECEIVE_PACKET_FIELD_ERROR(color_red);
28317 }
28318#ifdef FREECIV_JSON_CONNECTION
28319 field_addr.name = "color_green";
28320#endif /* FREECIV_JSON_CONNECTION */
28321 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
28322 RECEIVE_PACKET_FIELD_ERROR(color_green);
28323 }
28324#ifdef FREECIV_JSON_CONNECTION
28325 field_addr.name = "color_blue";
28326#endif /* FREECIV_JSON_CONNECTION */
28327 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
28328 RECEIVE_PACKET_FIELD_ERROR(color_blue);
28329 }
28330#ifdef FREECIV_JSON_CONNECTION
28331 field_addr.name = "flags";
28332#endif /* FREECIV_JSON_CONNECTION */
28333 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
28335 }
28336#ifdef FREECIV_JSON_CONNECTION
28337 field_addr.name = "wonders";
28338#endif /* FREECIV_JSON_CONNECTION */
28339 {
28340 int i;
28341
28342#ifdef FREECIV_JSON_CONNECTION
28343 /* Enter array. */
28344 field_addr.sub_location = plocation_elem_new(0);
28345#endif /* FREECIV_JSON_CONNECTION */
28346
28347 for (i = 0; i < B_LAST; i++) {
28348#ifdef FREECIV_JSON_CONNECTION
28349 field_addr.sub_location->number = i;
28350#endif /* FREECIV_JSON_CONNECTION */
28351
28352 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
28354 }
28355 }
28356
28357#ifdef FREECIV_JSON_CONNECTION
28358 /* Exit array. */
28359 FC_FREE(field_addr.sub_location);
28360#endif /* FREECIV_JSON_CONNECTION */
28361 }
28362#ifdef FREECIV_JSON_CONNECTION
28363 field_addr.name = "multip_count";
28364#endif /* FREECIV_JSON_CONNECTION */
28365 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
28366 RECEIVE_PACKET_FIELD_ERROR(multip_count);
28367 }
28368#ifdef FREECIV_JSON_CONNECTION
28369 field_addr.name = "multiplier";
28370#endif /* FREECIV_JSON_CONNECTION */
28371 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
28372 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": truncation array");
28373 }
28374 {
28375 int i;
28376
28377#ifdef FREECIV_JSON_CONNECTION
28378 /* Enter array. */
28379 field_addr.sub_location = plocation_elem_new(0);
28380#endif /* FREECIV_JSON_CONNECTION */
28381
28382 for (i = 0; i < real_packet->multip_count; i++) {
28383#ifdef FREECIV_JSON_CONNECTION
28384 field_addr.sub_location->number = i;
28385#endif /* FREECIV_JSON_CONNECTION */
28386
28387 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
28389 }
28390 }
28391
28392#ifdef FREECIV_JSON_CONNECTION
28393 /* Exit array. */
28394 FC_FREE(field_addr.sub_location);
28395#endif /* FREECIV_JSON_CONNECTION */
28396 }
28397#ifdef FREECIV_JSON_CONNECTION
28398 field_addr.name = "multiplier_target";
28399#endif /* FREECIV_JSON_CONNECTION */
28400 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
28401 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": truncation array");
28402 }
28403 {
28404 int i;
28405
28406#ifdef FREECIV_JSON_CONNECTION
28407 /* Enter array. */
28408 field_addr.sub_location = plocation_elem_new(0);
28409#endif /* FREECIV_JSON_CONNECTION */
28410
28411 for (i = 0; i < real_packet->multip_count; i++) {
28412#ifdef FREECIV_JSON_CONNECTION
28413 field_addr.sub_location->number = i;
28414#endif /* FREECIV_JSON_CONNECTION */
28415
28416 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
28417 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
28418 }
28419 }
28420
28421#ifdef FREECIV_JSON_CONNECTION
28422 /* Exit array. */
28423 FC_FREE(field_addr.sub_location);
28424#endif /* FREECIV_JSON_CONNECTION */
28425 }
28426#ifdef FREECIV_JSON_CONNECTION
28427 field_addr.name = "multiplier_changed";
28428#endif /* FREECIV_JSON_CONNECTION */
28429 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
28430 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": truncation array");
28431 }
28432 {
28433 int i;
28434
28435#ifdef FREECIV_JSON_CONNECTION
28436 /* Enter array. */
28437 field_addr.sub_location = plocation_elem_new(0);
28438#endif /* FREECIV_JSON_CONNECTION */
28439
28440 for (i = 0; i < real_packet->multip_count; i++) {
28441#ifdef FREECIV_JSON_CONNECTION
28442 field_addr.sub_location->number = i;
28443#endif /* FREECIV_JSON_CONNECTION */
28444
28445 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
28446 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
28447 }
28448 }
28449
28450#ifdef FREECIV_JSON_CONNECTION
28451 /* Exit array. */
28452 FC_FREE(field_addr.sub_location);
28453#endif /* FREECIV_JSON_CONNECTION */
28454 }
28455#endif
28456 log_packet_detailed("packet_player_info_101: got info about (%d)",
28457 real_packet->playerno);
28458
28459#ifdef FREECIV_DELTA_PROTOCOL
28460 if (NULL == *hash) {
28462 NULL, NULL, NULL, free);
28463 }
28464
28465 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
28466 *real_packet = *old;
28467 } else {
28468 int playerno;
28469
28470 playerno = real_packet->playerno;
28471
28472 log_packet_detailed(" no old info");
28473 memset(real_packet, 0, sizeof(*real_packet));
28474
28475 real_packet->playerno = playerno;
28476 }
28477
28478 if (BV_ISSET(fields, 0)) {
28479 log_packet_detailed(" got field 'name'");
28480#ifdef FREECIV_JSON_CONNECTION
28481 field_addr.name = "name";
28482#endif /* FREECIV_JSON_CONNECTION */
28483 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
28485 }
28486 }
28487 if (BV_ISSET(fields, 1)) {
28488 log_packet_detailed(" got field 'username'");
28489#ifdef FREECIV_JSON_CONNECTION
28490 field_addr.name = "username";
28491#endif /* FREECIV_JSON_CONNECTION */
28492 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
28494 }
28495 }
28496 real_packet->unassigned_user = BV_ISSET(fields, 2);
28497 if (BV_ISSET(fields, 3)) {
28498 log_packet_detailed(" got field 'score'");
28499#ifdef FREECIV_JSON_CONNECTION
28500 field_addr.name = "score";
28501#endif /* FREECIV_JSON_CONNECTION */
28502 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->score)) {
28504 }
28505 }
28506 real_packet->is_male = BV_ISSET(fields, 4);
28507 real_packet->was_created = BV_ISSET(fields, 5);
28508 if (BV_ISSET(fields, 6)) {
28509 log_packet_detailed(" got field 'government'");
28510#ifdef FREECIV_JSON_CONNECTION
28511 field_addr.name = "government";
28512#endif /* FREECIV_JSON_CONNECTION */
28513 {
28514 int readin;
28515
28516 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
28518 }
28519 real_packet->government = readin;
28520 }
28521 }
28522 if (BV_ISSET(fields, 7)) {
28523 log_packet_detailed(" got field 'target_government'");
28524#ifdef FREECIV_JSON_CONNECTION
28525 field_addr.name = "target_government";
28526#endif /* FREECIV_JSON_CONNECTION */
28527 {
28528 int readin;
28529
28530 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
28531 RECEIVE_PACKET_FIELD_ERROR(target_government);
28532 }
28533 real_packet->target_government = readin;
28534 }
28535 }
28536 if (BV_ISSET(fields, 8)) {
28537 log_packet_detailed(" got field 'real_embassy'");
28538#ifdef FREECIV_JSON_CONNECTION
28539 field_addr.name = "real_embassy";
28540#endif /* FREECIV_JSON_CONNECTION */
28541 if (!DIO_BV_GET(&din, &field_addr, real_packet->real_embassy)) {
28542 RECEIVE_PACKET_FIELD_ERROR(real_embassy);
28543 }
28544 }
28545 if (BV_ISSET(fields, 9)) {
28546 log_packet_detailed(" got field 'mood'");
28547#ifdef FREECIV_JSON_CONNECTION
28548 field_addr.name = "mood";
28549#endif /* FREECIV_JSON_CONNECTION */
28550 {
28551 int readin;
28552
28553 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
28555 }
28556 real_packet->mood = readin;
28557 }
28558 }
28559 if (BV_ISSET(fields, 10)) {
28560 log_packet_detailed(" got field 'style'");
28561#ifdef FREECIV_JSON_CONNECTION
28562 field_addr.name = "style";
28563#endif /* FREECIV_JSON_CONNECTION */
28564 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
28566 }
28567 }
28568 if (BV_ISSET(fields, 11)) {
28569 log_packet_detailed(" got field 'music_style'");
28570#ifdef FREECIV_JSON_CONNECTION
28571 field_addr.name = "music_style";
28572#endif /* FREECIV_JSON_CONNECTION */
28573 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->music_style)) {
28575 }
28576 }
28577 if (BV_ISSET(fields, 12)) {
28578 log_packet_detailed(" got field 'nation'");
28579#ifdef FREECIV_JSON_CONNECTION
28580 field_addr.name = "nation";
28581#endif /* FREECIV_JSON_CONNECTION */
28582 {
28583 int readin;
28584
28585 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
28587 }
28588 real_packet->nation = readin;
28589 }
28590 }
28591 if (BV_ISSET(fields, 13)) {
28592 log_packet_detailed(" got field 'team'");
28593#ifdef FREECIV_JSON_CONNECTION
28594 field_addr.name = "team";
28595#endif /* FREECIV_JSON_CONNECTION */
28596 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
28598 }
28599 }
28600 real_packet->is_ready = BV_ISSET(fields, 14);
28601 real_packet->phase_done = BV_ISSET(fields, 15);
28602 if (BV_ISSET(fields, 16)) {
28603 log_packet_detailed(" got field 'nturns_idle'");
28604#ifdef FREECIV_JSON_CONNECTION
28605 field_addr.name = "nturns_idle";
28606#endif /* FREECIV_JSON_CONNECTION */
28607 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
28608 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
28609 }
28610 }
28611 if (BV_ISSET(fields, 17)) {
28612 log_packet_detailed(" got field 'turns_alive'");
28613#ifdef FREECIV_JSON_CONNECTION
28614 field_addr.name = "turns_alive";
28615#endif /* FREECIV_JSON_CONNECTION */
28616 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turns_alive)) {
28617 RECEIVE_PACKET_FIELD_ERROR(turns_alive);
28618 }
28619 }
28620 real_packet->is_alive = BV_ISSET(fields, 18);
28621 if (BV_ISSET(fields, 19)) {
28622 log_packet_detailed(" got field 'autoselect_weight'");
28623#ifdef FREECIV_JSON_CONNECTION
28624 field_addr.name = "autoselect_weight";
28625#endif /* FREECIV_JSON_CONNECTION */
28626 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
28627 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
28628 }
28629 }
28630 if (BV_ISSET(fields, 20)) {
28631 log_packet_detailed(" got field 'gold'");
28632#ifdef FREECIV_JSON_CONNECTION
28633 field_addr.name = "gold";
28634#endif /* FREECIV_JSON_CONNECTION */
28635 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
28637 }
28638 }
28639 if (BV_ISSET(fields, 21)) {
28640 log_packet_detailed(" got field 'tax'");
28641#ifdef FREECIV_JSON_CONNECTION
28642 field_addr.name = "tax";
28643#endif /* FREECIV_JSON_CONNECTION */
28644 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
28646 }
28647 }
28648 if (BV_ISSET(fields, 22)) {
28649 log_packet_detailed(" got field 'science'");
28650#ifdef FREECIV_JSON_CONNECTION
28651 field_addr.name = "science";
28652#endif /* FREECIV_JSON_CONNECTION */
28653 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
28655 }
28656 }
28657 if (BV_ISSET(fields, 23)) {
28658 log_packet_detailed(" got field 'luxury'");
28659#ifdef FREECIV_JSON_CONNECTION
28660 field_addr.name = "luxury";
28661#endif /* FREECIV_JSON_CONNECTION */
28662 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
28664 }
28665 }
28666 if (BV_ISSET(fields, 24)) {
28667 log_packet_detailed(" got field 'infrapoints'");
28668#ifdef FREECIV_JSON_CONNECTION
28669 field_addr.name = "infrapoints";
28670#endif /* FREECIV_JSON_CONNECTION */
28671 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
28672 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
28673 }
28674 }
28675 if (BV_ISSET(fields, 25)) {
28676 log_packet_detailed(" got field 'tech_upkeep_32'");
28677#ifdef FREECIV_JSON_CONNECTION
28678 field_addr.name = "tech_upkeep_32";
28679#endif /* FREECIV_JSON_CONNECTION */
28680 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->tech_upkeep_32)) {
28681 RECEIVE_PACKET_FIELD_ERROR(tech_upkeep_32);
28682 }
28683 }
28684 if (BV_ISSET(fields, 26)) {
28685 log_packet_detailed(" got field 'science_cost'");
28686#ifdef FREECIV_JSON_CONNECTION
28687 field_addr.name = "science_cost";
28688#endif /* FREECIV_JSON_CONNECTION */
28689 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->science_cost)) {
28690 RECEIVE_PACKET_FIELD_ERROR(science_cost);
28691 }
28692 }
28693 real_packet->is_connected = BV_ISSET(fields, 27);
28694 if (BV_ISSET(fields, 28)) {
28695 log_packet_detailed(" got field 'revolution_finishes'");
28696#ifdef FREECIV_JSON_CONNECTION
28697 field_addr.name = "revolution_finishes";
28698#endif /* FREECIV_JSON_CONNECTION */
28699 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
28700 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
28701 }
28702 }
28703 if (BV_ISSET(fields, 29)) {
28704 log_packet_detailed(" got field 'ai_skill_level'");
28705#ifdef FREECIV_JSON_CONNECTION
28706 field_addr.name = "ai_skill_level";
28707#endif /* FREECIV_JSON_CONNECTION */
28708 {
28709 int readin;
28710
28711 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
28712 RECEIVE_PACKET_FIELD_ERROR(ai_skill_level);
28713 }
28714 real_packet->ai_skill_level = readin;
28715 }
28716 }
28717 if (BV_ISSET(fields, 30)) {
28718 log_packet_detailed(" got field 'barbarian_type'");
28719#ifdef FREECIV_JSON_CONNECTION
28720 field_addr.name = "barbarian_type";
28721#endif /* FREECIV_JSON_CONNECTION */
28722 {
28723 int readin;
28724
28725 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
28726 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
28727 }
28728 real_packet->barbarian_type = readin;
28729 }
28730 }
28731 if (BV_ISSET(fields, 31)) {
28732 log_packet_detailed(" got field 'gives_shared_vision'");
28733#ifdef FREECIV_JSON_CONNECTION
28734 field_addr.name = "gives_shared_vision";
28735#endif /* FREECIV_JSON_CONNECTION */
28736 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_vision)) {
28738 }
28739 }
28740 if (BV_ISSET(fields, 32)) {
28741 log_packet_detailed(" got field 'gives_shared_tiles'");
28742#ifdef FREECIV_JSON_CONNECTION
28743 field_addr.name = "gives_shared_tiles";
28744#endif /* FREECIV_JSON_CONNECTION */
28745 if (!DIO_BV_GET(&din, &field_addr, real_packet->gives_shared_tiles)) {
28747 }
28748 }
28749 if (BV_ISSET(fields, 33)) {
28750 log_packet_detailed(" got field 'history'");
28751#ifdef FREECIV_JSON_CONNECTION
28752 field_addr.name = "history";
28753#endif /* FREECIV_JSON_CONNECTION */
28754 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
28756 }
28757 }
28758 if (BV_ISSET(fields, 34)) {
28759 log_packet_detailed(" got field 'culture'");
28760#ifdef FREECIV_JSON_CONNECTION
28761 field_addr.name = "culture";
28762#endif /* FREECIV_JSON_CONNECTION */
28763 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->culture)) {
28765 }
28766 }
28767 if (BV_ISSET(fields, 35)) {
28768 log_packet_detailed(" got field 'love'");
28769#ifdef FREECIV_JSON_CONNECTION
28770 field_addr.name = "love";
28771#endif /* FREECIV_JSON_CONNECTION */
28772 {
28773 int i;
28774
28775#ifdef FREECIV_JSON_CONNECTION
28776 /* Enter array. */
28777 field_addr.sub_location = plocation_elem_new(0);
28778#endif /* FREECIV_JSON_CONNECTION */
28779
28780 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
28781#ifdef FREECIV_JSON_CONNECTION
28782 field_addr.sub_location->number = i;
28783#endif /* FREECIV_JSON_CONNECTION */
28784
28785 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->love[i])) {
28787 }
28788 }
28789
28790#ifdef FREECIV_JSON_CONNECTION
28791 /* Exit array. */
28792 FC_FREE(field_addr.sub_location);
28793#endif /* FREECIV_JSON_CONNECTION */
28794 }
28795 }
28796 real_packet->color_valid = BV_ISSET(fields, 36);
28797 real_packet->color_changeable = BV_ISSET(fields, 37);
28798 if (BV_ISSET(fields, 38)) {
28799 log_packet_detailed(" got field 'color_red'");
28800#ifdef FREECIV_JSON_CONNECTION
28801 field_addr.name = "color_red";
28802#endif /* FREECIV_JSON_CONNECTION */
28803 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
28804 RECEIVE_PACKET_FIELD_ERROR(color_red);
28805 }
28806 }
28807 if (BV_ISSET(fields, 39)) {
28808 log_packet_detailed(" got field 'color_green'");
28809#ifdef FREECIV_JSON_CONNECTION
28810 field_addr.name = "color_green";
28811#endif /* FREECIV_JSON_CONNECTION */
28812 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
28813 RECEIVE_PACKET_FIELD_ERROR(color_green);
28814 }
28815 }
28816 if (BV_ISSET(fields, 40)) {
28817 log_packet_detailed(" got field 'color_blue'");
28818#ifdef FREECIV_JSON_CONNECTION
28819 field_addr.name = "color_blue";
28820#endif /* FREECIV_JSON_CONNECTION */
28821 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
28822 RECEIVE_PACKET_FIELD_ERROR(color_blue);
28823 }
28824 }
28825 if (BV_ISSET(fields, 41)) {
28826 log_packet_detailed(" got field 'flags'");
28827#ifdef FREECIV_JSON_CONNECTION
28828 field_addr.name = "flags";
28829#endif /* FREECIV_JSON_CONNECTION */
28830 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
28832 }
28833 }
28834 if (BV_ISSET(fields, 42)) {
28835 log_packet_detailed(" got field 'wonders'");
28836#ifdef FREECIV_JSON_CONNECTION
28837 field_addr.name = "wonders";
28838#endif /* FREECIV_JSON_CONNECTION */
28840#ifdef FREECIV_JSON_CONNECTION
28841 /* Enter array (start at initial element). */
28842 field_addr.sub_location = plocation_elem_new(0);
28843 /* Enter diff array element (start at the index address). */
28844 field_addr.sub_location->sub_location = plocation_elem_new(0);
28845#endif /* FREECIV_JSON_CONNECTION */
28846
28847 while (TRUE) {
28848 int i;
28849
28850 /* Read next index */
28851#if B_LAST <= MAX_UINT8
28852 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
28853#else
28854 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
28855#endif
28857 }
28858
28859 if (i == B_LAST) {
28860 break;
28861 }
28862 if (i > B_LAST) {
28864 ": unexpected value %d "
28865 "(> B_LAST) in array diff",
28866 i);
28867 }
28868
28869#ifdef FREECIV_JSON_CONNECTION
28870 /* Content address. */
28871 field_addr.sub_location->sub_location->number = 1;
28872#endif /* FREECIV_JSON_CONNECTION */
28873
28874 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->wonders[i])) {
28876 }
28877
28878#ifdef FREECIV_JSON_CONNECTION
28879 /* Move to the next diff array element. */
28880 field_addr.sub_location->number++;
28881 /* Back to the index address. */
28882 field_addr.sub_location->sub_location->number = 0;
28883#endif /* FREECIV_JSON_CONNECTION */
28884 }
28885
28886#ifdef FREECIV_JSON_CONNECTION
28887 /* Exit diff array element. */
28888 FC_FREE(field_addr.sub_location->sub_location);
28889 /* Exit array. */
28890 FC_FREE(field_addr.sub_location);
28891#endif /* FREECIV_JSON_CONNECTION */
28892 }
28893 if (BV_ISSET(fields, 43)) {
28894 log_packet_detailed(" got field 'multip_count'");
28895#ifdef FREECIV_JSON_CONNECTION
28896 field_addr.name = "multip_count";
28897#endif /* FREECIV_JSON_CONNECTION */
28898 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->multip_count)) {
28899 RECEIVE_PACKET_FIELD_ERROR(multip_count);
28900 }
28901 }
28902 if (BV_ISSET(fields, 44)) {
28903 log_packet_detailed(" got field 'multiplier'");
28904#ifdef FREECIV_JSON_CONNECTION
28905 field_addr.name = "multiplier";
28906#endif /* FREECIV_JSON_CONNECTION */
28907 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
28908 RECEIVE_PACKET_FIELD_ERROR(multiplier, ": truncation array");
28909 }
28910 {
28911 int i;
28912
28913#ifdef FREECIV_JSON_CONNECTION
28914 /* Enter array. */
28915 field_addr.sub_location = plocation_elem_new(0);
28916#endif /* FREECIV_JSON_CONNECTION */
28917
28918 for (i = 0; i < real_packet->multip_count; i++) {
28919#ifdef FREECIV_JSON_CONNECTION
28920 field_addr.sub_location->number = i;
28921#endif /* FREECIV_JSON_CONNECTION */
28922
28923 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier[i])) {
28925 }
28926 }
28927
28928#ifdef FREECIV_JSON_CONNECTION
28929 /* Exit array. */
28930 FC_FREE(field_addr.sub_location);
28931#endif /* FREECIV_JSON_CONNECTION */
28932 }
28933 }
28934 if (BV_ISSET(fields, 45)) {
28935 log_packet_detailed(" got field 'multiplier_target'");
28936#ifdef FREECIV_JSON_CONNECTION
28937 field_addr.name = "multiplier_target";
28938#endif /* FREECIV_JSON_CONNECTION */
28939 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
28940 RECEIVE_PACKET_FIELD_ERROR(multiplier_target, ": truncation array");
28941 }
28942 {
28943 int i;
28944
28945#ifdef FREECIV_JSON_CONNECTION
28946 /* Enter array. */
28947 field_addr.sub_location = plocation_elem_new(0);
28948#endif /* FREECIV_JSON_CONNECTION */
28949
28950 for (i = 0; i < real_packet->multip_count; i++) {
28951#ifdef FREECIV_JSON_CONNECTION
28952 field_addr.sub_location->number = i;
28953#endif /* FREECIV_JSON_CONNECTION */
28954
28955 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multiplier_target[i])) {
28956 RECEIVE_PACKET_FIELD_ERROR(multiplier_target);
28957 }
28958 }
28959
28960#ifdef FREECIV_JSON_CONNECTION
28961 /* Exit array. */
28962 FC_FREE(field_addr.sub_location);
28963#endif /* FREECIV_JSON_CONNECTION */
28964 }
28965 }
28966 if (BV_ISSET(fields, 46)) {
28967 log_packet_detailed(" got field 'multiplier_changed'");
28968#ifdef FREECIV_JSON_CONNECTION
28969 field_addr.name = "multiplier_changed";
28970#endif /* FREECIV_JSON_CONNECTION */
28971 if (real_packet->multip_count > MAX_NUM_MULTIPLIERS) {
28972 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed, ": truncation array");
28973 }
28974 {
28975 int i;
28976
28977#ifdef FREECIV_JSON_CONNECTION
28978 /* Enter array. */
28979 field_addr.sub_location = plocation_elem_new(0);
28980#endif /* FREECIV_JSON_CONNECTION */
28981
28982 for (i = 0; i < real_packet->multip_count; i++) {
28983#ifdef FREECIV_JSON_CONNECTION
28984 field_addr.sub_location->number = i;
28985#endif /* FREECIV_JSON_CONNECTION */
28986
28987 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->multiplier_changed[i])) {
28988 RECEIVE_PACKET_FIELD_ERROR(multiplier_changed);
28989 }
28990 }
28991
28992#ifdef FREECIV_JSON_CONNECTION
28993 /* Exit array. */
28994 FC_FREE(field_addr.sub_location);
28995#endif /* FREECIV_JSON_CONNECTION */
28996 }
28997 }
28998
28999 if (NULL == old) {
29000 old = fc_malloc(sizeof(*old));
29001 *old = *real_packet;
29002 genhash_insert(*hash, old, old);
29003 } else {
29004 *old = *real_packet;
29005 }
29006
29007#endif /* FREECIV_DELTA_PROTOCOL */
29009}
29010
29011static int send_packet_player_info_101(struct connection *pc, const struct packet_player_info *packet)
29012{
29013 const struct packet_player_info *real_packet = packet;
29014 int e;
29015#ifdef FREECIV_DELTA_PROTOCOL
29017 struct packet_player_info *old;
29018 bool differ;
29019 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_INFO;
29020 int different = 0;
29021#endif /* FREECIV_DELTA_PROTOCOL */
29023#ifdef FREECIV_JSON_CONNECTION
29024 struct plocation field_addr;
29025 {
29029 }
29030#endif /* FREECIV_JSON_CONNECTION */
29031
29032 log_packet_detailed("packet_player_info_101: sending info about (%d)",
29033 real_packet->playerno);
29034
29035#ifdef FREECIV_DELTA_PROTOCOL
29036 if (NULL == *hash) {
29038 NULL, NULL, NULL, free);
29039 }
29040 BV_CLR_ALL(fields);
29041
29042 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
29043 old = fc_malloc(sizeof(*old));
29044 *old = *real_packet;
29045 genhash_insert(*hash, old, old);
29046 memset(old, 0, sizeof(*old));
29047 different = 1; /* Force to send. */
29048 }
29049 differ = (strcmp(old->name, real_packet->name) != 0);
29050 if (differ) {
29051 different++;
29052 BV_SET(fields, 0);
29053 }
29054
29055 differ = (strcmp(old->username, real_packet->username) != 0);
29056 if (differ) {
29057 different++;
29058 BV_SET(fields, 1);
29059 }
29060
29061 differ = (old->unassigned_user != real_packet->unassigned_user);
29062 if (differ) {
29063 different++;
29064 }
29065 if (packet->unassigned_user) {
29066 BV_SET(fields, 2);
29067 }
29068
29069 differ = (old->score != real_packet->score);
29070 if (differ) {
29071 different++;
29072 BV_SET(fields, 3);
29073 }
29074
29075 differ = (old->is_male != real_packet->is_male);
29076 if (differ) {
29077 different++;
29078 }
29079 if (packet->is_male) {
29080 BV_SET(fields, 4);
29081 }
29082
29083 differ = (old->was_created != real_packet->was_created);
29084 if (differ) {
29085 different++;
29086 }
29087 if (packet->was_created) {
29088 BV_SET(fields, 5);
29089 }
29090
29091 differ = (old->government != real_packet->government);
29092 if (differ) {
29093 different++;
29094 BV_SET(fields, 6);
29095 }
29096
29097 differ = (old->target_government != real_packet->target_government);
29098 if (differ) {
29099 different++;
29100 BV_SET(fields, 7);
29101 }
29102
29103 differ = !BV_ARE_EQUAL(old->real_embassy, real_packet->real_embassy);
29104 if (differ) {
29105 different++;
29106 BV_SET(fields, 8);
29107 }
29108
29109 differ = (old->mood != real_packet->mood);
29110 if (differ) {
29111 different++;
29112 BV_SET(fields, 9);
29113 }
29114
29115 differ = (old->style != real_packet->style);
29116 if (differ) {
29117 different++;
29118 BV_SET(fields, 10);
29119 }
29120
29121 differ = (old->music_style != real_packet->music_style);
29122 if (differ) {
29123 different++;
29124 BV_SET(fields, 11);
29125 }
29126
29127 differ = (old->nation != real_packet->nation);
29128 if (differ) {
29129 different++;
29130 BV_SET(fields, 12);
29131 }
29132
29133 differ = (old->team != real_packet->team);
29134 if (differ) {
29135 different++;
29136 BV_SET(fields, 13);
29137 }
29138
29139 differ = (old->is_ready != real_packet->is_ready);
29140 if (differ) {
29141 different++;
29142 }
29143 if (packet->is_ready) {
29144 BV_SET(fields, 14);
29145 }
29146
29147 differ = (old->phase_done != real_packet->phase_done);
29148 if (differ) {
29149 different++;
29150 }
29151 if (packet->phase_done) {
29152 BV_SET(fields, 15);
29153 }
29154
29155 differ = (old->nturns_idle != real_packet->nturns_idle);
29156 if (differ) {
29157 different++;
29158 BV_SET(fields, 16);
29159 }
29160
29161 differ = (old->turns_alive != real_packet->turns_alive);
29162 if (differ) {
29163 different++;
29164 BV_SET(fields, 17);
29165 }
29166
29167 differ = (old->is_alive != real_packet->is_alive);
29168 if (differ) {
29169 different++;
29170 }
29171 if (packet->is_alive) {
29172 BV_SET(fields, 18);
29173 }
29174
29175 differ = (old->autoselect_weight != real_packet->autoselect_weight);
29176 if (differ) {
29177 different++;
29178 BV_SET(fields, 19);
29179 }
29180
29181 differ = (old->gold != real_packet->gold);
29182 if (differ) {
29183 different++;
29184 BV_SET(fields, 20);
29185 }
29186
29187 differ = (old->tax != real_packet->tax);
29188 if (differ) {
29189 different++;
29190 BV_SET(fields, 21);
29191 }
29192
29193 differ = (old->science != real_packet->science);
29194 if (differ) {
29195 different++;
29196 BV_SET(fields, 22);
29197 }
29198
29199 differ = (old->luxury != real_packet->luxury);
29200 if (differ) {
29201 different++;
29202 BV_SET(fields, 23);
29203 }
29204
29205 differ = (old->infrapoints != real_packet->infrapoints);
29206 if (differ) {
29207 different++;
29208 BV_SET(fields, 24);
29209 }
29210
29211 differ = (old->tech_upkeep_32 != real_packet->tech_upkeep_32);
29212 if (differ) {
29213 different++;
29214 BV_SET(fields, 25);
29215 }
29216
29217 differ = (old->science_cost != real_packet->science_cost);
29218 if (differ) {
29219 different++;
29220 BV_SET(fields, 26);
29221 }
29222
29223 differ = (old->is_connected != real_packet->is_connected);
29224 if (differ) {
29225 different++;
29226 }
29227 if (packet->is_connected) {
29228 BV_SET(fields, 27);
29229 }
29230
29231 differ = (old->revolution_finishes != real_packet->revolution_finishes);
29232 if (differ) {
29233 different++;
29234 BV_SET(fields, 28);
29235 }
29236
29237 differ = (old->ai_skill_level != real_packet->ai_skill_level);
29238 if (differ) {
29239 different++;
29240 BV_SET(fields, 29);
29241 }
29242
29243 differ = (old->barbarian_type != real_packet->barbarian_type);
29244 if (differ) {
29245 different++;
29246 BV_SET(fields, 30);
29247 }
29248
29249 differ = !BV_ARE_EQUAL(old->gives_shared_vision, real_packet->gives_shared_vision);
29250 if (differ) {
29251 different++;
29252 BV_SET(fields, 31);
29253 }
29254
29255 differ = !BV_ARE_EQUAL(old->gives_shared_tiles, real_packet->gives_shared_tiles);
29256 if (differ) {
29257 different++;
29258 BV_SET(fields, 32);
29259 }
29260
29261 differ = (old->history != real_packet->history);
29262 if (differ) {
29263 different++;
29264 BV_SET(fields, 33);
29265 }
29266
29267 differ = (old->culture != real_packet->culture);
29268 if (differ) {
29269 different++;
29270 BV_SET(fields, 34);
29271 }
29272
29273 differ = FALSE;
29274 {
29275 int i;
29276
29277 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
29278 differ = (old->love[i] != real_packet->love[i]);
29279 if (differ) {
29280 break;
29281 }
29282 }
29283 }
29284 if (differ) {
29285 different++;
29286 BV_SET(fields, 35);
29287 }
29288
29289 differ = (old->color_valid != real_packet->color_valid);
29290 if (differ) {
29291 different++;
29292 }
29293 if (packet->color_valid) {
29294 BV_SET(fields, 36);
29295 }
29296
29297 differ = (old->color_changeable != real_packet->color_changeable);
29298 if (differ) {
29299 different++;
29300 }
29301 if (packet->color_changeable) {
29302 BV_SET(fields, 37);
29303 }
29304
29305 differ = (old->color_red != real_packet->color_red);
29306 if (differ) {
29307 different++;
29308 BV_SET(fields, 38);
29309 }
29310
29311 differ = (old->color_green != real_packet->color_green);
29312 if (differ) {
29313 different++;
29314 BV_SET(fields, 39);
29315 }
29316
29317 differ = (old->color_blue != real_packet->color_blue);
29318 if (differ) {
29319 different++;
29320 BV_SET(fields, 40);
29321 }
29322
29323 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
29324 if (differ) {
29325 different++;
29326 BV_SET(fields, 41);
29327 }
29328
29329 differ = FALSE;
29330 {
29331 int i;
29332
29333 for (i = 0; i < B_LAST; i++) {
29334 differ = (old->wonders[i] != real_packet->wonders[i]);
29335 if (differ) {
29336 break;
29337 }
29338 }
29339 }
29340 if (differ) {
29341 different++;
29342 BV_SET(fields, 42);
29343 }
29344
29345 differ = (old->multip_count != real_packet->multip_count);
29346 if (differ) {
29347 different++;
29348 BV_SET(fields, 43);
29349 }
29350
29351 differ = (old->multip_count != real_packet->multip_count);
29352 if (!differ) {
29353 int i;
29354
29355 for (i = 0; i < real_packet->multip_count; i++) {
29356 differ = (old->multiplier[i] != real_packet->multiplier[i]);
29357 if (differ) {
29358 break;
29359 }
29360 }
29361 }
29362 if (differ) {
29363 different++;
29364 BV_SET(fields, 44);
29365 }
29366
29367 differ = (old->multip_count != real_packet->multip_count);
29368 if (!differ) {
29369 int i;
29370
29371 for (i = 0; i < real_packet->multip_count; i++) {
29372 differ = (old->multiplier_target[i] != real_packet->multiplier_target[i]);
29373 if (differ) {
29374 break;
29375 }
29376 }
29377 }
29378 if (differ) {
29379 different++;
29380 BV_SET(fields, 45);
29381 }
29382
29383 differ = (old->multip_count != real_packet->multip_count);
29384 if (!differ) {
29385 int i;
29386
29387 for (i = 0; i < real_packet->multip_count; i++) {
29388 differ = (old->multiplier_changed[i] != real_packet->multiplier_changed[i]);
29389 if (differ) {
29390 break;
29391 }
29392 }
29393 }
29394 if (differ) {
29395 different++;
29396 BV_SET(fields, 46);
29397 }
29398
29399 if (different == 0) {
29400 log_packet_detailed(" no change -> discard");
29402 }
29403
29404#ifdef FREECIV_JSON_CONNECTION
29405 field_addr.name = "fields";
29406#endif /* FREECIV_JSON_CONNECTION */
29407 e = 0;
29408 e |= DIO_BV_PUT(&dout, &field_addr, fields);
29409 if (e) {
29410 log_packet_detailed("fields bitvector error detected");
29411 }
29412#ifdef FREECIV_JSON_CONNECTION
29413 field_addr.name = "playerno";
29414#endif /* FREECIV_JSON_CONNECTION */
29415 e = 0;
29416 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
29417 if (e) {
29418 log_packet_detailed("'playerno' field error detected");
29419 }
29420
29421 if (BV_ISSET(fields, 0)) {
29422 log_packet_detailed(" field 'name' has changed");
29423#ifdef FREECIV_JSON_CONNECTION
29424 field_addr.name = "name";
29425#endif /* FREECIV_JSON_CONNECTION */
29426 e = 0;
29427 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
29428 if (e) {
29429 log_packet_detailed("'name' field error detected");
29430 }
29431 }
29432 if (BV_ISSET(fields, 1)) {
29433 log_packet_detailed(" field 'username' has changed");
29434#ifdef FREECIV_JSON_CONNECTION
29435 field_addr.name = "username";
29436#endif /* FREECIV_JSON_CONNECTION */
29437 e = 0;
29438 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
29439 if (e) {
29440 log_packet_detailed("'username' field error detected");
29441 }
29442 }
29443 /* field 2 is folded into the header */
29444 if (BV_ISSET(fields, 3)) {
29445 log_packet_detailed(" field 'score' has changed");
29446#ifdef FREECIV_JSON_CONNECTION
29447 field_addr.name = "score";
29448#endif /* FREECIV_JSON_CONNECTION */
29449 e = 0;
29450 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
29451 if (e) {
29452 log_packet_detailed("'score' field error detected");
29453 }
29454 }
29455 /* field 4 is folded into the header */
29456 /* field 5 is folded into the header */
29457 if (BV_ISSET(fields, 6)) {
29458 log_packet_detailed(" field 'government' has changed");
29459#ifdef FREECIV_JSON_CONNECTION
29460 field_addr.name = "government";
29461#endif /* FREECIV_JSON_CONNECTION */
29462 e = 0;
29463 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
29464 if (e) {
29465 log_packet_detailed("'government' field error detected");
29466 }
29467 }
29468 if (BV_ISSET(fields, 7)) {
29469 log_packet_detailed(" field 'target_government' has changed");
29470#ifdef FREECIV_JSON_CONNECTION
29471 field_addr.name = "target_government";
29472#endif /* FREECIV_JSON_CONNECTION */
29473 e = 0;
29474 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
29475 if (e) {
29476 log_packet_detailed("'target_government' field error detected");
29477 }
29478 }
29479 if (BV_ISSET(fields, 8)) {
29480 log_packet_detailed(" field 'real_embassy' has changed");
29481#ifdef FREECIV_JSON_CONNECTION
29482 field_addr.name = "real_embassy";
29483#endif /* FREECIV_JSON_CONNECTION */
29484 e = 0;
29485 e |= DIO_BV_PUT(&dout, &field_addr, packet->real_embassy);
29486 if (e) {
29487 log_packet_detailed("'real_embassy' field error detected");
29488 }
29489 }
29490 if (BV_ISSET(fields, 9)) {
29491 log_packet_detailed(" field 'mood' has changed");
29492#ifdef FREECIV_JSON_CONNECTION
29493 field_addr.name = "mood";
29494#endif /* FREECIV_JSON_CONNECTION */
29495 e = 0;
29496 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
29497 if (e) {
29498 log_packet_detailed("'mood' field error detected");
29499 }
29500 }
29501 if (BV_ISSET(fields, 10)) {
29502 log_packet_detailed(" field 'style' has changed");
29503#ifdef FREECIV_JSON_CONNECTION
29504 field_addr.name = "style";
29505#endif /* FREECIV_JSON_CONNECTION */
29506 e = 0;
29507 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
29508 if (e) {
29509 log_packet_detailed("'style' field error detected");
29510 }
29511 }
29512 if (BV_ISSET(fields, 11)) {
29513 log_packet_detailed(" field 'music_style' has changed");
29514#ifdef FREECIV_JSON_CONNECTION
29515 field_addr.name = "music_style";
29516#endif /* FREECIV_JSON_CONNECTION */
29517 e = 0;
29518 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
29519 if (e) {
29520 log_packet_detailed("'music_style' field error detected");
29521 }
29522 }
29523 if (BV_ISSET(fields, 12)) {
29524 log_packet_detailed(" field 'nation' has changed");
29525#ifdef FREECIV_JSON_CONNECTION
29526 field_addr.name = "nation";
29527#endif /* FREECIV_JSON_CONNECTION */
29528 e = 0;
29529 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
29530 if (e) {
29531 log_packet_detailed("'nation' field error detected");
29532 }
29533 }
29534 if (BV_ISSET(fields, 13)) {
29535 log_packet_detailed(" field 'team' has changed");
29536#ifdef FREECIV_JSON_CONNECTION
29537 field_addr.name = "team";
29538#endif /* FREECIV_JSON_CONNECTION */
29539 e = 0;
29540 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
29541 if (e) {
29542 log_packet_detailed("'team' field error detected");
29543 }
29544 }
29545 /* field 14 is folded into the header */
29546 /* field 15 is folded into the header */
29547 if (BV_ISSET(fields, 16)) {
29548 log_packet_detailed(" field 'nturns_idle' has changed");
29549#ifdef FREECIV_JSON_CONNECTION
29550 field_addr.name = "nturns_idle";
29551#endif /* FREECIV_JSON_CONNECTION */
29552 e = 0;
29553 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
29554 if (e) {
29555 log_packet_detailed("'nturns_idle' field error detected");
29556 }
29557 }
29558 if (BV_ISSET(fields, 17)) {
29559 log_packet_detailed(" field 'turns_alive' has changed");
29560#ifdef FREECIV_JSON_CONNECTION
29561 field_addr.name = "turns_alive";
29562#endif /* FREECIV_JSON_CONNECTION */
29563 e = 0;
29564 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
29565 if (e) {
29566 log_packet_detailed("'turns_alive' field error detected");
29567 }
29568 }
29569 /* field 18 is folded into the header */
29570 if (BV_ISSET(fields, 19)) {
29571 log_packet_detailed(" field 'autoselect_weight' has changed");
29572#ifdef FREECIV_JSON_CONNECTION
29573 field_addr.name = "autoselect_weight";
29574#endif /* FREECIV_JSON_CONNECTION */
29575 e = 0;
29576 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
29577 if (e) {
29578 log_packet_detailed("'autoselect_weight' field error detected");
29579 }
29580 }
29581 if (BV_ISSET(fields, 20)) {
29582 log_packet_detailed(" field 'gold' has changed");
29583#ifdef FREECIV_JSON_CONNECTION
29584 field_addr.name = "gold";
29585#endif /* FREECIV_JSON_CONNECTION */
29586 e = 0;
29587 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
29588 if (e) {
29589 log_packet_detailed("'gold' field error detected");
29590 }
29591 }
29592 if (BV_ISSET(fields, 21)) {
29593 log_packet_detailed(" field 'tax' has changed");
29594#ifdef FREECIV_JSON_CONNECTION
29595 field_addr.name = "tax";
29596#endif /* FREECIV_JSON_CONNECTION */
29597 e = 0;
29598 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
29599 if (e) {
29600 log_packet_detailed("'tax' field error detected");
29601 }
29602 }
29603 if (BV_ISSET(fields, 22)) {
29604 log_packet_detailed(" field 'science' has changed");
29605#ifdef FREECIV_JSON_CONNECTION
29606 field_addr.name = "science";
29607#endif /* FREECIV_JSON_CONNECTION */
29608 e = 0;
29609 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
29610 if (e) {
29611 log_packet_detailed("'science' field error detected");
29612 }
29613 }
29614 if (BV_ISSET(fields, 23)) {
29615 log_packet_detailed(" field 'luxury' has changed");
29616#ifdef FREECIV_JSON_CONNECTION
29617 field_addr.name = "luxury";
29618#endif /* FREECIV_JSON_CONNECTION */
29619 e = 0;
29620 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
29621 if (e) {
29622 log_packet_detailed("'luxury' field error detected");
29623 }
29624 }
29625 if (BV_ISSET(fields, 24)) {
29626 log_packet_detailed(" field 'infrapoints' has changed");
29627#ifdef FREECIV_JSON_CONNECTION
29628 field_addr.name = "infrapoints";
29629#endif /* FREECIV_JSON_CONNECTION */
29630 e = 0;
29631 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
29632 if (e) {
29633 log_packet_detailed("'infrapoints' field error detected");
29634 }
29635 }
29636 if (BV_ISSET(fields, 25)) {
29637 log_packet_detailed(" field 'tech_upkeep_32' has changed");
29638#ifdef FREECIV_JSON_CONNECTION
29639 field_addr.name = "tech_upkeep_32";
29640#endif /* FREECIV_JSON_CONNECTION */
29641 e = 0;
29642 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep_32);
29643 if (e) {
29644 log_packet_detailed("'tech_upkeep_32' field error detected");
29645 }
29646 }
29647 if (BV_ISSET(fields, 26)) {
29648 log_packet_detailed(" field 'science_cost' has changed");
29649#ifdef FREECIV_JSON_CONNECTION
29650 field_addr.name = "science_cost";
29651#endif /* FREECIV_JSON_CONNECTION */
29652 e = 0;
29653 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
29654 if (e) {
29655 log_packet_detailed("'science_cost' field error detected");
29656 }
29657 }
29658 /* field 27 is folded into the header */
29659 if (BV_ISSET(fields, 28)) {
29660 log_packet_detailed(" field 'revolution_finishes' has changed");
29661#ifdef FREECIV_JSON_CONNECTION
29662 field_addr.name = "revolution_finishes";
29663#endif /* FREECIV_JSON_CONNECTION */
29664 e = 0;
29665 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
29666 if (e) {
29667 log_packet_detailed("'revolution_finishes' field error detected");
29668 }
29669 }
29670 if (BV_ISSET(fields, 29)) {
29671 log_packet_detailed(" field 'ai_skill_level' has changed");
29672#ifdef FREECIV_JSON_CONNECTION
29673 field_addr.name = "ai_skill_level";
29674#endif /* FREECIV_JSON_CONNECTION */
29675 e = 0;
29676 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
29677 if (e) {
29678 log_packet_detailed("'ai_skill_level' field error detected");
29679 }
29680 }
29681 if (BV_ISSET(fields, 30)) {
29682 log_packet_detailed(" field 'barbarian_type' has changed");
29683#ifdef FREECIV_JSON_CONNECTION
29684 field_addr.name = "barbarian_type";
29685#endif /* FREECIV_JSON_CONNECTION */
29686 e = 0;
29687 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
29688 if (e) {
29689 log_packet_detailed("'barbarian_type' field error detected");
29690 }
29691 }
29692 if (BV_ISSET(fields, 31)) {
29693 log_packet_detailed(" field 'gives_shared_vision' has changed");
29694#ifdef FREECIV_JSON_CONNECTION
29695 field_addr.name = "gives_shared_vision";
29696#endif /* FREECIV_JSON_CONNECTION */
29697 e = 0;
29699 if (e) {
29700 log_packet_detailed("'gives_shared_vision' field error detected");
29701 }
29702 }
29703 if (BV_ISSET(fields, 32)) {
29704 log_packet_detailed(" field 'gives_shared_tiles' has changed");
29705#ifdef FREECIV_JSON_CONNECTION
29706 field_addr.name = "gives_shared_tiles";
29707#endif /* FREECIV_JSON_CONNECTION */
29708 e = 0;
29709 e |= DIO_BV_PUT(&dout, &field_addr, packet->gives_shared_tiles);
29710 if (e) {
29711 log_packet_detailed("'gives_shared_tiles' field error detected");
29712 }
29713 }
29714 if (BV_ISSET(fields, 33)) {
29715 log_packet_detailed(" field 'history' has changed");
29716#ifdef FREECIV_JSON_CONNECTION
29717 field_addr.name = "history";
29718#endif /* FREECIV_JSON_CONNECTION */
29719 e = 0;
29720 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
29721 if (e) {
29722 log_packet_detailed("'history' field error detected");
29723 }
29724 }
29725 if (BV_ISSET(fields, 34)) {
29726 log_packet_detailed(" field 'culture' has changed");
29727#ifdef FREECIV_JSON_CONNECTION
29728 field_addr.name = "culture";
29729#endif /* FREECIV_JSON_CONNECTION */
29730 e = 0;
29731 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
29732 if (e) {
29733 log_packet_detailed("'culture' field error detected");
29734 }
29735 }
29736 if (BV_ISSET(fields, 35)) {
29737 log_packet_detailed(" field 'love' has changed");
29738#ifdef FREECIV_JSON_CONNECTION
29739 field_addr.name = "love";
29740#endif /* FREECIV_JSON_CONNECTION */
29741 e = 0;
29742 {
29743 int i;
29744
29745#ifdef FREECIV_JSON_CONNECTION
29746 /* Create the array. */
29748
29749 /* Enter the array. */
29750 field_addr.sub_location = plocation_elem_new(0);
29751#endif /* FREECIV_JSON_CONNECTION */
29752
29753 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
29754#ifdef FREECIV_JSON_CONNECTION
29755 /* Next array element. */
29756 field_addr.sub_location->number = i;
29757#endif /* FREECIV_JSON_CONNECTION */
29758
29759 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
29760 }
29761
29762#ifdef FREECIV_JSON_CONNECTION
29763 /* Exit array. */
29764 FC_FREE(field_addr.sub_location);
29765#endif /* FREECIV_JSON_CONNECTION */
29766 }
29767 if (e) {
29768 log_packet_detailed("'love' field error detected");
29769 }
29770 }
29771 /* field 36 is folded into the header */
29772 /* field 37 is folded into the header */
29773 if (BV_ISSET(fields, 38)) {
29774 log_packet_detailed(" field 'color_red' has changed");
29775#ifdef FREECIV_JSON_CONNECTION
29776 field_addr.name = "color_red";
29777#endif /* FREECIV_JSON_CONNECTION */
29778 e = 0;
29779 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
29780 if (e) {
29781 log_packet_detailed("'color_red' field error detected");
29782 }
29783 }
29784 if (BV_ISSET(fields, 39)) {
29785 log_packet_detailed(" field 'color_green' has changed");
29786#ifdef FREECIV_JSON_CONNECTION
29787 field_addr.name = "color_green";
29788#endif /* FREECIV_JSON_CONNECTION */
29789 e = 0;
29790 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
29791 if (e) {
29792 log_packet_detailed("'color_green' field error detected");
29793 }
29794 }
29795 if (BV_ISSET(fields, 40)) {
29796 log_packet_detailed(" field 'color_blue' has changed");
29797#ifdef FREECIV_JSON_CONNECTION
29798 field_addr.name = "color_blue";
29799#endif /* FREECIV_JSON_CONNECTION */
29800 e = 0;
29801 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
29802 if (e) {
29803 log_packet_detailed("'color_blue' field error detected");
29804 }
29805 }
29806 if (BV_ISSET(fields, 41)) {
29807 log_packet_detailed(" field 'flags' has changed");
29808#ifdef FREECIV_JSON_CONNECTION
29809 field_addr.name = "flags";
29810#endif /* FREECIV_JSON_CONNECTION */
29811 e = 0;
29812 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
29813 if (e) {
29814 log_packet_detailed("'flags' field error detected");
29815 }
29816 }
29817 if (BV_ISSET(fields, 42)) {
29818 log_packet_detailed(" field 'wonders' has changed");
29819#ifdef FREECIV_JSON_CONNECTION
29820 field_addr.name = "wonders";
29821#endif /* FREECIV_JSON_CONNECTION */
29822 e = 0;
29824 {
29825 int i;
29826
29827#ifdef FREECIV_JSON_CONNECTION
29828 size_t count_i = 0;
29829
29830 /* Create the array. */
29831 e |= DIO_PUT(farray, &dout, &field_addr, 0);
29832
29833 /* Enter array. */
29834 field_addr.sub_location = plocation_elem_new(0);
29835#endif /* FREECIV_JSON_CONNECTION */
29836
29837 for (i = 0; i < B_LAST; i++) {
29838 differ = (old->wonders[i] != real_packet->wonders[i]);
29839
29840 if (differ) {
29841#ifdef FREECIV_JSON_CONNECTION
29842 /* Append next diff array element. */
29843 field_addr.sub_location->number = -1;
29844
29845 /* Create the diff array element. */
29846 e |= DIO_PUT(farray, &dout, &field_addr, 2);
29847
29848 /* Enter diff array element (start at the index address). */
29849 field_addr.sub_location->number = count_i++;
29850 field_addr.sub_location->sub_location = plocation_elem_new(0);
29851#endif /* FREECIV_JSON_CONNECTION */
29852
29853 /* Write the index */
29854#if B_LAST <= MAX_UINT8
29855 e |= DIO_PUT(uint8, &dout, &field_addr, i);
29856#else
29857 e |= DIO_PUT(uint16, &dout, &field_addr, i);
29858#endif
29859
29860#ifdef FREECIV_JSON_CONNECTION
29861 /* Content address. */
29862 field_addr.sub_location->sub_location->number = 1;
29863#endif /* FREECIV_JSON_CONNECTION */
29864
29865 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
29866
29867#ifdef FREECIV_JSON_CONNECTION
29868 /* Exit diff array element. */
29869 FC_FREE(field_addr.sub_location->sub_location);
29870#endif /* FREECIV_JSON_CONNECTION */
29871 }
29872 }
29873
29874#ifdef FREECIV_JSON_CONNECTION
29875 /* Append diff array element. */
29876 field_addr.sub_location->number = -1;
29877
29878 /* Create the terminating diff array element. */
29879 e |= DIO_PUT(farray, &dout, &field_addr, 1);
29880
29881 /* Enter diff array element (start at the index address). */
29882 field_addr.sub_location->number = count_i;
29883 field_addr.sub_location->sub_location = plocation_elem_new(0);
29884#endif /* FREECIV_JSON_CONNECTION */
29885
29886 /* Write the sentinel value */
29887#if B_LAST <= MAX_UINT8
29888 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
29889#else
29890 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
29891#endif
29892
29893#ifdef FREECIV_JSON_CONNECTION
29894 /* Exit diff array element. */
29895 FC_FREE(field_addr.sub_location->sub_location);
29896
29897 /* Exit array. */
29898 FC_FREE(field_addr.sub_location);
29899#endif /* FREECIV_JSON_CONNECTION */
29900 }
29901 if (e) {
29902 log_packet_detailed("'wonders' field error detected");
29903 }
29904 }
29905 if (BV_ISSET(fields, 43)) {
29906 log_packet_detailed(" field 'multip_count' has changed");
29907#ifdef FREECIV_JSON_CONNECTION
29908 field_addr.name = "multip_count";
29909#endif /* FREECIV_JSON_CONNECTION */
29910 e = 0;
29911 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
29912 if (e) {
29913 log_packet_detailed("'multip_count' field error detected");
29914 }
29915 }
29916 if (BV_ISSET(fields, 44)) {
29917 log_packet_detailed(" field 'multiplier' has changed");
29918#ifdef FREECIV_JSON_CONNECTION
29919 field_addr.name = "multiplier";
29920#endif /* FREECIV_JSON_CONNECTION */
29921 e = 0;
29922 {
29923 int i;
29924
29925#ifdef FREECIV_JSON_CONNECTION
29926 /* Create the array. */
29927 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
29928
29929 /* Enter the array. */
29930 field_addr.sub_location = plocation_elem_new(0);
29931#endif /* FREECIV_JSON_CONNECTION */
29932
29933 for (i = 0; i < real_packet->multip_count; i++) {
29934#ifdef FREECIV_JSON_CONNECTION
29935 /* Next array element. */
29936 field_addr.sub_location->number = i;
29937#endif /* FREECIV_JSON_CONNECTION */
29938
29939 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
29940 }
29941
29942#ifdef FREECIV_JSON_CONNECTION
29943 /* Exit array. */
29944 FC_FREE(field_addr.sub_location);
29945#endif /* FREECIV_JSON_CONNECTION */
29946 }
29947 if (e) {
29948 log_packet_detailed("'multiplier' field error detected");
29949 }
29950 }
29951 if (BV_ISSET(fields, 45)) {
29952 log_packet_detailed(" field 'multiplier_target' has changed");
29953#ifdef FREECIV_JSON_CONNECTION
29954 field_addr.name = "multiplier_target";
29955#endif /* FREECIV_JSON_CONNECTION */
29956 e = 0;
29957 {
29958 int i;
29959
29960#ifdef FREECIV_JSON_CONNECTION
29961 /* Create the array. */
29962 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
29963
29964 /* Enter the array. */
29965 field_addr.sub_location = plocation_elem_new(0);
29966#endif /* FREECIV_JSON_CONNECTION */
29967
29968 for (i = 0; i < real_packet->multip_count; i++) {
29969#ifdef FREECIV_JSON_CONNECTION
29970 /* Next array element. */
29971 field_addr.sub_location->number = i;
29972#endif /* FREECIV_JSON_CONNECTION */
29973
29974 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
29975 }
29976
29977#ifdef FREECIV_JSON_CONNECTION
29978 /* Exit array. */
29979 FC_FREE(field_addr.sub_location);
29980#endif /* FREECIV_JSON_CONNECTION */
29981 }
29982 if (e) {
29983 log_packet_detailed("'multiplier_target' field error detected");
29984 }
29985 }
29986 if (BV_ISSET(fields, 46)) {
29987 log_packet_detailed(" field 'multiplier_changed' has changed");
29988#ifdef FREECIV_JSON_CONNECTION
29989 field_addr.name = "multiplier_changed";
29990#endif /* FREECIV_JSON_CONNECTION */
29991 e = 0;
29992 {
29993 int i;
29994
29995#ifdef FREECIV_JSON_CONNECTION
29996 /* Create the array. */
29997 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
29998
29999 /* Enter the array. */
30000 field_addr.sub_location = plocation_elem_new(0);
30001#endif /* FREECIV_JSON_CONNECTION */
30002
30003 for (i = 0; i < real_packet->multip_count; i++) {
30004#ifdef FREECIV_JSON_CONNECTION
30005 /* Next array element. */
30006 field_addr.sub_location->number = i;
30007#endif /* FREECIV_JSON_CONNECTION */
30008
30009 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
30010 }
30011
30012#ifdef FREECIV_JSON_CONNECTION
30013 /* Exit array. */
30014 FC_FREE(field_addr.sub_location);
30015#endif /* FREECIV_JSON_CONNECTION */
30016 }
30017 if (e) {
30018 log_packet_detailed("'multiplier_changed' field error detected");
30019 }
30020 }
30021
30022 *old = *real_packet;
30023#endif /* FREECIV_DELTA_PROTOCOL */
30024#ifndef FREECIV_DELTA_PROTOCOL
30025#ifdef FREECIV_JSON_CONNECTION
30026 field_addr.name = "playerno";
30027#endif /* FREECIV_JSON_CONNECTION */
30028 e = 0;
30029 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
30030 if (e) {
30031 log_packet_detailed("'playerno' field error detected");
30032 }
30033#ifdef FREECIV_JSON_CONNECTION
30034 field_addr.name = "name";
30035#endif /* FREECIV_JSON_CONNECTION */
30036 e = 0;
30037 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
30038 if (e) {
30039 log_packet_detailed("'name' field error detected");
30040 }
30041#ifdef FREECIV_JSON_CONNECTION
30042 field_addr.name = "username";
30043#endif /* FREECIV_JSON_CONNECTION */
30044 e = 0;
30045 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
30046 if (e) {
30047 log_packet_detailed("'username' field error detected");
30048 }
30049#ifdef FREECIV_JSON_CONNECTION
30050 field_addr.name = "unassigned_user";
30051#endif /* FREECIV_JSON_CONNECTION */
30052 e = 0;
30053 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unassigned_user);
30054 if (e) {
30055 log_packet_detailed("'unassigned_user' field error detected");
30056 }
30057#ifdef FREECIV_JSON_CONNECTION
30058 field_addr.name = "score";
30059#endif /* FREECIV_JSON_CONNECTION */
30060 e = 0;
30061 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->score);
30062 if (e) {
30063 log_packet_detailed("'score' field error detected");
30064 }
30065#ifdef FREECIV_JSON_CONNECTION
30066 field_addr.name = "is_male";
30067#endif /* FREECIV_JSON_CONNECTION */
30068 e = 0;
30069 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
30070 if (e) {
30071 log_packet_detailed("'is_male' field error detected");
30072 }
30073#ifdef FREECIV_JSON_CONNECTION
30074 field_addr.name = "was_created";
30075#endif /* FREECIV_JSON_CONNECTION */
30076 e = 0;
30077 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_created);
30078 if (e) {
30079 log_packet_detailed("'was_created' field error detected");
30080 }
30081#ifdef FREECIV_JSON_CONNECTION
30082 field_addr.name = "government";
30083#endif /* FREECIV_JSON_CONNECTION */
30084 e = 0;
30085 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
30086 if (e) {
30087 log_packet_detailed("'government' field error detected");
30088 }
30089#ifdef FREECIV_JSON_CONNECTION
30090 field_addr.name = "target_government";
30091#endif /* FREECIV_JSON_CONNECTION */
30092 e = 0;
30093 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
30094 if (e) {
30095 log_packet_detailed("'target_government' field error detected");
30096 }
30097#ifdef FREECIV_JSON_CONNECTION
30098 field_addr.name = "real_embassy";
30099#endif /* FREECIV_JSON_CONNECTION */
30100 e = 0;
30101 e |= DIO_BV_PUT(&dout, &field_addr, packet->real_embassy);
30102 if (e) {
30103 log_packet_detailed("'real_embassy' field error detected");
30104 }
30105#ifdef FREECIV_JSON_CONNECTION
30106 field_addr.name = "mood";
30107#endif /* FREECIV_JSON_CONNECTION */
30108 e = 0;
30109 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mood);
30110 if (e) {
30111 log_packet_detailed("'mood' field error detected");
30112 }
30113#ifdef FREECIV_JSON_CONNECTION
30114 field_addr.name = "style";
30115#endif /* FREECIV_JSON_CONNECTION */
30116 e = 0;
30117 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
30118 if (e) {
30119 log_packet_detailed("'style' field error detected");
30120 }
30121#ifdef FREECIV_JSON_CONNECTION
30122 field_addr.name = "music_style";
30123#endif /* FREECIV_JSON_CONNECTION */
30124 e = 0;
30125 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->music_style);
30126 if (e) {
30127 log_packet_detailed("'music_style' field error detected");
30128 }
30129#ifdef FREECIV_JSON_CONNECTION
30130 field_addr.name = "nation";
30131#endif /* FREECIV_JSON_CONNECTION */
30132 e = 0;
30133 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
30134 if (e) {
30135 log_packet_detailed("'nation' field error detected");
30136 }
30137#ifdef FREECIV_JSON_CONNECTION
30138 field_addr.name = "team";
30139#endif /* FREECIV_JSON_CONNECTION */
30140 e = 0;
30141 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
30142 if (e) {
30143 log_packet_detailed("'team' field error detected");
30144 }
30145#ifdef FREECIV_JSON_CONNECTION
30146 field_addr.name = "is_ready";
30147#endif /* FREECIV_JSON_CONNECTION */
30148 e = 0;
30149 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_ready);
30150 if (e) {
30151 log_packet_detailed("'is_ready' field error detected");
30152 }
30153#ifdef FREECIV_JSON_CONNECTION
30154 field_addr.name = "phase_done";
30155#endif /* FREECIV_JSON_CONNECTION */
30156 e = 0;
30157 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
30158 if (e) {
30159 log_packet_detailed("'phase_done' field error detected");
30160 }
30161#ifdef FREECIV_JSON_CONNECTION
30162 field_addr.name = "nturns_idle";
30163#endif /* FREECIV_JSON_CONNECTION */
30164 e = 0;
30165 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
30166 if (e) {
30167 log_packet_detailed("'nturns_idle' field error detected");
30168 }
30169#ifdef FREECIV_JSON_CONNECTION
30170 field_addr.name = "turns_alive";
30171#endif /* FREECIV_JSON_CONNECTION */
30172 e = 0;
30173 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turns_alive);
30174 if (e) {
30175 log_packet_detailed("'turns_alive' field error detected");
30176 }
30177#ifdef FREECIV_JSON_CONNECTION
30178 field_addr.name = "is_alive";
30179#endif /* FREECIV_JSON_CONNECTION */
30180 e = 0;
30181 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
30182 if (e) {
30183 log_packet_detailed("'is_alive' field error detected");
30184 }
30185#ifdef FREECIV_JSON_CONNECTION
30186 field_addr.name = "autoselect_weight";
30187#endif /* FREECIV_JSON_CONNECTION */
30188 e = 0;
30189 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
30190 if (e) {
30191 log_packet_detailed("'autoselect_weight' field error detected");
30192 }
30193#ifdef FREECIV_JSON_CONNECTION
30194 field_addr.name = "gold";
30195#endif /* FREECIV_JSON_CONNECTION */
30196 e = 0;
30197 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
30198 if (e) {
30199 log_packet_detailed("'gold' field error detected");
30200 }
30201#ifdef FREECIV_JSON_CONNECTION
30202 field_addr.name = "tax";
30203#endif /* FREECIV_JSON_CONNECTION */
30204 e = 0;
30205 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
30206 if (e) {
30207 log_packet_detailed("'tax' field error detected");
30208 }
30209#ifdef FREECIV_JSON_CONNECTION
30210 field_addr.name = "science";
30211#endif /* FREECIV_JSON_CONNECTION */
30212 e = 0;
30213 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
30214 if (e) {
30215 log_packet_detailed("'science' field error detected");
30216 }
30217#ifdef FREECIV_JSON_CONNECTION
30218 field_addr.name = "luxury";
30219#endif /* FREECIV_JSON_CONNECTION */
30220 e = 0;
30221 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
30222 if (e) {
30223 log_packet_detailed("'luxury' field error detected");
30224 }
30225#ifdef FREECIV_JSON_CONNECTION
30226 field_addr.name = "infrapoints";
30227#endif /* FREECIV_JSON_CONNECTION */
30228 e = 0;
30229 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
30230 if (e) {
30231 log_packet_detailed("'infrapoints' field error detected");
30232 }
30233#ifdef FREECIV_JSON_CONNECTION
30234 field_addr.name = "tech_upkeep_32";
30235#endif /* FREECIV_JSON_CONNECTION */
30236 e = 0;
30237 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->tech_upkeep_32);
30238 if (e) {
30239 log_packet_detailed("'tech_upkeep_32' field error detected");
30240 }
30241#ifdef FREECIV_JSON_CONNECTION
30242 field_addr.name = "science_cost";
30243#endif /* FREECIV_JSON_CONNECTION */
30244 e = 0;
30245 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->science_cost);
30246 if (e) {
30247 log_packet_detailed("'science_cost' field error detected");
30248 }
30249#ifdef FREECIV_JSON_CONNECTION
30250 field_addr.name = "is_connected";
30251#endif /* FREECIV_JSON_CONNECTION */
30252 e = 0;
30253 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_connected);
30254 if (e) {
30255 log_packet_detailed("'is_connected' field error detected");
30256 }
30257#ifdef FREECIV_JSON_CONNECTION
30258 field_addr.name = "revolution_finishes";
30259#endif /* FREECIV_JSON_CONNECTION */
30260 e = 0;
30261 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
30262 if (e) {
30263 log_packet_detailed("'revolution_finishes' field error detected");
30264 }
30265#ifdef FREECIV_JSON_CONNECTION
30266 field_addr.name = "ai_skill_level";
30267#endif /* FREECIV_JSON_CONNECTION */
30268 e = 0;
30269 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ai_skill_level);
30270 if (e) {
30271 log_packet_detailed("'ai_skill_level' field error detected");
30272 }
30273#ifdef FREECIV_JSON_CONNECTION
30274 field_addr.name = "barbarian_type";
30275#endif /* FREECIV_JSON_CONNECTION */
30276 e = 0;
30277 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
30278 if (e) {
30279 log_packet_detailed("'barbarian_type' field error detected");
30280 }
30281#ifdef FREECIV_JSON_CONNECTION
30282 field_addr.name = "gives_shared_vision";
30283#endif /* FREECIV_JSON_CONNECTION */
30284 e = 0;
30286 if (e) {
30287 log_packet_detailed("'gives_shared_vision' field error detected");
30288 }
30289#ifdef FREECIV_JSON_CONNECTION
30290 field_addr.name = "gives_shared_tiles";
30291#endif /* FREECIV_JSON_CONNECTION */
30292 e = 0;
30293 e |= DIO_BV_PUT(&dout, &field_addr, packet->gives_shared_tiles);
30294 if (e) {
30295 log_packet_detailed("'gives_shared_tiles' field error detected");
30296 }
30297#ifdef FREECIV_JSON_CONNECTION
30298 field_addr.name = "history";
30299#endif /* FREECIV_JSON_CONNECTION */
30300 e = 0;
30301 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
30302 if (e) {
30303 log_packet_detailed("'history' field error detected");
30304 }
30305#ifdef FREECIV_JSON_CONNECTION
30306 field_addr.name = "culture";
30307#endif /* FREECIV_JSON_CONNECTION */
30308 e = 0;
30309 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->culture);
30310 if (e) {
30311 log_packet_detailed("'culture' field error detected");
30312 }
30313#ifdef FREECIV_JSON_CONNECTION
30314 field_addr.name = "love";
30315#endif /* FREECIV_JSON_CONNECTION */
30316 e = 0;
30317 {
30318 int i;
30319
30320#ifdef FREECIV_JSON_CONNECTION
30321 /* Create the array. */
30323
30324 /* Enter the array. */
30325 field_addr.sub_location = plocation_elem_new(0);
30326#endif /* FREECIV_JSON_CONNECTION */
30327
30328 for (i = 0; i < MAX_NUM_PLAYER_SLOTS; i++) {
30329#ifdef FREECIV_JSON_CONNECTION
30330 /* Next array element. */
30331 field_addr.sub_location->number = i;
30332#endif /* FREECIV_JSON_CONNECTION */
30333
30334 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->love[i]);
30335 }
30336
30337#ifdef FREECIV_JSON_CONNECTION
30338 /* Exit array. */
30339 FC_FREE(field_addr.sub_location);
30340#endif /* FREECIV_JSON_CONNECTION */
30341 }
30342 if (e) {
30343 log_packet_detailed("'love' field error detected");
30344 }
30345#ifdef FREECIV_JSON_CONNECTION
30346 field_addr.name = "color_valid";
30347#endif /* FREECIV_JSON_CONNECTION */
30348 e = 0;
30349 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_valid);
30350 if (e) {
30351 log_packet_detailed("'color_valid' field error detected");
30352 }
30353#ifdef FREECIV_JSON_CONNECTION
30354 field_addr.name = "color_changeable";
30355#endif /* FREECIV_JSON_CONNECTION */
30356 e = 0;
30357 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->color_changeable);
30358 if (e) {
30359 log_packet_detailed("'color_changeable' field error detected");
30360 }
30361#ifdef FREECIV_JSON_CONNECTION
30362 field_addr.name = "color_red";
30363#endif /* FREECIV_JSON_CONNECTION */
30364 e = 0;
30365 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
30366 if (e) {
30367 log_packet_detailed("'color_red' field error detected");
30368 }
30369#ifdef FREECIV_JSON_CONNECTION
30370 field_addr.name = "color_green";
30371#endif /* FREECIV_JSON_CONNECTION */
30372 e = 0;
30373 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
30374 if (e) {
30375 log_packet_detailed("'color_green' field error detected");
30376 }
30377#ifdef FREECIV_JSON_CONNECTION
30378 field_addr.name = "color_blue";
30379#endif /* FREECIV_JSON_CONNECTION */
30380 e = 0;
30381 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
30382 if (e) {
30383 log_packet_detailed("'color_blue' field error detected");
30384 }
30385#ifdef FREECIV_JSON_CONNECTION
30386 field_addr.name = "flags";
30387#endif /* FREECIV_JSON_CONNECTION */
30388 e = 0;
30389 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
30390 if (e) {
30391 log_packet_detailed("'flags' field error detected");
30392 }
30393#ifdef FREECIV_JSON_CONNECTION
30394 field_addr.name = "wonders";
30395#endif /* FREECIV_JSON_CONNECTION */
30396 e = 0;
30397 {
30398 int i;
30399
30400#ifdef FREECIV_JSON_CONNECTION
30401 /* Create the array. */
30402 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
30403
30404 /* Enter the array. */
30405 field_addr.sub_location = plocation_elem_new(0);
30406#endif /* FREECIV_JSON_CONNECTION */
30407
30408 for (i = 0; i < B_LAST; i++) {
30409#ifdef FREECIV_JSON_CONNECTION
30410 /* Next array element. */
30411 field_addr.sub_location->number = i;
30412#endif /* FREECIV_JSON_CONNECTION */
30413
30414 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->wonders[i]);
30415 }
30416
30417#ifdef FREECIV_JSON_CONNECTION
30418 /* Exit array. */
30419 FC_FREE(field_addr.sub_location);
30420#endif /* FREECIV_JSON_CONNECTION */
30421 }
30422 if (e) {
30423 log_packet_detailed("'wonders' field error detected");
30424 }
30425#ifdef FREECIV_JSON_CONNECTION
30426 field_addr.name = "multip_count";
30427#endif /* FREECIV_JSON_CONNECTION */
30428 e = 0;
30429 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multip_count);
30430 if (e) {
30431 log_packet_detailed("'multip_count' field error detected");
30432 }
30433#ifdef FREECIV_JSON_CONNECTION
30434 field_addr.name = "multiplier";
30435#endif /* FREECIV_JSON_CONNECTION */
30436 e = 0;
30437 {
30438 int i;
30439
30440#ifdef FREECIV_JSON_CONNECTION
30441 /* Create the array. */
30442 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
30443
30444 /* Enter the array. */
30445 field_addr.sub_location = plocation_elem_new(0);
30446#endif /* FREECIV_JSON_CONNECTION */
30447
30448 for (i = 0; i < real_packet->multip_count; i++) {
30449#ifdef FREECIV_JSON_CONNECTION
30450 /* Next array element. */
30451 field_addr.sub_location->number = i;
30452#endif /* FREECIV_JSON_CONNECTION */
30453
30454 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier[i]);
30455 }
30456
30457#ifdef FREECIV_JSON_CONNECTION
30458 /* Exit array. */
30459 FC_FREE(field_addr.sub_location);
30460#endif /* FREECIV_JSON_CONNECTION */
30461 }
30462 if (e) {
30463 log_packet_detailed("'multiplier' field error detected");
30464 }
30465#ifdef FREECIV_JSON_CONNECTION
30466 field_addr.name = "multiplier_target";
30467#endif /* FREECIV_JSON_CONNECTION */
30468 e = 0;
30469 {
30470 int i;
30471
30472#ifdef FREECIV_JSON_CONNECTION
30473 /* Create the array. */
30474 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
30475
30476 /* Enter the array. */
30477 field_addr.sub_location = plocation_elem_new(0);
30478#endif /* FREECIV_JSON_CONNECTION */
30479
30480 for (i = 0; i < real_packet->multip_count; i++) {
30481#ifdef FREECIV_JSON_CONNECTION
30482 /* Next array element. */
30483 field_addr.sub_location->number = i;
30484#endif /* FREECIV_JSON_CONNECTION */
30485
30486 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multiplier_target[i]);
30487 }
30488
30489#ifdef FREECIV_JSON_CONNECTION
30490 /* Exit array. */
30491 FC_FREE(field_addr.sub_location);
30492#endif /* FREECIV_JSON_CONNECTION */
30493 }
30494 if (e) {
30495 log_packet_detailed("'multiplier_target' field error detected");
30496 }
30497#ifdef FREECIV_JSON_CONNECTION
30498 field_addr.name = "multiplier_changed";
30499#endif /* FREECIV_JSON_CONNECTION */
30500 e = 0;
30501 {
30502 int i;
30503
30504#ifdef FREECIV_JSON_CONNECTION
30505 /* Create the array. */
30506 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->multip_count);
30507
30508 /* Enter the array. */
30509 field_addr.sub_location = plocation_elem_new(0);
30510#endif /* FREECIV_JSON_CONNECTION */
30511
30512 for (i = 0; i < real_packet->multip_count; i++) {
30513#ifdef FREECIV_JSON_CONNECTION
30514 /* Next array element. */
30515 field_addr.sub_location->number = i;
30516#endif /* FREECIV_JSON_CONNECTION */
30517
30518 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->multiplier_changed[i]);
30519 }
30520
30521#ifdef FREECIV_JSON_CONNECTION
30522 /* Exit array. */
30523 FC_FREE(field_addr.sub_location);
30524#endif /* FREECIV_JSON_CONNECTION */
30525 }
30526 if (e) {
30527 log_packet_detailed("'multiplier_changed' field error detected");
30528 }
30529
30530#endif
30532}
30533
30535{
30536 if (!pc->used) {
30537 log_error("WARNING: trying to send data to the closed connection %s",
30539 return -1;
30540 }
30541 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_INFO].packet != NULL, -1,
30542 "Handler for PACKET_PLAYER_INFO not installed");
30543 return pc->phs.handlers->send[PACKET_PLAYER_INFO].packet(pc, packet);
30544}
30545
30546#ifdef FREECIV_DELTA_PROTOCOL
30547#define hash_packet_player_phase_done_100 hash_const
30548
30549#define cmp_packet_player_phase_done_100 cmp_const
30550
30552#endif /* FREECIV_DELTA_PROTOCOL */
30553
30555{
30556#ifdef FREECIV_DELTA_PROTOCOL
30558 struct packet_player_phase_done *old;
30559 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PHASE_DONE;
30560#endif /* FREECIV_DELTA_PROTOCOL */
30562#ifdef FREECIV_JSON_CONNECTION
30563 struct plocation field_addr;
30564 {
30568 }
30569#endif /* FREECIV_JSON_CONNECTION */
30570
30571#ifdef FREECIV_DELTA_PROTOCOL
30572#ifdef FREECIV_JSON_CONNECTION
30573 field_addr.name = "fields";
30574#endif /* FREECIV_JSON_CONNECTION */
30575 DIO_BV_GET(&din, &field_addr, fields);
30576
30577#else /* FREECIV_DELTA_PROTOCOL */
30578#ifdef FREECIV_JSON_CONNECTION
30579 field_addr.name = "turn";
30580#endif /* FREECIV_JSON_CONNECTION */
30581 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
30583 }
30584#endif
30585 log_packet_detailed("packet_player_phase_done_100: got info about ()");
30586
30587#ifdef FREECIV_DELTA_PROTOCOL
30588 if (NULL == *hash) {
30590 NULL, NULL, NULL, free);
30591 }
30592
30593 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30594 *real_packet = *old;
30595 } else {
30596 log_packet_detailed(" no old info");
30597 memset(real_packet, 0, sizeof(*real_packet));
30598 }
30599
30600 if (BV_ISSET(fields, 0)) {
30601 log_packet_detailed(" got field 'turn'");
30602#ifdef FREECIV_JSON_CONNECTION
30603 field_addr.name = "turn";
30604#endif /* FREECIV_JSON_CONNECTION */
30605 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
30607 }
30608 }
30609
30610 if (NULL == old) {
30611 old = fc_malloc(sizeof(*old));
30612 *old = *real_packet;
30613 genhash_insert(*hash, old, old);
30614 } else {
30615 *old = *real_packet;
30616 }
30617
30618#endif /* FREECIV_DELTA_PROTOCOL */
30620}
30621
30623{
30624 const struct packet_player_phase_done *real_packet = packet;
30625 int e;
30626#ifdef FREECIV_DELTA_PROTOCOL
30628 struct packet_player_phase_done *old;
30629 bool differ;
30630 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PHASE_DONE;
30631#endif /* FREECIV_DELTA_PROTOCOL */
30633#ifdef FREECIV_JSON_CONNECTION
30634 struct plocation field_addr;
30635 {
30639 }
30640#endif /* FREECIV_JSON_CONNECTION */
30641
30642 log_packet_detailed("packet_player_phase_done_100: sending info about ()");
30643
30644#ifdef FREECIV_DELTA_PROTOCOL
30645 if (NULL == *hash) {
30647 NULL, NULL, NULL, free);
30648 }
30649 BV_CLR_ALL(fields);
30650
30651 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30652 old = fc_malloc(sizeof(*old));
30653 *old = *real_packet;
30654 genhash_insert(*hash, old, old);
30655 memset(old, 0, sizeof(*old));
30656 }
30657 differ = (old->turn != real_packet->turn);
30658 if (differ) {
30659 BV_SET(fields, 0);
30660 }
30661
30662
30663#ifdef FREECIV_JSON_CONNECTION
30664 field_addr.name = "fields";
30665#endif /* FREECIV_JSON_CONNECTION */
30666 e = 0;
30667 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30668 if (e) {
30669 log_packet_detailed("fields bitvector error detected");
30670 }
30671
30672 if (BV_ISSET(fields, 0)) {
30673 log_packet_detailed(" field 'turn' has changed");
30674#ifdef FREECIV_JSON_CONNECTION
30675 field_addr.name = "turn";
30676#endif /* FREECIV_JSON_CONNECTION */
30677 e = 0;
30678 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
30679 if (e) {
30680 log_packet_detailed("'turn' field error detected");
30681 }
30682 }
30683
30684 *old = *real_packet;
30685#endif /* FREECIV_DELTA_PROTOCOL */
30686#ifndef FREECIV_DELTA_PROTOCOL
30687#ifdef FREECIV_JSON_CONNECTION
30688 field_addr.name = "turn";
30689#endif /* FREECIV_JSON_CONNECTION */
30690 e = 0;
30691 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
30692 if (e) {
30693 log_packet_detailed("'turn' field error detected");
30694 }
30695
30696#endif
30698}
30699
30701{
30702 if (!pc->used) {
30703 log_error("WARNING: trying to send data to the closed connection %s",
30705 return -1;
30706 }
30707 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet != NULL, -1,
30708 "Handler for PACKET_PLAYER_PHASE_DONE not installed");
30709 return pc->phs.handlers->send[PACKET_PLAYER_PHASE_DONE].packet(pc, packet);
30710}
30711
30713{
30714 struct packet_player_phase_done packet, *real_packet = &packet;
30715
30717
30719}
30720
30721#ifdef FREECIV_DELTA_PROTOCOL
30722#define hash_packet_player_rates_100 hash_const
30723
30724#define cmp_packet_player_rates_100 cmp_const
30725
30727#endif /* FREECIV_DELTA_PROTOCOL */
30728
30730{
30731#ifdef FREECIV_DELTA_PROTOCOL
30733 struct packet_player_rates *old;
30734 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RATES;
30735#endif /* FREECIV_DELTA_PROTOCOL */
30737#ifdef FREECIV_JSON_CONNECTION
30738 struct plocation field_addr;
30739 {
30743 }
30744#endif /* FREECIV_JSON_CONNECTION */
30745
30746#ifdef FREECIV_DELTA_PROTOCOL
30747#ifdef FREECIV_JSON_CONNECTION
30748 field_addr.name = "fields";
30749#endif /* FREECIV_JSON_CONNECTION */
30750 DIO_BV_GET(&din, &field_addr, fields);
30751
30752#else /* FREECIV_DELTA_PROTOCOL */
30753#ifdef FREECIV_JSON_CONNECTION
30754 field_addr.name = "tax";
30755#endif /* FREECIV_JSON_CONNECTION */
30756 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
30758 }
30759#ifdef FREECIV_JSON_CONNECTION
30760 field_addr.name = "luxury";
30761#endif /* FREECIV_JSON_CONNECTION */
30762 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
30764 }
30765#ifdef FREECIV_JSON_CONNECTION
30766 field_addr.name = "science";
30767#endif /* FREECIV_JSON_CONNECTION */
30768 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
30770 }
30771#endif
30772 log_packet_detailed("packet_player_rates_100: got info about ()");
30773
30774#ifdef FREECIV_DELTA_PROTOCOL
30775 if (NULL == *hash) {
30777 NULL, NULL, NULL, free);
30778 }
30779
30780 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
30781 *real_packet = *old;
30782 } else {
30783 log_packet_detailed(" no old info");
30784 memset(real_packet, 0, sizeof(*real_packet));
30785 }
30786
30787 if (BV_ISSET(fields, 0)) {
30788 log_packet_detailed(" got field 'tax'");
30789#ifdef FREECIV_JSON_CONNECTION
30790 field_addr.name = "tax";
30791#endif /* FREECIV_JSON_CONNECTION */
30792 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
30794 }
30795 }
30796 if (BV_ISSET(fields, 1)) {
30797 log_packet_detailed(" got field 'luxury'");
30798#ifdef FREECIV_JSON_CONNECTION
30799 field_addr.name = "luxury";
30800#endif /* FREECIV_JSON_CONNECTION */
30801 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
30803 }
30804 }
30805 if (BV_ISSET(fields, 2)) {
30806 log_packet_detailed(" got field 'science'");
30807#ifdef FREECIV_JSON_CONNECTION
30808 field_addr.name = "science";
30809#endif /* FREECIV_JSON_CONNECTION */
30810 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
30812 }
30813 }
30814
30815 if (NULL == old) {
30816 old = fc_malloc(sizeof(*old));
30817 *old = *real_packet;
30818 genhash_insert(*hash, old, old);
30819 } else {
30820 *old = *real_packet;
30821 }
30822
30823#endif /* FREECIV_DELTA_PROTOCOL */
30825}
30826
30827static int send_packet_player_rates_100(struct connection *pc, const struct packet_player_rates *packet)
30828{
30829 const struct packet_player_rates *real_packet = packet;
30830 int e;
30831#ifdef FREECIV_DELTA_PROTOCOL
30833 struct packet_player_rates *old;
30834 bool differ;
30835 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RATES;
30836#endif /* FREECIV_DELTA_PROTOCOL */
30838#ifdef FREECIV_JSON_CONNECTION
30839 struct plocation field_addr;
30840 {
30844 }
30845#endif /* FREECIV_JSON_CONNECTION */
30846
30847 log_packet_detailed("packet_player_rates_100: sending info about ()");
30848
30849#ifdef FREECIV_DELTA_PROTOCOL
30850 if (NULL == *hash) {
30852 NULL, NULL, NULL, free);
30853 }
30854 BV_CLR_ALL(fields);
30855
30856 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
30857 old = fc_malloc(sizeof(*old));
30858 *old = *real_packet;
30859 genhash_insert(*hash, old, old);
30860 memset(old, 0, sizeof(*old));
30861 }
30862 differ = (old->tax != real_packet->tax);
30863 if (differ) {
30864 BV_SET(fields, 0);
30865 }
30866
30867 differ = (old->luxury != real_packet->luxury);
30868 if (differ) {
30869 BV_SET(fields, 1);
30870 }
30871
30872 differ = (old->science != real_packet->science);
30873 if (differ) {
30874 BV_SET(fields, 2);
30875 }
30876
30877
30878#ifdef FREECIV_JSON_CONNECTION
30879 field_addr.name = "fields";
30880#endif /* FREECIV_JSON_CONNECTION */
30881 e = 0;
30882 e |= DIO_BV_PUT(&dout, &field_addr, fields);
30883 if (e) {
30884 log_packet_detailed("fields bitvector error detected");
30885 }
30886
30887 if (BV_ISSET(fields, 0)) {
30888 log_packet_detailed(" field 'tax' has changed");
30889#ifdef FREECIV_JSON_CONNECTION
30890 field_addr.name = "tax";
30891#endif /* FREECIV_JSON_CONNECTION */
30892 e = 0;
30893 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
30894 if (e) {
30895 log_packet_detailed("'tax' field error detected");
30896 }
30897 }
30898 if (BV_ISSET(fields, 1)) {
30899 log_packet_detailed(" field 'luxury' has changed");
30900#ifdef FREECIV_JSON_CONNECTION
30901 field_addr.name = "luxury";
30902#endif /* FREECIV_JSON_CONNECTION */
30903 e = 0;
30904 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
30905 if (e) {
30906 log_packet_detailed("'luxury' field error detected");
30907 }
30908 }
30909 if (BV_ISSET(fields, 2)) {
30910 log_packet_detailed(" field 'science' has changed");
30911#ifdef FREECIV_JSON_CONNECTION
30912 field_addr.name = "science";
30913#endif /* FREECIV_JSON_CONNECTION */
30914 e = 0;
30915 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
30916 if (e) {
30917 log_packet_detailed("'science' field error detected");
30918 }
30919 }
30920
30921 *old = *real_packet;
30922#endif /* FREECIV_DELTA_PROTOCOL */
30923#ifndef FREECIV_DELTA_PROTOCOL
30924#ifdef FREECIV_JSON_CONNECTION
30925 field_addr.name = "tax";
30926#endif /* FREECIV_JSON_CONNECTION */
30927 e = 0;
30928 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
30929 if (e) {
30930 log_packet_detailed("'tax' field error detected");
30931 }
30932#ifdef FREECIV_JSON_CONNECTION
30933 field_addr.name = "luxury";
30934#endif /* FREECIV_JSON_CONNECTION */
30935 e = 0;
30936 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
30937 if (e) {
30938 log_packet_detailed("'luxury' field error detected");
30939 }
30940#ifdef FREECIV_JSON_CONNECTION
30941 field_addr.name = "science";
30942#endif /* FREECIV_JSON_CONNECTION */
30943 e = 0;
30944 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
30945 if (e) {
30946 log_packet_detailed("'science' field error detected");
30947 }
30948
30949#endif
30951}
30952
30954{
30955 if (!pc->used) {
30956 log_error("WARNING: trying to send data to the closed connection %s",
30958 return -1;
30959 }
30960 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RATES].packet != NULL, -1,
30961 "Handler for PACKET_PLAYER_RATES not installed");
30962 return pc->phs.handlers->send[PACKET_PLAYER_RATES].packet(pc, packet);
30963}
30964
30965int dsend_packet_player_rates(struct connection *pc, int tax, int luxury, int science)
30966{
30967 struct packet_player_rates packet, *real_packet = &packet;
30968
30969 real_packet->tax = tax;
30970 real_packet->luxury = luxury;
30971 real_packet->science = science;
30972
30974}
30975
30976#ifdef FREECIV_DELTA_PROTOCOL
30977#define hash_packet_player_change_government_100 hash_const
30978
30979#define cmp_packet_player_change_government_100 cmp_const
30980
30982#endif /* FREECIV_DELTA_PROTOCOL */
30983
30985{
30986#ifdef FREECIV_DELTA_PROTOCOL
30989 struct genhash **hash = pc->phs.received + PACKET_PLAYER_CHANGE_GOVERNMENT;
30990#endif /* FREECIV_DELTA_PROTOCOL */
30992#ifdef FREECIV_JSON_CONNECTION
30993 struct plocation field_addr;
30994 {
30998 }
30999#endif /* FREECIV_JSON_CONNECTION */
31000
31001#ifdef FREECIV_DELTA_PROTOCOL
31002#ifdef FREECIV_JSON_CONNECTION
31003 field_addr.name = "fields";
31004#endif /* FREECIV_JSON_CONNECTION */
31005 DIO_BV_GET(&din, &field_addr, fields);
31006
31007#else /* FREECIV_DELTA_PROTOCOL */
31008#ifdef FREECIV_JSON_CONNECTION
31009 field_addr.name = "government";
31010#endif /* FREECIV_JSON_CONNECTION */
31011 {
31012 int readin;
31013
31014 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
31016 }
31017 real_packet->government = readin;
31018 }
31019#endif
31020 log_packet_detailed("packet_player_change_government_100: got info about ()");
31021
31022#ifdef FREECIV_DELTA_PROTOCOL
31023 if (NULL == *hash) {
31025 NULL, NULL, NULL, free);
31026 }
31027
31028 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31029 *real_packet = *old;
31030 } else {
31031 log_packet_detailed(" no old info");
31032 memset(real_packet, 0, sizeof(*real_packet));
31033 }
31034
31035 if (BV_ISSET(fields, 0)) {
31036 log_packet_detailed(" got field 'government'");
31037#ifdef FREECIV_JSON_CONNECTION
31038 field_addr.name = "government";
31039#endif /* FREECIV_JSON_CONNECTION */
31040 {
31041 int readin;
31042
31043 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
31045 }
31046 real_packet->government = readin;
31047 }
31048 }
31049
31050 if (NULL == old) {
31051 old = fc_malloc(sizeof(*old));
31052 *old = *real_packet;
31053 genhash_insert(*hash, old, old);
31054 } else {
31055 *old = *real_packet;
31056 }
31057
31058#endif /* FREECIV_DELTA_PROTOCOL */
31060}
31061
31063{
31064 const struct packet_player_change_government *real_packet = packet;
31065 int e;
31066#ifdef FREECIV_DELTA_PROTOCOL
31069 bool differ;
31070 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_CHANGE_GOVERNMENT;
31071#endif /* FREECIV_DELTA_PROTOCOL */
31073#ifdef FREECIV_JSON_CONNECTION
31074 struct plocation field_addr;
31075 {
31079 }
31080#endif /* FREECIV_JSON_CONNECTION */
31081
31082 log_packet_detailed("packet_player_change_government_100: sending info about ()");
31083
31084#ifdef FREECIV_DELTA_PROTOCOL
31085 if (NULL == *hash) {
31087 NULL, NULL, NULL, free);
31088 }
31089 BV_CLR_ALL(fields);
31090
31091 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31092 old = fc_malloc(sizeof(*old));
31093 *old = *real_packet;
31094 genhash_insert(*hash, old, old);
31095 memset(old, 0, sizeof(*old));
31096 }
31097 differ = (old->government != real_packet->government);
31098 if (differ) {
31099 BV_SET(fields, 0);
31100 }
31101
31102
31103#ifdef FREECIV_JSON_CONNECTION
31104 field_addr.name = "fields";
31105#endif /* FREECIV_JSON_CONNECTION */
31106 e = 0;
31107 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31108 if (e) {
31109 log_packet_detailed("fields bitvector error detected");
31110 }
31111
31112 if (BV_ISSET(fields, 0)) {
31113 log_packet_detailed(" field 'government' has changed");
31114#ifdef FREECIV_JSON_CONNECTION
31115 field_addr.name = "government";
31116#endif /* FREECIV_JSON_CONNECTION */
31117 e = 0;
31118 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
31119 if (e) {
31120 log_packet_detailed("'government' field error detected");
31121 }
31122 }
31123
31124 *old = *real_packet;
31125#endif /* FREECIV_DELTA_PROTOCOL */
31126#ifndef FREECIV_DELTA_PROTOCOL
31127#ifdef FREECIV_JSON_CONNECTION
31128 field_addr.name = "government";
31129#endif /* FREECIV_JSON_CONNECTION */
31130 e = 0;
31131 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
31132 if (e) {
31133 log_packet_detailed("'government' field error detected");
31134 }
31135
31136#endif
31138}
31139
31141{
31142 if (!pc->used) {
31143 log_error("WARNING: trying to send data to the closed connection %s",
31145 return -1;
31146 }
31147 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet != NULL, -1,
31148 "Handler for PACKET_PLAYER_CHANGE_GOVERNMENT not installed");
31149 return pc->phs.handlers->send[PACKET_PLAYER_CHANGE_GOVERNMENT].packet(pc, packet);
31150}
31151
31160
31161#ifdef FREECIV_DELTA_PROTOCOL
31162#define hash_packet_player_place_infra_100 hash_const
31163
31164#define cmp_packet_player_place_infra_100 cmp_const
31165
31167#endif /* FREECIV_DELTA_PROTOCOL */
31168
31170{
31171#ifdef FREECIV_DELTA_PROTOCOL
31173 struct packet_player_place_infra *old;
31174 struct genhash **hash = pc->phs.received + PACKET_PLAYER_PLACE_INFRA;
31175#endif /* FREECIV_DELTA_PROTOCOL */
31177#ifdef FREECIV_JSON_CONNECTION
31178 struct plocation field_addr;
31179 {
31183 }
31184#endif /* FREECIV_JSON_CONNECTION */
31185
31186#ifdef FREECIV_DELTA_PROTOCOL
31187#ifdef FREECIV_JSON_CONNECTION
31188 field_addr.name = "fields";
31189#endif /* FREECIV_JSON_CONNECTION */
31190 DIO_BV_GET(&din, &field_addr, fields);
31191
31192#else /* FREECIV_DELTA_PROTOCOL */
31193#ifdef FREECIV_JSON_CONNECTION
31194 field_addr.name = "tile";
31195#endif /* FREECIV_JSON_CONNECTION */
31196 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
31198 }
31199#ifdef FREECIV_JSON_CONNECTION
31200 field_addr.name = "extra";
31201#endif /* FREECIV_JSON_CONNECTION */
31202 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
31204 }
31205#endif
31206 log_packet_detailed("packet_player_place_infra_100: got info about ()");
31207
31208#ifdef FREECIV_DELTA_PROTOCOL
31209 if (NULL == *hash) {
31211 NULL, NULL, NULL, free);
31212 }
31213
31214 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31215 *real_packet = *old;
31216 } else {
31217 log_packet_detailed(" no old info");
31218 memset(real_packet, 0, sizeof(*real_packet));
31219 }
31220
31221 if (BV_ISSET(fields, 0)) {
31222 log_packet_detailed(" got field 'tile'");
31223#ifdef FREECIV_JSON_CONNECTION
31224 field_addr.name = "tile";
31225#endif /* FREECIV_JSON_CONNECTION */
31226 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
31228 }
31229 }
31230 if (BV_ISSET(fields, 1)) {
31231 log_packet_detailed(" got field 'extra'");
31232#ifdef FREECIV_JSON_CONNECTION
31233 field_addr.name = "extra";
31234#endif /* FREECIV_JSON_CONNECTION */
31235 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra)) {
31237 }
31238 }
31239
31240 if (NULL == old) {
31241 old = fc_malloc(sizeof(*old));
31242 *old = *real_packet;
31243 genhash_insert(*hash, old, old);
31244 } else {
31245 *old = *real_packet;
31246 }
31247
31248#endif /* FREECIV_DELTA_PROTOCOL */
31250}
31251
31253{
31254 const struct packet_player_place_infra *real_packet = packet;
31255 int e;
31256#ifdef FREECIV_DELTA_PROTOCOL
31258 struct packet_player_place_infra *old;
31259 bool differ;
31260 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_PLACE_INFRA;
31261#endif /* FREECIV_DELTA_PROTOCOL */
31263#ifdef FREECIV_JSON_CONNECTION
31264 struct plocation field_addr;
31265 {
31269 }
31270#endif /* FREECIV_JSON_CONNECTION */
31271
31272 log_packet_detailed("packet_player_place_infra_100: sending info about ()");
31273
31274#ifdef FREECIV_DELTA_PROTOCOL
31275 if (NULL == *hash) {
31277 NULL, NULL, NULL, free);
31278 }
31279 BV_CLR_ALL(fields);
31280
31281 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31282 old = fc_malloc(sizeof(*old));
31283 *old = *real_packet;
31284 genhash_insert(*hash, old, old);
31285 memset(old, 0, sizeof(*old));
31286 }
31287 differ = (old->tile != real_packet->tile);
31288 if (differ) {
31289 BV_SET(fields, 0);
31290 }
31291
31292 differ = (old->extra != real_packet->extra);
31293 if (differ) {
31294 BV_SET(fields, 1);
31295 }
31296
31297
31298#ifdef FREECIV_JSON_CONNECTION
31299 field_addr.name = "fields";
31300#endif /* FREECIV_JSON_CONNECTION */
31301 e = 0;
31302 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31303 if (e) {
31304 log_packet_detailed("fields bitvector error detected");
31305 }
31306
31307 if (BV_ISSET(fields, 0)) {
31308 log_packet_detailed(" field 'tile' has changed");
31309#ifdef FREECIV_JSON_CONNECTION
31310 field_addr.name = "tile";
31311#endif /* FREECIV_JSON_CONNECTION */
31312 e = 0;
31313 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
31314 if (e) {
31315 log_packet_detailed("'tile' field error detected");
31316 }
31317 }
31318 if (BV_ISSET(fields, 1)) {
31319 log_packet_detailed(" field 'extra' has changed");
31320#ifdef FREECIV_JSON_CONNECTION
31321 field_addr.name = "extra";
31322#endif /* FREECIV_JSON_CONNECTION */
31323 e = 0;
31324 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
31325 if (e) {
31326 log_packet_detailed("'extra' field error detected");
31327 }
31328 }
31329
31330 *old = *real_packet;
31331#endif /* FREECIV_DELTA_PROTOCOL */
31332#ifndef FREECIV_DELTA_PROTOCOL
31333#ifdef FREECIV_JSON_CONNECTION
31334 field_addr.name = "tile";
31335#endif /* FREECIV_JSON_CONNECTION */
31336 e = 0;
31337 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
31338 if (e) {
31339 log_packet_detailed("'tile' field error detected");
31340 }
31341#ifdef FREECIV_JSON_CONNECTION
31342 field_addr.name = "extra";
31343#endif /* FREECIV_JSON_CONNECTION */
31344 e = 0;
31345 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra);
31346 if (e) {
31347 log_packet_detailed("'extra' field error detected");
31348 }
31349
31350#endif
31352}
31353
31355{
31356 if (!pc->used) {
31357 log_error("WARNING: trying to send data to the closed connection %s",
31359 return -1;
31360 }
31361 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet != NULL, -1,
31362 "Handler for PACKET_PLAYER_PLACE_INFRA not installed");
31363 return pc->phs.handlers->send[PACKET_PLAYER_PLACE_INFRA].packet(pc, packet);
31364}
31365
31367{
31368 struct packet_player_place_infra packet, *real_packet = &packet;
31369
31371 real_packet->extra = extra;
31372
31374}
31375
31377{
31379#if 1 /* To match endif */
31380 real_packet->__dummy = 0xff;
31381#endif
31382 log_packet_detailed("packet_player_attribute_block_100: got info about ()");
31384}
31385
31387{
31389
31390 log_packet_detailed("packet_player_attribute_block_100: sending info about ()");
31392}
31393
31395{
31396 if (!pc->used) {
31397 log_error("WARNING: trying to send data to the closed connection %s",
31399 return -1;
31400 }
31401 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet != NULL, -1,
31402 "Handler for PACKET_PLAYER_ATTRIBUTE_BLOCK not installed");
31403 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_BLOCK].no_packet(pc);
31404}
31405
31406#ifdef FREECIV_DELTA_PROTOCOL
31408{
31409 const struct packet_player_attribute_chunk *key = (const struct packet_player_attribute_chunk *) vkey;
31410 genhash_val_t result = 0;
31411
31412 result += key->offset;
31413
31414 result &= 0xFFFFFFFF;
31415 return result;
31416}
31417
31418static bool cmp_packet_player_attribute_chunk_100(const void *vkey1, const void *vkey2)
31419{
31420 const struct packet_player_attribute_chunk *old = (const struct packet_player_attribute_chunk *) vkey1;
31422 bool differ;
31423
31424 differ = (old->offset != real_packet->offset);
31425
31426 return !differ;
31427}
31429#endif /* FREECIV_DELTA_PROTOCOL */
31430
31432{
31433#ifdef FREECIV_DELTA_PROTOCOL
31436 struct genhash **hash = pc->phs.received + PACKET_PLAYER_ATTRIBUTE_CHUNK;
31437#endif /* FREECIV_DELTA_PROTOCOL */
31439#ifdef FREECIV_JSON_CONNECTION
31440 struct plocation field_addr;
31441 {
31445 }
31446#endif /* FREECIV_JSON_CONNECTION */
31447
31448#ifdef FREECIV_DELTA_PROTOCOL
31449#ifdef FREECIV_JSON_CONNECTION
31450 field_addr.name = "fields";
31451#endif /* FREECIV_JSON_CONNECTION */
31452 DIO_BV_GET(&din, &field_addr, fields);
31453#ifdef FREECIV_JSON_CONNECTION
31454 field_addr.name = "offset";
31455#endif /* FREECIV_JSON_CONNECTION */
31456 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->offset)) {
31458 }
31459
31460#else /* FREECIV_DELTA_PROTOCOL */
31461#ifdef FREECIV_JSON_CONNECTION
31462 field_addr.name = "offset";
31463#endif /* FREECIV_JSON_CONNECTION */
31464 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->offset)) {
31466 }
31467#ifdef FREECIV_JSON_CONNECTION
31468 field_addr.name = "total_length";
31469#endif /* FREECIV_JSON_CONNECTION */
31470 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
31471 RECEIVE_PACKET_FIELD_ERROR(total_length);
31472 }
31473#ifdef FREECIV_JSON_CONNECTION
31474 field_addr.name = "chunk_length";
31475#endif /* FREECIV_JSON_CONNECTION */
31476 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
31477 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
31478 }
31479#ifdef FREECIV_JSON_CONNECTION
31480 field_addr.name = "data";
31481#endif /* FREECIV_JSON_CONNECTION */
31482 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
31483 RECEIVE_PACKET_FIELD_ERROR(data, ": truncation array");
31484 }
31485 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
31487 }
31488#endif
31489 log_packet_detailed("packet_player_attribute_chunk_100: got info about (%d)",
31490 real_packet->offset);
31491
31492#ifdef FREECIV_DELTA_PROTOCOL
31493 if (NULL == *hash) {
31495 NULL, NULL, NULL, free);
31496 }
31497
31498 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31499 *real_packet = *old;
31500 } else {
31501 int offset;
31502
31503 offset = real_packet->offset;
31504
31505 log_packet_detailed(" no old info");
31506 memset(real_packet, 0, sizeof(*real_packet));
31507
31508 real_packet->offset = offset;
31509 }
31510
31511 if (BV_ISSET(fields, 0)) {
31512 log_packet_detailed(" got field 'total_length'");
31513#ifdef FREECIV_JSON_CONNECTION
31514 field_addr.name = "total_length";
31515#endif /* FREECIV_JSON_CONNECTION */
31516 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->total_length)) {
31517 RECEIVE_PACKET_FIELD_ERROR(total_length);
31518 }
31519 }
31520 if (BV_ISSET(fields, 1)) {
31521 log_packet_detailed(" got field 'chunk_length'");
31522#ifdef FREECIV_JSON_CONNECTION
31523 field_addr.name = "chunk_length";
31524#endif /* FREECIV_JSON_CONNECTION */
31525 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->chunk_length)) {
31526 RECEIVE_PACKET_FIELD_ERROR(chunk_length);
31527 }
31528 }
31529 if (BV_ISSET(fields, 2)) {
31530 log_packet_detailed(" got field 'data'");
31531#ifdef FREECIV_JSON_CONNECTION
31532 field_addr.name = "data";
31533#endif /* FREECIV_JSON_CONNECTION */
31534 if (real_packet->chunk_length > ATTRIBUTE_CHUNK_SIZE) {
31535 RECEIVE_PACKET_FIELD_ERROR(data, ": truncation array");
31536 }
31537 if (!DIO_GET(memory, &din, &field_addr, real_packet->data, real_packet->chunk_length)) {
31539 }
31540 }
31541
31542 if (NULL == old) {
31543 old = fc_malloc(sizeof(*old));
31544 *old = *real_packet;
31545 genhash_insert(*hash, old, old);
31546 } else {
31547 *old = *real_packet;
31548 }
31549
31550#endif /* FREECIV_DELTA_PROTOCOL */
31552}
31553
31555{
31556 /* copy packet for pre-send */
31559 int e;
31560#ifdef FREECIV_DELTA_PROTOCOL
31563 bool differ;
31564 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_ATTRIBUTE_CHUNK;
31565#endif /* FREECIV_DELTA_PROTOCOL */
31567#ifdef FREECIV_JSON_CONNECTION
31568 struct plocation field_addr;
31569 {
31573 }
31574#endif /* FREECIV_JSON_CONNECTION */
31575
31576 log_packet_detailed("packet_player_attribute_chunk_100: sending info about (%d)",
31577 real_packet->offset);
31578
31580
31581#ifdef FREECIV_DELTA_PROTOCOL
31582 if (NULL == *hash) {
31584 NULL, NULL, NULL, free);
31585 }
31586 BV_CLR_ALL(fields);
31587
31588 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31589 old = fc_malloc(sizeof(*old));
31590 *old = *real_packet;
31591 genhash_insert(*hash, old, old);
31592 memset(old, 0, sizeof(*old));
31593 }
31594 differ = (old->total_length != real_packet->total_length);
31595 if (differ) {
31596 BV_SET(fields, 0);
31597 }
31598
31599 differ = (old->chunk_length != real_packet->chunk_length);
31600 if (differ) {
31601 BV_SET(fields, 1);
31602 }
31603
31604 differ = ((old->chunk_length != real_packet->chunk_length)
31605 || (memcmp(old->data, real_packet->data, real_packet->chunk_length) != 0));
31606 if (differ) {
31607 BV_SET(fields, 2);
31608 }
31609
31610
31611#ifdef FREECIV_JSON_CONNECTION
31612 field_addr.name = "fields";
31613#endif /* FREECIV_JSON_CONNECTION */
31614 e = 0;
31615 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31616 if (e) {
31617 log_packet_detailed("fields bitvector error detected");
31618 }
31619#ifdef FREECIV_JSON_CONNECTION
31620 field_addr.name = "offset";
31621#endif /* FREECIV_JSON_CONNECTION */
31622 e = 0;
31623 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->offset);
31624 if (e) {
31625 log_packet_detailed("'offset' field error detected");
31626 }
31627
31628 if (BV_ISSET(fields, 0)) {
31629 log_packet_detailed(" field 'total_length' has changed");
31630#ifdef FREECIV_JSON_CONNECTION
31631 field_addr.name = "total_length";
31632#endif /* FREECIV_JSON_CONNECTION */
31633 e = 0;
31634 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
31635 if (e) {
31636 log_packet_detailed("'total_length' field error detected");
31637 }
31638 }
31639 if (BV_ISSET(fields, 1)) {
31640 log_packet_detailed(" field 'chunk_length' has changed");
31641#ifdef FREECIV_JSON_CONNECTION
31642 field_addr.name = "chunk_length";
31643#endif /* FREECIV_JSON_CONNECTION */
31644 e = 0;
31645 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
31646 if (e) {
31647 log_packet_detailed("'chunk_length' field error detected");
31648 }
31649 }
31650 if (BV_ISSET(fields, 2)) {
31651 log_packet_detailed(" field 'data' has changed");
31652#ifdef FREECIV_JSON_CONNECTION
31653 field_addr.name = "data";
31654#endif /* FREECIV_JSON_CONNECTION */
31655 e = 0;
31656 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
31657 if (e) {
31658 log_packet_detailed("'data' field error detected");
31659 }
31660 }
31661
31662 *old = *real_packet;
31663#endif /* FREECIV_DELTA_PROTOCOL */
31664#ifndef FREECIV_DELTA_PROTOCOL
31665#ifdef FREECIV_JSON_CONNECTION
31666 field_addr.name = "offset";
31667#endif /* FREECIV_JSON_CONNECTION */
31668 e = 0;
31669 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->offset);
31670 if (e) {
31671 log_packet_detailed("'offset' field error detected");
31672 }
31673#ifdef FREECIV_JSON_CONNECTION
31674 field_addr.name = "total_length";
31675#endif /* FREECIV_JSON_CONNECTION */
31676 e = 0;
31677 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->total_length);
31678 if (e) {
31679 log_packet_detailed("'total_length' field error detected");
31680 }
31681#ifdef FREECIV_JSON_CONNECTION
31682 field_addr.name = "chunk_length";
31683#endif /* FREECIV_JSON_CONNECTION */
31684 e = 0;
31685 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->chunk_length);
31686 if (e) {
31687 log_packet_detailed("'chunk_length' field error detected");
31688 }
31689#ifdef FREECIV_JSON_CONNECTION
31690 field_addr.name = "data";
31691#endif /* FREECIV_JSON_CONNECTION */
31692 e = 0;
31693 e |= DIO_PUT(memory, &dout, &field_addr, &real_packet->data, real_packet->chunk_length);
31694 if (e) {
31695 log_packet_detailed("'data' field error detected");
31696 }
31697
31698#endif
31700}
31701
31703{
31704 if (!pc->used) {
31705 log_error("WARNING: trying to send data to the closed connection %s",
31707 return -1;
31708 }
31709 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet != NULL, -1,
31710 "Handler for PACKET_PLAYER_ATTRIBUTE_CHUNK not installed");
31711 return pc->phs.handlers->send[PACKET_PLAYER_ATTRIBUTE_CHUNK].packet(pc, packet);
31712}
31713
31714#ifdef FREECIV_DELTA_PROTOCOL
31716{
31717 const struct packet_player_diplstate *key = (const struct packet_player_diplstate *) vkey;
31718 genhash_val_t result = 0;
31719
31720 result += key->diplstate_id;
31721
31722 result &= 0xFFFFFFFF;
31723 return result;
31724}
31725
31726static bool cmp_packet_player_diplstate_100(const void *vkey1, const void *vkey2)
31727{
31728 const struct packet_player_diplstate *old = (const struct packet_player_diplstate *) vkey1;
31729 const struct packet_player_diplstate *real_packet = (const struct packet_player_diplstate *) vkey2;
31730 bool differ;
31731
31732 differ = (old->diplstate_id != real_packet->diplstate_id);
31733
31734 return !differ;
31735}
31737#endif /* FREECIV_DELTA_PROTOCOL */
31738
31740{
31741#ifdef FREECIV_DELTA_PROTOCOL
31743 struct packet_player_diplstate *old;
31744 struct genhash **hash = pc->phs.received + PACKET_PLAYER_DIPLSTATE;
31745#endif /* FREECIV_DELTA_PROTOCOL */
31747#ifdef FREECIV_JSON_CONNECTION
31748 struct plocation field_addr;
31749 {
31753 }
31754#endif /* FREECIV_JSON_CONNECTION */
31755
31756#ifdef FREECIV_DELTA_PROTOCOL
31757#ifdef FREECIV_JSON_CONNECTION
31758 field_addr.name = "fields";
31759#endif /* FREECIV_JSON_CONNECTION */
31760 DIO_BV_GET(&din, &field_addr, fields);
31761#ifdef FREECIV_JSON_CONNECTION
31762 field_addr.name = "diplstate_id";
31763#endif /* FREECIV_JSON_CONNECTION */
31764 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->diplstate_id)) {
31765 RECEIVE_PACKET_FIELD_ERROR(diplstate_id);
31766 }
31767
31768#else /* FREECIV_DELTA_PROTOCOL */
31769#ifdef FREECIV_JSON_CONNECTION
31770 field_addr.name = "diplstate_id";
31771#endif /* FREECIV_JSON_CONNECTION */
31772 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->diplstate_id)) {
31773 RECEIVE_PACKET_FIELD_ERROR(diplstate_id);
31774 }
31775#ifdef FREECIV_JSON_CONNECTION
31776 field_addr.name = "plr1";
31777#endif /* FREECIV_JSON_CONNECTION */
31778 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->plr1)) {
31780 }
31781#ifdef FREECIV_JSON_CONNECTION
31782 field_addr.name = "plr2";
31783#endif /* FREECIV_JSON_CONNECTION */
31784 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->plr2)) {
31786 }
31787#ifdef FREECIV_JSON_CONNECTION
31788 field_addr.name = "type";
31789#endif /* FREECIV_JSON_CONNECTION */
31790 {
31791 int readin;
31792
31793 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
31795 }
31796 real_packet->type = readin;
31797 }
31798#ifdef FREECIV_JSON_CONNECTION
31799 field_addr.name = "turns_left";
31800#endif /* FREECIV_JSON_CONNECTION */
31801 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
31802 RECEIVE_PACKET_FIELD_ERROR(turns_left);
31803 }
31804#ifdef FREECIV_JSON_CONNECTION
31805 field_addr.name = "has_reason_to_cancel";
31806#endif /* FREECIV_JSON_CONNECTION */
31807 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
31808 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
31809 }
31810#ifdef FREECIV_JSON_CONNECTION
31811 field_addr.name = "contact_turns_left";
31812#endif /* FREECIV_JSON_CONNECTION */
31813 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
31814 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
31815 }
31816#endif
31817 log_packet_detailed("packet_player_diplstate_100: got info about (%d)",
31818 real_packet->diplstate_id);
31819
31820#ifdef FREECIV_DELTA_PROTOCOL
31821 if (NULL == *hash) {
31823 NULL, NULL, NULL, free);
31824 }
31825
31826 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
31827 *real_packet = *old;
31828 } else {
31829 int diplstate_id;
31830
31831 diplstate_id = real_packet->diplstate_id;
31832
31833 log_packet_detailed(" no old info");
31834 memset(real_packet, 0, sizeof(*real_packet));
31835
31836 real_packet->diplstate_id = diplstate_id;
31837 }
31838
31839 if (BV_ISSET(fields, 0)) {
31840 log_packet_detailed(" got field 'plr1'");
31841#ifdef FREECIV_JSON_CONNECTION
31842 field_addr.name = "plr1";
31843#endif /* FREECIV_JSON_CONNECTION */
31844 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->plr1)) {
31846 }
31847 }
31848 if (BV_ISSET(fields, 1)) {
31849 log_packet_detailed(" got field 'plr2'");
31850#ifdef FREECIV_JSON_CONNECTION
31851 field_addr.name = "plr2";
31852#endif /* FREECIV_JSON_CONNECTION */
31853 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->plr2)) {
31855 }
31856 }
31857 if (BV_ISSET(fields, 2)) {
31858 log_packet_detailed(" got field 'type'");
31859#ifdef FREECIV_JSON_CONNECTION
31860 field_addr.name = "type";
31861#endif /* FREECIV_JSON_CONNECTION */
31862 {
31863 int readin;
31864
31865 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
31867 }
31868 real_packet->type = readin;
31869 }
31870 }
31871 if (BV_ISSET(fields, 3)) {
31872 log_packet_detailed(" got field 'turns_left'");
31873#ifdef FREECIV_JSON_CONNECTION
31874 field_addr.name = "turns_left";
31875#endif /* FREECIV_JSON_CONNECTION */
31876 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->turns_left)) {
31877 RECEIVE_PACKET_FIELD_ERROR(turns_left);
31878 }
31879 }
31880 if (BV_ISSET(fields, 4)) {
31881 log_packet_detailed(" got field 'has_reason_to_cancel'");
31882#ifdef FREECIV_JSON_CONNECTION
31883 field_addr.name = "has_reason_to_cancel";
31884#endif /* FREECIV_JSON_CONNECTION */
31885 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->has_reason_to_cancel)) {
31886 RECEIVE_PACKET_FIELD_ERROR(has_reason_to_cancel);
31887 }
31888 }
31889 if (BV_ISSET(fields, 5)) {
31890 log_packet_detailed(" got field 'contact_turns_left'");
31891#ifdef FREECIV_JSON_CONNECTION
31892 field_addr.name = "contact_turns_left";
31893#endif /* FREECIV_JSON_CONNECTION */
31894 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->contact_turns_left)) {
31895 RECEIVE_PACKET_FIELD_ERROR(contact_turns_left);
31896 }
31897 }
31898
31899 if (NULL == old) {
31900 old = fc_malloc(sizeof(*old));
31901 *old = *real_packet;
31902 genhash_insert(*hash, old, old);
31903 } else {
31904 *old = *real_packet;
31905 }
31906
31907#endif /* FREECIV_DELTA_PROTOCOL */
31909}
31910
31912{
31913 const struct packet_player_diplstate *real_packet = packet;
31914 int e;
31915#ifdef FREECIV_DELTA_PROTOCOL
31917 struct packet_player_diplstate *old;
31918 bool differ;
31919 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_DIPLSTATE;
31920#endif /* FREECIV_DELTA_PROTOCOL */
31922#ifdef FREECIV_JSON_CONNECTION
31923 struct plocation field_addr;
31924 {
31928 }
31929#endif /* FREECIV_JSON_CONNECTION */
31930
31931 log_packet_detailed("packet_player_diplstate_100: sending info about (%d)",
31932 real_packet->diplstate_id);
31933
31934#ifdef FREECIV_DELTA_PROTOCOL
31935 if (NULL == *hash) {
31937 NULL, NULL, NULL, free);
31938 }
31939 BV_CLR_ALL(fields);
31940
31941 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
31942 old = fc_malloc(sizeof(*old));
31943 *old = *real_packet;
31944 genhash_insert(*hash, old, old);
31945 memset(old, 0, sizeof(*old));
31946 }
31947 differ = (old->plr1 != real_packet->plr1);
31948 if (differ) {
31949 BV_SET(fields, 0);
31950 }
31951
31952 differ = (old->plr2 != real_packet->plr2);
31953 if (differ) {
31954 BV_SET(fields, 1);
31955 }
31956
31957 differ = (old->type != real_packet->type);
31958 if (differ) {
31959 BV_SET(fields, 2);
31960 }
31961
31962 differ = (old->turns_left != real_packet->turns_left);
31963 if (differ) {
31964 BV_SET(fields, 3);
31965 }
31966
31967 differ = (old->has_reason_to_cancel != real_packet->has_reason_to_cancel);
31968 if (differ) {
31969 BV_SET(fields, 4);
31970 }
31971
31972 differ = (old->contact_turns_left != real_packet->contact_turns_left);
31973 if (differ) {
31974 BV_SET(fields, 5);
31975 }
31976
31977
31978#ifdef FREECIV_JSON_CONNECTION
31979 field_addr.name = "fields";
31980#endif /* FREECIV_JSON_CONNECTION */
31981 e = 0;
31982 e |= DIO_BV_PUT(&dout, &field_addr, fields);
31983 if (e) {
31984 log_packet_detailed("fields bitvector error detected");
31985 }
31986#ifdef FREECIV_JSON_CONNECTION
31987 field_addr.name = "diplstate_id";
31988#endif /* FREECIV_JSON_CONNECTION */
31989 e = 0;
31990 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->diplstate_id);
31991 if (e) {
31992 log_packet_detailed("'diplstate_id' field error detected");
31993 }
31994
31995 if (BV_ISSET(fields, 0)) {
31996 log_packet_detailed(" field 'plr1' has changed");
31997#ifdef FREECIV_JSON_CONNECTION
31998 field_addr.name = "plr1";
31999#endif /* FREECIV_JSON_CONNECTION */
32000 e = 0;
32001 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->plr1);
32002 if (e) {
32003 log_packet_detailed("'plr1' field error detected");
32004 }
32005 }
32006 if (BV_ISSET(fields, 1)) {
32007 log_packet_detailed(" field 'plr2' has changed");
32008#ifdef FREECIV_JSON_CONNECTION
32009 field_addr.name = "plr2";
32010#endif /* FREECIV_JSON_CONNECTION */
32011 e = 0;
32012 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->plr2);
32013 if (e) {
32014 log_packet_detailed("'plr2' field error detected");
32015 }
32016 }
32017 if (BV_ISSET(fields, 2)) {
32018 log_packet_detailed(" field 'type' has changed");
32019#ifdef FREECIV_JSON_CONNECTION
32020 field_addr.name = "type";
32021#endif /* FREECIV_JSON_CONNECTION */
32022 e = 0;
32023 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
32024 if (e) {
32025 log_packet_detailed("'type' field error detected");
32026 }
32027 }
32028 if (BV_ISSET(fields, 3)) {
32029 log_packet_detailed(" field 'turns_left' has changed");
32030#ifdef FREECIV_JSON_CONNECTION
32031 field_addr.name = "turns_left";
32032#endif /* FREECIV_JSON_CONNECTION */
32033 e = 0;
32034 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
32035 if (e) {
32036 log_packet_detailed("'turns_left' field error detected");
32037 }
32038 }
32039 if (BV_ISSET(fields, 4)) {
32040 log_packet_detailed(" field 'has_reason_to_cancel' has changed");
32041#ifdef FREECIV_JSON_CONNECTION
32042 field_addr.name = "has_reason_to_cancel";
32043#endif /* FREECIV_JSON_CONNECTION */
32044 e = 0;
32045 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
32046 if (e) {
32047 log_packet_detailed("'has_reason_to_cancel' field error detected");
32048 }
32049 }
32050 if (BV_ISSET(fields, 5)) {
32051 log_packet_detailed(" field 'contact_turns_left' has changed");
32052#ifdef FREECIV_JSON_CONNECTION
32053 field_addr.name = "contact_turns_left";
32054#endif /* FREECIV_JSON_CONNECTION */
32055 e = 0;
32056 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
32057 if (e) {
32058 log_packet_detailed("'contact_turns_left' field error detected");
32059 }
32060 }
32061
32062 *old = *real_packet;
32063#endif /* FREECIV_DELTA_PROTOCOL */
32064#ifndef FREECIV_DELTA_PROTOCOL
32065#ifdef FREECIV_JSON_CONNECTION
32066 field_addr.name = "diplstate_id";
32067#endif /* FREECIV_JSON_CONNECTION */
32068 e = 0;
32069 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->diplstate_id);
32070 if (e) {
32071 log_packet_detailed("'diplstate_id' field error detected");
32072 }
32073#ifdef FREECIV_JSON_CONNECTION
32074 field_addr.name = "plr1";
32075#endif /* FREECIV_JSON_CONNECTION */
32076 e = 0;
32077 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->plr1);
32078 if (e) {
32079 log_packet_detailed("'plr1' field error detected");
32080 }
32081#ifdef FREECIV_JSON_CONNECTION
32082 field_addr.name = "plr2";
32083#endif /* FREECIV_JSON_CONNECTION */
32084 e = 0;
32085 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->plr2);
32086 if (e) {
32087 log_packet_detailed("'plr2' field error detected");
32088 }
32089#ifdef FREECIV_JSON_CONNECTION
32090 field_addr.name = "type";
32091#endif /* FREECIV_JSON_CONNECTION */
32092 e = 0;
32093 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
32094 if (e) {
32095 log_packet_detailed("'type' field error detected");
32096 }
32097#ifdef FREECIV_JSON_CONNECTION
32098 field_addr.name = "turns_left";
32099#endif /* FREECIV_JSON_CONNECTION */
32100 e = 0;
32101 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->turns_left);
32102 if (e) {
32103 log_packet_detailed("'turns_left' field error detected");
32104 }
32105#ifdef FREECIV_JSON_CONNECTION
32106 field_addr.name = "has_reason_to_cancel";
32107#endif /* FREECIV_JSON_CONNECTION */
32108 e = 0;
32109 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->has_reason_to_cancel);
32110 if (e) {
32111 log_packet_detailed("'has_reason_to_cancel' field error detected");
32112 }
32113#ifdef FREECIV_JSON_CONNECTION
32114 field_addr.name = "contact_turns_left";
32115#endif /* FREECIV_JSON_CONNECTION */
32116 e = 0;
32117 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->contact_turns_left);
32118 if (e) {
32119 log_packet_detailed("'contact_turns_left' field error detected");
32120 }
32121
32122#endif
32124}
32125
32127{
32128 if (!pc->used) {
32129 log_error("WARNING: trying to send data to the closed connection %s",
32131 return -1;
32132 }
32133 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet != NULL, -1,
32134 "Handler for PACKET_PLAYER_DIPLSTATE not installed");
32135 return pc->phs.handlers->send[PACKET_PLAYER_DIPLSTATE].packet(pc, packet);
32136}
32137
32138#ifdef FREECIV_DELTA_PROTOCOL
32139#define hash_packet_player_multiplier_100 hash_const
32140
32141#define cmp_packet_player_multiplier_100 cmp_const
32142
32144#endif /* FREECIV_DELTA_PROTOCOL */
32145
32147{
32148#ifdef FREECIV_DELTA_PROTOCOL
32150 struct packet_player_multiplier *old;
32151 struct genhash **hash = pc->phs.received + PACKET_PLAYER_MULTIPLIER;
32152#endif /* FREECIV_DELTA_PROTOCOL */
32154#ifdef FREECIV_JSON_CONNECTION
32155 struct plocation field_addr;
32156 {
32160 }
32161#endif /* FREECIV_JSON_CONNECTION */
32162
32163#ifdef FREECIV_DELTA_PROTOCOL
32164#ifdef FREECIV_JSON_CONNECTION
32165 field_addr.name = "fields";
32166#endif /* FREECIV_JSON_CONNECTION */
32167 DIO_BV_GET(&din, &field_addr, fields);
32168
32169#else /* FREECIV_DELTA_PROTOCOL */
32170#ifdef FREECIV_JSON_CONNECTION
32171 field_addr.name = "count";
32172#endif /* FREECIV_JSON_CONNECTION */
32173 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
32175 }
32176#ifdef FREECIV_JSON_CONNECTION
32177 field_addr.name = "multipliers";
32178#endif /* FREECIV_JSON_CONNECTION */
32179 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
32180 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": truncation array");
32181 }
32182 {
32183 int i;
32184
32185#ifdef FREECIV_JSON_CONNECTION
32186 /* Enter array. */
32187 field_addr.sub_location = plocation_elem_new(0);
32188#endif /* FREECIV_JSON_CONNECTION */
32189
32190 for (i = 0; i < real_packet->count; i++) {
32191#ifdef FREECIV_JSON_CONNECTION
32192 field_addr.sub_location->number = i;
32193#endif /* FREECIV_JSON_CONNECTION */
32194
32195 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
32197 }
32198 }
32199
32200#ifdef FREECIV_JSON_CONNECTION
32201 /* Exit array. */
32202 FC_FREE(field_addr.sub_location);
32203#endif /* FREECIV_JSON_CONNECTION */
32204 }
32205#endif
32206 log_packet_detailed("packet_player_multiplier_100: got info about ()");
32207
32208#ifdef FREECIV_DELTA_PROTOCOL
32209 if (NULL == *hash) {
32211 NULL, NULL, NULL, free);
32212 }
32213
32214 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32215 *real_packet = *old;
32216 } else {
32217 log_packet_detailed(" no old info");
32218 memset(real_packet, 0, sizeof(*real_packet));
32219 }
32220
32221 if (BV_ISSET(fields, 0)) {
32222 log_packet_detailed(" got field 'count'");
32223#ifdef FREECIV_JSON_CONNECTION
32224 field_addr.name = "count";
32225#endif /* FREECIV_JSON_CONNECTION */
32226 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->count)) {
32228 }
32229 }
32230 if (BV_ISSET(fields, 1)) {
32231 log_packet_detailed(" got field 'multipliers'");
32232#ifdef FREECIV_JSON_CONNECTION
32233 field_addr.name = "multipliers";
32234#endif /* FREECIV_JSON_CONNECTION */
32235 if (real_packet->count > MAX_NUM_MULTIPLIERS) {
32236 RECEIVE_PACKET_FIELD_ERROR(multipliers, ": truncation array");
32237 }
32238 {
32239 int i;
32240
32241#ifdef FREECIV_JSON_CONNECTION
32242 /* Enter array. */
32243 field_addr.sub_location = plocation_elem_new(0);
32244#endif /* FREECIV_JSON_CONNECTION */
32245
32246 for (i = 0; i < real_packet->count; i++) {
32247#ifdef FREECIV_JSON_CONNECTION
32248 field_addr.sub_location->number = i;
32249#endif /* FREECIV_JSON_CONNECTION */
32250
32251 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->multipliers[i])) {
32253 }
32254 }
32255
32256#ifdef FREECIV_JSON_CONNECTION
32257 /* Exit array. */
32258 FC_FREE(field_addr.sub_location);
32259#endif /* FREECIV_JSON_CONNECTION */
32260 }
32261 }
32262
32263 if (NULL == old) {
32264 old = fc_malloc(sizeof(*old));
32265 *old = *real_packet;
32266 genhash_insert(*hash, old, old);
32267 } else {
32268 *old = *real_packet;
32269 }
32270
32271#endif /* FREECIV_DELTA_PROTOCOL */
32273}
32274
32276{
32277 const struct packet_player_multiplier *real_packet = packet;
32278 int e;
32279#ifdef FREECIV_DELTA_PROTOCOL
32281 struct packet_player_multiplier *old;
32282 bool differ;
32283 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_MULTIPLIER;
32284#endif /* FREECIV_DELTA_PROTOCOL */
32286#ifdef FREECIV_JSON_CONNECTION
32287 struct plocation field_addr;
32288 {
32292 }
32293#endif /* FREECIV_JSON_CONNECTION */
32294
32295 log_packet_detailed("packet_player_multiplier_100: sending info about ()");
32296
32297#ifdef FREECIV_DELTA_PROTOCOL
32298 if (NULL == *hash) {
32300 NULL, NULL, NULL, free);
32301 }
32302 BV_CLR_ALL(fields);
32303
32304 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
32305 old = fc_malloc(sizeof(*old));
32306 *old = *real_packet;
32307 genhash_insert(*hash, old, old);
32308 memset(old, 0, sizeof(*old));
32309 }
32310 differ = (old->count != real_packet->count);
32311 if (differ) {
32312 BV_SET(fields, 0);
32313 }
32314
32315 differ = (old->count != real_packet->count);
32316 if (!differ) {
32317 int i;
32318
32319 for (i = 0; i < real_packet->count; i++) {
32320 differ = (old->multipliers[i] != real_packet->multipliers[i]);
32321 if (differ) {
32322 break;
32323 }
32324 }
32325 }
32326 if (differ) {
32327 BV_SET(fields, 1);
32328 }
32329
32330
32331#ifdef FREECIV_JSON_CONNECTION
32332 field_addr.name = "fields";
32333#endif /* FREECIV_JSON_CONNECTION */
32334 e = 0;
32335 e |= DIO_BV_PUT(&dout, &field_addr, fields);
32336 if (e) {
32337 log_packet_detailed("fields bitvector error detected");
32338 }
32339
32340 if (BV_ISSET(fields, 0)) {
32341 log_packet_detailed(" field 'count' has changed");
32342#ifdef FREECIV_JSON_CONNECTION
32343 field_addr.name = "count";
32344#endif /* FREECIV_JSON_CONNECTION */
32345 e = 0;
32346 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
32347 if (e) {
32348 log_packet_detailed("'count' field error detected");
32349 }
32350 }
32351 if (BV_ISSET(fields, 1)) {
32352 log_packet_detailed(" field 'multipliers' has changed");
32353#ifdef FREECIV_JSON_CONNECTION
32354 field_addr.name = "multipliers";
32355#endif /* FREECIV_JSON_CONNECTION */
32356 e = 0;
32357 {
32358 int i;
32359
32360#ifdef FREECIV_JSON_CONNECTION
32361 /* Create the array. */
32362 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
32363
32364 /* Enter the array. */
32365 field_addr.sub_location = plocation_elem_new(0);
32366#endif /* FREECIV_JSON_CONNECTION */
32367
32368 for (i = 0; i < real_packet->count; i++) {
32369#ifdef FREECIV_JSON_CONNECTION
32370 /* Next array element. */
32371 field_addr.sub_location->number = i;
32372#endif /* FREECIV_JSON_CONNECTION */
32373
32374 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
32375 }
32376
32377#ifdef FREECIV_JSON_CONNECTION
32378 /* Exit array. */
32379 FC_FREE(field_addr.sub_location);
32380#endif /* FREECIV_JSON_CONNECTION */
32381 }
32382 if (e) {
32383 log_packet_detailed("'multipliers' field error detected");
32384 }
32385 }
32386
32387 *old = *real_packet;
32388#endif /* FREECIV_DELTA_PROTOCOL */
32389#ifndef FREECIV_DELTA_PROTOCOL
32390#ifdef FREECIV_JSON_CONNECTION
32391 field_addr.name = "count";
32392#endif /* FREECIV_JSON_CONNECTION */
32393 e = 0;
32394 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->count);
32395 if (e) {
32396 log_packet_detailed("'count' field error detected");
32397 }
32398#ifdef FREECIV_JSON_CONNECTION
32399 field_addr.name = "multipliers";
32400#endif /* FREECIV_JSON_CONNECTION */
32401 e = 0;
32402 {
32403 int i;
32404
32405#ifdef FREECIV_JSON_CONNECTION
32406 /* Create the array. */
32407 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->count);
32408
32409 /* Enter the array. */
32410 field_addr.sub_location = plocation_elem_new(0);
32411#endif /* FREECIV_JSON_CONNECTION */
32412
32413 for (i = 0; i < real_packet->count; i++) {
32414#ifdef FREECIV_JSON_CONNECTION
32415 /* Next array element. */
32416 field_addr.sub_location->number = i;
32417#endif /* FREECIV_JSON_CONNECTION */
32418
32419 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->multipliers[i]);
32420 }
32421
32422#ifdef FREECIV_JSON_CONNECTION
32423 /* Exit array. */
32424 FC_FREE(field_addr.sub_location);
32425#endif /* FREECIV_JSON_CONNECTION */
32426 }
32427 if (e) {
32428 log_packet_detailed("'multipliers' field error detected");
32429 }
32430
32431#endif
32433}
32434
32436{
32437 if (!pc->used) {
32438 log_error("WARNING: trying to send data to the closed connection %s",
32440 return -1;
32441 }
32442 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet != NULL, -1,
32443 "Handler for PACKET_PLAYER_MULTIPLIER not installed");
32444 return pc->phs.handlers->send[PACKET_PLAYER_MULTIPLIER].packet(pc, packet);
32445}
32446
32447#ifdef FREECIV_DELTA_PROTOCOL
32449{
32450 const struct packet_research_info *key = (const struct packet_research_info *) vkey;
32451 genhash_val_t result = 0;
32452
32453 result += key->id;
32454
32455 result &= 0xFFFFFFFF;
32456 return result;
32457}
32458
32459static bool cmp_packet_research_info_100(const void *vkey1, const void *vkey2)
32460{
32461 const struct packet_research_info *old = (const struct packet_research_info *) vkey1;
32462 const struct packet_research_info *real_packet = (const struct packet_research_info *) vkey2;
32463 bool differ;
32464
32465 differ = (old->id != real_packet->id);
32466
32467 return !differ;
32468}
32470#endif /* FREECIV_DELTA_PROTOCOL */
32471
32473{
32474#ifdef FREECIV_DELTA_PROTOCOL
32476 struct packet_research_info *old;
32477 struct genhash **hash = pc->phs.received + PACKET_RESEARCH_INFO;
32478#endif /* FREECIV_DELTA_PROTOCOL */
32480#ifdef FREECIV_JSON_CONNECTION
32481 struct plocation field_addr;
32482 {
32486 }
32487#endif /* FREECIV_JSON_CONNECTION */
32488
32489#ifdef FREECIV_DELTA_PROTOCOL
32490#ifdef FREECIV_JSON_CONNECTION
32491 field_addr.name = "fields";
32492#endif /* FREECIV_JSON_CONNECTION */
32493 DIO_BV_GET(&din, &field_addr, fields);
32494#ifdef FREECIV_JSON_CONNECTION
32495 field_addr.name = "id";
32496#endif /* FREECIV_JSON_CONNECTION */
32497 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
32499 }
32500
32501#else /* FREECIV_DELTA_PROTOCOL */
32502#ifdef FREECIV_JSON_CONNECTION
32503 field_addr.name = "id";
32504#endif /* FREECIV_JSON_CONNECTION */
32505 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
32507 }
32508#ifdef FREECIV_JSON_CONNECTION
32509 field_addr.name = "techs_researched";
32510#endif /* FREECIV_JSON_CONNECTION */
32511 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
32512 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
32513 }
32514#ifdef FREECIV_JSON_CONNECTION
32515 field_addr.name = "future_tech";
32516#endif /* FREECIV_JSON_CONNECTION */
32517 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
32518 RECEIVE_PACKET_FIELD_ERROR(future_tech);
32519 }
32520#ifdef FREECIV_JSON_CONNECTION
32521 field_addr.name = "researching";
32522#endif /* FREECIV_JSON_CONNECTION */
32523 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
32524 RECEIVE_PACKET_FIELD_ERROR(researching);
32525 }
32526#ifdef FREECIV_JSON_CONNECTION
32527 field_addr.name = "researching_cost";
32528#endif /* FREECIV_JSON_CONNECTION */
32529 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
32530 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
32531 }
32532#ifdef FREECIV_JSON_CONNECTION
32533 field_addr.name = "bulbs_researched";
32534#endif /* FREECIV_JSON_CONNECTION */
32535 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
32536 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
32537 }
32538#ifdef FREECIV_JSON_CONNECTION
32539 field_addr.name = "tech_goal";
32540#endif /* FREECIV_JSON_CONNECTION */
32541 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
32542 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
32543 }
32544#ifdef FREECIV_JSON_CONNECTION
32545 field_addr.name = "total_bulbs_prod";
32546#endif /* FREECIV_JSON_CONNECTION */
32547 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
32548 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
32549 }
32550#ifdef FREECIV_JSON_CONNECTION
32551 field_addr.name = "inventions";
32552#endif /* FREECIV_JSON_CONNECTION */
32553 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
32554 RECEIVE_PACKET_FIELD_ERROR(inventions);
32555 }
32556#endif
32557 log_packet_detailed("packet_research_info_100: got info about (%d)",
32558 real_packet->id);
32559
32560#ifdef FREECIV_DELTA_PROTOCOL
32561 if (NULL == *hash) {
32563 NULL, NULL, NULL, free);
32564 }
32565
32566 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
32567 *real_packet = *old;
32568 } else {
32569 int id;
32570
32571 id = real_packet->id;
32572
32573 log_packet_detailed(" no old info");
32574 memset(real_packet, 0, sizeof(*real_packet));
32575
32576 real_packet->id = id;
32577 }
32578
32579 if (BV_ISSET(fields, 0)) {
32580 log_packet_detailed(" got field 'techs_researched'");
32581#ifdef FREECIV_JSON_CONNECTION
32582 field_addr.name = "techs_researched";
32583#endif /* FREECIV_JSON_CONNECTION */
32584 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->techs_researched)) {
32585 RECEIVE_PACKET_FIELD_ERROR(techs_researched);
32586 }
32587 }
32588 if (BV_ISSET(fields, 1)) {
32589 log_packet_detailed(" got field 'future_tech'");
32590#ifdef FREECIV_JSON_CONNECTION
32591 field_addr.name = "future_tech";
32592#endif /* FREECIV_JSON_CONNECTION */
32593 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
32594 RECEIVE_PACKET_FIELD_ERROR(future_tech);
32595 }
32596 }
32597 if (BV_ISSET(fields, 2)) {
32598 log_packet_detailed(" got field 'researching'");
32599#ifdef FREECIV_JSON_CONNECTION
32600 field_addr.name = "researching";
32601#endif /* FREECIV_JSON_CONNECTION */
32602 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
32603 RECEIVE_PACKET_FIELD_ERROR(researching);
32604 }
32605 }
32606 if (BV_ISSET(fields, 3)) {
32607 log_packet_detailed(" got field 'researching_cost'");
32608#ifdef FREECIV_JSON_CONNECTION
32609 field_addr.name = "researching_cost";
32610#endif /* FREECIV_JSON_CONNECTION */
32611 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->researching_cost)) {
32612 RECEIVE_PACKET_FIELD_ERROR(researching_cost);
32613 }
32614 }
32615 if (BV_ISSET(fields, 4)) {
32616 log_packet_detailed(" got field 'bulbs_researched'");
32617#ifdef FREECIV_JSON_CONNECTION
32618 field_addr.name = "bulbs_researched";
32619#endif /* FREECIV_JSON_CONNECTION */
32620 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
32621 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
32622 }
32623 }
32624 if (BV_ISSET(fields, 5)) {
32625 log_packet_detailed(" got field 'tech_goal'");
32626#ifdef FREECIV_JSON_CONNECTION
32627 field_addr.name = "tech_goal";
32628#endif /* FREECIV_JSON_CONNECTION */
32629 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech_goal)) {
32630 RECEIVE_PACKET_FIELD_ERROR(tech_goal);
32631 }
32632 }
32633 if (BV_ISSET(fields, 6)) {
32634 log_packet_detailed(" got field 'total_bulbs_prod'");
32635#ifdef FREECIV_JSON_CONNECTION
32636 field_addr.name = "total_bulbs_prod";
32637#endif /* FREECIV_JSON_CONNECTION */
32638 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->total_bulbs_prod)) {
32639 RECEIVE_PACKET_FIELD_ERROR(total_bulbs_prod);
32640 }
32641 }
32642 if (BV_ISSET(fields, 7)) {
32643 log_packet_detailed(" got field 'inventions'");
32644#ifdef FREECIV_JSON_CONNECTION
32645 field_addr.name = "inventions";
32646#endif /* FREECIV_JSON_CONNECTION */
32647 if (!DIO_GET(string, &din, &field_addr, real_packet->inventions, sizeof(real_packet->inventions))) {
32648 RECEIVE_PACKET_FIELD_ERROR(inventions);
32649 }
32650 }
32651
32652 if (NULL == old) {
32653 old = fc_malloc(sizeof(*old));
32654 *old = *real_packet;
32655 genhash_insert(*hash, old, old);
32656 } else {
32657 *old = *real_packet;
32658 }
32659
32660#endif /* FREECIV_DELTA_PROTOCOL */
32662}
32663
32664static int send_packet_research_info_100(struct connection *pc, const struct packet_research_info *packet)
32665{
32666 const struct packet_research_info *real_packet = packet;
32667 int e;
32668#ifdef FREECIV_DELTA_PROTOCOL
32670 struct packet_research_info *old;
32671 bool differ;
32672 struct genhash **hash = pc->phs.sent + PACKET_RESEARCH_INFO;
32673 int different = 0;
32674#endif /* FREECIV_DELTA_PROTOCOL */
32676#ifdef FREECIV_JSON_CONNECTION
32677 struct plocation field_addr;
32678 {
32682 }
32683#endif /* FREECIV_JSON_CONNECTION */
32684
32685 log_packet_detailed("packet_research_info_100: sending info about (%d)",
32686 real_packet->id);
32687
32688#ifdef FREECIV_DELTA_PROTOCOL
32689 if (NULL == *hash) {
32691 NULL, NULL, NULL, free);
32692 }
32693 BV_CLR_ALL(fields);
32694
32695 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
32696 old = fc_malloc(sizeof(*old));
32697 *old = *real_packet;
32698 genhash_insert(*hash, old, old);
32699 memset(old, 0, sizeof(*old));
32700 different = 1; /* Force to send. */
32701 }
32702 differ = (old->techs_researched != real_packet->techs_researched);
32703 if (differ) {
32704 different++;
32705 BV_SET(fields, 0);
32706 }
32707
32708 differ = (old->future_tech != real_packet->future_tech);
32709 if (differ) {
32710 different++;
32711 BV_SET(fields, 1);
32712 }
32713
32714 differ = (old->researching != real_packet->researching);
32715 if (differ) {
32716 different++;
32717 BV_SET(fields, 2);
32718 }
32719
32720 differ = (old->researching_cost != real_packet->researching_cost);
32721 if (differ) {
32722 different++;
32723 BV_SET(fields, 3);
32724 }
32725
32726 differ = (old->bulbs_researched != real_packet->bulbs_researched);
32727 if (differ) {
32728 different++;
32729 BV_SET(fields, 4);
32730 }
32731
32732 differ = (old->tech_goal != real_packet->tech_goal);
32733 if (differ) {
32734 different++;
32735 BV_SET(fields, 5);
32736 }
32737
32738 differ = (old->total_bulbs_prod != real_packet->total_bulbs_prod);
32739 if (differ) {
32740 different++;
32741 BV_SET(fields, 6);
32742 }
32743
32744 differ = (strcmp(old->inventions, real_packet->inventions) != 0);
32745 if (differ) {
32746 different++;
32747 BV_SET(fields, 7);
32748 }
32749
32750 if (different == 0) {
32751 log_packet_detailed(" no change -> discard");
32753 }
32754
32755#ifdef FREECIV_JSON_CONNECTION
32756 field_addr.name = "fields";
32757#endif /* FREECIV_JSON_CONNECTION */
32758 e = 0;
32759 e |= DIO_BV_PUT(&dout, &field_addr, fields);
32760 if (e) {
32761 log_packet_detailed("fields bitvector error detected");
32762 }
32763#ifdef FREECIV_JSON_CONNECTION
32764 field_addr.name = "id";
32765#endif /* FREECIV_JSON_CONNECTION */
32766 e = 0;
32767 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
32768 if (e) {
32769 log_packet_detailed("'id' field error detected");
32770 }
32771
32772 if (BV_ISSET(fields, 0)) {
32773 log_packet_detailed(" field 'techs_researched' has changed");
32774#ifdef FREECIV_JSON_CONNECTION
32775 field_addr.name = "techs_researched";
32776#endif /* FREECIV_JSON_CONNECTION */
32777 e = 0;
32778 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
32779 if (e) {
32780 log_packet_detailed("'techs_researched' field error detected");
32781 }
32782 }
32783 if (BV_ISSET(fields, 1)) {
32784 log_packet_detailed(" field 'future_tech' has changed");
32785#ifdef FREECIV_JSON_CONNECTION
32786 field_addr.name = "future_tech";
32787#endif /* FREECIV_JSON_CONNECTION */
32788 e = 0;
32789 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
32790 if (e) {
32791 log_packet_detailed("'future_tech' field error detected");
32792 }
32793 }
32794 if (BV_ISSET(fields, 2)) {
32795 log_packet_detailed(" field 'researching' has changed");
32796#ifdef FREECIV_JSON_CONNECTION
32797 field_addr.name = "researching";
32798#endif /* FREECIV_JSON_CONNECTION */
32799 e = 0;
32800 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
32801 if (e) {
32802 log_packet_detailed("'researching' field error detected");
32803 }
32804 }
32805 if (BV_ISSET(fields, 3)) {
32806 log_packet_detailed(" field 'researching_cost' has changed");
32807#ifdef FREECIV_JSON_CONNECTION
32808 field_addr.name = "researching_cost";
32809#endif /* FREECIV_JSON_CONNECTION */
32810 e = 0;
32811 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
32812 if (e) {
32813 log_packet_detailed("'researching_cost' field error detected");
32814 }
32815 }
32816 if (BV_ISSET(fields, 4)) {
32817 log_packet_detailed(" field 'bulbs_researched' has changed");
32818#ifdef FREECIV_JSON_CONNECTION
32819 field_addr.name = "bulbs_researched";
32820#endif /* FREECIV_JSON_CONNECTION */
32821 e = 0;
32822 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
32823 if (e) {
32824 log_packet_detailed("'bulbs_researched' field error detected");
32825 }
32826 }
32827 if (BV_ISSET(fields, 5)) {
32828 log_packet_detailed(" field 'tech_goal' has changed");
32829#ifdef FREECIV_JSON_CONNECTION
32830 field_addr.name = "tech_goal";
32831#endif /* FREECIV_JSON_CONNECTION */
32832 e = 0;
32833 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
32834 if (e) {
32835 log_packet_detailed("'tech_goal' field error detected");
32836 }
32837 }
32838 if (BV_ISSET(fields, 6)) {
32839 log_packet_detailed(" field 'total_bulbs_prod' has changed");
32840#ifdef FREECIV_JSON_CONNECTION
32841 field_addr.name = "total_bulbs_prod";
32842#endif /* FREECIV_JSON_CONNECTION */
32843 e = 0;
32844 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
32845 if (e) {
32846 log_packet_detailed("'total_bulbs_prod' field error detected");
32847 }
32848 }
32849 if (BV_ISSET(fields, 7)) {
32850 log_packet_detailed(" field 'inventions' has changed");
32851#ifdef FREECIV_JSON_CONNECTION
32852 field_addr.name = "inventions";
32853#endif /* FREECIV_JSON_CONNECTION */
32854 e = 0;
32855 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
32856 if (e) {
32857 log_packet_detailed("'inventions' field error detected");
32858 }
32859 }
32860
32861 *old = *real_packet;
32862#endif /* FREECIV_DELTA_PROTOCOL */
32863#ifndef FREECIV_DELTA_PROTOCOL
32864#ifdef FREECIV_JSON_CONNECTION
32865 field_addr.name = "id";
32866#endif /* FREECIV_JSON_CONNECTION */
32867 e = 0;
32868 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
32869 if (e) {
32870 log_packet_detailed("'id' field error detected");
32871 }
32872#ifdef FREECIV_JSON_CONNECTION
32873 field_addr.name = "techs_researched";
32874#endif /* FREECIV_JSON_CONNECTION */
32875 e = 0;
32876 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->techs_researched);
32877 if (e) {
32878 log_packet_detailed("'techs_researched' field error detected");
32879 }
32880#ifdef FREECIV_JSON_CONNECTION
32881 field_addr.name = "future_tech";
32882#endif /* FREECIV_JSON_CONNECTION */
32883 e = 0;
32884 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
32885 if (e) {
32886 log_packet_detailed("'future_tech' field error detected");
32887 }
32888#ifdef FREECIV_JSON_CONNECTION
32889 field_addr.name = "researching";
32890#endif /* FREECIV_JSON_CONNECTION */
32891 e = 0;
32892 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
32893 if (e) {
32894 log_packet_detailed("'researching' field error detected");
32895 }
32896#ifdef FREECIV_JSON_CONNECTION
32897 field_addr.name = "researching_cost";
32898#endif /* FREECIV_JSON_CONNECTION */
32899 e = 0;
32900 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->researching_cost);
32901 if (e) {
32902 log_packet_detailed("'researching_cost' field error detected");
32903 }
32904#ifdef FREECIV_JSON_CONNECTION
32905 field_addr.name = "bulbs_researched";
32906#endif /* FREECIV_JSON_CONNECTION */
32907 e = 0;
32908 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
32909 if (e) {
32910 log_packet_detailed("'bulbs_researched' field error detected");
32911 }
32912#ifdef FREECIV_JSON_CONNECTION
32913 field_addr.name = "tech_goal";
32914#endif /* FREECIV_JSON_CONNECTION */
32915 e = 0;
32916 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech_goal);
32917 if (e) {
32918 log_packet_detailed("'tech_goal' field error detected");
32919 }
32920#ifdef FREECIV_JSON_CONNECTION
32921 field_addr.name = "total_bulbs_prod";
32922#endif /* FREECIV_JSON_CONNECTION */
32923 e = 0;
32924 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->total_bulbs_prod);
32925 if (e) {
32926 log_packet_detailed("'total_bulbs_prod' field error detected");
32927 }
32928#ifdef FREECIV_JSON_CONNECTION
32929 field_addr.name = "inventions";
32930#endif /* FREECIV_JSON_CONNECTION */
32931 e = 0;
32932 e |= DIO_PUT(string, &dout, &field_addr, real_packet->inventions);
32933 if (e) {
32934 log_packet_detailed("'inventions' field error detected");
32935 }
32936
32937#endif
32939}
32940
32942{
32943 if (!pc->used) {
32944 log_error("WARNING: trying to send data to the closed connection %s",
32946 return -1;
32947 }
32948 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet != NULL, -1,
32949 "Handler for PACKET_RESEARCH_INFO not installed");
32950 return pc->phs.handlers->send[PACKET_RESEARCH_INFO].packet(pc, packet);
32951}
32952
32953void lsend_packet_research_info(struct conn_list *dest, const struct packet_research_info *packet)
32954{
32955 conn_list_iterate(dest, pconn) {
32958}
32959
32960#ifdef FREECIV_DELTA_PROTOCOL
32961#define hash_packet_unknown_research_100 hash_const
32962
32963#define cmp_packet_unknown_research_100 cmp_const
32964
32966#endif /* FREECIV_DELTA_PROTOCOL */
32967
32969{
32970#ifdef FREECIV_DELTA_PROTOCOL
32972 struct packet_unknown_research *old;
32973 struct genhash **hash = pc->phs.received + PACKET_UNKNOWN_RESEARCH;
32974#endif /* FREECIV_DELTA_PROTOCOL */
32976#ifdef FREECIV_JSON_CONNECTION
32977 struct plocation field_addr;
32978 {
32982 }
32983#endif /* FREECIV_JSON_CONNECTION */
32984
32985#ifdef FREECIV_DELTA_PROTOCOL
32986#ifdef FREECIV_JSON_CONNECTION
32987 field_addr.name = "fields";
32988#endif /* FREECIV_JSON_CONNECTION */
32989 DIO_BV_GET(&din, &field_addr, fields);
32990
32991#else /* FREECIV_DELTA_PROTOCOL */
32992#ifdef FREECIV_JSON_CONNECTION
32993 field_addr.name = "id";
32994#endif /* FREECIV_JSON_CONNECTION */
32995 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
32997 }
32998#endif
32999 log_packet_detailed("packet_unknown_research_100: got info about ()");
33000
33001#ifdef FREECIV_DELTA_PROTOCOL
33002 if (NULL == *hash) {
33004 NULL, NULL, NULL, free);
33005 }
33006
33007 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
33008 *real_packet = *old;
33009 } else {
33010 log_packet_detailed(" no old info");
33011 memset(real_packet, 0, sizeof(*real_packet));
33012 }
33013
33014 if (BV_ISSET(fields, 0)) {
33015 log_packet_detailed(" got field 'id'");
33016#ifdef FREECIV_JSON_CONNECTION
33017 field_addr.name = "id";
33018#endif /* FREECIV_JSON_CONNECTION */
33019 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
33021 }
33022 }
33023
33024 if (NULL == old) {
33025 old = fc_malloc(sizeof(*old));
33026 *old = *real_packet;
33027 genhash_insert(*hash, old, old);
33028 } else {
33029 *old = *real_packet;
33030 }
33031
33032 hash = pc->phs.received + PACKET_RESEARCH_INFO;
33033 if (NULL != *hash) {
33035 }
33036
33037#endif /* FREECIV_DELTA_PROTOCOL */
33039}
33040
33042{
33043 const struct packet_unknown_research *real_packet = packet;
33044 int e;
33045#ifdef FREECIV_DELTA_PROTOCOL
33047 struct packet_unknown_research *old;
33048 bool differ;
33049 struct genhash **hash = pc->phs.sent + PACKET_UNKNOWN_RESEARCH;
33050 int different = 0;
33051#endif /* FREECIV_DELTA_PROTOCOL */
33053#ifdef FREECIV_JSON_CONNECTION
33054 struct plocation field_addr;
33055 {
33059 }
33060#endif /* FREECIV_JSON_CONNECTION */
33061
33062 log_packet_detailed("packet_unknown_research_100: sending info about ()");
33063
33064#ifdef FREECIV_DELTA_PROTOCOL
33065 if (NULL == *hash) {
33067 NULL, NULL, NULL, free);
33068 }
33069 BV_CLR_ALL(fields);
33070
33071 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33072 old = fc_malloc(sizeof(*old));
33073 *old = *real_packet;
33074 genhash_insert(*hash, old, old);
33075 memset(old, 0, sizeof(*old));
33076 different = 1; /* Force to send. */
33077 }
33078 differ = (old->id != real_packet->id);
33079 if (differ) {
33080 different++;
33081 BV_SET(fields, 0);
33082 }
33083
33084 if (different == 0) {
33085 log_packet_detailed(" no change -> discard");
33087 }
33088
33089#ifdef FREECIV_JSON_CONNECTION
33090 field_addr.name = "fields";
33091#endif /* FREECIV_JSON_CONNECTION */
33092 e = 0;
33093 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33094 if (e) {
33095 log_packet_detailed("fields bitvector error detected");
33096 }
33097
33098 if (BV_ISSET(fields, 0)) {
33099 log_packet_detailed(" field 'id' has changed");
33100#ifdef FREECIV_JSON_CONNECTION
33101 field_addr.name = "id";
33102#endif /* FREECIV_JSON_CONNECTION */
33103 e = 0;
33104 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
33105 if (e) {
33106 log_packet_detailed("'id' field error detected");
33107 }
33108 }
33109
33110 *old = *real_packet;
33111
33112 hash = pc->phs.sent + PACKET_RESEARCH_INFO;
33113 if (NULL != *hash) {
33115 }
33116#endif /* FREECIV_DELTA_PROTOCOL */
33117#ifndef FREECIV_DELTA_PROTOCOL
33118#ifdef FREECIV_JSON_CONNECTION
33119 field_addr.name = "id";
33120#endif /* FREECIV_JSON_CONNECTION */
33121 e = 0;
33122 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
33123 if (e) {
33124 log_packet_detailed("'id' field error detected");
33125 }
33126
33127#endif
33129}
33130
33132{
33133 if (!pc->used) {
33134 log_error("WARNING: trying to send data to the closed connection %s",
33136 return -1;
33137 }
33138 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet != NULL, -1,
33139 "Handler for PACKET_UNKNOWN_RESEARCH not installed");
33140 return pc->phs.handlers->send[PACKET_UNKNOWN_RESEARCH].packet(pc, packet);
33141}
33142
33143#ifdef FREECIV_DELTA_PROTOCOL
33144#define hash_packet_player_research_100 hash_const
33145
33146#define cmp_packet_player_research_100 cmp_const
33147
33149#endif /* FREECIV_DELTA_PROTOCOL */
33150
33152{
33153#ifdef FREECIV_DELTA_PROTOCOL
33155 struct packet_player_research *old;
33156 struct genhash **hash = pc->phs.received + PACKET_PLAYER_RESEARCH;
33157#endif /* FREECIV_DELTA_PROTOCOL */
33159#ifdef FREECIV_JSON_CONNECTION
33160 struct plocation field_addr;
33161 {
33165 }
33166#endif /* FREECIV_JSON_CONNECTION */
33167
33168#ifdef FREECIV_DELTA_PROTOCOL
33169#ifdef FREECIV_JSON_CONNECTION
33170 field_addr.name = "fields";
33171#endif /* FREECIV_JSON_CONNECTION */
33172 DIO_BV_GET(&din, &field_addr, fields);
33173
33174#else /* FREECIV_DELTA_PROTOCOL */
33175#ifdef FREECIV_JSON_CONNECTION
33176 field_addr.name = "tech";
33177#endif /* FREECIV_JSON_CONNECTION */
33178 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
33180 }
33181#endif
33182 log_packet_detailed("packet_player_research_100: got info about ()");
33183
33184#ifdef FREECIV_DELTA_PROTOCOL
33185 if (NULL == *hash) {
33187 NULL, NULL, NULL, free);
33188 }
33189
33190 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
33191 *real_packet = *old;
33192 } else {
33193 log_packet_detailed(" no old info");
33194 memset(real_packet, 0, sizeof(*real_packet));
33195 }
33196
33197 if (BV_ISSET(fields, 0)) {
33198 log_packet_detailed(" got field 'tech'");
33199#ifdef FREECIV_JSON_CONNECTION
33200 field_addr.name = "tech";
33201#endif /* FREECIV_JSON_CONNECTION */
33202 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
33204 }
33205 }
33206
33207 if (NULL == old) {
33208 old = fc_malloc(sizeof(*old));
33209 *old = *real_packet;
33210 genhash_insert(*hash, old, old);
33211 } else {
33212 *old = *real_packet;
33213 }
33214
33215#endif /* FREECIV_DELTA_PROTOCOL */
33217}
33218
33220{
33221 const struct packet_player_research *real_packet = packet;
33222 int e;
33223#ifdef FREECIV_DELTA_PROTOCOL
33225 struct packet_player_research *old;
33226 bool differ;
33227 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_RESEARCH;
33228#endif /* FREECIV_DELTA_PROTOCOL */
33230#ifdef FREECIV_JSON_CONNECTION
33231 struct plocation field_addr;
33232 {
33236 }
33237#endif /* FREECIV_JSON_CONNECTION */
33238
33239 log_packet_detailed("packet_player_research_100: sending info about ()");
33240
33241#ifdef FREECIV_DELTA_PROTOCOL
33242 if (NULL == *hash) {
33244 NULL, NULL, NULL, free);
33245 }
33246 BV_CLR_ALL(fields);
33247
33248 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33249 old = fc_malloc(sizeof(*old));
33250 *old = *real_packet;
33251 genhash_insert(*hash, old, old);
33252 memset(old, 0, sizeof(*old));
33253 }
33254 differ = (old->tech != real_packet->tech);
33255 if (differ) {
33256 BV_SET(fields, 0);
33257 }
33258
33259
33260#ifdef FREECIV_JSON_CONNECTION
33261 field_addr.name = "fields";
33262#endif /* FREECIV_JSON_CONNECTION */
33263 e = 0;
33264 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33265 if (e) {
33266 log_packet_detailed("fields bitvector error detected");
33267 }
33268
33269 if (BV_ISSET(fields, 0)) {
33270 log_packet_detailed(" field 'tech' has changed");
33271#ifdef FREECIV_JSON_CONNECTION
33272 field_addr.name = "tech";
33273#endif /* FREECIV_JSON_CONNECTION */
33274 e = 0;
33275 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
33276 if (e) {
33277 log_packet_detailed("'tech' field error detected");
33278 }
33279 }
33280
33281 *old = *real_packet;
33282#endif /* FREECIV_DELTA_PROTOCOL */
33283#ifndef FREECIV_DELTA_PROTOCOL
33284#ifdef FREECIV_JSON_CONNECTION
33285 field_addr.name = "tech";
33286#endif /* FREECIV_JSON_CONNECTION */
33287 e = 0;
33288 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
33289 if (e) {
33290 log_packet_detailed("'tech' field error detected");
33291 }
33292
33293#endif
33295}
33296
33298{
33299 if (!pc->used) {
33300 log_error("WARNING: trying to send data to the closed connection %s",
33302 return -1;
33303 }
33304 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet != NULL, -1,
33305 "Handler for PACKET_PLAYER_RESEARCH not installed");
33306 return pc->phs.handlers->send[PACKET_PLAYER_RESEARCH].packet(pc, packet);
33307}
33308
33310{
33311 struct packet_player_research packet, *real_packet = &packet;
33312
33314
33316}
33317
33318#ifdef FREECIV_DELTA_PROTOCOL
33319#define hash_packet_player_tech_goal_100 hash_const
33320
33321#define cmp_packet_player_tech_goal_100 cmp_const
33322
33324#endif /* FREECIV_DELTA_PROTOCOL */
33325
33327{
33328#ifdef FREECIV_DELTA_PROTOCOL
33330 struct packet_player_tech_goal *old;
33331 struct genhash **hash = pc->phs.received + PACKET_PLAYER_TECH_GOAL;
33332#endif /* FREECIV_DELTA_PROTOCOL */
33334#ifdef FREECIV_JSON_CONNECTION
33335 struct plocation field_addr;
33336 {
33340 }
33341#endif /* FREECIV_JSON_CONNECTION */
33342
33343#ifdef FREECIV_DELTA_PROTOCOL
33344#ifdef FREECIV_JSON_CONNECTION
33345 field_addr.name = "fields";
33346#endif /* FREECIV_JSON_CONNECTION */
33347 DIO_BV_GET(&din, &field_addr, fields);
33348
33349#else /* FREECIV_DELTA_PROTOCOL */
33350#ifdef FREECIV_JSON_CONNECTION
33351 field_addr.name = "tech";
33352#endif /* FREECIV_JSON_CONNECTION */
33353 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
33355 }
33356#endif
33357 log_packet_detailed("packet_player_tech_goal_100: got info about ()");
33358
33359#ifdef FREECIV_DELTA_PROTOCOL
33360 if (NULL == *hash) {
33362 NULL, NULL, NULL, free);
33363 }
33364
33365 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
33366 *real_packet = *old;
33367 } else {
33368 log_packet_detailed(" no old info");
33369 memset(real_packet, 0, sizeof(*real_packet));
33370 }
33371
33372 if (BV_ISSET(fields, 0)) {
33373 log_packet_detailed(" got field 'tech'");
33374#ifdef FREECIV_JSON_CONNECTION
33375 field_addr.name = "tech";
33376#endif /* FREECIV_JSON_CONNECTION */
33377 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tech)) {
33379 }
33380 }
33381
33382 if (NULL == old) {
33383 old = fc_malloc(sizeof(*old));
33384 *old = *real_packet;
33385 genhash_insert(*hash, old, old);
33386 } else {
33387 *old = *real_packet;
33388 }
33389
33390#endif /* FREECIV_DELTA_PROTOCOL */
33392}
33393
33395{
33396 const struct packet_player_tech_goal *real_packet = packet;
33397 int e;
33398#ifdef FREECIV_DELTA_PROTOCOL
33400 struct packet_player_tech_goal *old;
33401 bool differ;
33402 struct genhash **hash = pc->phs.sent + PACKET_PLAYER_TECH_GOAL;
33403#endif /* FREECIV_DELTA_PROTOCOL */
33405#ifdef FREECIV_JSON_CONNECTION
33406 struct plocation field_addr;
33407 {
33411 }
33412#endif /* FREECIV_JSON_CONNECTION */
33413
33414 log_packet_detailed("packet_player_tech_goal_100: sending info about ()");
33415
33416#ifdef FREECIV_DELTA_PROTOCOL
33417 if (NULL == *hash) {
33419 NULL, NULL, NULL, free);
33420 }
33421 BV_CLR_ALL(fields);
33422
33423 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33424 old = fc_malloc(sizeof(*old));
33425 *old = *real_packet;
33426 genhash_insert(*hash, old, old);
33427 memset(old, 0, sizeof(*old));
33428 }
33429 differ = (old->tech != real_packet->tech);
33430 if (differ) {
33431 BV_SET(fields, 0);
33432 }
33433
33434
33435#ifdef FREECIV_JSON_CONNECTION
33436 field_addr.name = "fields";
33437#endif /* FREECIV_JSON_CONNECTION */
33438 e = 0;
33439 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33440 if (e) {
33441 log_packet_detailed("fields bitvector error detected");
33442 }
33443
33444 if (BV_ISSET(fields, 0)) {
33445 log_packet_detailed(" field 'tech' has changed");
33446#ifdef FREECIV_JSON_CONNECTION
33447 field_addr.name = "tech";
33448#endif /* FREECIV_JSON_CONNECTION */
33449 e = 0;
33450 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
33451 if (e) {
33452 log_packet_detailed("'tech' field error detected");
33453 }
33454 }
33455
33456 *old = *real_packet;
33457#endif /* FREECIV_DELTA_PROTOCOL */
33458#ifndef FREECIV_DELTA_PROTOCOL
33459#ifdef FREECIV_JSON_CONNECTION
33460 field_addr.name = "tech";
33461#endif /* FREECIV_JSON_CONNECTION */
33462 e = 0;
33463 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tech);
33464 if (e) {
33465 log_packet_detailed("'tech' field error detected");
33466 }
33467
33468#endif
33470}
33471
33473{
33474 if (!pc->used) {
33475 log_error("WARNING: trying to send data to the closed connection %s",
33477 return -1;
33478 }
33479 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet != NULL, -1,
33480 "Handler for PACKET_PLAYER_TECH_GOAL not installed");
33481 return pc->phs.handlers->send[PACKET_PLAYER_TECH_GOAL].packet(pc, packet);
33482}
33483
33485{
33486 struct packet_player_tech_goal packet, *real_packet = &packet;
33487
33489
33491}
33492
33493#ifdef FREECIV_DELTA_PROTOCOL
33494#define hash_packet_unit_remove_100 hash_const
33495
33496#define cmp_packet_unit_remove_100 cmp_const
33497
33499#endif /* FREECIV_DELTA_PROTOCOL */
33500
33502{
33503#ifdef FREECIV_DELTA_PROTOCOL
33505 struct packet_unit_remove *old;
33506 struct genhash **hash = pc->phs.received + PACKET_UNIT_REMOVE;
33507#endif /* FREECIV_DELTA_PROTOCOL */
33509#ifdef FREECIV_JSON_CONNECTION
33510 struct plocation field_addr;
33511 {
33515 }
33516#endif /* FREECIV_JSON_CONNECTION */
33517
33518#ifdef FREECIV_DELTA_PROTOCOL
33519#ifdef FREECIV_JSON_CONNECTION
33520 field_addr.name = "fields";
33521#endif /* FREECIV_JSON_CONNECTION */
33522 DIO_BV_GET(&din, &field_addr, fields);
33523
33524#else /* FREECIV_DELTA_PROTOCOL */
33525#ifdef FREECIV_JSON_CONNECTION
33526 field_addr.name = "unit_id";
33527#endif /* FREECIV_JSON_CONNECTION */
33528 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
33530 }
33531#endif
33532 log_packet_detailed("packet_unit_remove_100: got info about ()");
33533
33534#ifdef FREECIV_DELTA_PROTOCOL
33535 if (NULL == *hash) {
33537 NULL, NULL, NULL, free);
33538 }
33539
33540 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
33541 *real_packet = *old;
33542 } else {
33543 log_packet_detailed(" no old info");
33544 memset(real_packet, 0, sizeof(*real_packet));
33545 }
33546
33547 if (BV_ISSET(fields, 0)) {
33548 log_packet_detailed(" got field 'unit_id'");
33549#ifdef FREECIV_JSON_CONNECTION
33550 field_addr.name = "unit_id";
33551#endif /* FREECIV_JSON_CONNECTION */
33552 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
33554 }
33555 }
33556
33557 if (NULL == old) {
33558 old = fc_malloc(sizeof(*old));
33559 *old = *real_packet;
33560 genhash_insert(*hash, old, old);
33561 } else {
33562 *old = *real_packet;
33563 }
33564
33565 hash = pc->phs.received + PACKET_UNIT_INFO;
33566 if (NULL != *hash) {
33568 }
33569
33570 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
33571 if (NULL != *hash) {
33573 }
33574
33575#endif /* FREECIV_DELTA_PROTOCOL */
33577}
33578
33579static int send_packet_unit_remove_100(struct connection *pc, const struct packet_unit_remove *packet)
33580{
33581 const struct packet_unit_remove *real_packet = packet;
33582 int e;
33583#ifdef FREECIV_DELTA_PROTOCOL
33585 struct packet_unit_remove *old;
33586 bool differ;
33587 struct genhash **hash = pc->phs.sent + PACKET_UNIT_REMOVE;
33588#endif /* FREECIV_DELTA_PROTOCOL */
33590#ifdef FREECIV_JSON_CONNECTION
33591 struct plocation field_addr;
33592 {
33596 }
33597#endif /* FREECIV_JSON_CONNECTION */
33598
33599 log_packet_detailed("packet_unit_remove_100: sending info about ()");
33600
33601#ifdef FREECIV_DELTA_PROTOCOL
33602 if (NULL == *hash) {
33604 NULL, NULL, NULL, free);
33605 }
33606 BV_CLR_ALL(fields);
33607
33608 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
33609 old = fc_malloc(sizeof(*old));
33610 *old = *real_packet;
33611 genhash_insert(*hash, old, old);
33612 memset(old, 0, sizeof(*old));
33613 }
33614 differ = (old->unit_id != real_packet->unit_id);
33615 if (differ) {
33616 BV_SET(fields, 0);
33617 }
33618
33619
33620#ifdef FREECIV_JSON_CONNECTION
33621 field_addr.name = "fields";
33622#endif /* FREECIV_JSON_CONNECTION */
33623 e = 0;
33624 e |= DIO_BV_PUT(&dout, &field_addr, fields);
33625 if (e) {
33626 log_packet_detailed("fields bitvector error detected");
33627 }
33628
33629 if (BV_ISSET(fields, 0)) {
33630 log_packet_detailed(" field 'unit_id' has changed");
33631#ifdef FREECIV_JSON_CONNECTION
33632 field_addr.name = "unit_id";
33633#endif /* FREECIV_JSON_CONNECTION */
33634 e = 0;
33635 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
33636 if (e) {
33637 log_packet_detailed("'unit_id' field error detected");
33638 }
33639 }
33640
33641 *old = *real_packet;
33642
33643 hash = pc->phs.sent + PACKET_UNIT_INFO;
33644 if (NULL != *hash) {
33646 }
33647
33648 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
33649 if (NULL != *hash) {
33651 }
33652#endif /* FREECIV_DELTA_PROTOCOL */
33653#ifndef FREECIV_DELTA_PROTOCOL
33654#ifdef FREECIV_JSON_CONNECTION
33655 field_addr.name = "unit_id";
33656#endif /* FREECIV_JSON_CONNECTION */
33657 e = 0;
33658 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
33659 if (e) {
33660 log_packet_detailed("'unit_id' field error detected");
33661 }
33662
33663#endif
33665}
33666
33668{
33669 if (!pc->used) {
33670 log_error("WARNING: trying to send data to the closed connection %s",
33672 return -1;
33673 }
33674 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet != NULL, -1,
33675 "Handler for PACKET_UNIT_REMOVE not installed");
33676 return pc->phs.handlers->send[PACKET_UNIT_REMOVE].packet(pc, packet);
33677}
33678
33679void lsend_packet_unit_remove(struct conn_list *dest, const struct packet_unit_remove *packet)
33680{
33681 conn_list_iterate(dest, pconn) {
33684}
33685
33686int dsend_packet_unit_remove(struct connection *pc, int unit_id)
33687{
33688 struct packet_unit_remove packet, *real_packet = &packet;
33689
33691
33693}
33694
33696{
33697 struct packet_unit_remove packet, *real_packet = &packet;
33698
33700
33702}
33703
33704#ifdef FREECIV_DELTA_PROTOCOL
33706{
33707 const struct packet_unit_info *key = (const struct packet_unit_info *) vkey;
33708 genhash_val_t result = 0;
33709
33710 result += key->id;
33711
33712 result &= 0xFFFFFFFF;
33713 return result;
33714}
33715
33716static bool cmp_packet_unit_info_100(const void *vkey1, const void *vkey2)
33717{
33718 const struct packet_unit_info *old = (const struct packet_unit_info *) vkey1;
33719 const struct packet_unit_info *real_packet = (const struct packet_unit_info *) vkey2;
33720 bool differ;
33721
33722 differ = (old->id != real_packet->id);
33723
33724 return !differ;
33725}
33727#endif /* FREECIV_DELTA_PROTOCOL */
33728
33730{
33731#ifdef FREECIV_DELTA_PROTOCOL
33733 struct packet_unit_info *old;
33734 struct genhash **hash = pc->phs.received + PACKET_UNIT_INFO;
33735#endif /* FREECIV_DELTA_PROTOCOL */
33737#ifdef FREECIV_JSON_CONNECTION
33738 struct plocation field_addr;
33739 {
33743 }
33744#endif /* FREECIV_JSON_CONNECTION */
33745
33746#ifdef FREECIV_DELTA_PROTOCOL
33747#ifdef FREECIV_JSON_CONNECTION
33748 field_addr.name = "fields";
33749#endif /* FREECIV_JSON_CONNECTION */
33750 DIO_BV_GET(&din, &field_addr, fields);
33751#ifdef FREECIV_JSON_CONNECTION
33752 field_addr.name = "id";
33753#endif /* FREECIV_JSON_CONNECTION */
33754 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
33756 }
33757
33758#else /* FREECIV_DELTA_PROTOCOL */
33759#ifdef FREECIV_JSON_CONNECTION
33760 field_addr.name = "id";
33761#endif /* FREECIV_JSON_CONNECTION */
33762 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
33764 }
33765#ifdef FREECIV_JSON_CONNECTION
33766 field_addr.name = "owner";
33767#endif /* FREECIV_JSON_CONNECTION */
33768 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
33770 }
33771#ifdef FREECIV_JSON_CONNECTION
33772 field_addr.name = "nationality";
33773#endif /* FREECIV_JSON_CONNECTION */
33774 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nationality)) {
33775 RECEIVE_PACKET_FIELD_ERROR(nationality);
33776 }
33777#ifdef FREECIV_JSON_CONNECTION
33778 field_addr.name = "tile";
33779#endif /* FREECIV_JSON_CONNECTION */
33780 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
33782 }
33783#ifdef FREECIV_JSON_CONNECTION
33784 field_addr.name = "facing";
33785#endif /* FREECIV_JSON_CONNECTION */
33786 {
33787 int readin;
33788
33789 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
33791 }
33792 real_packet->facing = readin;
33793 }
33794#ifdef FREECIV_JSON_CONNECTION
33795 field_addr.name = "homecity";
33796#endif /* FREECIV_JSON_CONNECTION */
33797 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
33799 }
33800#ifdef FREECIV_JSON_CONNECTION
33801 field_addr.name = "upkeep";
33802#endif /* FREECIV_JSON_CONNECTION */
33803 {
33804 int i;
33805
33806#ifdef FREECIV_JSON_CONNECTION
33807 /* Enter array. */
33808 field_addr.sub_location = plocation_elem_new(0);
33809#endif /* FREECIV_JSON_CONNECTION */
33810
33811 for (i = 0; i < O_LAST; i++) {
33812#ifdef FREECIV_JSON_CONNECTION
33813 field_addr.sub_location->number = i;
33814#endif /* FREECIV_JSON_CONNECTION */
33815
33816 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
33818 }
33819 }
33820
33821#ifdef FREECIV_JSON_CONNECTION
33822 /* Exit array. */
33823 FC_FREE(field_addr.sub_location);
33824#endif /* FREECIV_JSON_CONNECTION */
33825 }
33826#ifdef FREECIV_JSON_CONNECTION
33827 field_addr.name = "veteran";
33828#endif /* FREECIV_JSON_CONNECTION */
33829 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
33831 }
33832#ifdef FREECIV_JSON_CONNECTION
33833 field_addr.name = "ssa_controller";
33834#endif /* FREECIV_JSON_CONNECTION */
33835 {
33836 int readin;
33837
33838 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33839 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
33840 }
33841 real_packet->ssa_controller = readin;
33842 }
33843#ifdef FREECIV_JSON_CONNECTION
33844 field_addr.name = "paradropped";
33845#endif /* FREECIV_JSON_CONNECTION */
33846 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
33847 RECEIVE_PACKET_FIELD_ERROR(paradropped);
33848 }
33849#ifdef FREECIV_JSON_CONNECTION
33850 field_addr.name = "occupied";
33851#endif /* FREECIV_JSON_CONNECTION */
33852 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
33854 }
33855#ifdef FREECIV_JSON_CONNECTION
33856 field_addr.name = "transported";
33857#endif /* FREECIV_JSON_CONNECTION */
33858 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
33859 RECEIVE_PACKET_FIELD_ERROR(transported);
33860 }
33861#ifdef FREECIV_JSON_CONNECTION
33862 field_addr.name = "done_moving";
33863#endif /* FREECIV_JSON_CONNECTION */
33864 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
33865 RECEIVE_PACKET_FIELD_ERROR(done_moving);
33866 }
33867#ifdef FREECIV_JSON_CONNECTION
33868 field_addr.name = "stay";
33869#endif /* FREECIV_JSON_CONNECTION */
33870 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
33872 }
33873#ifdef FREECIV_JSON_CONNECTION
33874 field_addr.name = "birth_turn";
33875#endif /* FREECIV_JSON_CONNECTION */
33876 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
33877 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
33878 }
33879#ifdef FREECIV_JSON_CONNECTION
33880 field_addr.name = "current_form_turn";
33881#endif /* FREECIV_JSON_CONNECTION */
33882 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
33883 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
33884 }
33885#ifdef FREECIV_JSON_CONNECTION
33886 field_addr.name = "type";
33887#endif /* FREECIV_JSON_CONNECTION */
33888 {
33889 int readin;
33890
33891 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
33893 }
33894 real_packet->type = readin;
33895 }
33896#ifdef FREECIV_JSON_CONNECTION
33897 field_addr.name = "transported_by";
33898#endif /* FREECIV_JSON_CONNECTION */
33899 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
33900 RECEIVE_PACKET_FIELD_ERROR(transported_by);
33901 }
33902#ifdef FREECIV_JSON_CONNECTION
33903 field_addr.name = "carrying";
33904#endif /* FREECIV_JSON_CONNECTION */
33905 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
33907 }
33908#ifdef FREECIV_JSON_CONNECTION
33909 field_addr.name = "movesleft";
33910#endif /* FREECIV_JSON_CONNECTION */
33911 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
33912 RECEIVE_PACKET_FIELD_ERROR(movesleft);
33913 }
33914#ifdef FREECIV_JSON_CONNECTION
33915 field_addr.name = "hp";
33916#endif /* FREECIV_JSON_CONNECTION */
33917 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
33919 }
33920#ifdef FREECIV_JSON_CONNECTION
33921 field_addr.name = "fuel";
33922#endif /* FREECIV_JSON_CONNECTION */
33923 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
33925 }
33926#ifdef FREECIV_JSON_CONNECTION
33927 field_addr.name = "activity_count";
33928#endif /* FREECIV_JSON_CONNECTION */
33929 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
33930 RECEIVE_PACKET_FIELD_ERROR(activity_count);
33931 }
33932#ifdef FREECIV_JSON_CONNECTION
33933 field_addr.name = "changed_from_count";
33934#endif /* FREECIV_JSON_CONNECTION */
33935 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
33936 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
33937 }
33938#ifdef FREECIV_JSON_CONNECTION
33939 field_addr.name = "goto_tile";
33940#endif /* FREECIV_JSON_CONNECTION */
33941 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
33942 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
33943 }
33944#ifdef FREECIV_JSON_CONNECTION
33945 field_addr.name = "activity";
33946#endif /* FREECIV_JSON_CONNECTION */
33947 {
33948 int readin;
33949
33950 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33952 }
33953 real_packet->activity = readin;
33954 }
33955#ifdef FREECIV_JSON_CONNECTION
33956 field_addr.name = "activity_tgt";
33957#endif /* FREECIV_JSON_CONNECTION */
33958 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
33959 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
33960 }
33961#ifdef FREECIV_JSON_CONNECTION
33962 field_addr.name = "changed_from";
33963#endif /* FREECIV_JSON_CONNECTION */
33964 {
33965 int readin;
33966
33967 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
33968 RECEIVE_PACKET_FIELD_ERROR(changed_from);
33969 }
33970 real_packet->changed_from = readin;
33971 }
33972#ifdef FREECIV_JSON_CONNECTION
33973 field_addr.name = "changed_from_tgt";
33974#endif /* FREECIV_JSON_CONNECTION */
33975 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
33976 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
33977 }
33978#ifdef FREECIV_JSON_CONNECTION
33979 field_addr.name = "battlegroup";
33980#endif /* FREECIV_JSON_CONNECTION */
33981 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
33982 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
33983 }
33984#ifdef FREECIV_JSON_CONNECTION
33985 field_addr.name = "has_orders";
33986#endif /* FREECIV_JSON_CONNECTION */
33987 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_orders)) {
33988 RECEIVE_PACKET_FIELD_ERROR(has_orders);
33989 }
33990#ifdef FREECIV_JSON_CONNECTION
33991 field_addr.name = "orders_length";
33992#endif /* FREECIV_JSON_CONNECTION */
33993 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
33994 RECEIVE_PACKET_FIELD_ERROR(orders_length);
33995 }
33996#ifdef FREECIV_JSON_CONNECTION
33997 field_addr.name = "orders_index";
33998#endif /* FREECIV_JSON_CONNECTION */
33999 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
34000 RECEIVE_PACKET_FIELD_ERROR(orders_index);
34001 }
34002#ifdef FREECIV_JSON_CONNECTION
34003 field_addr.name = "orders_repeat";
34004#endif /* FREECIV_JSON_CONNECTION */
34005 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_repeat)) {
34006 RECEIVE_PACKET_FIELD_ERROR(orders_repeat);
34007 }
34008#ifdef FREECIV_JSON_CONNECTION
34009 field_addr.name = "orders_vigilant";
34010#endif /* FREECIV_JSON_CONNECTION */
34011 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->orders_vigilant)) {
34012 RECEIVE_PACKET_FIELD_ERROR(orders_vigilant);
34013 }
34014#ifdef FREECIV_JSON_CONNECTION
34015 field_addr.name = "orders";
34016#endif /* FREECIV_JSON_CONNECTION */
34017 if (real_packet->orders_length > MAX_LEN_ROUTE) {
34018 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
34019 }
34020 {
34021 int i;
34022
34023#ifdef FREECIV_JSON_CONNECTION
34024 /* Enter array. */
34025 field_addr.sub_location = plocation_elem_new(0);
34026#endif /* FREECIV_JSON_CONNECTION */
34027
34028 for (i = 0; i < real_packet->orders_length; i++) {
34029#ifdef FREECIV_JSON_CONNECTION
34030 field_addr.sub_location->number = i;
34031#endif /* FREECIV_JSON_CONNECTION */
34032
34033 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
34035 }
34036 }
34037
34038#ifdef FREECIV_JSON_CONNECTION
34039 /* Exit array. */
34040 FC_FREE(field_addr.sub_location);
34041#endif /* FREECIV_JSON_CONNECTION */
34042 }
34043#ifdef FREECIV_JSON_CONNECTION
34044 field_addr.name = "action_decision_want";
34045#endif /* FREECIV_JSON_CONNECTION */
34046 {
34047 int readin;
34048
34049 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34050 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
34051 }
34052 real_packet->action_decision_want = readin;
34053 }
34054#ifdef FREECIV_JSON_CONNECTION
34055 field_addr.name = "action_decision_tile";
34056#endif /* FREECIV_JSON_CONNECTION */
34057 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
34058 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
34059 }
34060#endif
34061 log_packet_detailed("packet_unit_info_100: got info about (%d)",
34062 real_packet->id);
34063
34064#ifdef FREECIV_DELTA_PROTOCOL
34065 if (NULL == *hash) {
34067 NULL, NULL, NULL, free);
34068 }
34069
34070 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
34071 *real_packet = *old;
34072 } else {
34073 int id;
34074
34075 id = real_packet->id;
34076
34077 log_packet_detailed(" no old info");
34078 memset(real_packet, 0, sizeof(*real_packet));
34079
34080 real_packet->id = id;
34081 }
34082
34083 if (BV_ISSET(fields, 0)) {
34084 log_packet_detailed(" got field 'owner'");
34085#ifdef FREECIV_JSON_CONNECTION
34086 field_addr.name = "owner";
34087#endif /* FREECIV_JSON_CONNECTION */
34088 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
34090 }
34091 }
34092 if (BV_ISSET(fields, 1)) {
34093 log_packet_detailed(" got field 'nationality'");
34094#ifdef FREECIV_JSON_CONNECTION
34095 field_addr.name = "nationality";
34096#endif /* FREECIV_JSON_CONNECTION */
34097 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nationality)) {
34098 RECEIVE_PACKET_FIELD_ERROR(nationality);
34099 }
34100 }
34101 if (BV_ISSET(fields, 2)) {
34102 log_packet_detailed(" got field 'tile'");
34103#ifdef FREECIV_JSON_CONNECTION
34104 field_addr.name = "tile";
34105#endif /* FREECIV_JSON_CONNECTION */
34106 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
34108 }
34109 }
34110 if (BV_ISSET(fields, 3)) {
34111 log_packet_detailed(" got field 'facing'");
34112#ifdef FREECIV_JSON_CONNECTION
34113 field_addr.name = "facing";
34114#endif /* FREECIV_JSON_CONNECTION */
34115 {
34116 int readin;
34117
34118 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
34120 }
34121 real_packet->facing = readin;
34122 }
34123 }
34124 if (BV_ISSET(fields, 4)) {
34125 log_packet_detailed(" got field 'homecity'");
34126#ifdef FREECIV_JSON_CONNECTION
34127 field_addr.name = "homecity";
34128#endif /* FREECIV_JSON_CONNECTION */
34129 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
34131 }
34132 }
34133 if (BV_ISSET(fields, 5)) {
34134 log_packet_detailed(" got field 'upkeep'");
34135#ifdef FREECIV_JSON_CONNECTION
34136 field_addr.name = "upkeep";
34137#endif /* FREECIV_JSON_CONNECTION */
34138 {
34139 int i;
34140
34141#ifdef FREECIV_JSON_CONNECTION
34142 /* Enter array. */
34143 field_addr.sub_location = plocation_elem_new(0);
34144#endif /* FREECIV_JSON_CONNECTION */
34145
34146 for (i = 0; i < O_LAST; i++) {
34147#ifdef FREECIV_JSON_CONNECTION
34148 field_addr.sub_location->number = i;
34149#endif /* FREECIV_JSON_CONNECTION */
34150
34151 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
34153 }
34154 }
34155
34156#ifdef FREECIV_JSON_CONNECTION
34157 /* Exit array. */
34158 FC_FREE(field_addr.sub_location);
34159#endif /* FREECIV_JSON_CONNECTION */
34160 }
34161 }
34162 if (BV_ISSET(fields, 6)) {
34163 log_packet_detailed(" got field 'veteran'");
34164#ifdef FREECIV_JSON_CONNECTION
34165 field_addr.name = "veteran";
34166#endif /* FREECIV_JSON_CONNECTION */
34167 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
34169 }
34170 }
34171 if (BV_ISSET(fields, 7)) {
34172 log_packet_detailed(" got field 'ssa_controller'");
34173#ifdef FREECIV_JSON_CONNECTION
34174 field_addr.name = "ssa_controller";
34175#endif /* FREECIV_JSON_CONNECTION */
34176 {
34177 int readin;
34178
34179 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34180 RECEIVE_PACKET_FIELD_ERROR(ssa_controller);
34181 }
34182 real_packet->ssa_controller = readin;
34183 }
34184 }
34185 real_packet->paradropped = BV_ISSET(fields, 8);
34186 real_packet->occupied = BV_ISSET(fields, 9);
34187 real_packet->transported = BV_ISSET(fields, 10);
34188 real_packet->done_moving = BV_ISSET(fields, 11);
34189 real_packet->stay = BV_ISSET(fields, 12);
34190 if (BV_ISSET(fields, 13)) {
34191 log_packet_detailed(" got field 'birth_turn'");
34192#ifdef FREECIV_JSON_CONNECTION
34193 field_addr.name = "birth_turn";
34194#endif /* FREECIV_JSON_CONNECTION */
34195 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->birth_turn)) {
34196 RECEIVE_PACKET_FIELD_ERROR(birth_turn);
34197 }
34198 }
34199 if (BV_ISSET(fields, 14)) {
34200 log_packet_detailed(" got field 'current_form_turn'");
34201#ifdef FREECIV_JSON_CONNECTION
34202 field_addr.name = "current_form_turn";
34203#endif /* FREECIV_JSON_CONNECTION */
34204 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->current_form_turn)) {
34205 RECEIVE_PACKET_FIELD_ERROR(current_form_turn);
34206 }
34207 }
34208 if (BV_ISSET(fields, 15)) {
34209 log_packet_detailed(" got field 'type'");
34210#ifdef FREECIV_JSON_CONNECTION
34211 field_addr.name = "type";
34212#endif /* FREECIV_JSON_CONNECTION */
34213 {
34214 int readin;
34215
34216 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
34218 }
34219 real_packet->type = readin;
34220 }
34221 }
34222 if (BV_ISSET(fields, 16)) {
34223 log_packet_detailed(" got field 'transported_by'");
34224#ifdef FREECIV_JSON_CONNECTION
34225 field_addr.name = "transported_by";
34226#endif /* FREECIV_JSON_CONNECTION */
34227 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
34228 RECEIVE_PACKET_FIELD_ERROR(transported_by);
34229 }
34230 }
34231 if (BV_ISSET(fields, 17)) {
34232 log_packet_detailed(" got field 'carrying'");
34233#ifdef FREECIV_JSON_CONNECTION
34234 field_addr.name = "carrying";
34235#endif /* FREECIV_JSON_CONNECTION */
34236 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->carrying)) {
34238 }
34239 }
34240 if (BV_ISSET(fields, 18)) {
34241 log_packet_detailed(" got field 'movesleft'");
34242#ifdef FREECIV_JSON_CONNECTION
34243 field_addr.name = "movesleft";
34244#endif /* FREECIV_JSON_CONNECTION */
34245 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->movesleft)) {
34246 RECEIVE_PACKET_FIELD_ERROR(movesleft);
34247 }
34248 }
34249 if (BV_ISSET(fields, 19)) {
34250 log_packet_detailed(" got field 'hp'");
34251#ifdef FREECIV_JSON_CONNECTION
34252 field_addr.name = "hp";
34253#endif /* FREECIV_JSON_CONNECTION */
34254 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
34256 }
34257 }
34258 if (BV_ISSET(fields, 20)) {
34259 log_packet_detailed(" got field 'fuel'");
34260#ifdef FREECIV_JSON_CONNECTION
34261 field_addr.name = "fuel";
34262#endif /* FREECIV_JSON_CONNECTION */
34263 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
34265 }
34266 }
34267 if (BV_ISSET(fields, 21)) {
34268 log_packet_detailed(" got field 'activity_count'");
34269#ifdef FREECIV_JSON_CONNECTION
34270 field_addr.name = "activity_count";
34271#endif /* FREECIV_JSON_CONNECTION */
34272 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
34273 RECEIVE_PACKET_FIELD_ERROR(activity_count);
34274 }
34275 }
34276 if (BV_ISSET(fields, 22)) {
34277 log_packet_detailed(" got field 'changed_from_count'");
34278#ifdef FREECIV_JSON_CONNECTION
34279 field_addr.name = "changed_from_count";
34280#endif /* FREECIV_JSON_CONNECTION */
34281 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->changed_from_count)) {
34282 RECEIVE_PACKET_FIELD_ERROR(changed_from_count);
34283 }
34284 }
34285 if (BV_ISSET(fields, 23)) {
34286 log_packet_detailed(" got field 'goto_tile'");
34287#ifdef FREECIV_JSON_CONNECTION
34288 field_addr.name = "goto_tile";
34289#endif /* FREECIV_JSON_CONNECTION */
34290 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->goto_tile)) {
34291 RECEIVE_PACKET_FIELD_ERROR(goto_tile);
34292 }
34293 }
34294 if (BV_ISSET(fields, 24)) {
34295 log_packet_detailed(" got field 'activity'");
34296#ifdef FREECIV_JSON_CONNECTION
34297 field_addr.name = "activity";
34298#endif /* FREECIV_JSON_CONNECTION */
34299 {
34300 int readin;
34301
34302 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34304 }
34305 real_packet->activity = readin;
34306 }
34307 }
34308 if (BV_ISSET(fields, 25)) {
34309 log_packet_detailed(" got field 'activity_tgt'");
34310#ifdef FREECIV_JSON_CONNECTION
34311 field_addr.name = "activity_tgt";
34312#endif /* FREECIV_JSON_CONNECTION */
34313 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
34314 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
34315 }
34316 }
34317 if (BV_ISSET(fields, 26)) {
34318 log_packet_detailed(" got field 'changed_from'");
34319#ifdef FREECIV_JSON_CONNECTION
34320 field_addr.name = "changed_from";
34321#endif /* FREECIV_JSON_CONNECTION */
34322 {
34323 int readin;
34324
34325 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34326 RECEIVE_PACKET_FIELD_ERROR(changed_from);
34327 }
34328 real_packet->changed_from = readin;
34329 }
34330 }
34331 if (BV_ISSET(fields, 27)) {
34332 log_packet_detailed(" got field 'changed_from_tgt'");
34333#ifdef FREECIV_JSON_CONNECTION
34334 field_addr.name = "changed_from_tgt";
34335#endif /* FREECIV_JSON_CONNECTION */
34336 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->changed_from_tgt)) {
34337 RECEIVE_PACKET_FIELD_ERROR(changed_from_tgt);
34338 }
34339 }
34340 if (BV_ISSET(fields, 28)) {
34341 log_packet_detailed(" got field 'battlegroup'");
34342#ifdef FREECIV_JSON_CONNECTION
34343 field_addr.name = "battlegroup";
34344#endif /* FREECIV_JSON_CONNECTION */
34345 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->battlegroup)) {
34346 RECEIVE_PACKET_FIELD_ERROR(battlegroup);
34347 }
34348 }
34349 real_packet->has_orders = BV_ISSET(fields, 29);
34350 if (BV_ISSET(fields, 30)) {
34351 log_packet_detailed(" got field 'orders_length'");
34352#ifdef FREECIV_JSON_CONNECTION
34353 field_addr.name = "orders_length";
34354#endif /* FREECIV_JSON_CONNECTION */
34355 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_length)) {
34356 RECEIVE_PACKET_FIELD_ERROR(orders_length);
34357 }
34358 }
34359 if (BV_ISSET(fields, 31)) {
34360 log_packet_detailed(" got field 'orders_index'");
34361#ifdef FREECIV_JSON_CONNECTION
34362 field_addr.name = "orders_index";
34363#endif /* FREECIV_JSON_CONNECTION */
34364 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->orders_index)) {
34365 RECEIVE_PACKET_FIELD_ERROR(orders_index);
34366 }
34367 }
34368 real_packet->orders_repeat = BV_ISSET(fields, 32);
34369 real_packet->orders_vigilant = BV_ISSET(fields, 33);
34370 if (BV_ISSET(fields, 34)) {
34371 log_packet_detailed(" got field 'orders'");
34372#ifdef FREECIV_JSON_CONNECTION
34373 field_addr.name = "orders";
34374#endif /* FREECIV_JSON_CONNECTION */
34375 if (real_packet->orders_length > MAX_LEN_ROUTE) {
34376 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
34377 }
34378 {
34379 int i;
34380
34381#ifdef FREECIV_JSON_CONNECTION
34382 /* Enter array. */
34383 field_addr.sub_location = plocation_elem_new(0);
34384#endif /* FREECIV_JSON_CONNECTION */
34385
34386 for (i = 0; i < real_packet->orders_length; i++) {
34387#ifdef FREECIV_JSON_CONNECTION
34388 field_addr.sub_location->number = i;
34389#endif /* FREECIV_JSON_CONNECTION */
34390
34391 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
34393 }
34394 }
34395
34396#ifdef FREECIV_JSON_CONNECTION
34397 /* Exit array. */
34398 FC_FREE(field_addr.sub_location);
34399#endif /* FREECIV_JSON_CONNECTION */
34400 }
34401 }
34402 if (BV_ISSET(fields, 35)) {
34403 log_packet_detailed(" got field 'action_decision_want'");
34404#ifdef FREECIV_JSON_CONNECTION
34405 field_addr.name = "action_decision_want";
34406#endif /* FREECIV_JSON_CONNECTION */
34407 {
34408 int readin;
34409
34410 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
34411 RECEIVE_PACKET_FIELD_ERROR(action_decision_want);
34412 }
34413 real_packet->action_decision_want = readin;
34414 }
34415 }
34416 if (BV_ISSET(fields, 36)) {
34417 log_packet_detailed(" got field 'action_decision_tile'");
34418#ifdef FREECIV_JSON_CONNECTION
34419 field_addr.name = "action_decision_tile";
34420#endif /* FREECIV_JSON_CONNECTION */
34421 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->action_decision_tile)) {
34422 RECEIVE_PACKET_FIELD_ERROR(action_decision_tile);
34423 }
34424 }
34425
34426 if (NULL == old) {
34427 old = fc_malloc(sizeof(*old));
34428 *old = *real_packet;
34429 genhash_insert(*hash, old, old);
34430 } else {
34431 *old = *real_packet;
34432 }
34433
34434 hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
34435 if (NULL != *hash) {
34437 }
34438
34439#endif /* FREECIV_DELTA_PROTOCOL */
34441}
34442
34443static int send_packet_unit_info_100(struct connection *pc, const struct packet_unit_info *packet)
34444{
34445 const struct packet_unit_info *real_packet = packet;
34446 int e;
34447#ifdef FREECIV_DELTA_PROTOCOL
34449 struct packet_unit_info *old;
34450 bool differ;
34451 struct genhash **hash = pc->phs.sent + PACKET_UNIT_INFO;
34452 int different = 0;
34453#endif /* FREECIV_DELTA_PROTOCOL */
34455#ifdef FREECIV_JSON_CONNECTION
34456 struct plocation field_addr;
34457 {
34461 }
34462#endif /* FREECIV_JSON_CONNECTION */
34463
34464 log_packet_detailed("packet_unit_info_100: sending info about (%d)",
34465 real_packet->id);
34466
34467#ifdef FREECIV_DELTA_PROTOCOL
34468 if (NULL == *hash) {
34470 NULL, NULL, NULL, free);
34471 }
34472 BV_CLR_ALL(fields);
34473
34474 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
34475 old = fc_malloc(sizeof(*old));
34476 *old = *real_packet;
34477 genhash_insert(*hash, old, old);
34478 memset(old, 0, sizeof(*old));
34479 different = 1; /* Force to send. */
34480 }
34481 differ = (old->owner != real_packet->owner);
34482 if (differ) {
34483 different++;
34484 BV_SET(fields, 0);
34485 }
34486
34487 differ = (old->nationality != real_packet->nationality);
34488 if (differ) {
34489 different++;
34490 BV_SET(fields, 1);
34491 }
34492
34493 differ = (old->tile != real_packet->tile);
34494 if (differ) {
34495 different++;
34496 BV_SET(fields, 2);
34497 }
34498
34499 differ = (old->facing != real_packet->facing);
34500 if (differ) {
34501 different++;
34502 BV_SET(fields, 3);
34503 }
34504
34505 differ = (old->homecity != real_packet->homecity);
34506 if (differ) {
34507 different++;
34508 BV_SET(fields, 4);
34509 }
34510
34511 differ = FALSE;
34512 {
34513 int i;
34514
34515 for (i = 0; i < O_LAST; i++) {
34516 differ = (old->upkeep[i] != real_packet->upkeep[i]);
34517 if (differ) {
34518 break;
34519 }
34520 }
34521 }
34522 if (differ) {
34523 different++;
34524 BV_SET(fields, 5);
34525 }
34526
34527 differ = (old->veteran != real_packet->veteran);
34528 if (differ) {
34529 different++;
34530 BV_SET(fields, 6);
34531 }
34532
34533 differ = (old->ssa_controller != real_packet->ssa_controller);
34534 if (differ) {
34535 different++;
34536 BV_SET(fields, 7);
34537 }
34538
34539 differ = (old->paradropped != real_packet->paradropped);
34540 if (differ) {
34541 different++;
34542 }
34543 if (packet->paradropped) {
34544 BV_SET(fields, 8);
34545 }
34546
34547 differ = (old->occupied != real_packet->occupied);
34548 if (differ) {
34549 different++;
34550 }
34551 if (packet->occupied) {
34552 BV_SET(fields, 9);
34553 }
34554
34555 differ = (old->transported != real_packet->transported);
34556 if (differ) {
34557 different++;
34558 }
34559 if (packet->transported) {
34560 BV_SET(fields, 10);
34561 }
34562
34563 differ = (old->done_moving != real_packet->done_moving);
34564 if (differ) {
34565 different++;
34566 }
34567 if (packet->done_moving) {
34568 BV_SET(fields, 11);
34569 }
34570
34571 differ = (old->stay != real_packet->stay);
34572 if (differ) {
34573 different++;
34574 }
34575 if (packet->stay) {
34576 BV_SET(fields, 12);
34577 }
34578
34579 differ = (old->birth_turn != real_packet->birth_turn);
34580 if (differ) {
34581 different++;
34582 BV_SET(fields, 13);
34583 }
34584
34585 differ = (old->current_form_turn != real_packet->current_form_turn);
34586 if (differ) {
34587 different++;
34588 BV_SET(fields, 14);
34589 }
34590
34591 differ = (old->type != real_packet->type);
34592 if (differ) {
34593 different++;
34594 BV_SET(fields, 15);
34595 }
34596
34597 differ = (old->transported_by != real_packet->transported_by);
34598 if (differ) {
34599 different++;
34600 BV_SET(fields, 16);
34601 }
34602
34603 differ = (old->carrying != real_packet->carrying);
34604 if (differ) {
34605 different++;
34606 BV_SET(fields, 17);
34607 }
34608
34609 differ = (old->movesleft != real_packet->movesleft);
34610 if (differ) {
34611 different++;
34612 BV_SET(fields, 18);
34613 }
34614
34615 differ = (old->hp != real_packet->hp);
34616 if (differ) {
34617 different++;
34618 BV_SET(fields, 19);
34619 }
34620
34621 differ = (old->fuel != real_packet->fuel);
34622 if (differ) {
34623 different++;
34624 BV_SET(fields, 20);
34625 }
34626
34627 differ = (old->activity_count != real_packet->activity_count);
34628 if (differ) {
34629 different++;
34630 BV_SET(fields, 21);
34631 }
34632
34633 differ = (old->changed_from_count != real_packet->changed_from_count);
34634 if (differ) {
34635 different++;
34636 BV_SET(fields, 22);
34637 }
34638
34639 differ = (old->goto_tile != real_packet->goto_tile);
34640 if (differ) {
34641 different++;
34642 BV_SET(fields, 23);
34643 }
34644
34645 differ = (old->activity != real_packet->activity);
34646 if (differ) {
34647 different++;
34648 BV_SET(fields, 24);
34649 }
34650
34651 differ = (old->activity_tgt != real_packet->activity_tgt);
34652 if (differ) {
34653 different++;
34654 BV_SET(fields, 25);
34655 }
34656
34657 differ = (old->changed_from != real_packet->changed_from);
34658 if (differ) {
34659 different++;
34660 BV_SET(fields, 26);
34661 }
34662
34663 differ = (old->changed_from_tgt != real_packet->changed_from_tgt);
34664 if (differ) {
34665 different++;
34666 BV_SET(fields, 27);
34667 }
34668
34669 differ = (old->battlegroup != real_packet->battlegroup);
34670 if (differ) {
34671 different++;
34672 BV_SET(fields, 28);
34673 }
34674
34675 differ = (old->has_orders != real_packet->has_orders);
34676 if (differ) {
34677 different++;
34678 }
34679 if (packet->has_orders) {
34680 BV_SET(fields, 29);
34681 }
34682
34683 differ = (old->orders_length != real_packet->orders_length);
34684 if (differ) {
34685 different++;
34686 BV_SET(fields, 30);
34687 }
34688
34689 differ = (old->orders_index != real_packet->orders_index);
34690 if (differ) {
34691 different++;
34692 BV_SET(fields, 31);
34693 }
34694
34695 differ = (old->orders_repeat != real_packet->orders_repeat);
34696 if (differ) {
34697 different++;
34698 }
34699 if (packet->orders_repeat) {
34700 BV_SET(fields, 32);
34701 }
34702
34703 differ = (old->orders_vigilant != real_packet->orders_vigilant);
34704 if (differ) {
34705 different++;
34706 }
34707 if (packet->orders_vigilant) {
34708 BV_SET(fields, 33);
34709 }
34710
34711 differ = (old->orders_length != real_packet->orders_length);
34712 if (!differ) {
34713 int i;
34714
34715 for (i = 0; i < real_packet->orders_length; i++) {
34716 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
34717 if (differ) {
34718 break;
34719 }
34720 }
34721 }
34722 if (differ) {
34723 different++;
34724 BV_SET(fields, 34);
34725 }
34726
34727 differ = (old->action_decision_want != real_packet->action_decision_want);
34728 if (differ) {
34729 different++;
34730 BV_SET(fields, 35);
34731 }
34732
34733 differ = (old->action_decision_tile != real_packet->action_decision_tile);
34734 if (differ) {
34735 different++;
34736 BV_SET(fields, 36);
34737 }
34738
34739 if (different == 0) {
34740 log_packet_detailed(" no change -> discard");
34742 }
34743
34744#ifdef FREECIV_JSON_CONNECTION
34745 field_addr.name = "fields";
34746#endif /* FREECIV_JSON_CONNECTION */
34747 e = 0;
34748 e |= DIO_BV_PUT(&dout, &field_addr, fields);
34749 if (e) {
34750 log_packet_detailed("fields bitvector error detected");
34751 }
34752#ifdef FREECIV_JSON_CONNECTION
34753 field_addr.name = "id";
34754#endif /* FREECIV_JSON_CONNECTION */
34755 e = 0;
34756 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
34757 if (e) {
34758 log_packet_detailed("'id' field error detected");
34759 }
34760
34761 if (BV_ISSET(fields, 0)) {
34762 log_packet_detailed(" field 'owner' has changed");
34763#ifdef FREECIV_JSON_CONNECTION
34764 field_addr.name = "owner";
34765#endif /* FREECIV_JSON_CONNECTION */
34766 e = 0;
34767 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
34768 if (e) {
34769 log_packet_detailed("'owner' field error detected");
34770 }
34771 }
34772 if (BV_ISSET(fields, 1)) {
34773 log_packet_detailed(" field 'nationality' has changed");
34774#ifdef FREECIV_JSON_CONNECTION
34775 field_addr.name = "nationality";
34776#endif /* FREECIV_JSON_CONNECTION */
34777 e = 0;
34778 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nationality);
34779 if (e) {
34780 log_packet_detailed("'nationality' field error detected");
34781 }
34782 }
34783 if (BV_ISSET(fields, 2)) {
34784 log_packet_detailed(" field 'tile' has changed");
34785#ifdef FREECIV_JSON_CONNECTION
34786 field_addr.name = "tile";
34787#endif /* FREECIV_JSON_CONNECTION */
34788 e = 0;
34789 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
34790 if (e) {
34791 log_packet_detailed("'tile' field error detected");
34792 }
34793 }
34794 if (BV_ISSET(fields, 3)) {
34795 log_packet_detailed(" field 'facing' has changed");
34796#ifdef FREECIV_JSON_CONNECTION
34797 field_addr.name = "facing";
34798#endif /* FREECIV_JSON_CONNECTION */
34799 e = 0;
34800 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
34801 if (e) {
34802 log_packet_detailed("'facing' field error detected");
34803 }
34804 }
34805 if (BV_ISSET(fields, 4)) {
34806 log_packet_detailed(" field 'homecity' has changed");
34807#ifdef FREECIV_JSON_CONNECTION
34808 field_addr.name = "homecity";
34809#endif /* FREECIV_JSON_CONNECTION */
34810 e = 0;
34811 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
34812 if (e) {
34813 log_packet_detailed("'homecity' field error detected");
34814 }
34815 }
34816 if (BV_ISSET(fields, 5)) {
34817 log_packet_detailed(" field 'upkeep' has changed");
34818#ifdef FREECIV_JSON_CONNECTION
34819 field_addr.name = "upkeep";
34820#endif /* FREECIV_JSON_CONNECTION */
34821 e = 0;
34822 {
34823 int i;
34824
34825#ifdef FREECIV_JSON_CONNECTION
34826 /* Create the array. */
34827 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
34828
34829 /* Enter the array. */
34830 field_addr.sub_location = plocation_elem_new(0);
34831#endif /* FREECIV_JSON_CONNECTION */
34832
34833 for (i = 0; i < O_LAST; i++) {
34834#ifdef FREECIV_JSON_CONNECTION
34835 /* Next array element. */
34836 field_addr.sub_location->number = i;
34837#endif /* FREECIV_JSON_CONNECTION */
34838
34839 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
34840 }
34841
34842#ifdef FREECIV_JSON_CONNECTION
34843 /* Exit array. */
34844 FC_FREE(field_addr.sub_location);
34845#endif /* FREECIV_JSON_CONNECTION */
34846 }
34847 if (e) {
34848 log_packet_detailed("'upkeep' field error detected");
34849 }
34850 }
34851 if (BV_ISSET(fields, 6)) {
34852 log_packet_detailed(" field 'veteran' has changed");
34853#ifdef FREECIV_JSON_CONNECTION
34854 field_addr.name = "veteran";
34855#endif /* FREECIV_JSON_CONNECTION */
34856 e = 0;
34857 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
34858 if (e) {
34859 log_packet_detailed("'veteran' field error detected");
34860 }
34861 }
34862 if (BV_ISSET(fields, 7)) {
34863 log_packet_detailed(" field 'ssa_controller' has changed");
34864#ifdef FREECIV_JSON_CONNECTION
34865 field_addr.name = "ssa_controller";
34866#endif /* FREECIV_JSON_CONNECTION */
34867 e = 0;
34868 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
34869 if (e) {
34870 log_packet_detailed("'ssa_controller' field error detected");
34871 }
34872 }
34873 /* field 8 is folded into the header */
34874 /* field 9 is folded into the header */
34875 /* field 10 is folded into the header */
34876 /* field 11 is folded into the header */
34877 /* field 12 is folded into the header */
34878 if (BV_ISSET(fields, 13)) {
34879 log_packet_detailed(" field 'birth_turn' has changed");
34880#ifdef FREECIV_JSON_CONNECTION
34881 field_addr.name = "birth_turn";
34882#endif /* FREECIV_JSON_CONNECTION */
34883 e = 0;
34884 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
34885 if (e) {
34886 log_packet_detailed("'birth_turn' field error detected");
34887 }
34888 }
34889 if (BV_ISSET(fields, 14)) {
34890 log_packet_detailed(" field 'current_form_turn' has changed");
34891#ifdef FREECIV_JSON_CONNECTION
34892 field_addr.name = "current_form_turn";
34893#endif /* FREECIV_JSON_CONNECTION */
34894 e = 0;
34895 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
34896 if (e) {
34897 log_packet_detailed("'current_form_turn' field error detected");
34898 }
34899 }
34900 if (BV_ISSET(fields, 15)) {
34901 log_packet_detailed(" field 'type' has changed");
34902#ifdef FREECIV_JSON_CONNECTION
34903 field_addr.name = "type";
34904#endif /* FREECIV_JSON_CONNECTION */
34905 e = 0;
34906 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
34907 if (e) {
34908 log_packet_detailed("'type' field error detected");
34909 }
34910 }
34911 if (BV_ISSET(fields, 16)) {
34912 log_packet_detailed(" field 'transported_by' has changed");
34913#ifdef FREECIV_JSON_CONNECTION
34914 field_addr.name = "transported_by";
34915#endif /* FREECIV_JSON_CONNECTION */
34916 e = 0;
34917 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
34918 if (e) {
34919 log_packet_detailed("'transported_by' field error detected");
34920 }
34921 }
34922 if (BV_ISSET(fields, 17)) {
34923 log_packet_detailed(" field 'carrying' has changed");
34924#ifdef FREECIV_JSON_CONNECTION
34925 field_addr.name = "carrying";
34926#endif /* FREECIV_JSON_CONNECTION */
34927 e = 0;
34928 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
34929 if (e) {
34930 log_packet_detailed("'carrying' field error detected");
34931 }
34932 }
34933 if (BV_ISSET(fields, 18)) {
34934 log_packet_detailed(" field 'movesleft' has changed");
34935#ifdef FREECIV_JSON_CONNECTION
34936 field_addr.name = "movesleft";
34937#endif /* FREECIV_JSON_CONNECTION */
34938 e = 0;
34939 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
34940 if (e) {
34941 log_packet_detailed("'movesleft' field error detected");
34942 }
34943 }
34944 if (BV_ISSET(fields, 19)) {
34945 log_packet_detailed(" field 'hp' has changed");
34946#ifdef FREECIV_JSON_CONNECTION
34947 field_addr.name = "hp";
34948#endif /* FREECIV_JSON_CONNECTION */
34949 e = 0;
34950 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
34951 if (e) {
34952 log_packet_detailed("'hp' field error detected");
34953 }
34954 }
34955 if (BV_ISSET(fields, 20)) {
34956 log_packet_detailed(" field 'fuel' has changed");
34957#ifdef FREECIV_JSON_CONNECTION
34958 field_addr.name = "fuel";
34959#endif /* FREECIV_JSON_CONNECTION */
34960 e = 0;
34961 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
34962 if (e) {
34963 log_packet_detailed("'fuel' field error detected");
34964 }
34965 }
34966 if (BV_ISSET(fields, 21)) {
34967 log_packet_detailed(" field 'activity_count' has changed");
34968#ifdef FREECIV_JSON_CONNECTION
34969 field_addr.name = "activity_count";
34970#endif /* FREECIV_JSON_CONNECTION */
34971 e = 0;
34972 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
34973 if (e) {
34974 log_packet_detailed("'activity_count' field error detected");
34975 }
34976 }
34977 if (BV_ISSET(fields, 22)) {
34978 log_packet_detailed(" field 'changed_from_count' has changed");
34979#ifdef FREECIV_JSON_CONNECTION
34980 field_addr.name = "changed_from_count";
34981#endif /* FREECIV_JSON_CONNECTION */
34982 e = 0;
34983 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
34984 if (e) {
34985 log_packet_detailed("'changed_from_count' field error detected");
34986 }
34987 }
34988 if (BV_ISSET(fields, 23)) {
34989 log_packet_detailed(" field 'goto_tile' has changed");
34990#ifdef FREECIV_JSON_CONNECTION
34991 field_addr.name = "goto_tile";
34992#endif /* FREECIV_JSON_CONNECTION */
34993 e = 0;
34994 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
34995 if (e) {
34996 log_packet_detailed("'goto_tile' field error detected");
34997 }
34998 }
34999 if (BV_ISSET(fields, 24)) {
35000 log_packet_detailed(" field 'activity' has changed");
35001#ifdef FREECIV_JSON_CONNECTION
35002 field_addr.name = "activity";
35003#endif /* FREECIV_JSON_CONNECTION */
35004 e = 0;
35005 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
35006 if (e) {
35007 log_packet_detailed("'activity' field error detected");
35008 }
35009 }
35010 if (BV_ISSET(fields, 25)) {
35011 log_packet_detailed(" field 'activity_tgt' has changed");
35012#ifdef FREECIV_JSON_CONNECTION
35013 field_addr.name = "activity_tgt";
35014#endif /* FREECIV_JSON_CONNECTION */
35015 e = 0;
35016 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
35017 if (e) {
35018 log_packet_detailed("'activity_tgt' field error detected");
35019 }
35020 }
35021 if (BV_ISSET(fields, 26)) {
35022 log_packet_detailed(" field 'changed_from' has changed");
35023#ifdef FREECIV_JSON_CONNECTION
35024 field_addr.name = "changed_from";
35025#endif /* FREECIV_JSON_CONNECTION */
35026 e = 0;
35027 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
35028 if (e) {
35029 log_packet_detailed("'changed_from' field error detected");
35030 }
35031 }
35032 if (BV_ISSET(fields, 27)) {
35033 log_packet_detailed(" field 'changed_from_tgt' has changed");
35034#ifdef FREECIV_JSON_CONNECTION
35035 field_addr.name = "changed_from_tgt";
35036#endif /* FREECIV_JSON_CONNECTION */
35037 e = 0;
35038 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
35039 if (e) {
35040 log_packet_detailed("'changed_from_tgt' field error detected");
35041 }
35042 }
35043 if (BV_ISSET(fields, 28)) {
35044 log_packet_detailed(" field 'battlegroup' has changed");
35045#ifdef FREECIV_JSON_CONNECTION
35046 field_addr.name = "battlegroup";
35047#endif /* FREECIV_JSON_CONNECTION */
35048 e = 0;
35049 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
35050 if (e) {
35051 log_packet_detailed("'battlegroup' field error detected");
35052 }
35053 }
35054 /* field 29 is folded into the header */
35055 if (BV_ISSET(fields, 30)) {
35056 log_packet_detailed(" field 'orders_length' has changed");
35057#ifdef FREECIV_JSON_CONNECTION
35058 field_addr.name = "orders_length";
35059#endif /* FREECIV_JSON_CONNECTION */
35060 e = 0;
35061 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
35062 if (e) {
35063 log_packet_detailed("'orders_length' field error detected");
35064 }
35065 }
35066 if (BV_ISSET(fields, 31)) {
35067 log_packet_detailed(" field 'orders_index' has changed");
35068#ifdef FREECIV_JSON_CONNECTION
35069 field_addr.name = "orders_index";
35070#endif /* FREECIV_JSON_CONNECTION */
35071 e = 0;
35072 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
35073 if (e) {
35074 log_packet_detailed("'orders_index' field error detected");
35075 }
35076 }
35077 /* field 32 is folded into the header */
35078 /* field 33 is folded into the header */
35079 if (BV_ISSET(fields, 34)) {
35080 log_packet_detailed(" field 'orders' has changed");
35081#ifdef FREECIV_JSON_CONNECTION
35082 field_addr.name = "orders";
35083#endif /* FREECIV_JSON_CONNECTION */
35084 e = 0;
35085 {
35086 int i;
35087
35088#ifdef FREECIV_JSON_CONNECTION
35089 /* Create the array. */
35090 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
35091
35092 /* Enter the array. */
35093 field_addr.sub_location = plocation_elem_new(0);
35094#endif /* FREECIV_JSON_CONNECTION */
35095
35096 for (i = 0; i < real_packet->orders_length; i++) {
35097#ifdef FREECIV_JSON_CONNECTION
35098 /* Next array element. */
35099 field_addr.sub_location->number = i;
35100#endif /* FREECIV_JSON_CONNECTION */
35101
35102 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
35103 }
35104
35105#ifdef FREECIV_JSON_CONNECTION
35106 /* Exit array. */
35107 FC_FREE(field_addr.sub_location);
35108#endif /* FREECIV_JSON_CONNECTION */
35109 }
35110 if (e) {
35111 log_packet_detailed("'orders' field error detected");
35112 }
35113 }
35114 if (BV_ISSET(fields, 35)) {
35115 log_packet_detailed(" field 'action_decision_want' has changed");
35116#ifdef FREECIV_JSON_CONNECTION
35117 field_addr.name = "action_decision_want";
35118#endif /* FREECIV_JSON_CONNECTION */
35119 e = 0;
35120 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
35121 if (e) {
35122 log_packet_detailed("'action_decision_want' field error detected");
35123 }
35124 }
35125 if (BV_ISSET(fields, 36)) {
35126 log_packet_detailed(" field 'action_decision_tile' has changed");
35127#ifdef FREECIV_JSON_CONNECTION
35128 field_addr.name = "action_decision_tile";
35129#endif /* FREECIV_JSON_CONNECTION */
35130 e = 0;
35131 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
35132 if (e) {
35133 log_packet_detailed("'action_decision_tile' field error detected");
35134 }
35135 }
35136
35137 *old = *real_packet;
35138
35139 hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
35140 if (NULL != *hash) {
35142 }
35143#endif /* FREECIV_DELTA_PROTOCOL */
35144#ifndef FREECIV_DELTA_PROTOCOL
35145#ifdef FREECIV_JSON_CONNECTION
35146 field_addr.name = "id";
35147#endif /* FREECIV_JSON_CONNECTION */
35148 e = 0;
35149 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
35150 if (e) {
35151 log_packet_detailed("'id' field error detected");
35152 }
35153#ifdef FREECIV_JSON_CONNECTION
35154 field_addr.name = "owner";
35155#endif /* FREECIV_JSON_CONNECTION */
35156 e = 0;
35157 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
35158 if (e) {
35159 log_packet_detailed("'owner' field error detected");
35160 }
35161#ifdef FREECIV_JSON_CONNECTION
35162 field_addr.name = "nationality";
35163#endif /* FREECIV_JSON_CONNECTION */
35164 e = 0;
35165 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nationality);
35166 if (e) {
35167 log_packet_detailed("'nationality' field error detected");
35168 }
35169#ifdef FREECIV_JSON_CONNECTION
35170 field_addr.name = "tile";
35171#endif /* FREECIV_JSON_CONNECTION */
35172 e = 0;
35173 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
35174 if (e) {
35175 log_packet_detailed("'tile' field error detected");
35176 }
35177#ifdef FREECIV_JSON_CONNECTION
35178 field_addr.name = "facing";
35179#endif /* FREECIV_JSON_CONNECTION */
35180 e = 0;
35181 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
35182 if (e) {
35183 log_packet_detailed("'facing' field error detected");
35184 }
35185#ifdef FREECIV_JSON_CONNECTION
35186 field_addr.name = "homecity";
35187#endif /* FREECIV_JSON_CONNECTION */
35188 e = 0;
35189 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
35190 if (e) {
35191 log_packet_detailed("'homecity' field error detected");
35192 }
35193#ifdef FREECIV_JSON_CONNECTION
35194 field_addr.name = "upkeep";
35195#endif /* FREECIV_JSON_CONNECTION */
35196 e = 0;
35197 {
35198 int i;
35199
35200#ifdef FREECIV_JSON_CONNECTION
35201 /* Create the array. */
35202 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
35203
35204 /* Enter the array. */
35205 field_addr.sub_location = plocation_elem_new(0);
35206#endif /* FREECIV_JSON_CONNECTION */
35207
35208 for (i = 0; i < O_LAST; i++) {
35209#ifdef FREECIV_JSON_CONNECTION
35210 /* Next array element. */
35211 field_addr.sub_location->number = i;
35212#endif /* FREECIV_JSON_CONNECTION */
35213
35214 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
35215 }
35216
35217#ifdef FREECIV_JSON_CONNECTION
35218 /* Exit array. */
35219 FC_FREE(field_addr.sub_location);
35220#endif /* FREECIV_JSON_CONNECTION */
35221 }
35222 if (e) {
35223 log_packet_detailed("'upkeep' field error detected");
35224 }
35225#ifdef FREECIV_JSON_CONNECTION
35226 field_addr.name = "veteran";
35227#endif /* FREECIV_JSON_CONNECTION */
35228 e = 0;
35229 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
35230 if (e) {
35231 log_packet_detailed("'veteran' field error detected");
35232 }
35233#ifdef FREECIV_JSON_CONNECTION
35234 field_addr.name = "ssa_controller";
35235#endif /* FREECIV_JSON_CONNECTION */
35236 e = 0;
35237 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ssa_controller);
35238 if (e) {
35239 log_packet_detailed("'ssa_controller' field error detected");
35240 }
35241#ifdef FREECIV_JSON_CONNECTION
35242 field_addr.name = "paradropped";
35243#endif /* FREECIV_JSON_CONNECTION */
35244 e = 0;
35245 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
35246 if (e) {
35247 log_packet_detailed("'paradropped' field error detected");
35248 }
35249#ifdef FREECIV_JSON_CONNECTION
35250 field_addr.name = "occupied";
35251#endif /* FREECIV_JSON_CONNECTION */
35252 e = 0;
35253 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
35254 if (e) {
35255 log_packet_detailed("'occupied' field error detected");
35256 }
35257#ifdef FREECIV_JSON_CONNECTION
35258 field_addr.name = "transported";
35259#endif /* FREECIV_JSON_CONNECTION */
35260 e = 0;
35261 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
35262 if (e) {
35263 log_packet_detailed("'transported' field error detected");
35264 }
35265#ifdef FREECIV_JSON_CONNECTION
35266 field_addr.name = "done_moving";
35267#endif /* FREECIV_JSON_CONNECTION */
35268 e = 0;
35269 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
35270 if (e) {
35271 log_packet_detailed("'done_moving' field error detected");
35272 }
35273#ifdef FREECIV_JSON_CONNECTION
35274 field_addr.name = "stay";
35275#endif /* FREECIV_JSON_CONNECTION */
35276 e = 0;
35277 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
35278 if (e) {
35279 log_packet_detailed("'stay' field error detected");
35280 }
35281#ifdef FREECIV_JSON_CONNECTION
35282 field_addr.name = "birth_turn";
35283#endif /* FREECIV_JSON_CONNECTION */
35284 e = 0;
35285 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->birth_turn);
35286 if (e) {
35287 log_packet_detailed("'birth_turn' field error detected");
35288 }
35289#ifdef FREECIV_JSON_CONNECTION
35290 field_addr.name = "current_form_turn";
35291#endif /* FREECIV_JSON_CONNECTION */
35292 e = 0;
35293 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->current_form_turn);
35294 if (e) {
35295 log_packet_detailed("'current_form_turn' field error detected");
35296 }
35297#ifdef FREECIV_JSON_CONNECTION
35298 field_addr.name = "type";
35299#endif /* FREECIV_JSON_CONNECTION */
35300 e = 0;
35301 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
35302 if (e) {
35303 log_packet_detailed("'type' field error detected");
35304 }
35305#ifdef FREECIV_JSON_CONNECTION
35306 field_addr.name = "transported_by";
35307#endif /* FREECIV_JSON_CONNECTION */
35308 e = 0;
35309 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
35310 if (e) {
35311 log_packet_detailed("'transported_by' field error detected");
35312 }
35313#ifdef FREECIV_JSON_CONNECTION
35314 field_addr.name = "carrying";
35315#endif /* FREECIV_JSON_CONNECTION */
35316 e = 0;
35317 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->carrying);
35318 if (e) {
35319 log_packet_detailed("'carrying' field error detected");
35320 }
35321#ifdef FREECIV_JSON_CONNECTION
35322 field_addr.name = "movesleft";
35323#endif /* FREECIV_JSON_CONNECTION */
35324 e = 0;
35325 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->movesleft);
35326 if (e) {
35327 log_packet_detailed("'movesleft' field error detected");
35328 }
35329#ifdef FREECIV_JSON_CONNECTION
35330 field_addr.name = "hp";
35331#endif /* FREECIV_JSON_CONNECTION */
35332 e = 0;
35333 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
35334 if (e) {
35335 log_packet_detailed("'hp' field error detected");
35336 }
35337#ifdef FREECIV_JSON_CONNECTION
35338 field_addr.name = "fuel";
35339#endif /* FREECIV_JSON_CONNECTION */
35340 e = 0;
35341 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
35342 if (e) {
35343 log_packet_detailed("'fuel' field error detected");
35344 }
35345#ifdef FREECIV_JSON_CONNECTION
35346 field_addr.name = "activity_count";
35347#endif /* FREECIV_JSON_CONNECTION */
35348 e = 0;
35349 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
35350 if (e) {
35351 log_packet_detailed("'activity_count' field error detected");
35352 }
35353#ifdef FREECIV_JSON_CONNECTION
35354 field_addr.name = "changed_from_count";
35355#endif /* FREECIV_JSON_CONNECTION */
35356 e = 0;
35357 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->changed_from_count);
35358 if (e) {
35359 log_packet_detailed("'changed_from_count' field error detected");
35360 }
35361#ifdef FREECIV_JSON_CONNECTION
35362 field_addr.name = "goto_tile";
35363#endif /* FREECIV_JSON_CONNECTION */
35364 e = 0;
35365 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->goto_tile);
35366 if (e) {
35367 log_packet_detailed("'goto_tile' field error detected");
35368 }
35369#ifdef FREECIV_JSON_CONNECTION
35370 field_addr.name = "activity";
35371#endif /* FREECIV_JSON_CONNECTION */
35372 e = 0;
35373 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
35374 if (e) {
35375 log_packet_detailed("'activity' field error detected");
35376 }
35377#ifdef FREECIV_JSON_CONNECTION
35378 field_addr.name = "activity_tgt";
35379#endif /* FREECIV_JSON_CONNECTION */
35380 e = 0;
35381 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
35382 if (e) {
35383 log_packet_detailed("'activity_tgt' field error detected");
35384 }
35385#ifdef FREECIV_JSON_CONNECTION
35386 field_addr.name = "changed_from";
35387#endif /* FREECIV_JSON_CONNECTION */
35388 e = 0;
35389 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->changed_from);
35390 if (e) {
35391 log_packet_detailed("'changed_from' field error detected");
35392 }
35393#ifdef FREECIV_JSON_CONNECTION
35394 field_addr.name = "changed_from_tgt";
35395#endif /* FREECIV_JSON_CONNECTION */
35396 e = 0;
35397 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->changed_from_tgt);
35398 if (e) {
35399 log_packet_detailed("'changed_from_tgt' field error detected");
35400 }
35401#ifdef FREECIV_JSON_CONNECTION
35402 field_addr.name = "battlegroup";
35403#endif /* FREECIV_JSON_CONNECTION */
35404 e = 0;
35405 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->battlegroup);
35406 if (e) {
35407 log_packet_detailed("'battlegroup' field error detected");
35408 }
35409#ifdef FREECIV_JSON_CONNECTION
35410 field_addr.name = "has_orders";
35411#endif /* FREECIV_JSON_CONNECTION */
35412 e = 0;
35413 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_orders);
35414 if (e) {
35415 log_packet_detailed("'has_orders' field error detected");
35416 }
35417#ifdef FREECIV_JSON_CONNECTION
35418 field_addr.name = "orders_length";
35419#endif /* FREECIV_JSON_CONNECTION */
35420 e = 0;
35421 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_length);
35422 if (e) {
35423 log_packet_detailed("'orders_length' field error detected");
35424 }
35425#ifdef FREECIV_JSON_CONNECTION
35426 field_addr.name = "orders_index";
35427#endif /* FREECIV_JSON_CONNECTION */
35428 e = 0;
35429 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->orders_index);
35430 if (e) {
35431 log_packet_detailed("'orders_index' field error detected");
35432 }
35433#ifdef FREECIV_JSON_CONNECTION
35434 field_addr.name = "orders_repeat";
35435#endif /* FREECIV_JSON_CONNECTION */
35436 e = 0;
35437 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_repeat);
35438 if (e) {
35439 log_packet_detailed("'orders_repeat' field error detected");
35440 }
35441#ifdef FREECIV_JSON_CONNECTION
35442 field_addr.name = "orders_vigilant";
35443#endif /* FREECIV_JSON_CONNECTION */
35444 e = 0;
35445 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->orders_vigilant);
35446 if (e) {
35447 log_packet_detailed("'orders_vigilant' field error detected");
35448 }
35449#ifdef FREECIV_JSON_CONNECTION
35450 field_addr.name = "orders";
35451#endif /* FREECIV_JSON_CONNECTION */
35452 e = 0;
35453 {
35454 int i;
35455
35456#ifdef FREECIV_JSON_CONNECTION
35457 /* Create the array. */
35458 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->orders_length);
35459
35460 /* Enter the array. */
35461 field_addr.sub_location = plocation_elem_new(0);
35462#endif /* FREECIV_JSON_CONNECTION */
35463
35464 for (i = 0; i < real_packet->orders_length; i++) {
35465#ifdef FREECIV_JSON_CONNECTION
35466 /* Next array element. */
35467 field_addr.sub_location->number = i;
35468#endif /* FREECIV_JSON_CONNECTION */
35469
35470 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
35471 }
35472
35473#ifdef FREECIV_JSON_CONNECTION
35474 /* Exit array. */
35475 FC_FREE(field_addr.sub_location);
35476#endif /* FREECIV_JSON_CONNECTION */
35477 }
35478 if (e) {
35479 log_packet_detailed("'orders' field error detected");
35480 }
35481#ifdef FREECIV_JSON_CONNECTION
35482 field_addr.name = "action_decision_want";
35483#endif /* FREECIV_JSON_CONNECTION */
35484 e = 0;
35485 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_decision_want);
35486 if (e) {
35487 log_packet_detailed("'action_decision_want' field error detected");
35488 }
35489#ifdef FREECIV_JSON_CONNECTION
35490 field_addr.name = "action_decision_tile";
35491#endif /* FREECIV_JSON_CONNECTION */
35492 e = 0;
35493 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->action_decision_tile);
35494 if (e) {
35495 log_packet_detailed("'action_decision_tile' field error detected");
35496 }
35497
35498#endif
35500}
35501
35502int send_packet_unit_info(struct connection *pc, const struct packet_unit_info *packet)
35503{
35504 if (!pc->used) {
35505 log_error("WARNING: trying to send data to the closed connection %s",
35507 return -1;
35508 }
35509 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_INFO].packet != NULL, -1,
35510 "Handler for PACKET_UNIT_INFO not installed");
35511 return pc->phs.handlers->send[PACKET_UNIT_INFO].packet(pc, packet);
35512}
35513
35514void lsend_packet_unit_info(struct conn_list *dest, const struct packet_unit_info *packet)
35515{
35516 conn_list_iterate(dest, pconn) {
35519}
35520
35521#ifdef FREECIV_DELTA_PROTOCOL
35523{
35524 const struct packet_unit_short_info *key = (const struct packet_unit_short_info *) vkey;
35525 genhash_val_t result = 0;
35526
35527 result += key->id;
35528
35529 result &= 0xFFFFFFFF;
35530 return result;
35531}
35532
35533static bool cmp_packet_unit_short_info_100(const void *vkey1, const void *vkey2)
35534{
35535 const struct packet_unit_short_info *old = (const struct packet_unit_short_info *) vkey1;
35536 const struct packet_unit_short_info *real_packet = (const struct packet_unit_short_info *) vkey2;
35537 bool differ;
35538
35539 differ = (old->id != real_packet->id);
35540
35541 return !differ;
35542}
35544#endif /* FREECIV_DELTA_PROTOCOL */
35545
35547{
35548#ifdef FREECIV_DELTA_PROTOCOL
35550 struct packet_unit_short_info *old;
35551 struct genhash **hash = pc->phs.received + PACKET_UNIT_SHORT_INFO;
35552#endif /* FREECIV_DELTA_PROTOCOL */
35554#ifdef FREECIV_JSON_CONNECTION
35555 struct plocation field_addr;
35556 {
35560 }
35561#endif /* FREECIV_JSON_CONNECTION */
35562
35563#ifdef FREECIV_DELTA_PROTOCOL
35564#ifdef FREECIV_JSON_CONNECTION
35565 field_addr.name = "fields";
35566#endif /* FREECIV_JSON_CONNECTION */
35567 DIO_BV_GET(&din, &field_addr, fields);
35568#ifdef FREECIV_JSON_CONNECTION
35569 field_addr.name = "id";
35570#endif /* FREECIV_JSON_CONNECTION */
35571 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
35573 }
35574
35575#else /* FREECIV_DELTA_PROTOCOL */
35576#ifdef FREECIV_JSON_CONNECTION
35577 field_addr.name = "id";
35578#endif /* FREECIV_JSON_CONNECTION */
35579 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
35581 }
35582#ifdef FREECIV_JSON_CONNECTION
35583 field_addr.name = "owner";
35584#endif /* FREECIV_JSON_CONNECTION */
35585 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
35587 }
35588#ifdef FREECIV_JSON_CONNECTION
35589 field_addr.name = "tile";
35590#endif /* FREECIV_JSON_CONNECTION */
35591 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
35593 }
35594#ifdef FREECIV_JSON_CONNECTION
35595 field_addr.name = "facing";
35596#endif /* FREECIV_JSON_CONNECTION */
35597 {
35598 int readin;
35599
35600 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
35602 }
35603 real_packet->facing = readin;
35604 }
35605#ifdef FREECIV_JSON_CONNECTION
35606 field_addr.name = "type";
35607#endif /* FREECIV_JSON_CONNECTION */
35608 {
35609 int readin;
35610
35611 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
35613 }
35614 real_packet->type = readin;
35615 }
35616#ifdef FREECIV_JSON_CONNECTION
35617 field_addr.name = "veteran";
35618#endif /* FREECIV_JSON_CONNECTION */
35619 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
35621 }
35622#ifdef FREECIV_JSON_CONNECTION
35623 field_addr.name = "occupied";
35624#endif /* FREECIV_JSON_CONNECTION */
35625 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->occupied)) {
35627 }
35628#ifdef FREECIV_JSON_CONNECTION
35629 field_addr.name = "transported";
35630#endif /* FREECIV_JSON_CONNECTION */
35631 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->transported)) {
35632 RECEIVE_PACKET_FIELD_ERROR(transported);
35633 }
35634#ifdef FREECIV_JSON_CONNECTION
35635 field_addr.name = "hp";
35636#endif /* FREECIV_JSON_CONNECTION */
35637 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
35639 }
35640#ifdef FREECIV_JSON_CONNECTION
35641 field_addr.name = "activity";
35642#endif /* FREECIV_JSON_CONNECTION */
35643 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
35645 }
35646#ifdef FREECIV_JSON_CONNECTION
35647 field_addr.name = "activity_tgt";
35648#endif /* FREECIV_JSON_CONNECTION */
35649 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
35650 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
35651 }
35652#ifdef FREECIV_JSON_CONNECTION
35653 field_addr.name = "transported_by";
35654#endif /* FREECIV_JSON_CONNECTION */
35655 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
35656 RECEIVE_PACKET_FIELD_ERROR(transported_by);
35657 }
35658#ifdef FREECIV_JSON_CONNECTION
35659 field_addr.name = "packet_use";
35660#endif /* FREECIV_JSON_CONNECTION */
35661 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
35662 RECEIVE_PACKET_FIELD_ERROR(packet_use);
35663 }
35664#ifdef FREECIV_JSON_CONNECTION
35665 field_addr.name = "info_city_id";
35666#endif /* FREECIV_JSON_CONNECTION */
35667 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
35668 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
35669 }
35670#endif
35671 log_packet_detailed("packet_unit_short_info_100: got info about (%d)",
35672 real_packet->id);
35673
35674#ifdef FREECIV_DELTA_PROTOCOL
35675 if (NULL == *hash) {
35677 NULL, NULL, NULL, free);
35678 }
35679
35680 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
35681 *real_packet = *old;
35682 } else {
35683 int id;
35684
35685 id = real_packet->id;
35686
35687 log_packet_detailed(" no old info");
35688 memset(real_packet, 0, sizeof(*real_packet));
35689
35690 real_packet->id = id;
35691 }
35692
35693 if (BV_ISSET(fields, 0)) {
35694 log_packet_detailed(" got field 'owner'");
35695#ifdef FREECIV_JSON_CONNECTION
35696 field_addr.name = "owner";
35697#endif /* FREECIV_JSON_CONNECTION */
35698 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
35700 }
35701 }
35702 if (BV_ISSET(fields, 1)) {
35703 log_packet_detailed(" got field 'tile'");
35704#ifdef FREECIV_JSON_CONNECTION
35705 field_addr.name = "tile";
35706#endif /* FREECIV_JSON_CONNECTION */
35707 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
35709 }
35710 }
35711 if (BV_ISSET(fields, 2)) {
35712 log_packet_detailed(" got field 'facing'");
35713#ifdef FREECIV_JSON_CONNECTION
35714 field_addr.name = "facing";
35715#endif /* FREECIV_JSON_CONNECTION */
35716 {
35717 int readin;
35718
35719 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
35721 }
35722 real_packet->facing = readin;
35723 }
35724 }
35725 if (BV_ISSET(fields, 3)) {
35726 log_packet_detailed(" got field 'type'");
35727#ifdef FREECIV_JSON_CONNECTION
35728 field_addr.name = "type";
35729#endif /* FREECIV_JSON_CONNECTION */
35730 {
35731 int readin;
35732
35733 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
35735 }
35736 real_packet->type = readin;
35737 }
35738 }
35739 if (BV_ISSET(fields, 4)) {
35740 log_packet_detailed(" got field 'veteran'");
35741#ifdef FREECIV_JSON_CONNECTION
35742 field_addr.name = "veteran";
35743#endif /* FREECIV_JSON_CONNECTION */
35744 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
35746 }
35747 }
35748 real_packet->occupied = BV_ISSET(fields, 5);
35749 real_packet->transported = BV_ISSET(fields, 6);
35750 if (BV_ISSET(fields, 7)) {
35751 log_packet_detailed(" got field 'hp'");
35752#ifdef FREECIV_JSON_CONNECTION
35753 field_addr.name = "hp";
35754#endif /* FREECIV_JSON_CONNECTION */
35755 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
35757 }
35758 }
35759 if (BV_ISSET(fields, 8)) {
35760 log_packet_detailed(" got field 'activity'");
35761#ifdef FREECIV_JSON_CONNECTION
35762 field_addr.name = "activity";
35763#endif /* FREECIV_JSON_CONNECTION */
35764 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->activity)) {
35766 }
35767 }
35768 if (BV_ISSET(fields, 9)) {
35769 log_packet_detailed(" got field 'activity_tgt'");
35770#ifdef FREECIV_JSON_CONNECTION
35771 field_addr.name = "activity_tgt";
35772#endif /* FREECIV_JSON_CONNECTION */
35773 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->activity_tgt)) {
35774 RECEIVE_PACKET_FIELD_ERROR(activity_tgt);
35775 }
35776 }
35777 if (BV_ISSET(fields, 10)) {
35778 log_packet_detailed(" got field 'transported_by'");
35779#ifdef FREECIV_JSON_CONNECTION
35780 field_addr.name = "transported_by";
35781#endif /* FREECIV_JSON_CONNECTION */
35782 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
35783 RECEIVE_PACKET_FIELD_ERROR(transported_by);
35784 }
35785 }
35786 if (BV_ISSET(fields, 11)) {
35787 log_packet_detailed(" got field 'packet_use'");
35788#ifdef FREECIV_JSON_CONNECTION
35789 field_addr.name = "packet_use";
35790#endif /* FREECIV_JSON_CONNECTION */
35791 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->packet_use)) {
35792 RECEIVE_PACKET_FIELD_ERROR(packet_use);
35793 }
35794 }
35795 if (BV_ISSET(fields, 12)) {
35796 log_packet_detailed(" got field 'info_city_id'");
35797#ifdef FREECIV_JSON_CONNECTION
35798 field_addr.name = "info_city_id";
35799#endif /* FREECIV_JSON_CONNECTION */
35800 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->info_city_id)) {
35801 RECEIVE_PACKET_FIELD_ERROR(info_city_id);
35802 }
35803 }
35804
35805 if (NULL == old) {
35806 old = fc_malloc(sizeof(*old));
35807 *old = *real_packet;
35808 genhash_insert(*hash, old, old);
35809 } else {
35810 *old = *real_packet;
35811 }
35812
35813 hash = pc->phs.received + PACKET_UNIT_INFO;
35814 if (NULL != *hash) {
35816 }
35817
35818#endif /* FREECIV_DELTA_PROTOCOL */
35820}
35821
35822static int send_packet_unit_short_info_100(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
35823{
35824 const struct packet_unit_short_info *real_packet = packet;
35825 int e;
35826#ifdef FREECIV_DELTA_PROTOCOL
35828 struct packet_unit_short_info *old;
35829 bool differ;
35830 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SHORT_INFO;
35831 int different = force_to_send;
35832#endif /* FREECIV_DELTA_PROTOCOL */
35834#ifdef FREECIV_JSON_CONNECTION
35835 struct plocation field_addr;
35836 {
35840 }
35841#endif /* FREECIV_JSON_CONNECTION */
35842
35843 log_packet_detailed("packet_unit_short_info_100: sending info about (%d)",
35844 real_packet->id);
35845
35846#ifdef FREECIV_DELTA_PROTOCOL
35847 if (NULL == *hash) {
35849 NULL, NULL, NULL, free);
35850 }
35851 BV_CLR_ALL(fields);
35852
35853 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
35854 old = fc_malloc(sizeof(*old));
35855 *old = *real_packet;
35856 genhash_insert(*hash, old, old);
35857 memset(old, 0, sizeof(*old));
35858 different = 1; /* Force to send. */
35859 }
35860 differ = (old->owner != real_packet->owner);
35861 if (differ) {
35862 different++;
35863 BV_SET(fields, 0);
35864 }
35865
35866 differ = (old->tile != real_packet->tile);
35867 if (differ) {
35868 different++;
35869 BV_SET(fields, 1);
35870 }
35871
35872 differ = (old->facing != real_packet->facing);
35873 if (differ) {
35874 different++;
35875 BV_SET(fields, 2);
35876 }
35877
35878 differ = (old->type != real_packet->type);
35879 if (differ) {
35880 different++;
35881 BV_SET(fields, 3);
35882 }
35883
35884 differ = (old->veteran != real_packet->veteran);
35885 if (differ) {
35886 different++;
35887 BV_SET(fields, 4);
35888 }
35889
35890 differ = (old->occupied != real_packet->occupied);
35891 if (differ) {
35892 different++;
35893 }
35894 if (packet->occupied) {
35895 BV_SET(fields, 5);
35896 }
35897
35898 differ = (old->transported != real_packet->transported);
35899 if (differ) {
35900 different++;
35901 }
35902 if (packet->transported) {
35903 BV_SET(fields, 6);
35904 }
35905
35906 differ = (old->hp != real_packet->hp);
35907 if (differ) {
35908 different++;
35909 BV_SET(fields, 7);
35910 }
35911
35912 differ = (old->activity != real_packet->activity);
35913 if (differ) {
35914 different++;
35915 BV_SET(fields, 8);
35916 }
35917
35918 differ = (old->activity_tgt != real_packet->activity_tgt);
35919 if (differ) {
35920 different++;
35921 BV_SET(fields, 9);
35922 }
35923
35924 differ = (old->transported_by != real_packet->transported_by);
35925 if (differ) {
35926 different++;
35927 BV_SET(fields, 10);
35928 }
35929
35930 differ = (old->packet_use != real_packet->packet_use);
35931 if (differ) {
35932 different++;
35933 BV_SET(fields, 11);
35934 }
35935
35936 differ = (old->info_city_id != real_packet->info_city_id);
35937 if (differ) {
35938 different++;
35939 BV_SET(fields, 12);
35940 }
35941
35942 if (different == 0) {
35943 log_packet_detailed(" no change -> discard");
35945 }
35946
35947#ifdef FREECIV_JSON_CONNECTION
35948 field_addr.name = "fields";
35949#endif /* FREECIV_JSON_CONNECTION */
35950 e = 0;
35951 e |= DIO_BV_PUT(&dout, &field_addr, fields);
35952 if (e) {
35953 log_packet_detailed("fields bitvector error detected");
35954 }
35955#ifdef FREECIV_JSON_CONNECTION
35956 field_addr.name = "id";
35957#endif /* FREECIV_JSON_CONNECTION */
35958 e = 0;
35959 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
35960 if (e) {
35961 log_packet_detailed("'id' field error detected");
35962 }
35963
35964 if (BV_ISSET(fields, 0)) {
35965 log_packet_detailed(" field 'owner' has changed");
35966#ifdef FREECIV_JSON_CONNECTION
35967 field_addr.name = "owner";
35968#endif /* FREECIV_JSON_CONNECTION */
35969 e = 0;
35970 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
35971 if (e) {
35972 log_packet_detailed("'owner' field error detected");
35973 }
35974 }
35975 if (BV_ISSET(fields, 1)) {
35976 log_packet_detailed(" field 'tile' has changed");
35977#ifdef FREECIV_JSON_CONNECTION
35978 field_addr.name = "tile";
35979#endif /* FREECIV_JSON_CONNECTION */
35980 e = 0;
35981 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
35982 if (e) {
35983 log_packet_detailed("'tile' field error detected");
35984 }
35985 }
35986 if (BV_ISSET(fields, 2)) {
35987 log_packet_detailed(" field 'facing' has changed");
35988#ifdef FREECIV_JSON_CONNECTION
35989 field_addr.name = "facing";
35990#endif /* FREECIV_JSON_CONNECTION */
35991 e = 0;
35992 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
35993 if (e) {
35994 log_packet_detailed("'facing' field error detected");
35995 }
35996 }
35997 if (BV_ISSET(fields, 3)) {
35998 log_packet_detailed(" field 'type' has changed");
35999#ifdef FREECIV_JSON_CONNECTION
36000 field_addr.name = "type";
36001#endif /* FREECIV_JSON_CONNECTION */
36002 e = 0;
36003 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
36004 if (e) {
36005 log_packet_detailed("'type' field error detected");
36006 }
36007 }
36008 if (BV_ISSET(fields, 4)) {
36009 log_packet_detailed(" field 'veteran' has changed");
36010#ifdef FREECIV_JSON_CONNECTION
36011 field_addr.name = "veteran";
36012#endif /* FREECIV_JSON_CONNECTION */
36013 e = 0;
36014 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
36015 if (e) {
36016 log_packet_detailed("'veteran' field error detected");
36017 }
36018 }
36019 /* field 5 is folded into the header */
36020 /* field 6 is folded into the header */
36021 if (BV_ISSET(fields, 7)) {
36022 log_packet_detailed(" field 'hp' has changed");
36023#ifdef FREECIV_JSON_CONNECTION
36024 field_addr.name = "hp";
36025#endif /* FREECIV_JSON_CONNECTION */
36026 e = 0;
36027 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
36028 if (e) {
36029 log_packet_detailed("'hp' field error detected");
36030 }
36031 }
36032 if (BV_ISSET(fields, 8)) {
36033 log_packet_detailed(" field 'activity' has changed");
36034#ifdef FREECIV_JSON_CONNECTION
36035 field_addr.name = "activity";
36036#endif /* FREECIV_JSON_CONNECTION */
36037 e = 0;
36038 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
36039 if (e) {
36040 log_packet_detailed("'activity' field error detected");
36041 }
36042 }
36043 if (BV_ISSET(fields, 9)) {
36044 log_packet_detailed(" field 'activity_tgt' has changed");
36045#ifdef FREECIV_JSON_CONNECTION
36046 field_addr.name = "activity_tgt";
36047#endif /* FREECIV_JSON_CONNECTION */
36048 e = 0;
36049 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
36050 if (e) {
36051 log_packet_detailed("'activity_tgt' field error detected");
36052 }
36053 }
36054 if (BV_ISSET(fields, 10)) {
36055 log_packet_detailed(" field 'transported_by' has changed");
36056#ifdef FREECIV_JSON_CONNECTION
36057 field_addr.name = "transported_by";
36058#endif /* FREECIV_JSON_CONNECTION */
36059 e = 0;
36060 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
36061 if (e) {
36062 log_packet_detailed("'transported_by' field error detected");
36063 }
36064 }
36065 if (BV_ISSET(fields, 11)) {
36066 log_packet_detailed(" field 'packet_use' has changed");
36067#ifdef FREECIV_JSON_CONNECTION
36068 field_addr.name = "packet_use";
36069#endif /* FREECIV_JSON_CONNECTION */
36070 e = 0;
36071 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
36072 if (e) {
36073 log_packet_detailed("'packet_use' field error detected");
36074 }
36075 }
36076 if (BV_ISSET(fields, 12)) {
36077 log_packet_detailed(" field 'info_city_id' has changed");
36078#ifdef FREECIV_JSON_CONNECTION
36079 field_addr.name = "info_city_id";
36080#endif /* FREECIV_JSON_CONNECTION */
36081 e = 0;
36082 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
36083 if (e) {
36084 log_packet_detailed("'info_city_id' field error detected");
36085 }
36086 }
36087
36088 *old = *real_packet;
36089
36090 hash = pc->phs.sent + PACKET_UNIT_INFO;
36091 if (NULL != *hash) {
36093 }
36094#endif /* FREECIV_DELTA_PROTOCOL */
36095#ifndef FREECIV_DELTA_PROTOCOL
36096#ifdef FREECIV_JSON_CONNECTION
36097 field_addr.name = "id";
36098#endif /* FREECIV_JSON_CONNECTION */
36099 e = 0;
36100 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
36101 if (e) {
36102 log_packet_detailed("'id' field error detected");
36103 }
36104#ifdef FREECIV_JSON_CONNECTION
36105 field_addr.name = "owner";
36106#endif /* FREECIV_JSON_CONNECTION */
36107 e = 0;
36108 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
36109 if (e) {
36110 log_packet_detailed("'owner' field error detected");
36111 }
36112#ifdef FREECIV_JSON_CONNECTION
36113 field_addr.name = "tile";
36114#endif /* FREECIV_JSON_CONNECTION */
36115 e = 0;
36116 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
36117 if (e) {
36118 log_packet_detailed("'tile' field error detected");
36119 }
36120#ifdef FREECIV_JSON_CONNECTION
36121 field_addr.name = "facing";
36122#endif /* FREECIV_JSON_CONNECTION */
36123 e = 0;
36124 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->facing);
36125 if (e) {
36126 log_packet_detailed("'facing' field error detected");
36127 }
36128#ifdef FREECIV_JSON_CONNECTION
36129 field_addr.name = "type";
36130#endif /* FREECIV_JSON_CONNECTION */
36131 e = 0;
36132 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
36133 if (e) {
36134 log_packet_detailed("'type' field error detected");
36135 }
36136#ifdef FREECIV_JSON_CONNECTION
36137 field_addr.name = "veteran";
36138#endif /* FREECIV_JSON_CONNECTION */
36139 e = 0;
36140 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
36141 if (e) {
36142 log_packet_detailed("'veteran' field error detected");
36143 }
36144#ifdef FREECIV_JSON_CONNECTION
36145 field_addr.name = "occupied";
36146#endif /* FREECIV_JSON_CONNECTION */
36147 e = 0;
36148 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->occupied);
36149 if (e) {
36150 log_packet_detailed("'occupied' field error detected");
36151 }
36152#ifdef FREECIV_JSON_CONNECTION
36153 field_addr.name = "transported";
36154#endif /* FREECIV_JSON_CONNECTION */
36155 e = 0;
36156 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->transported);
36157 if (e) {
36158 log_packet_detailed("'transported' field error detected");
36159 }
36160#ifdef FREECIV_JSON_CONNECTION
36161 field_addr.name = "hp";
36162#endif /* FREECIV_JSON_CONNECTION */
36163 e = 0;
36164 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
36165 if (e) {
36166 log_packet_detailed("'hp' field error detected");
36167 }
36168#ifdef FREECIV_JSON_CONNECTION
36169 field_addr.name = "activity";
36170#endif /* FREECIV_JSON_CONNECTION */
36171 e = 0;
36172 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
36173 if (e) {
36174 log_packet_detailed("'activity' field error detected");
36175 }
36176#ifdef FREECIV_JSON_CONNECTION
36177 field_addr.name = "activity_tgt";
36178#endif /* FREECIV_JSON_CONNECTION */
36179 e = 0;
36180 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_tgt);
36181 if (e) {
36182 log_packet_detailed("'activity_tgt' field error detected");
36183 }
36184#ifdef FREECIV_JSON_CONNECTION
36185 field_addr.name = "transported_by";
36186#endif /* FREECIV_JSON_CONNECTION */
36187 e = 0;
36188 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
36189 if (e) {
36190 log_packet_detailed("'transported_by' field error detected");
36191 }
36192#ifdef FREECIV_JSON_CONNECTION
36193 field_addr.name = "packet_use";
36194#endif /* FREECIV_JSON_CONNECTION */
36195 e = 0;
36196 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->packet_use);
36197 if (e) {
36198 log_packet_detailed("'packet_use' field error detected");
36199 }
36200#ifdef FREECIV_JSON_CONNECTION
36201 field_addr.name = "info_city_id";
36202#endif /* FREECIV_JSON_CONNECTION */
36203 e = 0;
36204 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->info_city_id);
36205 if (e) {
36206 log_packet_detailed("'info_city_id' field error detected");
36207 }
36208
36209#endif
36211}
36212
36213int send_packet_unit_short_info(struct connection *pc, const struct packet_unit_short_info *packet, bool force_to_send)
36214{
36215 if (!pc->used) {
36216 log_error("WARNING: trying to send data to the closed connection %s",
36218 return -1;
36219 }
36220 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send != NULL, -1,
36221 "Handler for PACKET_UNIT_SHORT_INFO not installed");
36222 return pc->phs.handlers->send[PACKET_UNIT_SHORT_INFO].force_to_send(pc, packet, force_to_send);
36223}
36224
36225void lsend_packet_unit_short_info(struct conn_list *dest, const struct packet_unit_short_info *packet, bool force_to_send)
36226{
36227 conn_list_iterate(dest, pconn) {
36228 send_packet_unit_short_info(pconn, packet, force_to_send);
36230}
36231
36232#ifdef FREECIV_DELTA_PROTOCOL
36233#define hash_packet_unit_combat_info_100 hash_const
36234
36235#define cmp_packet_unit_combat_info_100 cmp_const
36236
36238#endif /* FREECIV_DELTA_PROTOCOL */
36239
36241{
36242#ifdef FREECIV_DELTA_PROTOCOL
36244 struct packet_unit_combat_info *old;
36245 struct genhash **hash = pc->phs.received + PACKET_UNIT_COMBAT_INFO;
36246#endif /* FREECIV_DELTA_PROTOCOL */
36248#ifdef FREECIV_JSON_CONNECTION
36249 struct plocation field_addr;
36250 {
36254 }
36255#endif /* FREECIV_JSON_CONNECTION */
36256
36257#ifdef FREECIV_DELTA_PROTOCOL
36258#ifdef FREECIV_JSON_CONNECTION
36259 field_addr.name = "fields";
36260#endif /* FREECIV_JSON_CONNECTION */
36261 DIO_BV_GET(&din, &field_addr, fields);
36262
36263#else /* FREECIV_DELTA_PROTOCOL */
36264#ifdef FREECIV_JSON_CONNECTION
36265 field_addr.name = "attacker_unit_id";
36266#endif /* FREECIV_JSON_CONNECTION */
36267 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
36268 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
36269 }
36270#ifdef FREECIV_JSON_CONNECTION
36271 field_addr.name = "defender_unit_id";
36272#endif /* FREECIV_JSON_CONNECTION */
36273 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
36274 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
36275 }
36276#ifdef FREECIV_JSON_CONNECTION
36277 field_addr.name = "attacker_hp";
36278#endif /* FREECIV_JSON_CONNECTION */
36279 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
36280 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
36281 }
36282#ifdef FREECIV_JSON_CONNECTION
36283 field_addr.name = "defender_hp";
36284#endif /* FREECIV_JSON_CONNECTION */
36285 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
36286 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
36287 }
36288#ifdef FREECIV_JSON_CONNECTION
36289 field_addr.name = "make_att_veteran";
36290#endif /* FREECIV_JSON_CONNECTION */
36291 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_att_veteran)) {
36292 RECEIVE_PACKET_FIELD_ERROR(make_att_veteran);
36293 }
36294#ifdef FREECIV_JSON_CONNECTION
36295 field_addr.name = "make_def_veteran";
36296#endif /* FREECIV_JSON_CONNECTION */
36297 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->make_def_veteran)) {
36298 RECEIVE_PACKET_FIELD_ERROR(make_def_veteran);
36299 }
36300#endif
36301 log_packet_detailed("packet_unit_combat_info_100: got info about ()");
36302
36303#ifdef FREECIV_DELTA_PROTOCOL
36304 if (NULL == *hash) {
36306 NULL, NULL, NULL, free);
36307 }
36308
36309 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36310 *real_packet = *old;
36311 } else {
36312 log_packet_detailed(" no old info");
36313 memset(real_packet, 0, sizeof(*real_packet));
36314 }
36315
36316 if (BV_ISSET(fields, 0)) {
36317 log_packet_detailed(" got field 'attacker_unit_id'");
36318#ifdef FREECIV_JSON_CONNECTION
36319 field_addr.name = "attacker_unit_id";
36320#endif /* FREECIV_JSON_CONNECTION */
36321 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->attacker_unit_id)) {
36322 RECEIVE_PACKET_FIELD_ERROR(attacker_unit_id);
36323 }
36324 }
36325 if (BV_ISSET(fields, 1)) {
36326 log_packet_detailed(" got field 'defender_unit_id'");
36327#ifdef FREECIV_JSON_CONNECTION
36328 field_addr.name = "defender_unit_id";
36329#endif /* FREECIV_JSON_CONNECTION */
36330 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->defender_unit_id)) {
36331 RECEIVE_PACKET_FIELD_ERROR(defender_unit_id);
36332 }
36333 }
36334 if (BV_ISSET(fields, 2)) {
36335 log_packet_detailed(" got field 'attacker_hp'");
36336#ifdef FREECIV_JSON_CONNECTION
36337 field_addr.name = "attacker_hp";
36338#endif /* FREECIV_JSON_CONNECTION */
36339 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attacker_hp)) {
36340 RECEIVE_PACKET_FIELD_ERROR(attacker_hp);
36341 }
36342 }
36343 if (BV_ISSET(fields, 3)) {
36344 log_packet_detailed(" got field 'defender_hp'");
36345#ifdef FREECIV_JSON_CONNECTION
36346 field_addr.name = "defender_hp";
36347#endif /* FREECIV_JSON_CONNECTION */
36348 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defender_hp)) {
36349 RECEIVE_PACKET_FIELD_ERROR(defender_hp);
36350 }
36351 }
36352 real_packet->make_att_veteran = BV_ISSET(fields, 4);
36353 real_packet->make_def_veteran = BV_ISSET(fields, 5);
36354
36355 if (NULL == old) {
36356 old = fc_malloc(sizeof(*old));
36357 *old = *real_packet;
36358 genhash_insert(*hash, old, old);
36359 } else {
36360 *old = *real_packet;
36361 }
36362
36363#endif /* FREECIV_DELTA_PROTOCOL */
36365}
36366
36368{
36369 const struct packet_unit_combat_info *real_packet = packet;
36370 int e;
36371#ifdef FREECIV_DELTA_PROTOCOL
36373 struct packet_unit_combat_info *old;
36374 bool differ;
36375 struct genhash **hash = pc->phs.sent + PACKET_UNIT_COMBAT_INFO;
36376#endif /* FREECIV_DELTA_PROTOCOL */
36378#ifdef FREECIV_JSON_CONNECTION
36379 struct plocation field_addr;
36380 {
36384 }
36385#endif /* FREECIV_JSON_CONNECTION */
36386
36387 log_packet_detailed("packet_unit_combat_info_100: sending info about ()");
36388
36389#ifdef FREECIV_DELTA_PROTOCOL
36390 if (NULL == *hash) {
36392 NULL, NULL, NULL, free);
36393 }
36394 BV_CLR_ALL(fields);
36395
36396 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36397 old = fc_malloc(sizeof(*old));
36398 *old = *real_packet;
36399 genhash_insert(*hash, old, old);
36400 memset(old, 0, sizeof(*old));
36401 }
36402 differ = (old->attacker_unit_id != real_packet->attacker_unit_id);
36403 if (differ) {
36404 BV_SET(fields, 0);
36405 }
36406
36407 differ = (old->defender_unit_id != real_packet->defender_unit_id);
36408 if (differ) {
36409 BV_SET(fields, 1);
36410 }
36411
36412 differ = (old->attacker_hp != real_packet->attacker_hp);
36413 if (differ) {
36414 BV_SET(fields, 2);
36415 }
36416
36417 differ = (old->defender_hp != real_packet->defender_hp);
36418 if (differ) {
36419 BV_SET(fields, 3);
36420 }
36421
36422 if (packet->make_att_veteran) {
36423 BV_SET(fields, 4);
36424 }
36425
36426 if (packet->make_def_veteran) {
36427 BV_SET(fields, 5);
36428 }
36429
36430
36431#ifdef FREECIV_JSON_CONNECTION
36432 field_addr.name = "fields";
36433#endif /* FREECIV_JSON_CONNECTION */
36434 e = 0;
36435 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36436 if (e) {
36437 log_packet_detailed("fields bitvector error detected");
36438 }
36439
36440 if (BV_ISSET(fields, 0)) {
36441 log_packet_detailed(" field 'attacker_unit_id' has changed");
36442#ifdef FREECIV_JSON_CONNECTION
36443 field_addr.name = "attacker_unit_id";
36444#endif /* FREECIV_JSON_CONNECTION */
36445 e = 0;
36446 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
36447 if (e) {
36448 log_packet_detailed("'attacker_unit_id' field error detected");
36449 }
36450 }
36451 if (BV_ISSET(fields, 1)) {
36452 log_packet_detailed(" field 'defender_unit_id' has changed");
36453#ifdef FREECIV_JSON_CONNECTION
36454 field_addr.name = "defender_unit_id";
36455#endif /* FREECIV_JSON_CONNECTION */
36456 e = 0;
36457 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
36458 if (e) {
36459 log_packet_detailed("'defender_unit_id' field error detected");
36460 }
36461 }
36462 if (BV_ISSET(fields, 2)) {
36463 log_packet_detailed(" field 'attacker_hp' has changed");
36464#ifdef FREECIV_JSON_CONNECTION
36465 field_addr.name = "attacker_hp";
36466#endif /* FREECIV_JSON_CONNECTION */
36467 e = 0;
36468 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
36469 if (e) {
36470 log_packet_detailed("'attacker_hp' field error detected");
36471 }
36472 }
36473 if (BV_ISSET(fields, 3)) {
36474 log_packet_detailed(" field 'defender_hp' has changed");
36475#ifdef FREECIV_JSON_CONNECTION
36476 field_addr.name = "defender_hp";
36477#endif /* FREECIV_JSON_CONNECTION */
36478 e = 0;
36479 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
36480 if (e) {
36481 log_packet_detailed("'defender_hp' field error detected");
36482 }
36483 }
36484 /* field 4 is folded into the header */
36485 /* field 5 is folded into the header */
36486
36487 *old = *real_packet;
36488#endif /* FREECIV_DELTA_PROTOCOL */
36489#ifndef FREECIV_DELTA_PROTOCOL
36490#ifdef FREECIV_JSON_CONNECTION
36491 field_addr.name = "attacker_unit_id";
36492#endif /* FREECIV_JSON_CONNECTION */
36493 e = 0;
36494 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->attacker_unit_id);
36495 if (e) {
36496 log_packet_detailed("'attacker_unit_id' field error detected");
36497 }
36498#ifdef FREECIV_JSON_CONNECTION
36499 field_addr.name = "defender_unit_id";
36500#endif /* FREECIV_JSON_CONNECTION */
36501 e = 0;
36502 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->defender_unit_id);
36503 if (e) {
36504 log_packet_detailed("'defender_unit_id' field error detected");
36505 }
36506#ifdef FREECIV_JSON_CONNECTION
36507 field_addr.name = "attacker_hp";
36508#endif /* FREECIV_JSON_CONNECTION */
36509 e = 0;
36510 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attacker_hp);
36511 if (e) {
36512 log_packet_detailed("'attacker_hp' field error detected");
36513 }
36514#ifdef FREECIV_JSON_CONNECTION
36515 field_addr.name = "defender_hp";
36516#endif /* FREECIV_JSON_CONNECTION */
36517 e = 0;
36518 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defender_hp);
36519 if (e) {
36520 log_packet_detailed("'defender_hp' field error detected");
36521 }
36522#ifdef FREECIV_JSON_CONNECTION
36523 field_addr.name = "make_att_veteran";
36524#endif /* FREECIV_JSON_CONNECTION */
36525 e = 0;
36526 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_att_veteran);
36527 if (e) {
36528 log_packet_detailed("'make_att_veteran' field error detected");
36529 }
36530#ifdef FREECIV_JSON_CONNECTION
36531 field_addr.name = "make_def_veteran";
36532#endif /* FREECIV_JSON_CONNECTION */
36533 e = 0;
36534 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->make_def_veteran);
36535 if (e) {
36536 log_packet_detailed("'make_def_veteran' field error detected");
36537 }
36538
36539#endif
36541}
36542
36544{
36545 if (!pc->used) {
36546 log_error("WARNING: trying to send data to the closed connection %s",
36548 return -1;
36549 }
36550 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet != NULL, -1,
36551 "Handler for PACKET_UNIT_COMBAT_INFO not installed");
36552 return pc->phs.handlers->send[PACKET_UNIT_COMBAT_INFO].packet(pc, packet);
36553}
36554
36556{
36557 conn_list_iterate(dest, pconn) {
36560}
36561
36562#ifdef FREECIV_DELTA_PROTOCOL
36563#define hash_packet_unit_sscs_set_100 hash_const
36564
36565#define cmp_packet_unit_sscs_set_100 cmp_const
36566
36568#endif /* FREECIV_DELTA_PROTOCOL */
36569
36571{
36572#ifdef FREECIV_DELTA_PROTOCOL
36574 struct packet_unit_sscs_set *old;
36575 struct genhash **hash = pc->phs.received + PACKET_UNIT_SSCS_SET;
36576#endif /* FREECIV_DELTA_PROTOCOL */
36578#ifdef FREECIV_JSON_CONNECTION
36579 struct plocation field_addr;
36580 {
36584 }
36585#endif /* FREECIV_JSON_CONNECTION */
36586
36587#ifdef FREECIV_DELTA_PROTOCOL
36588#ifdef FREECIV_JSON_CONNECTION
36589 field_addr.name = "fields";
36590#endif /* FREECIV_JSON_CONNECTION */
36591 DIO_BV_GET(&din, &field_addr, fields);
36592
36593#else /* FREECIV_DELTA_PROTOCOL */
36594#ifdef FREECIV_JSON_CONNECTION
36595 field_addr.name = "unit_id";
36596#endif /* FREECIV_JSON_CONNECTION */
36597 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36599 }
36600#ifdef FREECIV_JSON_CONNECTION
36601 field_addr.name = "type";
36602#endif /* FREECIV_JSON_CONNECTION */
36603 {
36604 int readin;
36605
36606 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36608 }
36609 real_packet->type = readin;
36610 }
36611#ifdef FREECIV_JSON_CONNECTION
36612 field_addr.name = "value";
36613#endif /* FREECIV_JSON_CONNECTION */
36614 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
36616 }
36617#endif
36618 log_packet_detailed("packet_unit_sscs_set_100: got info about ()");
36619
36620#ifdef FREECIV_DELTA_PROTOCOL
36621 if (NULL == *hash) {
36623 NULL, NULL, NULL, free);
36624 }
36625
36626 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36627 *real_packet = *old;
36628 } else {
36629 log_packet_detailed(" no old info");
36630 memset(real_packet, 0, sizeof(*real_packet));
36631 }
36632
36633 if (BV_ISSET(fields, 0)) {
36634 log_packet_detailed(" got field 'unit_id'");
36635#ifdef FREECIV_JSON_CONNECTION
36636 field_addr.name = "unit_id";
36637#endif /* FREECIV_JSON_CONNECTION */
36638 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36640 }
36641 }
36642 if (BV_ISSET(fields, 1)) {
36643 log_packet_detailed(" got field 'type'");
36644#ifdef FREECIV_JSON_CONNECTION
36645 field_addr.name = "type";
36646#endif /* FREECIV_JSON_CONNECTION */
36647 {
36648 int readin;
36649
36650 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
36652 }
36653 real_packet->type = readin;
36654 }
36655 }
36656 if (BV_ISSET(fields, 2)) {
36657 log_packet_detailed(" got field 'value'");
36658#ifdef FREECIV_JSON_CONNECTION
36659 field_addr.name = "value";
36660#endif /* FREECIV_JSON_CONNECTION */
36661 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->value)) {
36663 }
36664 }
36665
36666 if (NULL == old) {
36667 old = fc_malloc(sizeof(*old));
36668 *old = *real_packet;
36669 genhash_insert(*hash, old, old);
36670 } else {
36671 *old = *real_packet;
36672 }
36673
36674#endif /* FREECIV_DELTA_PROTOCOL */
36676}
36677
36678static int send_packet_unit_sscs_set_100(struct connection *pc, const struct packet_unit_sscs_set *packet)
36679{
36680 const struct packet_unit_sscs_set *real_packet = packet;
36681 int e;
36682#ifdef FREECIV_DELTA_PROTOCOL
36684 struct packet_unit_sscs_set *old;
36685 bool differ;
36686 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SSCS_SET;
36687#endif /* FREECIV_DELTA_PROTOCOL */
36689#ifdef FREECIV_JSON_CONNECTION
36690 struct plocation field_addr;
36691 {
36695 }
36696#endif /* FREECIV_JSON_CONNECTION */
36697
36698 log_packet_detailed("packet_unit_sscs_set_100: sending info about ()");
36699
36700#ifdef FREECIV_DELTA_PROTOCOL
36701 if (NULL == *hash) {
36703 NULL, NULL, NULL, free);
36704 }
36705 BV_CLR_ALL(fields);
36706
36707 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
36708 old = fc_malloc(sizeof(*old));
36709 *old = *real_packet;
36710 genhash_insert(*hash, old, old);
36711 memset(old, 0, sizeof(*old));
36712 }
36713 differ = (old->unit_id != real_packet->unit_id);
36714 if (differ) {
36715 BV_SET(fields, 0);
36716 }
36717
36718 differ = (old->type != real_packet->type);
36719 if (differ) {
36720 BV_SET(fields, 1);
36721 }
36722
36723 differ = (old->value != real_packet->value);
36724 if (differ) {
36725 BV_SET(fields, 2);
36726 }
36727
36728
36729#ifdef FREECIV_JSON_CONNECTION
36730 field_addr.name = "fields";
36731#endif /* FREECIV_JSON_CONNECTION */
36732 e = 0;
36733 e |= DIO_BV_PUT(&dout, &field_addr, fields);
36734 if (e) {
36735 log_packet_detailed("fields bitvector error detected");
36736 }
36737
36738 if (BV_ISSET(fields, 0)) {
36739 log_packet_detailed(" field 'unit_id' has changed");
36740#ifdef FREECIV_JSON_CONNECTION
36741 field_addr.name = "unit_id";
36742#endif /* FREECIV_JSON_CONNECTION */
36743 e = 0;
36744 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36745 if (e) {
36746 log_packet_detailed("'unit_id' field error detected");
36747 }
36748 }
36749 if (BV_ISSET(fields, 1)) {
36750 log_packet_detailed(" field 'type' has changed");
36751#ifdef FREECIV_JSON_CONNECTION
36752 field_addr.name = "type";
36753#endif /* FREECIV_JSON_CONNECTION */
36754 e = 0;
36755 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
36756 if (e) {
36757 log_packet_detailed("'type' field error detected");
36758 }
36759 }
36760 if (BV_ISSET(fields, 2)) {
36761 log_packet_detailed(" field 'value' has changed");
36762#ifdef FREECIV_JSON_CONNECTION
36763 field_addr.name = "value";
36764#endif /* FREECIV_JSON_CONNECTION */
36765 e = 0;
36766 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
36767 if (e) {
36768 log_packet_detailed("'value' field error detected");
36769 }
36770 }
36771
36772 *old = *real_packet;
36773#endif /* FREECIV_DELTA_PROTOCOL */
36774#ifndef FREECIV_DELTA_PROTOCOL
36775#ifdef FREECIV_JSON_CONNECTION
36776 field_addr.name = "unit_id";
36777#endif /* FREECIV_JSON_CONNECTION */
36778 e = 0;
36779 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
36780 if (e) {
36781 log_packet_detailed("'unit_id' field error detected");
36782 }
36783#ifdef FREECIV_JSON_CONNECTION
36784 field_addr.name = "type";
36785#endif /* FREECIV_JSON_CONNECTION */
36786 e = 0;
36787 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
36788 if (e) {
36789 log_packet_detailed("'type' field error detected");
36790 }
36791#ifdef FREECIV_JSON_CONNECTION
36792 field_addr.name = "value";
36793#endif /* FREECIV_JSON_CONNECTION */
36794 e = 0;
36795 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->value);
36796 if (e) {
36797 log_packet_detailed("'value' field error detected");
36798 }
36799
36800#endif
36802}
36803
36805{
36806 if (!pc->used) {
36807 log_error("WARNING: trying to send data to the closed connection %s",
36809 return -1;
36810 }
36811 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet != NULL, -1,
36812 "Handler for PACKET_UNIT_SSCS_SET not installed");
36813 return pc->phs.handlers->send[PACKET_UNIT_SSCS_SET].packet(pc, packet);
36814}
36815
36816int dsend_packet_unit_sscs_set(struct connection *pc, int unit_id, enum unit_ss_data_type type, int value)
36817{
36818 struct packet_unit_sscs_set packet, *real_packet = &packet;
36819
36821 real_packet->type = type;
36822 real_packet->value = value;
36823
36825}
36826
36827#ifdef FREECIV_DELTA_PROTOCOL
36828#define hash_packet_unit_orders_100 hash_const
36829
36830#define cmp_packet_unit_orders_100 cmp_const
36831
36833#endif /* FREECIV_DELTA_PROTOCOL */
36834
36836{
36837#ifdef FREECIV_DELTA_PROTOCOL
36839 struct packet_unit_orders *old;
36840 struct genhash **hash = pc->phs.received + PACKET_UNIT_ORDERS;
36841#endif /* FREECIV_DELTA_PROTOCOL */
36843#ifdef FREECIV_JSON_CONNECTION
36844 struct plocation field_addr;
36845 {
36849 }
36850#endif /* FREECIV_JSON_CONNECTION */
36851
36852#ifdef FREECIV_DELTA_PROTOCOL
36853#ifdef FREECIV_JSON_CONNECTION
36854 field_addr.name = "fields";
36855#endif /* FREECIV_JSON_CONNECTION */
36856 DIO_BV_GET(&din, &field_addr, fields);
36857
36858#else /* FREECIV_DELTA_PROTOCOL */
36859#ifdef FREECIV_JSON_CONNECTION
36860 field_addr.name = "unit_id";
36861#endif /* FREECIV_JSON_CONNECTION */
36862 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36864 }
36865#ifdef FREECIV_JSON_CONNECTION
36866 field_addr.name = "src_tile";
36867#endif /* FREECIV_JSON_CONNECTION */
36868 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
36870 }
36871#ifdef FREECIV_JSON_CONNECTION
36872 field_addr.name = "length";
36873#endif /* FREECIV_JSON_CONNECTION */
36874 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
36876 }
36877#ifdef FREECIV_JSON_CONNECTION
36878 field_addr.name = "repeat";
36879#endif /* FREECIV_JSON_CONNECTION */
36880 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->repeat)) {
36882 }
36883#ifdef FREECIV_JSON_CONNECTION
36884 field_addr.name = "vigilant";
36885#endif /* FREECIV_JSON_CONNECTION */
36886 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->vigilant)) {
36888 }
36889#ifdef FREECIV_JSON_CONNECTION
36890 field_addr.name = "orders";
36891#endif /* FREECIV_JSON_CONNECTION */
36892 if (real_packet->length > MAX_LEN_ROUTE) {
36893 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
36894 }
36895 {
36896 int i;
36897
36898#ifdef FREECIV_JSON_CONNECTION
36899 /* Enter array. */
36900 field_addr.sub_location = plocation_elem_new(0);
36901#endif /* FREECIV_JSON_CONNECTION */
36902
36903 for (i = 0; i < real_packet->length; i++) {
36904#ifdef FREECIV_JSON_CONNECTION
36905 field_addr.sub_location->number = i;
36906#endif /* FREECIV_JSON_CONNECTION */
36907
36908 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
36910 }
36911 }
36912
36913#ifdef FREECIV_JSON_CONNECTION
36914 /* Exit array. */
36915 FC_FREE(field_addr.sub_location);
36916#endif /* FREECIV_JSON_CONNECTION */
36917 }
36918#ifdef FREECIV_JSON_CONNECTION
36919 field_addr.name = "dest_tile";
36920#endif /* FREECIV_JSON_CONNECTION */
36921 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
36922 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
36923 }
36924#endif
36925 log_packet_detailed("packet_unit_orders_100: got info about ()");
36926
36927#ifdef FREECIV_DELTA_PROTOCOL
36928 if (NULL == *hash) {
36930 NULL, NULL, NULL, free);
36931 }
36932
36933 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
36934 *real_packet = *old;
36935 } else {
36936 log_packet_detailed(" no old info");
36937 memset(real_packet, 0, sizeof(*real_packet));
36938 }
36939
36940 if (BV_ISSET(fields, 0)) {
36941 log_packet_detailed(" got field 'unit_id'");
36942#ifdef FREECIV_JSON_CONNECTION
36943 field_addr.name = "unit_id";
36944#endif /* FREECIV_JSON_CONNECTION */
36945 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
36947 }
36948 }
36949 if (BV_ISSET(fields, 1)) {
36950 log_packet_detailed(" got field 'src_tile'");
36951#ifdef FREECIV_JSON_CONNECTION
36952 field_addr.name = "src_tile";
36953#endif /* FREECIV_JSON_CONNECTION */
36954 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->src_tile)) {
36956 }
36957 }
36958 if (BV_ISSET(fields, 2)) {
36959 log_packet_detailed(" got field 'length'");
36960#ifdef FREECIV_JSON_CONNECTION
36961 field_addr.name = "length";
36962#endif /* FREECIV_JSON_CONNECTION */
36963 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->length)) {
36965 }
36966 }
36967 real_packet->repeat = BV_ISSET(fields, 3);
36968 real_packet->vigilant = BV_ISSET(fields, 4);
36969 if (BV_ISSET(fields, 5)) {
36970 log_packet_detailed(" got field 'orders'");
36971#ifdef FREECIV_JSON_CONNECTION
36972 field_addr.name = "orders";
36973#endif /* FREECIV_JSON_CONNECTION */
36974 if (real_packet->length > MAX_LEN_ROUTE) {
36975 RECEIVE_PACKET_FIELD_ERROR(orders, ": truncation array");
36976 }
36977 {
36978 int i;
36979
36980#ifdef FREECIV_JSON_CONNECTION
36981 /* Enter array. */
36982 field_addr.sub_location = plocation_elem_new(0);
36983#endif /* FREECIV_JSON_CONNECTION */
36984
36985 for (i = 0; i < real_packet->length; i++) {
36986#ifdef FREECIV_JSON_CONNECTION
36987 field_addr.sub_location->number = i;
36988#endif /* FREECIV_JSON_CONNECTION */
36989
36990 if (!DIO_GET(unit_order, &din, &field_addr, &real_packet->orders[i])) {
36992 }
36993 }
36994
36995#ifdef FREECIV_JSON_CONNECTION
36996 /* Exit array. */
36997 FC_FREE(field_addr.sub_location);
36998#endif /* FREECIV_JSON_CONNECTION */
36999 }
37000 }
37001 if (BV_ISSET(fields, 6)) {
37002 log_packet_detailed(" got field 'dest_tile'");
37003#ifdef FREECIV_JSON_CONNECTION
37004 field_addr.name = "dest_tile";
37005#endif /* FREECIV_JSON_CONNECTION */
37006 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->dest_tile)) {
37007 RECEIVE_PACKET_FIELD_ERROR(dest_tile);
37008 }
37009 }
37010
37011 if (NULL == old) {
37012 old = fc_malloc(sizeof(*old));
37013 *old = *real_packet;
37014 genhash_insert(*hash, old, old);
37015 } else {
37016 *old = *real_packet;
37017 }
37018
37019#endif /* FREECIV_DELTA_PROTOCOL */
37021}
37022
37023static int send_packet_unit_orders_100(struct connection *pc, const struct packet_unit_orders *packet)
37024{
37025 const struct packet_unit_orders *real_packet = packet;
37026 int e;
37027#ifdef FREECIV_DELTA_PROTOCOL
37029 struct packet_unit_orders *old;
37030 bool differ;
37031 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ORDERS;
37032#endif /* FREECIV_DELTA_PROTOCOL */
37034#ifdef FREECIV_JSON_CONNECTION
37035 struct plocation field_addr;
37036 {
37040 }
37041#endif /* FREECIV_JSON_CONNECTION */
37042
37043 log_packet_detailed("packet_unit_orders_100: sending info about ()");
37044
37045#ifdef FREECIV_DELTA_PROTOCOL
37046 if (NULL == *hash) {
37048 NULL, NULL, NULL, free);
37049 }
37050 BV_CLR_ALL(fields);
37051
37052 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37053 old = fc_malloc(sizeof(*old));
37054 *old = *real_packet;
37055 genhash_insert(*hash, old, old);
37056 memset(old, 0, sizeof(*old));
37057 }
37058 differ = (old->unit_id != real_packet->unit_id);
37059 if (differ) {
37060 BV_SET(fields, 0);
37061 }
37062
37063 differ = (old->src_tile != real_packet->src_tile);
37064 if (differ) {
37065 BV_SET(fields, 1);
37066 }
37067
37068 differ = (old->length != real_packet->length);
37069 if (differ) {
37070 BV_SET(fields, 2);
37071 }
37072
37073 if (packet->repeat) {
37074 BV_SET(fields, 3);
37075 }
37076
37077 if (packet->vigilant) {
37078 BV_SET(fields, 4);
37079 }
37080
37081 differ = (old->length != real_packet->length);
37082 if (!differ) {
37083 int i;
37084
37085 for (i = 0; i < real_packet->length; i++) {
37086 differ = !are_unit_orders_equal(&old->orders[i], &real_packet->orders[i]);
37087 if (differ) {
37088 break;
37089 }
37090 }
37091 }
37092 if (differ) {
37093 BV_SET(fields, 5);
37094 }
37095
37096 differ = (old->dest_tile != real_packet->dest_tile);
37097 if (differ) {
37098 BV_SET(fields, 6);
37099 }
37100
37101
37102#ifdef FREECIV_JSON_CONNECTION
37103 field_addr.name = "fields";
37104#endif /* FREECIV_JSON_CONNECTION */
37105 e = 0;
37106 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37107 if (e) {
37108 log_packet_detailed("fields bitvector error detected");
37109 }
37110
37111 if (BV_ISSET(fields, 0)) {
37112 log_packet_detailed(" field 'unit_id' has changed");
37113#ifdef FREECIV_JSON_CONNECTION
37114 field_addr.name = "unit_id";
37115#endif /* FREECIV_JSON_CONNECTION */
37116 e = 0;
37117 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
37118 if (e) {
37119 log_packet_detailed("'unit_id' field error detected");
37120 }
37121 }
37122 if (BV_ISSET(fields, 1)) {
37123 log_packet_detailed(" field 'src_tile' has changed");
37124#ifdef FREECIV_JSON_CONNECTION
37125 field_addr.name = "src_tile";
37126#endif /* FREECIV_JSON_CONNECTION */
37127 e = 0;
37128 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
37129 if (e) {
37130 log_packet_detailed("'src_tile' field error detected");
37131 }
37132 }
37133 if (BV_ISSET(fields, 2)) {
37134 log_packet_detailed(" field 'length' has changed");
37135#ifdef FREECIV_JSON_CONNECTION
37136 field_addr.name = "length";
37137#endif /* FREECIV_JSON_CONNECTION */
37138 e = 0;
37139 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
37140 if (e) {
37141 log_packet_detailed("'length' field error detected");
37142 }
37143 }
37144 /* field 3 is folded into the header */
37145 /* field 4 is folded into the header */
37146 if (BV_ISSET(fields, 5)) {
37147 log_packet_detailed(" field 'orders' has changed");
37148#ifdef FREECIV_JSON_CONNECTION
37149 field_addr.name = "orders";
37150#endif /* FREECIV_JSON_CONNECTION */
37151 e = 0;
37152 {
37153 int i;
37154
37155#ifdef FREECIV_JSON_CONNECTION
37156 /* Create the array. */
37157 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
37158
37159 /* Enter the array. */
37160 field_addr.sub_location = plocation_elem_new(0);
37161#endif /* FREECIV_JSON_CONNECTION */
37162
37163 for (i = 0; i < real_packet->length; i++) {
37164#ifdef FREECIV_JSON_CONNECTION
37165 /* Next array element. */
37166 field_addr.sub_location->number = i;
37167#endif /* FREECIV_JSON_CONNECTION */
37168
37169 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
37170 }
37171
37172#ifdef FREECIV_JSON_CONNECTION
37173 /* Exit array. */
37174 FC_FREE(field_addr.sub_location);
37175#endif /* FREECIV_JSON_CONNECTION */
37176 }
37177 if (e) {
37178 log_packet_detailed("'orders' field error detected");
37179 }
37180 }
37181 if (BV_ISSET(fields, 6)) {
37182 log_packet_detailed(" field 'dest_tile' has changed");
37183#ifdef FREECIV_JSON_CONNECTION
37184 field_addr.name = "dest_tile";
37185#endif /* FREECIV_JSON_CONNECTION */
37186 e = 0;
37187 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
37188 if (e) {
37189 log_packet_detailed("'dest_tile' field error detected");
37190 }
37191 }
37192
37193 *old = *real_packet;
37194#endif /* FREECIV_DELTA_PROTOCOL */
37195#ifndef FREECIV_DELTA_PROTOCOL
37196#ifdef FREECIV_JSON_CONNECTION
37197 field_addr.name = "unit_id";
37198#endif /* FREECIV_JSON_CONNECTION */
37199 e = 0;
37200 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
37201 if (e) {
37202 log_packet_detailed("'unit_id' field error detected");
37203 }
37204#ifdef FREECIV_JSON_CONNECTION
37205 field_addr.name = "src_tile";
37206#endif /* FREECIV_JSON_CONNECTION */
37207 e = 0;
37208 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->src_tile);
37209 if (e) {
37210 log_packet_detailed("'src_tile' field error detected");
37211 }
37212#ifdef FREECIV_JSON_CONNECTION
37213 field_addr.name = "length";
37214#endif /* FREECIV_JSON_CONNECTION */
37215 e = 0;
37216 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->length);
37217 if (e) {
37218 log_packet_detailed("'length' field error detected");
37219 }
37220#ifdef FREECIV_JSON_CONNECTION
37221 field_addr.name = "repeat";
37222#endif /* FREECIV_JSON_CONNECTION */
37223 e = 0;
37224 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->repeat);
37225 if (e) {
37226 log_packet_detailed("'repeat' field error detected");
37227 }
37228#ifdef FREECIV_JSON_CONNECTION
37229 field_addr.name = "vigilant";
37230#endif /* FREECIV_JSON_CONNECTION */
37231 e = 0;
37232 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->vigilant);
37233 if (e) {
37234 log_packet_detailed("'vigilant' field error detected");
37235 }
37236#ifdef FREECIV_JSON_CONNECTION
37237 field_addr.name = "orders";
37238#endif /* FREECIV_JSON_CONNECTION */
37239 e = 0;
37240 {
37241 int i;
37242
37243#ifdef FREECIV_JSON_CONNECTION
37244 /* Create the array. */
37245 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->length);
37246
37247 /* Enter the array. */
37248 field_addr.sub_location = plocation_elem_new(0);
37249#endif /* FREECIV_JSON_CONNECTION */
37250
37251 for (i = 0; i < real_packet->length; i++) {
37252#ifdef FREECIV_JSON_CONNECTION
37253 /* Next array element. */
37254 field_addr.sub_location->number = i;
37255#endif /* FREECIV_JSON_CONNECTION */
37256
37257 e |= DIO_PUT(unit_order, &dout, &field_addr, &real_packet->orders[i]);
37258 }
37259
37260#ifdef FREECIV_JSON_CONNECTION
37261 /* Exit array. */
37262 FC_FREE(field_addr.sub_location);
37263#endif /* FREECIV_JSON_CONNECTION */
37264 }
37265 if (e) {
37266 log_packet_detailed("'orders' field error detected");
37267 }
37268#ifdef FREECIV_JSON_CONNECTION
37269 field_addr.name = "dest_tile";
37270#endif /* FREECIV_JSON_CONNECTION */
37271 e = 0;
37272 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->dest_tile);
37273 if (e) {
37274 log_packet_detailed("'dest_tile' field error detected");
37275 }
37276
37277#endif
37279}
37280
37282{
37283 if (!pc->used) {
37284 log_error("WARNING: trying to send data to the closed connection %s",
37286 return -1;
37287 }
37288 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet != NULL, -1,
37289 "Handler for PACKET_UNIT_ORDERS not installed");
37290 return pc->phs.handlers->send[PACKET_UNIT_ORDERS].packet(pc, packet);
37291}
37292
37293#ifdef FREECIV_DELTA_PROTOCOL
37294#define hash_packet_unit_server_side_agent_set_100 hash_const
37295
37296#define cmp_packet_unit_server_side_agent_set_100 cmp_const
37297
37299#endif /* FREECIV_DELTA_PROTOCOL */
37300
37302{
37303#ifdef FREECIV_DELTA_PROTOCOL
37306 struct genhash **hash = pc->phs.received + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
37307#endif /* FREECIV_DELTA_PROTOCOL */
37309#ifdef FREECIV_JSON_CONNECTION
37310 struct plocation field_addr;
37311 {
37315 }
37316#endif /* FREECIV_JSON_CONNECTION */
37317
37318#ifdef FREECIV_DELTA_PROTOCOL
37319#ifdef FREECIV_JSON_CONNECTION
37320 field_addr.name = "fields";
37321#endif /* FREECIV_JSON_CONNECTION */
37322 DIO_BV_GET(&din, &field_addr, fields);
37323
37324#else /* FREECIV_DELTA_PROTOCOL */
37325#ifdef FREECIV_JSON_CONNECTION
37326 field_addr.name = "unit_id";
37327#endif /* FREECIV_JSON_CONNECTION */
37328 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
37330 }
37331#ifdef FREECIV_JSON_CONNECTION
37332 field_addr.name = "agent";
37333#endif /* FREECIV_JSON_CONNECTION */
37334 {
37335 int readin;
37336
37337 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37339 }
37340 real_packet->agent = readin;
37341 }
37342#endif
37343 log_packet_detailed("packet_unit_server_side_agent_set_100: got info about ()");
37344
37345#ifdef FREECIV_DELTA_PROTOCOL
37346 if (NULL == *hash) {
37348 NULL, NULL, NULL, free);
37349 }
37350
37351 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37352 *real_packet = *old;
37353 } else {
37354 log_packet_detailed(" no old info");
37355 memset(real_packet, 0, sizeof(*real_packet));
37356 }
37357
37358 if (BV_ISSET(fields, 0)) {
37359 log_packet_detailed(" got field 'unit_id'");
37360#ifdef FREECIV_JSON_CONNECTION
37361 field_addr.name = "unit_id";
37362#endif /* FREECIV_JSON_CONNECTION */
37363 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
37365 }
37366 }
37367 if (BV_ISSET(fields, 1)) {
37368 log_packet_detailed(" got field 'agent'");
37369#ifdef FREECIV_JSON_CONNECTION
37370 field_addr.name = "agent";
37371#endif /* FREECIV_JSON_CONNECTION */
37372 {
37373 int readin;
37374
37375 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37377 }
37378 real_packet->agent = readin;
37379 }
37380 }
37381
37382 if (NULL == old) {
37383 old = fc_malloc(sizeof(*old));
37384 *old = *real_packet;
37385 genhash_insert(*hash, old, old);
37386 } else {
37387 *old = *real_packet;
37388 }
37389
37390#endif /* FREECIV_DELTA_PROTOCOL */
37392}
37393
37395{
37396 const struct packet_unit_server_side_agent_set *real_packet = packet;
37397 int e;
37398#ifdef FREECIV_DELTA_PROTOCOL
37401 bool differ;
37402 struct genhash **hash = pc->phs.sent + PACKET_UNIT_SERVER_SIDE_AGENT_SET;
37403#endif /* FREECIV_DELTA_PROTOCOL */
37405#ifdef FREECIV_JSON_CONNECTION
37406 struct plocation field_addr;
37407 {
37411 }
37412#endif /* FREECIV_JSON_CONNECTION */
37413
37414 log_packet_detailed("packet_unit_server_side_agent_set_100: sending info about ()");
37415
37416#ifdef FREECIV_DELTA_PROTOCOL
37417 if (NULL == *hash) {
37419 NULL, NULL, NULL, free);
37420 }
37421 BV_CLR_ALL(fields);
37422
37423 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37424 old = fc_malloc(sizeof(*old));
37425 *old = *real_packet;
37426 genhash_insert(*hash, old, old);
37427 memset(old, 0, sizeof(*old));
37428 }
37429 differ = (old->unit_id != real_packet->unit_id);
37430 if (differ) {
37431 BV_SET(fields, 0);
37432 }
37433
37434 differ = (old->agent != real_packet->agent);
37435 if (differ) {
37436 BV_SET(fields, 1);
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 'unit_id' has changed");
37451#ifdef FREECIV_JSON_CONNECTION
37452 field_addr.name = "unit_id";
37453#endif /* FREECIV_JSON_CONNECTION */
37454 e = 0;
37455 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
37456 if (e) {
37457 log_packet_detailed("'unit_id' field error detected");
37458 }
37459 }
37460 if (BV_ISSET(fields, 1)) {
37461 log_packet_detailed(" field 'agent' has changed");
37462#ifdef FREECIV_JSON_CONNECTION
37463 field_addr.name = "agent";
37464#endif /* FREECIV_JSON_CONNECTION */
37465 e = 0;
37466 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
37467 if (e) {
37468 log_packet_detailed("'agent' field error detected");
37469 }
37470 }
37471
37472 *old = *real_packet;
37473#endif /* FREECIV_DELTA_PROTOCOL */
37474#ifndef FREECIV_DELTA_PROTOCOL
37475#ifdef FREECIV_JSON_CONNECTION
37476 field_addr.name = "unit_id";
37477#endif /* FREECIV_JSON_CONNECTION */
37478 e = 0;
37479 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
37480 if (e) {
37481 log_packet_detailed("'unit_id' field error detected");
37482 }
37483#ifdef FREECIV_JSON_CONNECTION
37484 field_addr.name = "agent";
37485#endif /* FREECIV_JSON_CONNECTION */
37486 e = 0;
37487 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->agent);
37488 if (e) {
37489 log_packet_detailed("'agent' field error detected");
37490 }
37491
37492#endif
37494}
37495
37497{
37498 if (!pc->used) {
37499 log_error("WARNING: trying to send data to the closed connection %s",
37501 return -1;
37502 }
37503 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet != NULL, -1,
37504 "Handler for PACKET_UNIT_SERVER_SIDE_AGENT_SET not installed");
37505 return pc->phs.handlers->send[PACKET_UNIT_SERVER_SIDE_AGENT_SET].packet(pc, packet);
37506}
37507
37509{
37510 struct packet_unit_server_side_agent_set packet, *real_packet = &packet;
37511
37513 real_packet->agent = agent;
37514
37516}
37517
37518#ifdef FREECIV_DELTA_PROTOCOL
37519#define hash_packet_unit_action_query_100 hash_const
37520
37521#define cmp_packet_unit_action_query_100 cmp_const
37522
37524#endif /* FREECIV_DELTA_PROTOCOL */
37525
37527{
37528#ifdef FREECIV_DELTA_PROTOCOL
37530 struct packet_unit_action_query *old;
37531 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_QUERY;
37532#endif /* FREECIV_DELTA_PROTOCOL */
37534#ifdef FREECIV_JSON_CONNECTION
37535 struct plocation field_addr;
37536 {
37540 }
37541#endif /* FREECIV_JSON_CONNECTION */
37542
37543#ifdef FREECIV_DELTA_PROTOCOL
37544#ifdef FREECIV_JSON_CONNECTION
37545 field_addr.name = "fields";
37546#endif /* FREECIV_JSON_CONNECTION */
37547 DIO_BV_GET(&din, &field_addr, fields);
37548
37549#else /* FREECIV_DELTA_PROTOCOL */
37550#ifdef FREECIV_JSON_CONNECTION
37551 field_addr.name = "actor_id";
37552#endif /* FREECIV_JSON_CONNECTION */
37553 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37555 }
37556#ifdef FREECIV_JSON_CONNECTION
37557 field_addr.name = "target_id";
37558#endif /* FREECIV_JSON_CONNECTION */
37559 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37560 RECEIVE_PACKET_FIELD_ERROR(target_id);
37561 }
37562#ifdef FREECIV_JSON_CONNECTION
37563 field_addr.name = "action_type";
37564#endif /* FREECIV_JSON_CONNECTION */
37565 {
37566 int readin;
37567
37568 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37569 RECEIVE_PACKET_FIELD_ERROR(action_type);
37570 }
37571 real_packet->action_type = readin;
37572 }
37573#ifdef FREECIV_JSON_CONNECTION
37574 field_addr.name = "request_kind";
37575#endif /* FREECIV_JSON_CONNECTION */
37576 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37577 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37578 }
37579#endif
37580 log_packet_detailed("packet_unit_action_query_100: got info about ()");
37581
37582#ifdef FREECIV_DELTA_PROTOCOL
37583 if (NULL == *hash) {
37585 NULL, NULL, NULL, free);
37586 }
37587
37588 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37589 *real_packet = *old;
37590 } else {
37591 log_packet_detailed(" no old info");
37592 memset(real_packet, 0, sizeof(*real_packet));
37593 }
37594
37595 if (BV_ISSET(fields, 0)) {
37596 log_packet_detailed(" got field 'actor_id'");
37597#ifdef FREECIV_JSON_CONNECTION
37598 field_addr.name = "actor_id";
37599#endif /* FREECIV_JSON_CONNECTION */
37600 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
37602 }
37603 }
37604 if (BV_ISSET(fields, 1)) {
37605 log_packet_detailed(" got field 'target_id'");
37606#ifdef FREECIV_JSON_CONNECTION
37607 field_addr.name = "target_id";
37608#endif /* FREECIV_JSON_CONNECTION */
37609 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
37610 RECEIVE_PACKET_FIELD_ERROR(target_id);
37611 }
37612 }
37613 if (BV_ISSET(fields, 2)) {
37614 log_packet_detailed(" got field 'action_type'");
37615#ifdef FREECIV_JSON_CONNECTION
37616 field_addr.name = "action_type";
37617#endif /* FREECIV_JSON_CONNECTION */
37618 {
37619 int readin;
37620
37621 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
37622 RECEIVE_PACKET_FIELD_ERROR(action_type);
37623 }
37624 real_packet->action_type = readin;
37625 }
37626 }
37627 if (BV_ISSET(fields, 3)) {
37628 log_packet_detailed(" got field 'request_kind'");
37629#ifdef FREECIV_JSON_CONNECTION
37630 field_addr.name = "request_kind";
37631#endif /* FREECIV_JSON_CONNECTION */
37632 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
37633 RECEIVE_PACKET_FIELD_ERROR(request_kind);
37634 }
37635 }
37636
37637 if (NULL == old) {
37638 old = fc_malloc(sizeof(*old));
37639 *old = *real_packet;
37640 genhash_insert(*hash, old, old);
37641 } else {
37642 *old = *real_packet;
37643 }
37644
37645#endif /* FREECIV_DELTA_PROTOCOL */
37647}
37648
37650{
37651 const struct packet_unit_action_query *real_packet = packet;
37652 int e;
37653#ifdef FREECIV_DELTA_PROTOCOL
37655 struct packet_unit_action_query *old;
37656 bool differ;
37657 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_QUERY;
37658#endif /* FREECIV_DELTA_PROTOCOL */
37660#ifdef FREECIV_JSON_CONNECTION
37661 struct plocation field_addr;
37662 {
37666 }
37667#endif /* FREECIV_JSON_CONNECTION */
37668
37669 log_packet_detailed("packet_unit_action_query_100: sending info about ()");
37670
37671#ifdef FREECIV_DELTA_PROTOCOL
37672 if (NULL == *hash) {
37674 NULL, NULL, NULL, free);
37675 }
37676 BV_CLR_ALL(fields);
37677
37678 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37679 old = fc_malloc(sizeof(*old));
37680 *old = *real_packet;
37681 genhash_insert(*hash, old, old);
37682 memset(old, 0, sizeof(*old));
37683 }
37684 differ = (old->actor_id != real_packet->actor_id);
37685 if (differ) {
37686 BV_SET(fields, 0);
37687 }
37688
37689 differ = (old->target_id != real_packet->target_id);
37690 if (differ) {
37691 BV_SET(fields, 1);
37692 }
37693
37694 differ = (old->action_type != real_packet->action_type);
37695 if (differ) {
37696 BV_SET(fields, 2);
37697 }
37698
37699 differ = (old->request_kind != real_packet->request_kind);
37700 if (differ) {
37701 BV_SET(fields, 3);
37702 }
37703
37704
37705#ifdef FREECIV_JSON_CONNECTION
37706 field_addr.name = "fields";
37707#endif /* FREECIV_JSON_CONNECTION */
37708 e = 0;
37709 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37710 if (e) {
37711 log_packet_detailed("fields bitvector error detected");
37712 }
37713
37714 if (BV_ISSET(fields, 0)) {
37715 log_packet_detailed(" field 'actor_id' has changed");
37716#ifdef FREECIV_JSON_CONNECTION
37717 field_addr.name = "actor_id";
37718#endif /* FREECIV_JSON_CONNECTION */
37719 e = 0;
37720 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37721 if (e) {
37722 log_packet_detailed("'actor_id' field error detected");
37723 }
37724 }
37725 if (BV_ISSET(fields, 1)) {
37726 log_packet_detailed(" field 'target_id' has changed");
37727#ifdef FREECIV_JSON_CONNECTION
37728 field_addr.name = "target_id";
37729#endif /* FREECIV_JSON_CONNECTION */
37730 e = 0;
37731 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37732 if (e) {
37733 log_packet_detailed("'target_id' field error detected");
37734 }
37735 }
37736 if (BV_ISSET(fields, 2)) {
37737 log_packet_detailed(" field 'action_type' has changed");
37738#ifdef FREECIV_JSON_CONNECTION
37739 field_addr.name = "action_type";
37740#endif /* FREECIV_JSON_CONNECTION */
37741 e = 0;
37742 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37743 if (e) {
37744 log_packet_detailed("'action_type' field error detected");
37745 }
37746 }
37747 if (BV_ISSET(fields, 3)) {
37748 log_packet_detailed(" field 'request_kind' has changed");
37749#ifdef FREECIV_JSON_CONNECTION
37750 field_addr.name = "request_kind";
37751#endif /* FREECIV_JSON_CONNECTION */
37752 e = 0;
37753 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
37754 if (e) {
37755 log_packet_detailed("'request_kind' field error detected");
37756 }
37757 }
37758
37759 *old = *real_packet;
37760#endif /* FREECIV_DELTA_PROTOCOL */
37761#ifndef FREECIV_DELTA_PROTOCOL
37762#ifdef FREECIV_JSON_CONNECTION
37763 field_addr.name = "actor_id";
37764#endif /* FREECIV_JSON_CONNECTION */
37765 e = 0;
37766 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
37767 if (e) {
37768 log_packet_detailed("'actor_id' field error detected");
37769 }
37770#ifdef FREECIV_JSON_CONNECTION
37771 field_addr.name = "target_id";
37772#endif /* FREECIV_JSON_CONNECTION */
37773 e = 0;
37774 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
37775 if (e) {
37776 log_packet_detailed("'target_id' field error detected");
37777 }
37778#ifdef FREECIV_JSON_CONNECTION
37779 field_addr.name = "action_type";
37780#endif /* FREECIV_JSON_CONNECTION */
37781 e = 0;
37782 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
37783 if (e) {
37784 log_packet_detailed("'action_type' field error detected");
37785 }
37786#ifdef FREECIV_JSON_CONNECTION
37787 field_addr.name = "request_kind";
37788#endif /* FREECIV_JSON_CONNECTION */
37789 e = 0;
37790 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
37791 if (e) {
37792 log_packet_detailed("'request_kind' field error detected");
37793 }
37794
37795#endif
37797}
37798
37800{
37801 if (!pc->used) {
37802 log_error("WARNING: trying to send data to the closed connection %s",
37804 return -1;
37805 }
37806 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet != NULL, -1,
37807 "Handler for PACKET_UNIT_ACTION_QUERY not installed");
37808 return pc->phs.handlers->send[PACKET_UNIT_ACTION_QUERY].packet(pc, packet);
37809}
37810
37811int dsend_packet_unit_action_query(struct connection *pc, int actor_id, int target_id, action_id action_type, int request_kind)
37812{
37813 struct packet_unit_action_query packet, *real_packet = &packet;
37814
37816 real_packet->target_id = target_id;
37817 real_packet->action_type = action_type;
37818 real_packet->request_kind = request_kind;
37819
37821}
37822
37823#ifdef FREECIV_DELTA_PROTOCOL
37824#define hash_packet_unit_type_upgrade_100 hash_const
37825
37826#define cmp_packet_unit_type_upgrade_100 cmp_const
37827
37829#endif /* FREECIV_DELTA_PROTOCOL */
37830
37832{
37833#ifdef FREECIV_DELTA_PROTOCOL
37835 struct packet_unit_type_upgrade *old;
37836 struct genhash **hash = pc->phs.received + PACKET_UNIT_TYPE_UPGRADE;
37837#endif /* FREECIV_DELTA_PROTOCOL */
37839#ifdef FREECIV_JSON_CONNECTION
37840 struct plocation field_addr;
37841 {
37845 }
37846#endif /* FREECIV_JSON_CONNECTION */
37847
37848#ifdef FREECIV_DELTA_PROTOCOL
37849#ifdef FREECIV_JSON_CONNECTION
37850 field_addr.name = "fields";
37851#endif /* FREECIV_JSON_CONNECTION */
37852 DIO_BV_GET(&din, &field_addr, fields);
37853
37854#else /* FREECIV_DELTA_PROTOCOL */
37855#ifdef FREECIV_JSON_CONNECTION
37856 field_addr.name = "type";
37857#endif /* FREECIV_JSON_CONNECTION */
37858 {
37859 int readin;
37860
37861 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
37863 }
37864 real_packet->type = readin;
37865 }
37866#endif
37867 log_packet_detailed("packet_unit_type_upgrade_100: got info about ()");
37868
37869#ifdef FREECIV_DELTA_PROTOCOL
37870 if (NULL == *hash) {
37872 NULL, NULL, NULL, free);
37873 }
37874
37875 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
37876 *real_packet = *old;
37877 } else {
37878 log_packet_detailed(" no old info");
37879 memset(real_packet, 0, sizeof(*real_packet));
37880 }
37881
37882 if (BV_ISSET(fields, 0)) {
37883 log_packet_detailed(" got field 'type'");
37884#ifdef FREECIV_JSON_CONNECTION
37885 field_addr.name = "type";
37886#endif /* FREECIV_JSON_CONNECTION */
37887 {
37888 int readin;
37889
37890 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
37892 }
37893 real_packet->type = readin;
37894 }
37895 }
37896
37897 if (NULL == old) {
37898 old = fc_malloc(sizeof(*old));
37899 *old = *real_packet;
37900 genhash_insert(*hash, old, old);
37901 } else {
37902 *old = *real_packet;
37903 }
37904
37905#endif /* FREECIV_DELTA_PROTOCOL */
37907}
37908
37910{
37911 const struct packet_unit_type_upgrade *real_packet = packet;
37912 int e;
37913#ifdef FREECIV_DELTA_PROTOCOL
37915 struct packet_unit_type_upgrade *old;
37916 bool differ;
37917 struct genhash **hash = pc->phs.sent + PACKET_UNIT_TYPE_UPGRADE;
37918#endif /* FREECIV_DELTA_PROTOCOL */
37920#ifdef FREECIV_JSON_CONNECTION
37921 struct plocation field_addr;
37922 {
37926 }
37927#endif /* FREECIV_JSON_CONNECTION */
37928
37929 log_packet_detailed("packet_unit_type_upgrade_100: sending info about ()");
37930
37931#ifdef FREECIV_DELTA_PROTOCOL
37932 if (NULL == *hash) {
37934 NULL, NULL, NULL, free);
37935 }
37936 BV_CLR_ALL(fields);
37937
37938 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
37939 old = fc_malloc(sizeof(*old));
37940 *old = *real_packet;
37941 genhash_insert(*hash, old, old);
37942 memset(old, 0, sizeof(*old));
37943 }
37944 differ = (old->type != real_packet->type);
37945 if (differ) {
37946 BV_SET(fields, 0);
37947 }
37948
37949
37950#ifdef FREECIV_JSON_CONNECTION
37951 field_addr.name = "fields";
37952#endif /* FREECIV_JSON_CONNECTION */
37953 e = 0;
37954 e |= DIO_BV_PUT(&dout, &field_addr, fields);
37955 if (e) {
37956 log_packet_detailed("fields bitvector error detected");
37957 }
37958
37959 if (BV_ISSET(fields, 0)) {
37960 log_packet_detailed(" field 'type' has changed");
37961#ifdef FREECIV_JSON_CONNECTION
37962 field_addr.name = "type";
37963#endif /* FREECIV_JSON_CONNECTION */
37964 e = 0;
37965 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
37966 if (e) {
37967 log_packet_detailed("'type' field error detected");
37968 }
37969 }
37970
37971 *old = *real_packet;
37972#endif /* FREECIV_DELTA_PROTOCOL */
37973#ifndef FREECIV_DELTA_PROTOCOL
37974#ifdef FREECIV_JSON_CONNECTION
37975 field_addr.name = "type";
37976#endif /* FREECIV_JSON_CONNECTION */
37977 e = 0;
37978 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
37979 if (e) {
37980 log_packet_detailed("'type' field error detected");
37981 }
37982
37983#endif
37985}
37986
37988{
37989 if (!pc->used) {
37990 log_error("WARNING: trying to send data to the closed connection %s",
37992 return -1;
37993 }
37994 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet != NULL, -1,
37995 "Handler for PACKET_UNIT_TYPE_UPGRADE not installed");
37996 return pc->phs.handlers->send[PACKET_UNIT_TYPE_UPGRADE].packet(pc, packet);
37997}
37998
38000{
38001 struct packet_unit_type_upgrade packet, *real_packet = &packet;
38002
38004
38006}
38007
38008#ifdef FREECIV_DELTA_PROTOCOL
38009#define hash_packet_unit_do_action_100 hash_const
38010
38011#define cmp_packet_unit_do_action_100 cmp_const
38012
38014#endif /* FREECIV_DELTA_PROTOCOL */
38015
38017{
38018#ifdef FREECIV_DELTA_PROTOCOL
38020 struct packet_unit_do_action *old;
38021 struct genhash **hash = pc->phs.received + PACKET_UNIT_DO_ACTION;
38022#endif /* FREECIV_DELTA_PROTOCOL */
38024#ifdef FREECIV_JSON_CONNECTION
38025 struct plocation field_addr;
38026 {
38030 }
38031#endif /* FREECIV_JSON_CONNECTION */
38032
38033#ifdef FREECIV_DELTA_PROTOCOL
38034#ifdef FREECIV_JSON_CONNECTION
38035 field_addr.name = "fields";
38036#endif /* FREECIV_JSON_CONNECTION */
38037 DIO_BV_GET(&din, &field_addr, fields);
38038
38039#else /* FREECIV_DELTA_PROTOCOL */
38040#ifdef FREECIV_JSON_CONNECTION
38041 field_addr.name = "actor_id";
38042#endif /* FREECIV_JSON_CONNECTION */
38043 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
38045 }
38046#ifdef FREECIV_JSON_CONNECTION
38047 field_addr.name = "target_id";
38048#endif /* FREECIV_JSON_CONNECTION */
38049 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
38050 RECEIVE_PACKET_FIELD_ERROR(target_id);
38051 }
38052#ifdef FREECIV_JSON_CONNECTION
38053 field_addr.name = "sub_tgt_id";
38054#endif /* FREECIV_JSON_CONNECTION */
38055 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
38056 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
38057 }
38058#ifdef FREECIV_JSON_CONNECTION
38059 field_addr.name = "name";
38060#endif /* FREECIV_JSON_CONNECTION */
38061 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
38063 }
38064#ifdef FREECIV_JSON_CONNECTION
38065 field_addr.name = "action_type";
38066#endif /* FREECIV_JSON_CONNECTION */
38067 {
38068 int readin;
38069
38070 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38071 RECEIVE_PACKET_FIELD_ERROR(action_type);
38072 }
38073 real_packet->action_type = readin;
38074 }
38075#endif
38076 log_packet_detailed("packet_unit_do_action_100: got info about ()");
38077
38078#ifdef FREECIV_DELTA_PROTOCOL
38079 if (NULL == *hash) {
38081 NULL, NULL, NULL, free);
38082 }
38083
38084 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38085 *real_packet = *old;
38086 } else {
38087 log_packet_detailed(" no old info");
38088 memset(real_packet, 0, sizeof(*real_packet));
38089 }
38090
38091 if (BV_ISSET(fields, 0)) {
38092 log_packet_detailed(" got field 'actor_id'");
38093#ifdef FREECIV_JSON_CONNECTION
38094 field_addr.name = "actor_id";
38095#endif /* FREECIV_JSON_CONNECTION */
38096 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
38098 }
38099 }
38100 if (BV_ISSET(fields, 1)) {
38101 log_packet_detailed(" got field 'target_id'");
38102#ifdef FREECIV_JSON_CONNECTION
38103 field_addr.name = "target_id";
38104#endif /* FREECIV_JSON_CONNECTION */
38105 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
38106 RECEIVE_PACKET_FIELD_ERROR(target_id);
38107 }
38108 }
38109 if (BV_ISSET(fields, 2)) {
38110 log_packet_detailed(" got field 'sub_tgt_id'");
38111#ifdef FREECIV_JSON_CONNECTION
38112 field_addr.name = "sub_tgt_id";
38113#endif /* FREECIV_JSON_CONNECTION */
38114 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->sub_tgt_id)) {
38115 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_id);
38116 }
38117 }
38118 if (BV_ISSET(fields, 3)) {
38119 log_packet_detailed(" got field 'name'");
38120#ifdef FREECIV_JSON_CONNECTION
38121 field_addr.name = "name";
38122#endif /* FREECIV_JSON_CONNECTION */
38123 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
38125 }
38126 }
38127 if (BV_ISSET(fields, 4)) {
38128 log_packet_detailed(" got field 'action_type'");
38129#ifdef FREECIV_JSON_CONNECTION
38130 field_addr.name = "action_type";
38131#endif /* FREECIV_JSON_CONNECTION */
38132 {
38133 int readin;
38134
38135 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38136 RECEIVE_PACKET_FIELD_ERROR(action_type);
38137 }
38138 real_packet->action_type = readin;
38139 }
38140 }
38141
38142 if (NULL == old) {
38143 old = fc_malloc(sizeof(*old));
38144 *old = *real_packet;
38145 genhash_insert(*hash, old, old);
38146 } else {
38147 *old = *real_packet;
38148 }
38149
38150#endif /* FREECIV_DELTA_PROTOCOL */
38152}
38153
38155{
38156 const struct packet_unit_do_action *real_packet = packet;
38157 int e;
38158#ifdef FREECIV_DELTA_PROTOCOL
38160 struct packet_unit_do_action *old;
38161 bool differ;
38162 struct genhash **hash = pc->phs.sent + PACKET_UNIT_DO_ACTION;
38163#endif /* FREECIV_DELTA_PROTOCOL */
38165#ifdef FREECIV_JSON_CONNECTION
38166 struct plocation field_addr;
38167 {
38171 }
38172#endif /* FREECIV_JSON_CONNECTION */
38173
38174 log_packet_detailed("packet_unit_do_action_100: sending info about ()");
38175
38176#ifdef FREECIV_DELTA_PROTOCOL
38177 if (NULL == *hash) {
38179 NULL, NULL, NULL, free);
38180 }
38181 BV_CLR_ALL(fields);
38182
38183 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38184 old = fc_malloc(sizeof(*old));
38185 *old = *real_packet;
38186 genhash_insert(*hash, old, old);
38187 memset(old, 0, sizeof(*old));
38188 }
38189 differ = (old->actor_id != real_packet->actor_id);
38190 if (differ) {
38191 BV_SET(fields, 0);
38192 }
38193
38194 differ = (old->target_id != real_packet->target_id);
38195 if (differ) {
38196 BV_SET(fields, 1);
38197 }
38198
38199 differ = (old->sub_tgt_id != real_packet->sub_tgt_id);
38200 if (differ) {
38201 BV_SET(fields, 2);
38202 }
38203
38204 differ = (strcmp(old->name, real_packet->name) != 0);
38205 if (differ) {
38206 BV_SET(fields, 3);
38207 }
38208
38209 differ = (old->action_type != real_packet->action_type);
38210 if (differ) {
38211 BV_SET(fields, 4);
38212 }
38213
38214
38215#ifdef FREECIV_JSON_CONNECTION
38216 field_addr.name = "fields";
38217#endif /* FREECIV_JSON_CONNECTION */
38218 e = 0;
38219 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38220 if (e) {
38221 log_packet_detailed("fields bitvector error detected");
38222 }
38223
38224 if (BV_ISSET(fields, 0)) {
38225 log_packet_detailed(" field 'actor_id' has changed");
38226#ifdef FREECIV_JSON_CONNECTION
38227 field_addr.name = "actor_id";
38228#endif /* FREECIV_JSON_CONNECTION */
38229 e = 0;
38230 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38231 if (e) {
38232 log_packet_detailed("'actor_id' field error detected");
38233 }
38234 }
38235 if (BV_ISSET(fields, 1)) {
38236 log_packet_detailed(" field 'target_id' has changed");
38237#ifdef FREECIV_JSON_CONNECTION
38238 field_addr.name = "target_id";
38239#endif /* FREECIV_JSON_CONNECTION */
38240 e = 0;
38241 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38242 if (e) {
38243 log_packet_detailed("'target_id' field error detected");
38244 }
38245 }
38246 if (BV_ISSET(fields, 2)) {
38247 log_packet_detailed(" field 'sub_tgt_id' has changed");
38248#ifdef FREECIV_JSON_CONNECTION
38249 field_addr.name = "sub_tgt_id";
38250#endif /* FREECIV_JSON_CONNECTION */
38251 e = 0;
38252 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
38253 if (e) {
38254 log_packet_detailed("'sub_tgt_id' field error detected");
38255 }
38256 }
38257 if (BV_ISSET(fields, 3)) {
38258 log_packet_detailed(" field 'name' has changed");
38259#ifdef FREECIV_JSON_CONNECTION
38260 field_addr.name = "name";
38261#endif /* FREECIV_JSON_CONNECTION */
38262 e = 0;
38263 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
38264 if (e) {
38265 log_packet_detailed("'name' field error detected");
38266 }
38267 }
38268 if (BV_ISSET(fields, 4)) {
38269 log_packet_detailed(" field 'action_type' has changed");
38270#ifdef FREECIV_JSON_CONNECTION
38271 field_addr.name = "action_type";
38272#endif /* FREECIV_JSON_CONNECTION */
38273 e = 0;
38274 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38275 if (e) {
38276 log_packet_detailed("'action_type' field error detected");
38277 }
38278 }
38279
38280 *old = *real_packet;
38281#endif /* FREECIV_DELTA_PROTOCOL */
38282#ifndef FREECIV_DELTA_PROTOCOL
38283#ifdef FREECIV_JSON_CONNECTION
38284 field_addr.name = "actor_id";
38285#endif /* FREECIV_JSON_CONNECTION */
38286 e = 0;
38287 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38288 if (e) {
38289 log_packet_detailed("'actor_id' field error detected");
38290 }
38291#ifdef FREECIV_JSON_CONNECTION
38292 field_addr.name = "target_id";
38293#endif /* FREECIV_JSON_CONNECTION */
38294 e = 0;
38295 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38296 if (e) {
38297 log_packet_detailed("'target_id' field error detected");
38298 }
38299#ifdef FREECIV_JSON_CONNECTION
38300 field_addr.name = "sub_tgt_id";
38301#endif /* FREECIV_JSON_CONNECTION */
38302 e = 0;
38303 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->sub_tgt_id);
38304 if (e) {
38305 log_packet_detailed("'sub_tgt_id' field error detected");
38306 }
38307#ifdef FREECIV_JSON_CONNECTION
38308 field_addr.name = "name";
38309#endif /* FREECIV_JSON_CONNECTION */
38310 e = 0;
38311 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
38312 if (e) {
38313 log_packet_detailed("'name' field error detected");
38314 }
38315#ifdef FREECIV_JSON_CONNECTION
38316 field_addr.name = "action_type";
38317#endif /* FREECIV_JSON_CONNECTION */
38318 e = 0;
38319 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38320 if (e) {
38321 log_packet_detailed("'action_type' field error detected");
38322 }
38323
38324#endif
38326}
38327
38329{
38330 if (!pc->used) {
38331 log_error("WARNING: trying to send data to the closed connection %s",
38333 return -1;
38334 }
38335 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet != NULL, -1,
38336 "Handler for PACKET_UNIT_DO_ACTION not installed");
38337 return pc->phs.handlers->send[PACKET_UNIT_DO_ACTION].packet(pc, packet);
38338}
38339
38340int 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)
38341{
38342 struct packet_unit_do_action packet, *real_packet = &packet;
38343
38345 real_packet->target_id = target_id;
38346 real_packet->sub_tgt_id = sub_tgt_id;
38347 sz_strlcpy(real_packet->name, name);
38348 real_packet->action_type = action_type;
38349
38351}
38352
38353#ifdef FREECIV_DELTA_PROTOCOL
38354#define hash_packet_unit_action_answer_100 hash_const
38355
38356#define cmp_packet_unit_action_answer_100 cmp_const
38357
38359#endif /* FREECIV_DELTA_PROTOCOL */
38360
38362{
38363#ifdef FREECIV_DELTA_PROTOCOL
38365 struct packet_unit_action_answer *old;
38366 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTION_ANSWER;
38367#endif /* FREECIV_DELTA_PROTOCOL */
38369#ifdef FREECIV_JSON_CONNECTION
38370 struct plocation field_addr;
38371 {
38375 }
38376#endif /* FREECIV_JSON_CONNECTION */
38377
38378#ifdef FREECIV_DELTA_PROTOCOL
38379#ifdef FREECIV_JSON_CONNECTION
38380 field_addr.name = "fields";
38381#endif /* FREECIV_JSON_CONNECTION */
38382 DIO_BV_GET(&din, &field_addr, fields);
38383
38384#else /* FREECIV_DELTA_PROTOCOL */
38385#ifdef FREECIV_JSON_CONNECTION
38386 field_addr.name = "actor_id";
38387#endif /* FREECIV_JSON_CONNECTION */
38388 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
38390 }
38391#ifdef FREECIV_JSON_CONNECTION
38392 field_addr.name = "target_id";
38393#endif /* FREECIV_JSON_CONNECTION */
38394 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
38395 RECEIVE_PACKET_FIELD_ERROR(target_id);
38396 }
38397#ifdef FREECIV_JSON_CONNECTION
38398 field_addr.name = "cost";
38399#endif /* FREECIV_JSON_CONNECTION */
38400 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
38402 }
38403#ifdef FREECIV_JSON_CONNECTION
38404 field_addr.name = "action_type";
38405#endif /* FREECIV_JSON_CONNECTION */
38406 {
38407 int readin;
38408
38409 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38410 RECEIVE_PACKET_FIELD_ERROR(action_type);
38411 }
38412 real_packet->action_type = readin;
38413 }
38414#ifdef FREECIV_JSON_CONNECTION
38415 field_addr.name = "request_kind";
38416#endif /* FREECIV_JSON_CONNECTION */
38417 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38418 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38419 }
38420#endif
38421 log_packet_detailed("packet_unit_action_answer_100: got info about ()");
38422
38423#ifdef FREECIV_DELTA_PROTOCOL
38424 if (NULL == *hash) {
38426 NULL, NULL, NULL, free);
38427 }
38428
38429 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38430 *real_packet = *old;
38431 } else {
38432 log_packet_detailed(" no old info");
38433 memset(real_packet, 0, sizeof(*real_packet));
38434 }
38435
38436 if (BV_ISSET(fields, 0)) {
38437 log_packet_detailed(" got field 'actor_id'");
38438#ifdef FREECIV_JSON_CONNECTION
38439 field_addr.name = "actor_id";
38440#endif /* FREECIV_JSON_CONNECTION */
38441 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_id)) {
38443 }
38444 }
38445 if (BV_ISSET(fields, 1)) {
38446 log_packet_detailed(" got field 'target_id'");
38447#ifdef FREECIV_JSON_CONNECTION
38448 field_addr.name = "target_id";
38449#endif /* FREECIV_JSON_CONNECTION */
38450 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_id)) {
38451 RECEIVE_PACKET_FIELD_ERROR(target_id);
38452 }
38453 }
38454 if (BV_ISSET(fields, 2)) {
38455 log_packet_detailed(" got field 'cost'");
38456#ifdef FREECIV_JSON_CONNECTION
38457 field_addr.name = "cost";
38458#endif /* FREECIV_JSON_CONNECTION */
38459 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->cost)) {
38461 }
38462 }
38463 if (BV_ISSET(fields, 3)) {
38464 log_packet_detailed(" got field 'action_type'");
38465#ifdef FREECIV_JSON_CONNECTION
38466 field_addr.name = "action_type";
38467#endif /* FREECIV_JSON_CONNECTION */
38468 {
38469 int readin;
38470
38471 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
38472 RECEIVE_PACKET_FIELD_ERROR(action_type);
38473 }
38474 real_packet->action_type = readin;
38475 }
38476 }
38477 if (BV_ISSET(fields, 4)) {
38478 log_packet_detailed(" got field 'request_kind'");
38479#ifdef FREECIV_JSON_CONNECTION
38480 field_addr.name = "request_kind";
38481#endif /* FREECIV_JSON_CONNECTION */
38482 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38483 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38484 }
38485 }
38486
38487 if (NULL == old) {
38488 old = fc_malloc(sizeof(*old));
38489 *old = *real_packet;
38490 genhash_insert(*hash, old, old);
38491 } else {
38492 *old = *real_packet;
38493 }
38494
38495#endif /* FREECIV_DELTA_PROTOCOL */
38497}
38498
38500{
38501 const struct packet_unit_action_answer *real_packet = packet;
38502 int e;
38503#ifdef FREECIV_DELTA_PROTOCOL
38505 struct packet_unit_action_answer *old;
38506 bool differ;
38507 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTION_ANSWER;
38508#endif /* FREECIV_DELTA_PROTOCOL */
38510#ifdef FREECIV_JSON_CONNECTION
38511 struct plocation field_addr;
38512 {
38516 }
38517#endif /* FREECIV_JSON_CONNECTION */
38518
38519 log_packet_detailed("packet_unit_action_answer_100: sending info about ()");
38520
38521#ifdef FREECIV_DELTA_PROTOCOL
38522 if (NULL == *hash) {
38524 NULL, NULL, NULL, free);
38525 }
38526 BV_CLR_ALL(fields);
38527
38528 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38529 old = fc_malloc(sizeof(*old));
38530 *old = *real_packet;
38531 genhash_insert(*hash, old, old);
38532 memset(old, 0, sizeof(*old));
38533 }
38534 differ = (old->actor_id != real_packet->actor_id);
38535 if (differ) {
38536 BV_SET(fields, 0);
38537 }
38538
38539 differ = (old->target_id != real_packet->target_id);
38540 if (differ) {
38541 BV_SET(fields, 1);
38542 }
38543
38544 differ = (old->cost != real_packet->cost);
38545 if (differ) {
38546 BV_SET(fields, 2);
38547 }
38548
38549 differ = (old->action_type != real_packet->action_type);
38550 if (differ) {
38551 BV_SET(fields, 3);
38552 }
38553
38554 differ = (old->request_kind != real_packet->request_kind);
38555 if (differ) {
38556 BV_SET(fields, 4);
38557 }
38558
38559
38560#ifdef FREECIV_JSON_CONNECTION
38561 field_addr.name = "fields";
38562#endif /* FREECIV_JSON_CONNECTION */
38563 e = 0;
38564 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38565 if (e) {
38566 log_packet_detailed("fields bitvector error detected");
38567 }
38568
38569 if (BV_ISSET(fields, 0)) {
38570 log_packet_detailed(" field 'actor_id' has changed");
38571#ifdef FREECIV_JSON_CONNECTION
38572 field_addr.name = "actor_id";
38573#endif /* FREECIV_JSON_CONNECTION */
38574 e = 0;
38575 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38576 if (e) {
38577 log_packet_detailed("'actor_id' field error detected");
38578 }
38579 }
38580 if (BV_ISSET(fields, 1)) {
38581 log_packet_detailed(" field 'target_id' has changed");
38582#ifdef FREECIV_JSON_CONNECTION
38583 field_addr.name = "target_id";
38584#endif /* FREECIV_JSON_CONNECTION */
38585 e = 0;
38586 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38587 if (e) {
38588 log_packet_detailed("'target_id' field error detected");
38589 }
38590 }
38591 if (BV_ISSET(fields, 2)) {
38592 log_packet_detailed(" field 'cost' has changed");
38593#ifdef FREECIV_JSON_CONNECTION
38594 field_addr.name = "cost";
38595#endif /* FREECIV_JSON_CONNECTION */
38596 e = 0;
38597 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
38598 if (e) {
38599 log_packet_detailed("'cost' field error detected");
38600 }
38601 }
38602 if (BV_ISSET(fields, 3)) {
38603 log_packet_detailed(" field 'action_type' has changed");
38604#ifdef FREECIV_JSON_CONNECTION
38605 field_addr.name = "action_type";
38606#endif /* FREECIV_JSON_CONNECTION */
38607 e = 0;
38608 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38609 if (e) {
38610 log_packet_detailed("'action_type' field error detected");
38611 }
38612 }
38613 if (BV_ISSET(fields, 4)) {
38614 log_packet_detailed(" field 'request_kind' has changed");
38615#ifdef FREECIV_JSON_CONNECTION
38616 field_addr.name = "request_kind";
38617#endif /* FREECIV_JSON_CONNECTION */
38618 e = 0;
38619 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38620 if (e) {
38621 log_packet_detailed("'request_kind' field error detected");
38622 }
38623 }
38624
38625 *old = *real_packet;
38626#endif /* FREECIV_DELTA_PROTOCOL */
38627#ifndef FREECIV_DELTA_PROTOCOL
38628#ifdef FREECIV_JSON_CONNECTION
38629 field_addr.name = "actor_id";
38630#endif /* FREECIV_JSON_CONNECTION */
38631 e = 0;
38632 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_id);
38633 if (e) {
38634 log_packet_detailed("'actor_id' field error detected");
38635 }
38636#ifdef FREECIV_JSON_CONNECTION
38637 field_addr.name = "target_id";
38638#endif /* FREECIV_JSON_CONNECTION */
38639 e = 0;
38640 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_id);
38641 if (e) {
38642 log_packet_detailed("'target_id' field error detected");
38643 }
38644#ifdef FREECIV_JSON_CONNECTION
38645 field_addr.name = "cost";
38646#endif /* FREECIV_JSON_CONNECTION */
38647 e = 0;
38648 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->cost);
38649 if (e) {
38650 log_packet_detailed("'cost' field error detected");
38651 }
38652#ifdef FREECIV_JSON_CONNECTION
38653 field_addr.name = "action_type";
38654#endif /* FREECIV_JSON_CONNECTION */
38655 e = 0;
38656 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->action_type);
38657 if (e) {
38658 log_packet_detailed("'action_type' field error detected");
38659 }
38660#ifdef FREECIV_JSON_CONNECTION
38661 field_addr.name = "request_kind";
38662#endif /* FREECIV_JSON_CONNECTION */
38663 e = 0;
38664 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38665 if (e) {
38666 log_packet_detailed("'request_kind' field error detected");
38667 }
38668
38669#endif
38671}
38672
38674{
38675 if (!pc->used) {
38676 log_error("WARNING: trying to send data to the closed connection %s",
38678 return -1;
38679 }
38680 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet != NULL, -1,
38681 "Handler for PACKET_UNIT_ACTION_ANSWER not installed");
38682 return pc->phs.handlers->send[PACKET_UNIT_ACTION_ANSWER].packet(pc, packet);
38683}
38684
38685int dsend_packet_unit_action_answer(struct connection *pc, int actor_id, int target_id, int cost, action_id action_type, int request_kind)
38686{
38687 struct packet_unit_action_answer packet, *real_packet = &packet;
38688
38690 real_packet->target_id = target_id;
38691 real_packet->cost = cost;
38692 real_packet->action_type = action_type;
38693 real_packet->request_kind = request_kind;
38694
38696}
38697
38698#ifdef FREECIV_DELTA_PROTOCOL
38699#define hash_packet_unit_get_actions_100 hash_const
38700
38701#define cmp_packet_unit_get_actions_100 cmp_const
38702
38704#endif /* FREECIV_DELTA_PROTOCOL */
38705
38707{
38708#ifdef FREECIV_DELTA_PROTOCOL
38710 struct packet_unit_get_actions *old;
38711 struct genhash **hash = pc->phs.received + PACKET_UNIT_GET_ACTIONS;
38712#endif /* FREECIV_DELTA_PROTOCOL */
38714#ifdef FREECIV_JSON_CONNECTION
38715 struct plocation field_addr;
38716 {
38720 }
38721#endif /* FREECIV_JSON_CONNECTION */
38722
38723#ifdef FREECIV_DELTA_PROTOCOL
38724#ifdef FREECIV_JSON_CONNECTION
38725 field_addr.name = "fields";
38726#endif /* FREECIV_JSON_CONNECTION */
38727 DIO_BV_GET(&din, &field_addr, fields);
38728
38729#else /* FREECIV_DELTA_PROTOCOL */
38730#ifdef FREECIV_JSON_CONNECTION
38731 field_addr.name = "actor_unit_id";
38732#endif /* FREECIV_JSON_CONNECTION */
38733 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38735 }
38736#ifdef FREECIV_JSON_CONNECTION
38737 field_addr.name = "target_unit_id";
38738#endif /* FREECIV_JSON_CONNECTION */
38739 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38740 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38741 }
38742#ifdef FREECIV_JSON_CONNECTION
38743 field_addr.name = "target_tile_id";
38744#endif /* FREECIV_JSON_CONNECTION */
38745 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38746 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38747 }
38748#ifdef FREECIV_JSON_CONNECTION
38749 field_addr.name = "target_extra_id";
38750#endif /* FREECIV_JSON_CONNECTION */
38751 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38753 }
38754#ifdef FREECIV_JSON_CONNECTION
38755 field_addr.name = "request_kind";
38756#endif /* FREECIV_JSON_CONNECTION */
38757 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38758 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38759 }
38760#endif
38761 log_packet_detailed("packet_unit_get_actions_100: got info about ()");
38762
38763#ifdef FREECIV_DELTA_PROTOCOL
38764 if (NULL == *hash) {
38766 NULL, NULL, NULL, free);
38767 }
38768
38769 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
38770 *real_packet = *old;
38771 } else {
38772 log_packet_detailed(" no old info");
38773 memset(real_packet, 0, sizeof(*real_packet));
38774 }
38775
38776 if (BV_ISSET(fields, 0)) {
38777 log_packet_detailed(" got field 'actor_unit_id'");
38778#ifdef FREECIV_JSON_CONNECTION
38779 field_addr.name = "actor_unit_id";
38780#endif /* FREECIV_JSON_CONNECTION */
38781 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
38783 }
38784 }
38785 if (BV_ISSET(fields, 1)) {
38786 log_packet_detailed(" got field 'target_unit_id'");
38787#ifdef FREECIV_JSON_CONNECTION
38788 field_addr.name = "target_unit_id";
38789#endif /* FREECIV_JSON_CONNECTION */
38790 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
38791 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
38792 }
38793 }
38794 if (BV_ISSET(fields, 2)) {
38795 log_packet_detailed(" got field 'target_tile_id'");
38796#ifdef FREECIV_JSON_CONNECTION
38797 field_addr.name = "target_tile_id";
38798#endif /* FREECIV_JSON_CONNECTION */
38799 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
38800 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
38801 }
38802 }
38803 if (BV_ISSET(fields, 3)) {
38804 log_packet_detailed(" got field 'target_extra_id'");
38805#ifdef FREECIV_JSON_CONNECTION
38806 field_addr.name = "target_extra_id";
38807#endif /* FREECIV_JSON_CONNECTION */
38808 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
38810 }
38811 }
38812 if (BV_ISSET(fields, 4)) {
38813 log_packet_detailed(" got field 'request_kind'");
38814#ifdef FREECIV_JSON_CONNECTION
38815 field_addr.name = "request_kind";
38816#endif /* FREECIV_JSON_CONNECTION */
38817 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
38818 RECEIVE_PACKET_FIELD_ERROR(request_kind);
38819 }
38820 }
38821
38822 if (NULL == old) {
38823 old = fc_malloc(sizeof(*old));
38824 *old = *real_packet;
38825 genhash_insert(*hash, old, old);
38826 } else {
38827 *old = *real_packet;
38828 }
38829
38830#endif /* FREECIV_DELTA_PROTOCOL */
38832}
38833
38835{
38836 const struct packet_unit_get_actions *real_packet = packet;
38837 int e;
38838#ifdef FREECIV_DELTA_PROTOCOL
38840 struct packet_unit_get_actions *old;
38841 bool differ;
38842 struct genhash **hash = pc->phs.sent + PACKET_UNIT_GET_ACTIONS;
38843#endif /* FREECIV_DELTA_PROTOCOL */
38845#ifdef FREECIV_JSON_CONNECTION
38846 struct plocation field_addr;
38847 {
38851 }
38852#endif /* FREECIV_JSON_CONNECTION */
38853
38854 log_packet_detailed("packet_unit_get_actions_100: sending info about ()");
38855
38856#ifdef FREECIV_DELTA_PROTOCOL
38857 if (NULL == *hash) {
38859 NULL, NULL, NULL, free);
38860 }
38861 BV_CLR_ALL(fields);
38862
38863 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
38864 old = fc_malloc(sizeof(*old));
38865 *old = *real_packet;
38866 genhash_insert(*hash, old, old);
38867 memset(old, 0, sizeof(*old));
38868 }
38869 differ = (old->actor_unit_id != real_packet->actor_unit_id);
38870 if (differ) {
38871 BV_SET(fields, 0);
38872 }
38873
38874 differ = (old->target_unit_id != real_packet->target_unit_id);
38875 if (differ) {
38876 BV_SET(fields, 1);
38877 }
38878
38879 differ = (old->target_tile_id != real_packet->target_tile_id);
38880 if (differ) {
38881 BV_SET(fields, 2);
38882 }
38883
38884 differ = (old->target_extra_id != real_packet->target_extra_id);
38885 if (differ) {
38886 BV_SET(fields, 3);
38887 }
38888
38889 differ = (old->request_kind != real_packet->request_kind);
38890 if (differ) {
38891 BV_SET(fields, 4);
38892 }
38893
38894
38895#ifdef FREECIV_JSON_CONNECTION
38896 field_addr.name = "fields";
38897#endif /* FREECIV_JSON_CONNECTION */
38898 e = 0;
38899 e |= DIO_BV_PUT(&dout, &field_addr, fields);
38900 if (e) {
38901 log_packet_detailed("fields bitvector error detected");
38902 }
38903
38904 if (BV_ISSET(fields, 0)) {
38905 log_packet_detailed(" field 'actor_unit_id' has changed");
38906#ifdef FREECIV_JSON_CONNECTION
38907 field_addr.name = "actor_unit_id";
38908#endif /* FREECIV_JSON_CONNECTION */
38909 e = 0;
38910 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38911 if (e) {
38912 log_packet_detailed("'actor_unit_id' field error detected");
38913 }
38914 }
38915 if (BV_ISSET(fields, 1)) {
38916 log_packet_detailed(" field 'target_unit_id' has changed");
38917#ifdef FREECIV_JSON_CONNECTION
38918 field_addr.name = "target_unit_id";
38919#endif /* FREECIV_JSON_CONNECTION */
38920 e = 0;
38921 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
38922 if (e) {
38923 log_packet_detailed("'target_unit_id' field error detected");
38924 }
38925 }
38926 if (BV_ISSET(fields, 2)) {
38927 log_packet_detailed(" field 'target_tile_id' has changed");
38928#ifdef FREECIV_JSON_CONNECTION
38929 field_addr.name = "target_tile_id";
38930#endif /* FREECIV_JSON_CONNECTION */
38931 e = 0;
38932 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
38933 if (e) {
38934 log_packet_detailed("'target_tile_id' field error detected");
38935 }
38936 }
38937 if (BV_ISSET(fields, 3)) {
38938 log_packet_detailed(" field 'target_extra_id' has changed");
38939#ifdef FREECIV_JSON_CONNECTION
38940 field_addr.name = "target_extra_id";
38941#endif /* FREECIV_JSON_CONNECTION */
38942 e = 0;
38943 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
38944 if (e) {
38945 log_packet_detailed("'target_extra_id' field error detected");
38946 }
38947 }
38948 if (BV_ISSET(fields, 4)) {
38949 log_packet_detailed(" field 'request_kind' has changed");
38950#ifdef FREECIV_JSON_CONNECTION
38951 field_addr.name = "request_kind";
38952#endif /* FREECIV_JSON_CONNECTION */
38953 e = 0;
38954 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
38955 if (e) {
38956 log_packet_detailed("'request_kind' field error detected");
38957 }
38958 }
38959
38960 *old = *real_packet;
38961#endif /* FREECIV_DELTA_PROTOCOL */
38962#ifndef FREECIV_DELTA_PROTOCOL
38963#ifdef FREECIV_JSON_CONNECTION
38964 field_addr.name = "actor_unit_id";
38965#endif /* FREECIV_JSON_CONNECTION */
38966 e = 0;
38967 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
38968 if (e) {
38969 log_packet_detailed("'actor_unit_id' field error detected");
38970 }
38971#ifdef FREECIV_JSON_CONNECTION
38972 field_addr.name = "target_unit_id";
38973#endif /* FREECIV_JSON_CONNECTION */
38974 e = 0;
38975 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
38976 if (e) {
38977 log_packet_detailed("'target_unit_id' field error detected");
38978 }
38979#ifdef FREECIV_JSON_CONNECTION
38980 field_addr.name = "target_tile_id";
38981#endif /* FREECIV_JSON_CONNECTION */
38982 e = 0;
38983 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
38984 if (e) {
38985 log_packet_detailed("'target_tile_id' field error detected");
38986 }
38987#ifdef FREECIV_JSON_CONNECTION
38988 field_addr.name = "target_extra_id";
38989#endif /* FREECIV_JSON_CONNECTION */
38990 e = 0;
38991 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
38992 if (e) {
38993 log_packet_detailed("'target_extra_id' field error detected");
38994 }
38995#ifdef FREECIV_JSON_CONNECTION
38996 field_addr.name = "request_kind";
38997#endif /* FREECIV_JSON_CONNECTION */
38998 e = 0;
38999 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39000 if (e) {
39001 log_packet_detailed("'request_kind' field error detected");
39002 }
39003
39004#endif
39006}
39007
39009{
39010 if (!pc->used) {
39011 log_error("WARNING: trying to send data to the closed connection %s",
39013 return -1;
39014 }
39015 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet != NULL, -1,
39016 "Handler for PACKET_UNIT_GET_ACTIONS not installed");
39017 return pc->phs.handlers->send[PACKET_UNIT_GET_ACTIONS].packet(pc, packet);
39018}
39019
39020int 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)
39021{
39022 struct packet_unit_get_actions packet, *real_packet = &packet;
39023
39025 real_packet->target_unit_id = target_unit_id;
39026 real_packet->target_tile_id = target_tile_id;
39027 real_packet->target_extra_id = target_extra_id;
39028 real_packet->request_kind = request_kind;
39029
39031}
39032
39033#ifdef FREECIV_DELTA_PROTOCOL
39034#define hash_packet_unit_actions_100 hash_const
39035
39036#define cmp_packet_unit_actions_100 cmp_const
39037
39039#endif /* FREECIV_DELTA_PROTOCOL */
39040
39042{
39043#ifdef FREECIV_DELTA_PROTOCOL
39045 struct packet_unit_actions *old;
39046 struct genhash **hash = pc->phs.received + PACKET_UNIT_ACTIONS;
39047#endif /* FREECIV_DELTA_PROTOCOL */
39049#ifdef FREECIV_JSON_CONNECTION
39050 struct plocation field_addr;
39051 {
39055 }
39056#endif /* FREECIV_JSON_CONNECTION */
39057
39058#ifdef FREECIV_DELTA_PROTOCOL
39059#ifdef FREECIV_JSON_CONNECTION
39060 field_addr.name = "fields";
39061#endif /* FREECIV_JSON_CONNECTION */
39062 DIO_BV_GET(&din, &field_addr, fields);
39063
39064#else /* FREECIV_DELTA_PROTOCOL */
39065#ifdef FREECIV_JSON_CONNECTION
39066 field_addr.name = "actor_unit_id";
39067#endif /* FREECIV_JSON_CONNECTION */
39068 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
39070 }
39071#ifdef FREECIV_JSON_CONNECTION
39072 field_addr.name = "target_unit_id";
39073#endif /* FREECIV_JSON_CONNECTION */
39074 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
39075 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
39076 }
39077#ifdef FREECIV_JSON_CONNECTION
39078 field_addr.name = "target_city_id";
39079#endif /* FREECIV_JSON_CONNECTION */
39080 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
39081 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
39082 }
39083#ifdef FREECIV_JSON_CONNECTION
39084 field_addr.name = "target_tile_id";
39085#endif /* FREECIV_JSON_CONNECTION */
39086 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
39087 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
39088 }
39089#ifdef FREECIV_JSON_CONNECTION
39090 field_addr.name = "target_extra_id";
39091#endif /* FREECIV_JSON_CONNECTION */
39092 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
39094 }
39095#ifdef FREECIV_JSON_CONNECTION
39096 field_addr.name = "request_kind";
39097#endif /* FREECIV_JSON_CONNECTION */
39098 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
39099 RECEIVE_PACKET_FIELD_ERROR(request_kind);
39100 }
39101#ifdef FREECIV_JSON_CONNECTION
39102 field_addr.name = "action_probabilities";
39103#endif /* FREECIV_JSON_CONNECTION */
39104 {
39105 int i;
39106
39107#ifdef FREECIV_JSON_CONNECTION
39108 /* Enter array. */
39109 field_addr.sub_location = plocation_elem_new(0);
39110#endif /* FREECIV_JSON_CONNECTION */
39111
39112 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39113#ifdef FREECIV_JSON_CONNECTION
39114 field_addr.sub_location->number = i;
39115#endif /* FREECIV_JSON_CONNECTION */
39116
39117 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
39118 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
39119 }
39120 }
39121
39122#ifdef FREECIV_JSON_CONNECTION
39123 /* Exit array. */
39124 FC_FREE(field_addr.sub_location);
39125#endif /* FREECIV_JSON_CONNECTION */
39126 }
39127#endif
39128 log_packet_detailed("packet_unit_actions_100: got info about ()");
39129
39130#ifdef FREECIV_DELTA_PROTOCOL
39131 if (NULL == *hash) {
39133 NULL, NULL, NULL, free);
39134 }
39135
39136 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39137 *real_packet = *old;
39138 } else {
39139 log_packet_detailed(" no old info");
39140 memset(real_packet, 0, sizeof(*real_packet));
39141 }
39142
39143 if (BV_ISSET(fields, 0)) {
39144 log_packet_detailed(" got field 'actor_unit_id'");
39145#ifdef FREECIV_JSON_CONNECTION
39146 field_addr.name = "actor_unit_id";
39147#endif /* FREECIV_JSON_CONNECTION */
39148 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->actor_unit_id)) {
39150 }
39151 }
39152 if (BV_ISSET(fields, 1)) {
39153 log_packet_detailed(" got field 'target_unit_id'");
39154#ifdef FREECIV_JSON_CONNECTION
39155 field_addr.name = "target_unit_id";
39156#endif /* FREECIV_JSON_CONNECTION */
39157 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_unit_id)) {
39158 RECEIVE_PACKET_FIELD_ERROR(target_unit_id);
39159 }
39160 }
39161 if (BV_ISSET(fields, 2)) {
39162 log_packet_detailed(" got field 'target_city_id'");
39163#ifdef FREECIV_JSON_CONNECTION
39164 field_addr.name = "target_city_id";
39165#endif /* FREECIV_JSON_CONNECTION */
39166 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->target_city_id)) {
39167 RECEIVE_PACKET_FIELD_ERROR(target_city_id);
39168 }
39169 }
39170 if (BV_ISSET(fields, 3)) {
39171 log_packet_detailed(" got field 'target_tile_id'");
39172#ifdef FREECIV_JSON_CONNECTION
39173 field_addr.name = "target_tile_id";
39174#endif /* FREECIV_JSON_CONNECTION */
39175 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->target_tile_id)) {
39176 RECEIVE_PACKET_FIELD_ERROR(target_tile_id);
39177 }
39178 }
39179 if (BV_ISSET(fields, 4)) {
39180 log_packet_detailed(" got field 'target_extra_id'");
39181#ifdef FREECIV_JSON_CONNECTION
39182 field_addr.name = "target_extra_id";
39183#endif /* FREECIV_JSON_CONNECTION */
39184 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target_extra_id)) {
39186 }
39187 }
39188 if (BV_ISSET(fields, 5)) {
39189 log_packet_detailed(" got field 'request_kind'");
39190#ifdef FREECIV_JSON_CONNECTION
39191 field_addr.name = "request_kind";
39192#endif /* FREECIV_JSON_CONNECTION */
39193 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->request_kind)) {
39194 RECEIVE_PACKET_FIELD_ERROR(request_kind);
39195 }
39196 }
39197 if (BV_ISSET(fields, 6)) {
39198 log_packet_detailed(" got field 'action_probabilities'");
39199#ifdef FREECIV_JSON_CONNECTION
39200 field_addr.name = "action_probabilities";
39201#endif /* FREECIV_JSON_CONNECTION */
39202 {
39203 int i;
39204
39205#ifdef FREECIV_JSON_CONNECTION
39206 /* Enter array. */
39207 field_addr.sub_location = plocation_elem_new(0);
39208#endif /* FREECIV_JSON_CONNECTION */
39209
39210 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39211#ifdef FREECIV_JSON_CONNECTION
39212 field_addr.sub_location->number = i;
39213#endif /* FREECIV_JSON_CONNECTION */
39214
39215 if (!DIO_GET(action_probability, &din, &field_addr, &real_packet->action_probabilities[i])) {
39216 RECEIVE_PACKET_FIELD_ERROR(action_probabilities);
39217 }
39218 }
39219
39220#ifdef FREECIV_JSON_CONNECTION
39221 /* Exit array. */
39222 FC_FREE(field_addr.sub_location);
39223#endif /* FREECIV_JSON_CONNECTION */
39224 }
39225 }
39226
39227 if (NULL == old) {
39228 old = fc_malloc(sizeof(*old));
39229 *old = *real_packet;
39230 genhash_insert(*hash, old, old);
39231 } else {
39232 *old = *real_packet;
39233 }
39234
39235#endif /* FREECIV_DELTA_PROTOCOL */
39237}
39238
39239static int send_packet_unit_actions_100(struct connection *pc, const struct packet_unit_actions *packet)
39240{
39241 const struct packet_unit_actions *real_packet = packet;
39242 int e;
39243#ifdef FREECIV_DELTA_PROTOCOL
39245 struct packet_unit_actions *old;
39246 bool differ;
39247 struct genhash **hash = pc->phs.sent + PACKET_UNIT_ACTIONS;
39248#endif /* FREECIV_DELTA_PROTOCOL */
39250#ifdef FREECIV_JSON_CONNECTION
39251 struct plocation field_addr;
39252 {
39256 }
39257#endif /* FREECIV_JSON_CONNECTION */
39258
39259 log_packet_detailed("packet_unit_actions_100: sending info about ()");
39260
39261#ifdef FREECIV_DELTA_PROTOCOL
39262 if (NULL == *hash) {
39264 NULL, NULL, NULL, free);
39265 }
39266 BV_CLR_ALL(fields);
39267
39268 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39269 old = fc_malloc(sizeof(*old));
39270 *old = *real_packet;
39271 genhash_insert(*hash, old, old);
39272 memset(old, 0, sizeof(*old));
39273 }
39274 differ = (old->actor_unit_id != real_packet->actor_unit_id);
39275 if (differ) {
39276 BV_SET(fields, 0);
39277 }
39278
39279 differ = (old->target_unit_id != real_packet->target_unit_id);
39280 if (differ) {
39281 BV_SET(fields, 1);
39282 }
39283
39284 differ = (old->target_city_id != real_packet->target_city_id);
39285 if (differ) {
39286 BV_SET(fields, 2);
39287 }
39288
39289 differ = (old->target_tile_id != real_packet->target_tile_id);
39290 if (differ) {
39291 BV_SET(fields, 3);
39292 }
39293
39294 differ = (old->target_extra_id != real_packet->target_extra_id);
39295 if (differ) {
39296 BV_SET(fields, 4);
39297 }
39298
39299 differ = (old->request_kind != real_packet->request_kind);
39300 if (differ) {
39301 BV_SET(fields, 5);
39302 }
39303
39304 differ = FALSE;
39305 {
39306 int i;
39307
39308 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39309 differ = !are_action_probabilitys_equal(&old->action_probabilities[i], &real_packet->action_probabilities[i]);
39310 if (differ) {
39311 break;
39312 }
39313 }
39314 }
39315 if (differ) {
39316 BV_SET(fields, 6);
39317 }
39318
39319
39320#ifdef FREECIV_JSON_CONNECTION
39321 field_addr.name = "fields";
39322#endif /* FREECIV_JSON_CONNECTION */
39323 e = 0;
39324 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39325 if (e) {
39326 log_packet_detailed("fields bitvector error detected");
39327 }
39328
39329 if (BV_ISSET(fields, 0)) {
39330 log_packet_detailed(" field 'actor_unit_id' has changed");
39331#ifdef FREECIV_JSON_CONNECTION
39332 field_addr.name = "actor_unit_id";
39333#endif /* FREECIV_JSON_CONNECTION */
39334 e = 0;
39335 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
39336 if (e) {
39337 log_packet_detailed("'actor_unit_id' field error detected");
39338 }
39339 }
39340 if (BV_ISSET(fields, 1)) {
39341 log_packet_detailed(" field 'target_unit_id' has changed");
39342#ifdef FREECIV_JSON_CONNECTION
39343 field_addr.name = "target_unit_id";
39344#endif /* FREECIV_JSON_CONNECTION */
39345 e = 0;
39346 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
39347 if (e) {
39348 log_packet_detailed("'target_unit_id' field error detected");
39349 }
39350 }
39351 if (BV_ISSET(fields, 2)) {
39352 log_packet_detailed(" field 'target_city_id' has changed");
39353#ifdef FREECIV_JSON_CONNECTION
39354 field_addr.name = "target_city_id";
39355#endif /* FREECIV_JSON_CONNECTION */
39356 e = 0;
39357 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
39358 if (e) {
39359 log_packet_detailed("'target_city_id' field error detected");
39360 }
39361 }
39362 if (BV_ISSET(fields, 3)) {
39363 log_packet_detailed(" field 'target_tile_id' has changed");
39364#ifdef FREECIV_JSON_CONNECTION
39365 field_addr.name = "target_tile_id";
39366#endif /* FREECIV_JSON_CONNECTION */
39367 e = 0;
39368 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
39369 if (e) {
39370 log_packet_detailed("'target_tile_id' field error detected");
39371 }
39372 }
39373 if (BV_ISSET(fields, 4)) {
39374 log_packet_detailed(" field 'target_extra_id' has changed");
39375#ifdef FREECIV_JSON_CONNECTION
39376 field_addr.name = "target_extra_id";
39377#endif /* FREECIV_JSON_CONNECTION */
39378 e = 0;
39379 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
39380 if (e) {
39381 log_packet_detailed("'target_extra_id' field error detected");
39382 }
39383 }
39384 if (BV_ISSET(fields, 5)) {
39385 log_packet_detailed(" field 'request_kind' has changed");
39386#ifdef FREECIV_JSON_CONNECTION
39387 field_addr.name = "request_kind";
39388#endif /* FREECIV_JSON_CONNECTION */
39389 e = 0;
39390 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39391 if (e) {
39392 log_packet_detailed("'request_kind' field error detected");
39393 }
39394 }
39395 if (BV_ISSET(fields, 6)) {
39396 log_packet_detailed(" field 'action_probabilities' has changed");
39397#ifdef FREECIV_JSON_CONNECTION
39398 field_addr.name = "action_probabilities";
39399#endif /* FREECIV_JSON_CONNECTION */
39400 e = 0;
39401 {
39402 int i;
39403
39404#ifdef FREECIV_JSON_CONNECTION
39405 /* Create the array. */
39407
39408 /* Enter the array. */
39409 field_addr.sub_location = plocation_elem_new(0);
39410#endif /* FREECIV_JSON_CONNECTION */
39411
39412 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39413#ifdef FREECIV_JSON_CONNECTION
39414 /* Next array element. */
39415 field_addr.sub_location->number = i;
39416#endif /* FREECIV_JSON_CONNECTION */
39417
39418 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
39419 }
39420
39421#ifdef FREECIV_JSON_CONNECTION
39422 /* Exit array. */
39423 FC_FREE(field_addr.sub_location);
39424#endif /* FREECIV_JSON_CONNECTION */
39425 }
39426 if (e) {
39427 log_packet_detailed("'action_probabilities' field error detected");
39428 }
39429 }
39430
39431 *old = *real_packet;
39432#endif /* FREECIV_DELTA_PROTOCOL */
39433#ifndef FREECIV_DELTA_PROTOCOL
39434#ifdef FREECIV_JSON_CONNECTION
39435 field_addr.name = "actor_unit_id";
39436#endif /* FREECIV_JSON_CONNECTION */
39437 e = 0;
39438 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->actor_unit_id);
39439 if (e) {
39440 log_packet_detailed("'actor_unit_id' field error detected");
39441 }
39442#ifdef FREECIV_JSON_CONNECTION
39443 field_addr.name = "target_unit_id";
39444#endif /* FREECIV_JSON_CONNECTION */
39445 e = 0;
39446 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_unit_id);
39447 if (e) {
39448 log_packet_detailed("'target_unit_id' field error detected");
39449 }
39450#ifdef FREECIV_JSON_CONNECTION
39451 field_addr.name = "target_city_id";
39452#endif /* FREECIV_JSON_CONNECTION */
39453 e = 0;
39454 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->target_city_id);
39455 if (e) {
39456 log_packet_detailed("'target_city_id' field error detected");
39457 }
39458#ifdef FREECIV_JSON_CONNECTION
39459 field_addr.name = "target_tile_id";
39460#endif /* FREECIV_JSON_CONNECTION */
39461 e = 0;
39462 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->target_tile_id);
39463 if (e) {
39464 log_packet_detailed("'target_tile_id' field error detected");
39465 }
39466#ifdef FREECIV_JSON_CONNECTION
39467 field_addr.name = "target_extra_id";
39468#endif /* FREECIV_JSON_CONNECTION */
39469 e = 0;
39470 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_extra_id);
39471 if (e) {
39472 log_packet_detailed("'target_extra_id' field error detected");
39473 }
39474#ifdef FREECIV_JSON_CONNECTION
39475 field_addr.name = "request_kind";
39476#endif /* FREECIV_JSON_CONNECTION */
39477 e = 0;
39478 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->request_kind);
39479 if (e) {
39480 log_packet_detailed("'request_kind' field error detected");
39481 }
39482#ifdef FREECIV_JSON_CONNECTION
39483 field_addr.name = "action_probabilities";
39484#endif /* FREECIV_JSON_CONNECTION */
39485 e = 0;
39486 {
39487 int i;
39488
39489#ifdef FREECIV_JSON_CONNECTION
39490 /* Create the array. */
39492
39493 /* Enter the array. */
39494 field_addr.sub_location = plocation_elem_new(0);
39495#endif /* FREECIV_JSON_CONNECTION */
39496
39497 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39498#ifdef FREECIV_JSON_CONNECTION
39499 /* Next array element. */
39500 field_addr.sub_location->number = i;
39501#endif /* FREECIV_JSON_CONNECTION */
39502
39503 e |= DIO_PUT(action_probability, &dout, &field_addr, &real_packet->action_probabilities[i]);
39504 }
39505
39506#ifdef FREECIV_JSON_CONNECTION
39507 /* Exit array. */
39508 FC_FREE(field_addr.sub_location);
39509#endif /* FREECIV_JSON_CONNECTION */
39510 }
39511 if (e) {
39512 log_packet_detailed("'action_probabilities' field error detected");
39513 }
39514
39515#endif
39517}
39518
39520{
39521 if (!pc->used) {
39522 log_error("WARNING: trying to send data to the closed connection %s",
39524 return -1;
39525 }
39526 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet != NULL, -1,
39527 "Handler for PACKET_UNIT_ACTIONS not installed");
39528 return pc->phs.handlers->send[PACKET_UNIT_ACTIONS].packet(pc, packet);
39529}
39530
39531int 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)
39532{
39533 struct packet_unit_actions packet, *real_packet = &packet;
39534
39536 real_packet->target_unit_id = target_unit_id;
39537 real_packet->target_city_id = target_city_id;
39538 real_packet->target_tile_id = target_tile_id;
39539 real_packet->target_extra_id = target_extra_id;
39540 real_packet->request_kind = request_kind;
39541 {
39542 int i;
39543
39544 for (i = 0; i < MAX_NUM_ACTIONS; i++) {
39545 real_packet->action_probabilities[i] = action_probabilities[i];
39546 }
39547 }
39548
39550}
39551
39552#ifdef FREECIV_DELTA_PROTOCOL
39553#define hash_packet_unit_change_activity_100 hash_const
39554
39555#define cmp_packet_unit_change_activity_100 cmp_const
39556
39558#endif /* FREECIV_DELTA_PROTOCOL */
39559
39561{
39562#ifdef FREECIV_DELTA_PROTOCOL
39564 struct packet_unit_change_activity *old;
39565 struct genhash **hash = pc->phs.received + PACKET_UNIT_CHANGE_ACTIVITY;
39566#endif /* FREECIV_DELTA_PROTOCOL */
39568#ifdef FREECIV_JSON_CONNECTION
39569 struct plocation field_addr;
39570 {
39574 }
39575#endif /* FREECIV_JSON_CONNECTION */
39576
39577#ifdef FREECIV_DELTA_PROTOCOL
39578#ifdef FREECIV_JSON_CONNECTION
39579 field_addr.name = "fields";
39580#endif /* FREECIV_JSON_CONNECTION */
39581 DIO_BV_GET(&din, &field_addr, fields);
39582
39583#else /* FREECIV_DELTA_PROTOCOL */
39584#ifdef FREECIV_JSON_CONNECTION
39585 field_addr.name = "unit_id";
39586#endif /* FREECIV_JSON_CONNECTION */
39587 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
39589 }
39590#ifdef FREECIV_JSON_CONNECTION
39591 field_addr.name = "activity";
39592#endif /* FREECIV_JSON_CONNECTION */
39593 {
39594 int readin;
39595
39596 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39598 }
39599 real_packet->activity = readin;
39600 }
39601#ifdef FREECIV_JSON_CONNECTION
39602 field_addr.name = "target";
39603#endif /* FREECIV_JSON_CONNECTION */
39604 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
39606 }
39607#endif
39608 log_packet_detailed("packet_unit_change_activity_100: got info about ()");
39609
39610#ifdef FREECIV_DELTA_PROTOCOL
39611 if (NULL == *hash) {
39613 NULL, NULL, NULL, free);
39614 }
39615
39616 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39617 *real_packet = *old;
39618 } else {
39619 log_packet_detailed(" no old info");
39620 memset(real_packet, 0, sizeof(*real_packet));
39621 }
39622
39623 if (BV_ISSET(fields, 0)) {
39624 log_packet_detailed(" got field 'unit_id'");
39625#ifdef FREECIV_JSON_CONNECTION
39626 field_addr.name = "unit_id";
39627#endif /* FREECIV_JSON_CONNECTION */
39628 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->unit_id)) {
39630 }
39631 }
39632 if (BV_ISSET(fields, 1)) {
39633 log_packet_detailed(" got field 'activity'");
39634#ifdef FREECIV_JSON_CONNECTION
39635 field_addr.name = "activity";
39636#endif /* FREECIV_JSON_CONNECTION */
39637 {
39638 int readin;
39639
39640 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
39642 }
39643 real_packet->activity = readin;
39644 }
39645 }
39646 if (BV_ISSET(fields, 2)) {
39647 log_packet_detailed(" got field 'target'");
39648#ifdef FREECIV_JSON_CONNECTION
39649 field_addr.name = "target";
39650#endif /* FREECIV_JSON_CONNECTION */
39651 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->target)) {
39653 }
39654 }
39655
39656 if (NULL == old) {
39657 old = fc_malloc(sizeof(*old));
39658 *old = *real_packet;
39659 genhash_insert(*hash, old, old);
39660 } else {
39661 *old = *real_packet;
39662 }
39663
39664#endif /* FREECIV_DELTA_PROTOCOL */
39666}
39667
39669{
39670 const struct packet_unit_change_activity *real_packet = packet;
39671 int e;
39672#ifdef FREECIV_DELTA_PROTOCOL
39674 struct packet_unit_change_activity *old;
39675 bool differ;
39676 struct genhash **hash = pc->phs.sent + PACKET_UNIT_CHANGE_ACTIVITY;
39677#endif /* FREECIV_DELTA_PROTOCOL */
39679#ifdef FREECIV_JSON_CONNECTION
39680 struct plocation field_addr;
39681 {
39685 }
39686#endif /* FREECIV_JSON_CONNECTION */
39687
39688 log_packet_detailed("packet_unit_change_activity_100: sending info about ()");
39689
39690#ifdef FREECIV_DELTA_PROTOCOL
39691 if (NULL == *hash) {
39693 NULL, NULL, NULL, free);
39694 }
39695 BV_CLR_ALL(fields);
39696
39697 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39698 old = fc_malloc(sizeof(*old));
39699 *old = *real_packet;
39700 genhash_insert(*hash, old, old);
39701 memset(old, 0, sizeof(*old));
39702 }
39703 differ = (old->unit_id != real_packet->unit_id);
39704 if (differ) {
39705 BV_SET(fields, 0);
39706 }
39707
39708 differ = (old->activity != real_packet->activity);
39709 if (differ) {
39710 BV_SET(fields, 1);
39711 }
39712
39713 differ = (old->target != real_packet->target);
39714 if (differ) {
39715 BV_SET(fields, 2);
39716 }
39717
39718
39719#ifdef FREECIV_JSON_CONNECTION
39720 field_addr.name = "fields";
39721#endif /* FREECIV_JSON_CONNECTION */
39722 e = 0;
39723 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39724 if (e) {
39725 log_packet_detailed("fields bitvector error detected");
39726 }
39727
39728 if (BV_ISSET(fields, 0)) {
39729 log_packet_detailed(" field 'unit_id' has changed");
39730#ifdef FREECIV_JSON_CONNECTION
39731 field_addr.name = "unit_id";
39732#endif /* FREECIV_JSON_CONNECTION */
39733 e = 0;
39734 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
39735 if (e) {
39736 log_packet_detailed("'unit_id' field error detected");
39737 }
39738 }
39739 if (BV_ISSET(fields, 1)) {
39740 log_packet_detailed(" field 'activity' has changed");
39741#ifdef FREECIV_JSON_CONNECTION
39742 field_addr.name = "activity";
39743#endif /* FREECIV_JSON_CONNECTION */
39744 e = 0;
39745 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
39746 if (e) {
39747 log_packet_detailed("'activity' field error detected");
39748 }
39749 }
39750 if (BV_ISSET(fields, 2)) {
39751 log_packet_detailed(" field 'target' has changed");
39752#ifdef FREECIV_JSON_CONNECTION
39753 field_addr.name = "target";
39754#endif /* FREECIV_JSON_CONNECTION */
39755 e = 0;
39756 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
39757 if (e) {
39758 log_packet_detailed("'target' field error detected");
39759 }
39760 }
39761
39762 *old = *real_packet;
39763#endif /* FREECIV_DELTA_PROTOCOL */
39764#ifndef FREECIV_DELTA_PROTOCOL
39765#ifdef FREECIV_JSON_CONNECTION
39766 field_addr.name = "unit_id";
39767#endif /* FREECIV_JSON_CONNECTION */
39768 e = 0;
39769 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->unit_id);
39770 if (e) {
39771 log_packet_detailed("'unit_id' field error detected");
39772 }
39773#ifdef FREECIV_JSON_CONNECTION
39774 field_addr.name = "activity";
39775#endif /* FREECIV_JSON_CONNECTION */
39776 e = 0;
39777 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
39778 if (e) {
39779 log_packet_detailed("'activity' field error detected");
39780 }
39781#ifdef FREECIV_JSON_CONNECTION
39782 field_addr.name = "target";
39783#endif /* FREECIV_JSON_CONNECTION */
39784 e = 0;
39785 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target);
39786 if (e) {
39787 log_packet_detailed("'target' field error detected");
39788 }
39789
39790#endif
39792}
39793
39795{
39796 if (!pc->used) {
39797 log_error("WARNING: trying to send data to the closed connection %s",
39799 return -1;
39800 }
39801 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet != NULL, -1,
39802 "Handler for PACKET_UNIT_CHANGE_ACTIVITY not installed");
39803 return pc->phs.handlers->send[PACKET_UNIT_CHANGE_ACTIVITY].packet(pc, packet);
39804}
39805
39806int dsend_packet_unit_change_activity(struct connection *pc, int unit_id, enum unit_activity activity, int target)
39807{
39808 struct packet_unit_change_activity packet, *real_packet = &packet;
39809
39811 real_packet->activity = activity;
39812 real_packet->target = target;
39813
39815}
39816
39817#ifdef FREECIV_DELTA_PROTOCOL
39818#define hash_packet_diplomacy_init_meeting_req_100 hash_const
39819
39820#define cmp_packet_diplomacy_init_meeting_req_100 cmp_const
39821
39823#endif /* FREECIV_DELTA_PROTOCOL */
39824
39826{
39827#ifdef FREECIV_DELTA_PROTOCOL
39830 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING_REQ;
39831#endif /* FREECIV_DELTA_PROTOCOL */
39833#ifdef FREECIV_JSON_CONNECTION
39834 struct plocation field_addr;
39835 {
39839 }
39840#endif /* FREECIV_JSON_CONNECTION */
39841
39842#ifdef FREECIV_DELTA_PROTOCOL
39843#ifdef FREECIV_JSON_CONNECTION
39844 field_addr.name = "fields";
39845#endif /* FREECIV_JSON_CONNECTION */
39846 DIO_BV_GET(&din, &field_addr, fields);
39847
39848#else /* FREECIV_DELTA_PROTOCOL */
39849#ifdef FREECIV_JSON_CONNECTION
39850 field_addr.name = "counterpart";
39851#endif /* FREECIV_JSON_CONNECTION */
39852 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
39853 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39854 }
39855#endif
39856 log_packet_detailed("packet_diplomacy_init_meeting_req_100: got info about ()");
39857
39858#ifdef FREECIV_DELTA_PROTOCOL
39859 if (NULL == *hash) {
39861 NULL, NULL, NULL, free);
39862 }
39863
39864 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
39865 *real_packet = *old;
39866 } else {
39867 log_packet_detailed(" no old info");
39868 memset(real_packet, 0, sizeof(*real_packet));
39869 }
39870
39871 if (BV_ISSET(fields, 0)) {
39872 log_packet_detailed(" got field 'counterpart'");
39873#ifdef FREECIV_JSON_CONNECTION
39874 field_addr.name = "counterpart";
39875#endif /* FREECIV_JSON_CONNECTION */
39876 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
39877 RECEIVE_PACKET_FIELD_ERROR(counterpart);
39878 }
39879 }
39880
39881 if (NULL == old) {
39882 old = fc_malloc(sizeof(*old));
39883 *old = *real_packet;
39884 genhash_insert(*hash, old, old);
39885 } else {
39886 *old = *real_packet;
39887 }
39888
39889#endif /* FREECIV_DELTA_PROTOCOL */
39891}
39892
39894{
39895 const struct packet_diplomacy_init_meeting_req *real_packet = packet;
39896 int e;
39897#ifdef FREECIV_DELTA_PROTOCOL
39900 bool differ;
39901 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING_REQ;
39902#endif /* FREECIV_DELTA_PROTOCOL */
39904#ifdef FREECIV_JSON_CONNECTION
39905 struct plocation field_addr;
39906 {
39910 }
39911#endif /* FREECIV_JSON_CONNECTION */
39912
39913 log_packet_detailed("packet_diplomacy_init_meeting_req_100: sending info about ()");
39914
39915#ifdef FREECIV_DELTA_PROTOCOL
39916 if (NULL == *hash) {
39918 NULL, NULL, NULL, free);
39919 }
39920 BV_CLR_ALL(fields);
39921
39922 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
39923 old = fc_malloc(sizeof(*old));
39924 *old = *real_packet;
39925 genhash_insert(*hash, old, old);
39926 memset(old, 0, sizeof(*old));
39927 }
39928 differ = (old->counterpart != real_packet->counterpart);
39929 if (differ) {
39930 BV_SET(fields, 0);
39931 }
39932
39933
39934#ifdef FREECIV_JSON_CONNECTION
39935 field_addr.name = "fields";
39936#endif /* FREECIV_JSON_CONNECTION */
39937 e = 0;
39938 e |= DIO_BV_PUT(&dout, &field_addr, fields);
39939 if (e) {
39940 log_packet_detailed("fields bitvector error detected");
39941 }
39942
39943 if (BV_ISSET(fields, 0)) {
39944 log_packet_detailed(" field 'counterpart' has changed");
39945#ifdef FREECIV_JSON_CONNECTION
39946 field_addr.name = "counterpart";
39947#endif /* FREECIV_JSON_CONNECTION */
39948 e = 0;
39949 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
39950 if (e) {
39951 log_packet_detailed("'counterpart' field error detected");
39952 }
39953 }
39954
39955 *old = *real_packet;
39956#endif /* FREECIV_DELTA_PROTOCOL */
39957#ifndef FREECIV_DELTA_PROTOCOL
39958#ifdef FREECIV_JSON_CONNECTION
39959 field_addr.name = "counterpart";
39960#endif /* FREECIV_JSON_CONNECTION */
39961 e = 0;
39962 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
39963 if (e) {
39964 log_packet_detailed("'counterpart' field error detected");
39965 }
39966
39967#endif
39969}
39970
39972{
39973 if (!pc->used) {
39974 log_error("WARNING: trying to send data to the closed connection %s",
39976 return -1;
39977 }
39978 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet != NULL, -1,
39979 "Handler for PACKET_DIPLOMACY_INIT_MEETING_REQ not installed");
39980 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING_REQ].packet(pc, packet);
39981}
39982
39984{
39985 struct packet_diplomacy_init_meeting_req packet, *real_packet = &packet;
39986
39988
39990}
39991
39992#ifdef FREECIV_DELTA_PROTOCOL
39993#define hash_packet_diplomacy_init_meeting_100 hash_const
39994
39995#define cmp_packet_diplomacy_init_meeting_100 cmp_const
39996
39998#endif /* FREECIV_DELTA_PROTOCOL */
39999
40001{
40002#ifdef FREECIV_DELTA_PROTOCOL
40005 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_INIT_MEETING;
40006#endif /* FREECIV_DELTA_PROTOCOL */
40008#ifdef FREECIV_JSON_CONNECTION
40009 struct plocation field_addr;
40010 {
40014 }
40015#endif /* FREECIV_JSON_CONNECTION */
40016
40017#ifdef FREECIV_DELTA_PROTOCOL
40018#ifdef FREECIV_JSON_CONNECTION
40019 field_addr.name = "fields";
40020#endif /* FREECIV_JSON_CONNECTION */
40021 DIO_BV_GET(&din, &field_addr, fields);
40022
40023#else /* FREECIV_DELTA_PROTOCOL */
40024#ifdef FREECIV_JSON_CONNECTION
40025 field_addr.name = "counterpart";
40026#endif /* FREECIV_JSON_CONNECTION */
40027 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40028 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40029 }
40030#ifdef FREECIV_JSON_CONNECTION
40031 field_addr.name = "initiated_from";
40032#endif /* FREECIV_JSON_CONNECTION */
40033 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->initiated_from)) {
40034 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40035 }
40036#endif
40037 log_packet_detailed("packet_diplomacy_init_meeting_100: got info about ()");
40038
40039#ifdef FREECIV_DELTA_PROTOCOL
40040 if (NULL == *hash) {
40042 NULL, NULL, NULL, free);
40043 }
40044
40045 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40046 *real_packet = *old;
40047 } else {
40048 log_packet_detailed(" no old info");
40049 memset(real_packet, 0, sizeof(*real_packet));
40050 }
40051
40052 if (BV_ISSET(fields, 0)) {
40053 log_packet_detailed(" got field 'counterpart'");
40054#ifdef FREECIV_JSON_CONNECTION
40055 field_addr.name = "counterpart";
40056#endif /* FREECIV_JSON_CONNECTION */
40057 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40058 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40059 }
40060 }
40061 if (BV_ISSET(fields, 1)) {
40062 log_packet_detailed(" got field 'initiated_from'");
40063#ifdef FREECIV_JSON_CONNECTION
40064 field_addr.name = "initiated_from";
40065#endif /* FREECIV_JSON_CONNECTION */
40066 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->initiated_from)) {
40067 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40068 }
40069 }
40070
40071 if (NULL == old) {
40072 old = fc_malloc(sizeof(*old));
40073 *old = *real_packet;
40074 genhash_insert(*hash, old, old);
40075 } else {
40076 *old = *real_packet;
40077 }
40078
40079#endif /* FREECIV_DELTA_PROTOCOL */
40081}
40082
40084{
40085 const struct packet_diplomacy_init_meeting *real_packet = packet;
40086 int e;
40087#ifdef FREECIV_DELTA_PROTOCOL
40090 bool differ;
40091 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_INIT_MEETING;
40092#endif /* FREECIV_DELTA_PROTOCOL */
40094#ifdef FREECIV_JSON_CONNECTION
40095 struct plocation field_addr;
40096 {
40100 }
40101#endif /* FREECIV_JSON_CONNECTION */
40102
40103 log_packet_detailed("packet_diplomacy_init_meeting_100: sending info about ()");
40104
40105#ifdef FREECIV_DELTA_PROTOCOL
40106 if (NULL == *hash) {
40108 NULL, NULL, NULL, free);
40109 }
40110 BV_CLR_ALL(fields);
40111
40112 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40113 old = fc_malloc(sizeof(*old));
40114 *old = *real_packet;
40115 genhash_insert(*hash, old, old);
40116 memset(old, 0, sizeof(*old));
40117 }
40118 differ = (old->counterpart != real_packet->counterpart);
40119 if (differ) {
40120 BV_SET(fields, 0);
40121 }
40122
40123 differ = (old->initiated_from != real_packet->initiated_from);
40124 if (differ) {
40125 BV_SET(fields, 1);
40126 }
40127
40128
40129#ifdef FREECIV_JSON_CONNECTION
40130 field_addr.name = "fields";
40131#endif /* FREECIV_JSON_CONNECTION */
40132 e = 0;
40133 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40134 if (e) {
40135 log_packet_detailed("fields bitvector error detected");
40136 }
40137
40138 if (BV_ISSET(fields, 0)) {
40139 log_packet_detailed(" field 'counterpart' has changed");
40140#ifdef FREECIV_JSON_CONNECTION
40141 field_addr.name = "counterpart";
40142#endif /* FREECIV_JSON_CONNECTION */
40143 e = 0;
40144 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
40145 if (e) {
40146 log_packet_detailed("'counterpart' field error detected");
40147 }
40148 }
40149 if (BV_ISSET(fields, 1)) {
40150 log_packet_detailed(" field 'initiated_from' has changed");
40151#ifdef FREECIV_JSON_CONNECTION
40152 field_addr.name = "initiated_from";
40153#endif /* FREECIV_JSON_CONNECTION */
40154 e = 0;
40155 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->initiated_from);
40156 if (e) {
40157 log_packet_detailed("'initiated_from' field error detected");
40158 }
40159 }
40160
40161 *old = *real_packet;
40162#endif /* FREECIV_DELTA_PROTOCOL */
40163#ifndef FREECIV_DELTA_PROTOCOL
40164#ifdef FREECIV_JSON_CONNECTION
40165 field_addr.name = "counterpart";
40166#endif /* FREECIV_JSON_CONNECTION */
40167 e = 0;
40168 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
40169 if (e) {
40170 log_packet_detailed("'counterpart' field error detected");
40171 }
40172#ifdef FREECIV_JSON_CONNECTION
40173 field_addr.name = "initiated_from";
40174#endif /* FREECIV_JSON_CONNECTION */
40175 e = 0;
40176 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->initiated_from);
40177 if (e) {
40178 log_packet_detailed("'initiated_from' field error detected");
40179 }
40180
40181#endif
40183}
40184
40186{
40187 if (!pc->used) {
40188 log_error("WARNING: trying to send data to the closed connection %s",
40190 return -1;
40191 }
40192 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet != NULL, -1,
40193 "Handler for PACKET_DIPLOMACY_INIT_MEETING not installed");
40194 return pc->phs.handlers->send[PACKET_DIPLOMACY_INIT_MEETING].packet(pc, packet);
40195}
40196
40203
40204int dsend_packet_diplomacy_init_meeting(struct connection *pc, int counterpart, int initiated_from)
40205{
40206 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
40207
40209 real_packet->initiated_from = initiated_from;
40210
40212}
40213
40215{
40216 struct packet_diplomacy_init_meeting packet, *real_packet = &packet;
40217
40219 real_packet->initiated_from = initiated_from;
40220
40222}
40223
40224#ifdef FREECIV_DELTA_PROTOCOL
40225#define hash_packet_diplomacy_cancel_meeting_req_100 hash_const
40226
40227#define cmp_packet_diplomacy_cancel_meeting_req_100 cmp_const
40228
40230#endif /* FREECIV_DELTA_PROTOCOL */
40231
40233{
40234#ifdef FREECIV_DELTA_PROTOCOL
40237 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
40238#endif /* FREECIV_DELTA_PROTOCOL */
40240#ifdef FREECIV_JSON_CONNECTION
40241 struct plocation field_addr;
40242 {
40246 }
40247#endif /* FREECIV_JSON_CONNECTION */
40248
40249#ifdef FREECIV_DELTA_PROTOCOL
40250#ifdef FREECIV_JSON_CONNECTION
40251 field_addr.name = "fields";
40252#endif /* FREECIV_JSON_CONNECTION */
40253 DIO_BV_GET(&din, &field_addr, fields);
40254
40255#else /* FREECIV_DELTA_PROTOCOL */
40256#ifdef FREECIV_JSON_CONNECTION
40257 field_addr.name = "counterpart";
40258#endif /* FREECIV_JSON_CONNECTION */
40259 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40260 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40261 }
40262#endif
40263 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: got info about ()");
40264
40265#ifdef FREECIV_DELTA_PROTOCOL
40266 if (NULL == *hash) {
40268 NULL, NULL, NULL, free);
40269 }
40270
40271 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40272 *real_packet = *old;
40273 } else {
40274 log_packet_detailed(" no old info");
40275 memset(real_packet, 0, sizeof(*real_packet));
40276 }
40277
40278 if (BV_ISSET(fields, 0)) {
40279 log_packet_detailed(" got field 'counterpart'");
40280#ifdef FREECIV_JSON_CONNECTION
40281 field_addr.name = "counterpart";
40282#endif /* FREECIV_JSON_CONNECTION */
40283 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40284 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40285 }
40286 }
40287
40288 if (NULL == old) {
40289 old = fc_malloc(sizeof(*old));
40290 *old = *real_packet;
40291 genhash_insert(*hash, old, old);
40292 } else {
40293 *old = *real_packet;
40294 }
40295
40296#endif /* FREECIV_DELTA_PROTOCOL */
40298}
40299
40301{
40302 const struct packet_diplomacy_cancel_meeting_req *real_packet = packet;
40303 int e;
40304#ifdef FREECIV_DELTA_PROTOCOL
40307 bool differ;
40308 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING_REQ;
40309#endif /* FREECIV_DELTA_PROTOCOL */
40311#ifdef FREECIV_JSON_CONNECTION
40312 struct plocation field_addr;
40313 {
40317 }
40318#endif /* FREECIV_JSON_CONNECTION */
40319
40320 log_packet_detailed("packet_diplomacy_cancel_meeting_req_100: sending info about ()");
40321
40322#ifdef FREECIV_DELTA_PROTOCOL
40323 if (NULL == *hash) {
40325 NULL, NULL, NULL, free);
40326 }
40327 BV_CLR_ALL(fields);
40328
40329 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40330 old = fc_malloc(sizeof(*old));
40331 *old = *real_packet;
40332 genhash_insert(*hash, old, old);
40333 memset(old, 0, sizeof(*old));
40334 }
40335 differ = (old->counterpart != real_packet->counterpart);
40336 if (differ) {
40337 BV_SET(fields, 0);
40338 }
40339
40340
40341#ifdef FREECIV_JSON_CONNECTION
40342 field_addr.name = "fields";
40343#endif /* FREECIV_JSON_CONNECTION */
40344 e = 0;
40345 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40346 if (e) {
40347 log_packet_detailed("fields bitvector error detected");
40348 }
40349
40350 if (BV_ISSET(fields, 0)) {
40351 log_packet_detailed(" field 'counterpart' has changed");
40352#ifdef FREECIV_JSON_CONNECTION
40353 field_addr.name = "counterpart";
40354#endif /* FREECIV_JSON_CONNECTION */
40355 e = 0;
40356 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
40357 if (e) {
40358 log_packet_detailed("'counterpart' field error detected");
40359 }
40360 }
40361
40362 *old = *real_packet;
40363#endif /* FREECIV_DELTA_PROTOCOL */
40364#ifndef FREECIV_DELTA_PROTOCOL
40365#ifdef FREECIV_JSON_CONNECTION
40366 field_addr.name = "counterpart";
40367#endif /* FREECIV_JSON_CONNECTION */
40368 e = 0;
40369 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
40370 if (e) {
40371 log_packet_detailed("'counterpart' field error detected");
40372 }
40373
40374#endif
40376}
40377
40379{
40380 if (!pc->used) {
40381 log_error("WARNING: trying to send data to the closed connection %s",
40383 return -1;
40384 }
40385 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet != NULL, -1,
40386 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING_REQ not installed");
40387 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING_REQ].packet(pc, packet);
40388}
40389
40391{
40392 struct packet_diplomacy_cancel_meeting_req packet, *real_packet = &packet;
40393
40395
40397}
40398
40399#ifdef FREECIV_DELTA_PROTOCOL
40400#define hash_packet_diplomacy_cancel_meeting_100 hash_const
40401
40402#define cmp_packet_diplomacy_cancel_meeting_100 cmp_const
40403
40405#endif /* FREECIV_DELTA_PROTOCOL */
40406
40408{
40409#ifdef FREECIV_DELTA_PROTOCOL
40412 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_MEETING;
40413#endif /* FREECIV_DELTA_PROTOCOL */
40415#ifdef FREECIV_JSON_CONNECTION
40416 struct plocation field_addr;
40417 {
40421 }
40422#endif /* FREECIV_JSON_CONNECTION */
40423
40424#ifdef FREECIV_DELTA_PROTOCOL
40425#ifdef FREECIV_JSON_CONNECTION
40426 field_addr.name = "fields";
40427#endif /* FREECIV_JSON_CONNECTION */
40428 DIO_BV_GET(&din, &field_addr, fields);
40429
40430#else /* FREECIV_DELTA_PROTOCOL */
40431#ifdef FREECIV_JSON_CONNECTION
40432 field_addr.name = "counterpart";
40433#endif /* FREECIV_JSON_CONNECTION */
40434 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40435 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40436 }
40437#ifdef FREECIV_JSON_CONNECTION
40438 field_addr.name = "initiated_from";
40439#endif /* FREECIV_JSON_CONNECTION */
40440 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->initiated_from)) {
40441 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40442 }
40443#endif
40444 log_packet_detailed("packet_diplomacy_cancel_meeting_100: got info about ()");
40445
40446#ifdef FREECIV_DELTA_PROTOCOL
40447 if (NULL == *hash) {
40449 NULL, NULL, NULL, free);
40450 }
40451
40452 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40453 *real_packet = *old;
40454 } else {
40455 log_packet_detailed(" no old info");
40456 memset(real_packet, 0, sizeof(*real_packet));
40457 }
40458
40459 if (BV_ISSET(fields, 0)) {
40460 log_packet_detailed(" got field 'counterpart'");
40461#ifdef FREECIV_JSON_CONNECTION
40462 field_addr.name = "counterpart";
40463#endif /* FREECIV_JSON_CONNECTION */
40464 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40465 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40466 }
40467 }
40468 if (BV_ISSET(fields, 1)) {
40469 log_packet_detailed(" got field 'initiated_from'");
40470#ifdef FREECIV_JSON_CONNECTION
40471 field_addr.name = "initiated_from";
40472#endif /* FREECIV_JSON_CONNECTION */
40473 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->initiated_from)) {
40474 RECEIVE_PACKET_FIELD_ERROR(initiated_from);
40475 }
40476 }
40477
40478 if (NULL == old) {
40479 old = fc_malloc(sizeof(*old));
40480 *old = *real_packet;
40481 genhash_insert(*hash, old, old);
40482 } else {
40483 *old = *real_packet;
40484 }
40485
40486#endif /* FREECIV_DELTA_PROTOCOL */
40488}
40489
40491{
40492 const struct packet_diplomacy_cancel_meeting *real_packet = packet;
40493 int e;
40494#ifdef FREECIV_DELTA_PROTOCOL
40497 bool differ;
40498 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_MEETING;
40499#endif /* FREECIV_DELTA_PROTOCOL */
40501#ifdef FREECIV_JSON_CONNECTION
40502 struct plocation field_addr;
40503 {
40507 }
40508#endif /* FREECIV_JSON_CONNECTION */
40509
40510 log_packet_detailed("packet_diplomacy_cancel_meeting_100: sending info about ()");
40511
40512#ifdef FREECIV_DELTA_PROTOCOL
40513 if (NULL == *hash) {
40515 NULL, NULL, NULL, free);
40516 }
40517 BV_CLR_ALL(fields);
40518
40519 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40520 old = fc_malloc(sizeof(*old));
40521 *old = *real_packet;
40522 genhash_insert(*hash, old, old);
40523 memset(old, 0, sizeof(*old));
40524 }
40525 differ = (old->counterpart != real_packet->counterpart);
40526 if (differ) {
40527 BV_SET(fields, 0);
40528 }
40529
40530 differ = (old->initiated_from != real_packet->initiated_from);
40531 if (differ) {
40532 BV_SET(fields, 1);
40533 }
40534
40535
40536#ifdef FREECIV_JSON_CONNECTION
40537 field_addr.name = "fields";
40538#endif /* FREECIV_JSON_CONNECTION */
40539 e = 0;
40540 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40541 if (e) {
40542 log_packet_detailed("fields bitvector error detected");
40543 }
40544
40545 if (BV_ISSET(fields, 0)) {
40546 log_packet_detailed(" field 'counterpart' has changed");
40547#ifdef FREECIV_JSON_CONNECTION
40548 field_addr.name = "counterpart";
40549#endif /* FREECIV_JSON_CONNECTION */
40550 e = 0;
40551 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
40552 if (e) {
40553 log_packet_detailed("'counterpart' field error detected");
40554 }
40555 }
40556 if (BV_ISSET(fields, 1)) {
40557 log_packet_detailed(" field 'initiated_from' has changed");
40558#ifdef FREECIV_JSON_CONNECTION
40559 field_addr.name = "initiated_from";
40560#endif /* FREECIV_JSON_CONNECTION */
40561 e = 0;
40562 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->initiated_from);
40563 if (e) {
40564 log_packet_detailed("'initiated_from' field error detected");
40565 }
40566 }
40567
40568 *old = *real_packet;
40569#endif /* FREECIV_DELTA_PROTOCOL */
40570#ifndef FREECIV_DELTA_PROTOCOL
40571#ifdef FREECIV_JSON_CONNECTION
40572 field_addr.name = "counterpart";
40573#endif /* FREECIV_JSON_CONNECTION */
40574 e = 0;
40575 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
40576 if (e) {
40577 log_packet_detailed("'counterpart' field error detected");
40578 }
40579#ifdef FREECIV_JSON_CONNECTION
40580 field_addr.name = "initiated_from";
40581#endif /* FREECIV_JSON_CONNECTION */
40582 e = 0;
40583 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->initiated_from);
40584 if (e) {
40585 log_packet_detailed("'initiated_from' field error detected");
40586 }
40587
40588#endif
40590}
40591
40593{
40594 if (!pc->used) {
40595 log_error("WARNING: trying to send data to the closed connection %s",
40597 return -1;
40598 }
40599 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet != NULL, -1,
40600 "Handler for PACKET_DIPLOMACY_CANCEL_MEETING not installed");
40601 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_MEETING].packet(pc, packet);
40602}
40603
40610
40611int dsend_packet_diplomacy_cancel_meeting(struct connection *pc, int counterpart, int initiated_from)
40612{
40613 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
40614
40616 real_packet->initiated_from = initiated_from;
40617
40619}
40620
40622{
40623 struct packet_diplomacy_cancel_meeting packet, *real_packet = &packet;
40624
40626 real_packet->initiated_from = initiated_from;
40627
40629}
40630
40631#ifdef FREECIV_DELTA_PROTOCOL
40632#define hash_packet_diplomacy_create_clause_req_100 hash_const
40633
40634#define cmp_packet_diplomacy_create_clause_req_100 cmp_const
40635
40637#endif /* FREECIV_DELTA_PROTOCOL */
40638
40640{
40641#ifdef FREECIV_DELTA_PROTOCOL
40644 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
40645#endif /* FREECIV_DELTA_PROTOCOL */
40647#ifdef FREECIV_JSON_CONNECTION
40648 struct plocation field_addr;
40649 {
40653 }
40654#endif /* FREECIV_JSON_CONNECTION */
40655
40656#ifdef FREECIV_DELTA_PROTOCOL
40657#ifdef FREECIV_JSON_CONNECTION
40658 field_addr.name = "fields";
40659#endif /* FREECIV_JSON_CONNECTION */
40660 DIO_BV_GET(&din, &field_addr, fields);
40661
40662#else /* FREECIV_DELTA_PROTOCOL */
40663#ifdef FREECIV_JSON_CONNECTION
40664 field_addr.name = "counterpart";
40665#endif /* FREECIV_JSON_CONNECTION */
40666 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40667 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40668 }
40669#ifdef FREECIV_JSON_CONNECTION
40670 field_addr.name = "giver";
40671#endif /* FREECIV_JSON_CONNECTION */
40672 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
40674 }
40675#ifdef FREECIV_JSON_CONNECTION
40676 field_addr.name = "type";
40677#endif /* FREECIV_JSON_CONNECTION */
40678 {
40679 int readin;
40680
40681 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40683 }
40684 real_packet->type = readin;
40685 }
40686#ifdef FREECIV_JSON_CONNECTION
40687 field_addr.name = "value";
40688#endif /* FREECIV_JSON_CONNECTION */
40689 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40691 }
40692#endif
40693 log_packet_detailed("packet_diplomacy_create_clause_req_100: got info about ()");
40694
40695#ifdef FREECIV_DELTA_PROTOCOL
40696 if (NULL == *hash) {
40698 NULL, NULL, NULL, free);
40699 }
40700
40701 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
40702 *real_packet = *old;
40703 } else {
40704 log_packet_detailed(" no old info");
40705 memset(real_packet, 0, sizeof(*real_packet));
40706 }
40707
40708 if (BV_ISSET(fields, 0)) {
40709 log_packet_detailed(" got field 'counterpart'");
40710#ifdef FREECIV_JSON_CONNECTION
40711 field_addr.name = "counterpart";
40712#endif /* FREECIV_JSON_CONNECTION */
40713 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40714 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40715 }
40716 }
40717 if (BV_ISSET(fields, 1)) {
40718 log_packet_detailed(" got field 'giver'");
40719#ifdef FREECIV_JSON_CONNECTION
40720 field_addr.name = "giver";
40721#endif /* FREECIV_JSON_CONNECTION */
40722 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
40724 }
40725 }
40726 if (BV_ISSET(fields, 2)) {
40727 log_packet_detailed(" got field 'type'");
40728#ifdef FREECIV_JSON_CONNECTION
40729 field_addr.name = "type";
40730#endif /* FREECIV_JSON_CONNECTION */
40731 {
40732 int readin;
40733
40734 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40736 }
40737 real_packet->type = readin;
40738 }
40739 }
40740 if (BV_ISSET(fields, 3)) {
40741 log_packet_detailed(" got field 'value'");
40742#ifdef FREECIV_JSON_CONNECTION
40743 field_addr.name = "value";
40744#endif /* FREECIV_JSON_CONNECTION */
40745 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40747 }
40748 }
40749
40750 if (NULL == old) {
40751 old = fc_malloc(sizeof(*old));
40752 *old = *real_packet;
40753 genhash_insert(*hash, old, old);
40754 } else {
40755 *old = *real_packet;
40756 }
40757
40758#endif /* FREECIV_DELTA_PROTOCOL */
40760}
40761
40763{
40764 const struct packet_diplomacy_create_clause_req *real_packet = packet;
40765 int e;
40766#ifdef FREECIV_DELTA_PROTOCOL
40769 bool differ;
40770 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE_REQ;
40771#endif /* FREECIV_DELTA_PROTOCOL */
40773#ifdef FREECIV_JSON_CONNECTION
40774 struct plocation field_addr;
40775 {
40779 }
40780#endif /* FREECIV_JSON_CONNECTION */
40781
40782 log_packet_detailed("packet_diplomacy_create_clause_req_100: sending info about ()");
40783
40784#ifdef FREECIV_DELTA_PROTOCOL
40785 if (NULL == *hash) {
40787 NULL, NULL, NULL, free);
40788 }
40789 BV_CLR_ALL(fields);
40790
40791 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
40792 old = fc_malloc(sizeof(*old));
40793 *old = *real_packet;
40794 genhash_insert(*hash, old, old);
40795 memset(old, 0, sizeof(*old));
40796 }
40797 differ = (old->counterpart != real_packet->counterpart);
40798 if (differ) {
40799 BV_SET(fields, 0);
40800 }
40801
40802 differ = (old->giver != real_packet->giver);
40803 if (differ) {
40804 BV_SET(fields, 1);
40805 }
40806
40807 differ = (old->type != real_packet->type);
40808 if (differ) {
40809 BV_SET(fields, 2);
40810 }
40811
40812 differ = (old->value != real_packet->value);
40813 if (differ) {
40814 BV_SET(fields, 3);
40815 }
40816
40817
40818#ifdef FREECIV_JSON_CONNECTION
40819 field_addr.name = "fields";
40820#endif /* FREECIV_JSON_CONNECTION */
40821 e = 0;
40822 e |= DIO_BV_PUT(&dout, &field_addr, fields);
40823 if (e) {
40824 log_packet_detailed("fields bitvector error detected");
40825 }
40826
40827 if (BV_ISSET(fields, 0)) {
40828 log_packet_detailed(" field 'counterpart' has changed");
40829#ifdef FREECIV_JSON_CONNECTION
40830 field_addr.name = "counterpart";
40831#endif /* FREECIV_JSON_CONNECTION */
40832 e = 0;
40833 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
40834 if (e) {
40835 log_packet_detailed("'counterpart' field error detected");
40836 }
40837 }
40838 if (BV_ISSET(fields, 1)) {
40839 log_packet_detailed(" field 'giver' has changed");
40840#ifdef FREECIV_JSON_CONNECTION
40841 field_addr.name = "giver";
40842#endif /* FREECIV_JSON_CONNECTION */
40843 e = 0;
40844 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
40845 if (e) {
40846 log_packet_detailed("'giver' field error detected");
40847 }
40848 }
40849 if (BV_ISSET(fields, 2)) {
40850 log_packet_detailed(" field 'type' has changed");
40851#ifdef FREECIV_JSON_CONNECTION
40852 field_addr.name = "type";
40853#endif /* FREECIV_JSON_CONNECTION */
40854 e = 0;
40855 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
40856 if (e) {
40857 log_packet_detailed("'type' field error detected");
40858 }
40859 }
40860 if (BV_ISSET(fields, 3)) {
40861 log_packet_detailed(" field 'value' has changed");
40862#ifdef FREECIV_JSON_CONNECTION
40863 field_addr.name = "value";
40864#endif /* FREECIV_JSON_CONNECTION */
40865 e = 0;
40866 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
40867 if (e) {
40868 log_packet_detailed("'value' field error detected");
40869 }
40870 }
40871
40872 *old = *real_packet;
40873#endif /* FREECIV_DELTA_PROTOCOL */
40874#ifndef FREECIV_DELTA_PROTOCOL
40875#ifdef FREECIV_JSON_CONNECTION
40876 field_addr.name = "counterpart";
40877#endif /* FREECIV_JSON_CONNECTION */
40878 e = 0;
40879 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
40880 if (e) {
40881 log_packet_detailed("'counterpart' field error detected");
40882 }
40883#ifdef FREECIV_JSON_CONNECTION
40884 field_addr.name = "giver";
40885#endif /* FREECIV_JSON_CONNECTION */
40886 e = 0;
40887 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
40888 if (e) {
40889 log_packet_detailed("'giver' field error detected");
40890 }
40891#ifdef FREECIV_JSON_CONNECTION
40892 field_addr.name = "type";
40893#endif /* FREECIV_JSON_CONNECTION */
40894 e = 0;
40895 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
40896 if (e) {
40897 log_packet_detailed("'type' field error detected");
40898 }
40899#ifdef FREECIV_JSON_CONNECTION
40900 field_addr.name = "value";
40901#endif /* FREECIV_JSON_CONNECTION */
40902 e = 0;
40903 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
40904 if (e) {
40905 log_packet_detailed("'value' field error detected");
40906 }
40907
40908#endif
40910}
40911
40913{
40914 if (!pc->used) {
40915 log_error("WARNING: trying to send data to the closed connection %s",
40917 return -1;
40918 }
40919 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet != NULL, -1,
40920 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE_REQ not installed");
40921 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE_REQ].packet(pc, packet);
40922}
40923
40924int dsend_packet_diplomacy_create_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
40925{
40926 struct packet_diplomacy_create_clause_req packet, *real_packet = &packet;
40927
40929 real_packet->giver = giver;
40930 real_packet->type = type;
40931 real_packet->value = value;
40932
40934}
40935
40936#ifdef FREECIV_DELTA_PROTOCOL
40937#define hash_packet_diplomacy_create_clause_100 hash_const
40938
40939#define cmp_packet_diplomacy_create_clause_100 cmp_const
40940
40942#endif /* FREECIV_DELTA_PROTOCOL */
40943
40945{
40946#ifdef FREECIV_DELTA_PROTOCOL
40949 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CREATE_CLAUSE;
40950#endif /* FREECIV_DELTA_PROTOCOL */
40952#ifdef FREECIV_JSON_CONNECTION
40953 struct plocation field_addr;
40954 {
40958 }
40959#endif /* FREECIV_JSON_CONNECTION */
40960
40961#ifdef FREECIV_DELTA_PROTOCOL
40962#ifdef FREECIV_JSON_CONNECTION
40963 field_addr.name = "fields";
40964#endif /* FREECIV_JSON_CONNECTION */
40965 DIO_BV_GET(&din, &field_addr, fields);
40966
40967#else /* FREECIV_DELTA_PROTOCOL */
40968#ifdef FREECIV_JSON_CONNECTION
40969 field_addr.name = "counterpart";
40970#endif /* FREECIV_JSON_CONNECTION */
40971 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
40972 RECEIVE_PACKET_FIELD_ERROR(counterpart);
40973 }
40974#ifdef FREECIV_JSON_CONNECTION
40975 field_addr.name = "giver";
40976#endif /* FREECIV_JSON_CONNECTION */
40977 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
40979 }
40980#ifdef FREECIV_JSON_CONNECTION
40981 field_addr.name = "type";
40982#endif /* FREECIV_JSON_CONNECTION */
40983 {
40984 int readin;
40985
40986 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
40988 }
40989 real_packet->type = readin;
40990 }
40991#ifdef FREECIV_JSON_CONNECTION
40992 field_addr.name = "value";
40993#endif /* FREECIV_JSON_CONNECTION */
40994 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
40996 }
40997#endif
40998 log_packet_detailed("packet_diplomacy_create_clause_100: got info about ()");
40999
41000#ifdef FREECIV_DELTA_PROTOCOL
41001 if (NULL == *hash) {
41003 NULL, NULL, NULL, free);
41004 }
41005
41006 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41007 *real_packet = *old;
41008 } else {
41009 log_packet_detailed(" no old info");
41010 memset(real_packet, 0, sizeof(*real_packet));
41011 }
41012
41013 if (BV_ISSET(fields, 0)) {
41014 log_packet_detailed(" got field 'counterpart'");
41015#ifdef FREECIV_JSON_CONNECTION
41016 field_addr.name = "counterpart";
41017#endif /* FREECIV_JSON_CONNECTION */
41018 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
41019 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41020 }
41021 }
41022 if (BV_ISSET(fields, 1)) {
41023 log_packet_detailed(" got field 'giver'");
41024#ifdef FREECIV_JSON_CONNECTION
41025 field_addr.name = "giver";
41026#endif /* FREECIV_JSON_CONNECTION */
41027 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
41029 }
41030 }
41031 if (BV_ISSET(fields, 2)) {
41032 log_packet_detailed(" got field 'type'");
41033#ifdef FREECIV_JSON_CONNECTION
41034 field_addr.name = "type";
41035#endif /* FREECIV_JSON_CONNECTION */
41036 {
41037 int readin;
41038
41039 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41041 }
41042 real_packet->type = readin;
41043 }
41044 }
41045 if (BV_ISSET(fields, 3)) {
41046 log_packet_detailed(" got field 'value'");
41047#ifdef FREECIV_JSON_CONNECTION
41048 field_addr.name = "value";
41049#endif /* FREECIV_JSON_CONNECTION */
41050 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41052 }
41053 }
41054
41055 if (NULL == old) {
41056 old = fc_malloc(sizeof(*old));
41057 *old = *real_packet;
41058 genhash_insert(*hash, old, old);
41059 } else {
41060 *old = *real_packet;
41061 }
41062
41063#endif /* FREECIV_DELTA_PROTOCOL */
41065}
41066
41068{
41069 const struct packet_diplomacy_create_clause *real_packet = packet;
41070 int e;
41071#ifdef FREECIV_DELTA_PROTOCOL
41074 bool differ;
41075 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CREATE_CLAUSE;
41076#endif /* FREECIV_DELTA_PROTOCOL */
41078#ifdef FREECIV_JSON_CONNECTION
41079 struct plocation field_addr;
41080 {
41084 }
41085#endif /* FREECIV_JSON_CONNECTION */
41086
41087 log_packet_detailed("packet_diplomacy_create_clause_100: sending info about ()");
41088
41089#ifdef FREECIV_DELTA_PROTOCOL
41090 if (NULL == *hash) {
41092 NULL, NULL, NULL, free);
41093 }
41094 BV_CLR_ALL(fields);
41095
41096 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41097 old = fc_malloc(sizeof(*old));
41098 *old = *real_packet;
41099 genhash_insert(*hash, old, old);
41100 memset(old, 0, sizeof(*old));
41101 }
41102 differ = (old->counterpart != real_packet->counterpart);
41103 if (differ) {
41104 BV_SET(fields, 0);
41105 }
41106
41107 differ = (old->giver != real_packet->giver);
41108 if (differ) {
41109 BV_SET(fields, 1);
41110 }
41111
41112 differ = (old->type != real_packet->type);
41113 if (differ) {
41114 BV_SET(fields, 2);
41115 }
41116
41117 differ = (old->value != real_packet->value);
41118 if (differ) {
41119 BV_SET(fields, 3);
41120 }
41121
41122
41123#ifdef FREECIV_JSON_CONNECTION
41124 field_addr.name = "fields";
41125#endif /* FREECIV_JSON_CONNECTION */
41126 e = 0;
41127 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41128 if (e) {
41129 log_packet_detailed("fields bitvector error detected");
41130 }
41131
41132 if (BV_ISSET(fields, 0)) {
41133 log_packet_detailed(" field 'counterpart' has changed");
41134#ifdef FREECIV_JSON_CONNECTION
41135 field_addr.name = "counterpart";
41136#endif /* FREECIV_JSON_CONNECTION */
41137 e = 0;
41138 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
41139 if (e) {
41140 log_packet_detailed("'counterpart' field error detected");
41141 }
41142 }
41143 if (BV_ISSET(fields, 1)) {
41144 log_packet_detailed(" field 'giver' has changed");
41145#ifdef FREECIV_JSON_CONNECTION
41146 field_addr.name = "giver";
41147#endif /* FREECIV_JSON_CONNECTION */
41148 e = 0;
41149 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
41150 if (e) {
41151 log_packet_detailed("'giver' field error detected");
41152 }
41153 }
41154 if (BV_ISSET(fields, 2)) {
41155 log_packet_detailed(" field 'type' has changed");
41156#ifdef FREECIV_JSON_CONNECTION
41157 field_addr.name = "type";
41158#endif /* FREECIV_JSON_CONNECTION */
41159 e = 0;
41160 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41161 if (e) {
41162 log_packet_detailed("'type' field error detected");
41163 }
41164 }
41165 if (BV_ISSET(fields, 3)) {
41166 log_packet_detailed(" field 'value' has changed");
41167#ifdef FREECIV_JSON_CONNECTION
41168 field_addr.name = "value";
41169#endif /* FREECIV_JSON_CONNECTION */
41170 e = 0;
41171 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41172 if (e) {
41173 log_packet_detailed("'value' field error detected");
41174 }
41175 }
41176
41177 *old = *real_packet;
41178#endif /* FREECIV_DELTA_PROTOCOL */
41179#ifndef FREECIV_DELTA_PROTOCOL
41180#ifdef FREECIV_JSON_CONNECTION
41181 field_addr.name = "counterpart";
41182#endif /* FREECIV_JSON_CONNECTION */
41183 e = 0;
41184 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
41185 if (e) {
41186 log_packet_detailed("'counterpart' field error detected");
41187 }
41188#ifdef FREECIV_JSON_CONNECTION
41189 field_addr.name = "giver";
41190#endif /* FREECIV_JSON_CONNECTION */
41191 e = 0;
41192 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
41193 if (e) {
41194 log_packet_detailed("'giver' field error detected");
41195 }
41196#ifdef FREECIV_JSON_CONNECTION
41197 field_addr.name = "type";
41198#endif /* FREECIV_JSON_CONNECTION */
41199 e = 0;
41200 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41201 if (e) {
41202 log_packet_detailed("'type' field error detected");
41203 }
41204#ifdef FREECIV_JSON_CONNECTION
41205 field_addr.name = "value";
41206#endif /* FREECIV_JSON_CONNECTION */
41207 e = 0;
41208 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41209 if (e) {
41210 log_packet_detailed("'value' field error detected");
41211 }
41212
41213#endif
41215}
41216
41218{
41219 if (!pc->used) {
41220 log_error("WARNING: trying to send data to the closed connection %s",
41222 return -1;
41223 }
41224 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet != NULL, -1,
41225 "Handler for PACKET_DIPLOMACY_CREATE_CLAUSE not installed");
41226 return pc->phs.handlers->send[PACKET_DIPLOMACY_CREATE_CLAUSE].packet(pc, packet);
41227}
41228
41235
41236int dsend_packet_diplomacy_create_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41237{
41238 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
41239
41241 real_packet->giver = giver;
41242 real_packet->type = type;
41243 real_packet->value = value;
41244
41246}
41247
41249{
41250 struct packet_diplomacy_create_clause packet, *real_packet = &packet;
41251
41253 real_packet->giver = giver;
41254 real_packet->type = type;
41255 real_packet->value = value;
41256
41258}
41259
41260#ifdef FREECIV_DELTA_PROTOCOL
41261#define hash_packet_diplomacy_remove_clause_req_100 hash_const
41262
41263#define cmp_packet_diplomacy_remove_clause_req_100 cmp_const
41264
41266#endif /* FREECIV_DELTA_PROTOCOL */
41267
41269{
41270#ifdef FREECIV_DELTA_PROTOCOL
41273 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
41274#endif /* FREECIV_DELTA_PROTOCOL */
41276#ifdef FREECIV_JSON_CONNECTION
41277 struct plocation field_addr;
41278 {
41282 }
41283#endif /* FREECIV_JSON_CONNECTION */
41284
41285#ifdef FREECIV_DELTA_PROTOCOL
41286#ifdef FREECIV_JSON_CONNECTION
41287 field_addr.name = "fields";
41288#endif /* FREECIV_JSON_CONNECTION */
41289 DIO_BV_GET(&din, &field_addr, fields);
41290
41291#else /* FREECIV_DELTA_PROTOCOL */
41292#ifdef FREECIV_JSON_CONNECTION
41293 field_addr.name = "counterpart";
41294#endif /* FREECIV_JSON_CONNECTION */
41295 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
41296 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41297 }
41298#ifdef FREECIV_JSON_CONNECTION
41299 field_addr.name = "giver";
41300#endif /* FREECIV_JSON_CONNECTION */
41301 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
41303 }
41304#ifdef FREECIV_JSON_CONNECTION
41305 field_addr.name = "type";
41306#endif /* FREECIV_JSON_CONNECTION */
41307 {
41308 int readin;
41309
41310 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41312 }
41313 real_packet->type = readin;
41314 }
41315#ifdef FREECIV_JSON_CONNECTION
41316 field_addr.name = "value";
41317#endif /* FREECIV_JSON_CONNECTION */
41318 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41320 }
41321#endif
41322 log_packet_detailed("packet_diplomacy_remove_clause_req_100: got info about ()");
41323
41324#ifdef FREECIV_DELTA_PROTOCOL
41325 if (NULL == *hash) {
41327 NULL, NULL, NULL, free);
41328 }
41329
41330 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41331 *real_packet = *old;
41332 } else {
41333 log_packet_detailed(" no old info");
41334 memset(real_packet, 0, sizeof(*real_packet));
41335 }
41336
41337 if (BV_ISSET(fields, 0)) {
41338 log_packet_detailed(" got field 'counterpart'");
41339#ifdef FREECIV_JSON_CONNECTION
41340 field_addr.name = "counterpart";
41341#endif /* FREECIV_JSON_CONNECTION */
41342 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
41343 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41344 }
41345 }
41346 if (BV_ISSET(fields, 1)) {
41347 log_packet_detailed(" got field 'giver'");
41348#ifdef FREECIV_JSON_CONNECTION
41349 field_addr.name = "giver";
41350#endif /* FREECIV_JSON_CONNECTION */
41351 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
41353 }
41354 }
41355 if (BV_ISSET(fields, 2)) {
41356 log_packet_detailed(" got field 'type'");
41357#ifdef FREECIV_JSON_CONNECTION
41358 field_addr.name = "type";
41359#endif /* FREECIV_JSON_CONNECTION */
41360 {
41361 int readin;
41362
41363 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41365 }
41366 real_packet->type = readin;
41367 }
41368 }
41369 if (BV_ISSET(fields, 3)) {
41370 log_packet_detailed(" got field 'value'");
41371#ifdef FREECIV_JSON_CONNECTION
41372 field_addr.name = "value";
41373#endif /* FREECIV_JSON_CONNECTION */
41374 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41376 }
41377 }
41378
41379 if (NULL == old) {
41380 old = fc_malloc(sizeof(*old));
41381 *old = *real_packet;
41382 genhash_insert(*hash, old, old);
41383 } else {
41384 *old = *real_packet;
41385 }
41386
41387#endif /* FREECIV_DELTA_PROTOCOL */
41389}
41390
41392{
41393 const struct packet_diplomacy_remove_clause_req *real_packet = packet;
41394 int e;
41395#ifdef FREECIV_DELTA_PROTOCOL
41398 bool differ;
41399 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ;
41400#endif /* FREECIV_DELTA_PROTOCOL */
41402#ifdef FREECIV_JSON_CONNECTION
41403 struct plocation field_addr;
41404 {
41408 }
41409#endif /* FREECIV_JSON_CONNECTION */
41410
41411 log_packet_detailed("packet_diplomacy_remove_clause_req_100: sending info about ()");
41412
41413#ifdef FREECIV_DELTA_PROTOCOL
41414 if (NULL == *hash) {
41416 NULL, NULL, NULL, free);
41417 }
41418 BV_CLR_ALL(fields);
41419
41420 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41421 old = fc_malloc(sizeof(*old));
41422 *old = *real_packet;
41423 genhash_insert(*hash, old, old);
41424 memset(old, 0, sizeof(*old));
41425 }
41426 differ = (old->counterpart != real_packet->counterpart);
41427 if (differ) {
41428 BV_SET(fields, 0);
41429 }
41430
41431 differ = (old->giver != real_packet->giver);
41432 if (differ) {
41433 BV_SET(fields, 1);
41434 }
41435
41436 differ = (old->type != real_packet->type);
41437 if (differ) {
41438 BV_SET(fields, 2);
41439 }
41440
41441 differ = (old->value != real_packet->value);
41442 if (differ) {
41443 BV_SET(fields, 3);
41444 }
41445
41446
41447#ifdef FREECIV_JSON_CONNECTION
41448 field_addr.name = "fields";
41449#endif /* FREECIV_JSON_CONNECTION */
41450 e = 0;
41451 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41452 if (e) {
41453 log_packet_detailed("fields bitvector error detected");
41454 }
41455
41456 if (BV_ISSET(fields, 0)) {
41457 log_packet_detailed(" field 'counterpart' has changed");
41458#ifdef FREECIV_JSON_CONNECTION
41459 field_addr.name = "counterpart";
41460#endif /* FREECIV_JSON_CONNECTION */
41461 e = 0;
41462 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
41463 if (e) {
41464 log_packet_detailed("'counterpart' field error detected");
41465 }
41466 }
41467 if (BV_ISSET(fields, 1)) {
41468 log_packet_detailed(" field 'giver' has changed");
41469#ifdef FREECIV_JSON_CONNECTION
41470 field_addr.name = "giver";
41471#endif /* FREECIV_JSON_CONNECTION */
41472 e = 0;
41473 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
41474 if (e) {
41475 log_packet_detailed("'giver' field error detected");
41476 }
41477 }
41478 if (BV_ISSET(fields, 2)) {
41479 log_packet_detailed(" field 'type' has changed");
41480#ifdef FREECIV_JSON_CONNECTION
41481 field_addr.name = "type";
41482#endif /* FREECIV_JSON_CONNECTION */
41483 e = 0;
41484 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41485 if (e) {
41486 log_packet_detailed("'type' field error detected");
41487 }
41488 }
41489 if (BV_ISSET(fields, 3)) {
41490 log_packet_detailed(" field 'value' has changed");
41491#ifdef FREECIV_JSON_CONNECTION
41492 field_addr.name = "value";
41493#endif /* FREECIV_JSON_CONNECTION */
41494 e = 0;
41495 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41496 if (e) {
41497 log_packet_detailed("'value' field error detected");
41498 }
41499 }
41500
41501 *old = *real_packet;
41502#endif /* FREECIV_DELTA_PROTOCOL */
41503#ifndef FREECIV_DELTA_PROTOCOL
41504#ifdef FREECIV_JSON_CONNECTION
41505 field_addr.name = "counterpart";
41506#endif /* FREECIV_JSON_CONNECTION */
41507 e = 0;
41508 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
41509 if (e) {
41510 log_packet_detailed("'counterpart' field error detected");
41511 }
41512#ifdef FREECIV_JSON_CONNECTION
41513 field_addr.name = "giver";
41514#endif /* FREECIV_JSON_CONNECTION */
41515 e = 0;
41516 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
41517 if (e) {
41518 log_packet_detailed("'giver' field error detected");
41519 }
41520#ifdef FREECIV_JSON_CONNECTION
41521 field_addr.name = "type";
41522#endif /* FREECIV_JSON_CONNECTION */
41523 e = 0;
41524 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41525 if (e) {
41526 log_packet_detailed("'type' field error detected");
41527 }
41528#ifdef FREECIV_JSON_CONNECTION
41529 field_addr.name = "value";
41530#endif /* FREECIV_JSON_CONNECTION */
41531 e = 0;
41532 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41533 if (e) {
41534 log_packet_detailed("'value' field error detected");
41535 }
41536
41537#endif
41539}
41540
41542{
41543 if (!pc->used) {
41544 log_error("WARNING: trying to send data to the closed connection %s",
41546 return -1;
41547 }
41548 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet != NULL, -1,
41549 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ not installed");
41550 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE_REQ].packet(pc, packet);
41551}
41552
41553int dsend_packet_diplomacy_remove_clause_req(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41554{
41555 struct packet_diplomacy_remove_clause_req packet, *real_packet = &packet;
41556
41558 real_packet->giver = giver;
41559 real_packet->type = type;
41560 real_packet->value = value;
41561
41563}
41564
41565#ifdef FREECIV_DELTA_PROTOCOL
41566#define hash_packet_diplomacy_remove_clause_100 hash_const
41567
41568#define cmp_packet_diplomacy_remove_clause_100 cmp_const
41569
41571#endif /* FREECIV_DELTA_PROTOCOL */
41572
41574{
41575#ifdef FREECIV_DELTA_PROTOCOL
41578 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_REMOVE_CLAUSE;
41579#endif /* FREECIV_DELTA_PROTOCOL */
41581#ifdef FREECIV_JSON_CONNECTION
41582 struct plocation field_addr;
41583 {
41587 }
41588#endif /* FREECIV_JSON_CONNECTION */
41589
41590#ifdef FREECIV_DELTA_PROTOCOL
41591#ifdef FREECIV_JSON_CONNECTION
41592 field_addr.name = "fields";
41593#endif /* FREECIV_JSON_CONNECTION */
41594 DIO_BV_GET(&din, &field_addr, fields);
41595
41596#else /* FREECIV_DELTA_PROTOCOL */
41597#ifdef FREECIV_JSON_CONNECTION
41598 field_addr.name = "counterpart";
41599#endif /* FREECIV_JSON_CONNECTION */
41600 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
41601 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41602 }
41603#ifdef FREECIV_JSON_CONNECTION
41604 field_addr.name = "giver";
41605#endif /* FREECIV_JSON_CONNECTION */
41606 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
41608 }
41609#ifdef FREECIV_JSON_CONNECTION
41610 field_addr.name = "type";
41611#endif /* FREECIV_JSON_CONNECTION */
41612 {
41613 int readin;
41614
41615 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41617 }
41618 real_packet->type = readin;
41619 }
41620#ifdef FREECIV_JSON_CONNECTION
41621 field_addr.name = "value";
41622#endif /* FREECIV_JSON_CONNECTION */
41623 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41625 }
41626#endif
41627 log_packet_detailed("packet_diplomacy_remove_clause_100: got info about ()");
41628
41629#ifdef FREECIV_DELTA_PROTOCOL
41630 if (NULL == *hash) {
41632 NULL, NULL, NULL, free);
41633 }
41634
41635 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41636 *real_packet = *old;
41637 } else {
41638 log_packet_detailed(" no old info");
41639 memset(real_packet, 0, sizeof(*real_packet));
41640 }
41641
41642 if (BV_ISSET(fields, 0)) {
41643 log_packet_detailed(" got field 'counterpart'");
41644#ifdef FREECIV_JSON_CONNECTION
41645 field_addr.name = "counterpart";
41646#endif /* FREECIV_JSON_CONNECTION */
41647 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
41648 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41649 }
41650 }
41651 if (BV_ISSET(fields, 1)) {
41652 log_packet_detailed(" got field 'giver'");
41653#ifdef FREECIV_JSON_CONNECTION
41654 field_addr.name = "giver";
41655#endif /* FREECIV_JSON_CONNECTION */
41656 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->giver)) {
41658 }
41659 }
41660 if (BV_ISSET(fields, 2)) {
41661 log_packet_detailed(" got field 'type'");
41662#ifdef FREECIV_JSON_CONNECTION
41663 field_addr.name = "type";
41664#endif /* FREECIV_JSON_CONNECTION */
41665 {
41666 int readin;
41667
41668 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
41670 }
41671 real_packet->type = readin;
41672 }
41673 }
41674 if (BV_ISSET(fields, 3)) {
41675 log_packet_detailed(" got field 'value'");
41676#ifdef FREECIV_JSON_CONNECTION
41677 field_addr.name = "value";
41678#endif /* FREECIV_JSON_CONNECTION */
41679 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->value)) {
41681 }
41682 }
41683
41684 if (NULL == old) {
41685 old = fc_malloc(sizeof(*old));
41686 *old = *real_packet;
41687 genhash_insert(*hash, old, old);
41688 } else {
41689 *old = *real_packet;
41690 }
41691
41692#endif /* FREECIV_DELTA_PROTOCOL */
41694}
41695
41697{
41698 const struct packet_diplomacy_remove_clause *real_packet = packet;
41699 int e;
41700#ifdef FREECIV_DELTA_PROTOCOL
41703 bool differ;
41704 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_REMOVE_CLAUSE;
41705#endif /* FREECIV_DELTA_PROTOCOL */
41707#ifdef FREECIV_JSON_CONNECTION
41708 struct plocation field_addr;
41709 {
41713 }
41714#endif /* FREECIV_JSON_CONNECTION */
41715
41716 log_packet_detailed("packet_diplomacy_remove_clause_100: sending info about ()");
41717
41718#ifdef FREECIV_DELTA_PROTOCOL
41719 if (NULL == *hash) {
41721 NULL, NULL, NULL, free);
41722 }
41723 BV_CLR_ALL(fields);
41724
41725 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41726 old = fc_malloc(sizeof(*old));
41727 *old = *real_packet;
41728 genhash_insert(*hash, old, old);
41729 memset(old, 0, sizeof(*old));
41730 }
41731 differ = (old->counterpart != real_packet->counterpart);
41732 if (differ) {
41733 BV_SET(fields, 0);
41734 }
41735
41736 differ = (old->giver != real_packet->giver);
41737 if (differ) {
41738 BV_SET(fields, 1);
41739 }
41740
41741 differ = (old->type != real_packet->type);
41742 if (differ) {
41743 BV_SET(fields, 2);
41744 }
41745
41746 differ = (old->value != real_packet->value);
41747 if (differ) {
41748 BV_SET(fields, 3);
41749 }
41750
41751
41752#ifdef FREECIV_JSON_CONNECTION
41753 field_addr.name = "fields";
41754#endif /* FREECIV_JSON_CONNECTION */
41755 e = 0;
41756 e |= DIO_BV_PUT(&dout, &field_addr, fields);
41757 if (e) {
41758 log_packet_detailed("fields bitvector error detected");
41759 }
41760
41761 if (BV_ISSET(fields, 0)) {
41762 log_packet_detailed(" field 'counterpart' has changed");
41763#ifdef FREECIV_JSON_CONNECTION
41764 field_addr.name = "counterpart";
41765#endif /* FREECIV_JSON_CONNECTION */
41766 e = 0;
41767 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
41768 if (e) {
41769 log_packet_detailed("'counterpart' field error detected");
41770 }
41771 }
41772 if (BV_ISSET(fields, 1)) {
41773 log_packet_detailed(" field 'giver' has changed");
41774#ifdef FREECIV_JSON_CONNECTION
41775 field_addr.name = "giver";
41776#endif /* FREECIV_JSON_CONNECTION */
41777 e = 0;
41778 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
41779 if (e) {
41780 log_packet_detailed("'giver' field error detected");
41781 }
41782 }
41783 if (BV_ISSET(fields, 2)) {
41784 log_packet_detailed(" field 'type' has changed");
41785#ifdef FREECIV_JSON_CONNECTION
41786 field_addr.name = "type";
41787#endif /* FREECIV_JSON_CONNECTION */
41788 e = 0;
41789 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41790 if (e) {
41791 log_packet_detailed("'type' field error detected");
41792 }
41793 }
41794 if (BV_ISSET(fields, 3)) {
41795 log_packet_detailed(" field 'value' has changed");
41796#ifdef FREECIV_JSON_CONNECTION
41797 field_addr.name = "value";
41798#endif /* FREECIV_JSON_CONNECTION */
41799 e = 0;
41800 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41801 if (e) {
41802 log_packet_detailed("'value' field error detected");
41803 }
41804 }
41805
41806 *old = *real_packet;
41807#endif /* FREECIV_DELTA_PROTOCOL */
41808#ifndef FREECIV_DELTA_PROTOCOL
41809#ifdef FREECIV_JSON_CONNECTION
41810 field_addr.name = "counterpart";
41811#endif /* FREECIV_JSON_CONNECTION */
41812 e = 0;
41813 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
41814 if (e) {
41815 log_packet_detailed("'counterpart' field error detected");
41816 }
41817#ifdef FREECIV_JSON_CONNECTION
41818 field_addr.name = "giver";
41819#endif /* FREECIV_JSON_CONNECTION */
41820 e = 0;
41821 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->giver);
41822 if (e) {
41823 log_packet_detailed("'giver' field error detected");
41824 }
41825#ifdef FREECIV_JSON_CONNECTION
41826 field_addr.name = "type";
41827#endif /* FREECIV_JSON_CONNECTION */
41828 e = 0;
41829 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
41830 if (e) {
41831 log_packet_detailed("'type' field error detected");
41832 }
41833#ifdef FREECIV_JSON_CONNECTION
41834 field_addr.name = "value";
41835#endif /* FREECIV_JSON_CONNECTION */
41836 e = 0;
41837 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->value);
41838 if (e) {
41839 log_packet_detailed("'value' field error detected");
41840 }
41841
41842#endif
41844}
41845
41847{
41848 if (!pc->used) {
41849 log_error("WARNING: trying to send data to the closed connection %s",
41851 return -1;
41852 }
41853 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet != NULL, -1,
41854 "Handler for PACKET_DIPLOMACY_REMOVE_CLAUSE not installed");
41855 return pc->phs.handlers->send[PACKET_DIPLOMACY_REMOVE_CLAUSE].packet(pc, packet);
41856}
41857
41864
41865int dsend_packet_diplomacy_remove_clause(struct connection *pc, int counterpart, int giver, enum clause_type type, int value)
41866{
41867 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
41868
41870 real_packet->giver = giver;
41871 real_packet->type = type;
41872 real_packet->value = value;
41873
41875}
41876
41878{
41879 struct packet_diplomacy_remove_clause packet, *real_packet = &packet;
41880
41882 real_packet->giver = giver;
41883 real_packet->type = type;
41884 real_packet->value = value;
41885
41887}
41888
41889#ifdef FREECIV_DELTA_PROTOCOL
41890#define hash_packet_diplomacy_accept_treaty_req_100 hash_const
41891
41892#define cmp_packet_diplomacy_accept_treaty_req_100 cmp_const
41893
41895#endif /* FREECIV_DELTA_PROTOCOL */
41896
41898{
41899#ifdef FREECIV_DELTA_PROTOCOL
41902 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
41903#endif /* FREECIV_DELTA_PROTOCOL */
41905#ifdef FREECIV_JSON_CONNECTION
41906 struct plocation field_addr;
41907 {
41911 }
41912#endif /* FREECIV_JSON_CONNECTION */
41913
41914#ifdef FREECIV_DELTA_PROTOCOL
41915#ifdef FREECIV_JSON_CONNECTION
41916 field_addr.name = "fields";
41917#endif /* FREECIV_JSON_CONNECTION */
41918 DIO_BV_GET(&din, &field_addr, fields);
41919
41920#else /* FREECIV_DELTA_PROTOCOL */
41921#ifdef FREECIV_JSON_CONNECTION
41922 field_addr.name = "counterpart";
41923#endif /* FREECIV_JSON_CONNECTION */
41924 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
41925 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41926 }
41927#endif
41928 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: got info about ()");
41929
41930#ifdef FREECIV_DELTA_PROTOCOL
41931 if (NULL == *hash) {
41933 NULL, NULL, NULL, free);
41934 }
41935
41936 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
41937 *real_packet = *old;
41938 } else {
41939 log_packet_detailed(" no old info");
41940 memset(real_packet, 0, sizeof(*real_packet));
41941 }
41942
41943 if (BV_ISSET(fields, 0)) {
41944 log_packet_detailed(" got field 'counterpart'");
41945#ifdef FREECIV_JSON_CONNECTION
41946 field_addr.name = "counterpart";
41947#endif /* FREECIV_JSON_CONNECTION */
41948 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
41949 RECEIVE_PACKET_FIELD_ERROR(counterpart);
41950 }
41951 }
41952
41953 if (NULL == old) {
41954 old = fc_malloc(sizeof(*old));
41955 *old = *real_packet;
41956 genhash_insert(*hash, old, old);
41957 } else {
41958 *old = *real_packet;
41959 }
41960
41961#endif /* FREECIV_DELTA_PROTOCOL */
41963}
41964
41966{
41967 const struct packet_diplomacy_accept_treaty_req *real_packet = packet;
41968 int e;
41969#ifdef FREECIV_DELTA_PROTOCOL
41972 bool differ;
41973 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY_REQ;
41974#endif /* FREECIV_DELTA_PROTOCOL */
41976#ifdef FREECIV_JSON_CONNECTION
41977 struct plocation field_addr;
41978 {
41982 }
41983#endif /* FREECIV_JSON_CONNECTION */
41984
41985 log_packet_detailed("packet_diplomacy_accept_treaty_req_100: sending info about ()");
41986
41987#ifdef FREECIV_DELTA_PROTOCOL
41988 if (NULL == *hash) {
41990 NULL, NULL, NULL, free);
41991 }
41992 BV_CLR_ALL(fields);
41993
41994 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
41995 old = fc_malloc(sizeof(*old));
41996 *old = *real_packet;
41997 genhash_insert(*hash, old, old);
41998 memset(old, 0, sizeof(*old));
41999 }
42000 differ = (old->counterpart != real_packet->counterpart);
42001 if (differ) {
42002 BV_SET(fields, 0);
42003 }
42004
42005
42006#ifdef FREECIV_JSON_CONNECTION
42007 field_addr.name = "fields";
42008#endif /* FREECIV_JSON_CONNECTION */
42009 e = 0;
42010 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42011 if (e) {
42012 log_packet_detailed("fields bitvector error detected");
42013 }
42014
42015 if (BV_ISSET(fields, 0)) {
42016 log_packet_detailed(" field 'counterpart' has changed");
42017#ifdef FREECIV_JSON_CONNECTION
42018 field_addr.name = "counterpart";
42019#endif /* FREECIV_JSON_CONNECTION */
42020 e = 0;
42021 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
42022 if (e) {
42023 log_packet_detailed("'counterpart' field error detected");
42024 }
42025 }
42026
42027 *old = *real_packet;
42028#endif /* FREECIV_DELTA_PROTOCOL */
42029#ifndef FREECIV_DELTA_PROTOCOL
42030#ifdef FREECIV_JSON_CONNECTION
42031 field_addr.name = "counterpart";
42032#endif /* FREECIV_JSON_CONNECTION */
42033 e = 0;
42034 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
42035 if (e) {
42036 log_packet_detailed("'counterpart' field error detected");
42037 }
42038
42039#endif
42041}
42042
42044{
42045 if (!pc->used) {
42046 log_error("WARNING: trying to send data to the closed connection %s",
42048 return -1;
42049 }
42050 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet != NULL, -1,
42051 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY_REQ not installed");
42052 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY_REQ].packet(pc, packet);
42053}
42054
42056{
42057 struct packet_diplomacy_accept_treaty_req packet, *real_packet = &packet;
42058
42060
42062}
42063
42064#ifdef FREECIV_DELTA_PROTOCOL
42065#define hash_packet_diplomacy_accept_treaty_100 hash_const
42066
42067#define cmp_packet_diplomacy_accept_treaty_100 cmp_const
42068
42070#endif /* FREECIV_DELTA_PROTOCOL */
42071
42073{
42074#ifdef FREECIV_DELTA_PROTOCOL
42077 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_ACCEPT_TREATY;
42078#endif /* FREECIV_DELTA_PROTOCOL */
42080#ifdef FREECIV_JSON_CONNECTION
42081 struct plocation field_addr;
42082 {
42086 }
42087#endif /* FREECIV_JSON_CONNECTION */
42088
42089#ifdef FREECIV_DELTA_PROTOCOL
42090#ifdef FREECIV_JSON_CONNECTION
42091 field_addr.name = "fields";
42092#endif /* FREECIV_JSON_CONNECTION */
42093 DIO_BV_GET(&din, &field_addr, fields);
42094
42095#else /* FREECIV_DELTA_PROTOCOL */
42096#ifdef FREECIV_JSON_CONNECTION
42097 field_addr.name = "counterpart";
42098#endif /* FREECIV_JSON_CONNECTION */
42099 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
42100 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42101 }
42102#ifdef FREECIV_JSON_CONNECTION
42103 field_addr.name = "I_accepted";
42104#endif /* FREECIV_JSON_CONNECTION */
42105 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->I_accepted)) {
42106 RECEIVE_PACKET_FIELD_ERROR(I_accepted);
42107 }
42108#ifdef FREECIV_JSON_CONNECTION
42109 field_addr.name = "other_accepted";
42110#endif /* FREECIV_JSON_CONNECTION */
42111 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->other_accepted)) {
42112 RECEIVE_PACKET_FIELD_ERROR(other_accepted);
42113 }
42114#endif
42115 log_packet_detailed("packet_diplomacy_accept_treaty_100: got info about ()");
42116
42117#ifdef FREECIV_DELTA_PROTOCOL
42118 if (NULL == *hash) {
42120 NULL, NULL, NULL, free);
42121 }
42122
42123 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42124 *real_packet = *old;
42125 } else {
42126 log_packet_detailed(" no old info");
42127 memset(real_packet, 0, sizeof(*real_packet));
42128 }
42129
42130 if (BV_ISSET(fields, 0)) {
42131 log_packet_detailed(" got field 'counterpart'");
42132#ifdef FREECIV_JSON_CONNECTION
42133 field_addr.name = "counterpart";
42134#endif /* FREECIV_JSON_CONNECTION */
42135 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->counterpart)) {
42136 RECEIVE_PACKET_FIELD_ERROR(counterpart);
42137 }
42138 }
42139 real_packet->I_accepted = BV_ISSET(fields, 1);
42140 real_packet->other_accepted = BV_ISSET(fields, 2);
42141
42142 if (NULL == old) {
42143 old = fc_malloc(sizeof(*old));
42144 *old = *real_packet;
42145 genhash_insert(*hash, old, old);
42146 } else {
42147 *old = *real_packet;
42148 }
42149
42150#endif /* FREECIV_DELTA_PROTOCOL */
42152}
42153
42155{
42156 const struct packet_diplomacy_accept_treaty *real_packet = packet;
42157 int e;
42158#ifdef FREECIV_DELTA_PROTOCOL
42161 bool differ;
42162 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_ACCEPT_TREATY;
42163#endif /* FREECIV_DELTA_PROTOCOL */
42165#ifdef FREECIV_JSON_CONNECTION
42166 struct plocation field_addr;
42167 {
42171 }
42172#endif /* FREECIV_JSON_CONNECTION */
42173
42174 log_packet_detailed("packet_diplomacy_accept_treaty_100: sending info about ()");
42175
42176#ifdef FREECIV_DELTA_PROTOCOL
42177 if (NULL == *hash) {
42179 NULL, NULL, NULL, free);
42180 }
42181 BV_CLR_ALL(fields);
42182
42183 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42184 old = fc_malloc(sizeof(*old));
42185 *old = *real_packet;
42186 genhash_insert(*hash, old, old);
42187 memset(old, 0, sizeof(*old));
42188 }
42189 differ = (old->counterpart != real_packet->counterpart);
42190 if (differ) {
42191 BV_SET(fields, 0);
42192 }
42193
42194 if (packet->I_accepted) {
42195 BV_SET(fields, 1);
42196 }
42197
42198 if (packet->other_accepted) {
42199 BV_SET(fields, 2);
42200 }
42201
42202
42203#ifdef FREECIV_JSON_CONNECTION
42204 field_addr.name = "fields";
42205#endif /* FREECIV_JSON_CONNECTION */
42206 e = 0;
42207 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42208 if (e) {
42209 log_packet_detailed("fields bitvector error detected");
42210 }
42211
42212 if (BV_ISSET(fields, 0)) {
42213 log_packet_detailed(" field 'counterpart' has changed");
42214#ifdef FREECIV_JSON_CONNECTION
42215 field_addr.name = "counterpart";
42216#endif /* FREECIV_JSON_CONNECTION */
42217 e = 0;
42218 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
42219 if (e) {
42220 log_packet_detailed("'counterpart' field error detected");
42221 }
42222 }
42223 /* field 1 is folded into the header */
42224 /* field 2 is folded into the header */
42225
42226 *old = *real_packet;
42227#endif /* FREECIV_DELTA_PROTOCOL */
42228#ifndef FREECIV_DELTA_PROTOCOL
42229#ifdef FREECIV_JSON_CONNECTION
42230 field_addr.name = "counterpart";
42231#endif /* FREECIV_JSON_CONNECTION */
42232 e = 0;
42233 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->counterpart);
42234 if (e) {
42235 log_packet_detailed("'counterpart' field error detected");
42236 }
42237#ifdef FREECIV_JSON_CONNECTION
42238 field_addr.name = "I_accepted";
42239#endif /* FREECIV_JSON_CONNECTION */
42240 e = 0;
42241 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->I_accepted);
42242 if (e) {
42243 log_packet_detailed("'I_accepted' field error detected");
42244 }
42245#ifdef FREECIV_JSON_CONNECTION
42246 field_addr.name = "other_accepted";
42247#endif /* FREECIV_JSON_CONNECTION */
42248 e = 0;
42249 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->other_accepted);
42250 if (e) {
42251 log_packet_detailed("'other_accepted' field error detected");
42252 }
42253
42254#endif
42256}
42257
42259{
42260 if (!pc->used) {
42261 log_error("WARNING: trying to send data to the closed connection %s",
42263 return -1;
42264 }
42265 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet != NULL, -1,
42266 "Handler for PACKET_DIPLOMACY_ACCEPT_TREATY not installed");
42267 return pc->phs.handlers->send[PACKET_DIPLOMACY_ACCEPT_TREATY].packet(pc, packet);
42268}
42269
42276
42277int dsend_packet_diplomacy_accept_treaty(struct connection *pc, int counterpart, bool I_accepted, bool other_accepted)
42278{
42279 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
42280
42282 real_packet->I_accepted = I_accepted;
42283 real_packet->other_accepted = other_accepted;
42284
42286}
42287
42289{
42290 struct packet_diplomacy_accept_treaty packet, *real_packet = &packet;
42291
42293 real_packet->I_accepted = I_accepted;
42294 real_packet->other_accepted = other_accepted;
42295
42297}
42298
42299#ifdef FREECIV_DELTA_PROTOCOL
42300#define hash_packet_diplomacy_cancel_pact_100 hash_const
42301
42302#define cmp_packet_diplomacy_cancel_pact_100 cmp_const
42303
42305#endif /* FREECIV_DELTA_PROTOCOL */
42306
42308{
42309#ifdef FREECIV_DELTA_PROTOCOL
42311 struct packet_diplomacy_cancel_pact *old;
42312 struct genhash **hash = pc->phs.received + PACKET_DIPLOMACY_CANCEL_PACT;
42313#endif /* FREECIV_DELTA_PROTOCOL */
42315#ifdef FREECIV_JSON_CONNECTION
42316 struct plocation field_addr;
42317 {
42321 }
42322#endif /* FREECIV_JSON_CONNECTION */
42323
42324#ifdef FREECIV_DELTA_PROTOCOL
42325#ifdef FREECIV_JSON_CONNECTION
42326 field_addr.name = "fields";
42327#endif /* FREECIV_JSON_CONNECTION */
42328 DIO_BV_GET(&din, &field_addr, fields);
42329
42330#else /* FREECIV_DELTA_PROTOCOL */
42331#ifdef FREECIV_JSON_CONNECTION
42332 field_addr.name = "other_player_id";
42333#endif /* FREECIV_JSON_CONNECTION */
42334 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->other_player_id)) {
42335 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
42336 }
42337#ifdef FREECIV_JSON_CONNECTION
42338 field_addr.name = "clause";
42339#endif /* FREECIV_JSON_CONNECTION */
42340 {
42341 int readin;
42342
42343 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
42345 }
42346 real_packet->clause = readin;
42347 }
42348#endif
42349 log_packet_detailed("packet_diplomacy_cancel_pact_100: got info about ()");
42350
42351#ifdef FREECIV_DELTA_PROTOCOL
42352 if (NULL == *hash) {
42354 NULL, NULL, NULL, free);
42355 }
42356
42357 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42358 *real_packet = *old;
42359 } else {
42360 log_packet_detailed(" no old info");
42361 memset(real_packet, 0, sizeof(*real_packet));
42362 }
42363
42364 if (BV_ISSET(fields, 0)) {
42365 log_packet_detailed(" got field 'other_player_id'");
42366#ifdef FREECIV_JSON_CONNECTION
42367 field_addr.name = "other_player_id";
42368#endif /* FREECIV_JSON_CONNECTION */
42369 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->other_player_id)) {
42370 RECEIVE_PACKET_FIELD_ERROR(other_player_id);
42371 }
42372 }
42373 if (BV_ISSET(fields, 1)) {
42374 log_packet_detailed(" got field 'clause'");
42375#ifdef FREECIV_JSON_CONNECTION
42376 field_addr.name = "clause";
42377#endif /* FREECIV_JSON_CONNECTION */
42378 {
42379 int readin;
42380
42381 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
42383 }
42384 real_packet->clause = readin;
42385 }
42386 }
42387
42388 if (NULL == old) {
42389 old = fc_malloc(sizeof(*old));
42390 *old = *real_packet;
42391 genhash_insert(*hash, old, old);
42392 } else {
42393 *old = *real_packet;
42394 }
42395
42396#endif /* FREECIV_DELTA_PROTOCOL */
42398}
42399
42401{
42402 const struct packet_diplomacy_cancel_pact *real_packet = packet;
42403 int e;
42404#ifdef FREECIV_DELTA_PROTOCOL
42406 struct packet_diplomacy_cancel_pact *old;
42407 bool differ;
42408 struct genhash **hash = pc->phs.sent + PACKET_DIPLOMACY_CANCEL_PACT;
42409#endif /* FREECIV_DELTA_PROTOCOL */
42411#ifdef FREECIV_JSON_CONNECTION
42412 struct plocation field_addr;
42413 {
42417 }
42418#endif /* FREECIV_JSON_CONNECTION */
42419
42420 log_packet_detailed("packet_diplomacy_cancel_pact_100: sending info about ()");
42421
42422#ifdef FREECIV_DELTA_PROTOCOL
42423 if (NULL == *hash) {
42425 NULL, NULL, NULL, free);
42426 }
42427 BV_CLR_ALL(fields);
42428
42429 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42430 old = fc_malloc(sizeof(*old));
42431 *old = *real_packet;
42432 genhash_insert(*hash, old, old);
42433 memset(old, 0, sizeof(*old));
42434 }
42435 differ = (old->other_player_id != real_packet->other_player_id);
42436 if (differ) {
42437 BV_SET(fields, 0);
42438 }
42439
42440 differ = (old->clause != real_packet->clause);
42441 if (differ) {
42442 BV_SET(fields, 1);
42443 }
42444
42445
42446#ifdef FREECIV_JSON_CONNECTION
42447 field_addr.name = "fields";
42448#endif /* FREECIV_JSON_CONNECTION */
42449 e = 0;
42450 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42451 if (e) {
42452 log_packet_detailed("fields bitvector error detected");
42453 }
42454
42455 if (BV_ISSET(fields, 0)) {
42456 log_packet_detailed(" field 'other_player_id' has changed");
42457#ifdef FREECIV_JSON_CONNECTION
42458 field_addr.name = "other_player_id";
42459#endif /* FREECIV_JSON_CONNECTION */
42460 e = 0;
42461 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->other_player_id);
42462 if (e) {
42463 log_packet_detailed("'other_player_id' field error detected");
42464 }
42465 }
42466 if (BV_ISSET(fields, 1)) {
42467 log_packet_detailed(" field 'clause' has changed");
42468#ifdef FREECIV_JSON_CONNECTION
42469 field_addr.name = "clause";
42470#endif /* FREECIV_JSON_CONNECTION */
42471 e = 0;
42472 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
42473 if (e) {
42474 log_packet_detailed("'clause' field error detected");
42475 }
42476 }
42477
42478 *old = *real_packet;
42479#endif /* FREECIV_DELTA_PROTOCOL */
42480#ifndef FREECIV_DELTA_PROTOCOL
42481#ifdef FREECIV_JSON_CONNECTION
42482 field_addr.name = "other_player_id";
42483#endif /* FREECIV_JSON_CONNECTION */
42484 e = 0;
42485 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->other_player_id);
42486 if (e) {
42487 log_packet_detailed("'other_player_id' field error detected");
42488 }
42489#ifdef FREECIV_JSON_CONNECTION
42490 field_addr.name = "clause";
42491#endif /* FREECIV_JSON_CONNECTION */
42492 e = 0;
42493 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->clause);
42494 if (e) {
42495 log_packet_detailed("'clause' field error detected");
42496 }
42497
42498#endif
42500}
42501
42503{
42504 if (!pc->used) {
42505 log_error("WARNING: trying to send data to the closed connection %s",
42507 return -1;
42508 }
42509 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet != NULL, -1,
42510 "Handler for PACKET_DIPLOMACY_CANCEL_PACT not installed");
42511 return pc->phs.handlers->send[PACKET_DIPLOMACY_CANCEL_PACT].packet(pc, packet);
42512}
42513
42514int dsend_packet_diplomacy_cancel_pact(struct connection *pc, int other_player_id, enum clause_type clause)
42515{
42516 struct packet_diplomacy_cancel_pact packet, *real_packet = &packet;
42517
42519 real_packet->clause = clause;
42520
42522}
42523
42524#ifdef FREECIV_DELTA_PROTOCOL
42525#define hash_packet_page_msg_100 hash_const
42526
42527#define cmp_packet_page_msg_100 cmp_const
42528
42530#endif /* FREECIV_DELTA_PROTOCOL */
42531
42533{
42534#ifdef FREECIV_DELTA_PROTOCOL
42536 struct packet_page_msg *old;
42537 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG;
42538#endif /* FREECIV_DELTA_PROTOCOL */
42540#ifdef FREECIV_JSON_CONNECTION
42541 struct plocation field_addr;
42542 {
42546 }
42547#endif /* FREECIV_JSON_CONNECTION */
42548
42549#ifdef FREECIV_DELTA_PROTOCOL
42550#ifdef FREECIV_JSON_CONNECTION
42551 field_addr.name = "fields";
42552#endif /* FREECIV_JSON_CONNECTION */
42553 DIO_BV_GET(&din, &field_addr, fields);
42554
42555#else /* FREECIV_DELTA_PROTOCOL */
42556#ifdef FREECIV_JSON_CONNECTION
42557 field_addr.name = "caption";
42558#endif /* FREECIV_JSON_CONNECTION */
42559 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
42561 }
42562#ifdef FREECIV_JSON_CONNECTION
42563 field_addr.name = "headline";
42564#endif /* FREECIV_JSON_CONNECTION */
42565 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
42567 }
42568#ifdef FREECIV_JSON_CONNECTION
42569 field_addr.name = "event";
42570#endif /* FREECIV_JSON_CONNECTION */
42571 {
42572 int readin;
42573
42574 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
42576 }
42577 real_packet->event = readin;
42578 }
42579#ifdef FREECIV_JSON_CONNECTION
42580 field_addr.name = "len";
42581#endif /* FREECIV_JSON_CONNECTION */
42582 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
42584 }
42585#ifdef FREECIV_JSON_CONNECTION
42586 field_addr.name = "parts";
42587#endif /* FREECIV_JSON_CONNECTION */
42588 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
42590 }
42591#endif
42592 log_packet_detailed("packet_page_msg_100: got info about ()");
42593
42594#ifdef FREECIV_DELTA_PROTOCOL
42595 if (NULL == *hash) {
42597 NULL, NULL, NULL, free);
42598 }
42599
42600 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42601 *real_packet = *old;
42602 } else {
42603 log_packet_detailed(" no old info");
42604 memset(real_packet, 0, sizeof(*real_packet));
42605 }
42606
42607 if (BV_ISSET(fields, 0)) {
42608 log_packet_detailed(" got field 'caption'");
42609#ifdef FREECIV_JSON_CONNECTION
42610 field_addr.name = "caption";
42611#endif /* FREECIV_JSON_CONNECTION */
42612 if (!DIO_GET(string, &din, &field_addr, real_packet->caption, sizeof(real_packet->caption))) {
42614 }
42615 }
42616 if (BV_ISSET(fields, 1)) {
42617 log_packet_detailed(" got field 'headline'");
42618#ifdef FREECIV_JSON_CONNECTION
42619 field_addr.name = "headline";
42620#endif /* FREECIV_JSON_CONNECTION */
42621 if (!DIO_GET(string, &din, &field_addr, real_packet->headline, sizeof(real_packet->headline))) {
42623 }
42624 }
42625 if (BV_ISSET(fields, 2)) {
42626 log_packet_detailed(" got field 'event'");
42627#ifdef FREECIV_JSON_CONNECTION
42628 field_addr.name = "event";
42629#endif /* FREECIV_JSON_CONNECTION */
42630 {
42631 int readin;
42632
42633 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
42635 }
42636 real_packet->event = readin;
42637 }
42638 }
42639 if (BV_ISSET(fields, 3)) {
42640 log_packet_detailed(" got field 'len'");
42641#ifdef FREECIV_JSON_CONNECTION
42642 field_addr.name = "len";
42643#endif /* FREECIV_JSON_CONNECTION */
42644 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->len)) {
42646 }
42647 }
42648 if (BV_ISSET(fields, 4)) {
42649 log_packet_detailed(" got field 'parts'");
42650#ifdef FREECIV_JSON_CONNECTION
42651 field_addr.name = "parts";
42652#endif /* FREECIV_JSON_CONNECTION */
42653 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->parts)) {
42655 }
42656 }
42657
42658 if (NULL == old) {
42659 old = fc_malloc(sizeof(*old));
42660 *old = *real_packet;
42661 genhash_insert(*hash, old, old);
42662 } else {
42663 *old = *real_packet;
42664 }
42665
42666#endif /* FREECIV_DELTA_PROTOCOL */
42668}
42669
42670static int send_packet_page_msg_100(struct connection *pc, const struct packet_page_msg *packet)
42671{
42672 const struct packet_page_msg *real_packet = packet;
42673 int e;
42674#ifdef FREECIV_DELTA_PROTOCOL
42676 struct packet_page_msg *old;
42677 bool differ;
42678 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG;
42679#endif /* FREECIV_DELTA_PROTOCOL */
42681#ifdef FREECIV_JSON_CONNECTION
42682 struct plocation field_addr;
42683 {
42687 }
42688#endif /* FREECIV_JSON_CONNECTION */
42689
42690 log_packet_detailed("packet_page_msg_100: sending info about ()");
42691
42692#ifdef FREECIV_DELTA_PROTOCOL
42693 if (NULL == *hash) {
42695 NULL, NULL, NULL, free);
42696 }
42697 BV_CLR_ALL(fields);
42698
42699 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42700 old = fc_malloc(sizeof(*old));
42701 *old = *real_packet;
42702 genhash_insert(*hash, old, old);
42703 memset(old, 0, sizeof(*old));
42704 }
42705 differ = (strcmp(old->caption, real_packet->caption) != 0);
42706 if (differ) {
42707 BV_SET(fields, 0);
42708 }
42709
42710 differ = (strcmp(old->headline, real_packet->headline) != 0);
42711 if (differ) {
42712 BV_SET(fields, 1);
42713 }
42714
42715 differ = (old->event != real_packet->event);
42716 if (differ) {
42717 BV_SET(fields, 2);
42718 }
42719
42720 differ = (old->len != real_packet->len);
42721 if (differ) {
42722 BV_SET(fields, 3);
42723 }
42724
42725 differ = (old->parts != real_packet->parts);
42726 if (differ) {
42727 BV_SET(fields, 4);
42728 }
42729
42730
42731#ifdef FREECIV_JSON_CONNECTION
42732 field_addr.name = "fields";
42733#endif /* FREECIV_JSON_CONNECTION */
42734 e = 0;
42735 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42736 if (e) {
42737 log_packet_detailed("fields bitvector error detected");
42738 }
42739
42740 if (BV_ISSET(fields, 0)) {
42741 log_packet_detailed(" field 'caption' has changed");
42742#ifdef FREECIV_JSON_CONNECTION
42743 field_addr.name = "caption";
42744#endif /* FREECIV_JSON_CONNECTION */
42745 e = 0;
42746 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
42747 if (e) {
42748 log_packet_detailed("'caption' field error detected");
42749 }
42750 }
42751 if (BV_ISSET(fields, 1)) {
42752 log_packet_detailed(" field 'headline' has changed");
42753#ifdef FREECIV_JSON_CONNECTION
42754 field_addr.name = "headline";
42755#endif /* FREECIV_JSON_CONNECTION */
42756 e = 0;
42757 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
42758 if (e) {
42759 log_packet_detailed("'headline' field error detected");
42760 }
42761 }
42762 if (BV_ISSET(fields, 2)) {
42763 log_packet_detailed(" field 'event' has changed");
42764#ifdef FREECIV_JSON_CONNECTION
42765 field_addr.name = "event";
42766#endif /* FREECIV_JSON_CONNECTION */
42767 e = 0;
42768 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
42769 if (e) {
42770 log_packet_detailed("'event' field error detected");
42771 }
42772 }
42773 if (BV_ISSET(fields, 3)) {
42774 log_packet_detailed(" field 'len' has changed");
42775#ifdef FREECIV_JSON_CONNECTION
42776 field_addr.name = "len";
42777#endif /* FREECIV_JSON_CONNECTION */
42778 e = 0;
42779 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
42780 if (e) {
42781 log_packet_detailed("'len' field error detected");
42782 }
42783 }
42784 if (BV_ISSET(fields, 4)) {
42785 log_packet_detailed(" field 'parts' has changed");
42786#ifdef FREECIV_JSON_CONNECTION
42787 field_addr.name = "parts";
42788#endif /* FREECIV_JSON_CONNECTION */
42789 e = 0;
42790 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
42791 if (e) {
42792 log_packet_detailed("'parts' field error detected");
42793 }
42794 }
42795
42796 *old = *real_packet;
42797#endif /* FREECIV_DELTA_PROTOCOL */
42798#ifndef FREECIV_DELTA_PROTOCOL
42799#ifdef FREECIV_JSON_CONNECTION
42800 field_addr.name = "caption";
42801#endif /* FREECIV_JSON_CONNECTION */
42802 e = 0;
42803 e |= DIO_PUT(string, &dout, &field_addr, real_packet->caption);
42804 if (e) {
42805 log_packet_detailed("'caption' field error detected");
42806 }
42807#ifdef FREECIV_JSON_CONNECTION
42808 field_addr.name = "headline";
42809#endif /* FREECIV_JSON_CONNECTION */
42810 e = 0;
42811 e |= DIO_PUT(string, &dout, &field_addr, real_packet->headline);
42812 if (e) {
42813 log_packet_detailed("'headline' field error detected");
42814 }
42815#ifdef FREECIV_JSON_CONNECTION
42816 field_addr.name = "event";
42817#endif /* FREECIV_JSON_CONNECTION */
42818 e = 0;
42819 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->event);
42820 if (e) {
42821 log_packet_detailed("'event' field error detected");
42822 }
42823#ifdef FREECIV_JSON_CONNECTION
42824 field_addr.name = "len";
42825#endif /* FREECIV_JSON_CONNECTION */
42826 e = 0;
42827 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->len);
42828 if (e) {
42829 log_packet_detailed("'len' field error detected");
42830 }
42831#ifdef FREECIV_JSON_CONNECTION
42832 field_addr.name = "parts";
42833#endif /* FREECIV_JSON_CONNECTION */
42834 e = 0;
42835 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->parts);
42836 if (e) {
42837 log_packet_detailed("'parts' field error detected");
42838 }
42839
42840#endif
42842}
42843
42844int send_packet_page_msg(struct connection *pc, const struct packet_page_msg *packet)
42845{
42846 if (!pc->used) {
42847 log_error("WARNING: trying to send data to the closed connection %s",
42849 return -1;
42850 }
42851 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG].packet != NULL, -1,
42852 "Handler for PACKET_PAGE_MSG not installed");
42853 return pc->phs.handlers->send[PACKET_PAGE_MSG].packet(pc, packet);
42854}
42855
42856void lsend_packet_page_msg(struct conn_list *dest, const struct packet_page_msg *packet)
42857{
42858 conn_list_iterate(dest, pconn) {
42859 send_packet_page_msg(pconn, packet);
42861}
42862
42863#ifdef FREECIV_DELTA_PROTOCOL
42864#define hash_packet_page_msg_part_100 hash_const
42865
42866#define cmp_packet_page_msg_part_100 cmp_const
42867
42869#endif /* FREECIV_DELTA_PROTOCOL */
42870
42872{
42873#ifdef FREECIV_DELTA_PROTOCOL
42875 struct packet_page_msg_part *old;
42876 struct genhash **hash = pc->phs.received + PACKET_PAGE_MSG_PART;
42877#endif /* FREECIV_DELTA_PROTOCOL */
42879#ifdef FREECIV_JSON_CONNECTION
42880 struct plocation field_addr;
42881 {
42885 }
42886#endif /* FREECIV_JSON_CONNECTION */
42887
42888#ifdef FREECIV_DELTA_PROTOCOL
42889#ifdef FREECIV_JSON_CONNECTION
42890 field_addr.name = "fields";
42891#endif /* FREECIV_JSON_CONNECTION */
42892 DIO_BV_GET(&din, &field_addr, fields);
42893
42894#else /* FREECIV_DELTA_PROTOCOL */
42895#ifdef FREECIV_JSON_CONNECTION
42896 field_addr.name = "lines";
42897#endif /* FREECIV_JSON_CONNECTION */
42898 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
42900 }
42901#endif
42902 log_packet_detailed("packet_page_msg_part_100: got info about ()");
42903
42904#ifdef FREECIV_DELTA_PROTOCOL
42905 if (NULL == *hash) {
42907 NULL, NULL, NULL, free);
42908 }
42909
42910 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
42911 *real_packet = *old;
42912 } else {
42913 log_packet_detailed(" no old info");
42914 memset(real_packet, 0, sizeof(*real_packet));
42915 }
42916
42917 if (BV_ISSET(fields, 0)) {
42918 log_packet_detailed(" got field 'lines'");
42919#ifdef FREECIV_JSON_CONNECTION
42920 field_addr.name = "lines";
42921#endif /* FREECIV_JSON_CONNECTION */
42922 if (!DIO_GET(string, &din, &field_addr, real_packet->lines, sizeof(real_packet->lines))) {
42924 }
42925 }
42926
42927 if (NULL == old) {
42928 old = fc_malloc(sizeof(*old));
42929 *old = *real_packet;
42930 genhash_insert(*hash, old, old);
42931 } else {
42932 *old = *real_packet;
42933 }
42934
42935#endif /* FREECIV_DELTA_PROTOCOL */
42937}
42938
42939static int send_packet_page_msg_part_100(struct connection *pc, const struct packet_page_msg_part *packet)
42940{
42941 const struct packet_page_msg_part *real_packet = packet;
42942 int e;
42943#ifdef FREECIV_DELTA_PROTOCOL
42945 struct packet_page_msg_part *old;
42946 bool differ;
42947 struct genhash **hash = pc->phs.sent + PACKET_PAGE_MSG_PART;
42948#endif /* FREECIV_DELTA_PROTOCOL */
42950#ifdef FREECIV_JSON_CONNECTION
42951 struct plocation field_addr;
42952 {
42956 }
42957#endif /* FREECIV_JSON_CONNECTION */
42958
42959 log_packet_detailed("packet_page_msg_part_100: sending info about ()");
42960
42961#ifdef FREECIV_DELTA_PROTOCOL
42962 if (NULL == *hash) {
42964 NULL, NULL, NULL, free);
42965 }
42966 BV_CLR_ALL(fields);
42967
42968 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
42969 old = fc_malloc(sizeof(*old));
42970 *old = *real_packet;
42971 genhash_insert(*hash, old, old);
42972 memset(old, 0, sizeof(*old));
42973 }
42974 differ = (strcmp(old->lines, real_packet->lines) != 0);
42975 if (differ) {
42976 BV_SET(fields, 0);
42977 }
42978
42979
42980#ifdef FREECIV_JSON_CONNECTION
42981 field_addr.name = "fields";
42982#endif /* FREECIV_JSON_CONNECTION */
42983 e = 0;
42984 e |= DIO_BV_PUT(&dout, &field_addr, fields);
42985 if (e) {
42986 log_packet_detailed("fields bitvector error detected");
42987 }
42988
42989 if (BV_ISSET(fields, 0)) {
42990 log_packet_detailed(" field 'lines' has changed");
42991#ifdef FREECIV_JSON_CONNECTION
42992 field_addr.name = "lines";
42993#endif /* FREECIV_JSON_CONNECTION */
42994 e = 0;
42995 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
42996 if (e) {
42997 log_packet_detailed("'lines' field error detected");
42998 }
42999 }
43000
43001 *old = *real_packet;
43002#endif /* FREECIV_DELTA_PROTOCOL */
43003#ifndef FREECIV_DELTA_PROTOCOL
43004#ifdef FREECIV_JSON_CONNECTION
43005 field_addr.name = "lines";
43006#endif /* FREECIV_JSON_CONNECTION */
43007 e = 0;
43008 e |= DIO_PUT(string, &dout, &field_addr, real_packet->lines);
43009 if (e) {
43010 log_packet_detailed("'lines' field error detected");
43011 }
43012
43013#endif
43015}
43016
43018{
43019 if (!pc->used) {
43020 log_error("WARNING: trying to send data to the closed connection %s",
43022 return -1;
43023 }
43024 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet != NULL, -1,
43025 "Handler for PACKET_PAGE_MSG_PART not installed");
43026 return pc->phs.handlers->send[PACKET_PAGE_MSG_PART].packet(pc, packet);
43027}
43028
43029void lsend_packet_page_msg_part(struct conn_list *dest, const struct packet_page_msg_part *packet)
43030{
43031 conn_list_iterate(dest, pconn) {
43034}
43035
43036#ifdef FREECIV_DELTA_PROTOCOL
43037#define hash_packet_report_req_100 hash_const
43038
43039#define cmp_packet_report_req_100 cmp_const
43040
43042#endif /* FREECIV_DELTA_PROTOCOL */
43043
43045{
43046#ifdef FREECIV_DELTA_PROTOCOL
43048 struct packet_report_req *old;
43049 struct genhash **hash = pc->phs.received + PACKET_REPORT_REQ;
43050#endif /* FREECIV_DELTA_PROTOCOL */
43052#ifdef FREECIV_JSON_CONNECTION
43053 struct plocation field_addr;
43054 {
43058 }
43059#endif /* FREECIV_JSON_CONNECTION */
43060
43061#ifdef FREECIV_DELTA_PROTOCOL
43062#ifdef FREECIV_JSON_CONNECTION
43063 field_addr.name = "fields";
43064#endif /* FREECIV_JSON_CONNECTION */
43065 DIO_BV_GET(&din, &field_addr, fields);
43066
43067#else /* FREECIV_DELTA_PROTOCOL */
43068#ifdef FREECIV_JSON_CONNECTION
43069 field_addr.name = "type";
43070#endif /* FREECIV_JSON_CONNECTION */
43071 {
43072 int readin;
43073
43074 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43076 }
43077 real_packet->type = readin;
43078 }
43079#endif
43080 log_packet_detailed("packet_report_req_100: got info about ()");
43081
43082#ifdef FREECIV_DELTA_PROTOCOL
43083 if (NULL == *hash) {
43085 NULL, NULL, NULL, free);
43086 }
43087
43088 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43089 *real_packet = *old;
43090 } else {
43091 log_packet_detailed(" no old info");
43092 memset(real_packet, 0, sizeof(*real_packet));
43093 }
43094
43095 if (BV_ISSET(fields, 0)) {
43096 log_packet_detailed(" got field 'type'");
43097#ifdef FREECIV_JSON_CONNECTION
43098 field_addr.name = "type";
43099#endif /* FREECIV_JSON_CONNECTION */
43100 {
43101 int readin;
43102
43103 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43105 }
43106 real_packet->type = readin;
43107 }
43108 }
43109
43110 if (NULL == old) {
43111 old = fc_malloc(sizeof(*old));
43112 *old = *real_packet;
43113 genhash_insert(*hash, old, old);
43114 } else {
43115 *old = *real_packet;
43116 }
43117
43118#endif /* FREECIV_DELTA_PROTOCOL */
43120}
43121
43122static int send_packet_report_req_100(struct connection *pc, const struct packet_report_req *packet)
43123{
43124 const struct packet_report_req *real_packet = packet;
43125 int e;
43126#ifdef FREECIV_DELTA_PROTOCOL
43128 struct packet_report_req *old;
43129 bool differ;
43130 struct genhash **hash = pc->phs.sent + PACKET_REPORT_REQ;
43131#endif /* FREECIV_DELTA_PROTOCOL */
43133#ifdef FREECIV_JSON_CONNECTION
43134 struct plocation field_addr;
43135 {
43139 }
43140#endif /* FREECIV_JSON_CONNECTION */
43141
43142 log_packet_detailed("packet_report_req_100: sending info about ()");
43143
43144#ifdef FREECIV_DELTA_PROTOCOL
43145 if (NULL == *hash) {
43147 NULL, NULL, NULL, free);
43148 }
43149 BV_CLR_ALL(fields);
43150
43151 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43152 old = fc_malloc(sizeof(*old));
43153 *old = *real_packet;
43154 genhash_insert(*hash, old, old);
43155 memset(old, 0, sizeof(*old));
43156 }
43157 differ = (old->type != real_packet->type);
43158 if (differ) {
43159 BV_SET(fields, 0);
43160 }
43161
43162
43163#ifdef FREECIV_JSON_CONNECTION
43164 field_addr.name = "fields";
43165#endif /* FREECIV_JSON_CONNECTION */
43166 e = 0;
43167 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43168 if (e) {
43169 log_packet_detailed("fields bitvector error detected");
43170 }
43171
43172 if (BV_ISSET(fields, 0)) {
43173 log_packet_detailed(" field 'type' has changed");
43174#ifdef FREECIV_JSON_CONNECTION
43175 field_addr.name = "type";
43176#endif /* FREECIV_JSON_CONNECTION */
43177 e = 0;
43178 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
43179 if (e) {
43180 log_packet_detailed("'type' field error detected");
43181 }
43182 }
43183
43184 *old = *real_packet;
43185#endif /* FREECIV_DELTA_PROTOCOL */
43186#ifndef FREECIV_DELTA_PROTOCOL
43187#ifdef FREECIV_JSON_CONNECTION
43188 field_addr.name = "type";
43189#endif /* FREECIV_JSON_CONNECTION */
43190 e = 0;
43191 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
43192 if (e) {
43193 log_packet_detailed("'type' field error detected");
43194 }
43195
43196#endif
43198}
43199
43200int send_packet_report_req(struct connection *pc, const struct packet_report_req *packet)
43201{
43202 if (!pc->used) {
43203 log_error("WARNING: trying to send data to the closed connection %s",
43205 return -1;
43206 }
43207 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_REPORT_REQ].packet != NULL, -1,
43208 "Handler for PACKET_REPORT_REQ not installed");
43209 return pc->phs.handlers->send[PACKET_REPORT_REQ].packet(pc, packet);
43210}
43211
43213{
43214 struct packet_report_req packet, *real_packet = &packet;
43215
43217
43219}
43220
43221#ifdef FREECIV_DELTA_PROTOCOL
43223{
43224 const struct packet_conn_info *key = (const struct packet_conn_info *) vkey;
43225 genhash_val_t result = 0;
43226
43227 result += key->id;
43228
43229 result &= 0xFFFFFFFF;
43230 return result;
43231}
43232
43233static bool cmp_packet_conn_info_100(const void *vkey1, const void *vkey2)
43234{
43235 const struct packet_conn_info *old = (const struct packet_conn_info *) vkey1;
43236 const struct packet_conn_info *real_packet = (const struct packet_conn_info *) vkey2;
43237 bool differ;
43238
43239 differ = (old->id != real_packet->id);
43240
43241 return !differ;
43242}
43244#endif /* FREECIV_DELTA_PROTOCOL */
43245
43247{
43248#ifdef FREECIV_DELTA_PROTOCOL
43250 struct packet_conn_info *old;
43251 struct genhash **hash = pc->phs.received + PACKET_CONN_INFO;
43252#endif /* FREECIV_DELTA_PROTOCOL */
43254#ifdef FREECIV_JSON_CONNECTION
43255 struct plocation field_addr;
43256 {
43260 }
43261#endif /* FREECIV_JSON_CONNECTION */
43262
43263#ifdef FREECIV_DELTA_PROTOCOL
43264#ifdef FREECIV_JSON_CONNECTION
43265 field_addr.name = "fields";
43266#endif /* FREECIV_JSON_CONNECTION */
43267 DIO_BV_GET(&din, &field_addr, fields);
43268#ifdef FREECIV_JSON_CONNECTION
43269 field_addr.name = "id";
43270#endif /* FREECIV_JSON_CONNECTION */
43271 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
43273 }
43274
43275#else /* FREECIV_DELTA_PROTOCOL */
43276#ifdef FREECIV_JSON_CONNECTION
43277 field_addr.name = "id";
43278#endif /* FREECIV_JSON_CONNECTION */
43279 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->id)) {
43281 }
43282#ifdef FREECIV_JSON_CONNECTION
43283 field_addr.name = "used";
43284#endif /* FREECIV_JSON_CONNECTION */
43285 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->used)) {
43287 }
43288#ifdef FREECIV_JSON_CONNECTION
43289 field_addr.name = "established";
43290#endif /* FREECIV_JSON_CONNECTION */
43291 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->established)) {
43292 RECEIVE_PACKET_FIELD_ERROR(established);
43293 }
43294#ifdef FREECIV_JSON_CONNECTION
43295 field_addr.name = "observer";
43296#endif /* FREECIV_JSON_CONNECTION */
43297 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->observer)) {
43299 }
43300#ifdef FREECIV_JSON_CONNECTION
43301 field_addr.name = "player_num";
43302#endif /* FREECIV_JSON_CONNECTION */
43303 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
43304 RECEIVE_PACKET_FIELD_ERROR(player_num);
43305 }
43306#ifdef FREECIV_JSON_CONNECTION
43307 field_addr.name = "access_level";
43308#endif /* FREECIV_JSON_CONNECTION */
43309 {
43310 int readin;
43311
43312 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43313 RECEIVE_PACKET_FIELD_ERROR(access_level);
43314 }
43315 real_packet->access_level = readin;
43316 }
43317#ifdef FREECIV_JSON_CONNECTION
43318 field_addr.name = "username";
43319#endif /* FREECIV_JSON_CONNECTION */
43320 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
43322 }
43323#ifdef FREECIV_JSON_CONNECTION
43324 field_addr.name = "addr";
43325#endif /* FREECIV_JSON_CONNECTION */
43326 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
43328 }
43329#ifdef FREECIV_JSON_CONNECTION
43330 field_addr.name = "capability";
43331#endif /* FREECIV_JSON_CONNECTION */
43332 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
43333 RECEIVE_PACKET_FIELD_ERROR(capability);
43334 }
43335#endif
43336 log_packet_detailed("packet_conn_info_100: got info about (%d)",
43337 real_packet->id);
43338
43339#ifdef FREECIV_DELTA_PROTOCOL
43340 if (NULL == *hash) {
43342 NULL, NULL, NULL, free);
43343 }
43344
43345 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43346 *real_packet = *old;
43347 } else {
43348 int id;
43349
43350 id = real_packet->id;
43351
43352 log_packet_detailed(" no old info");
43353 memset(real_packet, 0, sizeof(*real_packet));
43354
43355 real_packet->id = id;
43356 }
43357
43358 real_packet->used = BV_ISSET(fields, 0);
43359 real_packet->established = BV_ISSET(fields, 1);
43360 real_packet->observer = BV_ISSET(fields, 2);
43361 if (BV_ISSET(fields, 3)) {
43362 log_packet_detailed(" got field 'player_num'");
43363#ifdef FREECIV_JSON_CONNECTION
43364 field_addr.name = "player_num";
43365#endif /* FREECIV_JSON_CONNECTION */
43366 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
43367 RECEIVE_PACKET_FIELD_ERROR(player_num);
43368 }
43369 }
43370 if (BV_ISSET(fields, 4)) {
43371 log_packet_detailed(" got field 'access_level'");
43372#ifdef FREECIV_JSON_CONNECTION
43373 field_addr.name = "access_level";
43374#endif /* FREECIV_JSON_CONNECTION */
43375 {
43376 int readin;
43377
43378 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
43379 RECEIVE_PACKET_FIELD_ERROR(access_level);
43380 }
43381 real_packet->access_level = readin;
43382 }
43383 }
43384 if (BV_ISSET(fields, 5)) {
43385 log_packet_detailed(" got field 'username'");
43386#ifdef FREECIV_JSON_CONNECTION
43387 field_addr.name = "username";
43388#endif /* FREECIV_JSON_CONNECTION */
43389 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
43391 }
43392 }
43393 if (BV_ISSET(fields, 6)) {
43394 log_packet_detailed(" got field 'addr'");
43395#ifdef FREECIV_JSON_CONNECTION
43396 field_addr.name = "addr";
43397#endif /* FREECIV_JSON_CONNECTION */
43398 if (!DIO_GET(string, &din, &field_addr, real_packet->addr, sizeof(real_packet->addr))) {
43400 }
43401 }
43402 if (BV_ISSET(fields, 7)) {
43403 log_packet_detailed(" got field 'capability'");
43404#ifdef FREECIV_JSON_CONNECTION
43405 field_addr.name = "capability";
43406#endif /* FREECIV_JSON_CONNECTION */
43407 if (!DIO_GET(string, &din, &field_addr, real_packet->capability, sizeof(real_packet->capability))) {
43408 RECEIVE_PACKET_FIELD_ERROR(capability);
43409 }
43410 }
43411
43412 if (NULL == old) {
43413 old = fc_malloc(sizeof(*old));
43414 *old = *real_packet;
43415 genhash_insert(*hash, old, old);
43416 } else {
43417 *old = *real_packet;
43418 }
43419
43420#endif /* FREECIV_DELTA_PROTOCOL */
43422}
43423
43424static int send_packet_conn_info_100(struct connection *pc, const struct packet_conn_info *packet)
43425{
43426 const struct packet_conn_info *real_packet = packet;
43427 int e;
43428#ifdef FREECIV_DELTA_PROTOCOL
43430 struct packet_conn_info *old;
43431 bool differ;
43432 struct genhash **hash = pc->phs.sent + PACKET_CONN_INFO;
43433 int different = 0;
43434#endif /* FREECIV_DELTA_PROTOCOL */
43436#ifdef FREECIV_JSON_CONNECTION
43437 struct plocation field_addr;
43438 {
43442 }
43443#endif /* FREECIV_JSON_CONNECTION */
43444
43445 log_packet_detailed("packet_conn_info_100: sending info about (%d)",
43446 real_packet->id);
43447
43448#ifdef FREECIV_DELTA_PROTOCOL
43449 if (NULL == *hash) {
43451 NULL, NULL, NULL, free);
43452 }
43453 BV_CLR_ALL(fields);
43454
43455 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43456 old = fc_malloc(sizeof(*old));
43457 *old = *real_packet;
43458 genhash_insert(*hash, old, old);
43459 memset(old, 0, sizeof(*old));
43460 different = 1; /* Force to send. */
43461 }
43462 differ = (old->used != real_packet->used);
43463 if (differ) {
43464 different++;
43465 }
43466 if (packet->used) {
43467 BV_SET(fields, 0);
43468 }
43469
43470 differ = (old->established != real_packet->established);
43471 if (differ) {
43472 different++;
43473 }
43474 if (packet->established) {
43475 BV_SET(fields, 1);
43476 }
43477
43478 differ = (old->observer != real_packet->observer);
43479 if (differ) {
43480 different++;
43481 }
43482 if (packet->observer) {
43483 BV_SET(fields, 2);
43484 }
43485
43486 differ = (old->player_num != real_packet->player_num);
43487 if (differ) {
43488 different++;
43489 BV_SET(fields, 3);
43490 }
43491
43492 differ = (old->access_level != real_packet->access_level);
43493 if (differ) {
43494 different++;
43495 BV_SET(fields, 4);
43496 }
43497
43498 differ = (strcmp(old->username, real_packet->username) != 0);
43499 if (differ) {
43500 different++;
43501 BV_SET(fields, 5);
43502 }
43503
43504 differ = (strcmp(old->addr, real_packet->addr) != 0);
43505 if (differ) {
43506 different++;
43507 BV_SET(fields, 6);
43508 }
43509
43510 differ = (strcmp(old->capability, real_packet->capability) != 0);
43511 if (differ) {
43512 different++;
43513 BV_SET(fields, 7);
43514 }
43515
43516 if (different == 0) {
43517 log_packet_detailed(" no change -> discard");
43519 }
43520
43521#ifdef FREECIV_JSON_CONNECTION
43522 field_addr.name = "fields";
43523#endif /* FREECIV_JSON_CONNECTION */
43524 e = 0;
43525 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43526 if (e) {
43527 log_packet_detailed("fields bitvector error detected");
43528 }
43529#ifdef FREECIV_JSON_CONNECTION
43530 field_addr.name = "id";
43531#endif /* FREECIV_JSON_CONNECTION */
43532 e = 0;
43533 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
43534 if (e) {
43535 log_packet_detailed("'id' field error detected");
43536 }
43537
43538 /* field 0 is folded into the header */
43539 /* field 1 is folded into the header */
43540 /* field 2 is folded into the header */
43541 if (BV_ISSET(fields, 3)) {
43542 log_packet_detailed(" field 'player_num' has changed");
43543#ifdef FREECIV_JSON_CONNECTION
43544 field_addr.name = "player_num";
43545#endif /* FREECIV_JSON_CONNECTION */
43546 e = 0;
43547 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
43548 if (e) {
43549 log_packet_detailed("'player_num' field error detected");
43550 }
43551 }
43552 if (BV_ISSET(fields, 4)) {
43553 log_packet_detailed(" field 'access_level' has changed");
43554#ifdef FREECIV_JSON_CONNECTION
43555 field_addr.name = "access_level";
43556#endif /* FREECIV_JSON_CONNECTION */
43557 e = 0;
43558 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
43559 if (e) {
43560 log_packet_detailed("'access_level' field error detected");
43561 }
43562 }
43563 if (BV_ISSET(fields, 5)) {
43564 log_packet_detailed(" field 'username' has changed");
43565#ifdef FREECIV_JSON_CONNECTION
43566 field_addr.name = "username";
43567#endif /* FREECIV_JSON_CONNECTION */
43568 e = 0;
43569 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
43570 if (e) {
43571 log_packet_detailed("'username' field error detected");
43572 }
43573 }
43574 if (BV_ISSET(fields, 6)) {
43575 log_packet_detailed(" field 'addr' has changed");
43576#ifdef FREECIV_JSON_CONNECTION
43577 field_addr.name = "addr";
43578#endif /* FREECIV_JSON_CONNECTION */
43579 e = 0;
43580 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
43581 if (e) {
43582 log_packet_detailed("'addr' field error detected");
43583 }
43584 }
43585 if (BV_ISSET(fields, 7)) {
43586 log_packet_detailed(" field 'capability' has changed");
43587#ifdef FREECIV_JSON_CONNECTION
43588 field_addr.name = "capability";
43589#endif /* FREECIV_JSON_CONNECTION */
43590 e = 0;
43591 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
43592 if (e) {
43593 log_packet_detailed("'capability' field error detected");
43594 }
43595 }
43596
43597 *old = *real_packet;
43598#endif /* FREECIV_DELTA_PROTOCOL */
43599#ifndef FREECIV_DELTA_PROTOCOL
43600#ifdef FREECIV_JSON_CONNECTION
43601 field_addr.name = "id";
43602#endif /* FREECIV_JSON_CONNECTION */
43603 e = 0;
43604 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
43605 if (e) {
43606 log_packet_detailed("'id' field error detected");
43607 }
43608#ifdef FREECIV_JSON_CONNECTION
43609 field_addr.name = "used";
43610#endif /* FREECIV_JSON_CONNECTION */
43611 e = 0;
43612 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->used);
43613 if (e) {
43614 log_packet_detailed("'used' field error detected");
43615 }
43616#ifdef FREECIV_JSON_CONNECTION
43617 field_addr.name = "established";
43618#endif /* FREECIV_JSON_CONNECTION */
43619 e = 0;
43620 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->established);
43621 if (e) {
43622 log_packet_detailed("'established' field error detected");
43623 }
43624#ifdef FREECIV_JSON_CONNECTION
43625 field_addr.name = "observer";
43626#endif /* FREECIV_JSON_CONNECTION */
43627 e = 0;
43628 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->observer);
43629 if (e) {
43630 log_packet_detailed("'observer' field error detected");
43631 }
43632#ifdef FREECIV_JSON_CONNECTION
43633 field_addr.name = "player_num";
43634#endif /* FREECIV_JSON_CONNECTION */
43635 e = 0;
43636 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
43637 if (e) {
43638 log_packet_detailed("'player_num' field error detected");
43639 }
43640#ifdef FREECIV_JSON_CONNECTION
43641 field_addr.name = "access_level";
43642#endif /* FREECIV_JSON_CONNECTION */
43643 e = 0;
43644 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->access_level);
43645 if (e) {
43646 log_packet_detailed("'access_level' field error detected");
43647 }
43648#ifdef FREECIV_JSON_CONNECTION
43649 field_addr.name = "username";
43650#endif /* FREECIV_JSON_CONNECTION */
43651 e = 0;
43652 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
43653 if (e) {
43654 log_packet_detailed("'username' field error detected");
43655 }
43656#ifdef FREECIV_JSON_CONNECTION
43657 field_addr.name = "addr";
43658#endif /* FREECIV_JSON_CONNECTION */
43659 e = 0;
43660 e |= DIO_PUT(string, &dout, &field_addr, real_packet->addr);
43661 if (e) {
43662 log_packet_detailed("'addr' field error detected");
43663 }
43664#ifdef FREECIV_JSON_CONNECTION
43665 field_addr.name = "capability";
43666#endif /* FREECIV_JSON_CONNECTION */
43667 e = 0;
43668 e |= DIO_PUT(string, &dout, &field_addr, real_packet->capability);
43669 if (e) {
43670 log_packet_detailed("'capability' field error detected");
43671 }
43672
43673#endif
43675}
43676
43677int send_packet_conn_info(struct connection *pc, const struct packet_conn_info *packet)
43678{
43679 if (!pc->used) {
43680 log_error("WARNING: trying to send data to the closed connection %s",
43682 return -1;
43683 }
43684 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_INFO].packet != NULL, -1,
43685 "Handler for PACKET_CONN_INFO not installed");
43686 return pc->phs.handlers->send[PACKET_CONN_INFO].packet(pc, packet);
43687}
43688
43689void lsend_packet_conn_info(struct conn_list *dest, const struct packet_conn_info *packet)
43690{
43691 conn_list_iterate(dest, pconn) {
43694}
43695
43696#ifdef FREECIV_DELTA_PROTOCOL
43697#define hash_packet_conn_ping_info_100 hash_const
43698
43699#define cmp_packet_conn_ping_info_100 cmp_const
43700
43702#endif /* FREECIV_DELTA_PROTOCOL */
43703
43705{
43706#ifdef FREECIV_DELTA_PROTOCOL
43708 struct packet_conn_ping_info *old;
43709 struct genhash **hash = pc->phs.received + PACKET_CONN_PING_INFO;
43710#endif /* FREECIV_DELTA_PROTOCOL */
43712#ifdef FREECIV_JSON_CONNECTION
43713 struct plocation field_addr;
43714 {
43718 }
43719#endif /* FREECIV_JSON_CONNECTION */
43720
43721#ifdef FREECIV_DELTA_PROTOCOL
43722#ifdef FREECIV_JSON_CONNECTION
43723 field_addr.name = "fields";
43724#endif /* FREECIV_JSON_CONNECTION */
43725 DIO_BV_GET(&din, &field_addr, fields);
43726
43727#else /* FREECIV_DELTA_PROTOCOL */
43728#ifdef FREECIV_JSON_CONNECTION
43729 field_addr.name = "connections";
43730#endif /* FREECIV_JSON_CONNECTION */
43731 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
43733 }
43734#ifdef FREECIV_JSON_CONNECTION
43735 field_addr.name = "conn_id";
43736#endif /* FREECIV_JSON_CONNECTION */
43737 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
43738 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": truncation array");
43739 }
43740 {
43741 int i;
43742
43743#ifdef FREECIV_JSON_CONNECTION
43744 /* Enter array. */
43745 field_addr.sub_location = plocation_elem_new(0);
43746#endif /* FREECIV_JSON_CONNECTION */
43747
43748 for (i = 0; i < real_packet->connections; i++) {
43749#ifdef FREECIV_JSON_CONNECTION
43750 field_addr.sub_location->number = i;
43751#endif /* FREECIV_JSON_CONNECTION */
43752
43753 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
43755 }
43756 }
43757
43758#ifdef FREECIV_JSON_CONNECTION
43759 /* Exit array. */
43760 FC_FREE(field_addr.sub_location);
43761#endif /* FREECIV_JSON_CONNECTION */
43762 }
43763#ifdef FREECIV_JSON_CONNECTION
43764 field_addr.name = "ping_time";
43765#endif /* FREECIV_JSON_CONNECTION */
43766 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
43767 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": truncation array");
43768 }
43769 {
43770 int i;
43771
43772#ifdef FREECIV_JSON_CONNECTION
43773 /* Enter array. */
43774 field_addr.sub_location = plocation_elem_new(0);
43775#endif /* FREECIV_JSON_CONNECTION */
43776
43777 for (i = 0; i < real_packet->connections; i++) {
43778#ifdef FREECIV_JSON_CONNECTION
43779 field_addr.sub_location->number = i;
43780#endif /* FREECIV_JSON_CONNECTION */
43781
43782 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
43783 RECEIVE_PACKET_FIELD_ERROR(ping_time);
43784 }
43785 }
43786
43787#ifdef FREECIV_JSON_CONNECTION
43788 /* Exit array. */
43789 FC_FREE(field_addr.sub_location);
43790#endif /* FREECIV_JSON_CONNECTION */
43791 }
43792#endif
43793 log_packet_detailed("packet_conn_ping_info_100: got info about ()");
43794
43795#ifdef FREECIV_DELTA_PROTOCOL
43796 if (NULL == *hash) {
43798 NULL, NULL, NULL, free);
43799 }
43800
43801 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
43802 *real_packet = *old;
43803 } else {
43804 log_packet_detailed(" no old info");
43805 memset(real_packet, 0, sizeof(*real_packet));
43806 }
43807
43808 if (BV_ISSET(fields, 0)) {
43809 log_packet_detailed(" got field 'connections'");
43810#ifdef FREECIV_JSON_CONNECTION
43811 field_addr.name = "connections";
43812#endif /* FREECIV_JSON_CONNECTION */
43813 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->connections)) {
43815 }
43816 }
43817 if (BV_ISSET(fields, 1)) {
43818 log_packet_detailed(" got field 'conn_id'");
43819#ifdef FREECIV_JSON_CONNECTION
43820 field_addr.name = "conn_id";
43821#endif /* FREECIV_JSON_CONNECTION */
43822 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
43823 RECEIVE_PACKET_FIELD_ERROR(conn_id, ": truncation array");
43824 }
43825 {
43826 int i;
43827
43828#ifdef FREECIV_JSON_CONNECTION
43829 /* Enter array. */
43830 field_addr.sub_location = plocation_elem_new(0);
43831#endif /* FREECIV_JSON_CONNECTION */
43832
43833 for (i = 0; i < real_packet->connections; i++) {
43834#ifdef FREECIV_JSON_CONNECTION
43835 field_addr.sub_location->number = i;
43836#endif /* FREECIV_JSON_CONNECTION */
43837
43838 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->conn_id[i])) {
43840 }
43841 }
43842
43843#ifdef FREECIV_JSON_CONNECTION
43844 /* Exit array. */
43845 FC_FREE(field_addr.sub_location);
43846#endif /* FREECIV_JSON_CONNECTION */
43847 }
43848 }
43849 if (BV_ISSET(fields, 2)) {
43850 log_packet_detailed(" got field 'ping_time'");
43851#ifdef FREECIV_JSON_CONNECTION
43852 field_addr.name = "ping_time";
43853#endif /* FREECIV_JSON_CONNECTION */
43854 if (real_packet->connections > MAX_NUM_CONNECTIONS) {
43855 RECEIVE_PACKET_FIELD_ERROR(ping_time, ": truncation array");
43856 }
43857 {
43858 int i;
43859
43860#ifdef FREECIV_JSON_CONNECTION
43861 /* Enter array. */
43862 field_addr.sub_location = plocation_elem_new(0);
43863#endif /* FREECIV_JSON_CONNECTION */
43864
43865 for (i = 0; i < real_packet->connections; i++) {
43866#ifdef FREECIV_JSON_CONNECTION
43867 field_addr.sub_location->number = i;
43868#endif /* FREECIV_JSON_CONNECTION */
43869
43870 if (!DIO_GET(sfloat, &din, &field_addr, &real_packet->ping_time[i], 100000)) {
43871 RECEIVE_PACKET_FIELD_ERROR(ping_time);
43872 }
43873 }
43874
43875#ifdef FREECIV_JSON_CONNECTION
43876 /* Exit array. */
43877 FC_FREE(field_addr.sub_location);
43878#endif /* FREECIV_JSON_CONNECTION */
43879 }
43880 }
43881
43882 if (NULL == old) {
43883 old = fc_malloc(sizeof(*old));
43884 *old = *real_packet;
43885 genhash_insert(*hash, old, old);
43886 } else {
43887 *old = *real_packet;
43888 }
43889
43890#endif /* FREECIV_DELTA_PROTOCOL */
43892}
43893
43895{
43896 const struct packet_conn_ping_info *real_packet = packet;
43897 int e;
43898#ifdef FREECIV_DELTA_PROTOCOL
43900 struct packet_conn_ping_info *old;
43901 bool differ;
43902 struct genhash **hash = pc->phs.sent + PACKET_CONN_PING_INFO;
43903#endif /* FREECIV_DELTA_PROTOCOL */
43905#ifdef FREECIV_JSON_CONNECTION
43906 struct plocation field_addr;
43907 {
43911 }
43912#endif /* FREECIV_JSON_CONNECTION */
43913
43914 log_packet_detailed("packet_conn_ping_info_100: sending info about ()");
43915
43916#ifdef FREECIV_DELTA_PROTOCOL
43917 if (NULL == *hash) {
43919 NULL, NULL, NULL, free);
43920 }
43921 BV_CLR_ALL(fields);
43922
43923 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
43924 old = fc_malloc(sizeof(*old));
43925 *old = *real_packet;
43926 genhash_insert(*hash, old, old);
43927 memset(old, 0, sizeof(*old));
43928 }
43929 differ = (old->connections != real_packet->connections);
43930 if (differ) {
43931 BV_SET(fields, 0);
43932 }
43933
43934 differ = (old->connections != real_packet->connections);
43935 if (!differ) {
43936 int i;
43937
43938 for (i = 0; i < real_packet->connections; i++) {
43939 differ = (old->conn_id[i] != real_packet->conn_id[i]);
43940 if (differ) {
43941 break;
43942 }
43943 }
43944 }
43945 if (differ) {
43946 BV_SET(fields, 1);
43947 }
43948
43949 differ = (old->connections != real_packet->connections);
43950 if (!differ) {
43951 int i;
43952
43953 for (i = 0; i < real_packet->connections; i++) {
43954 differ = (old->ping_time[i] != real_packet->ping_time[i]);
43955 if (differ) {
43956 break;
43957 }
43958 }
43959 }
43960 if (differ) {
43961 BV_SET(fields, 2);
43962 }
43963
43964
43965#ifdef FREECIV_JSON_CONNECTION
43966 field_addr.name = "fields";
43967#endif /* FREECIV_JSON_CONNECTION */
43968 e = 0;
43969 e |= DIO_BV_PUT(&dout, &field_addr, fields);
43970 if (e) {
43971 log_packet_detailed("fields bitvector error detected");
43972 }
43973
43974 if (BV_ISSET(fields, 0)) {
43975 log_packet_detailed(" field 'connections' has changed");
43976#ifdef FREECIV_JSON_CONNECTION
43977 field_addr.name = "connections";
43978#endif /* FREECIV_JSON_CONNECTION */
43979 e = 0;
43980 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
43981 if (e) {
43982 log_packet_detailed("'connections' field error detected");
43983 }
43984 }
43985 if (BV_ISSET(fields, 1)) {
43986 log_packet_detailed(" field 'conn_id' has changed");
43987#ifdef FREECIV_JSON_CONNECTION
43988 field_addr.name = "conn_id";
43989#endif /* FREECIV_JSON_CONNECTION */
43990 e = 0;
43991 {
43992 int i;
43993
43994#ifdef FREECIV_JSON_CONNECTION
43995 /* Create the array. */
43996 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
43997
43998 /* Enter the array. */
43999 field_addr.sub_location = plocation_elem_new(0);
44000#endif /* FREECIV_JSON_CONNECTION */
44001
44002 for (i = 0; i < real_packet->connections; i++) {
44003#ifdef FREECIV_JSON_CONNECTION
44004 /* Next array element. */
44005 field_addr.sub_location->number = i;
44006#endif /* FREECIV_JSON_CONNECTION */
44007
44008 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
44009 }
44010
44011#ifdef FREECIV_JSON_CONNECTION
44012 /* Exit array. */
44013 FC_FREE(field_addr.sub_location);
44014#endif /* FREECIV_JSON_CONNECTION */
44015 }
44016 if (e) {
44017 log_packet_detailed("'conn_id' field error detected");
44018 }
44019 }
44020 if (BV_ISSET(fields, 2)) {
44021 log_packet_detailed(" field 'ping_time' has changed");
44022#ifdef FREECIV_JSON_CONNECTION
44023 field_addr.name = "ping_time";
44024#endif /* FREECIV_JSON_CONNECTION */
44025 e = 0;
44026 {
44027 int i;
44028
44029#ifdef FREECIV_JSON_CONNECTION
44030 /* Create the array. */
44031 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44032
44033 /* Enter the array. */
44034 field_addr.sub_location = plocation_elem_new(0);
44035#endif /* FREECIV_JSON_CONNECTION */
44036
44037 for (i = 0; i < real_packet->connections; i++) {
44038#ifdef FREECIV_JSON_CONNECTION
44039 /* Next array element. */
44040 field_addr.sub_location->number = i;
44041#endif /* FREECIV_JSON_CONNECTION */
44042
44043 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
44044 }
44045
44046#ifdef FREECIV_JSON_CONNECTION
44047 /* Exit array. */
44048 FC_FREE(field_addr.sub_location);
44049#endif /* FREECIV_JSON_CONNECTION */
44050 }
44051 if (e) {
44052 log_packet_detailed("'ping_time' field error detected");
44053 }
44054 }
44055
44056 *old = *real_packet;
44057#endif /* FREECIV_DELTA_PROTOCOL */
44058#ifndef FREECIV_DELTA_PROTOCOL
44059#ifdef FREECIV_JSON_CONNECTION
44060 field_addr.name = "connections";
44061#endif /* FREECIV_JSON_CONNECTION */
44062 e = 0;
44063 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->connections);
44064 if (e) {
44065 log_packet_detailed("'connections' field error detected");
44066 }
44067#ifdef FREECIV_JSON_CONNECTION
44068 field_addr.name = "conn_id";
44069#endif /* FREECIV_JSON_CONNECTION */
44070 e = 0;
44071 {
44072 int i;
44073
44074#ifdef FREECIV_JSON_CONNECTION
44075 /* Create the array. */
44076 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44077
44078 /* Enter the array. */
44079 field_addr.sub_location = plocation_elem_new(0);
44080#endif /* FREECIV_JSON_CONNECTION */
44081
44082 for (i = 0; i < real_packet->connections; i++) {
44083#ifdef FREECIV_JSON_CONNECTION
44084 /* Next array element. */
44085 field_addr.sub_location->number = i;
44086#endif /* FREECIV_JSON_CONNECTION */
44087
44088 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->conn_id[i]);
44089 }
44090
44091#ifdef FREECIV_JSON_CONNECTION
44092 /* Exit array. */
44093 FC_FREE(field_addr.sub_location);
44094#endif /* FREECIV_JSON_CONNECTION */
44095 }
44096 if (e) {
44097 log_packet_detailed("'conn_id' field error detected");
44098 }
44099#ifdef FREECIV_JSON_CONNECTION
44100 field_addr.name = "ping_time";
44101#endif /* FREECIV_JSON_CONNECTION */
44102 e = 0;
44103 {
44104 int i;
44105
44106#ifdef FREECIV_JSON_CONNECTION
44107 /* Create the array. */
44108 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->connections);
44109
44110 /* Enter the array. */
44111 field_addr.sub_location = plocation_elem_new(0);
44112#endif /* FREECIV_JSON_CONNECTION */
44113
44114 for (i = 0; i < real_packet->connections; i++) {
44115#ifdef FREECIV_JSON_CONNECTION
44116 /* Next array element. */
44117 field_addr.sub_location->number = i;
44118#endif /* FREECIV_JSON_CONNECTION */
44119
44120 e |= DIO_PUT(sfloat, &dout, &field_addr, real_packet->ping_time[i], 100000);
44121 }
44122
44123#ifdef FREECIV_JSON_CONNECTION
44124 /* Exit array. */
44125 FC_FREE(field_addr.sub_location);
44126#endif /* FREECIV_JSON_CONNECTION */
44127 }
44128 if (e) {
44129 log_packet_detailed("'ping_time' field error detected");
44130 }
44131
44132#endif
44134}
44135
44137{
44138 if (!pc->used) {
44139 log_error("WARNING: trying to send data to the closed connection %s",
44141 return -1;
44142 }
44143 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet != NULL, -1,
44144 "Handler for PACKET_CONN_PING_INFO not installed");
44145 return pc->phs.handlers->send[PACKET_CONN_PING_INFO].packet(pc, packet);
44146}
44147
44148void lsend_packet_conn_ping_info(struct conn_list *dest, const struct packet_conn_ping_info *packet)
44149{
44150 conn_list_iterate(dest, pconn) {
44153}
44154
44156{
44158#if 1 /* To match endif */
44159 real_packet->__dummy = 0xff;
44160#endif
44161 log_packet_detailed("packet_conn_ping_100: got info about ()");
44163}
44164
44166{
44168
44169 log_packet_detailed("packet_conn_ping_100: sending info about ()");
44171}
44172
44174{
44175 if (!pc->used) {
44176 log_error("WARNING: trying to send data to the closed connection %s",
44178 return -1;
44179 }
44180 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PING].no_packet != NULL, -1,
44181 "Handler for PACKET_CONN_PING not installed");
44182 return pc->phs.handlers->send[PACKET_CONN_PING].no_packet(pc);
44183}
44184
44186{
44188#if 1 /* To match endif */
44189 real_packet->__dummy = 0xff;
44190#endif
44191 log_packet_detailed("packet_conn_pong_100: got info about ()");
44193}
44194
44196{
44198
44199 log_packet_detailed("packet_conn_pong_100: sending info about ()");
44201}
44202
44204{
44205 if (!pc->used) {
44206 log_error("WARNING: trying to send data to the closed connection %s",
44208 return -1;
44209 }
44210 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CONN_PONG].no_packet != NULL, -1,
44211 "Handler for PACKET_CONN_PONG not installed");
44212 return pc->phs.handlers->send[PACKET_CONN_PONG].no_packet(pc);
44213}
44214
44216{
44218#if 1 /* To match endif */
44219 real_packet->__dummy = 0xff;
44220#endif
44221 log_packet_detailed("packet_client_heartbeat_100: got info about ()");
44223}
44224
44226{
44228
44229 log_packet_detailed("packet_client_heartbeat_100: sending info about ()");
44231}
44232
44234{
44235 if (!pc->used) {
44236 log_error("WARNING: trying to send data to the closed connection %s",
44238 return -1;
44239 }
44240 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet != NULL, -1,
44241 "Handler for PACKET_CLIENT_HEARTBEAT not installed");
44242 return pc->phs.handlers->send[PACKET_CLIENT_HEARTBEAT].no_packet(pc);
44243}
44244
44245#ifdef FREECIV_DELTA_PROTOCOL
44246#define hash_packet_client_info_100 hash_const
44247
44248#define cmp_packet_client_info_100 cmp_const
44249
44251#endif /* FREECIV_DELTA_PROTOCOL */
44252
44254{
44255#ifdef FREECIV_DELTA_PROTOCOL
44257 struct packet_client_info *old;
44258 struct genhash **hash = pc->phs.received + PACKET_CLIENT_INFO;
44259#endif /* FREECIV_DELTA_PROTOCOL */
44261#ifdef FREECIV_JSON_CONNECTION
44262 struct plocation field_addr;
44263 {
44267 }
44268#endif /* FREECIV_JSON_CONNECTION */
44269
44270#ifdef FREECIV_DELTA_PROTOCOL
44271#ifdef FREECIV_JSON_CONNECTION
44272 field_addr.name = "fields";
44273#endif /* FREECIV_JSON_CONNECTION */
44274 DIO_BV_GET(&din, &field_addr, fields);
44275
44276#else /* FREECIV_DELTA_PROTOCOL */
44277#ifdef FREECIV_JSON_CONNECTION
44278 field_addr.name = "gui";
44279#endif /* FREECIV_JSON_CONNECTION */
44280 {
44281 int readin;
44282
44283 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
44285 }
44286 real_packet->gui = readin;
44287 }
44288#ifdef FREECIV_JSON_CONNECTION
44289 field_addr.name = "emerg_version";
44290#endif /* FREECIV_JSON_CONNECTION */
44291 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
44292 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
44293 }
44294#ifdef FREECIV_JSON_CONNECTION
44295 field_addr.name = "distribution";
44296#endif /* FREECIV_JSON_CONNECTION */
44297 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
44298 RECEIVE_PACKET_FIELD_ERROR(distribution);
44299 }
44300#endif
44301 log_packet_detailed("packet_client_info_100: got info about ()");
44302
44303#ifdef FREECIV_DELTA_PROTOCOL
44304 if (NULL == *hash) {
44306 NULL, NULL, NULL, free);
44307 }
44308
44309 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44310 *real_packet = *old;
44311 } else {
44312 log_packet_detailed(" no old info");
44313 memset(real_packet, 0, sizeof(*real_packet));
44314 }
44315
44316 if (BV_ISSET(fields, 0)) {
44317 log_packet_detailed(" got field 'gui'");
44318#ifdef FREECIV_JSON_CONNECTION
44319 field_addr.name = "gui";
44320#endif /* FREECIV_JSON_CONNECTION */
44321 {
44322 int readin;
44323
44324 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
44326 }
44327 real_packet->gui = readin;
44328 }
44329 }
44330 if (BV_ISSET(fields, 1)) {
44331 log_packet_detailed(" got field 'emerg_version'");
44332#ifdef FREECIV_JSON_CONNECTION
44333 field_addr.name = "emerg_version";
44334#endif /* FREECIV_JSON_CONNECTION */
44335 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->emerg_version)) {
44336 RECEIVE_PACKET_FIELD_ERROR(emerg_version);
44337 }
44338 }
44339 if (BV_ISSET(fields, 2)) {
44340 log_packet_detailed(" got field 'distribution'");
44341#ifdef FREECIV_JSON_CONNECTION
44342 field_addr.name = "distribution";
44343#endif /* FREECIV_JSON_CONNECTION */
44344 if (!DIO_GET(string, &din, &field_addr, real_packet->distribution, sizeof(real_packet->distribution))) {
44345 RECEIVE_PACKET_FIELD_ERROR(distribution);
44346 }
44347 }
44348
44349 if (NULL == old) {
44350 old = fc_malloc(sizeof(*old));
44351 *old = *real_packet;
44352 genhash_insert(*hash, old, old);
44353 } else {
44354 *old = *real_packet;
44355 }
44356
44357#endif /* FREECIV_DELTA_PROTOCOL */
44359}
44360
44361static int send_packet_client_info_100(struct connection *pc, const struct packet_client_info *packet)
44362{
44363 const struct packet_client_info *real_packet = packet;
44364 int e;
44365#ifdef FREECIV_DELTA_PROTOCOL
44367 struct packet_client_info *old;
44368 bool differ;
44369 struct genhash **hash = pc->phs.sent + PACKET_CLIENT_INFO;
44370#endif /* FREECIV_DELTA_PROTOCOL */
44372#ifdef FREECIV_JSON_CONNECTION
44373 struct plocation field_addr;
44374 {
44378 }
44379#endif /* FREECIV_JSON_CONNECTION */
44380
44381 log_packet_detailed("packet_client_info_100: sending info about ()");
44382
44383#ifdef FREECIV_DELTA_PROTOCOL
44384 if (NULL == *hash) {
44386 NULL, NULL, NULL, free);
44387 }
44388 BV_CLR_ALL(fields);
44389
44390 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44391 old = fc_malloc(sizeof(*old));
44392 *old = *real_packet;
44393 genhash_insert(*hash, old, old);
44394 memset(old, 0, sizeof(*old));
44395 }
44396 differ = (old->gui != real_packet->gui);
44397 if (differ) {
44398 BV_SET(fields, 0);
44399 }
44400
44401 differ = (old->emerg_version != real_packet->emerg_version);
44402 if (differ) {
44403 BV_SET(fields, 1);
44404 }
44405
44406 differ = (strcmp(old->distribution, real_packet->distribution) != 0);
44407 if (differ) {
44408 BV_SET(fields, 2);
44409 }
44410
44411
44412#ifdef FREECIV_JSON_CONNECTION
44413 field_addr.name = "fields";
44414#endif /* FREECIV_JSON_CONNECTION */
44415 e = 0;
44416 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44417 if (e) {
44418 log_packet_detailed("fields bitvector error detected");
44419 }
44420
44421 if (BV_ISSET(fields, 0)) {
44422 log_packet_detailed(" field 'gui' has changed");
44423#ifdef FREECIV_JSON_CONNECTION
44424 field_addr.name = "gui";
44425#endif /* FREECIV_JSON_CONNECTION */
44426 e = 0;
44427 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
44428 if (e) {
44429 log_packet_detailed("'gui' field error detected");
44430 }
44431 }
44432 if (BV_ISSET(fields, 1)) {
44433 log_packet_detailed(" field 'emerg_version' has changed");
44434#ifdef FREECIV_JSON_CONNECTION
44435 field_addr.name = "emerg_version";
44436#endif /* FREECIV_JSON_CONNECTION */
44437 e = 0;
44438 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
44439 if (e) {
44440 log_packet_detailed("'emerg_version' field error detected");
44441 }
44442 }
44443 if (BV_ISSET(fields, 2)) {
44444 log_packet_detailed(" field 'distribution' has changed");
44445#ifdef FREECIV_JSON_CONNECTION
44446 field_addr.name = "distribution";
44447#endif /* FREECIV_JSON_CONNECTION */
44448 e = 0;
44449 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
44450 if (e) {
44451 log_packet_detailed("'distribution' field error detected");
44452 }
44453 }
44454
44455 *old = *real_packet;
44456#endif /* FREECIV_DELTA_PROTOCOL */
44457#ifndef FREECIV_DELTA_PROTOCOL
44458#ifdef FREECIV_JSON_CONNECTION
44459 field_addr.name = "gui";
44460#endif /* FREECIV_JSON_CONNECTION */
44461 e = 0;
44462 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui);
44463 if (e) {
44464 log_packet_detailed("'gui' field error detected");
44465 }
44466#ifdef FREECIV_JSON_CONNECTION
44467 field_addr.name = "emerg_version";
44468#endif /* FREECIV_JSON_CONNECTION */
44469 e = 0;
44470 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->emerg_version);
44471 if (e) {
44472 log_packet_detailed("'emerg_version' field error detected");
44473 }
44474#ifdef FREECIV_JSON_CONNECTION
44475 field_addr.name = "distribution";
44476#endif /* FREECIV_JSON_CONNECTION */
44477 e = 0;
44478 e |= DIO_PUT(string, &dout, &field_addr, real_packet->distribution);
44479 if (e) {
44480 log_packet_detailed("'distribution' field error detected");
44481 }
44482
44483#endif
44485}
44486
44488{
44489 if (!pc->used) {
44490 log_error("WARNING: trying to send data to the closed connection %s",
44492 return -1;
44493 }
44494 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_CLIENT_INFO].packet != NULL, -1,
44495 "Handler for PACKET_CLIENT_INFO not installed");
44496 return pc->phs.handlers->send[PACKET_CLIENT_INFO].packet(pc, packet);
44497}
44498
44500{
44502#if 1 /* To match endif */
44503 real_packet->__dummy = 0xff;
44504#endif
44505 log_packet_detailed("packet_end_phase_100: got info about ()");
44507}
44508
44510{
44512
44513 log_packet_detailed("packet_end_phase_100: sending info about ()");
44515}
44516
44518{
44519 if (!pc->used) {
44520 log_error("WARNING: trying to send data to the closed connection %s",
44522 return -1;
44523 }
44524 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_PHASE].no_packet != NULL, -1,
44525 "Handler for PACKET_END_PHASE not installed");
44526 return pc->phs.handlers->send[PACKET_END_PHASE].no_packet(pc);
44527}
44528
44530{
44531 conn_list_iterate(dest, pconn) {
44534}
44535
44536#ifdef FREECIV_DELTA_PROTOCOL
44537#define hash_packet_start_phase_100 hash_const
44538
44539#define cmp_packet_start_phase_100 cmp_const
44540
44542#endif /* FREECIV_DELTA_PROTOCOL */
44543
44545{
44546#ifdef FREECIV_DELTA_PROTOCOL
44548 struct packet_start_phase *old;
44549 struct genhash **hash = pc->phs.received + PACKET_START_PHASE;
44550#endif /* FREECIV_DELTA_PROTOCOL */
44552#ifdef FREECIV_JSON_CONNECTION
44553 struct plocation field_addr;
44554 {
44558 }
44559#endif /* FREECIV_JSON_CONNECTION */
44560
44561#ifdef FREECIV_DELTA_PROTOCOL
44562#ifdef FREECIV_JSON_CONNECTION
44563 field_addr.name = "fields";
44564#endif /* FREECIV_JSON_CONNECTION */
44565 DIO_BV_GET(&din, &field_addr, fields);
44566
44567#else /* FREECIV_DELTA_PROTOCOL */
44568#ifdef FREECIV_JSON_CONNECTION
44569 field_addr.name = "phase";
44570#endif /* FREECIV_JSON_CONNECTION */
44571 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
44573 }
44574#endif
44575 log_packet_detailed("packet_start_phase_100: got info about ()");
44576
44577#ifdef FREECIV_DELTA_PROTOCOL
44578 if (NULL == *hash) {
44580 NULL, NULL, NULL, free);
44581 }
44582
44583 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44584 *real_packet = *old;
44585 } else {
44586 log_packet_detailed(" no old info");
44587 memset(real_packet, 0, sizeof(*real_packet));
44588 }
44589
44590 if (BV_ISSET(fields, 0)) {
44591 log_packet_detailed(" got field 'phase'");
44592#ifdef FREECIV_JSON_CONNECTION
44593 field_addr.name = "phase";
44594#endif /* FREECIV_JSON_CONNECTION */
44595 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->phase)) {
44597 }
44598 }
44599
44600 if (NULL == old) {
44601 old = fc_malloc(sizeof(*old));
44602 *old = *real_packet;
44603 genhash_insert(*hash, old, old);
44604 } else {
44605 *old = *real_packet;
44606 }
44607
44608#endif /* FREECIV_DELTA_PROTOCOL */
44610}
44611
44612static int send_packet_start_phase_100(struct connection *pc, const struct packet_start_phase *packet)
44613{
44614 const struct packet_start_phase *real_packet = packet;
44615 int e;
44616#ifdef FREECIV_DELTA_PROTOCOL
44618 struct packet_start_phase *old;
44619 bool differ;
44620 struct genhash **hash = pc->phs.sent + PACKET_START_PHASE;
44621#endif /* FREECIV_DELTA_PROTOCOL */
44623#ifdef FREECIV_JSON_CONNECTION
44624 struct plocation field_addr;
44625 {
44629 }
44630#endif /* FREECIV_JSON_CONNECTION */
44631
44632 log_packet_detailed("packet_start_phase_100: sending info about ()");
44633
44634#ifdef FREECIV_DELTA_PROTOCOL
44635 if (NULL == *hash) {
44637 NULL, NULL, NULL, free);
44638 }
44639 BV_CLR_ALL(fields);
44640
44641 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44642 old = fc_malloc(sizeof(*old));
44643 *old = *real_packet;
44644 genhash_insert(*hash, old, old);
44645 memset(old, 0, sizeof(*old));
44646 }
44647 differ = (old->phase != real_packet->phase);
44648 if (differ) {
44649 BV_SET(fields, 0);
44650 }
44651
44652
44653#ifdef FREECIV_JSON_CONNECTION
44654 field_addr.name = "fields";
44655#endif /* FREECIV_JSON_CONNECTION */
44656 e = 0;
44657 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44658 if (e) {
44659 log_packet_detailed("fields bitvector error detected");
44660 }
44661
44662 if (BV_ISSET(fields, 0)) {
44663 log_packet_detailed(" field 'phase' has changed");
44664#ifdef FREECIV_JSON_CONNECTION
44665 field_addr.name = "phase";
44666#endif /* FREECIV_JSON_CONNECTION */
44667 e = 0;
44668 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
44669 if (e) {
44670 log_packet_detailed("'phase' field error detected");
44671 }
44672 }
44673
44674 *old = *real_packet;
44675#endif /* FREECIV_DELTA_PROTOCOL */
44676#ifndef FREECIV_DELTA_PROTOCOL
44677#ifdef FREECIV_JSON_CONNECTION
44678 field_addr.name = "phase";
44679#endif /* FREECIV_JSON_CONNECTION */
44680 e = 0;
44681 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->phase);
44682 if (e) {
44683 log_packet_detailed("'phase' field error detected");
44684 }
44685
44686#endif
44688}
44689
44691{
44692 if (!pc->used) {
44693 log_error("WARNING: trying to send data to the closed connection %s",
44695 return -1;
44696 }
44697 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_START_PHASE].packet != NULL, -1,
44698 "Handler for PACKET_START_PHASE not installed");
44699 return pc->phs.handlers->send[PACKET_START_PHASE].packet(pc, packet);
44700}
44701
44702void lsend_packet_start_phase(struct conn_list *dest, const struct packet_start_phase *packet)
44703{
44704 conn_list_iterate(dest, pconn) {
44707}
44708
44710{
44711 struct packet_start_phase packet, *real_packet = &packet;
44712
44714
44716}
44717
44719{
44720 struct packet_start_phase packet, *real_packet = &packet;
44721
44723
44725}
44726
44727#ifdef FREECIV_DELTA_PROTOCOL
44728#define hash_packet_new_year_100 hash_const
44729
44730#define cmp_packet_new_year_100 cmp_const
44731
44733#endif /* FREECIV_DELTA_PROTOCOL */
44734
44736{
44737#ifdef FREECIV_DELTA_PROTOCOL
44739 struct packet_new_year *old;
44740 struct genhash **hash = pc->phs.received + PACKET_NEW_YEAR;
44741#endif /* FREECIV_DELTA_PROTOCOL */
44743#ifdef FREECIV_JSON_CONNECTION
44744 struct plocation field_addr;
44745 {
44749 }
44750#endif /* FREECIV_JSON_CONNECTION */
44751
44752#ifdef FREECIV_DELTA_PROTOCOL
44753#ifdef FREECIV_JSON_CONNECTION
44754 field_addr.name = "fields";
44755#endif /* FREECIV_JSON_CONNECTION */
44756 DIO_BV_GET(&din, &field_addr, fields);
44757
44758#else /* FREECIV_DELTA_PROTOCOL */
44759#ifdef FREECIV_JSON_CONNECTION
44760 field_addr.name = "year";
44761#endif /* FREECIV_JSON_CONNECTION */
44762 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
44764 }
44765#ifdef FREECIV_JSON_CONNECTION
44766 field_addr.name = "fragments";
44767#endif /* FREECIV_JSON_CONNECTION */
44768 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
44769 RECEIVE_PACKET_FIELD_ERROR(fragments);
44770 }
44771#ifdef FREECIV_JSON_CONNECTION
44772 field_addr.name = "turn";
44773#endif /* FREECIV_JSON_CONNECTION */
44774 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
44776 }
44777#endif
44778 log_packet_detailed("packet_new_year_100: got info about ()");
44779
44780#ifdef FREECIV_DELTA_PROTOCOL
44781 if (NULL == *hash) {
44783 NULL, NULL, NULL, free);
44784 }
44785
44786 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
44787 *real_packet = *old;
44788 } else {
44789 log_packet_detailed(" no old info");
44790 memset(real_packet, 0, sizeof(*real_packet));
44791 }
44792
44793 if (BV_ISSET(fields, 0)) {
44794 log_packet_detailed(" got field 'year'");
44795#ifdef FREECIV_JSON_CONNECTION
44796 field_addr.name = "year";
44797#endif /* FREECIV_JSON_CONNECTION */
44798 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->year)) {
44800 }
44801 }
44802 if (BV_ISSET(fields, 1)) {
44803 log_packet_detailed(" got field 'fragments'");
44804#ifdef FREECIV_JSON_CONNECTION
44805 field_addr.name = "fragments";
44806#endif /* FREECIV_JSON_CONNECTION */
44807 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->fragments)) {
44808 RECEIVE_PACKET_FIELD_ERROR(fragments);
44809 }
44810 }
44811 if (BV_ISSET(fields, 2)) {
44812 log_packet_detailed(" got field 'turn'");
44813#ifdef FREECIV_JSON_CONNECTION
44814 field_addr.name = "turn";
44815#endif /* FREECIV_JSON_CONNECTION */
44816 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn)) {
44818 }
44819 }
44820
44821 if (NULL == old) {
44822 old = fc_malloc(sizeof(*old));
44823 *old = *real_packet;
44824 genhash_insert(*hash, old, old);
44825 } else {
44826 *old = *real_packet;
44827 }
44828
44829#endif /* FREECIV_DELTA_PROTOCOL */
44831}
44832
44833static int send_packet_new_year_100(struct connection *pc, const struct packet_new_year *packet)
44834{
44835 const struct packet_new_year *real_packet = packet;
44836 int e;
44837#ifdef FREECIV_DELTA_PROTOCOL
44839 struct packet_new_year *old;
44840 bool differ;
44841 struct genhash **hash = pc->phs.sent + PACKET_NEW_YEAR;
44842#endif /* FREECIV_DELTA_PROTOCOL */
44844#ifdef FREECIV_JSON_CONNECTION
44845 struct plocation field_addr;
44846 {
44850 }
44851#endif /* FREECIV_JSON_CONNECTION */
44852
44853 log_packet_detailed("packet_new_year_100: sending info about ()");
44854
44855#ifdef FREECIV_DELTA_PROTOCOL
44856 if (NULL == *hash) {
44858 NULL, NULL, NULL, free);
44859 }
44860 BV_CLR_ALL(fields);
44861
44862 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
44863 old = fc_malloc(sizeof(*old));
44864 *old = *real_packet;
44865 genhash_insert(*hash, old, old);
44866 memset(old, 0, sizeof(*old));
44867 }
44868 differ = (old->year != real_packet->year);
44869 if (differ) {
44870 BV_SET(fields, 0);
44871 }
44872
44873 differ = (old->fragments != real_packet->fragments);
44874 if (differ) {
44875 BV_SET(fields, 1);
44876 }
44877
44878 differ = (old->turn != real_packet->turn);
44879 if (differ) {
44880 BV_SET(fields, 2);
44881 }
44882
44883
44884#ifdef FREECIV_JSON_CONNECTION
44885 field_addr.name = "fields";
44886#endif /* FREECIV_JSON_CONNECTION */
44887 e = 0;
44888 e |= DIO_BV_PUT(&dout, &field_addr, fields);
44889 if (e) {
44890 log_packet_detailed("fields bitvector error detected");
44891 }
44892
44893 if (BV_ISSET(fields, 0)) {
44894 log_packet_detailed(" field 'year' has changed");
44895#ifdef FREECIV_JSON_CONNECTION
44896 field_addr.name = "year";
44897#endif /* FREECIV_JSON_CONNECTION */
44898 e = 0;
44899 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
44900 if (e) {
44901 log_packet_detailed("'year' field error detected");
44902 }
44903 }
44904 if (BV_ISSET(fields, 1)) {
44905 log_packet_detailed(" field 'fragments' has changed");
44906#ifdef FREECIV_JSON_CONNECTION
44907 field_addr.name = "fragments";
44908#endif /* FREECIV_JSON_CONNECTION */
44909 e = 0;
44910 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
44911 if (e) {
44912 log_packet_detailed("'fragments' field error detected");
44913 }
44914 }
44915 if (BV_ISSET(fields, 2)) {
44916 log_packet_detailed(" field 'turn' has changed");
44917#ifdef FREECIV_JSON_CONNECTION
44918 field_addr.name = "turn";
44919#endif /* FREECIV_JSON_CONNECTION */
44920 e = 0;
44921 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
44922 if (e) {
44923 log_packet_detailed("'turn' field error detected");
44924 }
44925 }
44926
44927 *old = *real_packet;
44928#endif /* FREECIV_DELTA_PROTOCOL */
44929#ifndef FREECIV_DELTA_PROTOCOL
44930#ifdef FREECIV_JSON_CONNECTION
44931 field_addr.name = "year";
44932#endif /* FREECIV_JSON_CONNECTION */
44933 e = 0;
44934 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->year);
44935 if (e) {
44936 log_packet_detailed("'year' field error detected");
44937 }
44938#ifdef FREECIV_JSON_CONNECTION
44939 field_addr.name = "fragments";
44940#endif /* FREECIV_JSON_CONNECTION */
44941 e = 0;
44942 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->fragments);
44943 if (e) {
44944 log_packet_detailed("'fragments' field error detected");
44945 }
44946#ifdef FREECIV_JSON_CONNECTION
44947 field_addr.name = "turn";
44948#endif /* FREECIV_JSON_CONNECTION */
44949 e = 0;
44950 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn);
44951 if (e) {
44952 log_packet_detailed("'turn' field error detected");
44953 }
44954
44955#endif
44957}
44958
44959int send_packet_new_year(struct connection *pc, const struct packet_new_year *packet)
44960{
44961 if (!pc->used) {
44962 log_error("WARNING: trying to send data to the closed connection %s",
44964 return -1;
44965 }
44966 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NEW_YEAR].packet != NULL, -1,
44967 "Handler for PACKET_NEW_YEAR not installed");
44968 return pc->phs.handlers->send[PACKET_NEW_YEAR].packet(pc, packet);
44969}
44970
44971void lsend_packet_new_year(struct conn_list *dest, const struct packet_new_year *packet)
44972{
44973 conn_list_iterate(dest, pconn) {
44974 send_packet_new_year(pconn, packet);
44976}
44977
44979{
44981#if 1 /* To match endif */
44982 real_packet->__dummy = 0xff;
44983#endif
44984 log_packet_detailed("packet_begin_turn_100: got info about ()");
44986}
44987
44989{
44991
44992 log_packet_detailed("packet_begin_turn_100: sending info about ()");
44994}
44995
44997{
44998 if (!pc->used) {
44999 log_error("WARNING: trying to send data to the closed connection %s",
45001 return -1;
45002 }
45003 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet != NULL, -1,
45004 "Handler for PACKET_BEGIN_TURN not installed");
45005 return pc->phs.handlers->send[PACKET_BEGIN_TURN].no_packet(pc);
45006}
45007
45009{
45010 conn_list_iterate(dest, pconn) {
45013}
45014
45016{
45018#if 1 /* To match endif */
45019 real_packet->__dummy = 0xff;
45020#endif
45021 log_packet_detailed("packet_end_turn_100: got info about ()");
45023}
45024
45026{
45028
45029 log_packet_detailed("packet_end_turn_100: sending info about ()");
45031}
45032
45034{
45035 if (!pc->used) {
45036 log_error("WARNING: trying to send data to the closed connection %s",
45038 return -1;
45039 }
45040 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_END_TURN].no_packet != NULL, -1,
45041 "Handler for PACKET_END_TURN not installed");
45042 return pc->phs.handlers->send[PACKET_END_TURN].no_packet(pc);
45043}
45044
45046{
45047 conn_list_iterate(dest, pconn) {
45050}
45051
45053{
45055#if 1 /* To match endif */
45056 real_packet->__dummy = 0xff;
45057#endif
45058 log_packet_detailed("packet_freeze_client_100: got info about ()");
45060}
45061
45063{
45065
45066 log_packet_detailed("packet_freeze_client_100: sending info about ()");
45068}
45069
45071{
45072 if (!pc->used) {
45073 log_error("WARNING: trying to send data to the closed connection %s",
45075 return -1;
45076 }
45077 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet != NULL, -1,
45078 "Handler for PACKET_FREEZE_CLIENT not installed");
45079 return pc->phs.handlers->send[PACKET_FREEZE_CLIENT].no_packet(pc);
45080}
45081
45088
45090{
45092#if 1 /* To match endif */
45093 real_packet->__dummy = 0xff;
45094#endif
45095 log_packet_detailed("packet_thaw_client_100: got info about ()");
45097}
45098
45100{
45102
45103 log_packet_detailed("packet_thaw_client_100: sending info about ()");
45105}
45106
45108{
45109 if (!pc->used) {
45110 log_error("WARNING: trying to send data to the closed connection %s",
45112 return -1;
45113 }
45114 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet != NULL, -1,
45115 "Handler for PACKET_THAW_CLIENT not installed");
45116 return pc->phs.handlers->send[PACKET_THAW_CLIENT].no_packet(pc);
45117}
45118
45120{
45121 conn_list_iterate(dest, pconn) {
45124}
45125
45127{
45129#if 1 /* To match endif */
45130 real_packet->__dummy = 0xff;
45131#endif
45132 log_packet_detailed("packet_spaceship_launch_100: got info about ()");
45134}
45135
45137{
45139
45140 log_packet_detailed("packet_spaceship_launch_100: sending info about ()");
45142}
45143
45145{
45146 if (!pc->used) {
45147 log_error("WARNING: trying to send data to the closed connection %s",
45149 return -1;
45150 }
45151 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet != NULL, -1,
45152 "Handler for PACKET_SPACESHIP_LAUNCH not installed");
45153 return pc->phs.handlers->send[PACKET_SPACESHIP_LAUNCH].no_packet(pc);
45154}
45155
45156#ifdef FREECIV_DELTA_PROTOCOL
45157#define hash_packet_spaceship_place_100 hash_const
45158
45159#define cmp_packet_spaceship_place_100 cmp_const
45160
45162#endif /* FREECIV_DELTA_PROTOCOL */
45163
45165{
45166#ifdef FREECIV_DELTA_PROTOCOL
45168 struct packet_spaceship_place *old;
45169 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_PLACE;
45170#endif /* FREECIV_DELTA_PROTOCOL */
45172#ifdef FREECIV_JSON_CONNECTION
45173 struct plocation field_addr;
45174 {
45178 }
45179#endif /* FREECIV_JSON_CONNECTION */
45180
45181#ifdef FREECIV_DELTA_PROTOCOL
45182#ifdef FREECIV_JSON_CONNECTION
45183 field_addr.name = "fields";
45184#endif /* FREECIV_JSON_CONNECTION */
45185 DIO_BV_GET(&din, &field_addr, fields);
45186
45187#else /* FREECIV_DELTA_PROTOCOL */
45188#ifdef FREECIV_JSON_CONNECTION
45189 field_addr.name = "type";
45190#endif /* FREECIV_JSON_CONNECTION */
45191 {
45192 int readin;
45193
45194 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45196 }
45197 real_packet->type = readin;
45198 }
45199#ifdef FREECIV_JSON_CONNECTION
45200 field_addr.name = "num";
45201#endif /* FREECIV_JSON_CONNECTION */
45202 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
45204 }
45205#endif
45206 log_packet_detailed("packet_spaceship_place_100: got info about ()");
45207
45208#ifdef FREECIV_DELTA_PROTOCOL
45209 if (NULL == *hash) {
45211 NULL, NULL, NULL, free);
45212 }
45213
45214 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45215 *real_packet = *old;
45216 } else {
45217 log_packet_detailed(" no old info");
45218 memset(real_packet, 0, sizeof(*real_packet));
45219 }
45220
45221 if (BV_ISSET(fields, 0)) {
45222 log_packet_detailed(" got field 'type'");
45223#ifdef FREECIV_JSON_CONNECTION
45224 field_addr.name = "type";
45225#endif /* FREECIV_JSON_CONNECTION */
45226 {
45227 int readin;
45228
45229 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
45231 }
45232 real_packet->type = readin;
45233 }
45234 }
45235 if (BV_ISSET(fields, 1)) {
45236 log_packet_detailed(" got field 'num'");
45237#ifdef FREECIV_JSON_CONNECTION
45238 field_addr.name = "num";
45239#endif /* FREECIV_JSON_CONNECTION */
45240 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num)) {
45242 }
45243 }
45244
45245 if (NULL == old) {
45246 old = fc_malloc(sizeof(*old));
45247 *old = *real_packet;
45248 genhash_insert(*hash, old, old);
45249 } else {
45250 *old = *real_packet;
45251 }
45252
45253#endif /* FREECIV_DELTA_PROTOCOL */
45255}
45256
45258{
45259 const struct packet_spaceship_place *real_packet = packet;
45260 int e;
45261#ifdef FREECIV_DELTA_PROTOCOL
45263 struct packet_spaceship_place *old;
45264 bool differ;
45265 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_PLACE;
45266#endif /* FREECIV_DELTA_PROTOCOL */
45268#ifdef FREECIV_JSON_CONNECTION
45269 struct plocation field_addr;
45270 {
45274 }
45275#endif /* FREECIV_JSON_CONNECTION */
45276
45277 log_packet_detailed("packet_spaceship_place_100: sending info about ()");
45278
45279#ifdef FREECIV_DELTA_PROTOCOL
45280 if (NULL == *hash) {
45282 NULL, NULL, NULL, free);
45283 }
45284 BV_CLR_ALL(fields);
45285
45286 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45287 old = fc_malloc(sizeof(*old));
45288 *old = *real_packet;
45289 genhash_insert(*hash, old, old);
45290 memset(old, 0, sizeof(*old));
45291 }
45292 differ = (old->type != real_packet->type);
45293 if (differ) {
45294 BV_SET(fields, 0);
45295 }
45296
45297 differ = (old->num != real_packet->num);
45298 if (differ) {
45299 BV_SET(fields, 1);
45300 }
45301
45302
45303#ifdef FREECIV_JSON_CONNECTION
45304 field_addr.name = "fields";
45305#endif /* FREECIV_JSON_CONNECTION */
45306 e = 0;
45307 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45308 if (e) {
45309 log_packet_detailed("fields bitvector error detected");
45310 }
45311
45312 if (BV_ISSET(fields, 0)) {
45313 log_packet_detailed(" field 'type' has changed");
45314#ifdef FREECIV_JSON_CONNECTION
45315 field_addr.name = "type";
45316#endif /* FREECIV_JSON_CONNECTION */
45317 e = 0;
45318 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
45319 if (e) {
45320 log_packet_detailed("'type' field error detected");
45321 }
45322 }
45323 if (BV_ISSET(fields, 1)) {
45324 log_packet_detailed(" field 'num' has changed");
45325#ifdef FREECIV_JSON_CONNECTION
45326 field_addr.name = "num";
45327#endif /* FREECIV_JSON_CONNECTION */
45328 e = 0;
45329 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
45330 if (e) {
45331 log_packet_detailed("'num' field error detected");
45332 }
45333 }
45334
45335 *old = *real_packet;
45336#endif /* FREECIV_DELTA_PROTOCOL */
45337#ifndef FREECIV_DELTA_PROTOCOL
45338#ifdef FREECIV_JSON_CONNECTION
45339 field_addr.name = "type";
45340#endif /* FREECIV_JSON_CONNECTION */
45341 e = 0;
45342 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
45343 if (e) {
45344 log_packet_detailed("'type' field error detected");
45345 }
45346#ifdef FREECIV_JSON_CONNECTION
45347 field_addr.name = "num";
45348#endif /* FREECIV_JSON_CONNECTION */
45349 e = 0;
45350 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num);
45351 if (e) {
45352 log_packet_detailed("'num' field error detected");
45353 }
45354
45355#endif
45357}
45358
45360{
45361 if (!pc->used) {
45362 log_error("WARNING: trying to send data to the closed connection %s",
45364 return -1;
45365 }
45366 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet != NULL, -1,
45367 "Handler for PACKET_SPACESHIP_PLACE not installed");
45368 return pc->phs.handlers->send[PACKET_SPACESHIP_PLACE].packet(pc, packet);
45369}
45370
45372{
45373 struct packet_spaceship_place packet, *real_packet = &packet;
45374
45376 real_packet->num = num;
45377
45379}
45380
45381#ifdef FREECIV_DELTA_PROTOCOL
45383{
45384 const struct packet_spaceship_info *key = (const struct packet_spaceship_info *) vkey;
45385 genhash_val_t result = 0;
45386
45387 result += key->player_num;
45388
45389 result &= 0xFFFFFFFF;
45390 return result;
45391}
45392
45393static bool cmp_packet_spaceship_info_100(const void *vkey1, const void *vkey2)
45394{
45395 const struct packet_spaceship_info *old = (const struct packet_spaceship_info *) vkey1;
45396 const struct packet_spaceship_info *real_packet = (const struct packet_spaceship_info *) vkey2;
45397 bool differ;
45398
45399 differ = (old->player_num != real_packet->player_num);
45400
45401 return !differ;
45402}
45404#endif /* FREECIV_DELTA_PROTOCOL */
45405
45407{
45408#ifdef FREECIV_DELTA_PROTOCOL
45410 struct packet_spaceship_info *old;
45411 struct genhash **hash = pc->phs.received + PACKET_SPACESHIP_INFO;
45412#endif /* FREECIV_DELTA_PROTOCOL */
45414#ifdef FREECIV_JSON_CONNECTION
45415 struct plocation field_addr;
45416 {
45420 }
45421#endif /* FREECIV_JSON_CONNECTION */
45422
45423#ifdef FREECIV_DELTA_PROTOCOL
45424#ifdef FREECIV_JSON_CONNECTION
45425 field_addr.name = "fields";
45426#endif /* FREECIV_JSON_CONNECTION */
45427 DIO_BV_GET(&din, &field_addr, fields);
45428#ifdef FREECIV_JSON_CONNECTION
45429 field_addr.name = "player_num";
45430#endif /* FREECIV_JSON_CONNECTION */
45431 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
45432 RECEIVE_PACKET_FIELD_ERROR(player_num);
45433 }
45434
45435#else /* FREECIV_DELTA_PROTOCOL */
45436#ifdef FREECIV_JSON_CONNECTION
45437 field_addr.name = "player_num";
45438#endif /* FREECIV_JSON_CONNECTION */
45439 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player_num)) {
45440 RECEIVE_PACKET_FIELD_ERROR(player_num);
45441 }
45442#ifdef FREECIV_JSON_CONNECTION
45443 field_addr.name = "sship_state";
45444#endif /* FREECIV_JSON_CONNECTION */
45445 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
45446 RECEIVE_PACKET_FIELD_ERROR(sship_state);
45447 }
45448#ifdef FREECIV_JSON_CONNECTION
45449 field_addr.name = "structurals";
45450#endif /* FREECIV_JSON_CONNECTION */
45451 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
45452 RECEIVE_PACKET_FIELD_ERROR(structurals);
45453 }
45454#ifdef FREECIV_JSON_CONNECTION
45455 field_addr.name = "components";
45456#endif /* FREECIV_JSON_CONNECTION */
45457 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
45458 RECEIVE_PACKET_FIELD_ERROR(components);
45459 }
45460#ifdef FREECIV_JSON_CONNECTION
45461 field_addr.name = "modules";
45462#endif /* FREECIV_JSON_CONNECTION */
45463 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
45465 }
45466#ifdef FREECIV_JSON_CONNECTION
45467 field_addr.name = "fuel";
45468#endif /* FREECIV_JSON_CONNECTION */
45469 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
45471 }
45472#ifdef FREECIV_JSON_CONNECTION
45473 field_addr.name = "propulsion";
45474#endif /* FREECIV_JSON_CONNECTION */
45475 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
45476 RECEIVE_PACKET_FIELD_ERROR(propulsion);
45477 }
45478#ifdef FREECIV_JSON_CONNECTION
45479 field_addr.name = "habitation";
45480#endif /* FREECIV_JSON_CONNECTION */
45481 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
45482 RECEIVE_PACKET_FIELD_ERROR(habitation);
45483 }
45484#ifdef FREECIV_JSON_CONNECTION
45485 field_addr.name = "life_support";
45486#endif /* FREECIV_JSON_CONNECTION */
45487 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
45488 RECEIVE_PACKET_FIELD_ERROR(life_support);
45489 }
45490#ifdef FREECIV_JSON_CONNECTION
45491 field_addr.name = "solar_panels";
45492#endif /* FREECIV_JSON_CONNECTION */
45493 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
45494 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
45495 }
45496#ifdef FREECIV_JSON_CONNECTION
45497 field_addr.name = "launch_year";
45498#endif /* FREECIV_JSON_CONNECTION */
45499 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
45500 RECEIVE_PACKET_FIELD_ERROR(launch_year);
45501 }
45502#ifdef FREECIV_JSON_CONNECTION
45503 field_addr.name = "population";
45504#endif /* FREECIV_JSON_CONNECTION */
45505 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
45506 RECEIVE_PACKET_FIELD_ERROR(population);
45507 }
45508#ifdef FREECIV_JSON_CONNECTION
45509 field_addr.name = "mass";
45510#endif /* FREECIV_JSON_CONNECTION */
45511 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
45513 }
45514#ifdef FREECIV_JSON_CONNECTION
45515 field_addr.name = "structure";
45516#endif /* FREECIV_JSON_CONNECTION */
45517 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
45518 RECEIVE_PACKET_FIELD_ERROR(structure);
45519 }
45520#ifdef FREECIV_JSON_CONNECTION
45521 field_addr.name = "support_rate";
45522#endif /* FREECIV_JSON_CONNECTION */
45523 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
45524 RECEIVE_PACKET_FIELD_ERROR(support_rate);
45525 }
45526#ifdef FREECIV_JSON_CONNECTION
45527 field_addr.name = "energy_rate";
45528#endif /* FREECIV_JSON_CONNECTION */
45529 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
45530 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
45531 }
45532#ifdef FREECIV_JSON_CONNECTION
45533 field_addr.name = "success_rate";
45534#endif /* FREECIV_JSON_CONNECTION */
45535 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
45536 RECEIVE_PACKET_FIELD_ERROR(success_rate);
45537 }
45538#ifdef FREECIV_JSON_CONNECTION
45539 field_addr.name = "travel_time";
45540#endif /* FREECIV_JSON_CONNECTION */
45541 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
45542 RECEIVE_PACKET_FIELD_ERROR(travel_time);
45543 }
45544#endif
45545 log_packet_detailed("packet_spaceship_info_100: got info about (%d)",
45546 real_packet->player_num);
45547
45548#ifdef FREECIV_DELTA_PROTOCOL
45549 if (NULL == *hash) {
45551 NULL, NULL, NULL, free);
45552 }
45553
45554 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
45555 *real_packet = *old;
45556 } else {
45557 int player_num;
45558
45559 player_num = real_packet->player_num;
45560
45561 log_packet_detailed(" no old info");
45562 memset(real_packet, 0, sizeof(*real_packet));
45563
45564 real_packet->player_num = player_num;
45565 }
45566
45567 if (BV_ISSET(fields, 0)) {
45568 log_packet_detailed(" got field 'sship_state'");
45569#ifdef FREECIV_JSON_CONNECTION
45570 field_addr.name = "sship_state";
45571#endif /* FREECIV_JSON_CONNECTION */
45572 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sship_state)) {
45573 RECEIVE_PACKET_FIELD_ERROR(sship_state);
45574 }
45575 }
45576 if (BV_ISSET(fields, 1)) {
45577 log_packet_detailed(" got field 'structurals'");
45578#ifdef FREECIV_JSON_CONNECTION
45579 field_addr.name = "structurals";
45580#endif /* FREECIV_JSON_CONNECTION */
45581 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->structurals)) {
45582 RECEIVE_PACKET_FIELD_ERROR(structurals);
45583 }
45584 }
45585 if (BV_ISSET(fields, 2)) {
45586 log_packet_detailed(" got field 'components'");
45587#ifdef FREECIV_JSON_CONNECTION
45588 field_addr.name = "components";
45589#endif /* FREECIV_JSON_CONNECTION */
45590 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->components)) {
45591 RECEIVE_PACKET_FIELD_ERROR(components);
45592 }
45593 }
45594 if (BV_ISSET(fields, 3)) {
45595 log_packet_detailed(" got field 'modules'");
45596#ifdef FREECIV_JSON_CONNECTION
45597 field_addr.name = "modules";
45598#endif /* FREECIV_JSON_CONNECTION */
45599 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->modules)) {
45601 }
45602 }
45603 if (BV_ISSET(fields, 4)) {
45604 log_packet_detailed(" got field 'fuel'");
45605#ifdef FREECIV_JSON_CONNECTION
45606 field_addr.name = "fuel";
45607#endif /* FREECIV_JSON_CONNECTION */
45608 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
45610 }
45611 }
45612 if (BV_ISSET(fields, 5)) {
45613 log_packet_detailed(" got field 'propulsion'");
45614#ifdef FREECIV_JSON_CONNECTION
45615 field_addr.name = "propulsion";
45616#endif /* FREECIV_JSON_CONNECTION */
45617 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->propulsion)) {
45618 RECEIVE_PACKET_FIELD_ERROR(propulsion);
45619 }
45620 }
45621 if (BV_ISSET(fields, 6)) {
45622 log_packet_detailed(" got field 'habitation'");
45623#ifdef FREECIV_JSON_CONNECTION
45624 field_addr.name = "habitation";
45625#endif /* FREECIV_JSON_CONNECTION */
45626 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->habitation)) {
45627 RECEIVE_PACKET_FIELD_ERROR(habitation);
45628 }
45629 }
45630 if (BV_ISSET(fields, 7)) {
45631 log_packet_detailed(" got field 'life_support'");
45632#ifdef FREECIV_JSON_CONNECTION
45633 field_addr.name = "life_support";
45634#endif /* FREECIV_JSON_CONNECTION */
45635 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->life_support)) {
45636 RECEIVE_PACKET_FIELD_ERROR(life_support);
45637 }
45638 }
45639 if (BV_ISSET(fields, 8)) {
45640 log_packet_detailed(" got field 'solar_panels'");
45641#ifdef FREECIV_JSON_CONNECTION
45642 field_addr.name = "solar_panels";
45643#endif /* FREECIV_JSON_CONNECTION */
45644 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->solar_panels)) {
45645 RECEIVE_PACKET_FIELD_ERROR(solar_panels);
45646 }
45647 }
45648 if (BV_ISSET(fields, 9)) {
45649 log_packet_detailed(" got field 'launch_year'");
45650#ifdef FREECIV_JSON_CONNECTION
45651 field_addr.name = "launch_year";
45652#endif /* FREECIV_JSON_CONNECTION */
45653 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->launch_year)) {
45654 RECEIVE_PACKET_FIELD_ERROR(launch_year);
45655 }
45656 }
45657 if (BV_ISSET(fields, 10)) {
45658 log_packet_detailed(" got field 'population'");
45659#ifdef FREECIV_JSON_CONNECTION
45660 field_addr.name = "population";
45661#endif /* FREECIV_JSON_CONNECTION */
45662 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->population)) {
45663 RECEIVE_PACKET_FIELD_ERROR(population);
45664 }
45665 }
45666 if (BV_ISSET(fields, 11)) {
45667 log_packet_detailed(" got field 'mass'");
45668#ifdef FREECIV_JSON_CONNECTION
45669 field_addr.name = "mass";
45670#endif /* FREECIV_JSON_CONNECTION */
45671 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->mass)) {
45673 }
45674 }
45675 if (BV_ISSET(fields, 12)) {
45676 log_packet_detailed(" got field 'structure'");
45677#ifdef FREECIV_JSON_CONNECTION
45678 field_addr.name = "structure";
45679#endif /* FREECIV_JSON_CONNECTION */
45680 if (!DIO_BV_GET(&din, &field_addr, real_packet->structure)) {
45681 RECEIVE_PACKET_FIELD_ERROR(structure);
45682 }
45683 }
45684 if (BV_ISSET(fields, 13)) {
45685 log_packet_detailed(" got field 'support_rate'");
45686#ifdef FREECIV_JSON_CONNECTION
45687 field_addr.name = "support_rate";
45688#endif /* FREECIV_JSON_CONNECTION */
45689 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->support_rate, 10000)) {
45690 RECEIVE_PACKET_FIELD_ERROR(support_rate);
45691 }
45692 }
45693 if (BV_ISSET(fields, 14)) {
45694 log_packet_detailed(" got field 'energy_rate'");
45695#ifdef FREECIV_JSON_CONNECTION
45696 field_addr.name = "energy_rate";
45697#endif /* FREECIV_JSON_CONNECTION */
45698 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->energy_rate, 10000)) {
45699 RECEIVE_PACKET_FIELD_ERROR(energy_rate);
45700 }
45701 }
45702 if (BV_ISSET(fields, 15)) {
45703 log_packet_detailed(" got field 'success_rate'");
45704#ifdef FREECIV_JSON_CONNECTION
45705 field_addr.name = "success_rate";
45706#endif /* FREECIV_JSON_CONNECTION */
45707 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->success_rate, 10000)) {
45708 RECEIVE_PACKET_FIELD_ERROR(success_rate);
45709 }
45710 }
45711 if (BV_ISSET(fields, 16)) {
45712 log_packet_detailed(" got field 'travel_time'");
45713#ifdef FREECIV_JSON_CONNECTION
45714 field_addr.name = "travel_time";
45715#endif /* FREECIV_JSON_CONNECTION */
45716 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->travel_time, 10000)) {
45717 RECEIVE_PACKET_FIELD_ERROR(travel_time);
45718 }
45719 }
45720
45721 if (NULL == old) {
45722 old = fc_malloc(sizeof(*old));
45723 *old = *real_packet;
45724 genhash_insert(*hash, old, old);
45725 } else {
45726 *old = *real_packet;
45727 }
45728
45729#endif /* FREECIV_DELTA_PROTOCOL */
45731}
45732
45734{
45735 const struct packet_spaceship_info *real_packet = packet;
45736 int e;
45737#ifdef FREECIV_DELTA_PROTOCOL
45739 struct packet_spaceship_info *old;
45740 bool differ;
45741 struct genhash **hash = pc->phs.sent + PACKET_SPACESHIP_INFO;
45742 int different = 0;
45743#endif /* FREECIV_DELTA_PROTOCOL */
45745#ifdef FREECIV_JSON_CONNECTION
45746 struct plocation field_addr;
45747 {
45751 }
45752#endif /* FREECIV_JSON_CONNECTION */
45753
45754 log_packet_detailed("packet_spaceship_info_100: sending info about (%d)",
45755 real_packet->player_num);
45756
45757#ifdef FREECIV_DELTA_PROTOCOL
45758 if (NULL == *hash) {
45760 NULL, NULL, NULL, free);
45761 }
45762 BV_CLR_ALL(fields);
45763
45764 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
45765 old = fc_malloc(sizeof(*old));
45766 *old = *real_packet;
45767 genhash_insert(*hash, old, old);
45768 memset(old, 0, sizeof(*old));
45769 different = 1; /* Force to send. */
45770 }
45771 differ = (old->sship_state != real_packet->sship_state);
45772 if (differ) {
45773 different++;
45774 BV_SET(fields, 0);
45775 }
45776
45777 differ = (old->structurals != real_packet->structurals);
45778 if (differ) {
45779 different++;
45780 BV_SET(fields, 1);
45781 }
45782
45783 differ = (old->components != real_packet->components);
45784 if (differ) {
45785 different++;
45786 BV_SET(fields, 2);
45787 }
45788
45789 differ = (old->modules != real_packet->modules);
45790 if (differ) {
45791 different++;
45792 BV_SET(fields, 3);
45793 }
45794
45795 differ = (old->fuel != real_packet->fuel);
45796 if (differ) {
45797 different++;
45798 BV_SET(fields, 4);
45799 }
45800
45801 differ = (old->propulsion != real_packet->propulsion);
45802 if (differ) {
45803 different++;
45804 BV_SET(fields, 5);
45805 }
45806
45807 differ = (old->habitation != real_packet->habitation);
45808 if (differ) {
45809 different++;
45810 BV_SET(fields, 6);
45811 }
45812
45813 differ = (old->life_support != real_packet->life_support);
45814 if (differ) {
45815 different++;
45816 BV_SET(fields, 7);
45817 }
45818
45819 differ = (old->solar_panels != real_packet->solar_panels);
45820 if (differ) {
45821 different++;
45822 BV_SET(fields, 8);
45823 }
45824
45825 differ = (old->launch_year != real_packet->launch_year);
45826 if (differ) {
45827 different++;
45828 BV_SET(fields, 9);
45829 }
45830
45831 differ = (old->population != real_packet->population);
45832 if (differ) {
45833 different++;
45834 BV_SET(fields, 10);
45835 }
45836
45837 differ = (old->mass != real_packet->mass);
45838 if (differ) {
45839 different++;
45840 BV_SET(fields, 11);
45841 }
45842
45843 differ = !BV_ARE_EQUAL(old->structure, real_packet->structure);
45844 if (differ) {
45845 different++;
45846 BV_SET(fields, 12);
45847 }
45848
45849 differ = (old->support_rate != real_packet->support_rate);
45850 if (differ) {
45851 different++;
45852 BV_SET(fields, 13);
45853 }
45854
45855 differ = (old->energy_rate != real_packet->energy_rate);
45856 if (differ) {
45857 different++;
45858 BV_SET(fields, 14);
45859 }
45860
45861 differ = (old->success_rate != real_packet->success_rate);
45862 if (differ) {
45863 different++;
45864 BV_SET(fields, 15);
45865 }
45866
45867 differ = (old->travel_time != real_packet->travel_time);
45868 if (differ) {
45869 different++;
45870 BV_SET(fields, 16);
45871 }
45872
45873 if (different == 0) {
45874 log_packet_detailed(" no change -> discard");
45876 }
45877
45878#ifdef FREECIV_JSON_CONNECTION
45879 field_addr.name = "fields";
45880#endif /* FREECIV_JSON_CONNECTION */
45881 e = 0;
45882 e |= DIO_BV_PUT(&dout, &field_addr, fields);
45883 if (e) {
45884 log_packet_detailed("fields bitvector error detected");
45885 }
45886#ifdef FREECIV_JSON_CONNECTION
45887 field_addr.name = "player_num";
45888#endif /* FREECIV_JSON_CONNECTION */
45889 e = 0;
45890 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
45891 if (e) {
45892 log_packet_detailed("'player_num' field error detected");
45893 }
45894
45895 if (BV_ISSET(fields, 0)) {
45896 log_packet_detailed(" field 'sship_state' has changed");
45897#ifdef FREECIV_JSON_CONNECTION
45898 field_addr.name = "sship_state";
45899#endif /* FREECIV_JSON_CONNECTION */
45900 e = 0;
45901 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
45902 if (e) {
45903 log_packet_detailed("'sship_state' field error detected");
45904 }
45905 }
45906 if (BV_ISSET(fields, 1)) {
45907 log_packet_detailed(" field 'structurals' has changed");
45908#ifdef FREECIV_JSON_CONNECTION
45909 field_addr.name = "structurals";
45910#endif /* FREECIV_JSON_CONNECTION */
45911 e = 0;
45912 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
45913 if (e) {
45914 log_packet_detailed("'structurals' field error detected");
45915 }
45916 }
45917 if (BV_ISSET(fields, 2)) {
45918 log_packet_detailed(" field 'components' has changed");
45919#ifdef FREECIV_JSON_CONNECTION
45920 field_addr.name = "components";
45921#endif /* FREECIV_JSON_CONNECTION */
45922 e = 0;
45923 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
45924 if (e) {
45925 log_packet_detailed("'components' field error detected");
45926 }
45927 }
45928 if (BV_ISSET(fields, 3)) {
45929 log_packet_detailed(" field 'modules' has changed");
45930#ifdef FREECIV_JSON_CONNECTION
45931 field_addr.name = "modules";
45932#endif /* FREECIV_JSON_CONNECTION */
45933 e = 0;
45934 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
45935 if (e) {
45936 log_packet_detailed("'modules' field error detected");
45937 }
45938 }
45939 if (BV_ISSET(fields, 4)) {
45940 log_packet_detailed(" field 'fuel' has changed");
45941#ifdef FREECIV_JSON_CONNECTION
45942 field_addr.name = "fuel";
45943#endif /* FREECIV_JSON_CONNECTION */
45944 e = 0;
45945 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
45946 if (e) {
45947 log_packet_detailed("'fuel' field error detected");
45948 }
45949 }
45950 if (BV_ISSET(fields, 5)) {
45951 log_packet_detailed(" field 'propulsion' has changed");
45952#ifdef FREECIV_JSON_CONNECTION
45953 field_addr.name = "propulsion";
45954#endif /* FREECIV_JSON_CONNECTION */
45955 e = 0;
45956 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
45957 if (e) {
45958 log_packet_detailed("'propulsion' field error detected");
45959 }
45960 }
45961 if (BV_ISSET(fields, 6)) {
45962 log_packet_detailed(" field 'habitation' has changed");
45963#ifdef FREECIV_JSON_CONNECTION
45964 field_addr.name = "habitation";
45965#endif /* FREECIV_JSON_CONNECTION */
45966 e = 0;
45967 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
45968 if (e) {
45969 log_packet_detailed("'habitation' field error detected");
45970 }
45971 }
45972 if (BV_ISSET(fields, 7)) {
45973 log_packet_detailed(" field 'life_support' has changed");
45974#ifdef FREECIV_JSON_CONNECTION
45975 field_addr.name = "life_support";
45976#endif /* FREECIV_JSON_CONNECTION */
45977 e = 0;
45978 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
45979 if (e) {
45980 log_packet_detailed("'life_support' field error detected");
45981 }
45982 }
45983 if (BV_ISSET(fields, 8)) {
45984 log_packet_detailed(" field 'solar_panels' has changed");
45985#ifdef FREECIV_JSON_CONNECTION
45986 field_addr.name = "solar_panels";
45987#endif /* FREECIV_JSON_CONNECTION */
45988 e = 0;
45989 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
45990 if (e) {
45991 log_packet_detailed("'solar_panels' field error detected");
45992 }
45993 }
45994 if (BV_ISSET(fields, 9)) {
45995 log_packet_detailed(" field 'launch_year' has changed");
45996#ifdef FREECIV_JSON_CONNECTION
45997 field_addr.name = "launch_year";
45998#endif /* FREECIV_JSON_CONNECTION */
45999 e = 0;
46000 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
46001 if (e) {
46002 log_packet_detailed("'launch_year' field error detected");
46003 }
46004 }
46005 if (BV_ISSET(fields, 10)) {
46006 log_packet_detailed(" field 'population' has changed");
46007#ifdef FREECIV_JSON_CONNECTION
46008 field_addr.name = "population";
46009#endif /* FREECIV_JSON_CONNECTION */
46010 e = 0;
46011 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
46012 if (e) {
46013 log_packet_detailed("'population' field error detected");
46014 }
46015 }
46016 if (BV_ISSET(fields, 11)) {
46017 log_packet_detailed(" field 'mass' has changed");
46018#ifdef FREECIV_JSON_CONNECTION
46019 field_addr.name = "mass";
46020#endif /* FREECIV_JSON_CONNECTION */
46021 e = 0;
46022 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
46023 if (e) {
46024 log_packet_detailed("'mass' field error detected");
46025 }
46026 }
46027 if (BV_ISSET(fields, 12)) {
46028 log_packet_detailed(" field 'structure' has changed");
46029#ifdef FREECIV_JSON_CONNECTION
46030 field_addr.name = "structure";
46031#endif /* FREECIV_JSON_CONNECTION */
46032 e = 0;
46033 e |= DIO_BV_PUT(&dout, &field_addr, packet->structure);
46034 if (e) {
46035 log_packet_detailed("'structure' field error detected");
46036 }
46037 }
46038 if (BV_ISSET(fields, 13)) {
46039 log_packet_detailed(" field 'support_rate' has changed");
46040#ifdef FREECIV_JSON_CONNECTION
46041 field_addr.name = "support_rate";
46042#endif /* FREECIV_JSON_CONNECTION */
46043 e = 0;
46044 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
46045 if (e) {
46046 log_packet_detailed("'support_rate' field error detected");
46047 }
46048 }
46049 if (BV_ISSET(fields, 14)) {
46050 log_packet_detailed(" field 'energy_rate' has changed");
46051#ifdef FREECIV_JSON_CONNECTION
46052 field_addr.name = "energy_rate";
46053#endif /* FREECIV_JSON_CONNECTION */
46054 e = 0;
46055 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
46056 if (e) {
46057 log_packet_detailed("'energy_rate' field error detected");
46058 }
46059 }
46060 if (BV_ISSET(fields, 15)) {
46061 log_packet_detailed(" field 'success_rate' has changed");
46062#ifdef FREECIV_JSON_CONNECTION
46063 field_addr.name = "success_rate";
46064#endif /* FREECIV_JSON_CONNECTION */
46065 e = 0;
46066 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
46067 if (e) {
46068 log_packet_detailed("'success_rate' field error detected");
46069 }
46070 }
46071 if (BV_ISSET(fields, 16)) {
46072 log_packet_detailed(" field 'travel_time' has changed");
46073#ifdef FREECIV_JSON_CONNECTION
46074 field_addr.name = "travel_time";
46075#endif /* FREECIV_JSON_CONNECTION */
46076 e = 0;
46077 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
46078 if (e) {
46079 log_packet_detailed("'travel_time' field error detected");
46080 }
46081 }
46082
46083 *old = *real_packet;
46084#endif /* FREECIV_DELTA_PROTOCOL */
46085#ifndef FREECIV_DELTA_PROTOCOL
46086#ifdef FREECIV_JSON_CONNECTION
46087 field_addr.name = "player_num";
46088#endif /* FREECIV_JSON_CONNECTION */
46089 e = 0;
46090 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player_num);
46091 if (e) {
46092 log_packet_detailed("'player_num' field error detected");
46093 }
46094#ifdef FREECIV_JSON_CONNECTION
46095 field_addr.name = "sship_state";
46096#endif /* FREECIV_JSON_CONNECTION */
46097 e = 0;
46098 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sship_state);
46099 if (e) {
46100 log_packet_detailed("'sship_state' field error detected");
46101 }
46102#ifdef FREECIV_JSON_CONNECTION
46103 field_addr.name = "structurals";
46104#endif /* FREECIV_JSON_CONNECTION */
46105 e = 0;
46106 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->structurals);
46107 if (e) {
46108 log_packet_detailed("'structurals' field error detected");
46109 }
46110#ifdef FREECIV_JSON_CONNECTION
46111 field_addr.name = "components";
46112#endif /* FREECIV_JSON_CONNECTION */
46113 e = 0;
46114 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->components);
46115 if (e) {
46116 log_packet_detailed("'components' field error detected");
46117 }
46118#ifdef FREECIV_JSON_CONNECTION
46119 field_addr.name = "modules";
46120#endif /* FREECIV_JSON_CONNECTION */
46121 e = 0;
46122 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->modules);
46123 if (e) {
46124 log_packet_detailed("'modules' field error detected");
46125 }
46126#ifdef FREECIV_JSON_CONNECTION
46127 field_addr.name = "fuel";
46128#endif /* FREECIV_JSON_CONNECTION */
46129 e = 0;
46130 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
46131 if (e) {
46132 log_packet_detailed("'fuel' field error detected");
46133 }
46134#ifdef FREECIV_JSON_CONNECTION
46135 field_addr.name = "propulsion";
46136#endif /* FREECIV_JSON_CONNECTION */
46137 e = 0;
46138 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->propulsion);
46139 if (e) {
46140 log_packet_detailed("'propulsion' field error detected");
46141 }
46142#ifdef FREECIV_JSON_CONNECTION
46143 field_addr.name = "habitation";
46144#endif /* FREECIV_JSON_CONNECTION */
46145 e = 0;
46146 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->habitation);
46147 if (e) {
46148 log_packet_detailed("'habitation' field error detected");
46149 }
46150#ifdef FREECIV_JSON_CONNECTION
46151 field_addr.name = "life_support";
46152#endif /* FREECIV_JSON_CONNECTION */
46153 e = 0;
46154 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->life_support);
46155 if (e) {
46156 log_packet_detailed("'life_support' field error detected");
46157 }
46158#ifdef FREECIV_JSON_CONNECTION
46159 field_addr.name = "solar_panels";
46160#endif /* FREECIV_JSON_CONNECTION */
46161 e = 0;
46162 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->solar_panels);
46163 if (e) {
46164 log_packet_detailed("'solar_panels' field error detected");
46165 }
46166#ifdef FREECIV_JSON_CONNECTION
46167 field_addr.name = "launch_year";
46168#endif /* FREECIV_JSON_CONNECTION */
46169 e = 0;
46170 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->launch_year);
46171 if (e) {
46172 log_packet_detailed("'launch_year' field error detected");
46173 }
46174#ifdef FREECIV_JSON_CONNECTION
46175 field_addr.name = "population";
46176#endif /* FREECIV_JSON_CONNECTION */
46177 e = 0;
46178 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->population);
46179 if (e) {
46180 log_packet_detailed("'population' field error detected");
46181 }
46182#ifdef FREECIV_JSON_CONNECTION
46183 field_addr.name = "mass";
46184#endif /* FREECIV_JSON_CONNECTION */
46185 e = 0;
46186 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->mass);
46187 if (e) {
46188 log_packet_detailed("'mass' field error detected");
46189 }
46190#ifdef FREECIV_JSON_CONNECTION
46191 field_addr.name = "structure";
46192#endif /* FREECIV_JSON_CONNECTION */
46193 e = 0;
46194 e |= DIO_BV_PUT(&dout, &field_addr, packet->structure);
46195 if (e) {
46196 log_packet_detailed("'structure' field error detected");
46197 }
46198#ifdef FREECIV_JSON_CONNECTION
46199 field_addr.name = "support_rate";
46200#endif /* FREECIV_JSON_CONNECTION */
46201 e = 0;
46202 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->support_rate, 10000);
46203 if (e) {
46204 log_packet_detailed("'support_rate' field error detected");
46205 }
46206#ifdef FREECIV_JSON_CONNECTION
46207 field_addr.name = "energy_rate";
46208#endif /* FREECIV_JSON_CONNECTION */
46209 e = 0;
46210 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->energy_rate, 10000);
46211 if (e) {
46212 log_packet_detailed("'energy_rate' field error detected");
46213 }
46214#ifdef FREECIV_JSON_CONNECTION
46215 field_addr.name = "success_rate";
46216#endif /* FREECIV_JSON_CONNECTION */
46217 e = 0;
46218 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->success_rate, 10000);
46219 if (e) {
46220 log_packet_detailed("'success_rate' field error detected");
46221 }
46222#ifdef FREECIV_JSON_CONNECTION
46223 field_addr.name = "travel_time";
46224#endif /* FREECIV_JSON_CONNECTION */
46225 e = 0;
46226 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->travel_time, 10000);
46227 if (e) {
46228 log_packet_detailed("'travel_time' field error detected");
46229 }
46230
46231#endif
46233}
46234
46236{
46237 if (!pc->used) {
46238 log_error("WARNING: trying to send data to the closed connection %s",
46240 return -1;
46241 }
46242 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet != NULL, -1,
46243 "Handler for PACKET_SPACESHIP_INFO not installed");
46244 return pc->phs.handlers->send[PACKET_SPACESHIP_INFO].packet(pc, packet);
46245}
46246
46247void lsend_packet_spaceship_info(struct conn_list *dest, const struct packet_spaceship_info *packet)
46248{
46249 conn_list_iterate(dest, pconn) {
46252}
46253
46254#ifdef FREECIV_DELTA_PROTOCOL
46255#define hash_packet_ruleset_unit_100 hash_const
46256
46257#define cmp_packet_ruleset_unit_100 cmp_const
46258
46260#endif /* FREECIV_DELTA_PROTOCOL */
46261
46263{
46264#ifdef FREECIV_DELTA_PROTOCOL
46266 struct packet_ruleset_unit *old;
46267 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT;
46268#endif /* FREECIV_DELTA_PROTOCOL */
46270#ifdef FREECIV_JSON_CONNECTION
46271 struct plocation field_addr;
46272 {
46276 }
46277#endif /* FREECIV_JSON_CONNECTION */
46278
46279#ifdef FREECIV_DELTA_PROTOCOL
46280#ifdef FREECIV_JSON_CONNECTION
46281 field_addr.name = "fields";
46282#endif /* FREECIV_JSON_CONNECTION */
46283 DIO_BV_GET(&din, &field_addr, fields);
46284
46285#else /* FREECIV_DELTA_PROTOCOL */
46286#ifdef FREECIV_JSON_CONNECTION
46287 field_addr.name = "id";
46288#endif /* FREECIV_JSON_CONNECTION */
46289 {
46290 int readin;
46291
46292 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
46294 }
46295 real_packet->id = readin;
46296 }
46297#ifdef FREECIV_JSON_CONNECTION
46298 field_addr.name = "name";
46299#endif /* FREECIV_JSON_CONNECTION */
46300 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
46302 }
46303#ifdef FREECIV_JSON_CONNECTION
46304 field_addr.name = "rule_name";
46305#endif /* FREECIV_JSON_CONNECTION */
46306 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
46307 RECEIVE_PACKET_FIELD_ERROR(rule_name);
46308 }
46309#ifdef FREECIV_JSON_CONNECTION
46310 field_addr.name = "graphic_str";
46311#endif /* FREECIV_JSON_CONNECTION */
46312 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
46313 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
46314 }
46315#ifdef FREECIV_JSON_CONNECTION
46316 field_addr.name = "graphic_alt";
46317#endif /* FREECIV_JSON_CONNECTION */
46318 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
46319 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
46320 }
46321#ifdef FREECIV_JSON_CONNECTION
46322 field_addr.name = "graphic_alt2";
46323#endif /* FREECIV_JSON_CONNECTION */
46324 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
46325 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
46326 }
46327#ifdef FREECIV_JSON_CONNECTION
46328 field_addr.name = "sound_move";
46329#endif /* FREECIV_JSON_CONNECTION */
46330 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
46331 RECEIVE_PACKET_FIELD_ERROR(sound_move);
46332 }
46333#ifdef FREECIV_JSON_CONNECTION
46334 field_addr.name = "sound_move_alt";
46335#endif /* FREECIV_JSON_CONNECTION */
46336 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
46337 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
46338 }
46339#ifdef FREECIV_JSON_CONNECTION
46340 field_addr.name = "sound_fight";
46341#endif /* FREECIV_JSON_CONNECTION */
46342 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
46343 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
46344 }
46345#ifdef FREECIV_JSON_CONNECTION
46346 field_addr.name = "sound_fight_alt";
46347#endif /* FREECIV_JSON_CONNECTION */
46348 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
46349 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
46350 }
46351#ifdef FREECIV_JSON_CONNECTION
46352 field_addr.name = "unit_class_id";
46353#endif /* FREECIV_JSON_CONNECTION */
46354 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
46355 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
46356 }
46357#ifdef FREECIV_JSON_CONNECTION
46358 field_addr.name = "build_cost";
46359#endif /* FREECIV_JSON_CONNECTION */
46360 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
46361 RECEIVE_PACKET_FIELD_ERROR(build_cost);
46362 }
46363#ifdef FREECIV_JSON_CONNECTION
46364 field_addr.name = "pop_cost";
46365#endif /* FREECIV_JSON_CONNECTION */
46366 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
46368 }
46369#ifdef FREECIV_JSON_CONNECTION
46370 field_addr.name = "attack_strength";
46371#endif /* FREECIV_JSON_CONNECTION */
46372 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
46373 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
46374 }
46375#ifdef FREECIV_JSON_CONNECTION
46376 field_addr.name = "defense_strength";
46377#endif /* FREECIV_JSON_CONNECTION */
46378 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
46379 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
46380 }
46381#ifdef FREECIV_JSON_CONNECTION
46382 field_addr.name = "move_rate";
46383#endif /* FREECIV_JSON_CONNECTION */
46384 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
46385 RECEIVE_PACKET_FIELD_ERROR(move_rate);
46386 }
46387#ifdef FREECIV_JSON_CONNECTION
46388 field_addr.name = "build_reqs_count";
46389#endif /* FREECIV_JSON_CONNECTION */
46390 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_reqs_count)) {
46391 RECEIVE_PACKET_FIELD_ERROR(build_reqs_count);
46392 }
46393#ifdef FREECIV_JSON_CONNECTION
46394 field_addr.name = "build_reqs";
46395#endif /* FREECIV_JSON_CONNECTION */
46396 if (real_packet->build_reqs_count > MAX_NUM_REQS) {
46397 RECEIVE_PACKET_FIELD_ERROR(build_reqs, ": truncation array");
46398 }
46399 {
46400 int i;
46401
46402#ifdef FREECIV_JSON_CONNECTION
46403 /* Enter array. */
46404 field_addr.sub_location = plocation_elem_new(0);
46405#endif /* FREECIV_JSON_CONNECTION */
46406
46407 for (i = 0; i < real_packet->build_reqs_count; i++) {
46408#ifdef FREECIV_JSON_CONNECTION
46409 field_addr.sub_location->number = i;
46410#endif /* FREECIV_JSON_CONNECTION */
46411
46412 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs[i])) {
46413 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
46414 }
46415 }
46416
46417#ifdef FREECIV_JSON_CONNECTION
46418 /* Exit array. */
46419 FC_FREE(field_addr.sub_location);
46420#endif /* FREECIV_JSON_CONNECTION */
46421 }
46422#ifdef FREECIV_JSON_CONNECTION
46423 field_addr.name = "vision_radius_sq";
46424#endif /* FREECIV_JSON_CONNECTION */
46425 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
46426 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
46427 }
46428#ifdef FREECIV_JSON_CONNECTION
46429 field_addr.name = "transport_capacity";
46430#endif /* FREECIV_JSON_CONNECTION */
46431 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
46432 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
46433 }
46434#ifdef FREECIV_JSON_CONNECTION
46435 field_addr.name = "hp";
46436#endif /* FREECIV_JSON_CONNECTION */
46437 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
46439 }
46440#ifdef FREECIV_JSON_CONNECTION
46441 field_addr.name = "firepower";
46442#endif /* FREECIV_JSON_CONNECTION */
46443 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
46444 RECEIVE_PACKET_FIELD_ERROR(firepower);
46445 }
46446#ifdef FREECIV_JSON_CONNECTION
46447 field_addr.name = "obsoleted_by";
46448#endif /* FREECIV_JSON_CONNECTION */
46449 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
46450 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
46451 }
46452#ifdef FREECIV_JSON_CONNECTION
46453 field_addr.name = "converted_to";
46454#endif /* FREECIV_JSON_CONNECTION */
46455 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
46456 RECEIVE_PACKET_FIELD_ERROR(converted_to);
46457 }
46458#ifdef FREECIV_JSON_CONNECTION
46459 field_addr.name = "convert_time";
46460#endif /* FREECIV_JSON_CONNECTION */
46461 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
46462 RECEIVE_PACKET_FIELD_ERROR(convert_time);
46463 }
46464#ifdef FREECIV_JSON_CONNECTION
46465 field_addr.name = "fuel";
46466#endif /* FREECIV_JSON_CONNECTION */
46467 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
46469 }
46470#ifdef FREECIV_JSON_CONNECTION
46471 field_addr.name = "happy_cost";
46472#endif /* FREECIV_JSON_CONNECTION */
46473 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
46474 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
46475 }
46476#ifdef FREECIV_JSON_CONNECTION
46477 field_addr.name = "upkeep";
46478#endif /* FREECIV_JSON_CONNECTION */
46479 {
46480 int i;
46481
46482#ifdef FREECIV_JSON_CONNECTION
46483 /* Enter array. */
46484 field_addr.sub_location = plocation_elem_new(0);
46485#endif /* FREECIV_JSON_CONNECTION */
46486
46487 for (i = 0; i < O_LAST; i++) {
46488#ifdef FREECIV_JSON_CONNECTION
46489 field_addr.sub_location->number = i;
46490#endif /* FREECIV_JSON_CONNECTION */
46491
46492 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
46494 }
46495 }
46496
46497#ifdef FREECIV_JSON_CONNECTION
46498 /* Exit array. */
46499 FC_FREE(field_addr.sub_location);
46500#endif /* FREECIV_JSON_CONNECTION */
46501 }
46502#ifdef FREECIV_JSON_CONNECTION
46503 field_addr.name = "paratroopers_range";
46504#endif /* FREECIV_JSON_CONNECTION */
46505 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
46506 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
46507 }
46508#ifdef FREECIV_JSON_CONNECTION
46509 field_addr.name = "veteran_levels";
46510#endif /* FREECIV_JSON_CONNECTION */
46511 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
46512 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
46513 }
46514#ifdef FREECIV_JSON_CONNECTION
46515 field_addr.name = "veteran_name";
46516#endif /* FREECIV_JSON_CONNECTION */
46517 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46518 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": truncation array");
46519 }
46520 {
46521 int i;
46522
46523#ifdef FREECIV_JSON_CONNECTION
46524 /* Enter array. */
46525 field_addr.sub_location = plocation_elem_new(0);
46526#endif /* FREECIV_JSON_CONNECTION */
46527
46528 for (i = 0; i < real_packet->veteran_levels; i++) {
46529#ifdef FREECIV_JSON_CONNECTION
46530 field_addr.sub_location->number = i;
46531#endif /* FREECIV_JSON_CONNECTION */
46532
46533 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
46534 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
46535 }
46536 }
46537
46538#ifdef FREECIV_JSON_CONNECTION
46539 /* Exit array. */
46540 FC_FREE(field_addr.sub_location);
46541#endif /* FREECIV_JSON_CONNECTION */
46542 }
46543#ifdef FREECIV_JSON_CONNECTION
46544 field_addr.name = "power_fact";
46545#endif /* FREECIV_JSON_CONNECTION */
46546 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46547 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": truncation array");
46548 }
46549 {
46550 int i;
46551
46552#ifdef FREECIV_JSON_CONNECTION
46553 /* Enter array. */
46554 field_addr.sub_location = plocation_elem_new(0);
46555#endif /* FREECIV_JSON_CONNECTION */
46556
46557 for (i = 0; i < real_packet->veteran_levels; i++) {
46558#ifdef FREECIV_JSON_CONNECTION
46559 field_addr.sub_location->number = i;
46560#endif /* FREECIV_JSON_CONNECTION */
46561
46562 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
46563 RECEIVE_PACKET_FIELD_ERROR(power_fact);
46564 }
46565 }
46566
46567#ifdef FREECIV_JSON_CONNECTION
46568 /* Exit array. */
46569 FC_FREE(field_addr.sub_location);
46570#endif /* FREECIV_JSON_CONNECTION */
46571 }
46572#ifdef FREECIV_JSON_CONNECTION
46573 field_addr.name = "move_bonus";
46574#endif /* FREECIV_JSON_CONNECTION */
46575 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46576 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": truncation array");
46577 }
46578 {
46579 int i;
46580
46581#ifdef FREECIV_JSON_CONNECTION
46582 /* Enter array. */
46583 field_addr.sub_location = plocation_elem_new(0);
46584#endif /* FREECIV_JSON_CONNECTION */
46585
46586 for (i = 0; i < real_packet->veteran_levels; i++) {
46587#ifdef FREECIV_JSON_CONNECTION
46588 field_addr.sub_location->number = i;
46589#endif /* FREECIV_JSON_CONNECTION */
46590
46591 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
46592 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
46593 }
46594 }
46595
46596#ifdef FREECIV_JSON_CONNECTION
46597 /* Exit array. */
46598 FC_FREE(field_addr.sub_location);
46599#endif /* FREECIV_JSON_CONNECTION */
46600 }
46601#ifdef FREECIV_JSON_CONNECTION
46602 field_addr.name = "base_raise_chance";
46603#endif /* FREECIV_JSON_CONNECTION */
46604 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46605 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": truncation array");
46606 }
46607 {
46608 int i;
46609
46610#ifdef FREECIV_JSON_CONNECTION
46611 /* Enter array. */
46612 field_addr.sub_location = plocation_elem_new(0);
46613#endif /* FREECIV_JSON_CONNECTION */
46614
46615 for (i = 0; i < real_packet->veteran_levels; i++) {
46616#ifdef FREECIV_JSON_CONNECTION
46617 field_addr.sub_location->number = i;
46618#endif /* FREECIV_JSON_CONNECTION */
46619
46620 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
46621 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
46622 }
46623 }
46624
46625#ifdef FREECIV_JSON_CONNECTION
46626 /* Exit array. */
46627 FC_FREE(field_addr.sub_location);
46628#endif /* FREECIV_JSON_CONNECTION */
46629 }
46630#ifdef FREECIV_JSON_CONNECTION
46631 field_addr.name = "work_raise_chance";
46632#endif /* FREECIV_JSON_CONNECTION */
46633 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
46634 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": truncation array");
46635 }
46636 {
46637 int i;
46638
46639#ifdef FREECIV_JSON_CONNECTION
46640 /* Enter array. */
46641 field_addr.sub_location = plocation_elem_new(0);
46642#endif /* FREECIV_JSON_CONNECTION */
46643
46644 for (i = 0; i < real_packet->veteran_levels; i++) {
46645#ifdef FREECIV_JSON_CONNECTION
46646 field_addr.sub_location->number = i;
46647#endif /* FREECIV_JSON_CONNECTION */
46648
46649 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
46650 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
46651 }
46652 }
46653
46654#ifdef FREECIV_JSON_CONNECTION
46655 /* Exit array. */
46656 FC_FREE(field_addr.sub_location);
46657#endif /* FREECIV_JSON_CONNECTION */
46658 }
46659#ifdef FREECIV_JSON_CONNECTION
46660 field_addr.name = "bombard_rate";
46661#endif /* FREECIV_JSON_CONNECTION */
46662 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
46663 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
46664 }
46665#ifdef FREECIV_JSON_CONNECTION
46666 field_addr.name = "city_size";
46667#endif /* FREECIV_JSON_CONNECTION */
46668 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
46669 RECEIVE_PACKET_FIELD_ERROR(city_size);
46670 }
46671#ifdef FREECIV_JSON_CONNECTION
46672 field_addr.name = "city_slots";
46673#endif /* FREECIV_JSON_CONNECTION */
46674 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
46675 RECEIVE_PACKET_FIELD_ERROR(city_slots);
46676 }
46677#ifdef FREECIV_JSON_CONNECTION
46678 field_addr.name = "tp_defense";
46679#endif /* FREECIV_JSON_CONNECTION */
46680 {
46681 int readin;
46682
46683 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
46684 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
46685 }
46686 real_packet->tp_defense = readin;
46687 }
46688#ifdef FREECIV_JSON_CONNECTION
46689 field_addr.name = "cargo";
46690#endif /* FREECIV_JSON_CONNECTION */
46691 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
46693 }
46694#ifdef FREECIV_JSON_CONNECTION
46695 field_addr.name = "targets";
46696#endif /* FREECIV_JSON_CONNECTION */
46697 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
46699 }
46700#ifdef FREECIV_JSON_CONNECTION
46701 field_addr.name = "embarks";
46702#endif /* FREECIV_JSON_CONNECTION */
46703 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
46705 }
46706#ifdef FREECIV_JSON_CONNECTION
46707 field_addr.name = "disembarks";
46708#endif /* FREECIV_JSON_CONNECTION */
46709 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
46710 RECEIVE_PACKET_FIELD_ERROR(disembarks);
46711 }
46712#ifdef FREECIV_JSON_CONNECTION
46713 field_addr.name = "vlayer";
46714#endif /* FREECIV_JSON_CONNECTION */
46715 {
46716 int readin;
46717
46718 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
46720 }
46721 real_packet->vlayer = readin;
46722 }
46723#ifdef FREECIV_JSON_CONNECTION
46724 field_addr.name = "helptext";
46725#endif /* FREECIV_JSON_CONNECTION */
46726 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
46728 }
46729#ifdef FREECIV_JSON_CONNECTION
46730 field_addr.name = "flags";
46731#endif /* FREECIV_JSON_CONNECTION */
46732 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
46734 }
46735#ifdef FREECIV_JSON_CONNECTION
46736 field_addr.name = "roles";
46737#endif /* FREECIV_JSON_CONNECTION */
46738 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
46740 }
46741#ifdef FREECIV_JSON_CONNECTION
46742 field_addr.name = "worker";
46743#endif /* FREECIV_JSON_CONNECTION */
46744 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->worker)) {
46746 }
46747#endif
46748 log_packet_detailed("packet_ruleset_unit_100: got info about ()");
46749
46750#ifdef FREECIV_DELTA_PROTOCOL
46751 if (NULL == *hash) {
46753 NULL, NULL, NULL, free);
46754 }
46755
46756 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
46757 *real_packet = *old;
46758 } else {
46759 log_packet_detailed(" no old info");
46760 memset(real_packet, 0, sizeof(*real_packet));
46761 }
46762
46763 if (BV_ISSET(fields, 0)) {
46764 log_packet_detailed(" got field 'id'");
46765#ifdef FREECIV_JSON_CONNECTION
46766 field_addr.name = "id";
46767#endif /* FREECIV_JSON_CONNECTION */
46768 {
46769 int readin;
46770
46771 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
46773 }
46774 real_packet->id = readin;
46775 }
46776 }
46777 if (BV_ISSET(fields, 1)) {
46778 log_packet_detailed(" got field 'name'");
46779#ifdef FREECIV_JSON_CONNECTION
46780 field_addr.name = "name";
46781#endif /* FREECIV_JSON_CONNECTION */
46782 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
46784 }
46785 }
46786 if (BV_ISSET(fields, 2)) {
46787 log_packet_detailed(" got field 'rule_name'");
46788#ifdef FREECIV_JSON_CONNECTION
46789 field_addr.name = "rule_name";
46790#endif /* FREECIV_JSON_CONNECTION */
46791 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
46792 RECEIVE_PACKET_FIELD_ERROR(rule_name);
46793 }
46794 }
46795 if (BV_ISSET(fields, 3)) {
46796 log_packet_detailed(" got field 'graphic_str'");
46797#ifdef FREECIV_JSON_CONNECTION
46798 field_addr.name = "graphic_str";
46799#endif /* FREECIV_JSON_CONNECTION */
46800 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
46801 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
46802 }
46803 }
46804 if (BV_ISSET(fields, 4)) {
46805 log_packet_detailed(" got field 'graphic_alt'");
46806#ifdef FREECIV_JSON_CONNECTION
46807 field_addr.name = "graphic_alt";
46808#endif /* FREECIV_JSON_CONNECTION */
46809 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
46810 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
46811 }
46812 }
46813 if (BV_ISSET(fields, 5)) {
46814 log_packet_detailed(" got field 'graphic_alt2'");
46815#ifdef FREECIV_JSON_CONNECTION
46816 field_addr.name = "graphic_alt2";
46817#endif /* FREECIV_JSON_CONNECTION */
46818 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
46819 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
46820 }
46821 }
46822 if (BV_ISSET(fields, 6)) {
46823 log_packet_detailed(" got field 'sound_move'");
46824#ifdef FREECIV_JSON_CONNECTION
46825 field_addr.name = "sound_move";
46826#endif /* FREECIV_JSON_CONNECTION */
46827 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move, sizeof(real_packet->sound_move))) {
46828 RECEIVE_PACKET_FIELD_ERROR(sound_move);
46829 }
46830 }
46831 if (BV_ISSET(fields, 7)) {
46832 log_packet_detailed(" got field 'sound_move_alt'");
46833#ifdef FREECIV_JSON_CONNECTION
46834 field_addr.name = "sound_move_alt";
46835#endif /* FREECIV_JSON_CONNECTION */
46836 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_move_alt, sizeof(real_packet->sound_move_alt))) {
46837 RECEIVE_PACKET_FIELD_ERROR(sound_move_alt);
46838 }
46839 }
46840 if (BV_ISSET(fields, 8)) {
46841 log_packet_detailed(" got field 'sound_fight'");
46842#ifdef FREECIV_JSON_CONNECTION
46843 field_addr.name = "sound_fight";
46844#endif /* FREECIV_JSON_CONNECTION */
46845 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight, sizeof(real_packet->sound_fight))) {
46846 RECEIVE_PACKET_FIELD_ERROR(sound_fight);
46847 }
46848 }
46849 if (BV_ISSET(fields, 9)) {
46850 log_packet_detailed(" got field 'sound_fight_alt'");
46851#ifdef FREECIV_JSON_CONNECTION
46852 field_addr.name = "sound_fight_alt";
46853#endif /* FREECIV_JSON_CONNECTION */
46854 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_fight_alt, sizeof(real_packet->sound_fight_alt))) {
46855 RECEIVE_PACKET_FIELD_ERROR(sound_fight_alt);
46856 }
46857 }
46858 if (BV_ISSET(fields, 10)) {
46859 log_packet_detailed(" got field 'unit_class_id'");
46860#ifdef FREECIV_JSON_CONNECTION
46861 field_addr.name = "unit_class_id";
46862#endif /* FREECIV_JSON_CONNECTION */
46863 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->unit_class_id)) {
46864 RECEIVE_PACKET_FIELD_ERROR(unit_class_id);
46865 }
46866 }
46867 if (BV_ISSET(fields, 11)) {
46868 log_packet_detailed(" got field 'build_cost'");
46869#ifdef FREECIV_JSON_CONNECTION
46870 field_addr.name = "build_cost";
46871#endif /* FREECIV_JSON_CONNECTION */
46872 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
46873 RECEIVE_PACKET_FIELD_ERROR(build_cost);
46874 }
46875 }
46876 if (BV_ISSET(fields, 12)) {
46877 log_packet_detailed(" got field 'pop_cost'");
46878#ifdef FREECIV_JSON_CONNECTION
46879 field_addr.name = "pop_cost";
46880#endif /* FREECIV_JSON_CONNECTION */
46881 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pop_cost)) {
46883 }
46884 }
46885 if (BV_ISSET(fields, 13)) {
46886 log_packet_detailed(" got field 'attack_strength'");
46887#ifdef FREECIV_JSON_CONNECTION
46888 field_addr.name = "attack_strength";
46889#endif /* FREECIV_JSON_CONNECTION */
46890 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->attack_strength)) {
46891 RECEIVE_PACKET_FIELD_ERROR(attack_strength);
46892 }
46893 }
46894 if (BV_ISSET(fields, 14)) {
46895 log_packet_detailed(" got field 'defense_strength'");
46896#ifdef FREECIV_JSON_CONNECTION
46897 field_addr.name = "defense_strength";
46898#endif /* FREECIV_JSON_CONNECTION */
46899 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_strength)) {
46900 RECEIVE_PACKET_FIELD_ERROR(defense_strength);
46901 }
46902 }
46903 if (BV_ISSET(fields, 15)) {
46904 log_packet_detailed(" got field 'move_rate'");
46905#ifdef FREECIV_JSON_CONNECTION
46906 field_addr.name = "move_rate";
46907#endif /* FREECIV_JSON_CONNECTION */
46908 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_rate)) {
46909 RECEIVE_PACKET_FIELD_ERROR(move_rate);
46910 }
46911 }
46912 if (BV_ISSET(fields, 16)) {
46913 log_packet_detailed(" got field 'build_reqs_count'");
46914#ifdef FREECIV_JSON_CONNECTION
46915 field_addr.name = "build_reqs_count";
46916#endif /* FREECIV_JSON_CONNECTION */
46917 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_reqs_count)) {
46918 RECEIVE_PACKET_FIELD_ERROR(build_reqs_count);
46919 }
46920 }
46921 if (BV_ISSET(fields, 17)) {
46922 log_packet_detailed(" got field 'build_reqs'");
46923#ifdef FREECIV_JSON_CONNECTION
46924 field_addr.name = "build_reqs";
46925#endif /* FREECIV_JSON_CONNECTION */
46926 if (real_packet->build_reqs_count > MAX_NUM_REQS) {
46927 RECEIVE_PACKET_FIELD_ERROR(build_reqs, ": truncation array");
46928 }
46929 {
46930 int i;
46931
46932#ifdef FREECIV_JSON_CONNECTION
46933 /* Enter array. */
46934 field_addr.sub_location = plocation_elem_new(0);
46935#endif /* FREECIV_JSON_CONNECTION */
46936
46937 for (i = 0; i < real_packet->build_reqs_count; i++) {
46938#ifdef FREECIV_JSON_CONNECTION
46939 field_addr.sub_location->number = i;
46940#endif /* FREECIV_JSON_CONNECTION */
46941
46942 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->build_reqs[i])) {
46943 RECEIVE_PACKET_FIELD_ERROR(build_reqs);
46944 }
46945 }
46946
46947#ifdef FREECIV_JSON_CONNECTION
46948 /* Exit array. */
46949 FC_FREE(field_addr.sub_location);
46950#endif /* FREECIV_JSON_CONNECTION */
46951 }
46952 }
46953 if (BV_ISSET(fields, 18)) {
46954 log_packet_detailed(" got field 'vision_radius_sq'");
46955#ifdef FREECIV_JSON_CONNECTION
46956 field_addr.name = "vision_radius_sq";
46957#endif /* FREECIV_JSON_CONNECTION */
46958 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->vision_radius_sq)) {
46959 RECEIVE_PACKET_FIELD_ERROR(vision_radius_sq);
46960 }
46961 }
46962 if (BV_ISSET(fields, 19)) {
46963 log_packet_detailed(" got field 'transport_capacity'");
46964#ifdef FREECIV_JSON_CONNECTION
46965 field_addr.name = "transport_capacity";
46966#endif /* FREECIV_JSON_CONNECTION */
46967 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transport_capacity)) {
46968 RECEIVE_PACKET_FIELD_ERROR(transport_capacity);
46969 }
46970 }
46971 if (BV_ISSET(fields, 20)) {
46972 log_packet_detailed(" got field 'hp'");
46973#ifdef FREECIV_JSON_CONNECTION
46974 field_addr.name = "hp";
46975#endif /* FREECIV_JSON_CONNECTION */
46976 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
46978 }
46979 }
46980 if (BV_ISSET(fields, 21)) {
46981 log_packet_detailed(" got field 'firepower'");
46982#ifdef FREECIV_JSON_CONNECTION
46983 field_addr.name = "firepower";
46984#endif /* FREECIV_JSON_CONNECTION */
46985 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->firepower)) {
46986 RECEIVE_PACKET_FIELD_ERROR(firepower);
46987 }
46988 }
46989 if (BV_ISSET(fields, 22)) {
46990 log_packet_detailed(" got field 'obsoleted_by'");
46991#ifdef FREECIV_JSON_CONNECTION
46992 field_addr.name = "obsoleted_by";
46993#endif /* FREECIV_JSON_CONNECTION */
46994 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obsoleted_by)) {
46995 RECEIVE_PACKET_FIELD_ERROR(obsoleted_by);
46996 }
46997 }
46998 if (BV_ISSET(fields, 23)) {
46999 log_packet_detailed(" got field 'converted_to'");
47000#ifdef FREECIV_JSON_CONNECTION
47001 field_addr.name = "converted_to";
47002#endif /* FREECIV_JSON_CONNECTION */
47003 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->converted_to)) {
47004 RECEIVE_PACKET_FIELD_ERROR(converted_to);
47005 }
47006 }
47007 if (BV_ISSET(fields, 24)) {
47008 log_packet_detailed(" got field 'convert_time'");
47009#ifdef FREECIV_JSON_CONNECTION
47010 field_addr.name = "convert_time";
47011#endif /* FREECIV_JSON_CONNECTION */
47012 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->convert_time)) {
47013 RECEIVE_PACKET_FIELD_ERROR(convert_time);
47014 }
47015 }
47016 if (BV_ISSET(fields, 25)) {
47017 log_packet_detailed(" got field 'fuel'");
47018#ifdef FREECIV_JSON_CONNECTION
47019 field_addr.name = "fuel";
47020#endif /* FREECIV_JSON_CONNECTION */
47021 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
47023 }
47024 }
47025 if (BV_ISSET(fields, 26)) {
47026 log_packet_detailed(" got field 'happy_cost'");
47027#ifdef FREECIV_JSON_CONNECTION
47028 field_addr.name = "happy_cost";
47029#endif /* FREECIV_JSON_CONNECTION */
47030 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->happy_cost)) {
47031 RECEIVE_PACKET_FIELD_ERROR(happy_cost);
47032 }
47033 }
47034 if (BV_ISSET(fields, 27)) {
47035 log_packet_detailed(" got field 'upkeep'");
47036#ifdef FREECIV_JSON_CONNECTION
47037 field_addr.name = "upkeep";
47038#endif /* FREECIV_JSON_CONNECTION */
47039 {
47040 int i;
47041
47042#ifdef FREECIV_JSON_CONNECTION
47043 /* Enter array. */
47044 field_addr.sub_location = plocation_elem_new(0);
47045#endif /* FREECIV_JSON_CONNECTION */
47046
47047 for (i = 0; i < O_LAST; i++) {
47048#ifdef FREECIV_JSON_CONNECTION
47049 field_addr.sub_location->number = i;
47050#endif /* FREECIV_JSON_CONNECTION */
47051
47052 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep[i])) {
47054 }
47055 }
47056
47057#ifdef FREECIV_JSON_CONNECTION
47058 /* Exit array. */
47059 FC_FREE(field_addr.sub_location);
47060#endif /* FREECIV_JSON_CONNECTION */
47061 }
47062 }
47063 if (BV_ISSET(fields, 28)) {
47064 log_packet_detailed(" got field 'paratroopers_range'");
47065#ifdef FREECIV_JSON_CONNECTION
47066 field_addr.name = "paratroopers_range";
47067#endif /* FREECIV_JSON_CONNECTION */
47068 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->paratroopers_range)) {
47069 RECEIVE_PACKET_FIELD_ERROR(paratroopers_range);
47070 }
47071 }
47072 if (BV_ISSET(fields, 29)) {
47073 log_packet_detailed(" got field 'veteran_levels'");
47074#ifdef FREECIV_JSON_CONNECTION
47075 field_addr.name = "veteran_levels";
47076#endif /* FREECIV_JSON_CONNECTION */
47077 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
47078 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
47079 }
47080 }
47081 if (BV_ISSET(fields, 30)) {
47082 log_packet_detailed(" got field 'veteran_name'");
47083#ifdef FREECIV_JSON_CONNECTION
47084 field_addr.name = "veteran_name";
47085#endif /* FREECIV_JSON_CONNECTION */
47086 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47087 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": truncation array");
47088 }
47089 {
47090 int i;
47091
47092#ifdef FREECIV_JSON_CONNECTION
47093 /* Enter array. */
47094 field_addr.sub_location = plocation_elem_new(0);
47095#endif /* FREECIV_JSON_CONNECTION */
47096
47097 for (i = 0; i < real_packet->veteran_levels; i++) {
47098#ifdef FREECIV_JSON_CONNECTION
47099 field_addr.sub_location->number = i;
47100#endif /* FREECIV_JSON_CONNECTION */
47101
47102 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
47103 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
47104 }
47105 }
47106
47107#ifdef FREECIV_JSON_CONNECTION
47108 /* Exit array. */
47109 FC_FREE(field_addr.sub_location);
47110#endif /* FREECIV_JSON_CONNECTION */
47111 }
47112 }
47113 if (BV_ISSET(fields, 31)) {
47114 log_packet_detailed(" got field 'power_fact'");
47115#ifdef FREECIV_JSON_CONNECTION
47116 field_addr.name = "power_fact";
47117#endif /* FREECIV_JSON_CONNECTION */
47118 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47119 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": truncation array");
47120 }
47121 {
47122 int i;
47123
47124#ifdef FREECIV_JSON_CONNECTION
47125 /* Enter array. */
47126 field_addr.sub_location = plocation_elem_new(0);
47127#endif /* FREECIV_JSON_CONNECTION */
47128
47129 for (i = 0; i < real_packet->veteran_levels; i++) {
47130#ifdef FREECIV_JSON_CONNECTION
47131 field_addr.sub_location->number = i;
47132#endif /* FREECIV_JSON_CONNECTION */
47133
47134 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
47135 RECEIVE_PACKET_FIELD_ERROR(power_fact);
47136 }
47137 }
47138
47139#ifdef FREECIV_JSON_CONNECTION
47140 /* Exit array. */
47141 FC_FREE(field_addr.sub_location);
47142#endif /* FREECIV_JSON_CONNECTION */
47143 }
47144 }
47145 if (BV_ISSET(fields, 32)) {
47146 log_packet_detailed(" got field 'move_bonus'");
47147#ifdef FREECIV_JSON_CONNECTION
47148 field_addr.name = "move_bonus";
47149#endif /* FREECIV_JSON_CONNECTION */
47150 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47151 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": truncation array");
47152 }
47153 {
47154 int i;
47155
47156#ifdef FREECIV_JSON_CONNECTION
47157 /* Enter array. */
47158 field_addr.sub_location = plocation_elem_new(0);
47159#endif /* FREECIV_JSON_CONNECTION */
47160
47161 for (i = 0; i < real_packet->veteran_levels; i++) {
47162#ifdef FREECIV_JSON_CONNECTION
47163 field_addr.sub_location->number = i;
47164#endif /* FREECIV_JSON_CONNECTION */
47165
47166 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
47167 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
47168 }
47169 }
47170
47171#ifdef FREECIV_JSON_CONNECTION
47172 /* Exit array. */
47173 FC_FREE(field_addr.sub_location);
47174#endif /* FREECIV_JSON_CONNECTION */
47175 }
47176 }
47177 if (BV_ISSET(fields, 33)) {
47178 log_packet_detailed(" got field 'base_raise_chance'");
47179#ifdef FREECIV_JSON_CONNECTION
47180 field_addr.name = "base_raise_chance";
47181#endif /* FREECIV_JSON_CONNECTION */
47182 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47183 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": truncation array");
47184 }
47185 {
47186 int i;
47187
47188#ifdef FREECIV_JSON_CONNECTION
47189 /* Enter array. */
47190 field_addr.sub_location = plocation_elem_new(0);
47191#endif /* FREECIV_JSON_CONNECTION */
47192
47193 for (i = 0; i < real_packet->veteran_levels; i++) {
47194#ifdef FREECIV_JSON_CONNECTION
47195 field_addr.sub_location->number = i;
47196#endif /* FREECIV_JSON_CONNECTION */
47197
47198 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
47199 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
47200 }
47201 }
47202
47203#ifdef FREECIV_JSON_CONNECTION
47204 /* Exit array. */
47205 FC_FREE(field_addr.sub_location);
47206#endif /* FREECIV_JSON_CONNECTION */
47207 }
47208 }
47209 if (BV_ISSET(fields, 34)) {
47210 log_packet_detailed(" got field 'work_raise_chance'");
47211#ifdef FREECIV_JSON_CONNECTION
47212 field_addr.name = "work_raise_chance";
47213#endif /* FREECIV_JSON_CONNECTION */
47214 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
47215 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": truncation array");
47216 }
47217 {
47218 int i;
47219
47220#ifdef FREECIV_JSON_CONNECTION
47221 /* Enter array. */
47222 field_addr.sub_location = plocation_elem_new(0);
47223#endif /* FREECIV_JSON_CONNECTION */
47224
47225 for (i = 0; i < real_packet->veteran_levels; i++) {
47226#ifdef FREECIV_JSON_CONNECTION
47227 field_addr.sub_location->number = i;
47228#endif /* FREECIV_JSON_CONNECTION */
47229
47230 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
47231 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
47232 }
47233 }
47234
47235#ifdef FREECIV_JSON_CONNECTION
47236 /* Exit array. */
47237 FC_FREE(field_addr.sub_location);
47238#endif /* FREECIV_JSON_CONNECTION */
47239 }
47240 }
47241 if (BV_ISSET(fields, 35)) {
47242 log_packet_detailed(" got field 'bombard_rate'");
47243#ifdef FREECIV_JSON_CONNECTION
47244 field_addr.name = "bombard_rate";
47245#endif /* FREECIV_JSON_CONNECTION */
47246 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bombard_rate)) {
47247 RECEIVE_PACKET_FIELD_ERROR(bombard_rate);
47248 }
47249 }
47250 if (BV_ISSET(fields, 36)) {
47251 log_packet_detailed(" got field 'city_size'");
47252#ifdef FREECIV_JSON_CONNECTION
47253 field_addr.name = "city_size";
47254#endif /* FREECIV_JSON_CONNECTION */
47255 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_size)) {
47256 RECEIVE_PACKET_FIELD_ERROR(city_size);
47257 }
47258 }
47259 if (BV_ISSET(fields, 37)) {
47260 log_packet_detailed(" got field 'city_slots'");
47261#ifdef FREECIV_JSON_CONNECTION
47262 field_addr.name = "city_slots";
47263#endif /* FREECIV_JSON_CONNECTION */
47264 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->city_slots)) {
47265 RECEIVE_PACKET_FIELD_ERROR(city_slots);
47266 }
47267 }
47268 if (BV_ISSET(fields, 38)) {
47269 log_packet_detailed(" got field 'tp_defense'");
47270#ifdef FREECIV_JSON_CONNECTION
47271 field_addr.name = "tp_defense";
47272#endif /* FREECIV_JSON_CONNECTION */
47273 {
47274 int readin;
47275
47276 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
47277 RECEIVE_PACKET_FIELD_ERROR(tp_defense);
47278 }
47279 real_packet->tp_defense = readin;
47280 }
47281 }
47282 if (BV_ISSET(fields, 39)) {
47283 log_packet_detailed(" got field 'cargo'");
47284#ifdef FREECIV_JSON_CONNECTION
47285 field_addr.name = "cargo";
47286#endif /* FREECIV_JSON_CONNECTION */
47287 if (!DIO_BV_GET(&din, &field_addr, real_packet->cargo)) {
47289 }
47290 }
47291 if (BV_ISSET(fields, 40)) {
47292 log_packet_detailed(" got field 'targets'");
47293#ifdef FREECIV_JSON_CONNECTION
47294 field_addr.name = "targets";
47295#endif /* FREECIV_JSON_CONNECTION */
47296 if (!DIO_BV_GET(&din, &field_addr, real_packet->targets)) {
47298 }
47299 }
47300 if (BV_ISSET(fields, 41)) {
47301 log_packet_detailed(" got field 'embarks'");
47302#ifdef FREECIV_JSON_CONNECTION
47303 field_addr.name = "embarks";
47304#endif /* FREECIV_JSON_CONNECTION */
47305 if (!DIO_BV_GET(&din, &field_addr, real_packet->embarks)) {
47307 }
47308 }
47309 if (BV_ISSET(fields, 42)) {
47310 log_packet_detailed(" got field 'disembarks'");
47311#ifdef FREECIV_JSON_CONNECTION
47312 field_addr.name = "disembarks";
47313#endif /* FREECIV_JSON_CONNECTION */
47314 if (!DIO_BV_GET(&din, &field_addr, real_packet->disembarks)) {
47315 RECEIVE_PACKET_FIELD_ERROR(disembarks);
47316 }
47317 }
47318 if (BV_ISSET(fields, 43)) {
47319 log_packet_detailed(" got field 'vlayer'");
47320#ifdef FREECIV_JSON_CONNECTION
47321 field_addr.name = "vlayer";
47322#endif /* FREECIV_JSON_CONNECTION */
47323 {
47324 int readin;
47325
47326 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
47328 }
47329 real_packet->vlayer = readin;
47330 }
47331 }
47332 if (BV_ISSET(fields, 44)) {
47333 log_packet_detailed(" got field 'helptext'");
47334#ifdef FREECIV_JSON_CONNECTION
47335 field_addr.name = "helptext";
47336#endif /* FREECIV_JSON_CONNECTION */
47337 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
47339 }
47340 }
47341 if (BV_ISSET(fields, 45)) {
47342 log_packet_detailed(" got field 'flags'");
47343#ifdef FREECIV_JSON_CONNECTION
47344 field_addr.name = "flags";
47345#endif /* FREECIV_JSON_CONNECTION */
47346 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
47348 }
47349 }
47350 if (BV_ISSET(fields, 46)) {
47351 log_packet_detailed(" got field 'roles'");
47352#ifdef FREECIV_JSON_CONNECTION
47353 field_addr.name = "roles";
47354#endif /* FREECIV_JSON_CONNECTION */
47355 if (!DIO_BV_GET(&din, &field_addr, real_packet->roles)) {
47357 }
47358 }
47359 real_packet->worker = BV_ISSET(fields, 47);
47360
47361 if (NULL == old) {
47362 old = fc_malloc(sizeof(*old));
47363 *old = *real_packet;
47364 genhash_insert(*hash, old, old);
47365 } else {
47366 *old = *real_packet;
47367 }
47368
47369#endif /* FREECIV_DELTA_PROTOCOL */
47371}
47372
47373static int send_packet_ruleset_unit_100(struct connection *pc, const struct packet_ruleset_unit *packet)
47374{
47375 const struct packet_ruleset_unit *real_packet = packet;
47376 int e;
47377#ifdef FREECIV_DELTA_PROTOCOL
47379 struct packet_ruleset_unit *old;
47380 bool differ;
47381 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT;
47382#endif /* FREECIV_DELTA_PROTOCOL */
47384#ifdef FREECIV_JSON_CONNECTION
47385 struct plocation field_addr;
47386 {
47390 }
47391#endif /* FREECIV_JSON_CONNECTION */
47392
47393 log_packet_detailed("packet_ruleset_unit_100: sending info about ()");
47394
47395#ifdef FREECIV_DELTA_PROTOCOL
47396 if (NULL == *hash) {
47398 NULL, NULL, NULL, free);
47399 }
47400 BV_CLR_ALL(fields);
47401
47402 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
47403 old = fc_malloc(sizeof(*old));
47404 *old = *real_packet;
47405 genhash_insert(*hash, old, old);
47406 memset(old, 0, sizeof(*old));
47407 }
47408 differ = (old->id != real_packet->id);
47409 if (differ) {
47410 BV_SET(fields, 0);
47411 }
47412
47413 differ = (strcmp(old->name, real_packet->name) != 0);
47414 if (differ) {
47415 BV_SET(fields, 1);
47416 }
47417
47418 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
47419 if (differ) {
47420 BV_SET(fields, 2);
47421 }
47422
47423 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
47424 if (differ) {
47425 BV_SET(fields, 3);
47426 }
47427
47428 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
47429 if (differ) {
47430 BV_SET(fields, 4);
47431 }
47432
47433 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
47434 if (differ) {
47435 BV_SET(fields, 5);
47436 }
47437
47438 differ = (strcmp(old->sound_move, real_packet->sound_move) != 0);
47439 if (differ) {
47440 BV_SET(fields, 6);
47441 }
47442
47443 differ = (strcmp(old->sound_move_alt, real_packet->sound_move_alt) != 0);
47444 if (differ) {
47445 BV_SET(fields, 7);
47446 }
47447
47448 differ = (strcmp(old->sound_fight, real_packet->sound_fight) != 0);
47449 if (differ) {
47450 BV_SET(fields, 8);
47451 }
47452
47453 differ = (strcmp(old->sound_fight_alt, real_packet->sound_fight_alt) != 0);
47454 if (differ) {
47455 BV_SET(fields, 9);
47456 }
47457
47458 differ = (old->unit_class_id != real_packet->unit_class_id);
47459 if (differ) {
47460 BV_SET(fields, 10);
47461 }
47462
47463 differ = (old->build_cost != real_packet->build_cost);
47464 if (differ) {
47465 BV_SET(fields, 11);
47466 }
47467
47468 differ = (old->pop_cost != real_packet->pop_cost);
47469 if (differ) {
47470 BV_SET(fields, 12);
47471 }
47472
47473 differ = (old->attack_strength != real_packet->attack_strength);
47474 if (differ) {
47475 BV_SET(fields, 13);
47476 }
47477
47478 differ = (old->defense_strength != real_packet->defense_strength);
47479 if (differ) {
47480 BV_SET(fields, 14);
47481 }
47482
47483 differ = (old->move_rate != real_packet->move_rate);
47484 if (differ) {
47485 BV_SET(fields, 15);
47486 }
47487
47488 differ = (old->build_reqs_count != real_packet->build_reqs_count);
47489 if (differ) {
47490 BV_SET(fields, 16);
47491 }
47492
47493 differ = (old->build_reqs_count != real_packet->build_reqs_count);
47494 if (!differ) {
47495 int i;
47496
47497 for (i = 0; i < real_packet->build_reqs_count; i++) {
47498 differ = !are_requirements_equal(&old->build_reqs[i], &real_packet->build_reqs[i]);
47499 if (differ) {
47500 break;
47501 }
47502 }
47503 }
47504 if (differ) {
47505 BV_SET(fields, 17);
47506 }
47507
47508 differ = (old->vision_radius_sq != real_packet->vision_radius_sq);
47509 if (differ) {
47510 BV_SET(fields, 18);
47511 }
47512
47513 differ = (old->transport_capacity != real_packet->transport_capacity);
47514 if (differ) {
47515 BV_SET(fields, 19);
47516 }
47517
47518 differ = (old->hp != real_packet->hp);
47519 if (differ) {
47520 BV_SET(fields, 20);
47521 }
47522
47523 differ = (old->firepower != real_packet->firepower);
47524 if (differ) {
47525 BV_SET(fields, 21);
47526 }
47527
47528 differ = (old->obsoleted_by != real_packet->obsoleted_by);
47529 if (differ) {
47530 BV_SET(fields, 22);
47531 }
47532
47533 differ = (old->converted_to != real_packet->converted_to);
47534 if (differ) {
47535 BV_SET(fields, 23);
47536 }
47537
47538 differ = (old->convert_time != real_packet->convert_time);
47539 if (differ) {
47540 BV_SET(fields, 24);
47541 }
47542
47543 differ = (old->fuel != real_packet->fuel);
47544 if (differ) {
47545 BV_SET(fields, 25);
47546 }
47547
47548 differ = (old->happy_cost != real_packet->happy_cost);
47549 if (differ) {
47550 BV_SET(fields, 26);
47551 }
47552
47553 differ = FALSE;
47554 {
47555 int i;
47556
47557 for (i = 0; i < O_LAST; i++) {
47558 differ = (old->upkeep[i] != real_packet->upkeep[i]);
47559 if (differ) {
47560 break;
47561 }
47562 }
47563 }
47564 if (differ) {
47565 BV_SET(fields, 27);
47566 }
47567
47568 differ = (old->paratroopers_range != real_packet->paratroopers_range);
47569 if (differ) {
47570 BV_SET(fields, 28);
47571 }
47572
47573 differ = (old->veteran_levels != real_packet->veteran_levels);
47574 if (differ) {
47575 BV_SET(fields, 29);
47576 }
47577
47578 differ = (old->veteran_levels != real_packet->veteran_levels);
47579 if (!differ) {
47580 int i;
47581
47582 for (i = 0; i < real_packet->veteran_levels; i++) {
47583 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
47584 if (differ) {
47585 break;
47586 }
47587 }
47588 }
47589 if (differ) {
47590 BV_SET(fields, 30);
47591 }
47592
47593 differ = (old->veteran_levels != real_packet->veteran_levels);
47594 if (!differ) {
47595 int i;
47596
47597 for (i = 0; i < real_packet->veteran_levels; i++) {
47598 differ = (old->power_fact[i] != real_packet->power_fact[i]);
47599 if (differ) {
47600 break;
47601 }
47602 }
47603 }
47604 if (differ) {
47605 BV_SET(fields, 31);
47606 }
47607
47608 differ = (old->veteran_levels != real_packet->veteran_levels);
47609 if (!differ) {
47610 int i;
47611
47612 for (i = 0; i < real_packet->veteran_levels; i++) {
47613 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
47614 if (differ) {
47615 break;
47616 }
47617 }
47618 }
47619 if (differ) {
47620 BV_SET(fields, 32);
47621 }
47622
47623 differ = (old->veteran_levels != real_packet->veteran_levels);
47624 if (!differ) {
47625 int i;
47626
47627 for (i = 0; i < real_packet->veteran_levels; i++) {
47628 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
47629 if (differ) {
47630 break;
47631 }
47632 }
47633 }
47634 if (differ) {
47635 BV_SET(fields, 33);
47636 }
47637
47638 differ = (old->veteran_levels != real_packet->veteran_levels);
47639 if (!differ) {
47640 int i;
47641
47642 for (i = 0; i < real_packet->veteran_levels; i++) {
47643 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
47644 if (differ) {
47645 break;
47646 }
47647 }
47648 }
47649 if (differ) {
47650 BV_SET(fields, 34);
47651 }
47652
47653 differ = (old->bombard_rate != real_packet->bombard_rate);
47654 if (differ) {
47655 BV_SET(fields, 35);
47656 }
47657
47658 differ = (old->city_size != real_packet->city_size);
47659 if (differ) {
47660 BV_SET(fields, 36);
47661 }
47662
47663 differ = (old->city_slots != real_packet->city_slots);
47664 if (differ) {
47665 BV_SET(fields, 37);
47666 }
47667
47668 differ = (old->tp_defense != real_packet->tp_defense);
47669 if (differ) {
47670 BV_SET(fields, 38);
47671 }
47672
47673 differ = !BV_ARE_EQUAL(old->cargo, real_packet->cargo);
47674 if (differ) {
47675 BV_SET(fields, 39);
47676 }
47677
47678 differ = !BV_ARE_EQUAL(old->targets, real_packet->targets);
47679 if (differ) {
47680 BV_SET(fields, 40);
47681 }
47682
47683 differ = !BV_ARE_EQUAL(old->embarks, real_packet->embarks);
47684 if (differ) {
47685 BV_SET(fields, 41);
47686 }
47687
47688 differ = !BV_ARE_EQUAL(old->disembarks, real_packet->disembarks);
47689 if (differ) {
47690 BV_SET(fields, 42);
47691 }
47692
47693 differ = (old->vlayer != real_packet->vlayer);
47694 if (differ) {
47695 BV_SET(fields, 43);
47696 }
47697
47698 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
47699 if (differ) {
47700 BV_SET(fields, 44);
47701 }
47702
47703 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
47704 if (differ) {
47705 BV_SET(fields, 45);
47706 }
47707
47708 differ = !BV_ARE_EQUAL(old->roles, real_packet->roles);
47709 if (differ) {
47710 BV_SET(fields, 46);
47711 }
47712
47713 if (packet->worker) {
47714 BV_SET(fields, 47);
47715 }
47716
47717
47718#ifdef FREECIV_JSON_CONNECTION
47719 field_addr.name = "fields";
47720#endif /* FREECIV_JSON_CONNECTION */
47721 e = 0;
47722 e |= DIO_BV_PUT(&dout, &field_addr, fields);
47723 if (e) {
47724 log_packet_detailed("fields bitvector error detected");
47725 }
47726
47727 if (BV_ISSET(fields, 0)) {
47728 log_packet_detailed(" field 'id' has changed");
47729#ifdef FREECIV_JSON_CONNECTION
47730 field_addr.name = "id";
47731#endif /* FREECIV_JSON_CONNECTION */
47732 e = 0;
47733 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
47734 if (e) {
47735 log_packet_detailed("'id' field error detected");
47736 }
47737 }
47738 if (BV_ISSET(fields, 1)) {
47739 log_packet_detailed(" field 'name' has changed");
47740#ifdef FREECIV_JSON_CONNECTION
47741 field_addr.name = "name";
47742#endif /* FREECIV_JSON_CONNECTION */
47743 e = 0;
47744 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
47745 if (e) {
47746 log_packet_detailed("'name' field error detected");
47747 }
47748 }
47749 if (BV_ISSET(fields, 2)) {
47750 log_packet_detailed(" field 'rule_name' has changed");
47751#ifdef FREECIV_JSON_CONNECTION
47752 field_addr.name = "rule_name";
47753#endif /* FREECIV_JSON_CONNECTION */
47754 e = 0;
47755 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
47756 if (e) {
47757 log_packet_detailed("'rule_name' field error detected");
47758 }
47759 }
47760 if (BV_ISSET(fields, 3)) {
47761 log_packet_detailed(" field 'graphic_str' has changed");
47762#ifdef FREECIV_JSON_CONNECTION
47763 field_addr.name = "graphic_str";
47764#endif /* FREECIV_JSON_CONNECTION */
47765 e = 0;
47766 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
47767 if (e) {
47768 log_packet_detailed("'graphic_str' field error detected");
47769 }
47770 }
47771 if (BV_ISSET(fields, 4)) {
47772 log_packet_detailed(" field 'graphic_alt' has changed");
47773#ifdef FREECIV_JSON_CONNECTION
47774 field_addr.name = "graphic_alt";
47775#endif /* FREECIV_JSON_CONNECTION */
47776 e = 0;
47777 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
47778 if (e) {
47779 log_packet_detailed("'graphic_alt' field error detected");
47780 }
47781 }
47782 if (BV_ISSET(fields, 5)) {
47783 log_packet_detailed(" field 'graphic_alt2' has changed");
47784#ifdef FREECIV_JSON_CONNECTION
47785 field_addr.name = "graphic_alt2";
47786#endif /* FREECIV_JSON_CONNECTION */
47787 e = 0;
47788 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
47789 if (e) {
47790 log_packet_detailed("'graphic_alt2' field error detected");
47791 }
47792 }
47793 if (BV_ISSET(fields, 6)) {
47794 log_packet_detailed(" field 'sound_move' has changed");
47795#ifdef FREECIV_JSON_CONNECTION
47796 field_addr.name = "sound_move";
47797#endif /* FREECIV_JSON_CONNECTION */
47798 e = 0;
47799 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
47800 if (e) {
47801 log_packet_detailed("'sound_move' field error detected");
47802 }
47803 }
47804 if (BV_ISSET(fields, 7)) {
47805 log_packet_detailed(" field 'sound_move_alt' has changed");
47806#ifdef FREECIV_JSON_CONNECTION
47807 field_addr.name = "sound_move_alt";
47808#endif /* FREECIV_JSON_CONNECTION */
47809 e = 0;
47810 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
47811 if (e) {
47812 log_packet_detailed("'sound_move_alt' field error detected");
47813 }
47814 }
47815 if (BV_ISSET(fields, 8)) {
47816 log_packet_detailed(" field 'sound_fight' has changed");
47817#ifdef FREECIV_JSON_CONNECTION
47818 field_addr.name = "sound_fight";
47819#endif /* FREECIV_JSON_CONNECTION */
47820 e = 0;
47821 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
47822 if (e) {
47823 log_packet_detailed("'sound_fight' field error detected");
47824 }
47825 }
47826 if (BV_ISSET(fields, 9)) {
47827 log_packet_detailed(" field 'sound_fight_alt' has changed");
47828#ifdef FREECIV_JSON_CONNECTION
47829 field_addr.name = "sound_fight_alt";
47830#endif /* FREECIV_JSON_CONNECTION */
47831 e = 0;
47832 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
47833 if (e) {
47834 log_packet_detailed("'sound_fight_alt' field error detected");
47835 }
47836 }
47837 if (BV_ISSET(fields, 10)) {
47838 log_packet_detailed(" field 'unit_class_id' has changed");
47839#ifdef FREECIV_JSON_CONNECTION
47840 field_addr.name = "unit_class_id";
47841#endif /* FREECIV_JSON_CONNECTION */
47842 e = 0;
47843 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
47844 if (e) {
47845 log_packet_detailed("'unit_class_id' field error detected");
47846 }
47847 }
47848 if (BV_ISSET(fields, 11)) {
47849 log_packet_detailed(" field 'build_cost' has changed");
47850#ifdef FREECIV_JSON_CONNECTION
47851 field_addr.name = "build_cost";
47852#endif /* FREECIV_JSON_CONNECTION */
47853 e = 0;
47854 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
47855 if (e) {
47856 log_packet_detailed("'build_cost' field error detected");
47857 }
47858 }
47859 if (BV_ISSET(fields, 12)) {
47860 log_packet_detailed(" field 'pop_cost' has changed");
47861#ifdef FREECIV_JSON_CONNECTION
47862 field_addr.name = "pop_cost";
47863#endif /* FREECIV_JSON_CONNECTION */
47864 e = 0;
47865 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
47866 if (e) {
47867 log_packet_detailed("'pop_cost' field error detected");
47868 }
47869 }
47870 if (BV_ISSET(fields, 13)) {
47871 log_packet_detailed(" field 'attack_strength' has changed");
47872#ifdef FREECIV_JSON_CONNECTION
47873 field_addr.name = "attack_strength";
47874#endif /* FREECIV_JSON_CONNECTION */
47875 e = 0;
47876 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
47877 if (e) {
47878 log_packet_detailed("'attack_strength' field error detected");
47879 }
47880 }
47881 if (BV_ISSET(fields, 14)) {
47882 log_packet_detailed(" field 'defense_strength' has changed");
47883#ifdef FREECIV_JSON_CONNECTION
47884 field_addr.name = "defense_strength";
47885#endif /* FREECIV_JSON_CONNECTION */
47886 e = 0;
47887 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
47888 if (e) {
47889 log_packet_detailed("'defense_strength' field error detected");
47890 }
47891 }
47892 if (BV_ISSET(fields, 15)) {
47893 log_packet_detailed(" field 'move_rate' has changed");
47894#ifdef FREECIV_JSON_CONNECTION
47895 field_addr.name = "move_rate";
47896#endif /* FREECIV_JSON_CONNECTION */
47897 e = 0;
47898 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
47899 if (e) {
47900 log_packet_detailed("'move_rate' field error detected");
47901 }
47902 }
47903 if (BV_ISSET(fields, 16)) {
47904 log_packet_detailed(" field 'build_reqs_count' has changed");
47905#ifdef FREECIV_JSON_CONNECTION
47906 field_addr.name = "build_reqs_count";
47907#endif /* FREECIV_JSON_CONNECTION */
47908 e = 0;
47909 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_reqs_count);
47910 if (e) {
47911 log_packet_detailed("'build_reqs_count' field error detected");
47912 }
47913 }
47914 if (BV_ISSET(fields, 17)) {
47915 log_packet_detailed(" field 'build_reqs' has changed");
47916#ifdef FREECIV_JSON_CONNECTION
47917 field_addr.name = "build_reqs";
47918#endif /* FREECIV_JSON_CONNECTION */
47919 e = 0;
47920 {
47921 int i;
47922
47923#ifdef FREECIV_JSON_CONNECTION
47924 /* Create the array. */
47925 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->build_reqs_count);
47926
47927 /* Enter the array. */
47928 field_addr.sub_location = plocation_elem_new(0);
47929#endif /* FREECIV_JSON_CONNECTION */
47930
47931 for (i = 0; i < real_packet->build_reqs_count; i++) {
47932#ifdef FREECIV_JSON_CONNECTION
47933 /* Next array element. */
47934 field_addr.sub_location->number = i;
47935#endif /* FREECIV_JSON_CONNECTION */
47936
47937 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs[i]);
47938 }
47939
47940#ifdef FREECIV_JSON_CONNECTION
47941 /* Exit array. */
47942 FC_FREE(field_addr.sub_location);
47943#endif /* FREECIV_JSON_CONNECTION */
47944 }
47945 if (e) {
47946 log_packet_detailed("'build_reqs' field error detected");
47947 }
47948 }
47949 if (BV_ISSET(fields, 18)) {
47950 log_packet_detailed(" field 'vision_radius_sq' has changed");
47951#ifdef FREECIV_JSON_CONNECTION
47952 field_addr.name = "vision_radius_sq";
47953#endif /* FREECIV_JSON_CONNECTION */
47954 e = 0;
47955 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
47956 if (e) {
47957 log_packet_detailed("'vision_radius_sq' field error detected");
47958 }
47959 }
47960 if (BV_ISSET(fields, 19)) {
47961 log_packet_detailed(" field 'transport_capacity' has changed");
47962#ifdef FREECIV_JSON_CONNECTION
47963 field_addr.name = "transport_capacity";
47964#endif /* FREECIV_JSON_CONNECTION */
47965 e = 0;
47966 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
47967 if (e) {
47968 log_packet_detailed("'transport_capacity' field error detected");
47969 }
47970 }
47971 if (BV_ISSET(fields, 20)) {
47972 log_packet_detailed(" field 'hp' has changed");
47973#ifdef FREECIV_JSON_CONNECTION
47974 field_addr.name = "hp";
47975#endif /* FREECIV_JSON_CONNECTION */
47976 e = 0;
47977 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
47978 if (e) {
47979 log_packet_detailed("'hp' field error detected");
47980 }
47981 }
47982 if (BV_ISSET(fields, 21)) {
47983 log_packet_detailed(" field 'firepower' has changed");
47984#ifdef FREECIV_JSON_CONNECTION
47985 field_addr.name = "firepower";
47986#endif /* FREECIV_JSON_CONNECTION */
47987 e = 0;
47988 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
47989 if (e) {
47990 log_packet_detailed("'firepower' field error detected");
47991 }
47992 }
47993 if (BV_ISSET(fields, 22)) {
47994 log_packet_detailed(" field 'obsoleted_by' has changed");
47995#ifdef FREECIV_JSON_CONNECTION
47996 field_addr.name = "obsoleted_by";
47997#endif /* FREECIV_JSON_CONNECTION */
47998 e = 0;
47999 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
48000 if (e) {
48001 log_packet_detailed("'obsoleted_by' field error detected");
48002 }
48003 }
48004 if (BV_ISSET(fields, 23)) {
48005 log_packet_detailed(" field 'converted_to' has changed");
48006#ifdef FREECIV_JSON_CONNECTION
48007 field_addr.name = "converted_to";
48008#endif /* FREECIV_JSON_CONNECTION */
48009 e = 0;
48010 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
48011 if (e) {
48012 log_packet_detailed("'converted_to' field error detected");
48013 }
48014 }
48015 if (BV_ISSET(fields, 24)) {
48016 log_packet_detailed(" field 'convert_time' has changed");
48017#ifdef FREECIV_JSON_CONNECTION
48018 field_addr.name = "convert_time";
48019#endif /* FREECIV_JSON_CONNECTION */
48020 e = 0;
48021 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
48022 if (e) {
48023 log_packet_detailed("'convert_time' field error detected");
48024 }
48025 }
48026 if (BV_ISSET(fields, 25)) {
48027 log_packet_detailed(" field 'fuel' has changed");
48028#ifdef FREECIV_JSON_CONNECTION
48029 field_addr.name = "fuel";
48030#endif /* FREECIV_JSON_CONNECTION */
48031 e = 0;
48032 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
48033 if (e) {
48034 log_packet_detailed("'fuel' field error detected");
48035 }
48036 }
48037 if (BV_ISSET(fields, 26)) {
48038 log_packet_detailed(" field 'happy_cost' has changed");
48039#ifdef FREECIV_JSON_CONNECTION
48040 field_addr.name = "happy_cost";
48041#endif /* FREECIV_JSON_CONNECTION */
48042 e = 0;
48043 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
48044 if (e) {
48045 log_packet_detailed("'happy_cost' field error detected");
48046 }
48047 }
48048 if (BV_ISSET(fields, 27)) {
48049 log_packet_detailed(" field 'upkeep' has changed");
48050#ifdef FREECIV_JSON_CONNECTION
48051 field_addr.name = "upkeep";
48052#endif /* FREECIV_JSON_CONNECTION */
48053 e = 0;
48054 {
48055 int i;
48056
48057#ifdef FREECIV_JSON_CONNECTION
48058 /* Create the array. */
48059 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
48060
48061 /* Enter the array. */
48062 field_addr.sub_location = plocation_elem_new(0);
48063#endif /* FREECIV_JSON_CONNECTION */
48064
48065 for (i = 0; i < O_LAST; i++) {
48066#ifdef FREECIV_JSON_CONNECTION
48067 /* Next array element. */
48068 field_addr.sub_location->number = i;
48069#endif /* FREECIV_JSON_CONNECTION */
48070
48071 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
48072 }
48073
48074#ifdef FREECIV_JSON_CONNECTION
48075 /* Exit array. */
48076 FC_FREE(field_addr.sub_location);
48077#endif /* FREECIV_JSON_CONNECTION */
48078 }
48079 if (e) {
48080 log_packet_detailed("'upkeep' field error detected");
48081 }
48082 }
48083 if (BV_ISSET(fields, 28)) {
48084 log_packet_detailed(" field 'paratroopers_range' has changed");
48085#ifdef FREECIV_JSON_CONNECTION
48086 field_addr.name = "paratroopers_range";
48087#endif /* FREECIV_JSON_CONNECTION */
48088 e = 0;
48089 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
48090 if (e) {
48091 log_packet_detailed("'paratroopers_range' field error detected");
48092 }
48093 }
48094 if (BV_ISSET(fields, 29)) {
48095 log_packet_detailed(" field 'veteran_levels' has changed");
48096#ifdef FREECIV_JSON_CONNECTION
48097 field_addr.name = "veteran_levels";
48098#endif /* FREECIV_JSON_CONNECTION */
48099 e = 0;
48100 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
48101 if (e) {
48102 log_packet_detailed("'veteran_levels' field error detected");
48103 }
48104 }
48105 if (BV_ISSET(fields, 30)) {
48106 log_packet_detailed(" field 'veteran_name' has changed");
48107#ifdef FREECIV_JSON_CONNECTION
48108 field_addr.name = "veteran_name";
48109#endif /* FREECIV_JSON_CONNECTION */
48110 e = 0;
48111 {
48112 int i;
48113
48114#ifdef FREECIV_JSON_CONNECTION
48115 /* Create the array. */
48116 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48117
48118 /* Enter the array. */
48119 field_addr.sub_location = plocation_elem_new(0);
48120#endif /* FREECIV_JSON_CONNECTION */
48121
48122 for (i = 0; i < real_packet->veteran_levels; i++) {
48123#ifdef FREECIV_JSON_CONNECTION
48124 /* Next array element. */
48125 field_addr.sub_location->number = i;
48126#endif /* FREECIV_JSON_CONNECTION */
48127
48128 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
48129 }
48130
48131#ifdef FREECIV_JSON_CONNECTION
48132 /* Exit array. */
48133 FC_FREE(field_addr.sub_location);
48134#endif /* FREECIV_JSON_CONNECTION */
48135 }
48136 if (e) {
48137 log_packet_detailed("'veteran_name' field error detected");
48138 }
48139 }
48140 if (BV_ISSET(fields, 31)) {
48141 log_packet_detailed(" field 'power_fact' has changed");
48142#ifdef FREECIV_JSON_CONNECTION
48143 field_addr.name = "power_fact";
48144#endif /* FREECIV_JSON_CONNECTION */
48145 e = 0;
48146 {
48147 int i;
48148
48149#ifdef FREECIV_JSON_CONNECTION
48150 /* Create the array. */
48151 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48152
48153 /* Enter the array. */
48154 field_addr.sub_location = plocation_elem_new(0);
48155#endif /* FREECIV_JSON_CONNECTION */
48156
48157 for (i = 0; i < real_packet->veteran_levels; i++) {
48158#ifdef FREECIV_JSON_CONNECTION
48159 /* Next array element. */
48160 field_addr.sub_location->number = i;
48161#endif /* FREECIV_JSON_CONNECTION */
48162
48163 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
48164 }
48165
48166#ifdef FREECIV_JSON_CONNECTION
48167 /* Exit array. */
48168 FC_FREE(field_addr.sub_location);
48169#endif /* FREECIV_JSON_CONNECTION */
48170 }
48171 if (e) {
48172 log_packet_detailed("'power_fact' field error detected");
48173 }
48174 }
48175 if (BV_ISSET(fields, 32)) {
48176 log_packet_detailed(" field 'move_bonus' has changed");
48177#ifdef FREECIV_JSON_CONNECTION
48178 field_addr.name = "move_bonus";
48179#endif /* FREECIV_JSON_CONNECTION */
48180 e = 0;
48181 {
48182 int i;
48183
48184#ifdef FREECIV_JSON_CONNECTION
48185 /* Create the array. */
48186 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48187
48188 /* Enter the array. */
48189 field_addr.sub_location = plocation_elem_new(0);
48190#endif /* FREECIV_JSON_CONNECTION */
48191
48192 for (i = 0; i < real_packet->veteran_levels; i++) {
48193#ifdef FREECIV_JSON_CONNECTION
48194 /* Next array element. */
48195 field_addr.sub_location->number = i;
48196#endif /* FREECIV_JSON_CONNECTION */
48197
48198 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
48199 }
48200
48201#ifdef FREECIV_JSON_CONNECTION
48202 /* Exit array. */
48203 FC_FREE(field_addr.sub_location);
48204#endif /* FREECIV_JSON_CONNECTION */
48205 }
48206 if (e) {
48207 log_packet_detailed("'move_bonus' field error detected");
48208 }
48209 }
48210 if (BV_ISSET(fields, 33)) {
48211 log_packet_detailed(" field 'base_raise_chance' has changed");
48212#ifdef FREECIV_JSON_CONNECTION
48213 field_addr.name = "base_raise_chance";
48214#endif /* FREECIV_JSON_CONNECTION */
48215 e = 0;
48216 {
48217 int i;
48218
48219#ifdef FREECIV_JSON_CONNECTION
48220 /* Create the array. */
48221 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48222
48223 /* Enter the array. */
48224 field_addr.sub_location = plocation_elem_new(0);
48225#endif /* FREECIV_JSON_CONNECTION */
48226
48227 for (i = 0; i < real_packet->veteran_levels; i++) {
48228#ifdef FREECIV_JSON_CONNECTION
48229 /* Next array element. */
48230 field_addr.sub_location->number = i;
48231#endif /* FREECIV_JSON_CONNECTION */
48232
48233 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
48234 }
48235
48236#ifdef FREECIV_JSON_CONNECTION
48237 /* Exit array. */
48238 FC_FREE(field_addr.sub_location);
48239#endif /* FREECIV_JSON_CONNECTION */
48240 }
48241 if (e) {
48242 log_packet_detailed("'base_raise_chance' field error detected");
48243 }
48244 }
48245 if (BV_ISSET(fields, 34)) {
48246 log_packet_detailed(" field 'work_raise_chance' has changed");
48247#ifdef FREECIV_JSON_CONNECTION
48248 field_addr.name = "work_raise_chance";
48249#endif /* FREECIV_JSON_CONNECTION */
48250 e = 0;
48251 {
48252 int i;
48253
48254#ifdef FREECIV_JSON_CONNECTION
48255 /* Create the array. */
48256 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48257
48258 /* Enter the array. */
48259 field_addr.sub_location = plocation_elem_new(0);
48260#endif /* FREECIV_JSON_CONNECTION */
48261
48262 for (i = 0; i < real_packet->veteran_levels; i++) {
48263#ifdef FREECIV_JSON_CONNECTION
48264 /* Next array element. */
48265 field_addr.sub_location->number = i;
48266#endif /* FREECIV_JSON_CONNECTION */
48267
48268 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
48269 }
48270
48271#ifdef FREECIV_JSON_CONNECTION
48272 /* Exit array. */
48273 FC_FREE(field_addr.sub_location);
48274#endif /* FREECIV_JSON_CONNECTION */
48275 }
48276 if (e) {
48277 log_packet_detailed("'work_raise_chance' field error detected");
48278 }
48279 }
48280 if (BV_ISSET(fields, 35)) {
48281 log_packet_detailed(" field 'bombard_rate' has changed");
48282#ifdef FREECIV_JSON_CONNECTION
48283 field_addr.name = "bombard_rate";
48284#endif /* FREECIV_JSON_CONNECTION */
48285 e = 0;
48286 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
48287 if (e) {
48288 log_packet_detailed("'bombard_rate' field error detected");
48289 }
48290 }
48291 if (BV_ISSET(fields, 36)) {
48292 log_packet_detailed(" field 'city_size' has changed");
48293#ifdef FREECIV_JSON_CONNECTION
48294 field_addr.name = "city_size";
48295#endif /* FREECIV_JSON_CONNECTION */
48296 e = 0;
48297 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
48298 if (e) {
48299 log_packet_detailed("'city_size' field error detected");
48300 }
48301 }
48302 if (BV_ISSET(fields, 37)) {
48303 log_packet_detailed(" field 'city_slots' has changed");
48304#ifdef FREECIV_JSON_CONNECTION
48305 field_addr.name = "city_slots";
48306#endif /* FREECIV_JSON_CONNECTION */
48307 e = 0;
48308 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
48309 if (e) {
48310 log_packet_detailed("'city_slots' field error detected");
48311 }
48312 }
48313 if (BV_ISSET(fields, 38)) {
48314 log_packet_detailed(" field 'tp_defense' has changed");
48315#ifdef FREECIV_JSON_CONNECTION
48316 field_addr.name = "tp_defense";
48317#endif /* FREECIV_JSON_CONNECTION */
48318 e = 0;
48319 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
48320 if (e) {
48321 log_packet_detailed("'tp_defense' field error detected");
48322 }
48323 }
48324 if (BV_ISSET(fields, 39)) {
48325 log_packet_detailed(" field 'cargo' has changed");
48326#ifdef FREECIV_JSON_CONNECTION
48327 field_addr.name = "cargo";
48328#endif /* FREECIV_JSON_CONNECTION */
48329 e = 0;
48330 e |= DIO_BV_PUT(&dout, &field_addr, packet->cargo);
48331 if (e) {
48332 log_packet_detailed("'cargo' field error detected");
48333 }
48334 }
48335 if (BV_ISSET(fields, 40)) {
48336 log_packet_detailed(" field 'targets' has changed");
48337#ifdef FREECIV_JSON_CONNECTION
48338 field_addr.name = "targets";
48339#endif /* FREECIV_JSON_CONNECTION */
48340 e = 0;
48341 e |= DIO_BV_PUT(&dout, &field_addr, packet->targets);
48342 if (e) {
48343 log_packet_detailed("'targets' field error detected");
48344 }
48345 }
48346 if (BV_ISSET(fields, 41)) {
48347 log_packet_detailed(" field 'embarks' has changed");
48348#ifdef FREECIV_JSON_CONNECTION
48349 field_addr.name = "embarks";
48350#endif /* FREECIV_JSON_CONNECTION */
48351 e = 0;
48352 e |= DIO_BV_PUT(&dout, &field_addr, packet->embarks);
48353 if (e) {
48354 log_packet_detailed("'embarks' field error detected");
48355 }
48356 }
48357 if (BV_ISSET(fields, 42)) {
48358 log_packet_detailed(" field 'disembarks' has changed");
48359#ifdef FREECIV_JSON_CONNECTION
48360 field_addr.name = "disembarks";
48361#endif /* FREECIV_JSON_CONNECTION */
48362 e = 0;
48363 e |= DIO_BV_PUT(&dout, &field_addr, packet->disembarks);
48364 if (e) {
48365 log_packet_detailed("'disembarks' field error detected");
48366 }
48367 }
48368 if (BV_ISSET(fields, 43)) {
48369 log_packet_detailed(" field 'vlayer' has changed");
48370#ifdef FREECIV_JSON_CONNECTION
48371 field_addr.name = "vlayer";
48372#endif /* FREECIV_JSON_CONNECTION */
48373 e = 0;
48374 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
48375 if (e) {
48376 log_packet_detailed("'vlayer' field error detected");
48377 }
48378 }
48379 if (BV_ISSET(fields, 44)) {
48380 log_packet_detailed(" field 'helptext' has changed");
48381#ifdef FREECIV_JSON_CONNECTION
48382 field_addr.name = "helptext";
48383#endif /* FREECIV_JSON_CONNECTION */
48384 e = 0;
48385 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
48386 if (e) {
48387 log_packet_detailed("'helptext' field error detected");
48388 }
48389 }
48390 if (BV_ISSET(fields, 45)) {
48391 log_packet_detailed(" field 'flags' has changed");
48392#ifdef FREECIV_JSON_CONNECTION
48393 field_addr.name = "flags";
48394#endif /* FREECIV_JSON_CONNECTION */
48395 e = 0;
48396 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
48397 if (e) {
48398 log_packet_detailed("'flags' field error detected");
48399 }
48400 }
48401 if (BV_ISSET(fields, 46)) {
48402 log_packet_detailed(" field 'roles' has changed");
48403#ifdef FREECIV_JSON_CONNECTION
48404 field_addr.name = "roles";
48405#endif /* FREECIV_JSON_CONNECTION */
48406 e = 0;
48407 e |= DIO_BV_PUT(&dout, &field_addr, packet->roles);
48408 if (e) {
48409 log_packet_detailed("'roles' field error detected");
48410 }
48411 }
48412 /* field 47 is folded into the header */
48413
48414 *old = *real_packet;
48415#endif /* FREECIV_DELTA_PROTOCOL */
48416#ifndef FREECIV_DELTA_PROTOCOL
48417#ifdef FREECIV_JSON_CONNECTION
48418 field_addr.name = "id";
48419#endif /* FREECIV_JSON_CONNECTION */
48420 e = 0;
48421 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
48422 if (e) {
48423 log_packet_detailed("'id' field error detected");
48424 }
48425#ifdef FREECIV_JSON_CONNECTION
48426 field_addr.name = "name";
48427#endif /* FREECIV_JSON_CONNECTION */
48428 e = 0;
48429 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
48430 if (e) {
48431 log_packet_detailed("'name' field error detected");
48432 }
48433#ifdef FREECIV_JSON_CONNECTION
48434 field_addr.name = "rule_name";
48435#endif /* FREECIV_JSON_CONNECTION */
48436 e = 0;
48437 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
48438 if (e) {
48439 log_packet_detailed("'rule_name' field error detected");
48440 }
48441#ifdef FREECIV_JSON_CONNECTION
48442 field_addr.name = "graphic_str";
48443#endif /* FREECIV_JSON_CONNECTION */
48444 e = 0;
48445 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
48446 if (e) {
48447 log_packet_detailed("'graphic_str' field error detected");
48448 }
48449#ifdef FREECIV_JSON_CONNECTION
48450 field_addr.name = "graphic_alt";
48451#endif /* FREECIV_JSON_CONNECTION */
48452 e = 0;
48453 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
48454 if (e) {
48455 log_packet_detailed("'graphic_alt' field error detected");
48456 }
48457#ifdef FREECIV_JSON_CONNECTION
48458 field_addr.name = "graphic_alt2";
48459#endif /* FREECIV_JSON_CONNECTION */
48460 e = 0;
48461 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
48462 if (e) {
48463 log_packet_detailed("'graphic_alt2' field error detected");
48464 }
48465#ifdef FREECIV_JSON_CONNECTION
48466 field_addr.name = "sound_move";
48467#endif /* FREECIV_JSON_CONNECTION */
48468 e = 0;
48469 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move);
48470 if (e) {
48471 log_packet_detailed("'sound_move' field error detected");
48472 }
48473#ifdef FREECIV_JSON_CONNECTION
48474 field_addr.name = "sound_move_alt";
48475#endif /* FREECIV_JSON_CONNECTION */
48476 e = 0;
48477 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_move_alt);
48478 if (e) {
48479 log_packet_detailed("'sound_move_alt' field error detected");
48480 }
48481#ifdef FREECIV_JSON_CONNECTION
48482 field_addr.name = "sound_fight";
48483#endif /* FREECIV_JSON_CONNECTION */
48484 e = 0;
48485 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight);
48486 if (e) {
48487 log_packet_detailed("'sound_fight' field error detected");
48488 }
48489#ifdef FREECIV_JSON_CONNECTION
48490 field_addr.name = "sound_fight_alt";
48491#endif /* FREECIV_JSON_CONNECTION */
48492 e = 0;
48493 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_fight_alt);
48494 if (e) {
48495 log_packet_detailed("'sound_fight_alt' field error detected");
48496 }
48497#ifdef FREECIV_JSON_CONNECTION
48498 field_addr.name = "unit_class_id";
48499#endif /* FREECIV_JSON_CONNECTION */
48500 e = 0;
48501 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->unit_class_id);
48502 if (e) {
48503 log_packet_detailed("'unit_class_id' field error detected");
48504 }
48505#ifdef FREECIV_JSON_CONNECTION
48506 field_addr.name = "build_cost";
48507#endif /* FREECIV_JSON_CONNECTION */
48508 e = 0;
48509 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
48510 if (e) {
48511 log_packet_detailed("'build_cost' field error detected");
48512 }
48513#ifdef FREECIV_JSON_CONNECTION
48514 field_addr.name = "pop_cost";
48515#endif /* FREECIV_JSON_CONNECTION */
48516 e = 0;
48517 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pop_cost);
48518 if (e) {
48519 log_packet_detailed("'pop_cost' field error detected");
48520 }
48521#ifdef FREECIV_JSON_CONNECTION
48522 field_addr.name = "attack_strength";
48523#endif /* FREECIV_JSON_CONNECTION */
48524 e = 0;
48525 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->attack_strength);
48526 if (e) {
48527 log_packet_detailed("'attack_strength' field error detected");
48528 }
48529#ifdef FREECIV_JSON_CONNECTION
48530 field_addr.name = "defense_strength";
48531#endif /* FREECIV_JSON_CONNECTION */
48532 e = 0;
48533 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_strength);
48534 if (e) {
48535 log_packet_detailed("'defense_strength' field error detected");
48536 }
48537#ifdef FREECIV_JSON_CONNECTION
48538 field_addr.name = "move_rate";
48539#endif /* FREECIV_JSON_CONNECTION */
48540 e = 0;
48541 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_rate);
48542 if (e) {
48543 log_packet_detailed("'move_rate' field error detected");
48544 }
48545#ifdef FREECIV_JSON_CONNECTION
48546 field_addr.name = "build_reqs_count";
48547#endif /* FREECIV_JSON_CONNECTION */
48548 e = 0;
48549 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_reqs_count);
48550 if (e) {
48551 log_packet_detailed("'build_reqs_count' field error detected");
48552 }
48553#ifdef FREECIV_JSON_CONNECTION
48554 field_addr.name = "build_reqs";
48555#endif /* FREECIV_JSON_CONNECTION */
48556 e = 0;
48557 {
48558 int i;
48559
48560#ifdef FREECIV_JSON_CONNECTION
48561 /* Create the array. */
48562 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->build_reqs_count);
48563
48564 /* Enter the array. */
48565 field_addr.sub_location = plocation_elem_new(0);
48566#endif /* FREECIV_JSON_CONNECTION */
48567
48568 for (i = 0; i < real_packet->build_reqs_count; i++) {
48569#ifdef FREECIV_JSON_CONNECTION
48570 /* Next array element. */
48571 field_addr.sub_location->number = i;
48572#endif /* FREECIV_JSON_CONNECTION */
48573
48574 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->build_reqs[i]);
48575 }
48576
48577#ifdef FREECIV_JSON_CONNECTION
48578 /* Exit array. */
48579 FC_FREE(field_addr.sub_location);
48580#endif /* FREECIV_JSON_CONNECTION */
48581 }
48582 if (e) {
48583 log_packet_detailed("'build_reqs' field error detected");
48584 }
48585#ifdef FREECIV_JSON_CONNECTION
48586 field_addr.name = "vision_radius_sq";
48587#endif /* FREECIV_JSON_CONNECTION */
48588 e = 0;
48589 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->vision_radius_sq);
48590 if (e) {
48591 log_packet_detailed("'vision_radius_sq' field error detected");
48592 }
48593#ifdef FREECIV_JSON_CONNECTION
48594 field_addr.name = "transport_capacity";
48595#endif /* FREECIV_JSON_CONNECTION */
48596 e = 0;
48597 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transport_capacity);
48598 if (e) {
48599 log_packet_detailed("'transport_capacity' field error detected");
48600 }
48601#ifdef FREECIV_JSON_CONNECTION
48602 field_addr.name = "hp";
48603#endif /* FREECIV_JSON_CONNECTION */
48604 e = 0;
48605 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
48606 if (e) {
48607 log_packet_detailed("'hp' field error detected");
48608 }
48609#ifdef FREECIV_JSON_CONNECTION
48610 field_addr.name = "firepower";
48611#endif /* FREECIV_JSON_CONNECTION */
48612 e = 0;
48613 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->firepower);
48614 if (e) {
48615 log_packet_detailed("'firepower' field error detected");
48616 }
48617#ifdef FREECIV_JSON_CONNECTION
48618 field_addr.name = "obsoleted_by";
48619#endif /* FREECIV_JSON_CONNECTION */
48620 e = 0;
48621 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obsoleted_by);
48622 if (e) {
48623 log_packet_detailed("'obsoleted_by' field error detected");
48624 }
48625#ifdef FREECIV_JSON_CONNECTION
48626 field_addr.name = "converted_to";
48627#endif /* FREECIV_JSON_CONNECTION */
48628 e = 0;
48629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->converted_to);
48630 if (e) {
48631 log_packet_detailed("'converted_to' field error detected");
48632 }
48633#ifdef FREECIV_JSON_CONNECTION
48634 field_addr.name = "convert_time";
48635#endif /* FREECIV_JSON_CONNECTION */
48636 e = 0;
48637 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->convert_time);
48638 if (e) {
48639 log_packet_detailed("'convert_time' field error detected");
48640 }
48641#ifdef FREECIV_JSON_CONNECTION
48642 field_addr.name = "fuel";
48643#endif /* FREECIV_JSON_CONNECTION */
48644 e = 0;
48645 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
48646 if (e) {
48647 log_packet_detailed("'fuel' field error detected");
48648 }
48649#ifdef FREECIV_JSON_CONNECTION
48650 field_addr.name = "happy_cost";
48651#endif /* FREECIV_JSON_CONNECTION */
48652 e = 0;
48653 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->happy_cost);
48654 if (e) {
48655 log_packet_detailed("'happy_cost' field error detected");
48656 }
48657#ifdef FREECIV_JSON_CONNECTION
48658 field_addr.name = "upkeep";
48659#endif /* FREECIV_JSON_CONNECTION */
48660 e = 0;
48661 {
48662 int i;
48663
48664#ifdef FREECIV_JSON_CONNECTION
48665 /* Create the array. */
48666 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
48667
48668 /* Enter the array. */
48669 field_addr.sub_location = plocation_elem_new(0);
48670#endif /* FREECIV_JSON_CONNECTION */
48671
48672 for (i = 0; i < O_LAST; i++) {
48673#ifdef FREECIV_JSON_CONNECTION
48674 /* Next array element. */
48675 field_addr.sub_location->number = i;
48676#endif /* FREECIV_JSON_CONNECTION */
48677
48678 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep[i]);
48679 }
48680
48681#ifdef FREECIV_JSON_CONNECTION
48682 /* Exit array. */
48683 FC_FREE(field_addr.sub_location);
48684#endif /* FREECIV_JSON_CONNECTION */
48685 }
48686 if (e) {
48687 log_packet_detailed("'upkeep' field error detected");
48688 }
48689#ifdef FREECIV_JSON_CONNECTION
48690 field_addr.name = "paratroopers_range";
48691#endif /* FREECIV_JSON_CONNECTION */
48692 e = 0;
48693 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->paratroopers_range);
48694 if (e) {
48695 log_packet_detailed("'paratroopers_range' field error detected");
48696 }
48697#ifdef FREECIV_JSON_CONNECTION
48698 field_addr.name = "veteran_levels";
48699#endif /* FREECIV_JSON_CONNECTION */
48700 e = 0;
48701 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
48702 if (e) {
48703 log_packet_detailed("'veteran_levels' field error detected");
48704 }
48705#ifdef FREECIV_JSON_CONNECTION
48706 field_addr.name = "veteran_name";
48707#endif /* FREECIV_JSON_CONNECTION */
48708 e = 0;
48709 {
48710 int i;
48711
48712#ifdef FREECIV_JSON_CONNECTION
48713 /* Create the array. */
48714 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48715
48716 /* Enter the array. */
48717 field_addr.sub_location = plocation_elem_new(0);
48718#endif /* FREECIV_JSON_CONNECTION */
48719
48720 for (i = 0; i < real_packet->veteran_levels; i++) {
48721#ifdef FREECIV_JSON_CONNECTION
48722 /* Next array element. */
48723 field_addr.sub_location->number = i;
48724#endif /* FREECIV_JSON_CONNECTION */
48725
48726 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
48727 }
48728
48729#ifdef FREECIV_JSON_CONNECTION
48730 /* Exit array. */
48731 FC_FREE(field_addr.sub_location);
48732#endif /* FREECIV_JSON_CONNECTION */
48733 }
48734 if (e) {
48735 log_packet_detailed("'veteran_name' field error detected");
48736 }
48737#ifdef FREECIV_JSON_CONNECTION
48738 field_addr.name = "power_fact";
48739#endif /* FREECIV_JSON_CONNECTION */
48740 e = 0;
48741 {
48742 int i;
48743
48744#ifdef FREECIV_JSON_CONNECTION
48745 /* Create the array. */
48746 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48747
48748 /* Enter the array. */
48749 field_addr.sub_location = plocation_elem_new(0);
48750#endif /* FREECIV_JSON_CONNECTION */
48751
48752 for (i = 0; i < real_packet->veteran_levels; i++) {
48753#ifdef FREECIV_JSON_CONNECTION
48754 /* Next array element. */
48755 field_addr.sub_location->number = i;
48756#endif /* FREECIV_JSON_CONNECTION */
48757
48758 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
48759 }
48760
48761#ifdef FREECIV_JSON_CONNECTION
48762 /* Exit array. */
48763 FC_FREE(field_addr.sub_location);
48764#endif /* FREECIV_JSON_CONNECTION */
48765 }
48766 if (e) {
48767 log_packet_detailed("'power_fact' field error detected");
48768 }
48769#ifdef FREECIV_JSON_CONNECTION
48770 field_addr.name = "move_bonus";
48771#endif /* FREECIV_JSON_CONNECTION */
48772 e = 0;
48773 {
48774 int i;
48775
48776#ifdef FREECIV_JSON_CONNECTION
48777 /* Create the array. */
48778 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48779
48780 /* Enter the array. */
48781 field_addr.sub_location = plocation_elem_new(0);
48782#endif /* FREECIV_JSON_CONNECTION */
48783
48784 for (i = 0; i < real_packet->veteran_levels; i++) {
48785#ifdef FREECIV_JSON_CONNECTION
48786 /* Next array element. */
48787 field_addr.sub_location->number = i;
48788#endif /* FREECIV_JSON_CONNECTION */
48789
48790 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
48791 }
48792
48793#ifdef FREECIV_JSON_CONNECTION
48794 /* Exit array. */
48795 FC_FREE(field_addr.sub_location);
48796#endif /* FREECIV_JSON_CONNECTION */
48797 }
48798 if (e) {
48799 log_packet_detailed("'move_bonus' field error detected");
48800 }
48801#ifdef FREECIV_JSON_CONNECTION
48802 field_addr.name = "base_raise_chance";
48803#endif /* FREECIV_JSON_CONNECTION */
48804 e = 0;
48805 {
48806 int i;
48807
48808#ifdef FREECIV_JSON_CONNECTION
48809 /* Create the array. */
48810 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48811
48812 /* Enter the array. */
48813 field_addr.sub_location = plocation_elem_new(0);
48814#endif /* FREECIV_JSON_CONNECTION */
48815
48816 for (i = 0; i < real_packet->veteran_levels; i++) {
48817#ifdef FREECIV_JSON_CONNECTION
48818 /* Next array element. */
48819 field_addr.sub_location->number = i;
48820#endif /* FREECIV_JSON_CONNECTION */
48821
48822 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
48823 }
48824
48825#ifdef FREECIV_JSON_CONNECTION
48826 /* Exit array. */
48827 FC_FREE(field_addr.sub_location);
48828#endif /* FREECIV_JSON_CONNECTION */
48829 }
48830 if (e) {
48831 log_packet_detailed("'base_raise_chance' field error detected");
48832 }
48833#ifdef FREECIV_JSON_CONNECTION
48834 field_addr.name = "work_raise_chance";
48835#endif /* FREECIV_JSON_CONNECTION */
48836 e = 0;
48837 {
48838 int i;
48839
48840#ifdef FREECIV_JSON_CONNECTION
48841 /* Create the array. */
48842 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
48843
48844 /* Enter the array. */
48845 field_addr.sub_location = plocation_elem_new(0);
48846#endif /* FREECIV_JSON_CONNECTION */
48847
48848 for (i = 0; i < real_packet->veteran_levels; i++) {
48849#ifdef FREECIV_JSON_CONNECTION
48850 /* Next array element. */
48851 field_addr.sub_location->number = i;
48852#endif /* FREECIV_JSON_CONNECTION */
48853
48854 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
48855 }
48856
48857#ifdef FREECIV_JSON_CONNECTION
48858 /* Exit array. */
48859 FC_FREE(field_addr.sub_location);
48860#endif /* FREECIV_JSON_CONNECTION */
48861 }
48862 if (e) {
48863 log_packet_detailed("'work_raise_chance' field error detected");
48864 }
48865#ifdef FREECIV_JSON_CONNECTION
48866 field_addr.name = "bombard_rate";
48867#endif /* FREECIV_JSON_CONNECTION */
48868 e = 0;
48869 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bombard_rate);
48870 if (e) {
48871 log_packet_detailed("'bombard_rate' field error detected");
48872 }
48873#ifdef FREECIV_JSON_CONNECTION
48874 field_addr.name = "city_size";
48875#endif /* FREECIV_JSON_CONNECTION */
48876 e = 0;
48877 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_size);
48878 if (e) {
48879 log_packet_detailed("'city_size' field error detected");
48880 }
48881#ifdef FREECIV_JSON_CONNECTION
48882 field_addr.name = "city_slots";
48883#endif /* FREECIV_JSON_CONNECTION */
48884 e = 0;
48885 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->city_slots);
48886 if (e) {
48887 log_packet_detailed("'city_slots' field error detected");
48888 }
48889#ifdef FREECIV_JSON_CONNECTION
48890 field_addr.name = "tp_defense";
48891#endif /* FREECIV_JSON_CONNECTION */
48892 e = 0;
48893 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tp_defense);
48894 if (e) {
48895 log_packet_detailed("'tp_defense' field error detected");
48896 }
48897#ifdef FREECIV_JSON_CONNECTION
48898 field_addr.name = "cargo";
48899#endif /* FREECIV_JSON_CONNECTION */
48900 e = 0;
48901 e |= DIO_BV_PUT(&dout, &field_addr, packet->cargo);
48902 if (e) {
48903 log_packet_detailed("'cargo' field error detected");
48904 }
48905#ifdef FREECIV_JSON_CONNECTION
48906 field_addr.name = "targets";
48907#endif /* FREECIV_JSON_CONNECTION */
48908 e = 0;
48909 e |= DIO_BV_PUT(&dout, &field_addr, packet->targets);
48910 if (e) {
48911 log_packet_detailed("'targets' field error detected");
48912 }
48913#ifdef FREECIV_JSON_CONNECTION
48914 field_addr.name = "embarks";
48915#endif /* FREECIV_JSON_CONNECTION */
48916 e = 0;
48917 e |= DIO_BV_PUT(&dout, &field_addr, packet->embarks);
48918 if (e) {
48919 log_packet_detailed("'embarks' field error detected");
48920 }
48921#ifdef FREECIV_JSON_CONNECTION
48922 field_addr.name = "disembarks";
48923#endif /* FREECIV_JSON_CONNECTION */
48924 e = 0;
48925 e |= DIO_BV_PUT(&dout, &field_addr, packet->disembarks);
48926 if (e) {
48927 log_packet_detailed("'disembarks' field error detected");
48928 }
48929#ifdef FREECIV_JSON_CONNECTION
48930 field_addr.name = "vlayer";
48931#endif /* FREECIV_JSON_CONNECTION */
48932 e = 0;
48933 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->vlayer);
48934 if (e) {
48935 log_packet_detailed("'vlayer' field error detected");
48936 }
48937#ifdef FREECIV_JSON_CONNECTION
48938 field_addr.name = "helptext";
48939#endif /* FREECIV_JSON_CONNECTION */
48940 e = 0;
48941 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
48942 if (e) {
48943 log_packet_detailed("'helptext' field error detected");
48944 }
48945#ifdef FREECIV_JSON_CONNECTION
48946 field_addr.name = "flags";
48947#endif /* FREECIV_JSON_CONNECTION */
48948 e = 0;
48949 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
48950 if (e) {
48951 log_packet_detailed("'flags' field error detected");
48952 }
48953#ifdef FREECIV_JSON_CONNECTION
48954 field_addr.name = "roles";
48955#endif /* FREECIV_JSON_CONNECTION */
48956 e = 0;
48957 e |= DIO_BV_PUT(&dout, &field_addr, packet->roles);
48958 if (e) {
48959 log_packet_detailed("'roles' field error detected");
48960 }
48961#ifdef FREECIV_JSON_CONNECTION
48962 field_addr.name = "worker";
48963#endif /* FREECIV_JSON_CONNECTION */
48964 e = 0;
48965 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->worker);
48966 if (e) {
48967 log_packet_detailed("'worker' field error detected");
48968 }
48969
48970#endif
48972}
48973
48975{
48976 if (!pc->used) {
48977 log_error("WARNING: trying to send data to the closed connection %s",
48979 return -1;
48980 }
48981 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT].packet != NULL, -1,
48982 "Handler for PACKET_RULESET_UNIT not installed");
48983 return pc->phs.handlers->send[PACKET_RULESET_UNIT].packet(pc, packet);
48984}
48985
48986void lsend_packet_ruleset_unit(struct conn_list *dest, const struct packet_ruleset_unit *packet)
48987{
48988 conn_list_iterate(dest, pconn) {
48991}
48992
48993#ifdef FREECIV_DELTA_PROTOCOL
48994#define hash_packet_ruleset_unit_bonus_100 hash_const
48995
48996#define cmp_packet_ruleset_unit_bonus_100 cmp_const
48997
48999#endif /* FREECIV_DELTA_PROTOCOL */
49000
49002{
49003#ifdef FREECIV_DELTA_PROTOCOL
49005 struct packet_ruleset_unit_bonus *old;
49006 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_BONUS;
49007#endif /* FREECIV_DELTA_PROTOCOL */
49009#ifdef FREECIV_JSON_CONNECTION
49010 struct plocation field_addr;
49011 {
49015 }
49016#endif /* FREECIV_JSON_CONNECTION */
49017
49018#ifdef FREECIV_DELTA_PROTOCOL
49019#ifdef FREECIV_JSON_CONNECTION
49020 field_addr.name = "fields";
49021#endif /* FREECIV_JSON_CONNECTION */
49022 DIO_BV_GET(&din, &field_addr, fields);
49023
49024#else /* FREECIV_DELTA_PROTOCOL */
49025#ifdef FREECIV_JSON_CONNECTION
49026 field_addr.name = "unit";
49027#endif /* FREECIV_JSON_CONNECTION */
49028 {
49029 int readin;
49030
49031 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
49033 }
49034 real_packet->unit = readin;
49035 }
49036#ifdef FREECIV_JSON_CONNECTION
49037 field_addr.name = "flag";
49038#endif /* FREECIV_JSON_CONNECTION */
49039 {
49040 int readin;
49041
49042 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
49044 }
49045 real_packet->flag = readin;
49046 }
49047#ifdef FREECIV_JSON_CONNECTION
49048 field_addr.name = "type";
49049#endif /* FREECIV_JSON_CONNECTION */
49050 {
49051 int readin;
49052
49053 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
49055 }
49056 real_packet->type = readin;
49057 }
49058#ifdef FREECIV_JSON_CONNECTION
49059 field_addr.name = "value";
49060#endif /* FREECIV_JSON_CONNECTION */
49061 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
49063 }
49064#ifdef FREECIV_JSON_CONNECTION
49065 field_addr.name = "quiet";
49066#endif /* FREECIV_JSON_CONNECTION */
49067 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
49069 }
49070#endif
49071 log_packet_detailed("packet_ruleset_unit_bonus_100: got info about ()");
49072
49073#ifdef FREECIV_DELTA_PROTOCOL
49074 if (NULL == *hash) {
49076 NULL, NULL, NULL, free);
49077 }
49078
49079 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
49080 *real_packet = *old;
49081 } else {
49082 log_packet_detailed(" no old info");
49083 memset(real_packet, 0, sizeof(*real_packet));
49084 }
49085
49086 if (BV_ISSET(fields, 0)) {
49087 log_packet_detailed(" got field 'unit'");
49088#ifdef FREECIV_JSON_CONNECTION
49089 field_addr.name = "unit";
49090#endif /* FREECIV_JSON_CONNECTION */
49091 {
49092 int readin;
49093
49094 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
49096 }
49097 real_packet->unit = readin;
49098 }
49099 }
49100 if (BV_ISSET(fields, 1)) {
49101 log_packet_detailed(" got field 'flag'");
49102#ifdef FREECIV_JSON_CONNECTION
49103 field_addr.name = "flag";
49104#endif /* FREECIV_JSON_CONNECTION */
49105 {
49106 int readin;
49107
49108 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
49110 }
49111 real_packet->flag = readin;
49112 }
49113 }
49114 if (BV_ISSET(fields, 2)) {
49115 log_packet_detailed(" got field 'type'");
49116#ifdef FREECIV_JSON_CONNECTION
49117 field_addr.name = "type";
49118#endif /* FREECIV_JSON_CONNECTION */
49119 {
49120 int readin;
49121
49122 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
49124 }
49125 real_packet->type = readin;
49126 }
49127 }
49128 if (BV_ISSET(fields, 3)) {
49129 log_packet_detailed(" got field 'value'");
49130#ifdef FREECIV_JSON_CONNECTION
49131 field_addr.name = "value";
49132#endif /* FREECIV_JSON_CONNECTION */
49133 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->value)) {
49135 }
49136 }
49137 real_packet->quiet = BV_ISSET(fields, 4);
49138
49139 if (NULL == old) {
49140 old = fc_malloc(sizeof(*old));
49141 *old = *real_packet;
49142 genhash_insert(*hash, old, old);
49143 } else {
49144 *old = *real_packet;
49145 }
49146
49147#endif /* FREECIV_DELTA_PROTOCOL */
49149}
49150
49152{
49153 const struct packet_ruleset_unit_bonus *real_packet = packet;
49154 int e;
49155#ifdef FREECIV_DELTA_PROTOCOL
49157 struct packet_ruleset_unit_bonus *old;
49158 bool differ;
49159 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_BONUS;
49160#endif /* FREECIV_DELTA_PROTOCOL */
49162#ifdef FREECIV_JSON_CONNECTION
49163 struct plocation field_addr;
49164 {
49168 }
49169#endif /* FREECIV_JSON_CONNECTION */
49170
49171 log_packet_detailed("packet_ruleset_unit_bonus_100: sending info about ()");
49172
49173#ifdef FREECIV_DELTA_PROTOCOL
49174 if (NULL == *hash) {
49176 NULL, NULL, NULL, free);
49177 }
49178 BV_CLR_ALL(fields);
49179
49180 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
49181 old = fc_malloc(sizeof(*old));
49182 *old = *real_packet;
49183 genhash_insert(*hash, old, old);
49184 memset(old, 0, sizeof(*old));
49185 }
49186 differ = (old->unit != real_packet->unit);
49187 if (differ) {
49188 BV_SET(fields, 0);
49189 }
49190
49191 differ = (old->flag != real_packet->flag);
49192 if (differ) {
49193 BV_SET(fields, 1);
49194 }
49195
49196 differ = (old->type != real_packet->type);
49197 if (differ) {
49198 BV_SET(fields, 2);
49199 }
49200
49201 differ = (old->value != real_packet->value);
49202 if (differ) {
49203 BV_SET(fields, 3);
49204 }
49205
49206 if (packet->quiet) {
49207 BV_SET(fields, 4);
49208 }
49209
49210
49211#ifdef FREECIV_JSON_CONNECTION
49212 field_addr.name = "fields";
49213#endif /* FREECIV_JSON_CONNECTION */
49214 e = 0;
49215 e |= DIO_BV_PUT(&dout, &field_addr, fields);
49216 if (e) {
49217 log_packet_detailed("fields bitvector error detected");
49218 }
49219
49220 if (BV_ISSET(fields, 0)) {
49221 log_packet_detailed(" field 'unit' has changed");
49222#ifdef FREECIV_JSON_CONNECTION
49223 field_addr.name = "unit";
49224#endif /* FREECIV_JSON_CONNECTION */
49225 e = 0;
49226 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
49227 if (e) {
49228 log_packet_detailed("'unit' field error detected");
49229 }
49230 }
49231 if (BV_ISSET(fields, 1)) {
49232 log_packet_detailed(" field 'flag' has changed");
49233#ifdef FREECIV_JSON_CONNECTION
49234 field_addr.name = "flag";
49235#endif /* FREECIV_JSON_CONNECTION */
49236 e = 0;
49237 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
49238 if (e) {
49239 log_packet_detailed("'flag' field error detected");
49240 }
49241 }
49242 if (BV_ISSET(fields, 2)) {
49243 log_packet_detailed(" field 'type' has changed");
49244#ifdef FREECIV_JSON_CONNECTION
49245 field_addr.name = "type";
49246#endif /* FREECIV_JSON_CONNECTION */
49247 e = 0;
49248 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
49249 if (e) {
49250 log_packet_detailed("'type' field error detected");
49251 }
49252 }
49253 if (BV_ISSET(fields, 3)) {
49254 log_packet_detailed(" field 'value' has changed");
49255#ifdef FREECIV_JSON_CONNECTION
49256 field_addr.name = "value";
49257#endif /* FREECIV_JSON_CONNECTION */
49258 e = 0;
49259 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
49260 if (e) {
49261 log_packet_detailed("'value' field error detected");
49262 }
49263 }
49264 /* field 4 is folded into the header */
49265
49266 *old = *real_packet;
49267#endif /* FREECIV_DELTA_PROTOCOL */
49268#ifndef FREECIV_DELTA_PROTOCOL
49269#ifdef FREECIV_JSON_CONNECTION
49270 field_addr.name = "unit";
49271#endif /* FREECIV_JSON_CONNECTION */
49272 e = 0;
49273 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->unit);
49274 if (e) {
49275 log_packet_detailed("'unit' field error detected");
49276 }
49277#ifdef FREECIV_JSON_CONNECTION
49278 field_addr.name = "flag";
49279#endif /* FREECIV_JSON_CONNECTION */
49280 e = 0;
49281 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->flag);
49282 if (e) {
49283 log_packet_detailed("'flag' field error detected");
49284 }
49285#ifdef FREECIV_JSON_CONNECTION
49286 field_addr.name = "type";
49287#endif /* FREECIV_JSON_CONNECTION */
49288 e = 0;
49289 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
49290 if (e) {
49291 log_packet_detailed("'type' field error detected");
49292 }
49293#ifdef FREECIV_JSON_CONNECTION
49294 field_addr.name = "value";
49295#endif /* FREECIV_JSON_CONNECTION */
49296 e = 0;
49297 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->value);
49298 if (e) {
49299 log_packet_detailed("'value' field error detected");
49300 }
49301#ifdef FREECIV_JSON_CONNECTION
49302 field_addr.name = "quiet";
49303#endif /* FREECIV_JSON_CONNECTION */
49304 e = 0;
49305 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
49306 if (e) {
49307 log_packet_detailed("'quiet' field error detected");
49308 }
49309
49310#endif
49312}
49313
49315{
49316 if (!pc->used) {
49317 log_error("WARNING: trying to send data to the closed connection %s",
49319 return -1;
49320 }
49321 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet != NULL, -1,
49322 "Handler for PACKET_RULESET_UNIT_BONUS not installed");
49323 return pc->phs.handlers->send[PACKET_RULESET_UNIT_BONUS].packet(pc, packet);
49324}
49325
49327{
49328 conn_list_iterate(dest, pconn) {
49331}
49332
49333#ifdef FREECIV_DELTA_PROTOCOL
49334#define hash_packet_ruleset_unit_flag_100 hash_const
49335
49336#define cmp_packet_ruleset_unit_flag_100 cmp_const
49337
49339#endif /* FREECIV_DELTA_PROTOCOL */
49340
49342{
49343#ifdef FREECIV_DELTA_PROTOCOL
49345 struct packet_ruleset_unit_flag *old;
49346 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_FLAG;
49347#endif /* FREECIV_DELTA_PROTOCOL */
49349#ifdef FREECIV_JSON_CONNECTION
49350 struct plocation field_addr;
49351 {
49355 }
49356#endif /* FREECIV_JSON_CONNECTION */
49357
49358#ifdef FREECIV_DELTA_PROTOCOL
49359#ifdef FREECIV_JSON_CONNECTION
49360 field_addr.name = "fields";
49361#endif /* FREECIV_JSON_CONNECTION */
49362 DIO_BV_GET(&din, &field_addr, fields);
49363
49364#else /* FREECIV_DELTA_PROTOCOL */
49365#ifdef FREECIV_JSON_CONNECTION
49366 field_addr.name = "id";
49367#endif /* FREECIV_JSON_CONNECTION */
49368 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
49370 }
49371#ifdef FREECIV_JSON_CONNECTION
49372 field_addr.name = "name";
49373#endif /* FREECIV_JSON_CONNECTION */
49374 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49376 }
49377#ifdef FREECIV_JSON_CONNECTION
49378 field_addr.name = "helptxt";
49379#endif /* FREECIV_JSON_CONNECTION */
49380 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
49382 }
49383#endif
49384 log_packet_detailed("packet_ruleset_unit_flag_100: got info about ()");
49385
49386#ifdef FREECIV_DELTA_PROTOCOL
49387 if (NULL == *hash) {
49389 NULL, NULL, NULL, free);
49390 }
49391
49392 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
49393 *real_packet = *old;
49394 } else {
49395 log_packet_detailed(" no old info");
49396 memset(real_packet, 0, sizeof(*real_packet));
49397 }
49398
49399 if (BV_ISSET(fields, 0)) {
49400 log_packet_detailed(" got field 'id'");
49401#ifdef FREECIV_JSON_CONNECTION
49402 field_addr.name = "id";
49403#endif /* FREECIV_JSON_CONNECTION */
49404 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
49406 }
49407 }
49408 if (BV_ISSET(fields, 1)) {
49409 log_packet_detailed(" got field 'name'");
49410#ifdef FREECIV_JSON_CONNECTION
49411 field_addr.name = "name";
49412#endif /* FREECIV_JSON_CONNECTION */
49413 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49415 }
49416 }
49417 if (BV_ISSET(fields, 2)) {
49418 log_packet_detailed(" got field 'helptxt'");
49419#ifdef FREECIV_JSON_CONNECTION
49420 field_addr.name = "helptxt";
49421#endif /* FREECIV_JSON_CONNECTION */
49422 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
49424 }
49425 }
49426
49427 if (NULL == old) {
49428 old = fc_malloc(sizeof(*old));
49429 *old = *real_packet;
49430 genhash_insert(*hash, old, old);
49431 } else {
49432 *old = *real_packet;
49433 }
49434
49435#endif /* FREECIV_DELTA_PROTOCOL */
49437}
49438
49440{
49441 const struct packet_ruleset_unit_flag *real_packet = packet;
49442 int e;
49443#ifdef FREECIV_DELTA_PROTOCOL
49445 struct packet_ruleset_unit_flag *old;
49446 bool differ;
49447 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_FLAG;
49448#endif /* FREECIV_DELTA_PROTOCOL */
49450#ifdef FREECIV_JSON_CONNECTION
49451 struct plocation field_addr;
49452 {
49456 }
49457#endif /* FREECIV_JSON_CONNECTION */
49458
49459 log_packet_detailed("packet_ruleset_unit_flag_100: sending info about ()");
49460
49461#ifdef FREECIV_DELTA_PROTOCOL
49462 if (NULL == *hash) {
49464 NULL, NULL, NULL, free);
49465 }
49466 BV_CLR_ALL(fields);
49467
49468 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
49469 old = fc_malloc(sizeof(*old));
49470 *old = *real_packet;
49471 genhash_insert(*hash, old, old);
49472 memset(old, 0, sizeof(*old));
49473 }
49474 differ = (old->id != real_packet->id);
49475 if (differ) {
49476 BV_SET(fields, 0);
49477 }
49478
49479 differ = (strcmp(old->name, real_packet->name) != 0);
49480 if (differ) {
49481 BV_SET(fields, 1);
49482 }
49483
49484 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
49485 if (differ) {
49486 BV_SET(fields, 2);
49487 }
49488
49489
49490#ifdef FREECIV_JSON_CONNECTION
49491 field_addr.name = "fields";
49492#endif /* FREECIV_JSON_CONNECTION */
49493 e = 0;
49494 e |= DIO_BV_PUT(&dout, &field_addr, fields);
49495 if (e) {
49496 log_packet_detailed("fields bitvector error detected");
49497 }
49498
49499 if (BV_ISSET(fields, 0)) {
49500 log_packet_detailed(" field 'id' has changed");
49501#ifdef FREECIV_JSON_CONNECTION
49502 field_addr.name = "id";
49503#endif /* FREECIV_JSON_CONNECTION */
49504 e = 0;
49505 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
49506 if (e) {
49507 log_packet_detailed("'id' field error detected");
49508 }
49509 }
49510 if (BV_ISSET(fields, 1)) {
49511 log_packet_detailed(" field 'name' has changed");
49512#ifdef FREECIV_JSON_CONNECTION
49513 field_addr.name = "name";
49514#endif /* FREECIV_JSON_CONNECTION */
49515 e = 0;
49516 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49517 if (e) {
49518 log_packet_detailed("'name' field error detected");
49519 }
49520 }
49521 if (BV_ISSET(fields, 2)) {
49522 log_packet_detailed(" field 'helptxt' has changed");
49523#ifdef FREECIV_JSON_CONNECTION
49524 field_addr.name = "helptxt";
49525#endif /* FREECIV_JSON_CONNECTION */
49526 e = 0;
49527 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
49528 if (e) {
49529 log_packet_detailed("'helptxt' field error detected");
49530 }
49531 }
49532
49533 *old = *real_packet;
49534#endif /* FREECIV_DELTA_PROTOCOL */
49535#ifndef FREECIV_DELTA_PROTOCOL
49536#ifdef FREECIV_JSON_CONNECTION
49537 field_addr.name = "id";
49538#endif /* FREECIV_JSON_CONNECTION */
49539 e = 0;
49540 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
49541 if (e) {
49542 log_packet_detailed("'id' field error detected");
49543 }
49544#ifdef FREECIV_JSON_CONNECTION
49545 field_addr.name = "name";
49546#endif /* FREECIV_JSON_CONNECTION */
49547 e = 0;
49548 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49549 if (e) {
49550 log_packet_detailed("'name' field error detected");
49551 }
49552#ifdef FREECIV_JSON_CONNECTION
49553 field_addr.name = "helptxt";
49554#endif /* FREECIV_JSON_CONNECTION */
49555 e = 0;
49556 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
49557 if (e) {
49558 log_packet_detailed("'helptxt' field error detected");
49559 }
49560
49561#endif
49563}
49564
49566{
49567 if (!pc->used) {
49568 log_error("WARNING: trying to send data to the closed connection %s",
49570 return -1;
49571 }
49572 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet != NULL, -1,
49573 "Handler for PACKET_RULESET_UNIT_FLAG not installed");
49574 return pc->phs.handlers->send[PACKET_RULESET_UNIT_FLAG].packet(pc, packet);
49575}
49576
49578{
49579 conn_list_iterate(dest, pconn) {
49582}
49583
49584#ifdef FREECIV_DELTA_PROTOCOL
49585#define hash_packet_ruleset_unit_class_flag_100 hash_const
49586
49587#define cmp_packet_ruleset_unit_class_flag_100 cmp_const
49588
49590#endif /* FREECIV_DELTA_PROTOCOL */
49591
49593{
49594#ifdef FREECIV_DELTA_PROTOCOL
49597 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS_FLAG;
49598#endif /* FREECIV_DELTA_PROTOCOL */
49600#ifdef FREECIV_JSON_CONNECTION
49601 struct plocation field_addr;
49602 {
49606 }
49607#endif /* FREECIV_JSON_CONNECTION */
49608
49609#ifdef FREECIV_DELTA_PROTOCOL
49610#ifdef FREECIV_JSON_CONNECTION
49611 field_addr.name = "fields";
49612#endif /* FREECIV_JSON_CONNECTION */
49613 DIO_BV_GET(&din, &field_addr, fields);
49614
49615#else /* FREECIV_DELTA_PROTOCOL */
49616#ifdef FREECIV_JSON_CONNECTION
49617 field_addr.name = "id";
49618#endif /* FREECIV_JSON_CONNECTION */
49619 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
49621 }
49622#ifdef FREECIV_JSON_CONNECTION
49623 field_addr.name = "name";
49624#endif /* FREECIV_JSON_CONNECTION */
49625 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49627 }
49628#ifdef FREECIV_JSON_CONNECTION
49629 field_addr.name = "helptxt";
49630#endif /* FREECIV_JSON_CONNECTION */
49631 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
49633 }
49634#endif
49635 log_packet_detailed("packet_ruleset_unit_class_flag_100: got info about ()");
49636
49637#ifdef FREECIV_DELTA_PROTOCOL
49638 if (NULL == *hash) {
49640 NULL, NULL, NULL, free);
49641 }
49642
49643 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
49644 *real_packet = *old;
49645 } else {
49646 log_packet_detailed(" no old info");
49647 memset(real_packet, 0, sizeof(*real_packet));
49648 }
49649
49650 if (BV_ISSET(fields, 0)) {
49651 log_packet_detailed(" got field 'id'");
49652#ifdef FREECIV_JSON_CONNECTION
49653 field_addr.name = "id";
49654#endif /* FREECIV_JSON_CONNECTION */
49655 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
49657 }
49658 }
49659 if (BV_ISSET(fields, 1)) {
49660 log_packet_detailed(" got field 'name'");
49661#ifdef FREECIV_JSON_CONNECTION
49662 field_addr.name = "name";
49663#endif /* FREECIV_JSON_CONNECTION */
49664 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
49666 }
49667 }
49668 if (BV_ISSET(fields, 2)) {
49669 log_packet_detailed(" got field 'helptxt'");
49670#ifdef FREECIV_JSON_CONNECTION
49671 field_addr.name = "helptxt";
49672#endif /* FREECIV_JSON_CONNECTION */
49673 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
49675 }
49676 }
49677
49678 if (NULL == old) {
49679 old = fc_malloc(sizeof(*old));
49680 *old = *real_packet;
49681 genhash_insert(*hash, old, old);
49682 } else {
49683 *old = *real_packet;
49684 }
49685
49686#endif /* FREECIV_DELTA_PROTOCOL */
49688}
49689
49691{
49692 const struct packet_ruleset_unit_class_flag *real_packet = packet;
49693 int e;
49694#ifdef FREECIV_DELTA_PROTOCOL
49697 bool differ;
49698 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS_FLAG;
49699#endif /* FREECIV_DELTA_PROTOCOL */
49701#ifdef FREECIV_JSON_CONNECTION
49702 struct plocation field_addr;
49703 {
49707 }
49708#endif /* FREECIV_JSON_CONNECTION */
49709
49710 log_packet_detailed("packet_ruleset_unit_class_flag_100: sending info about ()");
49711
49712#ifdef FREECIV_DELTA_PROTOCOL
49713 if (NULL == *hash) {
49715 NULL, NULL, NULL, free);
49716 }
49717 BV_CLR_ALL(fields);
49718
49719 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
49720 old = fc_malloc(sizeof(*old));
49721 *old = *real_packet;
49722 genhash_insert(*hash, old, old);
49723 memset(old, 0, sizeof(*old));
49724 }
49725 differ = (old->id != real_packet->id);
49726 if (differ) {
49727 BV_SET(fields, 0);
49728 }
49729
49730 differ = (strcmp(old->name, real_packet->name) != 0);
49731 if (differ) {
49732 BV_SET(fields, 1);
49733 }
49734
49735 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
49736 if (differ) {
49737 BV_SET(fields, 2);
49738 }
49739
49740
49741#ifdef FREECIV_JSON_CONNECTION
49742 field_addr.name = "fields";
49743#endif /* FREECIV_JSON_CONNECTION */
49744 e = 0;
49745 e |= DIO_BV_PUT(&dout, &field_addr, fields);
49746 if (e) {
49747 log_packet_detailed("fields bitvector error detected");
49748 }
49749
49750 if (BV_ISSET(fields, 0)) {
49751 log_packet_detailed(" field 'id' has changed");
49752#ifdef FREECIV_JSON_CONNECTION
49753 field_addr.name = "id";
49754#endif /* FREECIV_JSON_CONNECTION */
49755 e = 0;
49756 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
49757 if (e) {
49758 log_packet_detailed("'id' field error detected");
49759 }
49760 }
49761 if (BV_ISSET(fields, 1)) {
49762 log_packet_detailed(" field 'name' has changed");
49763#ifdef FREECIV_JSON_CONNECTION
49764 field_addr.name = "name";
49765#endif /* FREECIV_JSON_CONNECTION */
49766 e = 0;
49767 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49768 if (e) {
49769 log_packet_detailed("'name' field error detected");
49770 }
49771 }
49772 if (BV_ISSET(fields, 2)) {
49773 log_packet_detailed(" field 'helptxt' has changed");
49774#ifdef FREECIV_JSON_CONNECTION
49775 field_addr.name = "helptxt";
49776#endif /* FREECIV_JSON_CONNECTION */
49777 e = 0;
49778 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
49779 if (e) {
49780 log_packet_detailed("'helptxt' field error detected");
49781 }
49782 }
49783
49784 *old = *real_packet;
49785#endif /* FREECIV_DELTA_PROTOCOL */
49786#ifndef FREECIV_DELTA_PROTOCOL
49787#ifdef FREECIV_JSON_CONNECTION
49788 field_addr.name = "id";
49789#endif /* FREECIV_JSON_CONNECTION */
49790 e = 0;
49791 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
49792 if (e) {
49793 log_packet_detailed("'id' field error detected");
49794 }
49795#ifdef FREECIV_JSON_CONNECTION
49796 field_addr.name = "name";
49797#endif /* FREECIV_JSON_CONNECTION */
49798 e = 0;
49799 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
49800 if (e) {
49801 log_packet_detailed("'name' field error detected");
49802 }
49803#ifdef FREECIV_JSON_CONNECTION
49804 field_addr.name = "helptxt";
49805#endif /* FREECIV_JSON_CONNECTION */
49806 e = 0;
49807 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
49808 if (e) {
49809 log_packet_detailed("'helptxt' field error detected");
49810 }
49811
49812#endif
49814}
49815
49817{
49818 if (!pc->used) {
49819 log_error("WARNING: trying to send data to the closed connection %s",
49821 return -1;
49822 }
49823 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet != NULL, -1,
49824 "Handler for PACKET_RULESET_UNIT_CLASS_FLAG not installed");
49825 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS_FLAG].packet(pc, packet);
49826}
49827
49834
49835#ifdef FREECIV_DELTA_PROTOCOL
49836#define hash_packet_ruleset_game_100 hash_const
49837
49838#define cmp_packet_ruleset_game_100 cmp_const
49839
49841#endif /* FREECIV_DELTA_PROTOCOL */
49842
49844{
49845#ifdef FREECIV_DELTA_PROTOCOL
49847 struct packet_ruleset_game *old;
49848 struct genhash **hash = pc->phs.received + PACKET_RULESET_GAME;
49849#endif /* FREECIV_DELTA_PROTOCOL */
49851#ifdef FREECIV_JSON_CONNECTION
49852 struct plocation field_addr;
49853 {
49857 }
49858#endif /* FREECIV_JSON_CONNECTION */
49859
49860#ifdef FREECIV_DELTA_PROTOCOL
49861#ifdef FREECIV_JSON_CONNECTION
49862 field_addr.name = "fields";
49863#endif /* FREECIV_JSON_CONNECTION */
49864 DIO_BV_GET(&din, &field_addr, fields);
49865
49866#else /* FREECIV_DELTA_PROTOCOL */
49867#ifdef FREECIV_JSON_CONNECTION
49868 field_addr.name = "default_specialist";
49869#endif /* FREECIV_JSON_CONNECTION */
49870 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
49872 }
49873#ifdef FREECIV_JSON_CONNECTION
49874 field_addr.name = "global_init_techs_count";
49875#endif /* FREECIV_JSON_CONNECTION */
49876 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
49877 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
49878 }
49879#ifdef FREECIV_JSON_CONNECTION
49880 field_addr.name = "global_init_techs";
49881#endif /* FREECIV_JSON_CONNECTION */
49882 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
49883 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": truncation array");
49884 }
49885 {
49886 int i;
49887
49888#ifdef FREECIV_JSON_CONNECTION
49889 /* Enter array. */
49890 field_addr.sub_location = plocation_elem_new(0);
49891#endif /* FREECIV_JSON_CONNECTION */
49892
49893 for (i = 0; i < real_packet->global_init_techs_count; i++) {
49894#ifdef FREECIV_JSON_CONNECTION
49895 field_addr.sub_location->number = i;
49896#endif /* FREECIV_JSON_CONNECTION */
49897
49898 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
49899 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
49900 }
49901 }
49902
49903#ifdef FREECIV_JSON_CONNECTION
49904 /* Exit array. */
49905 FC_FREE(field_addr.sub_location);
49906#endif /* FREECIV_JSON_CONNECTION */
49907 }
49908#ifdef FREECIV_JSON_CONNECTION
49909 field_addr.name = "global_init_buildings_count";
49910#endif /* FREECIV_JSON_CONNECTION */
49911 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
49912 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
49913 }
49914#ifdef FREECIV_JSON_CONNECTION
49915 field_addr.name = "global_init_buildings";
49916#endif /* FREECIV_JSON_CONNECTION */
49917 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
49918 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": truncation array");
49919 }
49920 {
49921 int i;
49922
49923#ifdef FREECIV_JSON_CONNECTION
49924 /* Enter array. */
49925 field_addr.sub_location = plocation_elem_new(0);
49926#endif /* FREECIV_JSON_CONNECTION */
49927
49928 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
49929#ifdef FREECIV_JSON_CONNECTION
49930 field_addr.sub_location->number = i;
49931#endif /* FREECIV_JSON_CONNECTION */
49932
49933 {
49934 int readin;
49935
49936 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
49937 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
49938 }
49939 real_packet->global_init_buildings[i] = readin;
49940 }
49941 }
49942
49943#ifdef FREECIV_JSON_CONNECTION
49944 /* Exit array. */
49945 FC_FREE(field_addr.sub_location);
49946#endif /* FREECIV_JSON_CONNECTION */
49947 }
49948#ifdef FREECIV_JSON_CONNECTION
49949 field_addr.name = "veteran_levels";
49950#endif /* FREECIV_JSON_CONNECTION */
49951 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
49952 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
49953 }
49954#ifdef FREECIV_JSON_CONNECTION
49955 field_addr.name = "veteran_name";
49956#endif /* FREECIV_JSON_CONNECTION */
49957 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
49958 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": truncation array");
49959 }
49960 {
49961 int i;
49962
49963#ifdef FREECIV_JSON_CONNECTION
49964 /* Enter array. */
49965 field_addr.sub_location = plocation_elem_new(0);
49966#endif /* FREECIV_JSON_CONNECTION */
49967
49968 for (i = 0; i < real_packet->veteran_levels; i++) {
49969#ifdef FREECIV_JSON_CONNECTION
49970 field_addr.sub_location->number = i;
49971#endif /* FREECIV_JSON_CONNECTION */
49972
49973 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
49974 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
49975 }
49976 }
49977
49978#ifdef FREECIV_JSON_CONNECTION
49979 /* Exit array. */
49980 FC_FREE(field_addr.sub_location);
49981#endif /* FREECIV_JSON_CONNECTION */
49982 }
49983#ifdef FREECIV_JSON_CONNECTION
49984 field_addr.name = "power_fact";
49985#endif /* FREECIV_JSON_CONNECTION */
49986 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
49987 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": truncation array");
49988 }
49989 {
49990 int i;
49991
49992#ifdef FREECIV_JSON_CONNECTION
49993 /* Enter array. */
49994 field_addr.sub_location = plocation_elem_new(0);
49995#endif /* FREECIV_JSON_CONNECTION */
49996
49997 for (i = 0; i < real_packet->veteran_levels; i++) {
49998#ifdef FREECIV_JSON_CONNECTION
49999 field_addr.sub_location->number = i;
50000#endif /* FREECIV_JSON_CONNECTION */
50001
50002 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
50003 RECEIVE_PACKET_FIELD_ERROR(power_fact);
50004 }
50005 }
50006
50007#ifdef FREECIV_JSON_CONNECTION
50008 /* Exit array. */
50009 FC_FREE(field_addr.sub_location);
50010#endif /* FREECIV_JSON_CONNECTION */
50011 }
50012#ifdef FREECIV_JSON_CONNECTION
50013 field_addr.name = "move_bonus";
50014#endif /* FREECIV_JSON_CONNECTION */
50015 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
50016 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": truncation array");
50017 }
50018 {
50019 int i;
50020
50021#ifdef FREECIV_JSON_CONNECTION
50022 /* Enter array. */
50023 field_addr.sub_location = plocation_elem_new(0);
50024#endif /* FREECIV_JSON_CONNECTION */
50025
50026 for (i = 0; i < real_packet->veteran_levels; i++) {
50027#ifdef FREECIV_JSON_CONNECTION
50028 field_addr.sub_location->number = i;
50029#endif /* FREECIV_JSON_CONNECTION */
50030
50031 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
50032 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
50033 }
50034 }
50035
50036#ifdef FREECIV_JSON_CONNECTION
50037 /* Exit array. */
50038 FC_FREE(field_addr.sub_location);
50039#endif /* FREECIV_JSON_CONNECTION */
50040 }
50041#ifdef FREECIV_JSON_CONNECTION
50042 field_addr.name = "base_raise_chance";
50043#endif /* FREECIV_JSON_CONNECTION */
50044 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
50045 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": truncation array");
50046 }
50047 {
50048 int i;
50049
50050#ifdef FREECIV_JSON_CONNECTION
50051 /* Enter array. */
50052 field_addr.sub_location = plocation_elem_new(0);
50053#endif /* FREECIV_JSON_CONNECTION */
50054
50055 for (i = 0; i < real_packet->veteran_levels; i++) {
50056#ifdef FREECIV_JSON_CONNECTION
50057 field_addr.sub_location->number = i;
50058#endif /* FREECIV_JSON_CONNECTION */
50059
50060 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
50061 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
50062 }
50063 }
50064
50065#ifdef FREECIV_JSON_CONNECTION
50066 /* Exit array. */
50067 FC_FREE(field_addr.sub_location);
50068#endif /* FREECIV_JSON_CONNECTION */
50069 }
50070#ifdef FREECIV_JSON_CONNECTION
50071 field_addr.name = "work_raise_chance";
50072#endif /* FREECIV_JSON_CONNECTION */
50073 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
50074 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": truncation array");
50075 }
50076 {
50077 int i;
50078
50079#ifdef FREECIV_JSON_CONNECTION
50080 /* Enter array. */
50081 field_addr.sub_location = plocation_elem_new(0);
50082#endif /* FREECIV_JSON_CONNECTION */
50083
50084 for (i = 0; i < real_packet->veteran_levels; i++) {
50085#ifdef FREECIV_JSON_CONNECTION
50086 field_addr.sub_location->number = i;
50087#endif /* FREECIV_JSON_CONNECTION */
50088
50089 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
50090 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
50091 }
50092 }
50093
50094#ifdef FREECIV_JSON_CONNECTION
50095 /* Exit array. */
50096 FC_FREE(field_addr.sub_location);
50097#endif /* FREECIV_JSON_CONNECTION */
50098 }
50099#ifdef FREECIV_JSON_CONNECTION
50100 field_addr.name = "background_red";
50101#endif /* FREECIV_JSON_CONNECTION */
50102 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
50103 RECEIVE_PACKET_FIELD_ERROR(background_red);
50104 }
50105#ifdef FREECIV_JSON_CONNECTION
50106 field_addr.name = "background_green";
50107#endif /* FREECIV_JSON_CONNECTION */
50108 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
50109 RECEIVE_PACKET_FIELD_ERROR(background_green);
50110 }
50111#ifdef FREECIV_JSON_CONNECTION
50112 field_addr.name = "background_blue";
50113#endif /* FREECIV_JSON_CONNECTION */
50114 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
50115 RECEIVE_PACKET_FIELD_ERROR(background_blue);
50116 }
50117#endif
50118 log_packet_detailed("packet_ruleset_game_100: got info about ()");
50119
50120#ifdef FREECIV_DELTA_PROTOCOL
50121 if (NULL == *hash) {
50123 NULL, NULL, NULL, free);
50124 }
50125
50126 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
50127 *real_packet = *old;
50128 } else {
50129 log_packet_detailed(" no old info");
50130 memset(real_packet, 0, sizeof(*real_packet));
50131 }
50132
50133 if (BV_ISSET(fields, 0)) {
50134 log_packet_detailed(" got field 'default_specialist'");
50135#ifdef FREECIV_JSON_CONNECTION
50136 field_addr.name = "default_specialist";
50137#endif /* FREECIV_JSON_CONNECTION */
50138 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->default_specialist)) {
50140 }
50141 }
50142 if (BV_ISSET(fields, 1)) {
50143 log_packet_detailed(" got field 'global_init_techs_count'");
50144#ifdef FREECIV_JSON_CONNECTION
50145 field_addr.name = "global_init_techs_count";
50146#endif /* FREECIV_JSON_CONNECTION */
50147 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_techs_count)) {
50148 RECEIVE_PACKET_FIELD_ERROR(global_init_techs_count);
50149 }
50150 }
50151 if (BV_ISSET(fields, 2)) {
50152 log_packet_detailed(" got field 'global_init_techs'");
50153#ifdef FREECIV_JSON_CONNECTION
50154 field_addr.name = "global_init_techs";
50155#endif /* FREECIV_JSON_CONNECTION */
50156 if (real_packet->global_init_techs_count > MAX_NUM_TECH_LIST) {
50157 RECEIVE_PACKET_FIELD_ERROR(global_init_techs, ": truncation array");
50158 }
50159 {
50160 int i;
50161
50162#ifdef FREECIV_JSON_CONNECTION
50163 /* Enter array. */
50164 field_addr.sub_location = plocation_elem_new(0);
50165#endif /* FREECIV_JSON_CONNECTION */
50166
50167 for (i = 0; i < real_packet->global_init_techs_count; i++) {
50168#ifdef FREECIV_JSON_CONNECTION
50169 field_addr.sub_location->number = i;
50170#endif /* FREECIV_JSON_CONNECTION */
50171
50172 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->global_init_techs[i])) {
50173 RECEIVE_PACKET_FIELD_ERROR(global_init_techs);
50174 }
50175 }
50176
50177#ifdef FREECIV_JSON_CONNECTION
50178 /* Exit array. */
50179 FC_FREE(field_addr.sub_location);
50180#endif /* FREECIV_JSON_CONNECTION */
50181 }
50182 }
50183 if (BV_ISSET(fields, 3)) {
50184 log_packet_detailed(" got field 'global_init_buildings_count'");
50185#ifdef FREECIV_JSON_CONNECTION
50186 field_addr.name = "global_init_buildings_count";
50187#endif /* FREECIV_JSON_CONNECTION */
50188 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->global_init_buildings_count)) {
50189 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings_count);
50190 }
50191 }
50192 if (BV_ISSET(fields, 4)) {
50193 log_packet_detailed(" got field 'global_init_buildings'");
50194#ifdef FREECIV_JSON_CONNECTION
50195 field_addr.name = "global_init_buildings";
50196#endif /* FREECIV_JSON_CONNECTION */
50197 if (real_packet->global_init_buildings_count > MAX_NUM_BUILDING_LIST) {
50198 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings, ": truncation array");
50199 }
50200 {
50201 int i;
50202
50203#ifdef FREECIV_JSON_CONNECTION
50204 /* Enter array. */
50205 field_addr.sub_location = plocation_elem_new(0);
50206#endif /* FREECIV_JSON_CONNECTION */
50207
50208 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
50209#ifdef FREECIV_JSON_CONNECTION
50210 field_addr.sub_location->number = i;
50211#endif /* FREECIV_JSON_CONNECTION */
50212
50213 {
50214 int readin;
50215
50216 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
50217 RECEIVE_PACKET_FIELD_ERROR(global_init_buildings);
50218 }
50219 real_packet->global_init_buildings[i] = readin;
50220 }
50221 }
50222
50223#ifdef FREECIV_JSON_CONNECTION
50224 /* Exit array. */
50225 FC_FREE(field_addr.sub_location);
50226#endif /* FREECIV_JSON_CONNECTION */
50227 }
50228 }
50229 if (BV_ISSET(fields, 5)) {
50230 log_packet_detailed(" got field 'veteran_levels'");
50231#ifdef FREECIV_JSON_CONNECTION
50232 field_addr.name = "veteran_levels";
50233#endif /* FREECIV_JSON_CONNECTION */
50234 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran_levels)) {
50235 RECEIVE_PACKET_FIELD_ERROR(veteran_levels);
50236 }
50237 }
50238 if (BV_ISSET(fields, 6)) {
50239 log_packet_detailed(" got field 'veteran_name'");
50240#ifdef FREECIV_JSON_CONNECTION
50241 field_addr.name = "veteran_name";
50242#endif /* FREECIV_JSON_CONNECTION */
50243 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
50244 RECEIVE_PACKET_FIELD_ERROR(veteran_name, ": truncation array");
50245 }
50246 {
50247 int i;
50248
50249#ifdef FREECIV_JSON_CONNECTION
50250 /* Enter array. */
50251 field_addr.sub_location = plocation_elem_new(0);
50252#endif /* FREECIV_JSON_CONNECTION */
50253
50254 for (i = 0; i < real_packet->veteran_levels; i++) {
50255#ifdef FREECIV_JSON_CONNECTION
50256 field_addr.sub_location->number = i;
50257#endif /* FREECIV_JSON_CONNECTION */
50258
50259 if (!DIO_GET(string, &din, &field_addr, real_packet->veteran_name[i], sizeof(real_packet->veteran_name[i]))) {
50260 RECEIVE_PACKET_FIELD_ERROR(veteran_name);
50261 }
50262 }
50263
50264#ifdef FREECIV_JSON_CONNECTION
50265 /* Exit array. */
50266 FC_FREE(field_addr.sub_location);
50267#endif /* FREECIV_JSON_CONNECTION */
50268 }
50269 }
50270 if (BV_ISSET(fields, 7)) {
50271 log_packet_detailed(" got field 'power_fact'");
50272#ifdef FREECIV_JSON_CONNECTION
50273 field_addr.name = "power_fact";
50274#endif /* FREECIV_JSON_CONNECTION */
50275 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
50276 RECEIVE_PACKET_FIELD_ERROR(power_fact, ": truncation array");
50277 }
50278 {
50279 int i;
50280
50281#ifdef FREECIV_JSON_CONNECTION
50282 /* Enter array. */
50283 field_addr.sub_location = plocation_elem_new(0);
50284#endif /* FREECIV_JSON_CONNECTION */
50285
50286 for (i = 0; i < real_packet->veteran_levels; i++) {
50287#ifdef FREECIV_JSON_CONNECTION
50288 field_addr.sub_location->number = i;
50289#endif /* FREECIV_JSON_CONNECTION */
50290
50291 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->power_fact[i])) {
50292 RECEIVE_PACKET_FIELD_ERROR(power_fact);
50293 }
50294 }
50295
50296#ifdef FREECIV_JSON_CONNECTION
50297 /* Exit array. */
50298 FC_FREE(field_addr.sub_location);
50299#endif /* FREECIV_JSON_CONNECTION */
50300 }
50301 }
50302 if (BV_ISSET(fields, 8)) {
50303 log_packet_detailed(" got field 'move_bonus'");
50304#ifdef FREECIV_JSON_CONNECTION
50305 field_addr.name = "move_bonus";
50306#endif /* FREECIV_JSON_CONNECTION */
50307 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
50308 RECEIVE_PACKET_FIELD_ERROR(move_bonus, ": truncation array");
50309 }
50310 {
50311 int i;
50312
50313#ifdef FREECIV_JSON_CONNECTION
50314 /* Enter array. */
50315 field_addr.sub_location = plocation_elem_new(0);
50316#endif /* FREECIV_JSON_CONNECTION */
50317
50318 for (i = 0; i < real_packet->veteran_levels; i++) {
50319#ifdef FREECIV_JSON_CONNECTION
50320 field_addr.sub_location->number = i;
50321#endif /* FREECIV_JSON_CONNECTION */
50322
50323 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_bonus[i])) {
50324 RECEIVE_PACKET_FIELD_ERROR(move_bonus);
50325 }
50326 }
50327
50328#ifdef FREECIV_JSON_CONNECTION
50329 /* Exit array. */
50330 FC_FREE(field_addr.sub_location);
50331#endif /* FREECIV_JSON_CONNECTION */
50332 }
50333 }
50334 if (BV_ISSET(fields, 9)) {
50335 log_packet_detailed(" got field 'base_raise_chance'");
50336#ifdef FREECIV_JSON_CONNECTION
50337 field_addr.name = "base_raise_chance";
50338#endif /* FREECIV_JSON_CONNECTION */
50339 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
50340 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance, ": truncation array");
50341 }
50342 {
50343 int i;
50344
50345#ifdef FREECIV_JSON_CONNECTION
50346 /* Enter array. */
50347 field_addr.sub_location = plocation_elem_new(0);
50348#endif /* FREECIV_JSON_CONNECTION */
50349
50350 for (i = 0; i < real_packet->veteran_levels; i++) {
50351#ifdef FREECIV_JSON_CONNECTION
50352 field_addr.sub_location->number = i;
50353#endif /* FREECIV_JSON_CONNECTION */
50354
50355 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_raise_chance[i])) {
50356 RECEIVE_PACKET_FIELD_ERROR(base_raise_chance);
50357 }
50358 }
50359
50360#ifdef FREECIV_JSON_CONNECTION
50361 /* Exit array. */
50362 FC_FREE(field_addr.sub_location);
50363#endif /* FREECIV_JSON_CONNECTION */
50364 }
50365 }
50366 if (BV_ISSET(fields, 10)) {
50367 log_packet_detailed(" got field 'work_raise_chance'");
50368#ifdef FREECIV_JSON_CONNECTION
50369 field_addr.name = "work_raise_chance";
50370#endif /* FREECIV_JSON_CONNECTION */
50371 if (real_packet->veteran_levels > MAX_VET_LEVELS) {
50372 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance, ": truncation array");
50373 }
50374 {
50375 int i;
50376
50377#ifdef FREECIV_JSON_CONNECTION
50378 /* Enter array. */
50379 field_addr.sub_location = plocation_elem_new(0);
50380#endif /* FREECIV_JSON_CONNECTION */
50381
50382 for (i = 0; i < real_packet->veteran_levels; i++) {
50383#ifdef FREECIV_JSON_CONNECTION
50384 field_addr.sub_location->number = i;
50385#endif /* FREECIV_JSON_CONNECTION */
50386
50387 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->work_raise_chance[i])) {
50388 RECEIVE_PACKET_FIELD_ERROR(work_raise_chance);
50389 }
50390 }
50391
50392#ifdef FREECIV_JSON_CONNECTION
50393 /* Exit array. */
50394 FC_FREE(field_addr.sub_location);
50395#endif /* FREECIV_JSON_CONNECTION */
50396 }
50397 }
50398 if (BV_ISSET(fields, 11)) {
50399 log_packet_detailed(" got field 'background_red'");
50400#ifdef FREECIV_JSON_CONNECTION
50401 field_addr.name = "background_red";
50402#endif /* FREECIV_JSON_CONNECTION */
50403 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_red)) {
50404 RECEIVE_PACKET_FIELD_ERROR(background_red);
50405 }
50406 }
50407 if (BV_ISSET(fields, 12)) {
50408 log_packet_detailed(" got field 'background_green'");
50409#ifdef FREECIV_JSON_CONNECTION
50410 field_addr.name = "background_green";
50411#endif /* FREECIV_JSON_CONNECTION */
50412 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_green)) {
50413 RECEIVE_PACKET_FIELD_ERROR(background_green);
50414 }
50415 }
50416 if (BV_ISSET(fields, 13)) {
50417 log_packet_detailed(" got field 'background_blue'");
50418#ifdef FREECIV_JSON_CONNECTION
50419 field_addr.name = "background_blue";
50420#endif /* FREECIV_JSON_CONNECTION */
50421 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->background_blue)) {
50422 RECEIVE_PACKET_FIELD_ERROR(background_blue);
50423 }
50424 }
50425
50426 if (NULL == old) {
50427 old = fc_malloc(sizeof(*old));
50428 *old = *real_packet;
50429 genhash_insert(*hash, old, old);
50430 } else {
50431 *old = *real_packet;
50432 }
50433
50434#endif /* FREECIV_DELTA_PROTOCOL */
50436}
50437
50438static int send_packet_ruleset_game_100(struct connection *pc, const struct packet_ruleset_game *packet)
50439{
50440 const struct packet_ruleset_game *real_packet = packet;
50441 int e;
50442#ifdef FREECIV_DELTA_PROTOCOL
50444 struct packet_ruleset_game *old;
50445 bool differ;
50446 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GAME;
50447#endif /* FREECIV_DELTA_PROTOCOL */
50449#ifdef FREECIV_JSON_CONNECTION
50450 struct plocation field_addr;
50451 {
50455 }
50456#endif /* FREECIV_JSON_CONNECTION */
50457
50458 log_packet_detailed("packet_ruleset_game_100: sending info about ()");
50459
50460#ifdef FREECIV_DELTA_PROTOCOL
50461 if (NULL == *hash) {
50463 NULL, NULL, NULL, free);
50464 }
50465 BV_CLR_ALL(fields);
50466
50467 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
50468 old = fc_malloc(sizeof(*old));
50469 *old = *real_packet;
50470 genhash_insert(*hash, old, old);
50471 memset(old, 0, sizeof(*old));
50472 }
50473 differ = (old->default_specialist != real_packet->default_specialist);
50474 if (differ) {
50475 BV_SET(fields, 0);
50476 }
50477
50478 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
50479 if (differ) {
50480 BV_SET(fields, 1);
50481 }
50482
50483 differ = (old->global_init_techs_count != real_packet->global_init_techs_count);
50484 if (!differ) {
50485 int i;
50486
50487 for (i = 0; i < real_packet->global_init_techs_count; i++) {
50488 differ = (old->global_init_techs[i] != real_packet->global_init_techs[i]);
50489 if (differ) {
50490 break;
50491 }
50492 }
50493 }
50494 if (differ) {
50495 BV_SET(fields, 2);
50496 }
50497
50498 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
50499 if (differ) {
50500 BV_SET(fields, 3);
50501 }
50502
50503 differ = (old->global_init_buildings_count != real_packet->global_init_buildings_count);
50504 if (!differ) {
50505 int i;
50506
50507 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
50508 differ = (old->global_init_buildings[i] != real_packet->global_init_buildings[i]);
50509 if (differ) {
50510 break;
50511 }
50512 }
50513 }
50514 if (differ) {
50515 BV_SET(fields, 4);
50516 }
50517
50518 differ = (old->veteran_levels != real_packet->veteran_levels);
50519 if (differ) {
50520 BV_SET(fields, 5);
50521 }
50522
50523 differ = (old->veteran_levels != real_packet->veteran_levels);
50524 if (!differ) {
50525 int i;
50526
50527 for (i = 0; i < real_packet->veteran_levels; i++) {
50528 differ = (strcmp(old->veteran_name[i], real_packet->veteran_name[i]) != 0);
50529 if (differ) {
50530 break;
50531 }
50532 }
50533 }
50534 if (differ) {
50535 BV_SET(fields, 6);
50536 }
50537
50538 differ = (old->veteran_levels != real_packet->veteran_levels);
50539 if (!differ) {
50540 int i;
50541
50542 for (i = 0; i < real_packet->veteran_levels; i++) {
50543 differ = (old->power_fact[i] != real_packet->power_fact[i]);
50544 if (differ) {
50545 break;
50546 }
50547 }
50548 }
50549 if (differ) {
50550 BV_SET(fields, 7);
50551 }
50552
50553 differ = (old->veteran_levels != real_packet->veteran_levels);
50554 if (!differ) {
50555 int i;
50556
50557 for (i = 0; i < real_packet->veteran_levels; i++) {
50558 differ = (old->move_bonus[i] != real_packet->move_bonus[i]);
50559 if (differ) {
50560 break;
50561 }
50562 }
50563 }
50564 if (differ) {
50565 BV_SET(fields, 8);
50566 }
50567
50568 differ = (old->veteran_levels != real_packet->veteran_levels);
50569 if (!differ) {
50570 int i;
50571
50572 for (i = 0; i < real_packet->veteran_levels; i++) {
50573 differ = (old->base_raise_chance[i] != real_packet->base_raise_chance[i]);
50574 if (differ) {
50575 break;
50576 }
50577 }
50578 }
50579 if (differ) {
50580 BV_SET(fields, 9);
50581 }
50582
50583 differ = (old->veteran_levels != real_packet->veteran_levels);
50584 if (!differ) {
50585 int i;
50586
50587 for (i = 0; i < real_packet->veteran_levels; i++) {
50588 differ = (old->work_raise_chance[i] != real_packet->work_raise_chance[i]);
50589 if (differ) {
50590 break;
50591 }
50592 }
50593 }
50594 if (differ) {
50595 BV_SET(fields, 10);
50596 }
50597
50598 differ = (old->background_red != real_packet->background_red);
50599 if (differ) {
50600 BV_SET(fields, 11);
50601 }
50602
50603 differ = (old->background_green != real_packet->background_green);
50604 if (differ) {
50605 BV_SET(fields, 12);
50606 }
50607
50608 differ = (old->background_blue != real_packet->background_blue);
50609 if (differ) {
50610 BV_SET(fields, 13);
50611 }
50612
50613
50614#ifdef FREECIV_JSON_CONNECTION
50615 field_addr.name = "fields";
50616#endif /* FREECIV_JSON_CONNECTION */
50617 e = 0;
50618 e |= DIO_BV_PUT(&dout, &field_addr, fields);
50619 if (e) {
50620 log_packet_detailed("fields bitvector error detected");
50621 }
50622
50623 if (BV_ISSET(fields, 0)) {
50624 log_packet_detailed(" field 'default_specialist' has changed");
50625#ifdef FREECIV_JSON_CONNECTION
50626 field_addr.name = "default_specialist";
50627#endif /* FREECIV_JSON_CONNECTION */
50628 e = 0;
50629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
50630 if (e) {
50631 log_packet_detailed("'default_specialist' field error detected");
50632 }
50633 }
50634 if (BV_ISSET(fields, 1)) {
50635 log_packet_detailed(" field 'global_init_techs_count' has changed");
50636#ifdef FREECIV_JSON_CONNECTION
50637 field_addr.name = "global_init_techs_count";
50638#endif /* FREECIV_JSON_CONNECTION */
50639 e = 0;
50640 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
50641 if (e) {
50642 log_packet_detailed("'global_init_techs_count' field error detected");
50643 }
50644 }
50645 if (BV_ISSET(fields, 2)) {
50646 log_packet_detailed(" field 'global_init_techs' has changed");
50647#ifdef FREECIV_JSON_CONNECTION
50648 field_addr.name = "global_init_techs";
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->global_init_techs_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->global_init_techs_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(uint16, &dout, &field_addr, real_packet->global_init_techs[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("'global_init_techs' field error detected");
50678 }
50679 }
50680 if (BV_ISSET(fields, 3)) {
50681 log_packet_detailed(" field 'global_init_buildings_count' has changed");
50682#ifdef FREECIV_JSON_CONNECTION
50683 field_addr.name = "global_init_buildings_count";
50684#endif /* FREECIV_JSON_CONNECTION */
50685 e = 0;
50686 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
50687 if (e) {
50688 log_packet_detailed("'global_init_buildings_count' field error detected");
50689 }
50690 }
50691 if (BV_ISSET(fields, 4)) {
50692 log_packet_detailed(" field 'global_init_buildings' has changed");
50693#ifdef FREECIV_JSON_CONNECTION
50694 field_addr.name = "global_init_buildings";
50695#endif /* FREECIV_JSON_CONNECTION */
50696 e = 0;
50697 {
50698 int i;
50699
50700#ifdef FREECIV_JSON_CONNECTION
50701 /* Create the array. */
50702 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
50703
50704 /* Enter the array. */
50705 field_addr.sub_location = plocation_elem_new(0);
50706#endif /* FREECIV_JSON_CONNECTION */
50707
50708 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
50709#ifdef FREECIV_JSON_CONNECTION
50710 /* Next array element. */
50711 field_addr.sub_location->number = i;
50712#endif /* FREECIV_JSON_CONNECTION */
50713
50714 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
50715 }
50716
50717#ifdef FREECIV_JSON_CONNECTION
50718 /* Exit array. */
50719 FC_FREE(field_addr.sub_location);
50720#endif /* FREECIV_JSON_CONNECTION */
50721 }
50722 if (e) {
50723 log_packet_detailed("'global_init_buildings' field error detected");
50724 }
50725 }
50726 if (BV_ISSET(fields, 5)) {
50727 log_packet_detailed(" field 'veteran_levels' has changed");
50728#ifdef FREECIV_JSON_CONNECTION
50729 field_addr.name = "veteran_levels";
50730#endif /* FREECIV_JSON_CONNECTION */
50731 e = 0;
50732 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
50733 if (e) {
50734 log_packet_detailed("'veteran_levels' field error detected");
50735 }
50736 }
50737 if (BV_ISSET(fields, 6)) {
50738 log_packet_detailed(" field 'veteran_name' has changed");
50739#ifdef FREECIV_JSON_CONNECTION
50740 field_addr.name = "veteran_name";
50741#endif /* FREECIV_JSON_CONNECTION */
50742 e = 0;
50743 {
50744 int i;
50745
50746#ifdef FREECIV_JSON_CONNECTION
50747 /* Create the array. */
50748 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50749
50750 /* Enter the array. */
50751 field_addr.sub_location = plocation_elem_new(0);
50752#endif /* FREECIV_JSON_CONNECTION */
50753
50754 for (i = 0; i < real_packet->veteran_levels; i++) {
50755#ifdef FREECIV_JSON_CONNECTION
50756 /* Next array element. */
50757 field_addr.sub_location->number = i;
50758#endif /* FREECIV_JSON_CONNECTION */
50759
50760 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
50761 }
50762
50763#ifdef FREECIV_JSON_CONNECTION
50764 /* Exit array. */
50765 FC_FREE(field_addr.sub_location);
50766#endif /* FREECIV_JSON_CONNECTION */
50767 }
50768 if (e) {
50769 log_packet_detailed("'veteran_name' field error detected");
50770 }
50771 }
50772 if (BV_ISSET(fields, 7)) {
50773 log_packet_detailed(" field 'power_fact' has changed");
50774#ifdef FREECIV_JSON_CONNECTION
50775 field_addr.name = "power_fact";
50776#endif /* FREECIV_JSON_CONNECTION */
50777 e = 0;
50778 {
50779 int i;
50780
50781#ifdef FREECIV_JSON_CONNECTION
50782 /* Create the array. */
50783 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50784
50785 /* Enter the array. */
50786 field_addr.sub_location = plocation_elem_new(0);
50787#endif /* FREECIV_JSON_CONNECTION */
50788
50789 for (i = 0; i < real_packet->veteran_levels; i++) {
50790#ifdef FREECIV_JSON_CONNECTION
50791 /* Next array element. */
50792 field_addr.sub_location->number = i;
50793#endif /* FREECIV_JSON_CONNECTION */
50794
50795 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
50796 }
50797
50798#ifdef FREECIV_JSON_CONNECTION
50799 /* Exit array. */
50800 FC_FREE(field_addr.sub_location);
50801#endif /* FREECIV_JSON_CONNECTION */
50802 }
50803 if (e) {
50804 log_packet_detailed("'power_fact' field error detected");
50805 }
50806 }
50807 if (BV_ISSET(fields, 8)) {
50808 log_packet_detailed(" field 'move_bonus' has changed");
50809#ifdef FREECIV_JSON_CONNECTION
50810 field_addr.name = "move_bonus";
50811#endif /* FREECIV_JSON_CONNECTION */
50812 e = 0;
50813 {
50814 int i;
50815
50816#ifdef FREECIV_JSON_CONNECTION
50817 /* Create the array. */
50818 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50819
50820 /* Enter the array. */
50821 field_addr.sub_location = plocation_elem_new(0);
50822#endif /* FREECIV_JSON_CONNECTION */
50823
50824 for (i = 0; i < real_packet->veteran_levels; i++) {
50825#ifdef FREECIV_JSON_CONNECTION
50826 /* Next array element. */
50827 field_addr.sub_location->number = i;
50828#endif /* FREECIV_JSON_CONNECTION */
50829
50830 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
50831 }
50832
50833#ifdef FREECIV_JSON_CONNECTION
50834 /* Exit array. */
50835 FC_FREE(field_addr.sub_location);
50836#endif /* FREECIV_JSON_CONNECTION */
50837 }
50838 if (e) {
50839 log_packet_detailed("'move_bonus' field error detected");
50840 }
50841 }
50842 if (BV_ISSET(fields, 9)) {
50843 log_packet_detailed(" field 'base_raise_chance' has changed");
50844#ifdef FREECIV_JSON_CONNECTION
50845 field_addr.name = "base_raise_chance";
50846#endif /* FREECIV_JSON_CONNECTION */
50847 e = 0;
50848 {
50849 int i;
50850
50851#ifdef FREECIV_JSON_CONNECTION
50852 /* Create the array. */
50853 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50854
50855 /* Enter the array. */
50856 field_addr.sub_location = plocation_elem_new(0);
50857#endif /* FREECIV_JSON_CONNECTION */
50858
50859 for (i = 0; i < real_packet->veteran_levels; i++) {
50860#ifdef FREECIV_JSON_CONNECTION
50861 /* Next array element. */
50862 field_addr.sub_location->number = i;
50863#endif /* FREECIV_JSON_CONNECTION */
50864
50865 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
50866 }
50867
50868#ifdef FREECIV_JSON_CONNECTION
50869 /* Exit array. */
50870 FC_FREE(field_addr.sub_location);
50871#endif /* FREECIV_JSON_CONNECTION */
50872 }
50873 if (e) {
50874 log_packet_detailed("'base_raise_chance' field error detected");
50875 }
50876 }
50877 if (BV_ISSET(fields, 10)) {
50878 log_packet_detailed(" field 'work_raise_chance' has changed");
50879#ifdef FREECIV_JSON_CONNECTION
50880 field_addr.name = "work_raise_chance";
50881#endif /* FREECIV_JSON_CONNECTION */
50882 e = 0;
50883 {
50884 int i;
50885
50886#ifdef FREECIV_JSON_CONNECTION
50887 /* Create the array. */
50888 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
50889
50890 /* Enter the array. */
50891 field_addr.sub_location = plocation_elem_new(0);
50892#endif /* FREECIV_JSON_CONNECTION */
50893
50894 for (i = 0; i < real_packet->veteran_levels; i++) {
50895#ifdef FREECIV_JSON_CONNECTION
50896 /* Next array element. */
50897 field_addr.sub_location->number = i;
50898#endif /* FREECIV_JSON_CONNECTION */
50899
50900 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
50901 }
50902
50903#ifdef FREECIV_JSON_CONNECTION
50904 /* Exit array. */
50905 FC_FREE(field_addr.sub_location);
50906#endif /* FREECIV_JSON_CONNECTION */
50907 }
50908 if (e) {
50909 log_packet_detailed("'work_raise_chance' field error detected");
50910 }
50911 }
50912 if (BV_ISSET(fields, 11)) {
50913 log_packet_detailed(" field 'background_red' has changed");
50914#ifdef FREECIV_JSON_CONNECTION
50915 field_addr.name = "background_red";
50916#endif /* FREECIV_JSON_CONNECTION */
50917 e = 0;
50918 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
50919 if (e) {
50920 log_packet_detailed("'background_red' field error detected");
50921 }
50922 }
50923 if (BV_ISSET(fields, 12)) {
50924 log_packet_detailed(" field 'background_green' has changed");
50925#ifdef FREECIV_JSON_CONNECTION
50926 field_addr.name = "background_green";
50927#endif /* FREECIV_JSON_CONNECTION */
50928 e = 0;
50929 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
50930 if (e) {
50931 log_packet_detailed("'background_green' field error detected");
50932 }
50933 }
50934 if (BV_ISSET(fields, 13)) {
50935 log_packet_detailed(" field 'background_blue' has changed");
50936#ifdef FREECIV_JSON_CONNECTION
50937 field_addr.name = "background_blue";
50938#endif /* FREECIV_JSON_CONNECTION */
50939 e = 0;
50940 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
50941 if (e) {
50942 log_packet_detailed("'background_blue' field error detected");
50943 }
50944 }
50945
50946 *old = *real_packet;
50947#endif /* FREECIV_DELTA_PROTOCOL */
50948#ifndef FREECIV_DELTA_PROTOCOL
50949#ifdef FREECIV_JSON_CONNECTION
50950 field_addr.name = "default_specialist";
50951#endif /* FREECIV_JSON_CONNECTION */
50952 e = 0;
50953 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->default_specialist);
50954 if (e) {
50955 log_packet_detailed("'default_specialist' field error detected");
50956 }
50957#ifdef FREECIV_JSON_CONNECTION
50958 field_addr.name = "global_init_techs_count";
50959#endif /* FREECIV_JSON_CONNECTION */
50960 e = 0;
50961 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_techs_count);
50962 if (e) {
50963 log_packet_detailed("'global_init_techs_count' field error detected");
50964 }
50965#ifdef FREECIV_JSON_CONNECTION
50966 field_addr.name = "global_init_techs";
50967#endif /* FREECIV_JSON_CONNECTION */
50968 e = 0;
50969 {
50970 int i;
50971
50972#ifdef FREECIV_JSON_CONNECTION
50973 /* Create the array. */
50974 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_techs_count);
50975
50976 /* Enter the array. */
50977 field_addr.sub_location = plocation_elem_new(0);
50978#endif /* FREECIV_JSON_CONNECTION */
50979
50980 for (i = 0; i < real_packet->global_init_techs_count; i++) {
50981#ifdef FREECIV_JSON_CONNECTION
50982 /* Next array element. */
50983 field_addr.sub_location->number = i;
50984#endif /* FREECIV_JSON_CONNECTION */
50985
50986 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->global_init_techs[i]);
50987 }
50988
50989#ifdef FREECIV_JSON_CONNECTION
50990 /* Exit array. */
50991 FC_FREE(field_addr.sub_location);
50992#endif /* FREECIV_JSON_CONNECTION */
50993 }
50994 if (e) {
50995 log_packet_detailed("'global_init_techs' field error detected");
50996 }
50997#ifdef FREECIV_JSON_CONNECTION
50998 field_addr.name = "global_init_buildings_count";
50999#endif /* FREECIV_JSON_CONNECTION */
51000 e = 0;
51001 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings_count);
51002 if (e) {
51003 log_packet_detailed("'global_init_buildings_count' field error detected");
51004 }
51005#ifdef FREECIV_JSON_CONNECTION
51006 field_addr.name = "global_init_buildings";
51007#endif /* FREECIV_JSON_CONNECTION */
51008 e = 0;
51009 {
51010 int i;
51011
51012#ifdef FREECIV_JSON_CONNECTION
51013 /* Create the array. */
51014 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->global_init_buildings_count);
51015
51016 /* Enter the array. */
51017 field_addr.sub_location = plocation_elem_new(0);
51018#endif /* FREECIV_JSON_CONNECTION */
51019
51020 for (i = 0; i < real_packet->global_init_buildings_count; i++) {
51021#ifdef FREECIV_JSON_CONNECTION
51022 /* Next array element. */
51023 field_addr.sub_location->number = i;
51024#endif /* FREECIV_JSON_CONNECTION */
51025
51026 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->global_init_buildings[i]);
51027 }
51028
51029#ifdef FREECIV_JSON_CONNECTION
51030 /* Exit array. */
51031 FC_FREE(field_addr.sub_location);
51032#endif /* FREECIV_JSON_CONNECTION */
51033 }
51034 if (e) {
51035 log_packet_detailed("'global_init_buildings' field error detected");
51036 }
51037#ifdef FREECIV_JSON_CONNECTION
51038 field_addr.name = "veteran_levels";
51039#endif /* FREECIV_JSON_CONNECTION */
51040 e = 0;
51041 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran_levels);
51042 if (e) {
51043 log_packet_detailed("'veteran_levels' field error detected");
51044 }
51045#ifdef FREECIV_JSON_CONNECTION
51046 field_addr.name = "veteran_name";
51047#endif /* FREECIV_JSON_CONNECTION */
51048 e = 0;
51049 {
51050 int i;
51051
51052#ifdef FREECIV_JSON_CONNECTION
51053 /* Create the array. */
51054 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
51055
51056 /* Enter the array. */
51057 field_addr.sub_location = plocation_elem_new(0);
51058#endif /* FREECIV_JSON_CONNECTION */
51059
51060 for (i = 0; i < real_packet->veteran_levels; i++) {
51061#ifdef FREECIV_JSON_CONNECTION
51062 /* Next array element. */
51063 field_addr.sub_location->number = i;
51064#endif /* FREECIV_JSON_CONNECTION */
51065
51066 e |= DIO_PUT(string, &dout, &field_addr, real_packet->veteran_name[i]);
51067 }
51068
51069#ifdef FREECIV_JSON_CONNECTION
51070 /* Exit array. */
51071 FC_FREE(field_addr.sub_location);
51072#endif /* FREECIV_JSON_CONNECTION */
51073 }
51074 if (e) {
51075 log_packet_detailed("'veteran_name' field error detected");
51076 }
51077#ifdef FREECIV_JSON_CONNECTION
51078 field_addr.name = "power_fact";
51079#endif /* FREECIV_JSON_CONNECTION */
51080 e = 0;
51081 {
51082 int i;
51083
51084#ifdef FREECIV_JSON_CONNECTION
51085 /* Create the array. */
51086 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
51087
51088 /* Enter the array. */
51089 field_addr.sub_location = plocation_elem_new(0);
51090#endif /* FREECIV_JSON_CONNECTION */
51091
51092 for (i = 0; i < real_packet->veteran_levels; i++) {
51093#ifdef FREECIV_JSON_CONNECTION
51094 /* Next array element. */
51095 field_addr.sub_location->number = i;
51096#endif /* FREECIV_JSON_CONNECTION */
51097
51098 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->power_fact[i]);
51099 }
51100
51101#ifdef FREECIV_JSON_CONNECTION
51102 /* Exit array. */
51103 FC_FREE(field_addr.sub_location);
51104#endif /* FREECIV_JSON_CONNECTION */
51105 }
51106 if (e) {
51107 log_packet_detailed("'power_fact' field error detected");
51108 }
51109#ifdef FREECIV_JSON_CONNECTION
51110 field_addr.name = "move_bonus";
51111#endif /* FREECIV_JSON_CONNECTION */
51112 e = 0;
51113 {
51114 int i;
51115
51116#ifdef FREECIV_JSON_CONNECTION
51117 /* Create the array. */
51118 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
51119
51120 /* Enter the array. */
51121 field_addr.sub_location = plocation_elem_new(0);
51122#endif /* FREECIV_JSON_CONNECTION */
51123
51124 for (i = 0; i < real_packet->veteran_levels; i++) {
51125#ifdef FREECIV_JSON_CONNECTION
51126 /* Next array element. */
51127 field_addr.sub_location->number = i;
51128#endif /* FREECIV_JSON_CONNECTION */
51129
51130 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_bonus[i]);
51131 }
51132
51133#ifdef FREECIV_JSON_CONNECTION
51134 /* Exit array. */
51135 FC_FREE(field_addr.sub_location);
51136#endif /* FREECIV_JSON_CONNECTION */
51137 }
51138 if (e) {
51139 log_packet_detailed("'move_bonus' field error detected");
51140 }
51141#ifdef FREECIV_JSON_CONNECTION
51142 field_addr.name = "base_raise_chance";
51143#endif /* FREECIV_JSON_CONNECTION */
51144 e = 0;
51145 {
51146 int i;
51147
51148#ifdef FREECIV_JSON_CONNECTION
51149 /* Create the array. */
51150 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
51151
51152 /* Enter the array. */
51153 field_addr.sub_location = plocation_elem_new(0);
51154#endif /* FREECIV_JSON_CONNECTION */
51155
51156 for (i = 0; i < real_packet->veteran_levels; i++) {
51157#ifdef FREECIV_JSON_CONNECTION
51158 /* Next array element. */
51159 field_addr.sub_location->number = i;
51160#endif /* FREECIV_JSON_CONNECTION */
51161
51162 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_raise_chance[i]);
51163 }
51164
51165#ifdef FREECIV_JSON_CONNECTION
51166 /* Exit array. */
51167 FC_FREE(field_addr.sub_location);
51168#endif /* FREECIV_JSON_CONNECTION */
51169 }
51170 if (e) {
51171 log_packet_detailed("'base_raise_chance' field error detected");
51172 }
51173#ifdef FREECIV_JSON_CONNECTION
51174 field_addr.name = "work_raise_chance";
51175#endif /* FREECIV_JSON_CONNECTION */
51176 e = 0;
51177 {
51178 int i;
51179
51180#ifdef FREECIV_JSON_CONNECTION
51181 /* Create the array. */
51182 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->veteran_levels);
51183
51184 /* Enter the array. */
51185 field_addr.sub_location = plocation_elem_new(0);
51186#endif /* FREECIV_JSON_CONNECTION */
51187
51188 for (i = 0; i < real_packet->veteran_levels; i++) {
51189#ifdef FREECIV_JSON_CONNECTION
51190 /* Next array element. */
51191 field_addr.sub_location->number = i;
51192#endif /* FREECIV_JSON_CONNECTION */
51193
51194 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->work_raise_chance[i]);
51195 }
51196
51197#ifdef FREECIV_JSON_CONNECTION
51198 /* Exit array. */
51199 FC_FREE(field_addr.sub_location);
51200#endif /* FREECIV_JSON_CONNECTION */
51201 }
51202 if (e) {
51203 log_packet_detailed("'work_raise_chance' field error detected");
51204 }
51205#ifdef FREECIV_JSON_CONNECTION
51206 field_addr.name = "background_red";
51207#endif /* FREECIV_JSON_CONNECTION */
51208 e = 0;
51209 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_red);
51210 if (e) {
51211 log_packet_detailed("'background_red' field error detected");
51212 }
51213#ifdef FREECIV_JSON_CONNECTION
51214 field_addr.name = "background_green";
51215#endif /* FREECIV_JSON_CONNECTION */
51216 e = 0;
51217 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_green);
51218 if (e) {
51219 log_packet_detailed("'background_green' field error detected");
51220 }
51221#ifdef FREECIV_JSON_CONNECTION
51222 field_addr.name = "background_blue";
51223#endif /* FREECIV_JSON_CONNECTION */
51224 e = 0;
51225 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->background_blue);
51226 if (e) {
51227 log_packet_detailed("'background_blue' field error detected");
51228 }
51229
51230#endif
51232}
51233
51235{
51236 if (!pc->used) {
51237 log_error("WARNING: trying to send data to the closed connection %s",
51239 return -1;
51240 }
51241 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GAME].packet != NULL, -1,
51242 "Handler for PACKET_RULESET_GAME not installed");
51243 return pc->phs.handlers->send[PACKET_RULESET_GAME].packet(pc, packet);
51244}
51245
51246void lsend_packet_ruleset_game(struct conn_list *dest, const struct packet_ruleset_game *packet)
51247{
51248 conn_list_iterate(dest, pconn) {
51251}
51252
51253#ifdef FREECIV_DELTA_PROTOCOL
51254#define hash_packet_ruleset_specialist_100 hash_const
51255
51256#define cmp_packet_ruleset_specialist_100 cmp_const
51257
51259#endif /* FREECIV_DELTA_PROTOCOL */
51260
51262{
51263#ifdef FREECIV_DELTA_PROTOCOL
51265 struct packet_ruleset_specialist *old;
51266 struct genhash **hash = pc->phs.received + PACKET_RULESET_SPECIALIST;
51267#endif /* FREECIV_DELTA_PROTOCOL */
51269#ifdef FREECIV_JSON_CONNECTION
51270 struct plocation field_addr;
51271 {
51275 }
51276#endif /* FREECIV_JSON_CONNECTION */
51277
51278#ifdef FREECIV_DELTA_PROTOCOL
51279#ifdef FREECIV_JSON_CONNECTION
51280 field_addr.name = "fields";
51281#endif /* FREECIV_JSON_CONNECTION */
51282 DIO_BV_GET(&din, &field_addr, fields);
51283
51284#else /* FREECIV_DELTA_PROTOCOL */
51285#ifdef FREECIV_JSON_CONNECTION
51286 field_addr.name = "id";
51287#endif /* FREECIV_JSON_CONNECTION */
51288 {
51289 int readin;
51290
51291 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51293 }
51294 real_packet->id = readin;
51295 }
51296#ifdef FREECIV_JSON_CONNECTION
51297 field_addr.name = "plural_name";
51298#endif /* FREECIV_JSON_CONNECTION */
51299 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
51300 RECEIVE_PACKET_FIELD_ERROR(plural_name);
51301 }
51302#ifdef FREECIV_JSON_CONNECTION
51303 field_addr.name = "rule_name";
51304#endif /* FREECIV_JSON_CONNECTION */
51305 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
51306 RECEIVE_PACKET_FIELD_ERROR(rule_name);
51307 }
51308#ifdef FREECIV_JSON_CONNECTION
51309 field_addr.name = "short_name";
51310#endif /* FREECIV_JSON_CONNECTION */
51311 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
51312 RECEIVE_PACKET_FIELD_ERROR(short_name);
51313 }
51314#ifdef FREECIV_JSON_CONNECTION
51315 field_addr.name = "graphic_str";
51316#endif /* FREECIV_JSON_CONNECTION */
51317 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
51318 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
51319 }
51320#ifdef FREECIV_JSON_CONNECTION
51321 field_addr.name = "graphic_alt";
51322#endif /* FREECIV_JSON_CONNECTION */
51323 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
51324 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
51325 }
51326#ifdef FREECIV_JSON_CONNECTION
51327 field_addr.name = "reqs_count";
51328#endif /* FREECIV_JSON_CONNECTION */
51329 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
51330 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
51331 }
51332#ifdef FREECIV_JSON_CONNECTION
51333 field_addr.name = "reqs";
51334#endif /* FREECIV_JSON_CONNECTION */
51335 if (real_packet->reqs_count > MAX_NUM_REQS) {
51336 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
51337 }
51338 {
51339 int i;
51340
51341#ifdef FREECIV_JSON_CONNECTION
51342 /* Enter array. */
51343 field_addr.sub_location = plocation_elem_new(0);
51344#endif /* FREECIV_JSON_CONNECTION */
51345
51346 for (i = 0; i < real_packet->reqs_count; i++) {
51347#ifdef FREECIV_JSON_CONNECTION
51348 field_addr.sub_location->number = i;
51349#endif /* FREECIV_JSON_CONNECTION */
51350
51351 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
51353 }
51354 }
51355
51356#ifdef FREECIV_JSON_CONNECTION
51357 /* Exit array. */
51358 FC_FREE(field_addr.sub_location);
51359#endif /* FREECIV_JSON_CONNECTION */
51360 }
51361#ifdef FREECIV_JSON_CONNECTION
51362 field_addr.name = "helptext";
51363#endif /* FREECIV_JSON_CONNECTION */
51364 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
51366 }
51367#endif
51368 log_packet_detailed("packet_ruleset_specialist_100: got info about ()");
51369
51370#ifdef FREECIV_DELTA_PROTOCOL
51371 if (NULL == *hash) {
51373 NULL, NULL, NULL, free);
51374 }
51375
51376 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51377 *real_packet = *old;
51378 } else {
51379 log_packet_detailed(" no old info");
51380 memset(real_packet, 0, sizeof(*real_packet));
51381 }
51382
51383 if (BV_ISSET(fields, 0)) {
51384 log_packet_detailed(" got field 'id'");
51385#ifdef FREECIV_JSON_CONNECTION
51386 field_addr.name = "id";
51387#endif /* FREECIV_JSON_CONNECTION */
51388 {
51389 int readin;
51390
51391 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
51393 }
51394 real_packet->id = readin;
51395 }
51396 }
51397 if (BV_ISSET(fields, 1)) {
51398 log_packet_detailed(" got field 'plural_name'");
51399#ifdef FREECIV_JSON_CONNECTION
51400 field_addr.name = "plural_name";
51401#endif /* FREECIV_JSON_CONNECTION */
51402 if (!DIO_GET(string, &din, &field_addr, real_packet->plural_name, sizeof(real_packet->plural_name))) {
51403 RECEIVE_PACKET_FIELD_ERROR(plural_name);
51404 }
51405 }
51406 if (BV_ISSET(fields, 2)) {
51407 log_packet_detailed(" got field 'rule_name'");
51408#ifdef FREECIV_JSON_CONNECTION
51409 field_addr.name = "rule_name";
51410#endif /* FREECIV_JSON_CONNECTION */
51411 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
51412 RECEIVE_PACKET_FIELD_ERROR(rule_name);
51413 }
51414 }
51415 if (BV_ISSET(fields, 3)) {
51416 log_packet_detailed(" got field 'short_name'");
51417#ifdef FREECIV_JSON_CONNECTION
51418 field_addr.name = "short_name";
51419#endif /* FREECIV_JSON_CONNECTION */
51420 if (!DIO_GET(string, &din, &field_addr, real_packet->short_name, sizeof(real_packet->short_name))) {
51421 RECEIVE_PACKET_FIELD_ERROR(short_name);
51422 }
51423 }
51424 if (BV_ISSET(fields, 4)) {
51425 log_packet_detailed(" got field 'graphic_str'");
51426#ifdef FREECIV_JSON_CONNECTION
51427 field_addr.name = "graphic_str";
51428#endif /* FREECIV_JSON_CONNECTION */
51429 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
51430 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
51431 }
51432 }
51433 if (BV_ISSET(fields, 5)) {
51434 log_packet_detailed(" got field 'graphic_alt'");
51435#ifdef FREECIV_JSON_CONNECTION
51436 field_addr.name = "graphic_alt";
51437#endif /* FREECIV_JSON_CONNECTION */
51438 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
51439 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
51440 }
51441 }
51442 if (BV_ISSET(fields, 6)) {
51443 log_packet_detailed(" got field 'reqs_count'");
51444#ifdef FREECIV_JSON_CONNECTION
51445 field_addr.name = "reqs_count";
51446#endif /* FREECIV_JSON_CONNECTION */
51447 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
51448 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
51449 }
51450 }
51451 if (BV_ISSET(fields, 7)) {
51452 log_packet_detailed(" got field 'reqs'");
51453#ifdef FREECIV_JSON_CONNECTION
51454 field_addr.name = "reqs";
51455#endif /* FREECIV_JSON_CONNECTION */
51456 if (real_packet->reqs_count > MAX_NUM_REQS) {
51457 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
51458 }
51459 {
51460 int i;
51461
51462#ifdef FREECIV_JSON_CONNECTION
51463 /* Enter array. */
51464 field_addr.sub_location = plocation_elem_new(0);
51465#endif /* FREECIV_JSON_CONNECTION */
51466
51467 for (i = 0; i < real_packet->reqs_count; i++) {
51468#ifdef FREECIV_JSON_CONNECTION
51469 field_addr.sub_location->number = i;
51470#endif /* FREECIV_JSON_CONNECTION */
51471
51472 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
51474 }
51475 }
51476
51477#ifdef FREECIV_JSON_CONNECTION
51478 /* Exit array. */
51479 FC_FREE(field_addr.sub_location);
51480#endif /* FREECIV_JSON_CONNECTION */
51481 }
51482 }
51483 if (BV_ISSET(fields, 8)) {
51484 log_packet_detailed(" got field 'helptext'");
51485#ifdef FREECIV_JSON_CONNECTION
51486 field_addr.name = "helptext";
51487#endif /* FREECIV_JSON_CONNECTION */
51488 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
51490 }
51491 }
51492
51493 if (NULL == old) {
51494 old = fc_malloc(sizeof(*old));
51495 *old = *real_packet;
51496 genhash_insert(*hash, old, old);
51497 } else {
51498 *old = *real_packet;
51499 }
51500
51501#endif /* FREECIV_DELTA_PROTOCOL */
51503}
51504
51506{
51507 const struct packet_ruleset_specialist *real_packet = packet;
51508 int e;
51509#ifdef FREECIV_DELTA_PROTOCOL
51511 struct packet_ruleset_specialist *old;
51512 bool differ;
51513 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SPECIALIST;
51514#endif /* FREECIV_DELTA_PROTOCOL */
51516#ifdef FREECIV_JSON_CONNECTION
51517 struct plocation field_addr;
51518 {
51522 }
51523#endif /* FREECIV_JSON_CONNECTION */
51524
51525 log_packet_detailed("packet_ruleset_specialist_100: sending info about ()");
51526
51527#ifdef FREECIV_DELTA_PROTOCOL
51528 if (NULL == *hash) {
51530 NULL, NULL, NULL, free);
51531 }
51532 BV_CLR_ALL(fields);
51533
51534 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
51535 old = fc_malloc(sizeof(*old));
51536 *old = *real_packet;
51537 genhash_insert(*hash, old, old);
51538 memset(old, 0, sizeof(*old));
51539 }
51540 differ = (old->id != real_packet->id);
51541 if (differ) {
51542 BV_SET(fields, 0);
51543 }
51544
51545 differ = (strcmp(old->plural_name, real_packet->plural_name) != 0);
51546 if (differ) {
51547 BV_SET(fields, 1);
51548 }
51549
51550 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
51551 if (differ) {
51552 BV_SET(fields, 2);
51553 }
51554
51555 differ = (strcmp(old->short_name, real_packet->short_name) != 0);
51556 if (differ) {
51557 BV_SET(fields, 3);
51558 }
51559
51560 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
51561 if (differ) {
51562 BV_SET(fields, 4);
51563 }
51564
51565 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
51566 if (differ) {
51567 BV_SET(fields, 5);
51568 }
51569
51570 differ = (old->reqs_count != real_packet->reqs_count);
51571 if (differ) {
51572 BV_SET(fields, 6);
51573 }
51574
51575 differ = (old->reqs_count != real_packet->reqs_count);
51576 if (!differ) {
51577 int i;
51578
51579 for (i = 0; i < real_packet->reqs_count; i++) {
51580 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
51581 if (differ) {
51582 break;
51583 }
51584 }
51585 }
51586 if (differ) {
51587 BV_SET(fields, 7);
51588 }
51589
51590 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
51591 if (differ) {
51592 BV_SET(fields, 8);
51593 }
51594
51595
51596#ifdef FREECIV_JSON_CONNECTION
51597 field_addr.name = "fields";
51598#endif /* FREECIV_JSON_CONNECTION */
51599 e = 0;
51600 e |= DIO_BV_PUT(&dout, &field_addr, fields);
51601 if (e) {
51602 log_packet_detailed("fields bitvector error detected");
51603 }
51604
51605 if (BV_ISSET(fields, 0)) {
51606 log_packet_detailed(" field 'id' has changed");
51607#ifdef FREECIV_JSON_CONNECTION
51608 field_addr.name = "id";
51609#endif /* FREECIV_JSON_CONNECTION */
51610 e = 0;
51611 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51612 if (e) {
51613 log_packet_detailed("'id' field error detected");
51614 }
51615 }
51616 if (BV_ISSET(fields, 1)) {
51617 log_packet_detailed(" field 'plural_name' has changed");
51618#ifdef FREECIV_JSON_CONNECTION
51619 field_addr.name = "plural_name";
51620#endif /* FREECIV_JSON_CONNECTION */
51621 e = 0;
51622 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
51623 if (e) {
51624 log_packet_detailed("'plural_name' field error detected");
51625 }
51626 }
51627 if (BV_ISSET(fields, 2)) {
51628 log_packet_detailed(" field 'rule_name' has changed");
51629#ifdef FREECIV_JSON_CONNECTION
51630 field_addr.name = "rule_name";
51631#endif /* FREECIV_JSON_CONNECTION */
51632 e = 0;
51633 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
51634 if (e) {
51635 log_packet_detailed("'rule_name' field error detected");
51636 }
51637 }
51638 if (BV_ISSET(fields, 3)) {
51639 log_packet_detailed(" field 'short_name' has changed");
51640#ifdef FREECIV_JSON_CONNECTION
51641 field_addr.name = "short_name";
51642#endif /* FREECIV_JSON_CONNECTION */
51643 e = 0;
51644 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
51645 if (e) {
51646 log_packet_detailed("'short_name' field error detected");
51647 }
51648 }
51649 if (BV_ISSET(fields, 4)) {
51650 log_packet_detailed(" field 'graphic_str' has changed");
51651#ifdef FREECIV_JSON_CONNECTION
51652 field_addr.name = "graphic_str";
51653#endif /* FREECIV_JSON_CONNECTION */
51654 e = 0;
51655 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
51656 if (e) {
51657 log_packet_detailed("'graphic_str' field error detected");
51658 }
51659 }
51660 if (BV_ISSET(fields, 5)) {
51661 log_packet_detailed(" field 'graphic_alt' has changed");
51662#ifdef FREECIV_JSON_CONNECTION
51663 field_addr.name = "graphic_alt";
51664#endif /* FREECIV_JSON_CONNECTION */
51665 e = 0;
51666 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
51667 if (e) {
51668 log_packet_detailed("'graphic_alt' field error detected");
51669 }
51670 }
51671 if (BV_ISSET(fields, 6)) {
51672 log_packet_detailed(" field 'reqs_count' has changed");
51673#ifdef FREECIV_JSON_CONNECTION
51674 field_addr.name = "reqs_count";
51675#endif /* FREECIV_JSON_CONNECTION */
51676 e = 0;
51677 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
51678 if (e) {
51679 log_packet_detailed("'reqs_count' field error detected");
51680 }
51681 }
51682 if (BV_ISSET(fields, 7)) {
51683 log_packet_detailed(" field 'reqs' has changed");
51684#ifdef FREECIV_JSON_CONNECTION
51685 field_addr.name = "reqs";
51686#endif /* FREECIV_JSON_CONNECTION */
51687 e = 0;
51688 {
51689 int i;
51690
51691#ifdef FREECIV_JSON_CONNECTION
51692 /* Create the array. */
51693 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
51694
51695 /* Enter the array. */
51696 field_addr.sub_location = plocation_elem_new(0);
51697#endif /* FREECIV_JSON_CONNECTION */
51698
51699 for (i = 0; i < real_packet->reqs_count; i++) {
51700#ifdef FREECIV_JSON_CONNECTION
51701 /* Next array element. */
51702 field_addr.sub_location->number = i;
51703#endif /* FREECIV_JSON_CONNECTION */
51704
51705 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
51706 }
51707
51708#ifdef FREECIV_JSON_CONNECTION
51709 /* Exit array. */
51710 FC_FREE(field_addr.sub_location);
51711#endif /* FREECIV_JSON_CONNECTION */
51712 }
51713 if (e) {
51714 log_packet_detailed("'reqs' field error detected");
51715 }
51716 }
51717 if (BV_ISSET(fields, 8)) {
51718 log_packet_detailed(" field 'helptext' has changed");
51719#ifdef FREECIV_JSON_CONNECTION
51720 field_addr.name = "helptext";
51721#endif /* FREECIV_JSON_CONNECTION */
51722 e = 0;
51723 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
51724 if (e) {
51725 log_packet_detailed("'helptext' field error detected");
51726 }
51727 }
51728
51729 *old = *real_packet;
51730#endif /* FREECIV_DELTA_PROTOCOL */
51731#ifndef FREECIV_DELTA_PROTOCOL
51732#ifdef FREECIV_JSON_CONNECTION
51733 field_addr.name = "id";
51734#endif /* FREECIV_JSON_CONNECTION */
51735 e = 0;
51736 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
51737 if (e) {
51738 log_packet_detailed("'id' field error detected");
51739 }
51740#ifdef FREECIV_JSON_CONNECTION
51741 field_addr.name = "plural_name";
51742#endif /* FREECIV_JSON_CONNECTION */
51743 e = 0;
51744 e |= DIO_PUT(string, &dout, &field_addr, real_packet->plural_name);
51745 if (e) {
51746 log_packet_detailed("'plural_name' field error detected");
51747 }
51748#ifdef FREECIV_JSON_CONNECTION
51749 field_addr.name = "rule_name";
51750#endif /* FREECIV_JSON_CONNECTION */
51751 e = 0;
51752 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
51753 if (e) {
51754 log_packet_detailed("'rule_name' field error detected");
51755 }
51756#ifdef FREECIV_JSON_CONNECTION
51757 field_addr.name = "short_name";
51758#endif /* FREECIV_JSON_CONNECTION */
51759 e = 0;
51760 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_name);
51761 if (e) {
51762 log_packet_detailed("'short_name' field error detected");
51763 }
51764#ifdef FREECIV_JSON_CONNECTION
51765 field_addr.name = "graphic_str";
51766#endif /* FREECIV_JSON_CONNECTION */
51767 e = 0;
51768 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
51769 if (e) {
51770 log_packet_detailed("'graphic_str' field error detected");
51771 }
51772#ifdef FREECIV_JSON_CONNECTION
51773 field_addr.name = "graphic_alt";
51774#endif /* FREECIV_JSON_CONNECTION */
51775 e = 0;
51776 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
51777 if (e) {
51778 log_packet_detailed("'graphic_alt' field error detected");
51779 }
51780#ifdef FREECIV_JSON_CONNECTION
51781 field_addr.name = "reqs_count";
51782#endif /* FREECIV_JSON_CONNECTION */
51783 e = 0;
51784 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
51785 if (e) {
51786 log_packet_detailed("'reqs_count' field error detected");
51787 }
51788#ifdef FREECIV_JSON_CONNECTION
51789 field_addr.name = "reqs";
51790#endif /* FREECIV_JSON_CONNECTION */
51791 e = 0;
51792 {
51793 int i;
51794
51795#ifdef FREECIV_JSON_CONNECTION
51796 /* Create the array. */
51797 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
51798
51799 /* Enter the array. */
51800 field_addr.sub_location = plocation_elem_new(0);
51801#endif /* FREECIV_JSON_CONNECTION */
51802
51803 for (i = 0; i < real_packet->reqs_count; i++) {
51804#ifdef FREECIV_JSON_CONNECTION
51805 /* Next array element. */
51806 field_addr.sub_location->number = i;
51807#endif /* FREECIV_JSON_CONNECTION */
51808
51809 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
51810 }
51811
51812#ifdef FREECIV_JSON_CONNECTION
51813 /* Exit array. */
51814 FC_FREE(field_addr.sub_location);
51815#endif /* FREECIV_JSON_CONNECTION */
51816 }
51817 if (e) {
51818 log_packet_detailed("'reqs' field error detected");
51819 }
51820#ifdef FREECIV_JSON_CONNECTION
51821 field_addr.name = "helptext";
51822#endif /* FREECIV_JSON_CONNECTION */
51823 e = 0;
51824 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
51825 if (e) {
51826 log_packet_detailed("'helptext' field error detected");
51827 }
51828
51829#endif
51831}
51832
51834{
51835 if (!pc->used) {
51836 log_error("WARNING: trying to send data to the closed connection %s",
51838 return -1;
51839 }
51840 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet != NULL, -1,
51841 "Handler for PACKET_RULESET_SPECIALIST not installed");
51842 return pc->phs.handlers->send[PACKET_RULESET_SPECIALIST].packet(pc, packet);
51843}
51844
51846{
51847 conn_list_iterate(dest, pconn) {
51850}
51851
51852#ifdef FREECIV_DELTA_PROTOCOL
51853#define hash_packet_ruleset_government_ruler_title_100 hash_const
51854
51855#define cmp_packet_ruleset_government_ruler_title_100 cmp_const
51856
51858#endif /* FREECIV_DELTA_PROTOCOL */
51859
51861{
51862#ifdef FREECIV_DELTA_PROTOCOL
51865 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT_RULER_TITLE;
51866#endif /* FREECIV_DELTA_PROTOCOL */
51868#ifdef FREECIV_JSON_CONNECTION
51869 struct plocation field_addr;
51870 {
51874 }
51875#endif /* FREECIV_JSON_CONNECTION */
51876
51877#ifdef FREECIV_DELTA_PROTOCOL
51878#ifdef FREECIV_JSON_CONNECTION
51879 field_addr.name = "fields";
51880#endif /* FREECIV_JSON_CONNECTION */
51881 DIO_BV_GET(&din, &field_addr, fields);
51882
51883#else /* FREECIV_DELTA_PROTOCOL */
51884#ifdef FREECIV_JSON_CONNECTION
51885 field_addr.name = "gov";
51886#endif /* FREECIV_JSON_CONNECTION */
51887 {
51888 int readin;
51889
51890 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
51892 }
51893 real_packet->gov = readin;
51894 }
51895#ifdef FREECIV_JSON_CONNECTION
51896 field_addr.name = "nation";
51897#endif /* FREECIV_JSON_CONNECTION */
51898 {
51899 int readin;
51900
51901 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
51903 }
51904 real_packet->nation = readin;
51905 }
51906#ifdef FREECIV_JSON_CONNECTION
51907 field_addr.name = "male_title";
51908#endif /* FREECIV_JSON_CONNECTION */
51909 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
51910 RECEIVE_PACKET_FIELD_ERROR(male_title);
51911 }
51912#ifdef FREECIV_JSON_CONNECTION
51913 field_addr.name = "female_title";
51914#endif /* FREECIV_JSON_CONNECTION */
51915 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
51916 RECEIVE_PACKET_FIELD_ERROR(female_title);
51917 }
51918#endif
51919 log_packet_detailed("packet_ruleset_government_ruler_title_100: got info about ()");
51920
51921#ifdef FREECIV_DELTA_PROTOCOL
51922 if (NULL == *hash) {
51924 NULL, NULL, NULL, free);
51925 }
51926
51927 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
51928 *real_packet = *old;
51929 } else {
51930 log_packet_detailed(" no old info");
51931 memset(real_packet, 0, sizeof(*real_packet));
51932 }
51933
51934 if (BV_ISSET(fields, 0)) {
51935 log_packet_detailed(" got field 'gov'");
51936#ifdef FREECIV_JSON_CONNECTION
51937 field_addr.name = "gov";
51938#endif /* FREECIV_JSON_CONNECTION */
51939 {
51940 int readin;
51941
51942 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
51944 }
51945 real_packet->gov = readin;
51946 }
51947 }
51948 if (BV_ISSET(fields, 1)) {
51949 log_packet_detailed(" got field 'nation'");
51950#ifdef FREECIV_JSON_CONNECTION
51951 field_addr.name = "nation";
51952#endif /* FREECIV_JSON_CONNECTION */
51953 {
51954 int readin;
51955
51956 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
51958 }
51959 real_packet->nation = readin;
51960 }
51961 }
51962 if (BV_ISSET(fields, 2)) {
51963 log_packet_detailed(" got field 'male_title'");
51964#ifdef FREECIV_JSON_CONNECTION
51965 field_addr.name = "male_title";
51966#endif /* FREECIV_JSON_CONNECTION */
51967 if (!DIO_GET(string, &din, &field_addr, real_packet->male_title, sizeof(real_packet->male_title))) {
51968 RECEIVE_PACKET_FIELD_ERROR(male_title);
51969 }
51970 }
51971 if (BV_ISSET(fields, 3)) {
51972 log_packet_detailed(" got field 'female_title'");
51973#ifdef FREECIV_JSON_CONNECTION
51974 field_addr.name = "female_title";
51975#endif /* FREECIV_JSON_CONNECTION */
51976 if (!DIO_GET(string, &din, &field_addr, real_packet->female_title, sizeof(real_packet->female_title))) {
51977 RECEIVE_PACKET_FIELD_ERROR(female_title);
51978 }
51979 }
51980
51981 if (NULL == old) {
51982 old = fc_malloc(sizeof(*old));
51983 *old = *real_packet;
51984 genhash_insert(*hash, old, old);
51985 } else {
51986 *old = *real_packet;
51987 }
51988
51989#endif /* FREECIV_DELTA_PROTOCOL */
51991}
51992
51994{
51996 int e;
51997#ifdef FREECIV_DELTA_PROTOCOL
52000 bool differ;
52002#endif /* FREECIV_DELTA_PROTOCOL */
52004#ifdef FREECIV_JSON_CONNECTION
52005 struct plocation field_addr;
52006 {
52010 }
52011#endif /* FREECIV_JSON_CONNECTION */
52012
52013 log_packet_detailed("packet_ruleset_government_ruler_title_100: sending info about ()");
52014
52015#ifdef FREECIV_DELTA_PROTOCOL
52016 if (NULL == *hash) {
52018 NULL, NULL, NULL, free);
52019 }
52020 BV_CLR_ALL(fields);
52021
52022 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
52023 old = fc_malloc(sizeof(*old));
52024 *old = *real_packet;
52025 genhash_insert(*hash, old, old);
52026 memset(old, 0, sizeof(*old));
52027 }
52028 differ = (old->gov != real_packet->gov);
52029 if (differ) {
52030 BV_SET(fields, 0);
52031 }
52032
52033 differ = (old->nation != real_packet->nation);
52034 if (differ) {
52035 BV_SET(fields, 1);
52036 }
52037
52038 differ = (strcmp(old->male_title, real_packet->male_title) != 0);
52039 if (differ) {
52040 BV_SET(fields, 2);
52041 }
52042
52043 differ = (strcmp(old->female_title, real_packet->female_title) != 0);
52044 if (differ) {
52045 BV_SET(fields, 3);
52046 }
52047
52048
52049#ifdef FREECIV_JSON_CONNECTION
52050 field_addr.name = "fields";
52051#endif /* FREECIV_JSON_CONNECTION */
52052 e = 0;
52053 e |= DIO_BV_PUT(&dout, &field_addr, fields);
52054 if (e) {
52055 log_packet_detailed("fields bitvector error detected");
52056 }
52057
52058 if (BV_ISSET(fields, 0)) {
52059 log_packet_detailed(" field 'gov' has changed");
52060#ifdef FREECIV_JSON_CONNECTION
52061 field_addr.name = "gov";
52062#endif /* FREECIV_JSON_CONNECTION */
52063 e = 0;
52064 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
52065 if (e) {
52066 log_packet_detailed("'gov' field error detected");
52067 }
52068 }
52069 if (BV_ISSET(fields, 1)) {
52070 log_packet_detailed(" field 'nation' has changed");
52071#ifdef FREECIV_JSON_CONNECTION
52072 field_addr.name = "nation";
52073#endif /* FREECIV_JSON_CONNECTION */
52074 e = 0;
52075 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
52076 if (e) {
52077 log_packet_detailed("'nation' field error detected");
52078 }
52079 }
52080 if (BV_ISSET(fields, 2)) {
52081 log_packet_detailed(" field 'male_title' has changed");
52082#ifdef FREECIV_JSON_CONNECTION
52083 field_addr.name = "male_title";
52084#endif /* FREECIV_JSON_CONNECTION */
52085 e = 0;
52086 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
52087 if (e) {
52088 log_packet_detailed("'male_title' field error detected");
52089 }
52090 }
52091 if (BV_ISSET(fields, 3)) {
52092 log_packet_detailed(" field 'female_title' has changed");
52093#ifdef FREECIV_JSON_CONNECTION
52094 field_addr.name = "female_title";
52095#endif /* FREECIV_JSON_CONNECTION */
52096 e = 0;
52097 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
52098 if (e) {
52099 log_packet_detailed("'female_title' field error detected");
52100 }
52101 }
52102
52103 *old = *real_packet;
52104#endif /* FREECIV_DELTA_PROTOCOL */
52105#ifndef FREECIV_DELTA_PROTOCOL
52106#ifdef FREECIV_JSON_CONNECTION
52107 field_addr.name = "gov";
52108#endif /* FREECIV_JSON_CONNECTION */
52109 e = 0;
52110 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->gov);
52111 if (e) {
52112 log_packet_detailed("'gov' field error detected");
52113 }
52114#ifdef FREECIV_JSON_CONNECTION
52115 field_addr.name = "nation";
52116#endif /* FREECIV_JSON_CONNECTION */
52117 e = 0;
52118 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
52119 if (e) {
52120 log_packet_detailed("'nation' field error detected");
52121 }
52122#ifdef FREECIV_JSON_CONNECTION
52123 field_addr.name = "male_title";
52124#endif /* FREECIV_JSON_CONNECTION */
52125 e = 0;
52126 e |= DIO_PUT(string, &dout, &field_addr, real_packet->male_title);
52127 if (e) {
52128 log_packet_detailed("'male_title' field error detected");
52129 }
52130#ifdef FREECIV_JSON_CONNECTION
52131 field_addr.name = "female_title";
52132#endif /* FREECIV_JSON_CONNECTION */
52133 e = 0;
52134 e |= DIO_PUT(string, &dout, &field_addr, real_packet->female_title);
52135 if (e) {
52136 log_packet_detailed("'female_title' field error detected");
52137 }
52138
52139#endif
52141}
52142
52144{
52145 if (!pc->used) {
52146 log_error("WARNING: trying to send data to the closed connection %s",
52148 return -1;
52149 }
52150 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet != NULL, -1,
52151 "Handler for PACKET_RULESET_GOVERNMENT_RULER_TITLE not installed");
52152 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT_RULER_TITLE].packet(pc, packet);
52153}
52154
52161
52162#ifdef FREECIV_DELTA_PROTOCOL
52163#define hash_packet_ruleset_tech_100 hash_const
52164
52165#define cmp_packet_ruleset_tech_100 cmp_const
52166
52168#endif /* FREECIV_DELTA_PROTOCOL */
52169
52171{
52172#ifdef FREECIV_DELTA_PROTOCOL
52174 struct packet_ruleset_tech *old;
52175 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH;
52176#endif /* FREECIV_DELTA_PROTOCOL */
52178#ifdef FREECIV_JSON_CONNECTION
52179 struct plocation field_addr;
52180 {
52184 }
52185#endif /* FREECIV_JSON_CONNECTION */
52186
52187#ifdef FREECIV_DELTA_PROTOCOL
52188#ifdef FREECIV_JSON_CONNECTION
52189 field_addr.name = "fields";
52190#endif /* FREECIV_JSON_CONNECTION */
52191 DIO_BV_GET(&din, &field_addr, fields);
52192
52193#else /* FREECIV_DELTA_PROTOCOL */
52194#ifdef FREECIV_JSON_CONNECTION
52195 field_addr.name = "id";
52196#endif /* FREECIV_JSON_CONNECTION */
52197 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
52199 }
52200#ifdef FREECIV_JSON_CONNECTION
52201 field_addr.name = "root_req";
52202#endif /* FREECIV_JSON_CONNECTION */
52203 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
52205 }
52206#ifdef FREECIV_JSON_CONNECTION
52207 field_addr.name = "research_reqs_count";
52208#endif /* FREECIV_JSON_CONNECTION */
52209 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->research_reqs_count)) {
52210 RECEIVE_PACKET_FIELD_ERROR(research_reqs_count);
52211 }
52212#ifdef FREECIV_JSON_CONNECTION
52213 field_addr.name = "research_reqs";
52214#endif /* FREECIV_JSON_CONNECTION */
52215 if (real_packet->research_reqs_count > MAX_NUM_REQS) {
52216 RECEIVE_PACKET_FIELD_ERROR(research_reqs, ": truncation array");
52217 }
52218 {
52219 int i;
52220
52221#ifdef FREECIV_JSON_CONNECTION
52222 /* Enter array. */
52223 field_addr.sub_location = plocation_elem_new(0);
52224#endif /* FREECIV_JSON_CONNECTION */
52225
52226 for (i = 0; i < real_packet->research_reqs_count; i++) {
52227#ifdef FREECIV_JSON_CONNECTION
52228 field_addr.sub_location->number = i;
52229#endif /* FREECIV_JSON_CONNECTION */
52230
52231 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs[i])) {
52232 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
52233 }
52234 }
52235
52236#ifdef FREECIV_JSON_CONNECTION
52237 /* Exit array. */
52238 FC_FREE(field_addr.sub_location);
52239#endif /* FREECIV_JSON_CONNECTION */
52240 }
52241#ifdef FREECIV_JSON_CONNECTION
52242 field_addr.name = "tclass";
52243#endif /* FREECIV_JSON_CONNECTION */
52244 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
52246 }
52247#ifdef FREECIV_JSON_CONNECTION
52248 field_addr.name = "removed";
52249#endif /* FREECIV_JSON_CONNECTION */
52250 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removed)) {
52252 }
52253#ifdef FREECIV_JSON_CONNECTION
52254 field_addr.name = "flags";
52255#endif /* FREECIV_JSON_CONNECTION */
52256 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
52258 }
52259#ifdef FREECIV_JSON_CONNECTION
52260 field_addr.name = "cost";
52261#endif /* FREECIV_JSON_CONNECTION */
52262 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
52264 }
52265#ifdef FREECIV_JSON_CONNECTION
52266 field_addr.name = "num_reqs";
52267#endif /* FREECIV_JSON_CONNECTION */
52268 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
52270 }
52271#ifdef FREECIV_JSON_CONNECTION
52272 field_addr.name = "name";
52273#endif /* FREECIV_JSON_CONNECTION */
52274 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
52276 }
52277#ifdef FREECIV_JSON_CONNECTION
52278 field_addr.name = "rule_name";
52279#endif /* FREECIV_JSON_CONNECTION */
52280 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
52281 RECEIVE_PACKET_FIELD_ERROR(rule_name);
52282 }
52283#ifdef FREECIV_JSON_CONNECTION
52284 field_addr.name = "helptext";
52285#endif /* FREECIV_JSON_CONNECTION */
52286 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
52288 }
52289#ifdef FREECIV_JSON_CONNECTION
52290 field_addr.name = "graphic_str";
52291#endif /* FREECIV_JSON_CONNECTION */
52292 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
52293 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
52294 }
52295#ifdef FREECIV_JSON_CONNECTION
52296 field_addr.name = "graphic_alt";
52297#endif /* FREECIV_JSON_CONNECTION */
52298 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
52299 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
52300 }
52301#endif
52302 log_packet_detailed("packet_ruleset_tech_100: got info about ()");
52303
52304#ifdef FREECIV_DELTA_PROTOCOL
52305 if (NULL == *hash) {
52307 NULL, NULL, NULL, free);
52308 }
52309
52310 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
52311 *real_packet = *old;
52312 } else {
52313 log_packet_detailed(" no old info");
52314 memset(real_packet, 0, sizeof(*real_packet));
52315 }
52316
52317 if (BV_ISSET(fields, 0)) {
52318 log_packet_detailed(" got field 'id'");
52319#ifdef FREECIV_JSON_CONNECTION
52320 field_addr.name = "id";
52321#endif /* FREECIV_JSON_CONNECTION */
52322 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
52324 }
52325 }
52326 if (BV_ISSET(fields, 1)) {
52327 log_packet_detailed(" got field 'root_req'");
52328#ifdef FREECIV_JSON_CONNECTION
52329 field_addr.name = "root_req";
52330#endif /* FREECIV_JSON_CONNECTION */
52331 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->root_req)) {
52333 }
52334 }
52335 if (BV_ISSET(fields, 2)) {
52336 log_packet_detailed(" got field 'research_reqs_count'");
52337#ifdef FREECIV_JSON_CONNECTION
52338 field_addr.name = "research_reqs_count";
52339#endif /* FREECIV_JSON_CONNECTION */
52340 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->research_reqs_count)) {
52341 RECEIVE_PACKET_FIELD_ERROR(research_reqs_count);
52342 }
52343 }
52344 if (BV_ISSET(fields, 3)) {
52345 log_packet_detailed(" got field 'research_reqs'");
52346#ifdef FREECIV_JSON_CONNECTION
52347 field_addr.name = "research_reqs";
52348#endif /* FREECIV_JSON_CONNECTION */
52349 if (real_packet->research_reqs_count > MAX_NUM_REQS) {
52350 RECEIVE_PACKET_FIELD_ERROR(research_reqs, ": truncation array");
52351 }
52352 {
52353 int i;
52354
52355#ifdef FREECIV_JSON_CONNECTION
52356 /* Enter array. */
52357 field_addr.sub_location = plocation_elem_new(0);
52358#endif /* FREECIV_JSON_CONNECTION */
52359
52360 for (i = 0; i < real_packet->research_reqs_count; i++) {
52361#ifdef FREECIV_JSON_CONNECTION
52362 field_addr.sub_location->number = i;
52363#endif /* FREECIV_JSON_CONNECTION */
52364
52365 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->research_reqs[i])) {
52366 RECEIVE_PACKET_FIELD_ERROR(research_reqs);
52367 }
52368 }
52369
52370#ifdef FREECIV_JSON_CONNECTION
52371 /* Exit array. */
52372 FC_FREE(field_addr.sub_location);
52373#endif /* FREECIV_JSON_CONNECTION */
52374 }
52375 }
52376 if (BV_ISSET(fields, 4)) {
52377 log_packet_detailed(" got field 'tclass'");
52378#ifdef FREECIV_JSON_CONNECTION
52379 field_addr.name = "tclass";
52380#endif /* FREECIV_JSON_CONNECTION */
52381 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
52383 }
52384 }
52385 real_packet->removed = BV_ISSET(fields, 5);
52386 if (BV_ISSET(fields, 6)) {
52387 log_packet_detailed(" got field 'flags'");
52388#ifdef FREECIV_JSON_CONNECTION
52389 field_addr.name = "flags";
52390#endif /* FREECIV_JSON_CONNECTION */
52391 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
52393 }
52394 }
52395 if (BV_ISSET(fields, 7)) {
52396 log_packet_detailed(" got field 'cost'");
52397#ifdef FREECIV_JSON_CONNECTION
52398 field_addr.name = "cost";
52399#endif /* FREECIV_JSON_CONNECTION */
52400 if (!DIO_GET(ufloat, &din, &field_addr, &real_packet->cost, 100)) {
52402 }
52403 }
52404 if (BV_ISSET(fields, 8)) {
52405 log_packet_detailed(" got field 'num_reqs'");
52406#ifdef FREECIV_JSON_CONNECTION
52407 field_addr.name = "num_reqs";
52408#endif /* FREECIV_JSON_CONNECTION */
52409 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->num_reqs)) {
52411 }
52412 }
52413 if (BV_ISSET(fields, 9)) {
52414 log_packet_detailed(" got field 'name'");
52415#ifdef FREECIV_JSON_CONNECTION
52416 field_addr.name = "name";
52417#endif /* FREECIV_JSON_CONNECTION */
52418 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
52420 }
52421 }
52422 if (BV_ISSET(fields, 10)) {
52423 log_packet_detailed(" got field 'rule_name'");
52424#ifdef FREECIV_JSON_CONNECTION
52425 field_addr.name = "rule_name";
52426#endif /* FREECIV_JSON_CONNECTION */
52427 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
52428 RECEIVE_PACKET_FIELD_ERROR(rule_name);
52429 }
52430 }
52431 if (BV_ISSET(fields, 11)) {
52432 log_packet_detailed(" got field 'helptext'");
52433#ifdef FREECIV_JSON_CONNECTION
52434 field_addr.name = "helptext";
52435#endif /* FREECIV_JSON_CONNECTION */
52436 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
52438 }
52439 }
52440 if (BV_ISSET(fields, 12)) {
52441 log_packet_detailed(" got field 'graphic_str'");
52442#ifdef FREECIV_JSON_CONNECTION
52443 field_addr.name = "graphic_str";
52444#endif /* FREECIV_JSON_CONNECTION */
52445 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
52446 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
52447 }
52448 }
52449 if (BV_ISSET(fields, 13)) {
52450 log_packet_detailed(" got field 'graphic_alt'");
52451#ifdef FREECIV_JSON_CONNECTION
52452 field_addr.name = "graphic_alt";
52453#endif /* FREECIV_JSON_CONNECTION */
52454 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
52455 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
52456 }
52457 }
52458
52459 if (NULL == old) {
52460 old = fc_malloc(sizeof(*old));
52461 *old = *real_packet;
52462 genhash_insert(*hash, old, old);
52463 } else {
52464 *old = *real_packet;
52465 }
52466
52467#endif /* FREECIV_DELTA_PROTOCOL */
52469}
52470
52471static int send_packet_ruleset_tech_100(struct connection *pc, const struct packet_ruleset_tech *packet)
52472{
52473 const struct packet_ruleset_tech *real_packet = packet;
52474 int e;
52475#ifdef FREECIV_DELTA_PROTOCOL
52477 struct packet_ruleset_tech *old;
52478 bool differ;
52479 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH;
52480#endif /* FREECIV_DELTA_PROTOCOL */
52482#ifdef FREECIV_JSON_CONNECTION
52483 struct plocation field_addr;
52484 {
52488 }
52489#endif /* FREECIV_JSON_CONNECTION */
52490
52491 log_packet_detailed("packet_ruleset_tech_100: sending info about ()");
52492
52493#ifdef FREECIV_DELTA_PROTOCOL
52494 if (NULL == *hash) {
52496 NULL, NULL, NULL, free);
52497 }
52498 BV_CLR_ALL(fields);
52499
52500 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
52501 old = fc_malloc(sizeof(*old));
52502 *old = *real_packet;
52503 genhash_insert(*hash, old, old);
52504 memset(old, 0, sizeof(*old));
52505 }
52506 differ = (old->id != real_packet->id);
52507 if (differ) {
52508 BV_SET(fields, 0);
52509 }
52510
52511 differ = (old->root_req != real_packet->root_req);
52512 if (differ) {
52513 BV_SET(fields, 1);
52514 }
52515
52516 differ = (old->research_reqs_count != real_packet->research_reqs_count);
52517 if (differ) {
52518 BV_SET(fields, 2);
52519 }
52520
52521 differ = (old->research_reqs_count != real_packet->research_reqs_count);
52522 if (!differ) {
52523 int i;
52524
52525 for (i = 0; i < real_packet->research_reqs_count; i++) {
52526 differ = !are_requirements_equal(&old->research_reqs[i], &real_packet->research_reqs[i]);
52527 if (differ) {
52528 break;
52529 }
52530 }
52531 }
52532 if (differ) {
52533 BV_SET(fields, 3);
52534 }
52535
52536 differ = (old->tclass != real_packet->tclass);
52537 if (differ) {
52538 BV_SET(fields, 4);
52539 }
52540
52541 if (packet->removed) {
52542 BV_SET(fields, 5);
52543 }
52544
52545 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
52546 if (differ) {
52547 BV_SET(fields, 6);
52548 }
52549
52550 differ = (old->cost != real_packet->cost);
52551 if (differ) {
52552 BV_SET(fields, 7);
52553 }
52554
52555 differ = (old->num_reqs != real_packet->num_reqs);
52556 if (differ) {
52557 BV_SET(fields, 8);
52558 }
52559
52560 differ = (strcmp(old->name, real_packet->name) != 0);
52561 if (differ) {
52562 BV_SET(fields, 9);
52563 }
52564
52565 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
52566 if (differ) {
52567 BV_SET(fields, 10);
52568 }
52569
52570 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
52571 if (differ) {
52572 BV_SET(fields, 11);
52573 }
52574
52575 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
52576 if (differ) {
52577 BV_SET(fields, 12);
52578 }
52579
52580 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
52581 if (differ) {
52582 BV_SET(fields, 13);
52583 }
52584
52585
52586#ifdef FREECIV_JSON_CONNECTION
52587 field_addr.name = "fields";
52588#endif /* FREECIV_JSON_CONNECTION */
52589 e = 0;
52590 e |= DIO_BV_PUT(&dout, &field_addr, fields);
52591 if (e) {
52592 log_packet_detailed("fields bitvector error detected");
52593 }
52594
52595 if (BV_ISSET(fields, 0)) {
52596 log_packet_detailed(" field 'id' has changed");
52597#ifdef FREECIV_JSON_CONNECTION
52598 field_addr.name = "id";
52599#endif /* FREECIV_JSON_CONNECTION */
52600 e = 0;
52601 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
52602 if (e) {
52603 log_packet_detailed("'id' field error detected");
52604 }
52605 }
52606 if (BV_ISSET(fields, 1)) {
52607 log_packet_detailed(" field 'root_req' has changed");
52608#ifdef FREECIV_JSON_CONNECTION
52609 field_addr.name = "root_req";
52610#endif /* FREECIV_JSON_CONNECTION */
52611 e = 0;
52612 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
52613 if (e) {
52614 log_packet_detailed("'root_req' field error detected");
52615 }
52616 }
52617 if (BV_ISSET(fields, 2)) {
52618 log_packet_detailed(" field 'research_reqs_count' has changed");
52619#ifdef FREECIV_JSON_CONNECTION
52620 field_addr.name = "research_reqs_count";
52621#endif /* FREECIV_JSON_CONNECTION */
52622 e = 0;
52623 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->research_reqs_count);
52624 if (e) {
52625 log_packet_detailed("'research_reqs_count' field error detected");
52626 }
52627 }
52628 if (BV_ISSET(fields, 3)) {
52629 log_packet_detailed(" field 'research_reqs' has changed");
52630#ifdef FREECIV_JSON_CONNECTION
52631 field_addr.name = "research_reqs";
52632#endif /* FREECIV_JSON_CONNECTION */
52633 e = 0;
52634 {
52635 int i;
52636
52637#ifdef FREECIV_JSON_CONNECTION
52638 /* Create the array. */
52639 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->research_reqs_count);
52640
52641 /* Enter the array. */
52642 field_addr.sub_location = plocation_elem_new(0);
52643#endif /* FREECIV_JSON_CONNECTION */
52644
52645 for (i = 0; i < real_packet->research_reqs_count; i++) {
52646#ifdef FREECIV_JSON_CONNECTION
52647 /* Next array element. */
52648 field_addr.sub_location->number = i;
52649#endif /* FREECIV_JSON_CONNECTION */
52650
52651 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs[i]);
52652 }
52653
52654#ifdef FREECIV_JSON_CONNECTION
52655 /* Exit array. */
52656 FC_FREE(field_addr.sub_location);
52657#endif /* FREECIV_JSON_CONNECTION */
52658 }
52659 if (e) {
52660 log_packet_detailed("'research_reqs' field error detected");
52661 }
52662 }
52663 if (BV_ISSET(fields, 4)) {
52664 log_packet_detailed(" field 'tclass' has changed");
52665#ifdef FREECIV_JSON_CONNECTION
52666 field_addr.name = "tclass";
52667#endif /* FREECIV_JSON_CONNECTION */
52668 e = 0;
52669 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
52670 if (e) {
52671 log_packet_detailed("'tclass' field error detected");
52672 }
52673 }
52674 /* field 5 is folded into the header */
52675 if (BV_ISSET(fields, 6)) {
52676 log_packet_detailed(" field 'flags' has changed");
52677#ifdef FREECIV_JSON_CONNECTION
52678 field_addr.name = "flags";
52679#endif /* FREECIV_JSON_CONNECTION */
52680 e = 0;
52681 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
52682 if (e) {
52683 log_packet_detailed("'flags' field error detected");
52684 }
52685 }
52686 if (BV_ISSET(fields, 7)) {
52687 log_packet_detailed(" field 'cost' has changed");
52688#ifdef FREECIV_JSON_CONNECTION
52689 field_addr.name = "cost";
52690#endif /* FREECIV_JSON_CONNECTION */
52691 e = 0;
52692 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
52693 if (e) {
52694 log_packet_detailed("'cost' field error detected");
52695 }
52696 }
52697 if (BV_ISSET(fields, 8)) {
52698 log_packet_detailed(" field 'num_reqs' has changed");
52699#ifdef FREECIV_JSON_CONNECTION
52700 field_addr.name = "num_reqs";
52701#endif /* FREECIV_JSON_CONNECTION */
52702 e = 0;
52703 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
52704 if (e) {
52705 log_packet_detailed("'num_reqs' field error detected");
52706 }
52707 }
52708 if (BV_ISSET(fields, 9)) {
52709 log_packet_detailed(" field 'name' has changed");
52710#ifdef FREECIV_JSON_CONNECTION
52711 field_addr.name = "name";
52712#endif /* FREECIV_JSON_CONNECTION */
52713 e = 0;
52714 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
52715 if (e) {
52716 log_packet_detailed("'name' field error detected");
52717 }
52718 }
52719 if (BV_ISSET(fields, 10)) {
52720 log_packet_detailed(" field 'rule_name' has changed");
52721#ifdef FREECIV_JSON_CONNECTION
52722 field_addr.name = "rule_name";
52723#endif /* FREECIV_JSON_CONNECTION */
52724 e = 0;
52725 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
52726 if (e) {
52727 log_packet_detailed("'rule_name' field error detected");
52728 }
52729 }
52730 if (BV_ISSET(fields, 11)) {
52731 log_packet_detailed(" field 'helptext' has changed");
52732#ifdef FREECIV_JSON_CONNECTION
52733 field_addr.name = "helptext";
52734#endif /* FREECIV_JSON_CONNECTION */
52735 e = 0;
52736 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
52737 if (e) {
52738 log_packet_detailed("'helptext' field error detected");
52739 }
52740 }
52741 if (BV_ISSET(fields, 12)) {
52742 log_packet_detailed(" field 'graphic_str' has changed");
52743#ifdef FREECIV_JSON_CONNECTION
52744 field_addr.name = "graphic_str";
52745#endif /* FREECIV_JSON_CONNECTION */
52746 e = 0;
52747 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
52748 if (e) {
52749 log_packet_detailed("'graphic_str' field error detected");
52750 }
52751 }
52752 if (BV_ISSET(fields, 13)) {
52753 log_packet_detailed(" field 'graphic_alt' has changed");
52754#ifdef FREECIV_JSON_CONNECTION
52755 field_addr.name = "graphic_alt";
52756#endif /* FREECIV_JSON_CONNECTION */
52757 e = 0;
52758 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
52759 if (e) {
52760 log_packet_detailed("'graphic_alt' field error detected");
52761 }
52762 }
52763
52764 *old = *real_packet;
52765#endif /* FREECIV_DELTA_PROTOCOL */
52766#ifndef FREECIV_DELTA_PROTOCOL
52767#ifdef FREECIV_JSON_CONNECTION
52768 field_addr.name = "id";
52769#endif /* FREECIV_JSON_CONNECTION */
52770 e = 0;
52771 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
52772 if (e) {
52773 log_packet_detailed("'id' field error detected");
52774 }
52775#ifdef FREECIV_JSON_CONNECTION
52776 field_addr.name = "root_req";
52777#endif /* FREECIV_JSON_CONNECTION */
52778 e = 0;
52779 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->root_req);
52780 if (e) {
52781 log_packet_detailed("'root_req' field error detected");
52782 }
52783#ifdef FREECIV_JSON_CONNECTION
52784 field_addr.name = "research_reqs_count";
52785#endif /* FREECIV_JSON_CONNECTION */
52786 e = 0;
52787 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->research_reqs_count);
52788 if (e) {
52789 log_packet_detailed("'research_reqs_count' field error detected");
52790 }
52791#ifdef FREECIV_JSON_CONNECTION
52792 field_addr.name = "research_reqs";
52793#endif /* FREECIV_JSON_CONNECTION */
52794 e = 0;
52795 {
52796 int i;
52797
52798#ifdef FREECIV_JSON_CONNECTION
52799 /* Create the array. */
52800 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->research_reqs_count);
52801
52802 /* Enter the array. */
52803 field_addr.sub_location = plocation_elem_new(0);
52804#endif /* FREECIV_JSON_CONNECTION */
52805
52806 for (i = 0; i < real_packet->research_reqs_count; i++) {
52807#ifdef FREECIV_JSON_CONNECTION
52808 /* Next array element. */
52809 field_addr.sub_location->number = i;
52810#endif /* FREECIV_JSON_CONNECTION */
52811
52812 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->research_reqs[i]);
52813 }
52814
52815#ifdef FREECIV_JSON_CONNECTION
52816 /* Exit array. */
52817 FC_FREE(field_addr.sub_location);
52818#endif /* FREECIV_JSON_CONNECTION */
52819 }
52820 if (e) {
52821 log_packet_detailed("'research_reqs' field error detected");
52822 }
52823#ifdef FREECIV_JSON_CONNECTION
52824 field_addr.name = "tclass";
52825#endif /* FREECIV_JSON_CONNECTION */
52826 e = 0;
52827 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
52828 if (e) {
52829 log_packet_detailed("'tclass' field error detected");
52830 }
52831#ifdef FREECIV_JSON_CONNECTION
52832 field_addr.name = "removed";
52833#endif /* FREECIV_JSON_CONNECTION */
52834 e = 0;
52835 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removed);
52836 if (e) {
52837 log_packet_detailed("'removed' field error detected");
52838 }
52839#ifdef FREECIV_JSON_CONNECTION
52840 field_addr.name = "flags";
52841#endif /* FREECIV_JSON_CONNECTION */
52842 e = 0;
52843 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
52844 if (e) {
52845 log_packet_detailed("'flags' field error detected");
52846 }
52847#ifdef FREECIV_JSON_CONNECTION
52848 field_addr.name = "cost";
52849#endif /* FREECIV_JSON_CONNECTION */
52850 e = 0;
52851 e |= DIO_PUT(ufloat, &dout, &field_addr, real_packet->cost, 100);
52852 if (e) {
52853 log_packet_detailed("'cost' field error detected");
52854 }
52855#ifdef FREECIV_JSON_CONNECTION
52856 field_addr.name = "num_reqs";
52857#endif /* FREECIV_JSON_CONNECTION */
52858 e = 0;
52859 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->num_reqs);
52860 if (e) {
52861 log_packet_detailed("'num_reqs' field error detected");
52862 }
52863#ifdef FREECIV_JSON_CONNECTION
52864 field_addr.name = "name";
52865#endif /* FREECIV_JSON_CONNECTION */
52866 e = 0;
52867 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
52868 if (e) {
52869 log_packet_detailed("'name' field error detected");
52870 }
52871#ifdef FREECIV_JSON_CONNECTION
52872 field_addr.name = "rule_name";
52873#endif /* FREECIV_JSON_CONNECTION */
52874 e = 0;
52875 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
52876 if (e) {
52877 log_packet_detailed("'rule_name' field error detected");
52878 }
52879#ifdef FREECIV_JSON_CONNECTION
52880 field_addr.name = "helptext";
52881#endif /* FREECIV_JSON_CONNECTION */
52882 e = 0;
52883 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
52884 if (e) {
52885 log_packet_detailed("'helptext' field error detected");
52886 }
52887#ifdef FREECIV_JSON_CONNECTION
52888 field_addr.name = "graphic_str";
52889#endif /* FREECIV_JSON_CONNECTION */
52890 e = 0;
52891 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
52892 if (e) {
52893 log_packet_detailed("'graphic_str' field error detected");
52894 }
52895#ifdef FREECIV_JSON_CONNECTION
52896 field_addr.name = "graphic_alt";
52897#endif /* FREECIV_JSON_CONNECTION */
52898 e = 0;
52899 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
52900 if (e) {
52901 log_packet_detailed("'graphic_alt' field error detected");
52902 }
52903
52904#endif
52906}
52907
52909{
52910 if (!pc->used) {
52911 log_error("WARNING: trying to send data to the closed connection %s",
52913 return -1;
52914 }
52915 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH].packet != NULL, -1,
52916 "Handler for PACKET_RULESET_TECH not installed");
52917 return pc->phs.handlers->send[PACKET_RULESET_TECH].packet(pc, packet);
52918}
52919
52920void lsend_packet_ruleset_tech(struct conn_list *dest, const struct packet_ruleset_tech *packet)
52921{
52922 conn_list_iterate(dest, pconn) {
52925}
52926
52927#ifdef FREECIV_DELTA_PROTOCOL
52928#define hash_packet_ruleset_tech_class_100 hash_const
52929
52930#define cmp_packet_ruleset_tech_class_100 cmp_const
52931
52933#endif /* FREECIV_DELTA_PROTOCOL */
52934
52936{
52937#ifdef FREECIV_DELTA_PROTOCOL
52939 struct packet_ruleset_tech_class *old;
52940 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_CLASS;
52941#endif /* FREECIV_DELTA_PROTOCOL */
52943#ifdef FREECIV_JSON_CONNECTION
52944 struct plocation field_addr;
52945 {
52949 }
52950#endif /* FREECIV_JSON_CONNECTION */
52951
52952#ifdef FREECIV_DELTA_PROTOCOL
52953#ifdef FREECIV_JSON_CONNECTION
52954 field_addr.name = "fields";
52955#endif /* FREECIV_JSON_CONNECTION */
52956 DIO_BV_GET(&din, &field_addr, fields);
52957
52958#else /* FREECIV_DELTA_PROTOCOL */
52959#ifdef FREECIV_JSON_CONNECTION
52960 field_addr.name = "id";
52961#endif /* FREECIV_JSON_CONNECTION */
52962 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
52964 }
52965#ifdef FREECIV_JSON_CONNECTION
52966 field_addr.name = "name";
52967#endif /* FREECIV_JSON_CONNECTION */
52968 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
52970 }
52971#ifdef FREECIV_JSON_CONNECTION
52972 field_addr.name = "rule_name";
52973#endif /* FREECIV_JSON_CONNECTION */
52974 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
52975 RECEIVE_PACKET_FIELD_ERROR(rule_name);
52976 }
52977#ifdef FREECIV_JSON_CONNECTION
52978 field_addr.name = "cost_pct";
52979#endif /* FREECIV_JSON_CONNECTION */
52980 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
52982 }
52983#endif
52984 log_packet_detailed("packet_ruleset_tech_class_100: got info about ()");
52985
52986#ifdef FREECIV_DELTA_PROTOCOL
52987 if (NULL == *hash) {
52989 NULL, NULL, NULL, free);
52990 }
52991
52992 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
52993 *real_packet = *old;
52994 } else {
52995 log_packet_detailed(" no old info");
52996 memset(real_packet, 0, sizeof(*real_packet));
52997 }
52998
52999 if (BV_ISSET(fields, 0)) {
53000 log_packet_detailed(" got field 'id'");
53001#ifdef FREECIV_JSON_CONNECTION
53002 field_addr.name = "id";
53003#endif /* FREECIV_JSON_CONNECTION */
53004 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
53006 }
53007 }
53008 if (BV_ISSET(fields, 1)) {
53009 log_packet_detailed(" got field 'name'");
53010#ifdef FREECIV_JSON_CONNECTION
53011 field_addr.name = "name";
53012#endif /* FREECIV_JSON_CONNECTION */
53013 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
53015 }
53016 }
53017 if (BV_ISSET(fields, 2)) {
53018 log_packet_detailed(" got field 'rule_name'");
53019#ifdef FREECIV_JSON_CONNECTION
53020 field_addr.name = "rule_name";
53021#endif /* FREECIV_JSON_CONNECTION */
53022 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53023 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53024 }
53025 }
53026 if (BV_ISSET(fields, 3)) {
53027 log_packet_detailed(" got field 'cost_pct'");
53028#ifdef FREECIV_JSON_CONNECTION
53029 field_addr.name = "cost_pct";
53030#endif /* FREECIV_JSON_CONNECTION */
53031 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->cost_pct)) {
53033 }
53034 }
53035
53036 if (NULL == old) {
53037 old = fc_malloc(sizeof(*old));
53038 *old = *real_packet;
53039 genhash_insert(*hash, old, old);
53040 } else {
53041 *old = *real_packet;
53042 }
53043
53044#endif /* FREECIV_DELTA_PROTOCOL */
53046}
53047
53049{
53050 const struct packet_ruleset_tech_class *real_packet = packet;
53051 int e;
53052#ifdef FREECIV_DELTA_PROTOCOL
53054 struct packet_ruleset_tech_class *old;
53055 bool differ;
53056 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_CLASS;
53057#endif /* FREECIV_DELTA_PROTOCOL */
53059#ifdef FREECIV_JSON_CONNECTION
53060 struct plocation field_addr;
53061 {
53065 }
53066#endif /* FREECIV_JSON_CONNECTION */
53067
53068 log_packet_detailed("packet_ruleset_tech_class_100: sending info about ()");
53069
53070#ifdef FREECIV_DELTA_PROTOCOL
53071 if (NULL == *hash) {
53073 NULL, NULL, NULL, free);
53074 }
53075 BV_CLR_ALL(fields);
53076
53077 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
53078 old = fc_malloc(sizeof(*old));
53079 *old = *real_packet;
53080 genhash_insert(*hash, old, old);
53081 memset(old, 0, sizeof(*old));
53082 }
53083 differ = (old->id != real_packet->id);
53084 if (differ) {
53085 BV_SET(fields, 0);
53086 }
53087
53088 differ = (strcmp(old->name, real_packet->name) != 0);
53089 if (differ) {
53090 BV_SET(fields, 1);
53091 }
53092
53093 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
53094 if (differ) {
53095 BV_SET(fields, 2);
53096 }
53097
53098 differ = (old->cost_pct != real_packet->cost_pct);
53099 if (differ) {
53100 BV_SET(fields, 3);
53101 }
53102
53103
53104#ifdef FREECIV_JSON_CONNECTION
53105 field_addr.name = "fields";
53106#endif /* FREECIV_JSON_CONNECTION */
53107 e = 0;
53108 e |= DIO_BV_PUT(&dout, &field_addr, fields);
53109 if (e) {
53110 log_packet_detailed("fields bitvector error detected");
53111 }
53112
53113 if (BV_ISSET(fields, 0)) {
53114 log_packet_detailed(" field 'id' has changed");
53115#ifdef FREECIV_JSON_CONNECTION
53116 field_addr.name = "id";
53117#endif /* FREECIV_JSON_CONNECTION */
53118 e = 0;
53119 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
53120 if (e) {
53121 log_packet_detailed("'id' field error detected");
53122 }
53123 }
53124 if (BV_ISSET(fields, 1)) {
53125 log_packet_detailed(" field 'name' has changed");
53126#ifdef FREECIV_JSON_CONNECTION
53127 field_addr.name = "name";
53128#endif /* FREECIV_JSON_CONNECTION */
53129 e = 0;
53130 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
53131 if (e) {
53132 log_packet_detailed("'name' field error detected");
53133 }
53134 }
53135 if (BV_ISSET(fields, 2)) {
53136 log_packet_detailed(" field 'rule_name' has changed");
53137#ifdef FREECIV_JSON_CONNECTION
53138 field_addr.name = "rule_name";
53139#endif /* FREECIV_JSON_CONNECTION */
53140 e = 0;
53141 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
53142 if (e) {
53143 log_packet_detailed("'rule_name' field error detected");
53144 }
53145 }
53146 if (BV_ISSET(fields, 3)) {
53147 log_packet_detailed(" field 'cost_pct' has changed");
53148#ifdef FREECIV_JSON_CONNECTION
53149 field_addr.name = "cost_pct";
53150#endif /* FREECIV_JSON_CONNECTION */
53151 e = 0;
53152 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
53153 if (e) {
53154 log_packet_detailed("'cost_pct' field error detected");
53155 }
53156 }
53157
53158 *old = *real_packet;
53159#endif /* FREECIV_DELTA_PROTOCOL */
53160#ifndef FREECIV_DELTA_PROTOCOL
53161#ifdef FREECIV_JSON_CONNECTION
53162 field_addr.name = "id";
53163#endif /* FREECIV_JSON_CONNECTION */
53164 e = 0;
53165 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
53166 if (e) {
53167 log_packet_detailed("'id' field error detected");
53168 }
53169#ifdef FREECIV_JSON_CONNECTION
53170 field_addr.name = "name";
53171#endif /* FREECIV_JSON_CONNECTION */
53172 e = 0;
53173 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
53174 if (e) {
53175 log_packet_detailed("'name' field error detected");
53176 }
53177#ifdef FREECIV_JSON_CONNECTION
53178 field_addr.name = "rule_name";
53179#endif /* FREECIV_JSON_CONNECTION */
53180 e = 0;
53181 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
53182 if (e) {
53183 log_packet_detailed("'rule_name' field error detected");
53184 }
53185#ifdef FREECIV_JSON_CONNECTION
53186 field_addr.name = "cost_pct";
53187#endif /* FREECIV_JSON_CONNECTION */
53188 e = 0;
53189 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->cost_pct);
53190 if (e) {
53191 log_packet_detailed("'cost_pct' field error detected");
53192 }
53193
53194#endif
53196}
53197
53199{
53200 if (!pc->used) {
53201 log_error("WARNING: trying to send data to the closed connection %s",
53203 return -1;
53204 }
53205 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet != NULL, -1,
53206 "Handler for PACKET_RULESET_TECH_CLASS not installed");
53207 return pc->phs.handlers->send[PACKET_RULESET_TECH_CLASS].packet(pc, packet);
53208}
53209
53211{
53212 conn_list_iterate(dest, pconn) {
53215}
53216
53217#ifdef FREECIV_DELTA_PROTOCOL
53218#define hash_packet_ruleset_tech_flag_100 hash_const
53219
53220#define cmp_packet_ruleset_tech_flag_100 cmp_const
53221
53223#endif /* FREECIV_DELTA_PROTOCOL */
53224
53226{
53227#ifdef FREECIV_DELTA_PROTOCOL
53229 struct packet_ruleset_tech_flag *old;
53230 struct genhash **hash = pc->phs.received + PACKET_RULESET_TECH_FLAG;
53231#endif /* FREECIV_DELTA_PROTOCOL */
53233#ifdef FREECIV_JSON_CONNECTION
53234 struct plocation field_addr;
53235 {
53239 }
53240#endif /* FREECIV_JSON_CONNECTION */
53241
53242#ifdef FREECIV_DELTA_PROTOCOL
53243#ifdef FREECIV_JSON_CONNECTION
53244 field_addr.name = "fields";
53245#endif /* FREECIV_JSON_CONNECTION */
53246 DIO_BV_GET(&din, &field_addr, fields);
53247
53248#else /* FREECIV_DELTA_PROTOCOL */
53249#ifdef FREECIV_JSON_CONNECTION
53250 field_addr.name = "id";
53251#endif /* FREECIV_JSON_CONNECTION */
53252 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
53254 }
53255#ifdef FREECIV_JSON_CONNECTION
53256 field_addr.name = "name";
53257#endif /* FREECIV_JSON_CONNECTION */
53258 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
53260 }
53261#ifdef FREECIV_JSON_CONNECTION
53262 field_addr.name = "helptxt";
53263#endif /* FREECIV_JSON_CONNECTION */
53264 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
53266 }
53267#endif
53268 log_packet_detailed("packet_ruleset_tech_flag_100: got info about ()");
53269
53270#ifdef FREECIV_DELTA_PROTOCOL
53271 if (NULL == *hash) {
53273 NULL, NULL, NULL, free);
53274 }
53275
53276 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
53277 *real_packet = *old;
53278 } else {
53279 log_packet_detailed(" no old info");
53280 memset(real_packet, 0, sizeof(*real_packet));
53281 }
53282
53283 if (BV_ISSET(fields, 0)) {
53284 log_packet_detailed(" got field 'id'");
53285#ifdef FREECIV_JSON_CONNECTION
53286 field_addr.name = "id";
53287#endif /* FREECIV_JSON_CONNECTION */
53288 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
53290 }
53291 }
53292 if (BV_ISSET(fields, 1)) {
53293 log_packet_detailed(" got field 'name'");
53294#ifdef FREECIV_JSON_CONNECTION
53295 field_addr.name = "name";
53296#endif /* FREECIV_JSON_CONNECTION */
53297 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
53299 }
53300 }
53301 if (BV_ISSET(fields, 2)) {
53302 log_packet_detailed(" got field 'helptxt'");
53303#ifdef FREECIV_JSON_CONNECTION
53304 field_addr.name = "helptxt";
53305#endif /* FREECIV_JSON_CONNECTION */
53306 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
53308 }
53309 }
53310
53311 if (NULL == old) {
53312 old = fc_malloc(sizeof(*old));
53313 *old = *real_packet;
53314 genhash_insert(*hash, old, old);
53315 } else {
53316 *old = *real_packet;
53317 }
53318
53319#endif /* FREECIV_DELTA_PROTOCOL */
53321}
53322
53324{
53325 const struct packet_ruleset_tech_flag *real_packet = packet;
53326 int e;
53327#ifdef FREECIV_DELTA_PROTOCOL
53329 struct packet_ruleset_tech_flag *old;
53330 bool differ;
53331 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TECH_FLAG;
53332#endif /* FREECIV_DELTA_PROTOCOL */
53334#ifdef FREECIV_JSON_CONNECTION
53335 struct plocation field_addr;
53336 {
53340 }
53341#endif /* FREECIV_JSON_CONNECTION */
53342
53343 log_packet_detailed("packet_ruleset_tech_flag_100: sending info about ()");
53344
53345#ifdef FREECIV_DELTA_PROTOCOL
53346 if (NULL == *hash) {
53348 NULL, NULL, NULL, free);
53349 }
53350 BV_CLR_ALL(fields);
53351
53352 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
53353 old = fc_malloc(sizeof(*old));
53354 *old = *real_packet;
53355 genhash_insert(*hash, old, old);
53356 memset(old, 0, sizeof(*old));
53357 }
53358 differ = (old->id != real_packet->id);
53359 if (differ) {
53360 BV_SET(fields, 0);
53361 }
53362
53363 differ = (strcmp(old->name, real_packet->name) != 0);
53364 if (differ) {
53365 BV_SET(fields, 1);
53366 }
53367
53368 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
53369 if (differ) {
53370 BV_SET(fields, 2);
53371 }
53372
53373
53374#ifdef FREECIV_JSON_CONNECTION
53375 field_addr.name = "fields";
53376#endif /* FREECIV_JSON_CONNECTION */
53377 e = 0;
53378 e |= DIO_BV_PUT(&dout, &field_addr, fields);
53379 if (e) {
53380 log_packet_detailed("fields bitvector error detected");
53381 }
53382
53383 if (BV_ISSET(fields, 0)) {
53384 log_packet_detailed(" field 'id' has changed");
53385#ifdef FREECIV_JSON_CONNECTION
53386 field_addr.name = "id";
53387#endif /* FREECIV_JSON_CONNECTION */
53388 e = 0;
53389 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
53390 if (e) {
53391 log_packet_detailed("'id' field error detected");
53392 }
53393 }
53394 if (BV_ISSET(fields, 1)) {
53395 log_packet_detailed(" field 'name' has changed");
53396#ifdef FREECIV_JSON_CONNECTION
53397 field_addr.name = "name";
53398#endif /* FREECIV_JSON_CONNECTION */
53399 e = 0;
53400 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
53401 if (e) {
53402 log_packet_detailed("'name' field error detected");
53403 }
53404 }
53405 if (BV_ISSET(fields, 2)) {
53406 log_packet_detailed(" field 'helptxt' has changed");
53407#ifdef FREECIV_JSON_CONNECTION
53408 field_addr.name = "helptxt";
53409#endif /* FREECIV_JSON_CONNECTION */
53410 e = 0;
53411 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
53412 if (e) {
53413 log_packet_detailed("'helptxt' field error detected");
53414 }
53415 }
53416
53417 *old = *real_packet;
53418#endif /* FREECIV_DELTA_PROTOCOL */
53419#ifndef FREECIV_DELTA_PROTOCOL
53420#ifdef FREECIV_JSON_CONNECTION
53421 field_addr.name = "id";
53422#endif /* FREECIV_JSON_CONNECTION */
53423 e = 0;
53424 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
53425 if (e) {
53426 log_packet_detailed("'id' field error detected");
53427 }
53428#ifdef FREECIV_JSON_CONNECTION
53429 field_addr.name = "name";
53430#endif /* FREECIV_JSON_CONNECTION */
53431 e = 0;
53432 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
53433 if (e) {
53434 log_packet_detailed("'name' field error detected");
53435 }
53436#ifdef FREECIV_JSON_CONNECTION
53437 field_addr.name = "helptxt";
53438#endif /* FREECIV_JSON_CONNECTION */
53439 e = 0;
53440 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
53441 if (e) {
53442 log_packet_detailed("'helptxt' field error detected");
53443 }
53444
53445#endif
53447}
53448
53450{
53451 if (!pc->used) {
53452 log_error("WARNING: trying to send data to the closed connection %s",
53454 return -1;
53455 }
53456 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet != NULL, -1,
53457 "Handler for PACKET_RULESET_TECH_FLAG not installed");
53458 return pc->phs.handlers->send[PACKET_RULESET_TECH_FLAG].packet(pc, packet);
53459}
53460
53462{
53463 conn_list_iterate(dest, pconn) {
53466}
53467
53468#ifdef FREECIV_DELTA_PROTOCOL
53469#define hash_packet_ruleset_government_100 hash_const
53470
53471#define cmp_packet_ruleset_government_100 cmp_const
53472
53474#endif /* FREECIV_DELTA_PROTOCOL */
53475
53477{
53478#ifdef FREECIV_DELTA_PROTOCOL
53480 struct packet_ruleset_government *old;
53481 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOVERNMENT;
53482#endif /* FREECIV_DELTA_PROTOCOL */
53484#ifdef FREECIV_JSON_CONNECTION
53485 struct plocation field_addr;
53486 {
53490 }
53491#endif /* FREECIV_JSON_CONNECTION */
53492
53493#ifdef FREECIV_DELTA_PROTOCOL
53494#ifdef FREECIV_JSON_CONNECTION
53495 field_addr.name = "fields";
53496#endif /* FREECIV_JSON_CONNECTION */
53497 DIO_BV_GET(&din, &field_addr, fields);
53498
53499#else /* FREECIV_DELTA_PROTOCOL */
53500#ifdef FREECIV_JSON_CONNECTION
53501 field_addr.name = "id";
53502#endif /* FREECIV_JSON_CONNECTION */
53503 {
53504 int readin;
53505
53506 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
53508 }
53509 real_packet->id = readin;
53510 }
53511#ifdef FREECIV_JSON_CONNECTION
53512 field_addr.name = "reqs_count";
53513#endif /* FREECIV_JSON_CONNECTION */
53514 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
53515 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
53516 }
53517#ifdef FREECIV_JSON_CONNECTION
53518 field_addr.name = "reqs";
53519#endif /* FREECIV_JSON_CONNECTION */
53520 if (real_packet->reqs_count > MAX_NUM_REQS) {
53521 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
53522 }
53523 {
53524 int i;
53525
53526#ifdef FREECIV_JSON_CONNECTION
53527 /* Enter array. */
53528 field_addr.sub_location = plocation_elem_new(0);
53529#endif /* FREECIV_JSON_CONNECTION */
53530
53531 for (i = 0; i < real_packet->reqs_count; i++) {
53532#ifdef FREECIV_JSON_CONNECTION
53533 field_addr.sub_location->number = i;
53534#endif /* FREECIV_JSON_CONNECTION */
53535
53536 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
53538 }
53539 }
53540
53541#ifdef FREECIV_JSON_CONNECTION
53542 /* Exit array. */
53543 FC_FREE(field_addr.sub_location);
53544#endif /* FREECIV_JSON_CONNECTION */
53545 }
53546#ifdef FREECIV_JSON_CONNECTION
53547 field_addr.name = "name";
53548#endif /* FREECIV_JSON_CONNECTION */
53549 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
53551 }
53552#ifdef FREECIV_JSON_CONNECTION
53553 field_addr.name = "rule_name";
53554#endif /* FREECIV_JSON_CONNECTION */
53555 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53556 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53557 }
53558#ifdef FREECIV_JSON_CONNECTION
53559 field_addr.name = "graphic_str";
53560#endif /* FREECIV_JSON_CONNECTION */
53561 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
53562 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
53563 }
53564#ifdef FREECIV_JSON_CONNECTION
53565 field_addr.name = "graphic_alt";
53566#endif /* FREECIV_JSON_CONNECTION */
53567 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
53568 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
53569 }
53570#ifdef FREECIV_JSON_CONNECTION
53571 field_addr.name = "sound_str";
53572#endif /* FREECIV_JSON_CONNECTION */
53573 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
53574 RECEIVE_PACKET_FIELD_ERROR(sound_str);
53575 }
53576#ifdef FREECIV_JSON_CONNECTION
53577 field_addr.name = "sound_alt";
53578#endif /* FREECIV_JSON_CONNECTION */
53579 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
53580 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
53581 }
53582#ifdef FREECIV_JSON_CONNECTION
53583 field_addr.name = "sound_alt2";
53584#endif /* FREECIV_JSON_CONNECTION */
53585 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
53586 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
53587 }
53588#ifdef FREECIV_JSON_CONNECTION
53589 field_addr.name = "helptext";
53590#endif /* FREECIV_JSON_CONNECTION */
53591 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
53593 }
53594#endif
53595 log_packet_detailed("packet_ruleset_government_100: got info about ()");
53596
53597#ifdef FREECIV_DELTA_PROTOCOL
53598 if (NULL == *hash) {
53600 NULL, NULL, NULL, free);
53601 }
53602
53603 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
53604 *real_packet = *old;
53605 } else {
53606 log_packet_detailed(" no old info");
53607 memset(real_packet, 0, sizeof(*real_packet));
53608 }
53609
53610 if (BV_ISSET(fields, 0)) {
53611 log_packet_detailed(" got field 'id'");
53612#ifdef FREECIV_JSON_CONNECTION
53613 field_addr.name = "id";
53614#endif /* FREECIV_JSON_CONNECTION */
53615 {
53616 int readin;
53617
53618 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
53620 }
53621 real_packet->id = readin;
53622 }
53623 }
53624 if (BV_ISSET(fields, 1)) {
53625 log_packet_detailed(" got field 'reqs_count'");
53626#ifdef FREECIV_JSON_CONNECTION
53627 field_addr.name = "reqs_count";
53628#endif /* FREECIV_JSON_CONNECTION */
53629 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
53630 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
53631 }
53632 }
53633 if (BV_ISSET(fields, 2)) {
53634 log_packet_detailed(" got field 'reqs'");
53635#ifdef FREECIV_JSON_CONNECTION
53636 field_addr.name = "reqs";
53637#endif /* FREECIV_JSON_CONNECTION */
53638 if (real_packet->reqs_count > MAX_NUM_REQS) {
53639 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
53640 }
53641 {
53642 int i;
53643
53644#ifdef FREECIV_JSON_CONNECTION
53645 /* Enter array. */
53646 field_addr.sub_location = plocation_elem_new(0);
53647#endif /* FREECIV_JSON_CONNECTION */
53648
53649 for (i = 0; i < real_packet->reqs_count; i++) {
53650#ifdef FREECIV_JSON_CONNECTION
53651 field_addr.sub_location->number = i;
53652#endif /* FREECIV_JSON_CONNECTION */
53653
53654 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
53656 }
53657 }
53658
53659#ifdef FREECIV_JSON_CONNECTION
53660 /* Exit array. */
53661 FC_FREE(field_addr.sub_location);
53662#endif /* FREECIV_JSON_CONNECTION */
53663 }
53664 }
53665 if (BV_ISSET(fields, 3)) {
53666 log_packet_detailed(" got field 'name'");
53667#ifdef FREECIV_JSON_CONNECTION
53668 field_addr.name = "name";
53669#endif /* FREECIV_JSON_CONNECTION */
53670 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
53672 }
53673 }
53674 if (BV_ISSET(fields, 4)) {
53675 log_packet_detailed(" got field 'rule_name'");
53676#ifdef FREECIV_JSON_CONNECTION
53677 field_addr.name = "rule_name";
53678#endif /* FREECIV_JSON_CONNECTION */
53679 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
53680 RECEIVE_PACKET_FIELD_ERROR(rule_name);
53681 }
53682 }
53683 if (BV_ISSET(fields, 5)) {
53684 log_packet_detailed(" got field 'graphic_str'");
53685#ifdef FREECIV_JSON_CONNECTION
53686 field_addr.name = "graphic_str";
53687#endif /* FREECIV_JSON_CONNECTION */
53688 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
53689 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
53690 }
53691 }
53692 if (BV_ISSET(fields, 6)) {
53693 log_packet_detailed(" got field 'graphic_alt'");
53694#ifdef FREECIV_JSON_CONNECTION
53695 field_addr.name = "graphic_alt";
53696#endif /* FREECIV_JSON_CONNECTION */
53697 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
53698 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
53699 }
53700 }
53701 if (BV_ISSET(fields, 7)) {
53702 log_packet_detailed(" got field 'sound_str'");
53703#ifdef FREECIV_JSON_CONNECTION
53704 field_addr.name = "sound_str";
53705#endif /* FREECIV_JSON_CONNECTION */
53706 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_str, sizeof(real_packet->sound_str))) {
53707 RECEIVE_PACKET_FIELD_ERROR(sound_str);
53708 }
53709 }
53710 if (BV_ISSET(fields, 8)) {
53711 log_packet_detailed(" got field 'sound_alt'");
53712#ifdef FREECIV_JSON_CONNECTION
53713 field_addr.name = "sound_alt";
53714#endif /* FREECIV_JSON_CONNECTION */
53715 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt, sizeof(real_packet->sound_alt))) {
53716 RECEIVE_PACKET_FIELD_ERROR(sound_alt);
53717 }
53718 }
53719 if (BV_ISSET(fields, 9)) {
53720 log_packet_detailed(" got field 'sound_alt2'");
53721#ifdef FREECIV_JSON_CONNECTION
53722 field_addr.name = "sound_alt2";
53723#endif /* FREECIV_JSON_CONNECTION */
53724 if (!DIO_GET(string, &din, &field_addr, real_packet->sound_alt2, sizeof(real_packet->sound_alt2))) {
53725 RECEIVE_PACKET_FIELD_ERROR(sound_alt2);
53726 }
53727 }
53728 if (BV_ISSET(fields, 10)) {
53729 log_packet_detailed(" got field 'helptext'");
53730#ifdef FREECIV_JSON_CONNECTION
53731 field_addr.name = "helptext";
53732#endif /* FREECIV_JSON_CONNECTION */
53733 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
53735 }
53736 }
53737
53738 if (NULL == old) {
53739 old = fc_malloc(sizeof(*old));
53740 *old = *real_packet;
53741 genhash_insert(*hash, old, old);
53742 } else {
53743 *old = *real_packet;
53744 }
53745
53746#endif /* FREECIV_DELTA_PROTOCOL */
53748}
53749
53751{
53752 const struct packet_ruleset_government *real_packet = packet;
53753 int e;
53754#ifdef FREECIV_DELTA_PROTOCOL
53756 struct packet_ruleset_government *old;
53757 bool differ;
53758 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOVERNMENT;
53759#endif /* FREECIV_DELTA_PROTOCOL */
53761#ifdef FREECIV_JSON_CONNECTION
53762 struct plocation field_addr;
53763 {
53767 }
53768#endif /* FREECIV_JSON_CONNECTION */
53769
53770 log_packet_detailed("packet_ruleset_government_100: sending info about ()");
53771
53772#ifdef FREECIV_DELTA_PROTOCOL
53773 if (NULL == *hash) {
53775 NULL, NULL, NULL, free);
53776 }
53777 BV_CLR_ALL(fields);
53778
53779 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
53780 old = fc_malloc(sizeof(*old));
53781 *old = *real_packet;
53782 genhash_insert(*hash, old, old);
53783 memset(old, 0, sizeof(*old));
53784 }
53785 differ = (old->id != real_packet->id);
53786 if (differ) {
53787 BV_SET(fields, 0);
53788 }
53789
53790 differ = (old->reqs_count != real_packet->reqs_count);
53791 if (differ) {
53792 BV_SET(fields, 1);
53793 }
53794
53795 differ = (old->reqs_count != real_packet->reqs_count);
53796 if (!differ) {
53797 int i;
53798
53799 for (i = 0; i < real_packet->reqs_count; i++) {
53800 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
53801 if (differ) {
53802 break;
53803 }
53804 }
53805 }
53806 if (differ) {
53807 BV_SET(fields, 2);
53808 }
53809
53810 differ = (strcmp(old->name, real_packet->name) != 0);
53811 if (differ) {
53812 BV_SET(fields, 3);
53813 }
53814
53815 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
53816 if (differ) {
53817 BV_SET(fields, 4);
53818 }
53819
53820 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
53821 if (differ) {
53822 BV_SET(fields, 5);
53823 }
53824
53825 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
53826 if (differ) {
53827 BV_SET(fields, 6);
53828 }
53829
53830 differ = (strcmp(old->sound_str, real_packet->sound_str) != 0);
53831 if (differ) {
53832 BV_SET(fields, 7);
53833 }
53834
53835 differ = (strcmp(old->sound_alt, real_packet->sound_alt) != 0);
53836 if (differ) {
53837 BV_SET(fields, 8);
53838 }
53839
53840 differ = (strcmp(old->sound_alt2, real_packet->sound_alt2) != 0);
53841 if (differ) {
53842 BV_SET(fields, 9);
53843 }
53844
53845 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
53846 if (differ) {
53847 BV_SET(fields, 10);
53848 }
53849
53850
53851#ifdef FREECIV_JSON_CONNECTION
53852 field_addr.name = "fields";
53853#endif /* FREECIV_JSON_CONNECTION */
53854 e = 0;
53855 e |= DIO_BV_PUT(&dout, &field_addr, fields);
53856 if (e) {
53857 log_packet_detailed("fields bitvector error detected");
53858 }
53859
53860 if (BV_ISSET(fields, 0)) {
53861 log_packet_detailed(" field 'id' has changed");
53862#ifdef FREECIV_JSON_CONNECTION
53863 field_addr.name = "id";
53864#endif /* FREECIV_JSON_CONNECTION */
53865 e = 0;
53866 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
53867 if (e) {
53868 log_packet_detailed("'id' field error detected");
53869 }
53870 }
53871 if (BV_ISSET(fields, 1)) {
53872 log_packet_detailed(" field 'reqs_count' has changed");
53873#ifdef FREECIV_JSON_CONNECTION
53874 field_addr.name = "reqs_count";
53875#endif /* FREECIV_JSON_CONNECTION */
53876 e = 0;
53877 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
53878 if (e) {
53879 log_packet_detailed("'reqs_count' field error detected");
53880 }
53881 }
53882 if (BV_ISSET(fields, 2)) {
53883 log_packet_detailed(" field 'reqs' has changed");
53884#ifdef FREECIV_JSON_CONNECTION
53885 field_addr.name = "reqs";
53886#endif /* FREECIV_JSON_CONNECTION */
53887 e = 0;
53888 {
53889 int i;
53890
53891#ifdef FREECIV_JSON_CONNECTION
53892 /* Create the array. */
53893 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
53894
53895 /* Enter the array. */
53896 field_addr.sub_location = plocation_elem_new(0);
53897#endif /* FREECIV_JSON_CONNECTION */
53898
53899 for (i = 0; i < real_packet->reqs_count; i++) {
53900#ifdef FREECIV_JSON_CONNECTION
53901 /* Next array element. */
53902 field_addr.sub_location->number = i;
53903#endif /* FREECIV_JSON_CONNECTION */
53904
53905 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
53906 }
53907
53908#ifdef FREECIV_JSON_CONNECTION
53909 /* Exit array. */
53910 FC_FREE(field_addr.sub_location);
53911#endif /* FREECIV_JSON_CONNECTION */
53912 }
53913 if (e) {
53914 log_packet_detailed("'reqs' field error detected");
53915 }
53916 }
53917 if (BV_ISSET(fields, 3)) {
53918 log_packet_detailed(" field 'name' has changed");
53919#ifdef FREECIV_JSON_CONNECTION
53920 field_addr.name = "name";
53921#endif /* FREECIV_JSON_CONNECTION */
53922 e = 0;
53923 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
53924 if (e) {
53925 log_packet_detailed("'name' field error detected");
53926 }
53927 }
53928 if (BV_ISSET(fields, 4)) {
53929 log_packet_detailed(" field 'rule_name' has changed");
53930#ifdef FREECIV_JSON_CONNECTION
53931 field_addr.name = "rule_name";
53932#endif /* FREECIV_JSON_CONNECTION */
53933 e = 0;
53934 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
53935 if (e) {
53936 log_packet_detailed("'rule_name' field error detected");
53937 }
53938 }
53939 if (BV_ISSET(fields, 5)) {
53940 log_packet_detailed(" field 'graphic_str' has changed");
53941#ifdef FREECIV_JSON_CONNECTION
53942 field_addr.name = "graphic_str";
53943#endif /* FREECIV_JSON_CONNECTION */
53944 e = 0;
53945 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
53946 if (e) {
53947 log_packet_detailed("'graphic_str' field error detected");
53948 }
53949 }
53950 if (BV_ISSET(fields, 6)) {
53951 log_packet_detailed(" field 'graphic_alt' has changed");
53952#ifdef FREECIV_JSON_CONNECTION
53953 field_addr.name = "graphic_alt";
53954#endif /* FREECIV_JSON_CONNECTION */
53955 e = 0;
53956 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
53957 if (e) {
53958 log_packet_detailed("'graphic_alt' field error detected");
53959 }
53960 }
53961 if (BV_ISSET(fields, 7)) {
53962 log_packet_detailed(" field 'sound_str' has changed");
53963#ifdef FREECIV_JSON_CONNECTION
53964 field_addr.name = "sound_str";
53965#endif /* FREECIV_JSON_CONNECTION */
53966 e = 0;
53967 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
53968 if (e) {
53969 log_packet_detailed("'sound_str' field error detected");
53970 }
53971 }
53972 if (BV_ISSET(fields, 8)) {
53973 log_packet_detailed(" field 'sound_alt' has changed");
53974#ifdef FREECIV_JSON_CONNECTION
53975 field_addr.name = "sound_alt";
53976#endif /* FREECIV_JSON_CONNECTION */
53977 e = 0;
53978 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
53979 if (e) {
53980 log_packet_detailed("'sound_alt' field error detected");
53981 }
53982 }
53983 if (BV_ISSET(fields, 9)) {
53984 log_packet_detailed(" field 'sound_alt2' has changed");
53985#ifdef FREECIV_JSON_CONNECTION
53986 field_addr.name = "sound_alt2";
53987#endif /* FREECIV_JSON_CONNECTION */
53988 e = 0;
53989 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
53990 if (e) {
53991 log_packet_detailed("'sound_alt2' field error detected");
53992 }
53993 }
53994 if (BV_ISSET(fields, 10)) {
53995 log_packet_detailed(" field 'helptext' has changed");
53996#ifdef FREECIV_JSON_CONNECTION
53997 field_addr.name = "helptext";
53998#endif /* FREECIV_JSON_CONNECTION */
53999 e = 0;
54000 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
54001 if (e) {
54002 log_packet_detailed("'helptext' field error detected");
54003 }
54004 }
54005
54006 *old = *real_packet;
54007#endif /* FREECIV_DELTA_PROTOCOL */
54008#ifndef FREECIV_DELTA_PROTOCOL
54009#ifdef FREECIV_JSON_CONNECTION
54010 field_addr.name = "id";
54011#endif /* FREECIV_JSON_CONNECTION */
54012 e = 0;
54013 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->id);
54014 if (e) {
54015 log_packet_detailed("'id' field error detected");
54016 }
54017#ifdef FREECIV_JSON_CONNECTION
54018 field_addr.name = "reqs_count";
54019#endif /* FREECIV_JSON_CONNECTION */
54020 e = 0;
54021 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
54022 if (e) {
54023 log_packet_detailed("'reqs_count' field error detected");
54024 }
54025#ifdef FREECIV_JSON_CONNECTION
54026 field_addr.name = "reqs";
54027#endif /* FREECIV_JSON_CONNECTION */
54028 e = 0;
54029 {
54030 int i;
54031
54032#ifdef FREECIV_JSON_CONNECTION
54033 /* Create the array. */
54034 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
54035
54036 /* Enter the array. */
54037 field_addr.sub_location = plocation_elem_new(0);
54038#endif /* FREECIV_JSON_CONNECTION */
54039
54040 for (i = 0; i < real_packet->reqs_count; i++) {
54041#ifdef FREECIV_JSON_CONNECTION
54042 /* Next array element. */
54043 field_addr.sub_location->number = i;
54044#endif /* FREECIV_JSON_CONNECTION */
54045
54046 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
54047 }
54048
54049#ifdef FREECIV_JSON_CONNECTION
54050 /* Exit array. */
54051 FC_FREE(field_addr.sub_location);
54052#endif /* FREECIV_JSON_CONNECTION */
54053 }
54054 if (e) {
54055 log_packet_detailed("'reqs' field error detected");
54056 }
54057#ifdef FREECIV_JSON_CONNECTION
54058 field_addr.name = "name";
54059#endif /* FREECIV_JSON_CONNECTION */
54060 e = 0;
54061 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
54062 if (e) {
54063 log_packet_detailed("'name' field error detected");
54064 }
54065#ifdef FREECIV_JSON_CONNECTION
54066 field_addr.name = "rule_name";
54067#endif /* FREECIV_JSON_CONNECTION */
54068 e = 0;
54069 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
54070 if (e) {
54071 log_packet_detailed("'rule_name' field error detected");
54072 }
54073#ifdef FREECIV_JSON_CONNECTION
54074 field_addr.name = "graphic_str";
54075#endif /* FREECIV_JSON_CONNECTION */
54076 e = 0;
54077 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
54078 if (e) {
54079 log_packet_detailed("'graphic_str' field error detected");
54080 }
54081#ifdef FREECIV_JSON_CONNECTION
54082 field_addr.name = "graphic_alt";
54083#endif /* FREECIV_JSON_CONNECTION */
54084 e = 0;
54085 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
54086 if (e) {
54087 log_packet_detailed("'graphic_alt' field error detected");
54088 }
54089#ifdef FREECIV_JSON_CONNECTION
54090 field_addr.name = "sound_str";
54091#endif /* FREECIV_JSON_CONNECTION */
54092 e = 0;
54093 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_str);
54094 if (e) {
54095 log_packet_detailed("'sound_str' field error detected");
54096 }
54097#ifdef FREECIV_JSON_CONNECTION
54098 field_addr.name = "sound_alt";
54099#endif /* FREECIV_JSON_CONNECTION */
54100 e = 0;
54101 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt);
54102 if (e) {
54103 log_packet_detailed("'sound_alt' field error detected");
54104 }
54105#ifdef FREECIV_JSON_CONNECTION
54106 field_addr.name = "sound_alt2";
54107#endif /* FREECIV_JSON_CONNECTION */
54108 e = 0;
54109 e |= DIO_PUT(string, &dout, &field_addr, real_packet->sound_alt2);
54110 if (e) {
54111 log_packet_detailed("'sound_alt2' field error detected");
54112 }
54113#ifdef FREECIV_JSON_CONNECTION
54114 field_addr.name = "helptext";
54115#endif /* FREECIV_JSON_CONNECTION */
54116 e = 0;
54117 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
54118 if (e) {
54119 log_packet_detailed("'helptext' field error detected");
54120 }
54121
54122#endif
54124}
54125
54127{
54128 if (!pc->used) {
54129 log_error("WARNING: trying to send data to the closed connection %s",
54131 return -1;
54132 }
54133 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet != NULL, -1,
54134 "Handler for PACKET_RULESET_GOVERNMENT not installed");
54135 return pc->phs.handlers->send[PACKET_RULESET_GOVERNMENT].packet(pc, packet);
54136}
54137
54139{
54140 conn_list_iterate(dest, pconn) {
54143}
54144
54145#ifdef FREECIV_DELTA_PROTOCOL
54146#define hash_packet_ruleset_terrain_control_100 hash_const
54147
54148#define cmp_packet_ruleset_terrain_control_100 cmp_const
54149
54151#endif /* FREECIV_DELTA_PROTOCOL */
54152
54154{
54155#ifdef FREECIV_DELTA_PROTOCOL
54158 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_CONTROL;
54159#endif /* FREECIV_DELTA_PROTOCOL */
54161#ifdef FREECIV_JSON_CONNECTION
54162 struct plocation field_addr;
54163 {
54167 }
54168#endif /* FREECIV_JSON_CONNECTION */
54169
54170#ifdef FREECIV_DELTA_PROTOCOL
54171#ifdef FREECIV_JSON_CONNECTION
54172 field_addr.name = "fields";
54173#endif /* FREECIV_JSON_CONNECTION */
54174 DIO_BV_GET(&din, &field_addr, fields);
54175
54176#else /* FREECIV_DELTA_PROTOCOL */
54177#ifdef FREECIV_JSON_CONNECTION
54178 field_addr.name = "ocean_reclaim_requirement_pct";
54179#endif /* FREECIV_JSON_CONNECTION */
54180 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
54181 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
54182 }
54183#ifdef FREECIV_JSON_CONNECTION
54184 field_addr.name = "land_channel_requirement_pct";
54185#endif /* FREECIV_JSON_CONNECTION */
54186 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
54187 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
54188 }
54189#ifdef FREECIV_JSON_CONNECTION
54190 field_addr.name = "terrain_thaw_requirement_pct";
54191#endif /* FREECIV_JSON_CONNECTION */
54192 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
54193 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
54194 }
54195#ifdef FREECIV_JSON_CONNECTION
54196 field_addr.name = "terrain_freeze_requirement_pct";
54197#endif /* FREECIV_JSON_CONNECTION */
54198 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
54199 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
54200 }
54201#ifdef FREECIV_JSON_CONNECTION
54202 field_addr.name = "lake_max_size";
54203#endif /* FREECIV_JSON_CONNECTION */
54204 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
54205 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
54206 }
54207#ifdef FREECIV_JSON_CONNECTION
54208 field_addr.name = "min_start_native_area";
54209#endif /* FREECIV_JSON_CONNECTION */
54210 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
54211 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
54212 }
54213#ifdef FREECIV_JSON_CONNECTION
54214 field_addr.name = "move_fragments";
54215#endif /* FREECIV_JSON_CONNECTION */
54216 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
54217 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
54218 }
54219#ifdef FREECIV_JSON_CONNECTION
54220 field_addr.name = "igter_cost";
54221#endif /* FREECIV_JSON_CONNECTION */
54222 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
54223 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
54224 }
54225#ifdef FREECIV_JSON_CONNECTION
54226 field_addr.name = "pythagorean_diagonal";
54227#endif /* FREECIV_JSON_CONNECTION */
54228 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->pythagorean_diagonal)) {
54229 RECEIVE_PACKET_FIELD_ERROR(pythagorean_diagonal);
54230 }
54231#ifdef FREECIV_JSON_CONNECTION
54232 field_addr.name = "infrapoints";
54233#endif /* FREECIV_JSON_CONNECTION */
54234 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->infrapoints)) {
54235 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
54236 }
54237#ifdef FREECIV_JSON_CONNECTION
54238 field_addr.name = "gui_type_base0";
54239#endif /* FREECIV_JSON_CONNECTION */
54240 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
54241 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
54242 }
54243#ifdef FREECIV_JSON_CONNECTION
54244 field_addr.name = "gui_type_base1";
54245#endif /* FREECIV_JSON_CONNECTION */
54246 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
54247 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
54248 }
54249#endif
54250 log_packet_detailed("packet_ruleset_terrain_control_100: got info about ()");
54251
54252#ifdef FREECIV_DELTA_PROTOCOL
54253 if (NULL == *hash) {
54255 NULL, NULL, NULL, free);
54256 }
54257
54258 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54259 *real_packet = *old;
54260 } else {
54261 log_packet_detailed(" no old info");
54262 memset(real_packet, 0, sizeof(*real_packet));
54263 }
54264
54265 if (BV_ISSET(fields, 0)) {
54266 log_packet_detailed(" got field 'ocean_reclaim_requirement_pct'");
54267#ifdef FREECIV_JSON_CONNECTION
54268 field_addr.name = "ocean_reclaim_requirement_pct";
54269#endif /* FREECIV_JSON_CONNECTION */
54270 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ocean_reclaim_requirement_pct)) {
54271 RECEIVE_PACKET_FIELD_ERROR(ocean_reclaim_requirement_pct);
54272 }
54273 }
54274 if (BV_ISSET(fields, 1)) {
54275 log_packet_detailed(" got field 'land_channel_requirement_pct'");
54276#ifdef FREECIV_JSON_CONNECTION
54277 field_addr.name = "land_channel_requirement_pct";
54278#endif /* FREECIV_JSON_CONNECTION */
54279 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->land_channel_requirement_pct)) {
54280 RECEIVE_PACKET_FIELD_ERROR(land_channel_requirement_pct);
54281 }
54282 }
54283 if (BV_ISSET(fields, 2)) {
54284 log_packet_detailed(" got field 'terrain_thaw_requirement_pct'");
54285#ifdef FREECIV_JSON_CONNECTION
54286 field_addr.name = "terrain_thaw_requirement_pct";
54287#endif /* FREECIV_JSON_CONNECTION */
54288 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_thaw_requirement_pct)) {
54289 RECEIVE_PACKET_FIELD_ERROR(terrain_thaw_requirement_pct);
54290 }
54291 }
54292 if (BV_ISSET(fields, 3)) {
54293 log_packet_detailed(" got field 'terrain_freeze_requirement_pct'");
54294#ifdef FREECIV_JSON_CONNECTION
54295 field_addr.name = "terrain_freeze_requirement_pct";
54296#endif /* FREECIV_JSON_CONNECTION */
54297 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->terrain_freeze_requirement_pct)) {
54298 RECEIVE_PACKET_FIELD_ERROR(terrain_freeze_requirement_pct);
54299 }
54300 }
54301 if (BV_ISSET(fields, 4)) {
54302 log_packet_detailed(" got field 'lake_max_size'");
54303#ifdef FREECIV_JSON_CONNECTION
54304 field_addr.name = "lake_max_size";
54305#endif /* FREECIV_JSON_CONNECTION */
54306 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->lake_max_size)) {
54307 RECEIVE_PACKET_FIELD_ERROR(lake_max_size);
54308 }
54309 }
54310 if (BV_ISSET(fields, 5)) {
54311 log_packet_detailed(" got field 'min_start_native_area'");
54312#ifdef FREECIV_JSON_CONNECTION
54313 field_addr.name = "min_start_native_area";
54314#endif /* FREECIV_JSON_CONNECTION */
54315 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->min_start_native_area)) {
54316 RECEIVE_PACKET_FIELD_ERROR(min_start_native_area);
54317 }
54318 }
54319 if (BV_ISSET(fields, 6)) {
54320 log_packet_detailed(" got field 'move_fragments'");
54321#ifdef FREECIV_JSON_CONNECTION
54322 field_addr.name = "move_fragments";
54323#endif /* FREECIV_JSON_CONNECTION */
54324 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->move_fragments)) {
54325 RECEIVE_PACKET_FIELD_ERROR(move_fragments);
54326 }
54327 }
54328 if (BV_ISSET(fields, 7)) {
54329 log_packet_detailed(" got field 'igter_cost'");
54330#ifdef FREECIV_JSON_CONNECTION
54331 field_addr.name = "igter_cost";
54332#endif /* FREECIV_JSON_CONNECTION */
54333 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->igter_cost)) {
54334 RECEIVE_PACKET_FIELD_ERROR(igter_cost);
54335 }
54336 }
54337 real_packet->pythagorean_diagonal = BV_ISSET(fields, 8);
54338 real_packet->infrapoints = BV_ISSET(fields, 9);
54339 if (BV_ISSET(fields, 10)) {
54340 log_packet_detailed(" got field 'gui_type_base0'");
54341#ifdef FREECIV_JSON_CONNECTION
54342 field_addr.name = "gui_type_base0";
54343#endif /* FREECIV_JSON_CONNECTION */
54344 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base0, sizeof(real_packet->gui_type_base0))) {
54345 RECEIVE_PACKET_FIELD_ERROR(gui_type_base0);
54346 }
54347 }
54348 if (BV_ISSET(fields, 11)) {
54349 log_packet_detailed(" got field 'gui_type_base1'");
54350#ifdef FREECIV_JSON_CONNECTION
54351 field_addr.name = "gui_type_base1";
54352#endif /* FREECIV_JSON_CONNECTION */
54353 if (!DIO_GET(string, &din, &field_addr, real_packet->gui_type_base1, sizeof(real_packet->gui_type_base1))) {
54354 RECEIVE_PACKET_FIELD_ERROR(gui_type_base1);
54355 }
54356 }
54357
54358 if (NULL == old) {
54359 old = fc_malloc(sizeof(*old));
54360 *old = *real_packet;
54361 genhash_insert(*hash, old, old);
54362 } else {
54363 *old = *real_packet;
54364 }
54365
54366#endif /* FREECIV_DELTA_PROTOCOL */
54368}
54369
54371{
54372 const struct packet_ruleset_terrain_control *real_packet = packet;
54373 int e;
54374#ifdef FREECIV_DELTA_PROTOCOL
54377 bool differ;
54378 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_CONTROL;
54379#endif /* FREECIV_DELTA_PROTOCOL */
54381#ifdef FREECIV_JSON_CONNECTION
54382 struct plocation field_addr;
54383 {
54387 }
54388#endif /* FREECIV_JSON_CONNECTION */
54389
54390 log_packet_detailed("packet_ruleset_terrain_control_100: sending info about ()");
54391
54392#ifdef FREECIV_DELTA_PROTOCOL
54393 if (NULL == *hash) {
54395 NULL, NULL, NULL, free);
54396 }
54397 BV_CLR_ALL(fields);
54398
54399 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
54400 old = fc_malloc(sizeof(*old));
54401 *old = *real_packet;
54402 genhash_insert(*hash, old, old);
54403 memset(old, 0, sizeof(*old));
54404 }
54405 differ = (old->ocean_reclaim_requirement_pct != real_packet->ocean_reclaim_requirement_pct);
54406 if (differ) {
54407 BV_SET(fields, 0);
54408 }
54409
54410 differ = (old->land_channel_requirement_pct != real_packet->land_channel_requirement_pct);
54411 if (differ) {
54412 BV_SET(fields, 1);
54413 }
54414
54415 differ = (old->terrain_thaw_requirement_pct != real_packet->terrain_thaw_requirement_pct);
54416 if (differ) {
54417 BV_SET(fields, 2);
54418 }
54419
54420 differ = (old->terrain_freeze_requirement_pct != real_packet->terrain_freeze_requirement_pct);
54421 if (differ) {
54422 BV_SET(fields, 3);
54423 }
54424
54425 differ = (old->lake_max_size != real_packet->lake_max_size);
54426 if (differ) {
54427 BV_SET(fields, 4);
54428 }
54429
54430 differ = (old->min_start_native_area != real_packet->min_start_native_area);
54431 if (differ) {
54432 BV_SET(fields, 5);
54433 }
54434
54435 differ = (old->move_fragments != real_packet->move_fragments);
54436 if (differ) {
54437 BV_SET(fields, 6);
54438 }
54439
54440 differ = (old->igter_cost != real_packet->igter_cost);
54441 if (differ) {
54442 BV_SET(fields, 7);
54443 }
54444
54445 if (packet->pythagorean_diagonal) {
54446 BV_SET(fields, 8);
54447 }
54448
54449 if (packet->infrapoints) {
54450 BV_SET(fields, 9);
54451 }
54452
54453 differ = (strcmp(old->gui_type_base0, real_packet->gui_type_base0) != 0);
54454 if (differ) {
54455 BV_SET(fields, 10);
54456 }
54457
54458 differ = (strcmp(old->gui_type_base1, real_packet->gui_type_base1) != 0);
54459 if (differ) {
54460 BV_SET(fields, 11);
54461 }
54462
54463
54464#ifdef FREECIV_JSON_CONNECTION
54465 field_addr.name = "fields";
54466#endif /* FREECIV_JSON_CONNECTION */
54467 e = 0;
54468 e |= DIO_BV_PUT(&dout, &field_addr, fields);
54469 if (e) {
54470 log_packet_detailed("fields bitvector error detected");
54471 }
54472
54473 if (BV_ISSET(fields, 0)) {
54474 log_packet_detailed(" field 'ocean_reclaim_requirement_pct' has changed");
54475#ifdef FREECIV_JSON_CONNECTION
54476 field_addr.name = "ocean_reclaim_requirement_pct";
54477#endif /* FREECIV_JSON_CONNECTION */
54478 e = 0;
54479 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
54480 if (e) {
54481 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
54482 }
54483 }
54484 if (BV_ISSET(fields, 1)) {
54485 log_packet_detailed(" field 'land_channel_requirement_pct' has changed");
54486#ifdef FREECIV_JSON_CONNECTION
54487 field_addr.name = "land_channel_requirement_pct";
54488#endif /* FREECIV_JSON_CONNECTION */
54489 e = 0;
54490 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
54491 if (e) {
54492 log_packet_detailed("'land_channel_requirement_pct' field error detected");
54493 }
54494 }
54495 if (BV_ISSET(fields, 2)) {
54496 log_packet_detailed(" field 'terrain_thaw_requirement_pct' has changed");
54497#ifdef FREECIV_JSON_CONNECTION
54498 field_addr.name = "terrain_thaw_requirement_pct";
54499#endif /* FREECIV_JSON_CONNECTION */
54500 e = 0;
54501 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
54502 if (e) {
54503 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
54504 }
54505 }
54506 if (BV_ISSET(fields, 3)) {
54507 log_packet_detailed(" field 'terrain_freeze_requirement_pct' has changed");
54508#ifdef FREECIV_JSON_CONNECTION
54509 field_addr.name = "terrain_freeze_requirement_pct";
54510#endif /* FREECIV_JSON_CONNECTION */
54511 e = 0;
54512 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
54513 if (e) {
54514 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
54515 }
54516 }
54517 if (BV_ISSET(fields, 4)) {
54518 log_packet_detailed(" field 'lake_max_size' has changed");
54519#ifdef FREECIV_JSON_CONNECTION
54520 field_addr.name = "lake_max_size";
54521#endif /* FREECIV_JSON_CONNECTION */
54522 e = 0;
54523 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
54524 if (e) {
54525 log_packet_detailed("'lake_max_size' field error detected");
54526 }
54527 }
54528 if (BV_ISSET(fields, 5)) {
54529 log_packet_detailed(" field 'min_start_native_area' has changed");
54530#ifdef FREECIV_JSON_CONNECTION
54531 field_addr.name = "min_start_native_area";
54532#endif /* FREECIV_JSON_CONNECTION */
54533 e = 0;
54534 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
54535 if (e) {
54536 log_packet_detailed("'min_start_native_area' field error detected");
54537 }
54538 }
54539 if (BV_ISSET(fields, 6)) {
54540 log_packet_detailed(" field 'move_fragments' has changed");
54541#ifdef FREECIV_JSON_CONNECTION
54542 field_addr.name = "move_fragments";
54543#endif /* FREECIV_JSON_CONNECTION */
54544 e = 0;
54545 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
54546 if (e) {
54547 log_packet_detailed("'move_fragments' field error detected");
54548 }
54549 }
54550 if (BV_ISSET(fields, 7)) {
54551 log_packet_detailed(" field 'igter_cost' has changed");
54552#ifdef FREECIV_JSON_CONNECTION
54553 field_addr.name = "igter_cost";
54554#endif /* FREECIV_JSON_CONNECTION */
54555 e = 0;
54556 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
54557 if (e) {
54558 log_packet_detailed("'igter_cost' field error detected");
54559 }
54560 }
54561 /* field 8 is folded into the header */
54562 /* field 9 is folded into the header */
54563 if (BV_ISSET(fields, 10)) {
54564 log_packet_detailed(" field 'gui_type_base0' has changed");
54565#ifdef FREECIV_JSON_CONNECTION
54566 field_addr.name = "gui_type_base0";
54567#endif /* FREECIV_JSON_CONNECTION */
54568 e = 0;
54569 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
54570 if (e) {
54571 log_packet_detailed("'gui_type_base0' field error detected");
54572 }
54573 }
54574 if (BV_ISSET(fields, 11)) {
54575 log_packet_detailed(" field 'gui_type_base1' has changed");
54576#ifdef FREECIV_JSON_CONNECTION
54577 field_addr.name = "gui_type_base1";
54578#endif /* FREECIV_JSON_CONNECTION */
54579 e = 0;
54580 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
54581 if (e) {
54582 log_packet_detailed("'gui_type_base1' field error detected");
54583 }
54584 }
54585
54586 *old = *real_packet;
54587#endif /* FREECIV_DELTA_PROTOCOL */
54588#ifndef FREECIV_DELTA_PROTOCOL
54589#ifdef FREECIV_JSON_CONNECTION
54590 field_addr.name = "ocean_reclaim_requirement_pct";
54591#endif /* FREECIV_JSON_CONNECTION */
54592 e = 0;
54593 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ocean_reclaim_requirement_pct);
54594 if (e) {
54595 log_packet_detailed("'ocean_reclaim_requirement_pct' field error detected");
54596 }
54597#ifdef FREECIV_JSON_CONNECTION
54598 field_addr.name = "land_channel_requirement_pct";
54599#endif /* FREECIV_JSON_CONNECTION */
54600 e = 0;
54601 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->land_channel_requirement_pct);
54602 if (e) {
54603 log_packet_detailed("'land_channel_requirement_pct' field error detected");
54604 }
54605#ifdef FREECIV_JSON_CONNECTION
54606 field_addr.name = "terrain_thaw_requirement_pct";
54607#endif /* FREECIV_JSON_CONNECTION */
54608 e = 0;
54609 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_thaw_requirement_pct);
54610 if (e) {
54611 log_packet_detailed("'terrain_thaw_requirement_pct' field error detected");
54612 }
54613#ifdef FREECIV_JSON_CONNECTION
54614 field_addr.name = "terrain_freeze_requirement_pct";
54615#endif /* FREECIV_JSON_CONNECTION */
54616 e = 0;
54617 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain_freeze_requirement_pct);
54618 if (e) {
54619 log_packet_detailed("'terrain_freeze_requirement_pct' field error detected");
54620 }
54621#ifdef FREECIV_JSON_CONNECTION
54622 field_addr.name = "lake_max_size";
54623#endif /* FREECIV_JSON_CONNECTION */
54624 e = 0;
54625 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->lake_max_size);
54626 if (e) {
54627 log_packet_detailed("'lake_max_size' field error detected");
54628 }
54629#ifdef FREECIV_JSON_CONNECTION
54630 field_addr.name = "min_start_native_area";
54631#endif /* FREECIV_JSON_CONNECTION */
54632 e = 0;
54633 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->min_start_native_area);
54634 if (e) {
54635 log_packet_detailed("'min_start_native_area' field error detected");
54636 }
54637#ifdef FREECIV_JSON_CONNECTION
54638 field_addr.name = "move_fragments";
54639#endif /* FREECIV_JSON_CONNECTION */
54640 e = 0;
54641 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->move_fragments);
54642 if (e) {
54643 log_packet_detailed("'move_fragments' field error detected");
54644 }
54645#ifdef FREECIV_JSON_CONNECTION
54646 field_addr.name = "igter_cost";
54647#endif /* FREECIV_JSON_CONNECTION */
54648 e = 0;
54649 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->igter_cost);
54650 if (e) {
54651 log_packet_detailed("'igter_cost' field error detected");
54652 }
54653#ifdef FREECIV_JSON_CONNECTION
54654 field_addr.name = "pythagorean_diagonal";
54655#endif /* FREECIV_JSON_CONNECTION */
54656 e = 0;
54657 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->pythagorean_diagonal);
54658 if (e) {
54659 log_packet_detailed("'pythagorean_diagonal' field error detected");
54660 }
54661#ifdef FREECIV_JSON_CONNECTION
54662 field_addr.name = "infrapoints";
54663#endif /* FREECIV_JSON_CONNECTION */
54664 e = 0;
54665 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->infrapoints);
54666 if (e) {
54667 log_packet_detailed("'infrapoints' field error detected");
54668 }
54669#ifdef FREECIV_JSON_CONNECTION
54670 field_addr.name = "gui_type_base0";
54671#endif /* FREECIV_JSON_CONNECTION */
54672 e = 0;
54673 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base0);
54674 if (e) {
54675 log_packet_detailed("'gui_type_base0' field error detected");
54676 }
54677#ifdef FREECIV_JSON_CONNECTION
54678 field_addr.name = "gui_type_base1";
54679#endif /* FREECIV_JSON_CONNECTION */
54680 e = 0;
54681 e |= DIO_PUT(string, &dout, &field_addr, real_packet->gui_type_base1);
54682 if (e) {
54683 log_packet_detailed("'gui_type_base1' field error detected");
54684 }
54685
54686#endif
54688}
54689
54691{
54692 if (!pc->used) {
54693 log_error("WARNING: trying to send data to the closed connection %s",
54695 return -1;
54696 }
54697 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet != NULL, -1,
54698 "Handler for PACKET_RULESET_TERRAIN_CONTROL not installed");
54699 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_CONTROL].packet(pc, packet);
54700}
54701
54708
54710{
54712#if 1 /* To match endif */
54713 real_packet->__dummy = 0xff;
54714#endif
54715 log_packet_detailed("packet_rulesets_ready_100: got info about ()");
54717}
54718
54720{
54722
54723 log_packet_detailed("packet_rulesets_ready_100: sending info about ()");
54725}
54726
54728{
54729 if (!pc->used) {
54730 log_error("WARNING: trying to send data to the closed connection %s",
54732 return -1;
54733 }
54734 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet != NULL, -1,
54735 "Handler for PACKET_RULESETS_READY not installed");
54736 return pc->phs.handlers->send[PACKET_RULESETS_READY].no_packet(pc);
54737}
54738
54745
54746#ifdef FREECIV_DELTA_PROTOCOL
54747#define hash_packet_ruleset_nation_sets_100 hash_const
54748
54749#define cmp_packet_ruleset_nation_sets_100 cmp_const
54750
54752#endif /* FREECIV_DELTA_PROTOCOL */
54753
54755{
54756#ifdef FREECIV_DELTA_PROTOCOL
54758 struct packet_ruleset_nation_sets *old;
54759 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_SETS;
54760#endif /* FREECIV_DELTA_PROTOCOL */
54762#ifdef FREECIV_JSON_CONNECTION
54763 struct plocation field_addr;
54764 {
54768 }
54769#endif /* FREECIV_JSON_CONNECTION */
54770
54771#ifdef FREECIV_DELTA_PROTOCOL
54772#ifdef FREECIV_JSON_CONNECTION
54773 field_addr.name = "fields";
54774#endif /* FREECIV_JSON_CONNECTION */
54775 DIO_BV_GET(&din, &field_addr, fields);
54776
54777#else /* FREECIV_DELTA_PROTOCOL */
54778#ifdef FREECIV_JSON_CONNECTION
54779 field_addr.name = "nsets";
54780#endif /* FREECIV_JSON_CONNECTION */
54781 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
54783 }
54784#ifdef FREECIV_JSON_CONNECTION
54785 field_addr.name = "names";
54786#endif /* FREECIV_JSON_CONNECTION */
54787 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
54788 RECEIVE_PACKET_FIELD_ERROR(names, ": truncation array");
54789 }
54790 {
54791 int i;
54792
54793#ifdef FREECIV_JSON_CONNECTION
54794 /* Enter array. */
54795 field_addr.sub_location = plocation_elem_new(0);
54796#endif /* FREECIV_JSON_CONNECTION */
54797
54798 for (i = 0; i < real_packet->nsets; i++) {
54799#ifdef FREECIV_JSON_CONNECTION
54800 field_addr.sub_location->number = i;
54801#endif /* FREECIV_JSON_CONNECTION */
54802
54803 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
54805 }
54806 }
54807
54808#ifdef FREECIV_JSON_CONNECTION
54809 /* Exit array. */
54810 FC_FREE(field_addr.sub_location);
54811#endif /* FREECIV_JSON_CONNECTION */
54812 }
54813#ifdef FREECIV_JSON_CONNECTION
54814 field_addr.name = "rule_names";
54815#endif /* FREECIV_JSON_CONNECTION */
54816 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
54817 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": truncation array");
54818 }
54819 {
54820 int i;
54821
54822#ifdef FREECIV_JSON_CONNECTION
54823 /* Enter array. */
54824 field_addr.sub_location = plocation_elem_new(0);
54825#endif /* FREECIV_JSON_CONNECTION */
54826
54827 for (i = 0; i < real_packet->nsets; i++) {
54828#ifdef FREECIV_JSON_CONNECTION
54829 field_addr.sub_location->number = i;
54830#endif /* FREECIV_JSON_CONNECTION */
54831
54832 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
54833 RECEIVE_PACKET_FIELD_ERROR(rule_names);
54834 }
54835 }
54836
54837#ifdef FREECIV_JSON_CONNECTION
54838 /* Exit array. */
54839 FC_FREE(field_addr.sub_location);
54840#endif /* FREECIV_JSON_CONNECTION */
54841 }
54842#ifdef FREECIV_JSON_CONNECTION
54843 field_addr.name = "descriptions";
54844#endif /* FREECIV_JSON_CONNECTION */
54845 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
54846 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": truncation array");
54847 }
54848 {
54849 int i;
54850
54851#ifdef FREECIV_JSON_CONNECTION
54852 /* Enter array. */
54853 field_addr.sub_location = plocation_elem_new(0);
54854#endif /* FREECIV_JSON_CONNECTION */
54855
54856 for (i = 0; i < real_packet->nsets; i++) {
54857#ifdef FREECIV_JSON_CONNECTION
54858 field_addr.sub_location->number = i;
54859#endif /* FREECIV_JSON_CONNECTION */
54860
54861 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
54862 RECEIVE_PACKET_FIELD_ERROR(descriptions);
54863 }
54864 }
54865
54866#ifdef FREECIV_JSON_CONNECTION
54867 /* Exit array. */
54868 FC_FREE(field_addr.sub_location);
54869#endif /* FREECIV_JSON_CONNECTION */
54870 }
54871#endif
54872 log_packet_detailed("packet_ruleset_nation_sets_100: got info about ()");
54873
54874#ifdef FREECIV_DELTA_PROTOCOL
54875 if (NULL == *hash) {
54877 NULL, NULL, NULL, free);
54878 }
54879
54880 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
54881 *real_packet = *old;
54882 } else {
54883 log_packet_detailed(" no old info");
54884 memset(real_packet, 0, sizeof(*real_packet));
54885 }
54886
54887 if (BV_ISSET(fields, 0)) {
54888 log_packet_detailed(" got field 'nsets'");
54889#ifdef FREECIV_JSON_CONNECTION
54890 field_addr.name = "nsets";
54891#endif /* FREECIV_JSON_CONNECTION */
54892 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
54894 }
54895 }
54896 if (BV_ISSET(fields, 1)) {
54897 log_packet_detailed(" got field 'names'");
54898#ifdef FREECIV_JSON_CONNECTION
54899 field_addr.name = "names";
54900#endif /* FREECIV_JSON_CONNECTION */
54901 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
54902 RECEIVE_PACKET_FIELD_ERROR(names, ": truncation array");
54903 }
54904 {
54905 int i;
54906
54907#ifdef FREECIV_JSON_CONNECTION
54908 /* Enter array. */
54909 field_addr.sub_location = plocation_elem_new(0);
54910#endif /* FREECIV_JSON_CONNECTION */
54911
54912 for (i = 0; i < real_packet->nsets; i++) {
54913#ifdef FREECIV_JSON_CONNECTION
54914 field_addr.sub_location->number = i;
54915#endif /* FREECIV_JSON_CONNECTION */
54916
54917 if (!DIO_GET(string, &din, &field_addr, real_packet->names[i], sizeof(real_packet->names[i]))) {
54919 }
54920 }
54921
54922#ifdef FREECIV_JSON_CONNECTION
54923 /* Exit array. */
54924 FC_FREE(field_addr.sub_location);
54925#endif /* FREECIV_JSON_CONNECTION */
54926 }
54927 }
54928 if (BV_ISSET(fields, 2)) {
54929 log_packet_detailed(" got field 'rule_names'");
54930#ifdef FREECIV_JSON_CONNECTION
54931 field_addr.name = "rule_names";
54932#endif /* FREECIV_JSON_CONNECTION */
54933 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
54934 RECEIVE_PACKET_FIELD_ERROR(rule_names, ": truncation array");
54935 }
54936 {
54937 int i;
54938
54939#ifdef FREECIV_JSON_CONNECTION
54940 /* Enter array. */
54941 field_addr.sub_location = plocation_elem_new(0);
54942#endif /* FREECIV_JSON_CONNECTION */
54943
54944 for (i = 0; i < real_packet->nsets; i++) {
54945#ifdef FREECIV_JSON_CONNECTION
54946 field_addr.sub_location->number = i;
54947#endif /* FREECIV_JSON_CONNECTION */
54948
54949 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_names[i], sizeof(real_packet->rule_names[i]))) {
54950 RECEIVE_PACKET_FIELD_ERROR(rule_names);
54951 }
54952 }
54953
54954#ifdef FREECIV_JSON_CONNECTION
54955 /* Exit array. */
54956 FC_FREE(field_addr.sub_location);
54957#endif /* FREECIV_JSON_CONNECTION */
54958 }
54959 }
54960 if (BV_ISSET(fields, 3)) {
54961 log_packet_detailed(" got field 'descriptions'");
54962#ifdef FREECIV_JSON_CONNECTION
54963 field_addr.name = "descriptions";
54964#endif /* FREECIV_JSON_CONNECTION */
54965 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
54966 RECEIVE_PACKET_FIELD_ERROR(descriptions, ": truncation array");
54967 }
54968 {
54969 int i;
54970
54971#ifdef FREECIV_JSON_CONNECTION
54972 /* Enter array. */
54973 field_addr.sub_location = plocation_elem_new(0);
54974#endif /* FREECIV_JSON_CONNECTION */
54975
54976 for (i = 0; i < real_packet->nsets; i++) {
54977#ifdef FREECIV_JSON_CONNECTION
54978 field_addr.sub_location->number = i;
54979#endif /* FREECIV_JSON_CONNECTION */
54980
54981 if (!DIO_GET(string, &din, &field_addr, real_packet->descriptions[i], sizeof(real_packet->descriptions[i]))) {
54982 RECEIVE_PACKET_FIELD_ERROR(descriptions);
54983 }
54984 }
54985
54986#ifdef FREECIV_JSON_CONNECTION
54987 /* Exit array. */
54988 FC_FREE(field_addr.sub_location);
54989#endif /* FREECIV_JSON_CONNECTION */
54990 }
54991 }
54992
54993 if (NULL == old) {
54994 old = fc_malloc(sizeof(*old));
54995 *old = *real_packet;
54996 genhash_insert(*hash, old, old);
54997 } else {
54998 *old = *real_packet;
54999 }
55000
55001#endif /* FREECIV_DELTA_PROTOCOL */
55003}
55004
55006{
55007 const struct packet_ruleset_nation_sets *real_packet = packet;
55008 int e;
55009#ifdef FREECIV_DELTA_PROTOCOL
55011 struct packet_ruleset_nation_sets *old;
55012 bool differ;
55013 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_SETS;
55014#endif /* FREECIV_DELTA_PROTOCOL */
55016#ifdef FREECIV_JSON_CONNECTION
55017 struct plocation field_addr;
55018 {
55022 }
55023#endif /* FREECIV_JSON_CONNECTION */
55024
55025 log_packet_detailed("packet_ruleset_nation_sets_100: sending info about ()");
55026
55027#ifdef FREECIV_DELTA_PROTOCOL
55028 if (NULL == *hash) {
55030 NULL, NULL, NULL, free);
55031 }
55032 BV_CLR_ALL(fields);
55033
55034 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
55035 old = fc_malloc(sizeof(*old));
55036 *old = *real_packet;
55037 genhash_insert(*hash, old, old);
55038 memset(old, 0, sizeof(*old));
55039 }
55040 differ = (old->nsets != real_packet->nsets);
55041 if (differ) {
55042 BV_SET(fields, 0);
55043 }
55044
55045 differ = (old->nsets != real_packet->nsets);
55046 if (!differ) {
55047 int i;
55048
55049 for (i = 0; i < real_packet->nsets; i++) {
55050 differ = (strcmp(old->names[i], real_packet->names[i]) != 0);
55051 if (differ) {
55052 break;
55053 }
55054 }
55055 }
55056 if (differ) {
55057 BV_SET(fields, 1);
55058 }
55059
55060 differ = (old->nsets != real_packet->nsets);
55061 if (!differ) {
55062 int i;
55063
55064 for (i = 0; i < real_packet->nsets; i++) {
55065 differ = (strcmp(old->rule_names[i], real_packet->rule_names[i]) != 0);
55066 if (differ) {
55067 break;
55068 }
55069 }
55070 }
55071 if (differ) {
55072 BV_SET(fields, 2);
55073 }
55074
55075 differ = (old->nsets != real_packet->nsets);
55076 if (!differ) {
55077 int i;
55078
55079 for (i = 0; i < real_packet->nsets; i++) {
55080 differ = (strcmp(old->descriptions[i], real_packet->descriptions[i]) != 0);
55081 if (differ) {
55082 break;
55083 }
55084 }
55085 }
55086 if (differ) {
55087 BV_SET(fields, 3);
55088 }
55089
55090
55091#ifdef FREECIV_JSON_CONNECTION
55092 field_addr.name = "fields";
55093#endif /* FREECIV_JSON_CONNECTION */
55094 e = 0;
55095 e |= DIO_BV_PUT(&dout, &field_addr, fields);
55096 if (e) {
55097 log_packet_detailed("fields bitvector error detected");
55098 }
55099
55100 if (BV_ISSET(fields, 0)) {
55101 log_packet_detailed(" field 'nsets' has changed");
55102#ifdef FREECIV_JSON_CONNECTION
55103 field_addr.name = "nsets";
55104#endif /* FREECIV_JSON_CONNECTION */
55105 e = 0;
55106 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
55107 if (e) {
55108 log_packet_detailed("'nsets' field error detected");
55109 }
55110 }
55111 if (BV_ISSET(fields, 1)) {
55112 log_packet_detailed(" field 'names' has changed");
55113#ifdef FREECIV_JSON_CONNECTION
55114 field_addr.name = "names";
55115#endif /* FREECIV_JSON_CONNECTION */
55116 e = 0;
55117 {
55118 int i;
55119
55120#ifdef FREECIV_JSON_CONNECTION
55121 /* Create the array. */
55122 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
55123
55124 /* Enter the array. */
55125 field_addr.sub_location = plocation_elem_new(0);
55126#endif /* FREECIV_JSON_CONNECTION */
55127
55128 for (i = 0; i < real_packet->nsets; i++) {
55129#ifdef FREECIV_JSON_CONNECTION
55130 /* Next array element. */
55131 field_addr.sub_location->number = i;
55132#endif /* FREECIV_JSON_CONNECTION */
55133
55134 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
55135 }
55136
55137#ifdef FREECIV_JSON_CONNECTION
55138 /* Exit array. */
55139 FC_FREE(field_addr.sub_location);
55140#endif /* FREECIV_JSON_CONNECTION */
55141 }
55142 if (e) {
55143 log_packet_detailed("'names' field error detected");
55144 }
55145 }
55146 if (BV_ISSET(fields, 2)) {
55147 log_packet_detailed(" field 'rule_names' has changed");
55148#ifdef FREECIV_JSON_CONNECTION
55149 field_addr.name = "rule_names";
55150#endif /* FREECIV_JSON_CONNECTION */
55151 e = 0;
55152 {
55153 int i;
55154
55155#ifdef FREECIV_JSON_CONNECTION
55156 /* Create the array. */
55157 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
55158
55159 /* Enter the array. */
55160 field_addr.sub_location = plocation_elem_new(0);
55161#endif /* FREECIV_JSON_CONNECTION */
55162
55163 for (i = 0; i < real_packet->nsets; i++) {
55164#ifdef FREECIV_JSON_CONNECTION
55165 /* Next array element. */
55166 field_addr.sub_location->number = i;
55167#endif /* FREECIV_JSON_CONNECTION */
55168
55169 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
55170 }
55171
55172#ifdef FREECIV_JSON_CONNECTION
55173 /* Exit array. */
55174 FC_FREE(field_addr.sub_location);
55175#endif /* FREECIV_JSON_CONNECTION */
55176 }
55177 if (e) {
55178 log_packet_detailed("'rule_names' field error detected");
55179 }
55180 }
55181 if (BV_ISSET(fields, 3)) {
55182 log_packet_detailed(" field 'descriptions' has changed");
55183#ifdef FREECIV_JSON_CONNECTION
55184 field_addr.name = "descriptions";
55185#endif /* FREECIV_JSON_CONNECTION */
55186 e = 0;
55187 {
55188 int i;
55189
55190#ifdef FREECIV_JSON_CONNECTION
55191 /* Create the array. */
55192 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
55193
55194 /* Enter the array. */
55195 field_addr.sub_location = plocation_elem_new(0);
55196#endif /* FREECIV_JSON_CONNECTION */
55197
55198 for (i = 0; i < real_packet->nsets; i++) {
55199#ifdef FREECIV_JSON_CONNECTION
55200 /* Next array element. */
55201 field_addr.sub_location->number = i;
55202#endif /* FREECIV_JSON_CONNECTION */
55203
55204 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
55205 }
55206
55207#ifdef FREECIV_JSON_CONNECTION
55208 /* Exit array. */
55209 FC_FREE(field_addr.sub_location);
55210#endif /* FREECIV_JSON_CONNECTION */
55211 }
55212 if (e) {
55213 log_packet_detailed("'descriptions' field error detected");
55214 }
55215 }
55216
55217 *old = *real_packet;
55218#endif /* FREECIV_DELTA_PROTOCOL */
55219#ifndef FREECIV_DELTA_PROTOCOL
55220#ifdef FREECIV_JSON_CONNECTION
55221 field_addr.name = "nsets";
55222#endif /* FREECIV_JSON_CONNECTION */
55223 e = 0;
55224 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
55225 if (e) {
55226 log_packet_detailed("'nsets' field error detected");
55227 }
55228#ifdef FREECIV_JSON_CONNECTION
55229 field_addr.name = "names";
55230#endif /* FREECIV_JSON_CONNECTION */
55231 e = 0;
55232 {
55233 int i;
55234
55235#ifdef FREECIV_JSON_CONNECTION
55236 /* Create the array. */
55237 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
55238
55239 /* Enter the array. */
55240 field_addr.sub_location = plocation_elem_new(0);
55241#endif /* FREECIV_JSON_CONNECTION */
55242
55243 for (i = 0; i < real_packet->nsets; i++) {
55244#ifdef FREECIV_JSON_CONNECTION
55245 /* Next array element. */
55246 field_addr.sub_location->number = i;
55247#endif /* FREECIV_JSON_CONNECTION */
55248
55249 e |= DIO_PUT(string, &dout, &field_addr, real_packet->names[i]);
55250 }
55251
55252#ifdef FREECIV_JSON_CONNECTION
55253 /* Exit array. */
55254 FC_FREE(field_addr.sub_location);
55255#endif /* FREECIV_JSON_CONNECTION */
55256 }
55257 if (e) {
55258 log_packet_detailed("'names' field error detected");
55259 }
55260#ifdef FREECIV_JSON_CONNECTION
55261 field_addr.name = "rule_names";
55262#endif /* FREECIV_JSON_CONNECTION */
55263 e = 0;
55264 {
55265 int i;
55266
55267#ifdef FREECIV_JSON_CONNECTION
55268 /* Create the array. */
55269 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
55270
55271 /* Enter the array. */
55272 field_addr.sub_location = plocation_elem_new(0);
55273#endif /* FREECIV_JSON_CONNECTION */
55274
55275 for (i = 0; i < real_packet->nsets; i++) {
55276#ifdef FREECIV_JSON_CONNECTION
55277 /* Next array element. */
55278 field_addr.sub_location->number = i;
55279#endif /* FREECIV_JSON_CONNECTION */
55280
55281 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_names[i]);
55282 }
55283
55284#ifdef FREECIV_JSON_CONNECTION
55285 /* Exit array. */
55286 FC_FREE(field_addr.sub_location);
55287#endif /* FREECIV_JSON_CONNECTION */
55288 }
55289 if (e) {
55290 log_packet_detailed("'rule_names' field error detected");
55291 }
55292#ifdef FREECIV_JSON_CONNECTION
55293 field_addr.name = "descriptions";
55294#endif /* FREECIV_JSON_CONNECTION */
55295 e = 0;
55296 {
55297 int i;
55298
55299#ifdef FREECIV_JSON_CONNECTION
55300 /* Create the array. */
55301 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
55302
55303 /* Enter the array. */
55304 field_addr.sub_location = plocation_elem_new(0);
55305#endif /* FREECIV_JSON_CONNECTION */
55306
55307 for (i = 0; i < real_packet->nsets; i++) {
55308#ifdef FREECIV_JSON_CONNECTION
55309 /* Next array element. */
55310 field_addr.sub_location->number = i;
55311#endif /* FREECIV_JSON_CONNECTION */
55312
55313 e |= DIO_PUT(string, &dout, &field_addr, real_packet->descriptions[i]);
55314 }
55315
55316#ifdef FREECIV_JSON_CONNECTION
55317 /* Exit array. */
55318 FC_FREE(field_addr.sub_location);
55319#endif /* FREECIV_JSON_CONNECTION */
55320 }
55321 if (e) {
55322 log_packet_detailed("'descriptions' field error detected");
55323 }
55324
55325#endif
55327}
55328
55330{
55331 if (!pc->used) {
55332 log_error("WARNING: trying to send data to the closed connection %s",
55334 return -1;
55335 }
55336 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet != NULL, -1,
55337 "Handler for PACKET_RULESET_NATION_SETS not installed");
55338 return pc->phs.handlers->send[PACKET_RULESET_NATION_SETS].packet(pc, packet);
55339}
55340
55342{
55343 conn_list_iterate(dest, pconn) {
55346}
55347
55348#ifdef FREECIV_DELTA_PROTOCOL
55349#define hash_packet_ruleset_nation_groups_100 hash_const
55350
55351#define cmp_packet_ruleset_nation_groups_100 cmp_const
55352
55354#endif /* FREECIV_DELTA_PROTOCOL */
55355
55357{
55358#ifdef FREECIV_DELTA_PROTOCOL
55360 struct packet_ruleset_nation_groups *old;
55361 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION_GROUPS;
55362#endif /* FREECIV_DELTA_PROTOCOL */
55364#ifdef FREECIV_JSON_CONNECTION
55365 struct plocation field_addr;
55366 {
55370 }
55371#endif /* FREECIV_JSON_CONNECTION */
55372
55373#ifdef FREECIV_DELTA_PROTOCOL
55374#ifdef FREECIV_JSON_CONNECTION
55375 field_addr.name = "fields";
55376#endif /* FREECIV_JSON_CONNECTION */
55377 DIO_BV_GET(&din, &field_addr, fields);
55378
55379#else /* FREECIV_DELTA_PROTOCOL */
55380#ifdef FREECIV_JSON_CONNECTION
55381 field_addr.name = "ngroups";
55382#endif /* FREECIV_JSON_CONNECTION */
55383 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
55385 }
55386#ifdef FREECIV_JSON_CONNECTION
55387 field_addr.name = "groups";
55388#endif /* FREECIV_JSON_CONNECTION */
55389 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
55390 RECEIVE_PACKET_FIELD_ERROR(groups, ": truncation array");
55391 }
55392 {
55393 int i;
55394
55395#ifdef FREECIV_JSON_CONNECTION
55396 /* Enter array. */
55397 field_addr.sub_location = plocation_elem_new(0);
55398#endif /* FREECIV_JSON_CONNECTION */
55399
55400 for (i = 0; i < real_packet->ngroups; i++) {
55401#ifdef FREECIV_JSON_CONNECTION
55402 field_addr.sub_location->number = i;
55403#endif /* FREECIV_JSON_CONNECTION */
55404
55405 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
55407 }
55408 }
55409
55410#ifdef FREECIV_JSON_CONNECTION
55411 /* Exit array. */
55412 FC_FREE(field_addr.sub_location);
55413#endif /* FREECIV_JSON_CONNECTION */
55414 }
55415#ifdef FREECIV_JSON_CONNECTION
55416 field_addr.name = "hidden";
55417#endif /* FREECIV_JSON_CONNECTION */
55418 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
55419 RECEIVE_PACKET_FIELD_ERROR(hidden, ": truncation array");
55420 }
55421 {
55422 int i;
55423
55424#ifdef FREECIV_JSON_CONNECTION
55425 /* Enter array. */
55426 field_addr.sub_location = plocation_elem_new(0);
55427#endif /* FREECIV_JSON_CONNECTION */
55428
55429 for (i = 0; i < real_packet->ngroups; i++) {
55430#ifdef FREECIV_JSON_CONNECTION
55431 field_addr.sub_location->number = i;
55432#endif /* FREECIV_JSON_CONNECTION */
55433
55434 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
55436 }
55437 }
55438
55439#ifdef FREECIV_JSON_CONNECTION
55440 /* Exit array. */
55441 FC_FREE(field_addr.sub_location);
55442#endif /* FREECIV_JSON_CONNECTION */
55443 }
55444#endif
55445 log_packet_detailed("packet_ruleset_nation_groups_100: got info about ()");
55446
55447#ifdef FREECIV_DELTA_PROTOCOL
55448 if (NULL == *hash) {
55450 NULL, NULL, NULL, free);
55451 }
55452
55453 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
55454 *real_packet = *old;
55455 } else {
55456 log_packet_detailed(" no old info");
55457 memset(real_packet, 0, sizeof(*real_packet));
55458 }
55459
55460 if (BV_ISSET(fields, 0)) {
55461 log_packet_detailed(" got field 'ngroups'");
55462#ifdef FREECIV_JSON_CONNECTION
55463 field_addr.name = "ngroups";
55464#endif /* FREECIV_JSON_CONNECTION */
55465 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
55467 }
55468 }
55469 if (BV_ISSET(fields, 1)) {
55470 log_packet_detailed(" got field 'groups'");
55471#ifdef FREECIV_JSON_CONNECTION
55472 field_addr.name = "groups";
55473#endif /* FREECIV_JSON_CONNECTION */
55474 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
55475 RECEIVE_PACKET_FIELD_ERROR(groups, ": truncation array");
55476 }
55477 {
55478 int i;
55479
55480#ifdef FREECIV_JSON_CONNECTION
55481 /* Enter array. */
55482 field_addr.sub_location = plocation_elem_new(0);
55483#endif /* FREECIV_JSON_CONNECTION */
55484
55485 for (i = 0; i < real_packet->ngroups; i++) {
55486#ifdef FREECIV_JSON_CONNECTION
55487 field_addr.sub_location->number = i;
55488#endif /* FREECIV_JSON_CONNECTION */
55489
55490 if (!DIO_GET(string, &din, &field_addr, real_packet->groups[i], sizeof(real_packet->groups[i]))) {
55492 }
55493 }
55494
55495#ifdef FREECIV_JSON_CONNECTION
55496 /* Exit array. */
55497 FC_FREE(field_addr.sub_location);
55498#endif /* FREECIV_JSON_CONNECTION */
55499 }
55500 }
55501 if (BV_ISSET(fields, 2)) {
55502 log_packet_detailed(" got field 'hidden'");
55503#ifdef FREECIV_JSON_CONNECTION
55504 field_addr.name = "hidden";
55505#endif /* FREECIV_JSON_CONNECTION */
55506 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
55507 RECEIVE_PACKET_FIELD_ERROR(hidden, ": truncation array");
55508 }
55509 {
55510 int i;
55511
55512#ifdef FREECIV_JSON_CONNECTION
55513 /* Enter array. */
55514 field_addr.sub_location = plocation_elem_new(0);
55515#endif /* FREECIV_JSON_CONNECTION */
55516
55517 for (i = 0; i < real_packet->ngroups; i++) {
55518#ifdef FREECIV_JSON_CONNECTION
55519 field_addr.sub_location->number = i;
55520#endif /* FREECIV_JSON_CONNECTION */
55521
55522 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->hidden[i])) {
55524 }
55525 }
55526
55527#ifdef FREECIV_JSON_CONNECTION
55528 /* Exit array. */
55529 FC_FREE(field_addr.sub_location);
55530#endif /* FREECIV_JSON_CONNECTION */
55531 }
55532 }
55533
55534 if (NULL == old) {
55535 old = fc_malloc(sizeof(*old));
55536 *old = *real_packet;
55537 genhash_insert(*hash, old, old);
55538 } else {
55539 *old = *real_packet;
55540 }
55541
55542#endif /* FREECIV_DELTA_PROTOCOL */
55544}
55545
55547{
55548 const struct packet_ruleset_nation_groups *real_packet = packet;
55549 int e;
55550#ifdef FREECIV_DELTA_PROTOCOL
55552 struct packet_ruleset_nation_groups *old;
55553 bool differ;
55554 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION_GROUPS;
55555#endif /* FREECIV_DELTA_PROTOCOL */
55557#ifdef FREECIV_JSON_CONNECTION
55558 struct plocation field_addr;
55559 {
55563 }
55564#endif /* FREECIV_JSON_CONNECTION */
55565
55566 log_packet_detailed("packet_ruleset_nation_groups_100: sending info about ()");
55567
55568#ifdef FREECIV_DELTA_PROTOCOL
55569 if (NULL == *hash) {
55571 NULL, NULL, NULL, free);
55572 }
55573 BV_CLR_ALL(fields);
55574
55575 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
55576 old = fc_malloc(sizeof(*old));
55577 *old = *real_packet;
55578 genhash_insert(*hash, old, old);
55579 memset(old, 0, sizeof(*old));
55580 }
55581 differ = (old->ngroups != real_packet->ngroups);
55582 if (differ) {
55583 BV_SET(fields, 0);
55584 }
55585
55586 differ = (old->ngroups != real_packet->ngroups);
55587 if (!differ) {
55588 int i;
55589
55590 for (i = 0; i < real_packet->ngroups; i++) {
55591 differ = (strcmp(old->groups[i], real_packet->groups[i]) != 0);
55592 if (differ) {
55593 break;
55594 }
55595 }
55596 }
55597 if (differ) {
55598 BV_SET(fields, 1);
55599 }
55600
55601 differ = (old->ngroups != real_packet->ngroups);
55602 if (!differ) {
55603 int i;
55604
55605 for (i = 0; i < real_packet->ngroups; i++) {
55606 differ = (old->hidden[i] != real_packet->hidden[i]);
55607 if (differ) {
55608 break;
55609 }
55610 }
55611 }
55612 if (differ) {
55613 BV_SET(fields, 2);
55614 }
55615
55616
55617#ifdef FREECIV_JSON_CONNECTION
55618 field_addr.name = "fields";
55619#endif /* FREECIV_JSON_CONNECTION */
55620 e = 0;
55621 e |= DIO_BV_PUT(&dout, &field_addr, fields);
55622 if (e) {
55623 log_packet_detailed("fields bitvector error detected");
55624 }
55625
55626 if (BV_ISSET(fields, 0)) {
55627 log_packet_detailed(" field 'ngroups' has changed");
55628#ifdef FREECIV_JSON_CONNECTION
55629 field_addr.name = "ngroups";
55630#endif /* FREECIV_JSON_CONNECTION */
55631 e = 0;
55632 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
55633 if (e) {
55634 log_packet_detailed("'ngroups' field error detected");
55635 }
55636 }
55637 if (BV_ISSET(fields, 1)) {
55638 log_packet_detailed(" field 'groups' has changed");
55639#ifdef FREECIV_JSON_CONNECTION
55640 field_addr.name = "groups";
55641#endif /* FREECIV_JSON_CONNECTION */
55642 e = 0;
55643 {
55644 int i;
55645
55646#ifdef FREECIV_JSON_CONNECTION
55647 /* Create the array. */
55648 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
55649
55650 /* Enter the array. */
55651 field_addr.sub_location = plocation_elem_new(0);
55652#endif /* FREECIV_JSON_CONNECTION */
55653
55654 for (i = 0; i < real_packet->ngroups; i++) {
55655#ifdef FREECIV_JSON_CONNECTION
55656 /* Next array element. */
55657 field_addr.sub_location->number = i;
55658#endif /* FREECIV_JSON_CONNECTION */
55659
55660 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
55661 }
55662
55663#ifdef FREECIV_JSON_CONNECTION
55664 /* Exit array. */
55665 FC_FREE(field_addr.sub_location);
55666#endif /* FREECIV_JSON_CONNECTION */
55667 }
55668 if (e) {
55669 log_packet_detailed("'groups' field error detected");
55670 }
55671 }
55672 if (BV_ISSET(fields, 2)) {
55673 log_packet_detailed(" field 'hidden' has changed");
55674#ifdef FREECIV_JSON_CONNECTION
55675 field_addr.name = "hidden";
55676#endif /* FREECIV_JSON_CONNECTION */
55677 e = 0;
55678 {
55679 int i;
55680
55681#ifdef FREECIV_JSON_CONNECTION
55682 /* Create the array. */
55683 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
55684
55685 /* Enter the array. */
55686 field_addr.sub_location = plocation_elem_new(0);
55687#endif /* FREECIV_JSON_CONNECTION */
55688
55689 for (i = 0; i < real_packet->ngroups; i++) {
55690#ifdef FREECIV_JSON_CONNECTION
55691 /* Next array element. */
55692 field_addr.sub_location->number = i;
55693#endif /* FREECIV_JSON_CONNECTION */
55694
55695 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
55696 }
55697
55698#ifdef FREECIV_JSON_CONNECTION
55699 /* Exit array. */
55700 FC_FREE(field_addr.sub_location);
55701#endif /* FREECIV_JSON_CONNECTION */
55702 }
55703 if (e) {
55704 log_packet_detailed("'hidden' field error detected");
55705 }
55706 }
55707
55708 *old = *real_packet;
55709#endif /* FREECIV_DELTA_PROTOCOL */
55710#ifndef FREECIV_DELTA_PROTOCOL
55711#ifdef FREECIV_JSON_CONNECTION
55712 field_addr.name = "ngroups";
55713#endif /* FREECIV_JSON_CONNECTION */
55714 e = 0;
55715 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
55716 if (e) {
55717 log_packet_detailed("'ngroups' field error detected");
55718 }
55719#ifdef FREECIV_JSON_CONNECTION
55720 field_addr.name = "groups";
55721#endif /* FREECIV_JSON_CONNECTION */
55722 e = 0;
55723 {
55724 int i;
55725
55726#ifdef FREECIV_JSON_CONNECTION
55727 /* Create the array. */
55728 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
55729
55730 /* Enter the array. */
55731 field_addr.sub_location = plocation_elem_new(0);
55732#endif /* FREECIV_JSON_CONNECTION */
55733
55734 for (i = 0; i < real_packet->ngroups; i++) {
55735#ifdef FREECIV_JSON_CONNECTION
55736 /* Next array element. */
55737 field_addr.sub_location->number = i;
55738#endif /* FREECIV_JSON_CONNECTION */
55739
55740 e |= DIO_PUT(string, &dout, &field_addr, real_packet->groups[i]);
55741 }
55742
55743#ifdef FREECIV_JSON_CONNECTION
55744 /* Exit array. */
55745 FC_FREE(field_addr.sub_location);
55746#endif /* FREECIV_JSON_CONNECTION */
55747 }
55748 if (e) {
55749 log_packet_detailed("'groups' field error detected");
55750 }
55751#ifdef FREECIV_JSON_CONNECTION
55752 field_addr.name = "hidden";
55753#endif /* FREECIV_JSON_CONNECTION */
55754 e = 0;
55755 {
55756 int i;
55757
55758#ifdef FREECIV_JSON_CONNECTION
55759 /* Create the array. */
55760 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
55761
55762 /* Enter the array. */
55763 field_addr.sub_location = plocation_elem_new(0);
55764#endif /* FREECIV_JSON_CONNECTION */
55765
55766 for (i = 0; i < real_packet->ngroups; i++) {
55767#ifdef FREECIV_JSON_CONNECTION
55768 /* Next array element. */
55769 field_addr.sub_location->number = i;
55770#endif /* FREECIV_JSON_CONNECTION */
55771
55772 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->hidden[i]);
55773 }
55774
55775#ifdef FREECIV_JSON_CONNECTION
55776 /* Exit array. */
55777 FC_FREE(field_addr.sub_location);
55778#endif /* FREECIV_JSON_CONNECTION */
55779 }
55780 if (e) {
55781 log_packet_detailed("'hidden' field error detected");
55782 }
55783
55784#endif
55786}
55787
55789{
55790 if (!pc->used) {
55791 log_error("WARNING: trying to send data to the closed connection %s",
55793 return -1;
55794 }
55795 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet != NULL, -1,
55796 "Handler for PACKET_RULESET_NATION_GROUPS not installed");
55797 return pc->phs.handlers->send[PACKET_RULESET_NATION_GROUPS].packet(pc, packet);
55798}
55799
55806
55807#ifdef FREECIV_DELTA_PROTOCOL
55809{
55810 const struct packet_ruleset_nation *key = (const struct packet_ruleset_nation *) vkey;
55811 genhash_val_t result = 0;
55812
55813 result += key->id;
55814
55815 result &= 0xFFFFFFFF;
55816 return result;
55817}
55818
55819static bool cmp_packet_ruleset_nation_100(const void *vkey1, const void *vkey2)
55820{
55821 const struct packet_ruleset_nation *old = (const struct packet_ruleset_nation *) vkey1;
55822 const struct packet_ruleset_nation *real_packet = (const struct packet_ruleset_nation *) vkey2;
55823 bool differ;
55824
55825 differ = (old->id != real_packet->id);
55826
55827 return !differ;
55828}
55830#endif /* FREECIV_DELTA_PROTOCOL */
55831
55833{
55834#ifdef FREECIV_DELTA_PROTOCOL
55836 struct packet_ruleset_nation *old;
55837 struct genhash **hash = pc->phs.received + PACKET_RULESET_NATION;
55838#endif /* FREECIV_DELTA_PROTOCOL */
55840#ifdef FREECIV_JSON_CONNECTION
55841 struct plocation field_addr;
55842 {
55846 }
55847#endif /* FREECIV_JSON_CONNECTION */
55848
55849#ifdef FREECIV_DELTA_PROTOCOL
55850#ifdef FREECIV_JSON_CONNECTION
55851 field_addr.name = "fields";
55852#endif /* FREECIV_JSON_CONNECTION */
55853 DIO_BV_GET(&din, &field_addr, fields);
55854#ifdef FREECIV_JSON_CONNECTION
55855 field_addr.name = "id";
55856#endif /* FREECIV_JSON_CONNECTION */
55857 {
55858 int readin;
55859
55860 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
55862 }
55863 real_packet->id = readin;
55864 }
55865
55866#else /* FREECIV_DELTA_PROTOCOL */
55867#ifdef FREECIV_JSON_CONNECTION
55868 field_addr.name = "id";
55869#endif /* FREECIV_JSON_CONNECTION */
55870 {
55871 int readin;
55872
55873 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
55875 }
55876 real_packet->id = readin;
55877 }
55878#ifdef FREECIV_JSON_CONNECTION
55879 field_addr.name = "translation_domain";
55880#endif /* FREECIV_JSON_CONNECTION */
55881 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
55882 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
55883 }
55884#ifdef FREECIV_JSON_CONNECTION
55885 field_addr.name = "adjective";
55886#endif /* FREECIV_JSON_CONNECTION */
55887 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
55888 RECEIVE_PACKET_FIELD_ERROR(adjective);
55889 }
55890#ifdef FREECIV_JSON_CONNECTION
55891 field_addr.name = "rule_name";
55892#endif /* FREECIV_JSON_CONNECTION */
55893 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
55894 RECEIVE_PACKET_FIELD_ERROR(rule_name);
55895 }
55896#ifdef FREECIV_JSON_CONNECTION
55897 field_addr.name = "noun_plural";
55898#endif /* FREECIV_JSON_CONNECTION */
55899 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
55900 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
55901 }
55902#ifdef FREECIV_JSON_CONNECTION
55903 field_addr.name = "graphic_str";
55904#endif /* FREECIV_JSON_CONNECTION */
55905 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
55906 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
55907 }
55908#ifdef FREECIV_JSON_CONNECTION
55909 field_addr.name = "graphic_alt";
55910#endif /* FREECIV_JSON_CONNECTION */
55911 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
55912 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
55913 }
55914#ifdef FREECIV_JSON_CONNECTION
55915 field_addr.name = "legend";
55916#endif /* FREECIV_JSON_CONNECTION */
55917 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
55919 }
55920#ifdef FREECIV_JSON_CONNECTION
55921 field_addr.name = "style";
55922#endif /* FREECIV_JSON_CONNECTION */
55923 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
55925 }
55926#ifdef FREECIV_JSON_CONNECTION
55927 field_addr.name = "leader_count";
55928#endif /* FREECIV_JSON_CONNECTION */
55929 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
55930 RECEIVE_PACKET_FIELD_ERROR(leader_count);
55931 }
55932#ifdef FREECIV_JSON_CONNECTION
55933 field_addr.name = "leader_name";
55934#endif /* FREECIV_JSON_CONNECTION */
55935 if (real_packet->leader_count > MAX_NUM_LEADERS) {
55936 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": truncation array");
55937 }
55938 {
55939 int i;
55940
55941#ifdef FREECIV_JSON_CONNECTION
55942 /* Enter array. */
55943 field_addr.sub_location = plocation_elem_new(0);
55944#endif /* FREECIV_JSON_CONNECTION */
55945
55946 for (i = 0; i < real_packet->leader_count; i++) {
55947#ifdef FREECIV_JSON_CONNECTION
55948 field_addr.sub_location->number = i;
55949#endif /* FREECIV_JSON_CONNECTION */
55950
55951 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
55953 }
55954 }
55955
55956#ifdef FREECIV_JSON_CONNECTION
55957 /* Exit array. */
55958 FC_FREE(field_addr.sub_location);
55959#endif /* FREECIV_JSON_CONNECTION */
55960 }
55961#ifdef FREECIV_JSON_CONNECTION
55962 field_addr.name = "leader_is_male";
55963#endif /* FREECIV_JSON_CONNECTION */
55964 if (real_packet->leader_count > MAX_NUM_LEADERS) {
55965 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": truncation array");
55966 }
55967 {
55968 int i;
55969
55970#ifdef FREECIV_JSON_CONNECTION
55971 /* Enter array. */
55972 field_addr.sub_location = plocation_elem_new(0);
55973#endif /* FREECIV_JSON_CONNECTION */
55974
55975 for (i = 0; i < real_packet->leader_count; i++) {
55976#ifdef FREECIV_JSON_CONNECTION
55977 field_addr.sub_location->number = i;
55978#endif /* FREECIV_JSON_CONNECTION */
55979
55980 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
55981 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
55982 }
55983 }
55984
55985#ifdef FREECIV_JSON_CONNECTION
55986 /* Exit array. */
55987 FC_FREE(field_addr.sub_location);
55988#endif /* FREECIV_JSON_CONNECTION */
55989 }
55990#ifdef FREECIV_JSON_CONNECTION
55991 field_addr.name = "is_playable";
55992#endif /* FREECIV_JSON_CONNECTION */
55993 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_playable)) {
55994 RECEIVE_PACKET_FIELD_ERROR(is_playable);
55995 }
55996#ifdef FREECIV_JSON_CONNECTION
55997 field_addr.name = "barbarian_type";
55998#endif /* FREECIV_JSON_CONNECTION */
55999 {
56000 int readin;
56001
56002 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
56003 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
56004 }
56005 real_packet->barbarian_type = readin;
56006 }
56007#ifdef FREECIV_JSON_CONNECTION
56008 field_addr.name = "nsets";
56009#endif /* FREECIV_JSON_CONNECTION */
56010 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
56012 }
56013#ifdef FREECIV_JSON_CONNECTION
56014 field_addr.name = "sets";
56015#endif /* FREECIV_JSON_CONNECTION */
56016 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
56017 RECEIVE_PACKET_FIELD_ERROR(sets, ": truncation array");
56018 }
56019 {
56020 int i;
56021
56022#ifdef FREECIV_JSON_CONNECTION
56023 /* Enter array. */
56024 field_addr.sub_location = plocation_elem_new(0);
56025#endif /* FREECIV_JSON_CONNECTION */
56026
56027 for (i = 0; i < real_packet->nsets; i++) {
56028#ifdef FREECIV_JSON_CONNECTION
56029 field_addr.sub_location->number = i;
56030#endif /* FREECIV_JSON_CONNECTION */
56031
56032 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
56034 }
56035 }
56036
56037#ifdef FREECIV_JSON_CONNECTION
56038 /* Exit array. */
56039 FC_FREE(field_addr.sub_location);
56040#endif /* FREECIV_JSON_CONNECTION */
56041 }
56042#ifdef FREECIV_JSON_CONNECTION
56043 field_addr.name = "ngroups";
56044#endif /* FREECIV_JSON_CONNECTION */
56045 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
56047 }
56048#ifdef FREECIV_JSON_CONNECTION
56049 field_addr.name = "groups";
56050#endif /* FREECIV_JSON_CONNECTION */
56051 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
56052 RECEIVE_PACKET_FIELD_ERROR(groups, ": truncation array");
56053 }
56054 {
56055 int i;
56056
56057#ifdef FREECIV_JSON_CONNECTION
56058 /* Enter array. */
56059 field_addr.sub_location = plocation_elem_new(0);
56060#endif /* FREECIV_JSON_CONNECTION */
56061
56062 for (i = 0; i < real_packet->ngroups; i++) {
56063#ifdef FREECIV_JSON_CONNECTION
56064 field_addr.sub_location->number = i;
56065#endif /* FREECIV_JSON_CONNECTION */
56066
56067 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
56069 }
56070 }
56071
56072#ifdef FREECIV_JSON_CONNECTION
56073 /* Exit array. */
56074 FC_FREE(field_addr.sub_location);
56075#endif /* FREECIV_JSON_CONNECTION */
56076 }
56077#ifdef FREECIV_JSON_CONNECTION
56078 field_addr.name = "init_government_id";
56079#endif /* FREECIV_JSON_CONNECTION */
56080 {
56081 int readin;
56082
56083 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
56084 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
56085 }
56086 real_packet->init_government_id = readin;
56087 }
56088#ifdef FREECIV_JSON_CONNECTION
56089 field_addr.name = "init_techs_count";
56090#endif /* FREECIV_JSON_CONNECTION */
56091 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
56092 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
56093 }
56094#ifdef FREECIV_JSON_CONNECTION
56095 field_addr.name = "init_techs";
56096#endif /* FREECIV_JSON_CONNECTION */
56097 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
56098 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": truncation array");
56099 }
56100 {
56101 int i;
56102
56103#ifdef FREECIV_JSON_CONNECTION
56104 /* Enter array. */
56105 field_addr.sub_location = plocation_elem_new(0);
56106#endif /* FREECIV_JSON_CONNECTION */
56107
56108 for (i = 0; i < real_packet->init_techs_count; i++) {
56109#ifdef FREECIV_JSON_CONNECTION
56110 field_addr.sub_location->number = i;
56111#endif /* FREECIV_JSON_CONNECTION */
56112
56113 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
56114 RECEIVE_PACKET_FIELD_ERROR(init_techs);
56115 }
56116 }
56117
56118#ifdef FREECIV_JSON_CONNECTION
56119 /* Exit array. */
56120 FC_FREE(field_addr.sub_location);
56121#endif /* FREECIV_JSON_CONNECTION */
56122 }
56123#ifdef FREECIV_JSON_CONNECTION
56124 field_addr.name = "init_units_count";
56125#endif /* FREECIV_JSON_CONNECTION */
56126 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
56127 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
56128 }
56129#ifdef FREECIV_JSON_CONNECTION
56130 field_addr.name = "init_units";
56131#endif /* FREECIV_JSON_CONNECTION */
56132 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
56133 RECEIVE_PACKET_FIELD_ERROR(init_units, ": truncation array");
56134 }
56135 {
56136 int i;
56137
56138#ifdef FREECIV_JSON_CONNECTION
56139 /* Enter array. */
56140 field_addr.sub_location = plocation_elem_new(0);
56141#endif /* FREECIV_JSON_CONNECTION */
56142
56143 for (i = 0; i < real_packet->init_units_count; i++) {
56144#ifdef FREECIV_JSON_CONNECTION
56145 field_addr.sub_location->number = i;
56146#endif /* FREECIV_JSON_CONNECTION */
56147
56148 {
56149 int readin;
56150
56151 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
56152 RECEIVE_PACKET_FIELD_ERROR(init_units);
56153 }
56154 real_packet->init_units[i] = readin;
56155 }
56156 }
56157
56158#ifdef FREECIV_JSON_CONNECTION
56159 /* Exit array. */
56160 FC_FREE(field_addr.sub_location);
56161#endif /* FREECIV_JSON_CONNECTION */
56162 }
56163#ifdef FREECIV_JSON_CONNECTION
56164 field_addr.name = "init_buildings_count";
56165#endif /* FREECIV_JSON_CONNECTION */
56166 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
56167 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
56168 }
56169#ifdef FREECIV_JSON_CONNECTION
56170 field_addr.name = "init_buildings";
56171#endif /* FREECIV_JSON_CONNECTION */
56172 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
56173 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": truncation array");
56174 }
56175 {
56176 int i;
56177
56178#ifdef FREECIV_JSON_CONNECTION
56179 /* Enter array. */
56180 field_addr.sub_location = plocation_elem_new(0);
56181#endif /* FREECIV_JSON_CONNECTION */
56182
56183 for (i = 0; i < real_packet->init_buildings_count; i++) {
56184#ifdef FREECIV_JSON_CONNECTION
56185 field_addr.sub_location->number = i;
56186#endif /* FREECIV_JSON_CONNECTION */
56187
56188 {
56189 int readin;
56190
56191 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
56192 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
56193 }
56194 real_packet->init_buildings[i] = readin;
56195 }
56196 }
56197
56198#ifdef FREECIV_JSON_CONNECTION
56199 /* Exit array. */
56200 FC_FREE(field_addr.sub_location);
56201#endif /* FREECIV_JSON_CONNECTION */
56202 }
56203#endif
56204 log_packet_detailed("packet_ruleset_nation_100: got info about (%d)",
56205 real_packet->id);
56206
56207#ifdef FREECIV_DELTA_PROTOCOL
56208 if (NULL == *hash) {
56210 NULL, NULL, NULL, free);
56211 }
56212
56213 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
56214 *real_packet = *old;
56215 } else {
56217
56218 id = real_packet->id;
56219
56220 log_packet_detailed(" no old info");
56221 memset(real_packet, 0, sizeof(*real_packet));
56222
56223 real_packet->id = id;
56224 }
56225
56226 if (BV_ISSET(fields, 0)) {
56227 log_packet_detailed(" got field 'translation_domain'");
56228#ifdef FREECIV_JSON_CONNECTION
56229 field_addr.name = "translation_domain";
56230#endif /* FREECIV_JSON_CONNECTION */
56231 if (!DIO_GET(string, &din, &field_addr, real_packet->translation_domain, sizeof(real_packet->translation_domain))) {
56232 RECEIVE_PACKET_FIELD_ERROR(translation_domain);
56233 }
56234 }
56235 if (BV_ISSET(fields, 1)) {
56236 log_packet_detailed(" got field 'adjective'");
56237#ifdef FREECIV_JSON_CONNECTION
56238 field_addr.name = "adjective";
56239#endif /* FREECIV_JSON_CONNECTION */
56240 if (!DIO_GET(string, &din, &field_addr, real_packet->adjective, sizeof(real_packet->adjective))) {
56241 RECEIVE_PACKET_FIELD_ERROR(adjective);
56242 }
56243 }
56244 if (BV_ISSET(fields, 2)) {
56245 log_packet_detailed(" got field 'rule_name'");
56246#ifdef FREECIV_JSON_CONNECTION
56247 field_addr.name = "rule_name";
56248#endif /* FREECIV_JSON_CONNECTION */
56249 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
56250 RECEIVE_PACKET_FIELD_ERROR(rule_name);
56251 }
56252 }
56253 if (BV_ISSET(fields, 3)) {
56254 log_packet_detailed(" got field 'noun_plural'");
56255#ifdef FREECIV_JSON_CONNECTION
56256 field_addr.name = "noun_plural";
56257#endif /* FREECIV_JSON_CONNECTION */
56258 if (!DIO_GET(string, &din, &field_addr, real_packet->noun_plural, sizeof(real_packet->noun_plural))) {
56259 RECEIVE_PACKET_FIELD_ERROR(noun_plural);
56260 }
56261 }
56262 if (BV_ISSET(fields, 4)) {
56263 log_packet_detailed(" got field 'graphic_str'");
56264#ifdef FREECIV_JSON_CONNECTION
56265 field_addr.name = "graphic_str";
56266#endif /* FREECIV_JSON_CONNECTION */
56267 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
56268 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
56269 }
56270 }
56271 if (BV_ISSET(fields, 5)) {
56272 log_packet_detailed(" got field 'graphic_alt'");
56273#ifdef FREECIV_JSON_CONNECTION
56274 field_addr.name = "graphic_alt";
56275#endif /* FREECIV_JSON_CONNECTION */
56276 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
56277 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
56278 }
56279 }
56280 if (BV_ISSET(fields, 6)) {
56281 log_packet_detailed(" got field 'legend'");
56282#ifdef FREECIV_JSON_CONNECTION
56283 field_addr.name = "legend";
56284#endif /* FREECIV_JSON_CONNECTION */
56285 if (!DIO_GET(string, &din, &field_addr, real_packet->legend, sizeof(real_packet->legend))) {
56287 }
56288 }
56289 if (BV_ISSET(fields, 7)) {
56290 log_packet_detailed(" got field 'style'");
56291#ifdef FREECIV_JSON_CONNECTION
56292 field_addr.name = "style";
56293#endif /* FREECIV_JSON_CONNECTION */
56294 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style)) {
56296 }
56297 }
56298 if (BV_ISSET(fields, 8)) {
56299 log_packet_detailed(" got field 'leader_count'");
56300#ifdef FREECIV_JSON_CONNECTION
56301 field_addr.name = "leader_count";
56302#endif /* FREECIV_JSON_CONNECTION */
56303 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->leader_count)) {
56304 RECEIVE_PACKET_FIELD_ERROR(leader_count);
56305 }
56306 }
56307 if (BV_ISSET(fields, 9)) {
56308 log_packet_detailed(" got field 'leader_name'");
56309#ifdef FREECIV_JSON_CONNECTION
56310 field_addr.name = "leader_name";
56311#endif /* FREECIV_JSON_CONNECTION */
56312 if (real_packet->leader_count > MAX_NUM_LEADERS) {
56313 RECEIVE_PACKET_FIELD_ERROR(leader_name, ": truncation array");
56314 }
56315 {
56316 int i;
56317
56318#ifdef FREECIV_JSON_CONNECTION
56319 /* Enter array. */
56320 field_addr.sub_location = plocation_elem_new(0);
56321#endif /* FREECIV_JSON_CONNECTION */
56322
56323 for (i = 0; i < real_packet->leader_count; i++) {
56324#ifdef FREECIV_JSON_CONNECTION
56325 field_addr.sub_location->number = i;
56326#endif /* FREECIV_JSON_CONNECTION */
56327
56328 if (!DIO_GET(string, &din, &field_addr, real_packet->leader_name[i], sizeof(real_packet->leader_name[i]))) {
56330 }
56331 }
56332
56333#ifdef FREECIV_JSON_CONNECTION
56334 /* Exit array. */
56335 FC_FREE(field_addr.sub_location);
56336#endif /* FREECIV_JSON_CONNECTION */
56337 }
56338 }
56339 if (BV_ISSET(fields, 10)) {
56340 log_packet_detailed(" got field 'leader_is_male'");
56341#ifdef FREECIV_JSON_CONNECTION
56342 field_addr.name = "leader_is_male";
56343#endif /* FREECIV_JSON_CONNECTION */
56344 if (real_packet->leader_count > MAX_NUM_LEADERS) {
56345 RECEIVE_PACKET_FIELD_ERROR(leader_is_male, ": truncation array");
56346 }
56347 {
56348 int i;
56349
56350#ifdef FREECIV_JSON_CONNECTION
56351 /* Enter array. */
56352 field_addr.sub_location = plocation_elem_new(0);
56353#endif /* FREECIV_JSON_CONNECTION */
56354
56355 for (i = 0; i < real_packet->leader_count; i++) {
56356#ifdef FREECIV_JSON_CONNECTION
56357 field_addr.sub_location->number = i;
56358#endif /* FREECIV_JSON_CONNECTION */
56359
56360 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->leader_is_male[i])) {
56361 RECEIVE_PACKET_FIELD_ERROR(leader_is_male);
56362 }
56363 }
56364
56365#ifdef FREECIV_JSON_CONNECTION
56366 /* Exit array. */
56367 FC_FREE(field_addr.sub_location);
56368#endif /* FREECIV_JSON_CONNECTION */
56369 }
56370 }
56371 real_packet->is_playable = BV_ISSET(fields, 11);
56372 if (BV_ISSET(fields, 12)) {
56373 log_packet_detailed(" got field 'barbarian_type'");
56374#ifdef FREECIV_JSON_CONNECTION
56375 field_addr.name = "barbarian_type";
56376#endif /* FREECIV_JSON_CONNECTION */
56377 {
56378 int readin;
56379
56380 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
56381 RECEIVE_PACKET_FIELD_ERROR(barbarian_type);
56382 }
56383 real_packet->barbarian_type = readin;
56384 }
56385 }
56386 if (BV_ISSET(fields, 13)) {
56387 log_packet_detailed(" got field 'nsets'");
56388#ifdef FREECIV_JSON_CONNECTION
56389 field_addr.name = "nsets";
56390#endif /* FREECIV_JSON_CONNECTION */
56391 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->nsets)) {
56393 }
56394 }
56395 if (BV_ISSET(fields, 14)) {
56396 log_packet_detailed(" got field 'sets'");
56397#ifdef FREECIV_JSON_CONNECTION
56398 field_addr.name = "sets";
56399#endif /* FREECIV_JSON_CONNECTION */
56400 if (real_packet->nsets > MAX_NUM_NATION_SETS) {
56401 RECEIVE_PACKET_FIELD_ERROR(sets, ": truncation array");
56402 }
56403 {
56404 int i;
56405
56406#ifdef FREECIV_JSON_CONNECTION
56407 /* Enter array. */
56408 field_addr.sub_location = plocation_elem_new(0);
56409#endif /* FREECIV_JSON_CONNECTION */
56410
56411 for (i = 0; i < real_packet->nsets; i++) {
56412#ifdef FREECIV_JSON_CONNECTION
56413 field_addr.sub_location->number = i;
56414#endif /* FREECIV_JSON_CONNECTION */
56415
56416 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sets[i])) {
56418 }
56419 }
56420
56421#ifdef FREECIV_JSON_CONNECTION
56422 /* Exit array. */
56423 FC_FREE(field_addr.sub_location);
56424#endif /* FREECIV_JSON_CONNECTION */
56425 }
56426 }
56427 if (BV_ISSET(fields, 15)) {
56428 log_packet_detailed(" got field 'ngroups'");
56429#ifdef FREECIV_JSON_CONNECTION
56430 field_addr.name = "ngroups";
56431#endif /* FREECIV_JSON_CONNECTION */
56432 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ngroups)) {
56434 }
56435 }
56436 if (BV_ISSET(fields, 16)) {
56437 log_packet_detailed(" got field 'groups'");
56438#ifdef FREECIV_JSON_CONNECTION
56439 field_addr.name = "groups";
56440#endif /* FREECIV_JSON_CONNECTION */
56441 if (real_packet->ngroups > MAX_NUM_NATION_GROUPS) {
56442 RECEIVE_PACKET_FIELD_ERROR(groups, ": truncation array");
56443 }
56444 {
56445 int i;
56446
56447#ifdef FREECIV_JSON_CONNECTION
56448 /* Enter array. */
56449 field_addr.sub_location = plocation_elem_new(0);
56450#endif /* FREECIV_JSON_CONNECTION */
56451
56452 for (i = 0; i < real_packet->ngroups; i++) {
56453#ifdef FREECIV_JSON_CONNECTION
56454 field_addr.sub_location->number = i;
56455#endif /* FREECIV_JSON_CONNECTION */
56456
56457 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->groups[i])) {
56459 }
56460 }
56461
56462#ifdef FREECIV_JSON_CONNECTION
56463 /* Exit array. */
56464 FC_FREE(field_addr.sub_location);
56465#endif /* FREECIV_JSON_CONNECTION */
56466 }
56467 }
56468 if (BV_ISSET(fields, 17)) {
56469 log_packet_detailed(" got field 'init_government_id'");
56470#ifdef FREECIV_JSON_CONNECTION
56471 field_addr.name = "init_government_id";
56472#endif /* FREECIV_JSON_CONNECTION */
56473 {
56474 int readin;
56475
56476 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
56477 RECEIVE_PACKET_FIELD_ERROR(init_government_id);
56478 }
56479 real_packet->init_government_id = readin;
56480 }
56481 }
56482 if (BV_ISSET(fields, 18)) {
56483 log_packet_detailed(" got field 'init_techs_count'");
56484#ifdef FREECIV_JSON_CONNECTION
56485 field_addr.name = "init_techs_count";
56486#endif /* FREECIV_JSON_CONNECTION */
56487 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_techs_count)) {
56488 RECEIVE_PACKET_FIELD_ERROR(init_techs_count);
56489 }
56490 }
56491 if (BV_ISSET(fields, 19)) {
56492 log_packet_detailed(" got field 'init_techs'");
56493#ifdef FREECIV_JSON_CONNECTION
56494 field_addr.name = "init_techs";
56495#endif /* FREECIV_JSON_CONNECTION */
56496 if (real_packet->init_techs_count > MAX_NUM_TECH_LIST) {
56497 RECEIVE_PACKET_FIELD_ERROR(init_techs, ": truncation array");
56498 }
56499 {
56500 int i;
56501
56502#ifdef FREECIV_JSON_CONNECTION
56503 /* Enter array. */
56504 field_addr.sub_location = plocation_elem_new(0);
56505#endif /* FREECIV_JSON_CONNECTION */
56506
56507 for (i = 0; i < real_packet->init_techs_count; i++) {
56508#ifdef FREECIV_JSON_CONNECTION
56509 field_addr.sub_location->number = i;
56510#endif /* FREECIV_JSON_CONNECTION */
56511
56512 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->init_techs[i])) {
56513 RECEIVE_PACKET_FIELD_ERROR(init_techs);
56514 }
56515 }
56516
56517#ifdef FREECIV_JSON_CONNECTION
56518 /* Exit array. */
56519 FC_FREE(field_addr.sub_location);
56520#endif /* FREECIV_JSON_CONNECTION */
56521 }
56522 }
56523 if (BV_ISSET(fields, 20)) {
56524 log_packet_detailed(" got field 'init_units_count'");
56525#ifdef FREECIV_JSON_CONNECTION
56526 field_addr.name = "init_units_count";
56527#endif /* FREECIV_JSON_CONNECTION */
56528 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_units_count)) {
56529 RECEIVE_PACKET_FIELD_ERROR(init_units_count);
56530 }
56531 }
56532 if (BV_ISSET(fields, 21)) {
56533 log_packet_detailed(" got field 'init_units'");
56534#ifdef FREECIV_JSON_CONNECTION
56535 field_addr.name = "init_units";
56536#endif /* FREECIV_JSON_CONNECTION */
56537 if (real_packet->init_units_count > MAX_NUM_UNIT_LIST) {
56538 RECEIVE_PACKET_FIELD_ERROR(init_units, ": truncation array");
56539 }
56540 {
56541 int i;
56542
56543#ifdef FREECIV_JSON_CONNECTION
56544 /* Enter array. */
56545 field_addr.sub_location = plocation_elem_new(0);
56546#endif /* FREECIV_JSON_CONNECTION */
56547
56548 for (i = 0; i < real_packet->init_units_count; i++) {
56549#ifdef FREECIV_JSON_CONNECTION
56550 field_addr.sub_location->number = i;
56551#endif /* FREECIV_JSON_CONNECTION */
56552
56553 {
56554 int readin;
56555
56556 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
56557 RECEIVE_PACKET_FIELD_ERROR(init_units);
56558 }
56559 real_packet->init_units[i] = readin;
56560 }
56561 }
56562
56563#ifdef FREECIV_JSON_CONNECTION
56564 /* Exit array. */
56565 FC_FREE(field_addr.sub_location);
56566#endif /* FREECIV_JSON_CONNECTION */
56567 }
56568 }
56569 if (BV_ISSET(fields, 22)) {
56570 log_packet_detailed(" got field 'init_buildings_count'");
56571#ifdef FREECIV_JSON_CONNECTION
56572 field_addr.name = "init_buildings_count";
56573#endif /* FREECIV_JSON_CONNECTION */
56574 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->init_buildings_count)) {
56575 RECEIVE_PACKET_FIELD_ERROR(init_buildings_count);
56576 }
56577 }
56578 if (BV_ISSET(fields, 23)) {
56579 log_packet_detailed(" got field 'init_buildings'");
56580#ifdef FREECIV_JSON_CONNECTION
56581 field_addr.name = "init_buildings";
56582#endif /* FREECIV_JSON_CONNECTION */
56583 if (real_packet->init_buildings_count > MAX_NUM_BUILDING_LIST) {
56584 RECEIVE_PACKET_FIELD_ERROR(init_buildings, ": truncation array");
56585 }
56586 {
56587 int i;
56588
56589#ifdef FREECIV_JSON_CONNECTION
56590 /* Enter array. */
56591 field_addr.sub_location = plocation_elem_new(0);
56592#endif /* FREECIV_JSON_CONNECTION */
56593
56594 for (i = 0; i < real_packet->init_buildings_count; i++) {
56595#ifdef FREECIV_JSON_CONNECTION
56596 field_addr.sub_location->number = i;
56597#endif /* FREECIV_JSON_CONNECTION */
56598
56599 {
56600 int readin;
56601
56602 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
56603 RECEIVE_PACKET_FIELD_ERROR(init_buildings);
56604 }
56605 real_packet->init_buildings[i] = readin;
56606 }
56607 }
56608
56609#ifdef FREECIV_JSON_CONNECTION
56610 /* Exit array. */
56611 FC_FREE(field_addr.sub_location);
56612#endif /* FREECIV_JSON_CONNECTION */
56613 }
56614 }
56615
56616 if (NULL == old) {
56617 old = fc_malloc(sizeof(*old));
56618 *old = *real_packet;
56619 genhash_insert(*hash, old, old);
56620 } else {
56621 *old = *real_packet;
56622 }
56623
56624#endif /* FREECIV_DELTA_PROTOCOL */
56626}
56627
56629{
56630 const struct packet_ruleset_nation *real_packet = packet;
56631 int e;
56632#ifdef FREECIV_DELTA_PROTOCOL
56634 struct packet_ruleset_nation *old;
56635 bool differ;
56636 struct genhash **hash = pc->phs.sent + PACKET_RULESET_NATION;
56637#endif /* FREECIV_DELTA_PROTOCOL */
56639#ifdef FREECIV_JSON_CONNECTION
56640 struct plocation field_addr;
56641 {
56645 }
56646#endif /* FREECIV_JSON_CONNECTION */
56647
56648 log_packet_detailed("packet_ruleset_nation_100: sending info about (%d)",
56649 real_packet->id);
56650
56651#ifdef FREECIV_DELTA_PROTOCOL
56652 if (NULL == *hash) {
56654 NULL, NULL, NULL, free);
56655 }
56656 BV_CLR_ALL(fields);
56657
56658 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
56659 old = fc_malloc(sizeof(*old));
56660 *old = *real_packet;
56661 genhash_insert(*hash, old, old);
56662 memset(old, 0, sizeof(*old));
56663 }
56664 differ = (strcmp(old->translation_domain, real_packet->translation_domain) != 0);
56665 if (differ) {
56666 BV_SET(fields, 0);
56667 }
56668
56669 differ = (strcmp(old->adjective, real_packet->adjective) != 0);
56670 if (differ) {
56671 BV_SET(fields, 1);
56672 }
56673
56674 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
56675 if (differ) {
56676 BV_SET(fields, 2);
56677 }
56678
56679 differ = (strcmp(old->noun_plural, real_packet->noun_plural) != 0);
56680 if (differ) {
56681 BV_SET(fields, 3);
56682 }
56683
56684 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
56685 if (differ) {
56686 BV_SET(fields, 4);
56687 }
56688
56689 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
56690 if (differ) {
56691 BV_SET(fields, 5);
56692 }
56693
56694 differ = (strcmp(old->legend, real_packet->legend) != 0);
56695 if (differ) {
56696 BV_SET(fields, 6);
56697 }
56698
56699 differ = (old->style != real_packet->style);
56700 if (differ) {
56701 BV_SET(fields, 7);
56702 }
56703
56704 differ = (old->leader_count != real_packet->leader_count);
56705 if (differ) {
56706 BV_SET(fields, 8);
56707 }
56708
56709 differ = (old->leader_count != real_packet->leader_count);
56710 if (!differ) {
56711 int i;
56712
56713 for (i = 0; i < real_packet->leader_count; i++) {
56714 differ = (strcmp(old->leader_name[i], real_packet->leader_name[i]) != 0);
56715 if (differ) {
56716 break;
56717 }
56718 }
56719 }
56720 if (differ) {
56721 BV_SET(fields, 9);
56722 }
56723
56724 differ = (old->leader_count != real_packet->leader_count);
56725 if (!differ) {
56726 int i;
56727
56728 for (i = 0; i < real_packet->leader_count; i++) {
56729 differ = (old->leader_is_male[i] != real_packet->leader_is_male[i]);
56730 if (differ) {
56731 break;
56732 }
56733 }
56734 }
56735 if (differ) {
56736 BV_SET(fields, 10);
56737 }
56738
56739 if (packet->is_playable) {
56740 BV_SET(fields, 11);
56741 }
56742
56743 differ = (old->barbarian_type != real_packet->barbarian_type);
56744 if (differ) {
56745 BV_SET(fields, 12);
56746 }
56747
56748 differ = (old->nsets != real_packet->nsets);
56749 if (differ) {
56750 BV_SET(fields, 13);
56751 }
56752
56753 differ = (old->nsets != real_packet->nsets);
56754 if (!differ) {
56755 int i;
56756
56757 for (i = 0; i < real_packet->nsets; i++) {
56758 differ = (old->sets[i] != real_packet->sets[i]);
56759 if (differ) {
56760 break;
56761 }
56762 }
56763 }
56764 if (differ) {
56765 BV_SET(fields, 14);
56766 }
56767
56768 differ = (old->ngroups != real_packet->ngroups);
56769 if (differ) {
56770 BV_SET(fields, 15);
56771 }
56772
56773 differ = (old->ngroups != real_packet->ngroups);
56774 if (!differ) {
56775 int i;
56776
56777 for (i = 0; i < real_packet->ngroups; i++) {
56778 differ = (old->groups[i] != real_packet->groups[i]);
56779 if (differ) {
56780 break;
56781 }
56782 }
56783 }
56784 if (differ) {
56785 BV_SET(fields, 16);
56786 }
56787
56788 differ = (old->init_government_id != real_packet->init_government_id);
56789 if (differ) {
56790 BV_SET(fields, 17);
56791 }
56792
56793 differ = (old->init_techs_count != real_packet->init_techs_count);
56794 if (differ) {
56795 BV_SET(fields, 18);
56796 }
56797
56798 differ = (old->init_techs_count != real_packet->init_techs_count);
56799 if (!differ) {
56800 int i;
56801
56802 for (i = 0; i < real_packet->init_techs_count; i++) {
56803 differ = (old->init_techs[i] != real_packet->init_techs[i]);
56804 if (differ) {
56805 break;
56806 }
56807 }
56808 }
56809 if (differ) {
56810 BV_SET(fields, 19);
56811 }
56812
56813 differ = (old->init_units_count != real_packet->init_units_count);
56814 if (differ) {
56815 BV_SET(fields, 20);
56816 }
56817
56818 differ = (old->init_units_count != real_packet->init_units_count);
56819 if (!differ) {
56820 int i;
56821
56822 for (i = 0; i < real_packet->init_units_count; i++) {
56823 differ = (old->init_units[i] != real_packet->init_units[i]);
56824 if (differ) {
56825 break;
56826 }
56827 }
56828 }
56829 if (differ) {
56830 BV_SET(fields, 21);
56831 }
56832
56833 differ = (old->init_buildings_count != real_packet->init_buildings_count);
56834 if (differ) {
56835 BV_SET(fields, 22);
56836 }
56837
56838 differ = (old->init_buildings_count != real_packet->init_buildings_count);
56839 if (!differ) {
56840 int i;
56841
56842 for (i = 0; i < real_packet->init_buildings_count; i++) {
56843 differ = (old->init_buildings[i] != real_packet->init_buildings[i]);
56844 if (differ) {
56845 break;
56846 }
56847 }
56848 }
56849 if (differ) {
56850 BV_SET(fields, 23);
56851 }
56852
56853
56854#ifdef FREECIV_JSON_CONNECTION
56855 field_addr.name = "fields";
56856#endif /* FREECIV_JSON_CONNECTION */
56857 e = 0;
56858 e |= DIO_BV_PUT(&dout, &field_addr, fields);
56859 if (e) {
56860 log_packet_detailed("fields bitvector error detected");
56861 }
56862#ifdef FREECIV_JSON_CONNECTION
56863 field_addr.name = "id";
56864#endif /* FREECIV_JSON_CONNECTION */
56865 e = 0;
56866 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
56867 if (e) {
56868 log_packet_detailed("'id' field error detected");
56869 }
56870
56871 if (BV_ISSET(fields, 0)) {
56872 log_packet_detailed(" field 'translation_domain' has changed");
56873#ifdef FREECIV_JSON_CONNECTION
56874 field_addr.name = "translation_domain";
56875#endif /* FREECIV_JSON_CONNECTION */
56876 e = 0;
56877 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
56878 if (e) {
56879 log_packet_detailed("'translation_domain' field error detected");
56880 }
56881 }
56882 if (BV_ISSET(fields, 1)) {
56883 log_packet_detailed(" field 'adjective' has changed");
56884#ifdef FREECIV_JSON_CONNECTION
56885 field_addr.name = "adjective";
56886#endif /* FREECIV_JSON_CONNECTION */
56887 e = 0;
56888 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
56889 if (e) {
56890 log_packet_detailed("'adjective' field error detected");
56891 }
56892 }
56893 if (BV_ISSET(fields, 2)) {
56894 log_packet_detailed(" field 'rule_name' has changed");
56895#ifdef FREECIV_JSON_CONNECTION
56896 field_addr.name = "rule_name";
56897#endif /* FREECIV_JSON_CONNECTION */
56898 e = 0;
56899 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
56900 if (e) {
56901 log_packet_detailed("'rule_name' field error detected");
56902 }
56903 }
56904 if (BV_ISSET(fields, 3)) {
56905 log_packet_detailed(" field 'noun_plural' has changed");
56906#ifdef FREECIV_JSON_CONNECTION
56907 field_addr.name = "noun_plural";
56908#endif /* FREECIV_JSON_CONNECTION */
56909 e = 0;
56910 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
56911 if (e) {
56912 log_packet_detailed("'noun_plural' field error detected");
56913 }
56914 }
56915 if (BV_ISSET(fields, 4)) {
56916 log_packet_detailed(" field 'graphic_str' has changed");
56917#ifdef FREECIV_JSON_CONNECTION
56918 field_addr.name = "graphic_str";
56919#endif /* FREECIV_JSON_CONNECTION */
56920 e = 0;
56921 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
56922 if (e) {
56923 log_packet_detailed("'graphic_str' field error detected");
56924 }
56925 }
56926 if (BV_ISSET(fields, 5)) {
56927 log_packet_detailed(" field 'graphic_alt' has changed");
56928#ifdef FREECIV_JSON_CONNECTION
56929 field_addr.name = "graphic_alt";
56930#endif /* FREECIV_JSON_CONNECTION */
56931 e = 0;
56932 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
56933 if (e) {
56934 log_packet_detailed("'graphic_alt' field error detected");
56935 }
56936 }
56937 if (BV_ISSET(fields, 6)) {
56938 log_packet_detailed(" field 'legend' has changed");
56939#ifdef FREECIV_JSON_CONNECTION
56940 field_addr.name = "legend";
56941#endif /* FREECIV_JSON_CONNECTION */
56942 e = 0;
56943 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
56944 if (e) {
56945 log_packet_detailed("'legend' field error detected");
56946 }
56947 }
56948 if (BV_ISSET(fields, 7)) {
56949 log_packet_detailed(" field 'style' has changed");
56950#ifdef FREECIV_JSON_CONNECTION
56951 field_addr.name = "style";
56952#endif /* FREECIV_JSON_CONNECTION */
56953 e = 0;
56954 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
56955 if (e) {
56956 log_packet_detailed("'style' field error detected");
56957 }
56958 }
56959 if (BV_ISSET(fields, 8)) {
56960 log_packet_detailed(" field 'leader_count' has changed");
56961#ifdef FREECIV_JSON_CONNECTION
56962 field_addr.name = "leader_count";
56963#endif /* FREECIV_JSON_CONNECTION */
56964 e = 0;
56965 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
56966 if (e) {
56967 log_packet_detailed("'leader_count' field error detected");
56968 }
56969 }
56970 if (BV_ISSET(fields, 9)) {
56971 log_packet_detailed(" field 'leader_name' has changed");
56972#ifdef FREECIV_JSON_CONNECTION
56973 field_addr.name = "leader_name";
56974#endif /* FREECIV_JSON_CONNECTION */
56975 e = 0;
56976 {
56977 int i;
56978
56979#ifdef FREECIV_JSON_CONNECTION
56980 /* Create the array. */
56981 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
56982
56983 /* Enter the array. */
56984 field_addr.sub_location = plocation_elem_new(0);
56985#endif /* FREECIV_JSON_CONNECTION */
56986
56987 for (i = 0; i < real_packet->leader_count; i++) {
56988#ifdef FREECIV_JSON_CONNECTION
56989 /* Next array element. */
56990 field_addr.sub_location->number = i;
56991#endif /* FREECIV_JSON_CONNECTION */
56992
56993 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
56994 }
56995
56996#ifdef FREECIV_JSON_CONNECTION
56997 /* Exit array. */
56998 FC_FREE(field_addr.sub_location);
56999#endif /* FREECIV_JSON_CONNECTION */
57000 }
57001 if (e) {
57002 log_packet_detailed("'leader_name' field error detected");
57003 }
57004 }
57005 if (BV_ISSET(fields, 10)) {
57006 log_packet_detailed(" field 'leader_is_male' has changed");
57007#ifdef FREECIV_JSON_CONNECTION
57008 field_addr.name = "leader_is_male";
57009#endif /* FREECIV_JSON_CONNECTION */
57010 e = 0;
57011 {
57012 int i;
57013
57014#ifdef FREECIV_JSON_CONNECTION
57015 /* Create the array. */
57016 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
57017
57018 /* Enter the array. */
57019 field_addr.sub_location = plocation_elem_new(0);
57020#endif /* FREECIV_JSON_CONNECTION */
57021
57022 for (i = 0; i < real_packet->leader_count; i++) {
57023#ifdef FREECIV_JSON_CONNECTION
57024 /* Next array element. */
57025 field_addr.sub_location->number = i;
57026#endif /* FREECIV_JSON_CONNECTION */
57027
57028 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
57029 }
57030
57031#ifdef FREECIV_JSON_CONNECTION
57032 /* Exit array. */
57033 FC_FREE(field_addr.sub_location);
57034#endif /* FREECIV_JSON_CONNECTION */
57035 }
57036 if (e) {
57037 log_packet_detailed("'leader_is_male' field error detected");
57038 }
57039 }
57040 /* field 11 is folded into the header */
57041 if (BV_ISSET(fields, 12)) {
57042 log_packet_detailed(" field 'barbarian_type' has changed");
57043#ifdef FREECIV_JSON_CONNECTION
57044 field_addr.name = "barbarian_type";
57045#endif /* FREECIV_JSON_CONNECTION */
57046 e = 0;
57047 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
57048 if (e) {
57049 log_packet_detailed("'barbarian_type' field error detected");
57050 }
57051 }
57052 if (BV_ISSET(fields, 13)) {
57053 log_packet_detailed(" field 'nsets' has changed");
57054#ifdef FREECIV_JSON_CONNECTION
57055 field_addr.name = "nsets";
57056#endif /* FREECIV_JSON_CONNECTION */
57057 e = 0;
57058 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
57059 if (e) {
57060 log_packet_detailed("'nsets' field error detected");
57061 }
57062 }
57063 if (BV_ISSET(fields, 14)) {
57064 log_packet_detailed(" field 'sets' has changed");
57065#ifdef FREECIV_JSON_CONNECTION
57066 field_addr.name = "sets";
57067#endif /* FREECIV_JSON_CONNECTION */
57068 e = 0;
57069 {
57070 int i;
57071
57072#ifdef FREECIV_JSON_CONNECTION
57073 /* Create the array. */
57074 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
57075
57076 /* Enter the array. */
57077 field_addr.sub_location = plocation_elem_new(0);
57078#endif /* FREECIV_JSON_CONNECTION */
57079
57080 for (i = 0; i < real_packet->nsets; i++) {
57081#ifdef FREECIV_JSON_CONNECTION
57082 /* Next array element. */
57083 field_addr.sub_location->number = i;
57084#endif /* FREECIV_JSON_CONNECTION */
57085
57086 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
57087 }
57088
57089#ifdef FREECIV_JSON_CONNECTION
57090 /* Exit array. */
57091 FC_FREE(field_addr.sub_location);
57092#endif /* FREECIV_JSON_CONNECTION */
57093 }
57094 if (e) {
57095 log_packet_detailed("'sets' field error detected");
57096 }
57097 }
57098 if (BV_ISSET(fields, 15)) {
57099 log_packet_detailed(" field 'ngroups' has changed");
57100#ifdef FREECIV_JSON_CONNECTION
57101 field_addr.name = "ngroups";
57102#endif /* FREECIV_JSON_CONNECTION */
57103 e = 0;
57104 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
57105 if (e) {
57106 log_packet_detailed("'ngroups' field error detected");
57107 }
57108 }
57109 if (BV_ISSET(fields, 16)) {
57110 log_packet_detailed(" field 'groups' has changed");
57111#ifdef FREECIV_JSON_CONNECTION
57112 field_addr.name = "groups";
57113#endif /* FREECIV_JSON_CONNECTION */
57114 e = 0;
57115 {
57116 int i;
57117
57118#ifdef FREECIV_JSON_CONNECTION
57119 /* Create the array. */
57120 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
57121
57122 /* Enter the array. */
57123 field_addr.sub_location = plocation_elem_new(0);
57124#endif /* FREECIV_JSON_CONNECTION */
57125
57126 for (i = 0; i < real_packet->ngroups; i++) {
57127#ifdef FREECIV_JSON_CONNECTION
57128 /* Next array element. */
57129 field_addr.sub_location->number = i;
57130#endif /* FREECIV_JSON_CONNECTION */
57131
57132 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
57133 }
57134
57135#ifdef FREECIV_JSON_CONNECTION
57136 /* Exit array. */
57137 FC_FREE(field_addr.sub_location);
57138#endif /* FREECIV_JSON_CONNECTION */
57139 }
57140 if (e) {
57141 log_packet_detailed("'groups' field error detected");
57142 }
57143 }
57144 if (BV_ISSET(fields, 17)) {
57145 log_packet_detailed(" field 'init_government_id' has changed");
57146#ifdef FREECIV_JSON_CONNECTION
57147 field_addr.name = "init_government_id";
57148#endif /* FREECIV_JSON_CONNECTION */
57149 e = 0;
57150 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
57151 if (e) {
57152 log_packet_detailed("'init_government_id' field error detected");
57153 }
57154 }
57155 if (BV_ISSET(fields, 18)) {
57156 log_packet_detailed(" field 'init_techs_count' has changed");
57157#ifdef FREECIV_JSON_CONNECTION
57158 field_addr.name = "init_techs_count";
57159#endif /* FREECIV_JSON_CONNECTION */
57160 e = 0;
57161 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
57162 if (e) {
57163 log_packet_detailed("'init_techs_count' field error detected");
57164 }
57165 }
57166 if (BV_ISSET(fields, 19)) {
57167 log_packet_detailed(" field 'init_techs' has changed");
57168#ifdef FREECIV_JSON_CONNECTION
57169 field_addr.name = "init_techs";
57170#endif /* FREECIV_JSON_CONNECTION */
57171 e = 0;
57172 {
57173 int i;
57174
57175#ifdef FREECIV_JSON_CONNECTION
57176 /* Create the array. */
57177 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
57178
57179 /* Enter the array. */
57180 field_addr.sub_location = plocation_elem_new(0);
57181#endif /* FREECIV_JSON_CONNECTION */
57182
57183 for (i = 0; i < real_packet->init_techs_count; i++) {
57184#ifdef FREECIV_JSON_CONNECTION
57185 /* Next array element. */
57186 field_addr.sub_location->number = i;
57187#endif /* FREECIV_JSON_CONNECTION */
57188
57189 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
57190 }
57191
57192#ifdef FREECIV_JSON_CONNECTION
57193 /* Exit array. */
57194 FC_FREE(field_addr.sub_location);
57195#endif /* FREECIV_JSON_CONNECTION */
57196 }
57197 if (e) {
57198 log_packet_detailed("'init_techs' field error detected");
57199 }
57200 }
57201 if (BV_ISSET(fields, 20)) {
57202 log_packet_detailed(" field 'init_units_count' has changed");
57203#ifdef FREECIV_JSON_CONNECTION
57204 field_addr.name = "init_units_count";
57205#endif /* FREECIV_JSON_CONNECTION */
57206 e = 0;
57207 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
57208 if (e) {
57209 log_packet_detailed("'init_units_count' field error detected");
57210 }
57211 }
57212 if (BV_ISSET(fields, 21)) {
57213 log_packet_detailed(" field 'init_units' has changed");
57214#ifdef FREECIV_JSON_CONNECTION
57215 field_addr.name = "init_units";
57216#endif /* FREECIV_JSON_CONNECTION */
57217 e = 0;
57218 {
57219 int i;
57220
57221#ifdef FREECIV_JSON_CONNECTION
57222 /* Create the array. */
57223 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
57224
57225 /* Enter the array. */
57226 field_addr.sub_location = plocation_elem_new(0);
57227#endif /* FREECIV_JSON_CONNECTION */
57228
57229 for (i = 0; i < real_packet->init_units_count; i++) {
57230#ifdef FREECIV_JSON_CONNECTION
57231 /* Next array element. */
57232 field_addr.sub_location->number = i;
57233#endif /* FREECIV_JSON_CONNECTION */
57234
57235 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
57236 }
57237
57238#ifdef FREECIV_JSON_CONNECTION
57239 /* Exit array. */
57240 FC_FREE(field_addr.sub_location);
57241#endif /* FREECIV_JSON_CONNECTION */
57242 }
57243 if (e) {
57244 log_packet_detailed("'init_units' field error detected");
57245 }
57246 }
57247 if (BV_ISSET(fields, 22)) {
57248 log_packet_detailed(" field 'init_buildings_count' has changed");
57249#ifdef FREECIV_JSON_CONNECTION
57250 field_addr.name = "init_buildings_count";
57251#endif /* FREECIV_JSON_CONNECTION */
57252 e = 0;
57253 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
57254 if (e) {
57255 log_packet_detailed("'init_buildings_count' field error detected");
57256 }
57257 }
57258 if (BV_ISSET(fields, 23)) {
57259 log_packet_detailed(" field 'init_buildings' has changed");
57260#ifdef FREECIV_JSON_CONNECTION
57261 field_addr.name = "init_buildings";
57262#endif /* FREECIV_JSON_CONNECTION */
57263 e = 0;
57264 {
57265 int i;
57266
57267#ifdef FREECIV_JSON_CONNECTION
57268 /* Create the array. */
57269 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
57270
57271 /* Enter the array. */
57272 field_addr.sub_location = plocation_elem_new(0);
57273#endif /* FREECIV_JSON_CONNECTION */
57274
57275 for (i = 0; i < real_packet->init_buildings_count; i++) {
57276#ifdef FREECIV_JSON_CONNECTION
57277 /* Next array element. */
57278 field_addr.sub_location->number = i;
57279#endif /* FREECIV_JSON_CONNECTION */
57280
57281 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
57282 }
57283
57284#ifdef FREECIV_JSON_CONNECTION
57285 /* Exit array. */
57286 FC_FREE(field_addr.sub_location);
57287#endif /* FREECIV_JSON_CONNECTION */
57288 }
57289 if (e) {
57290 log_packet_detailed("'init_buildings' field error detected");
57291 }
57292 }
57293
57294 *old = *real_packet;
57295#endif /* FREECIV_DELTA_PROTOCOL */
57296#ifndef FREECIV_DELTA_PROTOCOL
57297#ifdef FREECIV_JSON_CONNECTION
57298 field_addr.name = "id";
57299#endif /* FREECIV_JSON_CONNECTION */
57300 e = 0;
57301 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->id);
57302 if (e) {
57303 log_packet_detailed("'id' field error detected");
57304 }
57305#ifdef FREECIV_JSON_CONNECTION
57306 field_addr.name = "translation_domain";
57307#endif /* FREECIV_JSON_CONNECTION */
57308 e = 0;
57309 e |= DIO_PUT(string, &dout, &field_addr, real_packet->translation_domain);
57310 if (e) {
57311 log_packet_detailed("'translation_domain' field error detected");
57312 }
57313#ifdef FREECIV_JSON_CONNECTION
57314 field_addr.name = "adjective";
57315#endif /* FREECIV_JSON_CONNECTION */
57316 e = 0;
57317 e |= DIO_PUT(string, &dout, &field_addr, real_packet->adjective);
57318 if (e) {
57319 log_packet_detailed("'adjective' field error detected");
57320 }
57321#ifdef FREECIV_JSON_CONNECTION
57322 field_addr.name = "rule_name";
57323#endif /* FREECIV_JSON_CONNECTION */
57324 e = 0;
57325 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
57326 if (e) {
57327 log_packet_detailed("'rule_name' field error detected");
57328 }
57329#ifdef FREECIV_JSON_CONNECTION
57330 field_addr.name = "noun_plural";
57331#endif /* FREECIV_JSON_CONNECTION */
57332 e = 0;
57333 e |= DIO_PUT(string, &dout, &field_addr, real_packet->noun_plural);
57334 if (e) {
57335 log_packet_detailed("'noun_plural' field error detected");
57336 }
57337#ifdef FREECIV_JSON_CONNECTION
57338 field_addr.name = "graphic_str";
57339#endif /* FREECIV_JSON_CONNECTION */
57340 e = 0;
57341 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
57342 if (e) {
57343 log_packet_detailed("'graphic_str' field error detected");
57344 }
57345#ifdef FREECIV_JSON_CONNECTION
57346 field_addr.name = "graphic_alt";
57347#endif /* FREECIV_JSON_CONNECTION */
57348 e = 0;
57349 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
57350 if (e) {
57351 log_packet_detailed("'graphic_alt' field error detected");
57352 }
57353#ifdef FREECIV_JSON_CONNECTION
57354 field_addr.name = "legend";
57355#endif /* FREECIV_JSON_CONNECTION */
57356 e = 0;
57357 e |= DIO_PUT(string, &dout, &field_addr, real_packet->legend);
57358 if (e) {
57359 log_packet_detailed("'legend' field error detected");
57360 }
57361#ifdef FREECIV_JSON_CONNECTION
57362 field_addr.name = "style";
57363#endif /* FREECIV_JSON_CONNECTION */
57364 e = 0;
57365 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style);
57366 if (e) {
57367 log_packet_detailed("'style' field error detected");
57368 }
57369#ifdef FREECIV_JSON_CONNECTION
57370 field_addr.name = "leader_count";
57371#endif /* FREECIV_JSON_CONNECTION */
57372 e = 0;
57373 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->leader_count);
57374 if (e) {
57375 log_packet_detailed("'leader_count' field error detected");
57376 }
57377#ifdef FREECIV_JSON_CONNECTION
57378 field_addr.name = "leader_name";
57379#endif /* FREECIV_JSON_CONNECTION */
57380 e = 0;
57381 {
57382 int i;
57383
57384#ifdef FREECIV_JSON_CONNECTION
57385 /* Create the array. */
57386 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
57387
57388 /* Enter the array. */
57389 field_addr.sub_location = plocation_elem_new(0);
57390#endif /* FREECIV_JSON_CONNECTION */
57391
57392 for (i = 0; i < real_packet->leader_count; i++) {
57393#ifdef FREECIV_JSON_CONNECTION
57394 /* Next array element. */
57395 field_addr.sub_location->number = i;
57396#endif /* FREECIV_JSON_CONNECTION */
57397
57398 e |= DIO_PUT(string, &dout, &field_addr, real_packet->leader_name[i]);
57399 }
57400
57401#ifdef FREECIV_JSON_CONNECTION
57402 /* Exit array. */
57403 FC_FREE(field_addr.sub_location);
57404#endif /* FREECIV_JSON_CONNECTION */
57405 }
57406 if (e) {
57407 log_packet_detailed("'leader_name' field error detected");
57408 }
57409#ifdef FREECIV_JSON_CONNECTION
57410 field_addr.name = "leader_is_male";
57411#endif /* FREECIV_JSON_CONNECTION */
57412 e = 0;
57413 {
57414 int i;
57415
57416#ifdef FREECIV_JSON_CONNECTION
57417 /* Create the array. */
57418 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->leader_count);
57419
57420 /* Enter the array. */
57421 field_addr.sub_location = plocation_elem_new(0);
57422#endif /* FREECIV_JSON_CONNECTION */
57423
57424 for (i = 0; i < real_packet->leader_count; i++) {
57425#ifdef FREECIV_JSON_CONNECTION
57426 /* Next array element. */
57427 field_addr.sub_location->number = i;
57428#endif /* FREECIV_JSON_CONNECTION */
57429
57430 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->leader_is_male[i]);
57431 }
57432
57433#ifdef FREECIV_JSON_CONNECTION
57434 /* Exit array. */
57435 FC_FREE(field_addr.sub_location);
57436#endif /* FREECIV_JSON_CONNECTION */
57437 }
57438 if (e) {
57439 log_packet_detailed("'leader_is_male' field error detected");
57440 }
57441#ifdef FREECIV_JSON_CONNECTION
57442 field_addr.name = "is_playable";
57443#endif /* FREECIV_JSON_CONNECTION */
57444 e = 0;
57445 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_playable);
57446 if (e) {
57447 log_packet_detailed("'is_playable' field error detected");
57448 }
57449#ifdef FREECIV_JSON_CONNECTION
57450 field_addr.name = "barbarian_type";
57451#endif /* FREECIV_JSON_CONNECTION */
57452 e = 0;
57453 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->barbarian_type);
57454 if (e) {
57455 log_packet_detailed("'barbarian_type' field error detected");
57456 }
57457#ifdef FREECIV_JSON_CONNECTION
57458 field_addr.name = "nsets";
57459#endif /* FREECIV_JSON_CONNECTION */
57460 e = 0;
57461 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->nsets);
57462 if (e) {
57463 log_packet_detailed("'nsets' field error detected");
57464 }
57465#ifdef FREECIV_JSON_CONNECTION
57466 field_addr.name = "sets";
57467#endif /* FREECIV_JSON_CONNECTION */
57468 e = 0;
57469 {
57470 int i;
57471
57472#ifdef FREECIV_JSON_CONNECTION
57473 /* Create the array. */
57474 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->nsets);
57475
57476 /* Enter the array. */
57477 field_addr.sub_location = plocation_elem_new(0);
57478#endif /* FREECIV_JSON_CONNECTION */
57479
57480 for (i = 0; i < real_packet->nsets; i++) {
57481#ifdef FREECIV_JSON_CONNECTION
57482 /* Next array element. */
57483 field_addr.sub_location->number = i;
57484#endif /* FREECIV_JSON_CONNECTION */
57485
57486 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sets[i]);
57487 }
57488
57489#ifdef FREECIV_JSON_CONNECTION
57490 /* Exit array. */
57491 FC_FREE(field_addr.sub_location);
57492#endif /* FREECIV_JSON_CONNECTION */
57493 }
57494 if (e) {
57495 log_packet_detailed("'sets' field error detected");
57496 }
57497#ifdef FREECIV_JSON_CONNECTION
57498 field_addr.name = "ngroups";
57499#endif /* FREECIV_JSON_CONNECTION */
57500 e = 0;
57501 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ngroups);
57502 if (e) {
57503 log_packet_detailed("'ngroups' field error detected");
57504 }
57505#ifdef FREECIV_JSON_CONNECTION
57506 field_addr.name = "groups";
57507#endif /* FREECIV_JSON_CONNECTION */
57508 e = 0;
57509 {
57510 int i;
57511
57512#ifdef FREECIV_JSON_CONNECTION
57513 /* Create the array. */
57514 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ngroups);
57515
57516 /* Enter the array. */
57517 field_addr.sub_location = plocation_elem_new(0);
57518#endif /* FREECIV_JSON_CONNECTION */
57519
57520 for (i = 0; i < real_packet->ngroups; i++) {
57521#ifdef FREECIV_JSON_CONNECTION
57522 /* Next array element. */
57523 field_addr.sub_location->number = i;
57524#endif /* FREECIV_JSON_CONNECTION */
57525
57526 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->groups[i]);
57527 }
57528
57529#ifdef FREECIV_JSON_CONNECTION
57530 /* Exit array. */
57531 FC_FREE(field_addr.sub_location);
57532#endif /* FREECIV_JSON_CONNECTION */
57533 }
57534 if (e) {
57535 log_packet_detailed("'groups' field error detected");
57536 }
57537#ifdef FREECIV_JSON_CONNECTION
57538 field_addr.name = "init_government_id";
57539#endif /* FREECIV_JSON_CONNECTION */
57540 e = 0;
57541 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->init_government_id);
57542 if (e) {
57543 log_packet_detailed("'init_government_id' field error detected");
57544 }
57545#ifdef FREECIV_JSON_CONNECTION
57546 field_addr.name = "init_techs_count";
57547#endif /* FREECIV_JSON_CONNECTION */
57548 e = 0;
57549 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_techs_count);
57550 if (e) {
57551 log_packet_detailed("'init_techs_count' field error detected");
57552 }
57553#ifdef FREECIV_JSON_CONNECTION
57554 field_addr.name = "init_techs";
57555#endif /* FREECIV_JSON_CONNECTION */
57556 e = 0;
57557 {
57558 int i;
57559
57560#ifdef FREECIV_JSON_CONNECTION
57561 /* Create the array. */
57562 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_techs_count);
57563
57564 /* Enter the array. */
57565 field_addr.sub_location = plocation_elem_new(0);
57566#endif /* FREECIV_JSON_CONNECTION */
57567
57568 for (i = 0; i < real_packet->init_techs_count; i++) {
57569#ifdef FREECIV_JSON_CONNECTION
57570 /* Next array element. */
57571 field_addr.sub_location->number = i;
57572#endif /* FREECIV_JSON_CONNECTION */
57573
57574 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_techs[i]);
57575 }
57576
57577#ifdef FREECIV_JSON_CONNECTION
57578 /* Exit array. */
57579 FC_FREE(field_addr.sub_location);
57580#endif /* FREECIV_JSON_CONNECTION */
57581 }
57582 if (e) {
57583 log_packet_detailed("'init_techs' field error detected");
57584 }
57585#ifdef FREECIV_JSON_CONNECTION
57586 field_addr.name = "init_units_count";
57587#endif /* FREECIV_JSON_CONNECTION */
57588 e = 0;
57589 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_units_count);
57590 if (e) {
57591 log_packet_detailed("'init_units_count' field error detected");
57592 }
57593#ifdef FREECIV_JSON_CONNECTION
57594 field_addr.name = "init_units";
57595#endif /* FREECIV_JSON_CONNECTION */
57596 e = 0;
57597 {
57598 int i;
57599
57600#ifdef FREECIV_JSON_CONNECTION
57601 /* Create the array. */
57602 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_units_count);
57603
57604 /* Enter the array. */
57605 field_addr.sub_location = plocation_elem_new(0);
57606#endif /* FREECIV_JSON_CONNECTION */
57607
57608 for (i = 0; i < real_packet->init_units_count; i++) {
57609#ifdef FREECIV_JSON_CONNECTION
57610 /* Next array element. */
57611 field_addr.sub_location->number = i;
57612#endif /* FREECIV_JSON_CONNECTION */
57613
57614 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->init_units[i]);
57615 }
57616
57617#ifdef FREECIV_JSON_CONNECTION
57618 /* Exit array. */
57619 FC_FREE(field_addr.sub_location);
57620#endif /* FREECIV_JSON_CONNECTION */
57621 }
57622 if (e) {
57623 log_packet_detailed("'init_units' field error detected");
57624 }
57625#ifdef FREECIV_JSON_CONNECTION
57626 field_addr.name = "init_buildings_count";
57627#endif /* FREECIV_JSON_CONNECTION */
57628 e = 0;
57629 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings_count);
57630 if (e) {
57631 log_packet_detailed("'init_buildings_count' field error detected");
57632 }
57633#ifdef FREECIV_JSON_CONNECTION
57634 field_addr.name = "init_buildings";
57635#endif /* FREECIV_JSON_CONNECTION */
57636 e = 0;
57637 {
57638 int i;
57639
57640#ifdef FREECIV_JSON_CONNECTION
57641 /* Create the array. */
57642 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->init_buildings_count);
57643
57644 /* Enter the array. */
57645 field_addr.sub_location = plocation_elem_new(0);
57646#endif /* FREECIV_JSON_CONNECTION */
57647
57648 for (i = 0; i < real_packet->init_buildings_count; i++) {
57649#ifdef FREECIV_JSON_CONNECTION
57650 /* Next array element. */
57651 field_addr.sub_location->number = i;
57652#endif /* FREECIV_JSON_CONNECTION */
57653
57654 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->init_buildings[i]);
57655 }
57656
57657#ifdef FREECIV_JSON_CONNECTION
57658 /* Exit array. */
57659 FC_FREE(field_addr.sub_location);
57660#endif /* FREECIV_JSON_CONNECTION */
57661 }
57662 if (e) {
57663 log_packet_detailed("'init_buildings' field error detected");
57664 }
57665
57666#endif
57668}
57669
57671{
57672 if (!pc->used) {
57673 log_error("WARNING: trying to send data to the closed connection %s",
57675 return -1;
57676 }
57677 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_NATION].packet != NULL, -1,
57678 "Handler for PACKET_RULESET_NATION not installed");
57679 return pc->phs.handlers->send[PACKET_RULESET_NATION].packet(pc, packet);
57680}
57681
57682void lsend_packet_ruleset_nation(struct conn_list *dest, const struct packet_ruleset_nation *packet)
57683{
57684 conn_list_iterate(dest, pconn) {
57687}
57688
57689#ifdef FREECIV_DELTA_PROTOCOL
57690#define hash_packet_nation_availability_100 hash_const
57691
57692#define cmp_packet_nation_availability_100 cmp_const
57693
57695#endif /* FREECIV_DELTA_PROTOCOL */
57696
57698{
57699#ifdef FREECIV_DELTA_PROTOCOL
57701 struct packet_nation_availability *old;
57702 struct genhash **hash = pc->phs.received + PACKET_NATION_AVAILABILITY;
57703#endif /* FREECIV_DELTA_PROTOCOL */
57705#ifdef FREECIV_JSON_CONNECTION
57706 struct plocation field_addr;
57707 {
57711 }
57712#endif /* FREECIV_JSON_CONNECTION */
57713
57714#ifdef FREECIV_DELTA_PROTOCOL
57715#ifdef FREECIV_JSON_CONNECTION
57716 field_addr.name = "fields";
57717#endif /* FREECIV_JSON_CONNECTION */
57718 DIO_BV_GET(&din, &field_addr, fields);
57719
57720#else /* FREECIV_DELTA_PROTOCOL */
57721#ifdef FREECIV_JSON_CONNECTION
57722 field_addr.name = "ncount";
57723#endif /* FREECIV_JSON_CONNECTION */
57724 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
57726 }
57727#ifdef FREECIV_JSON_CONNECTION
57728 field_addr.name = "is_pickable";
57729#endif /* FREECIV_JSON_CONNECTION */
57730 if (real_packet->ncount > MAX_NUM_NATIONS) {
57731 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": truncation array");
57732 }
57733 {
57734 int i;
57735
57736#ifdef FREECIV_JSON_CONNECTION
57737 /* Enter array. */
57738 field_addr.sub_location = plocation_elem_new(0);
57739#endif /* FREECIV_JSON_CONNECTION */
57740
57741 for (i = 0; i < real_packet->ncount; i++) {
57742#ifdef FREECIV_JSON_CONNECTION
57743 field_addr.sub_location->number = i;
57744#endif /* FREECIV_JSON_CONNECTION */
57745
57746 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
57747 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
57748 }
57749 }
57750
57751#ifdef FREECIV_JSON_CONNECTION
57752 /* Exit array. */
57753 FC_FREE(field_addr.sub_location);
57754#endif /* FREECIV_JSON_CONNECTION */
57755 }
57756#ifdef FREECIV_JSON_CONNECTION
57757 field_addr.name = "nationset_change";
57758#endif /* FREECIV_JSON_CONNECTION */
57759 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->nationset_change)) {
57760 RECEIVE_PACKET_FIELD_ERROR(nationset_change);
57761 }
57762#endif
57763 log_packet_detailed("packet_nation_availability_100: got info about ()");
57764
57765#ifdef FREECIV_DELTA_PROTOCOL
57766 if (NULL == *hash) {
57768 NULL, NULL, NULL, free);
57769 }
57770
57771 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
57772 *real_packet = *old;
57773 } else {
57774 log_packet_detailed(" no old info");
57775 memset(real_packet, 0, sizeof(*real_packet));
57776 }
57777
57778 if (BV_ISSET(fields, 0)) {
57779 log_packet_detailed(" got field 'ncount'");
57780#ifdef FREECIV_JSON_CONNECTION
57781 field_addr.name = "ncount";
57782#endif /* FREECIV_JSON_CONNECTION */
57783 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->ncount)) {
57785 }
57786 }
57787 if (BV_ISSET(fields, 1)) {
57788 log_packet_detailed(" got field 'is_pickable'");
57789#ifdef FREECIV_JSON_CONNECTION
57790 field_addr.name = "is_pickable";
57791#endif /* FREECIV_JSON_CONNECTION */
57792 if (real_packet->ncount > MAX_NUM_NATIONS) {
57793 RECEIVE_PACKET_FIELD_ERROR(is_pickable, ": truncation array");
57794 }
57795 {
57796 int i;
57797
57798#ifdef FREECIV_JSON_CONNECTION
57799 /* Enter array. */
57800 field_addr.sub_location = plocation_elem_new(0);
57801#endif /* FREECIV_JSON_CONNECTION */
57802
57803 for (i = 0; i < real_packet->ncount; i++) {
57804#ifdef FREECIV_JSON_CONNECTION
57805 field_addr.sub_location->number = i;
57806#endif /* FREECIV_JSON_CONNECTION */
57807
57808 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_pickable[i])) {
57809 RECEIVE_PACKET_FIELD_ERROR(is_pickable);
57810 }
57811 }
57812
57813#ifdef FREECIV_JSON_CONNECTION
57814 /* Exit array. */
57815 FC_FREE(field_addr.sub_location);
57816#endif /* FREECIV_JSON_CONNECTION */
57817 }
57818 }
57819 real_packet->nationset_change = BV_ISSET(fields, 2);
57820
57821 if (NULL == old) {
57822 old = fc_malloc(sizeof(*old));
57823 *old = *real_packet;
57824 genhash_insert(*hash, old, old);
57825 } else {
57826 *old = *real_packet;
57827 }
57828
57829#endif /* FREECIV_DELTA_PROTOCOL */
57831}
57832
57834{
57835 const struct packet_nation_availability *real_packet = packet;
57836 int e;
57837#ifdef FREECIV_DELTA_PROTOCOL
57839 struct packet_nation_availability *old;
57840 bool differ;
57841 struct genhash **hash = pc->phs.sent + PACKET_NATION_AVAILABILITY;
57842#endif /* FREECIV_DELTA_PROTOCOL */
57844#ifdef FREECIV_JSON_CONNECTION
57845 struct plocation field_addr;
57846 {
57850 }
57851#endif /* FREECIV_JSON_CONNECTION */
57852
57853 log_packet_detailed("packet_nation_availability_100: sending info about ()");
57854
57855#ifdef FREECIV_DELTA_PROTOCOL
57856 if (NULL == *hash) {
57858 NULL, NULL, NULL, free);
57859 }
57860 BV_CLR_ALL(fields);
57861
57862 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
57863 old = fc_malloc(sizeof(*old));
57864 *old = *real_packet;
57865 genhash_insert(*hash, old, old);
57866 memset(old, 0, sizeof(*old));
57867 }
57868 differ = (old->ncount != real_packet->ncount);
57869 if (differ) {
57870 BV_SET(fields, 0);
57871 }
57872
57873 differ = (old->ncount != real_packet->ncount);
57874 if (!differ) {
57875 int i;
57876
57877 for (i = 0; i < real_packet->ncount; i++) {
57878 differ = (old->is_pickable[i] != real_packet->is_pickable[i]);
57879 if (differ) {
57880 break;
57881 }
57882 }
57883 }
57884 if (differ) {
57885 BV_SET(fields, 1);
57886 }
57887
57888 if (packet->nationset_change) {
57889 BV_SET(fields, 2);
57890 }
57891
57892
57893#ifdef FREECIV_JSON_CONNECTION
57894 field_addr.name = "fields";
57895#endif /* FREECIV_JSON_CONNECTION */
57896 e = 0;
57897 e |= DIO_BV_PUT(&dout, &field_addr, fields);
57898 if (e) {
57899 log_packet_detailed("fields bitvector error detected");
57900 }
57901
57902 if (BV_ISSET(fields, 0)) {
57903 log_packet_detailed(" field 'ncount' has changed");
57904#ifdef FREECIV_JSON_CONNECTION
57905 field_addr.name = "ncount";
57906#endif /* FREECIV_JSON_CONNECTION */
57907 e = 0;
57908 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
57909 if (e) {
57910 log_packet_detailed("'ncount' field error detected");
57911 }
57912 }
57913 if (BV_ISSET(fields, 1)) {
57914 log_packet_detailed(" field 'is_pickable' has changed");
57915#ifdef FREECIV_JSON_CONNECTION
57916 field_addr.name = "is_pickable";
57917#endif /* FREECIV_JSON_CONNECTION */
57918 e = 0;
57919 {
57920 int i;
57921
57922#ifdef FREECIV_JSON_CONNECTION
57923 /* Create the array. */
57924 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
57925
57926 /* Enter the array. */
57927 field_addr.sub_location = plocation_elem_new(0);
57928#endif /* FREECIV_JSON_CONNECTION */
57929
57930 for (i = 0; i < real_packet->ncount; i++) {
57931#ifdef FREECIV_JSON_CONNECTION
57932 /* Next array element. */
57933 field_addr.sub_location->number = i;
57934#endif /* FREECIV_JSON_CONNECTION */
57935
57936 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
57937 }
57938
57939#ifdef FREECIV_JSON_CONNECTION
57940 /* Exit array. */
57941 FC_FREE(field_addr.sub_location);
57942#endif /* FREECIV_JSON_CONNECTION */
57943 }
57944 if (e) {
57945 log_packet_detailed("'is_pickable' field error detected");
57946 }
57947 }
57948 /* field 2 is folded into the header */
57949
57950 *old = *real_packet;
57951#endif /* FREECIV_DELTA_PROTOCOL */
57952#ifndef FREECIV_DELTA_PROTOCOL
57953#ifdef FREECIV_JSON_CONNECTION
57954 field_addr.name = "ncount";
57955#endif /* FREECIV_JSON_CONNECTION */
57956 e = 0;
57957 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->ncount);
57958 if (e) {
57959 log_packet_detailed("'ncount' field error detected");
57960 }
57961#ifdef FREECIV_JSON_CONNECTION
57962 field_addr.name = "is_pickable";
57963#endif /* FREECIV_JSON_CONNECTION */
57964 e = 0;
57965 {
57966 int i;
57967
57968#ifdef FREECIV_JSON_CONNECTION
57969 /* Create the array. */
57970 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ncount);
57971
57972 /* Enter the array. */
57973 field_addr.sub_location = plocation_elem_new(0);
57974#endif /* FREECIV_JSON_CONNECTION */
57975
57976 for (i = 0; i < real_packet->ncount; i++) {
57977#ifdef FREECIV_JSON_CONNECTION
57978 /* Next array element. */
57979 field_addr.sub_location->number = i;
57980#endif /* FREECIV_JSON_CONNECTION */
57981
57982 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_pickable[i]);
57983 }
57984
57985#ifdef FREECIV_JSON_CONNECTION
57986 /* Exit array. */
57987 FC_FREE(field_addr.sub_location);
57988#endif /* FREECIV_JSON_CONNECTION */
57989 }
57990 if (e) {
57991 log_packet_detailed("'is_pickable' field error detected");
57992 }
57993#ifdef FREECIV_JSON_CONNECTION
57994 field_addr.name = "nationset_change";
57995#endif /* FREECIV_JSON_CONNECTION */
57996 e = 0;
57997 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->nationset_change);
57998 if (e) {
57999 log_packet_detailed("'nationset_change' field error detected");
58000 }
58001
58002#endif
58004}
58005
58007{
58008 if (!pc->used) {
58009 log_error("WARNING: trying to send data to the closed connection %s",
58011 return -1;
58012 }
58013 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet != NULL, -1,
58014 "Handler for PACKET_NATION_AVAILABILITY not installed");
58015 return pc->phs.handlers->send[PACKET_NATION_AVAILABILITY].packet(pc, packet);
58016}
58017
58019{
58020 conn_list_iterate(dest, pconn) {
58023}
58024
58025#ifdef FREECIV_DELTA_PROTOCOL
58026#define hash_packet_ruleset_style_100 hash_const
58027
58028#define cmp_packet_ruleset_style_100 cmp_const
58029
58031#endif /* FREECIV_DELTA_PROTOCOL */
58032
58034{
58035#ifdef FREECIV_DELTA_PROTOCOL
58037 struct packet_ruleset_style *old;
58038 struct genhash **hash = pc->phs.received + PACKET_RULESET_STYLE;
58039#endif /* FREECIV_DELTA_PROTOCOL */
58041#ifdef FREECIV_JSON_CONNECTION
58042 struct plocation field_addr;
58043 {
58047 }
58048#endif /* FREECIV_JSON_CONNECTION */
58049
58050#ifdef FREECIV_DELTA_PROTOCOL
58051#ifdef FREECIV_JSON_CONNECTION
58052 field_addr.name = "fields";
58053#endif /* FREECIV_JSON_CONNECTION */
58054 DIO_BV_GET(&din, &field_addr, fields);
58055
58056#else /* FREECIV_DELTA_PROTOCOL */
58057#ifdef FREECIV_JSON_CONNECTION
58058 field_addr.name = "id";
58059#endif /* FREECIV_JSON_CONNECTION */
58060 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
58062 }
58063#ifdef FREECIV_JSON_CONNECTION
58064 field_addr.name = "name";
58065#endif /* FREECIV_JSON_CONNECTION */
58066 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
58068 }
58069#ifdef FREECIV_JSON_CONNECTION
58070 field_addr.name = "rule_name";
58071#endif /* FREECIV_JSON_CONNECTION */
58072 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
58073 RECEIVE_PACKET_FIELD_ERROR(rule_name);
58074 }
58075#endif
58076 log_packet_detailed("packet_ruleset_style_100: got info about ()");
58077
58078#ifdef FREECIV_DELTA_PROTOCOL
58079 if (NULL == *hash) {
58081 NULL, NULL, NULL, free);
58082 }
58083
58084 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
58085 *real_packet = *old;
58086 } else {
58087 log_packet_detailed(" no old info");
58088 memset(real_packet, 0, sizeof(*real_packet));
58089 }
58090
58091 if (BV_ISSET(fields, 0)) {
58092 log_packet_detailed(" got field 'id'");
58093#ifdef FREECIV_JSON_CONNECTION
58094 field_addr.name = "id";
58095#endif /* FREECIV_JSON_CONNECTION */
58096 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
58098 }
58099 }
58100 if (BV_ISSET(fields, 1)) {
58101 log_packet_detailed(" got field 'name'");
58102#ifdef FREECIV_JSON_CONNECTION
58103 field_addr.name = "name";
58104#endif /* FREECIV_JSON_CONNECTION */
58105 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
58107 }
58108 }
58109 if (BV_ISSET(fields, 2)) {
58110 log_packet_detailed(" got field 'rule_name'");
58111#ifdef FREECIV_JSON_CONNECTION
58112 field_addr.name = "rule_name";
58113#endif /* FREECIV_JSON_CONNECTION */
58114 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
58115 RECEIVE_PACKET_FIELD_ERROR(rule_name);
58116 }
58117 }
58118
58119 if (NULL == old) {
58120 old = fc_malloc(sizeof(*old));
58121 *old = *real_packet;
58122 genhash_insert(*hash, old, old);
58123 } else {
58124 *old = *real_packet;
58125 }
58126
58127#endif /* FREECIV_DELTA_PROTOCOL */
58129}
58130
58131static int send_packet_ruleset_style_100(struct connection *pc, const struct packet_ruleset_style *packet)
58132{
58133 const struct packet_ruleset_style *real_packet = packet;
58134 int e;
58135#ifdef FREECIV_DELTA_PROTOCOL
58137 struct packet_ruleset_style *old;
58138 bool differ;
58139 struct genhash **hash = pc->phs.sent + PACKET_RULESET_STYLE;
58140#endif /* FREECIV_DELTA_PROTOCOL */
58142#ifdef FREECIV_JSON_CONNECTION
58143 struct plocation field_addr;
58144 {
58148 }
58149#endif /* FREECIV_JSON_CONNECTION */
58150
58151 log_packet_detailed("packet_ruleset_style_100: sending info about ()");
58152
58153#ifdef FREECIV_DELTA_PROTOCOL
58154 if (NULL == *hash) {
58156 NULL, NULL, NULL, free);
58157 }
58158 BV_CLR_ALL(fields);
58159
58160 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
58161 old = fc_malloc(sizeof(*old));
58162 *old = *real_packet;
58163 genhash_insert(*hash, old, old);
58164 memset(old, 0, sizeof(*old));
58165 }
58166 differ = (old->id != real_packet->id);
58167 if (differ) {
58168 BV_SET(fields, 0);
58169 }
58170
58171 differ = (strcmp(old->name, real_packet->name) != 0);
58172 if (differ) {
58173 BV_SET(fields, 1);
58174 }
58175
58176 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
58177 if (differ) {
58178 BV_SET(fields, 2);
58179 }
58180
58181
58182#ifdef FREECIV_JSON_CONNECTION
58183 field_addr.name = "fields";
58184#endif /* FREECIV_JSON_CONNECTION */
58185 e = 0;
58186 e |= DIO_BV_PUT(&dout, &field_addr, fields);
58187 if (e) {
58188 log_packet_detailed("fields bitvector error detected");
58189 }
58190
58191 if (BV_ISSET(fields, 0)) {
58192 log_packet_detailed(" field 'id' has changed");
58193#ifdef FREECIV_JSON_CONNECTION
58194 field_addr.name = "id";
58195#endif /* FREECIV_JSON_CONNECTION */
58196 e = 0;
58197 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
58198 if (e) {
58199 log_packet_detailed("'id' field error detected");
58200 }
58201 }
58202 if (BV_ISSET(fields, 1)) {
58203 log_packet_detailed(" field 'name' has changed");
58204#ifdef FREECIV_JSON_CONNECTION
58205 field_addr.name = "name";
58206#endif /* FREECIV_JSON_CONNECTION */
58207 e = 0;
58208 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
58209 if (e) {
58210 log_packet_detailed("'name' field error detected");
58211 }
58212 }
58213 if (BV_ISSET(fields, 2)) {
58214 log_packet_detailed(" field 'rule_name' has changed");
58215#ifdef FREECIV_JSON_CONNECTION
58216 field_addr.name = "rule_name";
58217#endif /* FREECIV_JSON_CONNECTION */
58218 e = 0;
58219 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
58220 if (e) {
58221 log_packet_detailed("'rule_name' field error detected");
58222 }
58223 }
58224
58225 *old = *real_packet;
58226#endif /* FREECIV_DELTA_PROTOCOL */
58227#ifndef FREECIV_DELTA_PROTOCOL
58228#ifdef FREECIV_JSON_CONNECTION
58229 field_addr.name = "id";
58230#endif /* FREECIV_JSON_CONNECTION */
58231 e = 0;
58232 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
58233 if (e) {
58234 log_packet_detailed("'id' field error detected");
58235 }
58236#ifdef FREECIV_JSON_CONNECTION
58237 field_addr.name = "name";
58238#endif /* FREECIV_JSON_CONNECTION */
58239 e = 0;
58240 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
58241 if (e) {
58242 log_packet_detailed("'name' field error detected");
58243 }
58244#ifdef FREECIV_JSON_CONNECTION
58245 field_addr.name = "rule_name";
58246#endif /* FREECIV_JSON_CONNECTION */
58247 e = 0;
58248 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
58249 if (e) {
58250 log_packet_detailed("'rule_name' field error detected");
58251 }
58252
58253#endif
58255}
58256
58258{
58259 if (!pc->used) {
58260 log_error("WARNING: trying to send data to the closed connection %s",
58262 return -1;
58263 }
58264 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_STYLE].packet != NULL, -1,
58265 "Handler for PACKET_RULESET_STYLE not installed");
58266 return pc->phs.handlers->send[PACKET_RULESET_STYLE].packet(pc, packet);
58267}
58268
58269void lsend_packet_ruleset_style(struct conn_list *dest, const struct packet_ruleset_style *packet)
58270{
58271 conn_list_iterate(dest, pconn) {
58274}
58275
58276#ifdef FREECIV_DELTA_PROTOCOL
58277#define hash_packet_ruleset_city_100 hash_const
58278
58279#define cmp_packet_ruleset_city_100 cmp_const
58280
58282#endif /* FREECIV_DELTA_PROTOCOL */
58283
58285{
58286#ifdef FREECIV_DELTA_PROTOCOL
58288 struct packet_ruleset_city *old;
58289 struct genhash **hash = pc->phs.received + PACKET_RULESET_CITY;
58290#endif /* FREECIV_DELTA_PROTOCOL */
58292#ifdef FREECIV_JSON_CONNECTION
58293 struct plocation field_addr;
58294 {
58298 }
58299#endif /* FREECIV_JSON_CONNECTION */
58300
58301#ifdef FREECIV_DELTA_PROTOCOL
58302#ifdef FREECIV_JSON_CONNECTION
58303 field_addr.name = "fields";
58304#endif /* FREECIV_JSON_CONNECTION */
58305 DIO_BV_GET(&din, &field_addr, fields);
58306
58307#else /* FREECIV_DELTA_PROTOCOL */
58308#ifdef FREECIV_JSON_CONNECTION
58309 field_addr.name = "style_id";
58310#endif /* FREECIV_JSON_CONNECTION */
58311 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
58313 }
58314#ifdef FREECIV_JSON_CONNECTION
58315 field_addr.name = "name";
58316#endif /* FREECIV_JSON_CONNECTION */
58317 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
58319 }
58320#ifdef FREECIV_JSON_CONNECTION
58321 field_addr.name = "rule_name";
58322#endif /* FREECIV_JSON_CONNECTION */
58323 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
58324 RECEIVE_PACKET_FIELD_ERROR(rule_name);
58325 }
58326#ifdef FREECIV_JSON_CONNECTION
58327 field_addr.name = "citizens_graphic";
58328#endif /* FREECIV_JSON_CONNECTION */
58329 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
58330 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
58331 }
58332#ifdef FREECIV_JSON_CONNECTION
58333 field_addr.name = "reqs_count";
58334#endif /* FREECIV_JSON_CONNECTION */
58335 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
58336 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
58337 }
58338#ifdef FREECIV_JSON_CONNECTION
58339 field_addr.name = "reqs";
58340#endif /* FREECIV_JSON_CONNECTION */
58341 if (real_packet->reqs_count > MAX_NUM_REQS) {
58342 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
58343 }
58344 {
58345 int i;
58346
58347#ifdef FREECIV_JSON_CONNECTION
58348 /* Enter array. */
58349 field_addr.sub_location = plocation_elem_new(0);
58350#endif /* FREECIV_JSON_CONNECTION */
58351
58352 for (i = 0; i < real_packet->reqs_count; i++) {
58353#ifdef FREECIV_JSON_CONNECTION
58354 field_addr.sub_location->number = i;
58355#endif /* FREECIV_JSON_CONNECTION */
58356
58357 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
58359 }
58360 }
58361
58362#ifdef FREECIV_JSON_CONNECTION
58363 /* Exit array. */
58364 FC_FREE(field_addr.sub_location);
58365#endif /* FREECIV_JSON_CONNECTION */
58366 }
58367#ifdef FREECIV_JSON_CONNECTION
58368 field_addr.name = "graphic";
58369#endif /* FREECIV_JSON_CONNECTION */
58370 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
58372 }
58373#ifdef FREECIV_JSON_CONNECTION
58374 field_addr.name = "graphic_alt";
58375#endif /* FREECIV_JSON_CONNECTION */
58376 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
58377 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
58378 }
58379#endif
58380 log_packet_detailed("packet_ruleset_city_100: got info about ()");
58381
58382#ifdef FREECIV_DELTA_PROTOCOL
58383 if (NULL == *hash) {
58385 NULL, NULL, NULL, free);
58386 }
58387
58388 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
58389 *real_packet = *old;
58390 } else {
58391 log_packet_detailed(" no old info");
58392 memset(real_packet, 0, sizeof(*real_packet));
58393 }
58394
58395 if (BV_ISSET(fields, 0)) {
58396 log_packet_detailed(" got field 'style_id'");
58397#ifdef FREECIV_JSON_CONNECTION
58398 field_addr.name = "style_id";
58399#endif /* FREECIV_JSON_CONNECTION */
58400 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->style_id)) {
58402 }
58403 }
58404 if (BV_ISSET(fields, 1)) {
58405 log_packet_detailed(" got field 'name'");
58406#ifdef FREECIV_JSON_CONNECTION
58407 field_addr.name = "name";
58408#endif /* FREECIV_JSON_CONNECTION */
58409 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
58411 }
58412 }
58413 if (BV_ISSET(fields, 2)) {
58414 log_packet_detailed(" got field 'rule_name'");
58415#ifdef FREECIV_JSON_CONNECTION
58416 field_addr.name = "rule_name";
58417#endif /* FREECIV_JSON_CONNECTION */
58418 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
58419 RECEIVE_PACKET_FIELD_ERROR(rule_name);
58420 }
58421 }
58422 if (BV_ISSET(fields, 3)) {
58423 log_packet_detailed(" got field 'citizens_graphic'");
58424#ifdef FREECIV_JSON_CONNECTION
58425 field_addr.name = "citizens_graphic";
58426#endif /* FREECIV_JSON_CONNECTION */
58427 if (!DIO_GET(string, &din, &field_addr, real_packet->citizens_graphic, sizeof(real_packet->citizens_graphic))) {
58428 RECEIVE_PACKET_FIELD_ERROR(citizens_graphic);
58429 }
58430 }
58431 if (BV_ISSET(fields, 4)) {
58432 log_packet_detailed(" got field 'reqs_count'");
58433#ifdef FREECIV_JSON_CONNECTION
58434 field_addr.name = "reqs_count";
58435#endif /* FREECIV_JSON_CONNECTION */
58436 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
58437 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
58438 }
58439 }
58440 if (BV_ISSET(fields, 5)) {
58441 log_packet_detailed(" got field 'reqs'");
58442#ifdef FREECIV_JSON_CONNECTION
58443 field_addr.name = "reqs";
58444#endif /* FREECIV_JSON_CONNECTION */
58445 if (real_packet->reqs_count > MAX_NUM_REQS) {
58446 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
58447 }
58448 {
58449 int i;
58450
58451#ifdef FREECIV_JSON_CONNECTION
58452 /* Enter array. */
58453 field_addr.sub_location = plocation_elem_new(0);
58454#endif /* FREECIV_JSON_CONNECTION */
58455
58456 for (i = 0; i < real_packet->reqs_count; i++) {
58457#ifdef FREECIV_JSON_CONNECTION
58458 field_addr.sub_location->number = i;
58459#endif /* FREECIV_JSON_CONNECTION */
58460
58461 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
58463 }
58464 }
58465
58466#ifdef FREECIV_JSON_CONNECTION
58467 /* Exit array. */
58468 FC_FREE(field_addr.sub_location);
58469#endif /* FREECIV_JSON_CONNECTION */
58470 }
58471 }
58472 if (BV_ISSET(fields, 6)) {
58473 log_packet_detailed(" got field 'graphic'");
58474#ifdef FREECIV_JSON_CONNECTION
58475 field_addr.name = "graphic";
58476#endif /* FREECIV_JSON_CONNECTION */
58477 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic, sizeof(real_packet->graphic))) {
58479 }
58480 }
58481 if (BV_ISSET(fields, 7)) {
58482 log_packet_detailed(" got field 'graphic_alt'");
58483#ifdef FREECIV_JSON_CONNECTION
58484 field_addr.name = "graphic_alt";
58485#endif /* FREECIV_JSON_CONNECTION */
58486 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
58487 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
58488 }
58489 }
58490
58491 if (NULL == old) {
58492 old = fc_malloc(sizeof(*old));
58493 *old = *real_packet;
58494 genhash_insert(*hash, old, old);
58495 } else {
58496 *old = *real_packet;
58497 }
58498
58499#endif /* FREECIV_DELTA_PROTOCOL */
58501}
58502
58503static int send_packet_ruleset_city_100(struct connection *pc, const struct packet_ruleset_city *packet)
58504{
58505 const struct packet_ruleset_city *real_packet = packet;
58506 int e;
58507#ifdef FREECIV_DELTA_PROTOCOL
58509 struct packet_ruleset_city *old;
58510 bool differ;
58511 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CITY;
58512#endif /* FREECIV_DELTA_PROTOCOL */
58514#ifdef FREECIV_JSON_CONNECTION
58515 struct plocation field_addr;
58516 {
58520 }
58521#endif /* FREECIV_JSON_CONNECTION */
58522
58523 log_packet_detailed("packet_ruleset_city_100: sending info about ()");
58524
58525#ifdef FREECIV_DELTA_PROTOCOL
58526 if (NULL == *hash) {
58528 NULL, NULL, NULL, free);
58529 }
58530 BV_CLR_ALL(fields);
58531
58532 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
58533 old = fc_malloc(sizeof(*old));
58534 *old = *real_packet;
58535 genhash_insert(*hash, old, old);
58536 memset(old, 0, sizeof(*old));
58537 }
58538 differ = (old->style_id != real_packet->style_id);
58539 if (differ) {
58540 BV_SET(fields, 0);
58541 }
58542
58543 differ = (strcmp(old->name, real_packet->name) != 0);
58544 if (differ) {
58545 BV_SET(fields, 1);
58546 }
58547
58548 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
58549 if (differ) {
58550 BV_SET(fields, 2);
58551 }
58552
58553 differ = (strcmp(old->citizens_graphic, real_packet->citizens_graphic) != 0);
58554 if (differ) {
58555 BV_SET(fields, 3);
58556 }
58557
58558 differ = (old->reqs_count != real_packet->reqs_count);
58559 if (differ) {
58560 BV_SET(fields, 4);
58561 }
58562
58563 differ = (old->reqs_count != real_packet->reqs_count);
58564 if (!differ) {
58565 int i;
58566
58567 for (i = 0; i < real_packet->reqs_count; i++) {
58568 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
58569 if (differ) {
58570 break;
58571 }
58572 }
58573 }
58574 if (differ) {
58575 BV_SET(fields, 5);
58576 }
58577
58578 differ = (strcmp(old->graphic, real_packet->graphic) != 0);
58579 if (differ) {
58580 BV_SET(fields, 6);
58581 }
58582
58583 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
58584 if (differ) {
58585 BV_SET(fields, 7);
58586 }
58587
58588
58589#ifdef FREECIV_JSON_CONNECTION
58590 field_addr.name = "fields";
58591#endif /* FREECIV_JSON_CONNECTION */
58592 e = 0;
58593 e |= DIO_BV_PUT(&dout, &field_addr, fields);
58594 if (e) {
58595 log_packet_detailed("fields bitvector error detected");
58596 }
58597
58598 if (BV_ISSET(fields, 0)) {
58599 log_packet_detailed(" field 'style_id' has changed");
58600#ifdef FREECIV_JSON_CONNECTION
58601 field_addr.name = "style_id";
58602#endif /* FREECIV_JSON_CONNECTION */
58603 e = 0;
58604 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
58605 if (e) {
58606 log_packet_detailed("'style_id' field error detected");
58607 }
58608 }
58609 if (BV_ISSET(fields, 1)) {
58610 log_packet_detailed(" field 'name' has changed");
58611#ifdef FREECIV_JSON_CONNECTION
58612 field_addr.name = "name";
58613#endif /* FREECIV_JSON_CONNECTION */
58614 e = 0;
58615 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
58616 if (e) {
58617 log_packet_detailed("'name' field error detected");
58618 }
58619 }
58620 if (BV_ISSET(fields, 2)) {
58621 log_packet_detailed(" field 'rule_name' has changed");
58622#ifdef FREECIV_JSON_CONNECTION
58623 field_addr.name = "rule_name";
58624#endif /* FREECIV_JSON_CONNECTION */
58625 e = 0;
58626 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
58627 if (e) {
58628 log_packet_detailed("'rule_name' field error detected");
58629 }
58630 }
58631 if (BV_ISSET(fields, 3)) {
58632 log_packet_detailed(" field 'citizens_graphic' has changed");
58633#ifdef FREECIV_JSON_CONNECTION
58634 field_addr.name = "citizens_graphic";
58635#endif /* FREECIV_JSON_CONNECTION */
58636 e = 0;
58637 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
58638 if (e) {
58639 log_packet_detailed("'citizens_graphic' field error detected");
58640 }
58641 }
58642 if (BV_ISSET(fields, 4)) {
58643 log_packet_detailed(" field 'reqs_count' has changed");
58644#ifdef FREECIV_JSON_CONNECTION
58645 field_addr.name = "reqs_count";
58646#endif /* FREECIV_JSON_CONNECTION */
58647 e = 0;
58648 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
58649 if (e) {
58650 log_packet_detailed("'reqs_count' field error detected");
58651 }
58652 }
58653 if (BV_ISSET(fields, 5)) {
58654 log_packet_detailed(" field 'reqs' has changed");
58655#ifdef FREECIV_JSON_CONNECTION
58656 field_addr.name = "reqs";
58657#endif /* FREECIV_JSON_CONNECTION */
58658 e = 0;
58659 {
58660 int i;
58661
58662#ifdef FREECIV_JSON_CONNECTION
58663 /* Create the array. */
58664 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
58665
58666 /* Enter the array. */
58667 field_addr.sub_location = plocation_elem_new(0);
58668#endif /* FREECIV_JSON_CONNECTION */
58669
58670 for (i = 0; i < real_packet->reqs_count; i++) {
58671#ifdef FREECIV_JSON_CONNECTION
58672 /* Next array element. */
58673 field_addr.sub_location->number = i;
58674#endif /* FREECIV_JSON_CONNECTION */
58675
58676 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
58677 }
58678
58679#ifdef FREECIV_JSON_CONNECTION
58680 /* Exit array. */
58681 FC_FREE(field_addr.sub_location);
58682#endif /* FREECIV_JSON_CONNECTION */
58683 }
58684 if (e) {
58685 log_packet_detailed("'reqs' field error detected");
58686 }
58687 }
58688 if (BV_ISSET(fields, 6)) {
58689 log_packet_detailed(" field 'graphic' has changed");
58690#ifdef FREECIV_JSON_CONNECTION
58691 field_addr.name = "graphic";
58692#endif /* FREECIV_JSON_CONNECTION */
58693 e = 0;
58694 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
58695 if (e) {
58696 log_packet_detailed("'graphic' field error detected");
58697 }
58698 }
58699 if (BV_ISSET(fields, 7)) {
58700 log_packet_detailed(" field 'graphic_alt' has changed");
58701#ifdef FREECIV_JSON_CONNECTION
58702 field_addr.name = "graphic_alt";
58703#endif /* FREECIV_JSON_CONNECTION */
58704 e = 0;
58705 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
58706 if (e) {
58707 log_packet_detailed("'graphic_alt' field error detected");
58708 }
58709 }
58710
58711 *old = *real_packet;
58712#endif /* FREECIV_DELTA_PROTOCOL */
58713#ifndef FREECIV_DELTA_PROTOCOL
58714#ifdef FREECIV_JSON_CONNECTION
58715 field_addr.name = "style_id";
58716#endif /* FREECIV_JSON_CONNECTION */
58717 e = 0;
58718 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->style_id);
58719 if (e) {
58720 log_packet_detailed("'style_id' field error detected");
58721 }
58722#ifdef FREECIV_JSON_CONNECTION
58723 field_addr.name = "name";
58724#endif /* FREECIV_JSON_CONNECTION */
58725 e = 0;
58726 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
58727 if (e) {
58728 log_packet_detailed("'name' field error detected");
58729 }
58730#ifdef FREECIV_JSON_CONNECTION
58731 field_addr.name = "rule_name";
58732#endif /* FREECIV_JSON_CONNECTION */
58733 e = 0;
58734 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
58735 if (e) {
58736 log_packet_detailed("'rule_name' field error detected");
58737 }
58738#ifdef FREECIV_JSON_CONNECTION
58739 field_addr.name = "citizens_graphic";
58740#endif /* FREECIV_JSON_CONNECTION */
58741 e = 0;
58742 e |= DIO_PUT(string, &dout, &field_addr, real_packet->citizens_graphic);
58743 if (e) {
58744 log_packet_detailed("'citizens_graphic' field error detected");
58745 }
58746#ifdef FREECIV_JSON_CONNECTION
58747 field_addr.name = "reqs_count";
58748#endif /* FREECIV_JSON_CONNECTION */
58749 e = 0;
58750 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
58751 if (e) {
58752 log_packet_detailed("'reqs_count' field error detected");
58753 }
58754#ifdef FREECIV_JSON_CONNECTION
58755 field_addr.name = "reqs";
58756#endif /* FREECIV_JSON_CONNECTION */
58757 e = 0;
58758 {
58759 int i;
58760
58761#ifdef FREECIV_JSON_CONNECTION
58762 /* Create the array. */
58763 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
58764
58765 /* Enter the array. */
58766 field_addr.sub_location = plocation_elem_new(0);
58767#endif /* FREECIV_JSON_CONNECTION */
58768
58769 for (i = 0; i < real_packet->reqs_count; i++) {
58770#ifdef FREECIV_JSON_CONNECTION
58771 /* Next array element. */
58772 field_addr.sub_location->number = i;
58773#endif /* FREECIV_JSON_CONNECTION */
58774
58775 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
58776 }
58777
58778#ifdef FREECIV_JSON_CONNECTION
58779 /* Exit array. */
58780 FC_FREE(field_addr.sub_location);
58781#endif /* FREECIV_JSON_CONNECTION */
58782 }
58783 if (e) {
58784 log_packet_detailed("'reqs' field error detected");
58785 }
58786#ifdef FREECIV_JSON_CONNECTION
58787 field_addr.name = "graphic";
58788#endif /* FREECIV_JSON_CONNECTION */
58789 e = 0;
58790 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic);
58791 if (e) {
58792 log_packet_detailed("'graphic' field error detected");
58793 }
58794#ifdef FREECIV_JSON_CONNECTION
58795 field_addr.name = "graphic_alt";
58796#endif /* FREECIV_JSON_CONNECTION */
58797 e = 0;
58798 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
58799 if (e) {
58800 log_packet_detailed("'graphic_alt' field error detected");
58801 }
58802
58803#endif
58805}
58806
58808{
58809 if (!pc->used) {
58810 log_error("WARNING: trying to send data to the closed connection %s",
58812 return -1;
58813 }
58814 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CITY].packet != NULL, -1,
58815 "Handler for PACKET_RULESET_CITY not installed");
58816 return pc->phs.handlers->send[PACKET_RULESET_CITY].packet(pc, packet);
58817}
58818
58819void lsend_packet_ruleset_city(struct conn_list *dest, const struct packet_ruleset_city *packet)
58820{
58821 conn_list_iterate(dest, pconn) {
58824}
58825
58826#ifdef FREECIV_DELTA_PROTOCOL
58827#define hash_packet_ruleset_building_100 hash_const
58828
58829#define cmp_packet_ruleset_building_100 cmp_const
58830
58832#endif /* FREECIV_DELTA_PROTOCOL */
58833
58835{
58836#ifdef FREECIV_DELTA_PROTOCOL
58838 struct packet_ruleset_building *old;
58839 struct genhash **hash = pc->phs.received + PACKET_RULESET_BUILDING;
58840#endif /* FREECIV_DELTA_PROTOCOL */
58842#ifdef FREECIV_JSON_CONNECTION
58843 struct plocation field_addr;
58844 {
58848 }
58849#endif /* FREECIV_JSON_CONNECTION */
58850
58851#ifdef FREECIV_DELTA_PROTOCOL
58852#ifdef FREECIV_JSON_CONNECTION
58853 field_addr.name = "fields";
58854#endif /* FREECIV_JSON_CONNECTION */
58855 DIO_BV_GET(&din, &field_addr, fields);
58856
58857#else /* FREECIV_DELTA_PROTOCOL */
58858#ifdef FREECIV_JSON_CONNECTION
58859 field_addr.name = "id";
58860#endif /* FREECIV_JSON_CONNECTION */
58861 {
58862 int readin;
58863
58864 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
58866 }
58867 real_packet->id = readin;
58868 }
58869#ifdef FREECIV_JSON_CONNECTION
58870 field_addr.name = "genus";
58871#endif /* FREECIV_JSON_CONNECTION */
58872 {
58873 int readin;
58874
58875 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
58877 }
58878 real_packet->genus = readin;
58879 }
58880#ifdef FREECIV_JSON_CONNECTION
58881 field_addr.name = "name";
58882#endif /* FREECIV_JSON_CONNECTION */
58883 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
58885 }
58886#ifdef FREECIV_JSON_CONNECTION
58887 field_addr.name = "rule_name";
58888#endif /* FREECIV_JSON_CONNECTION */
58889 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
58890 RECEIVE_PACKET_FIELD_ERROR(rule_name);
58891 }
58892#ifdef FREECIV_JSON_CONNECTION
58893 field_addr.name = "graphic_str";
58894#endif /* FREECIV_JSON_CONNECTION */
58895 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
58896 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
58897 }
58898#ifdef FREECIV_JSON_CONNECTION
58899 field_addr.name = "graphic_alt";
58900#endif /* FREECIV_JSON_CONNECTION */
58901 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
58902 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
58903 }
58904#ifdef FREECIV_JSON_CONNECTION
58905 field_addr.name = "graphic_alt2";
58906#endif /* FREECIV_JSON_CONNECTION */
58907 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
58908 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
58909 }
58910#ifdef FREECIV_JSON_CONNECTION
58911 field_addr.name = "reqs_count";
58912#endif /* FREECIV_JSON_CONNECTION */
58913 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
58914 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
58915 }
58916#ifdef FREECIV_JSON_CONNECTION
58917 field_addr.name = "reqs";
58918#endif /* FREECIV_JSON_CONNECTION */
58919 if (real_packet->reqs_count > MAX_NUM_REQS) {
58920 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
58921 }
58922 {
58923 int i;
58924
58925#ifdef FREECIV_JSON_CONNECTION
58926 /* Enter array. */
58927 field_addr.sub_location = plocation_elem_new(0);
58928#endif /* FREECIV_JSON_CONNECTION */
58929
58930 for (i = 0; i < real_packet->reqs_count; i++) {
58931#ifdef FREECIV_JSON_CONNECTION
58932 field_addr.sub_location->number = i;
58933#endif /* FREECIV_JSON_CONNECTION */
58934
58935 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
58937 }
58938 }
58939
58940#ifdef FREECIV_JSON_CONNECTION
58941 /* Exit array. */
58942 FC_FREE(field_addr.sub_location);
58943#endif /* FREECIV_JSON_CONNECTION */
58944 }
58945#ifdef FREECIV_JSON_CONNECTION
58946 field_addr.name = "obs_count";
58947#endif /* FREECIV_JSON_CONNECTION */
58948 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obs_count)) {
58949 RECEIVE_PACKET_FIELD_ERROR(obs_count);
58950 }
58951#ifdef FREECIV_JSON_CONNECTION
58952 field_addr.name = "obs_reqs";
58953#endif /* FREECIV_JSON_CONNECTION */
58954 if (real_packet->obs_count > MAX_NUM_REQS) {
58955 RECEIVE_PACKET_FIELD_ERROR(obs_reqs, ": truncation array");
58956 }
58957 {
58958 int i;
58959
58960#ifdef FREECIV_JSON_CONNECTION
58961 /* Enter array. */
58962 field_addr.sub_location = plocation_elem_new(0);
58963#endif /* FREECIV_JSON_CONNECTION */
58964
58965 for (i = 0; i < real_packet->obs_count; i++) {
58966#ifdef FREECIV_JSON_CONNECTION
58967 field_addr.sub_location->number = i;
58968#endif /* FREECIV_JSON_CONNECTION */
58969
58970 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs[i])) {
58972 }
58973 }
58974
58975#ifdef FREECIV_JSON_CONNECTION
58976 /* Exit array. */
58977 FC_FREE(field_addr.sub_location);
58978#endif /* FREECIV_JSON_CONNECTION */
58979 }
58980#ifdef FREECIV_JSON_CONNECTION
58981 field_addr.name = "build_cost";
58982#endif /* FREECIV_JSON_CONNECTION */
58983 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
58984 RECEIVE_PACKET_FIELD_ERROR(build_cost);
58985 }
58986#ifdef FREECIV_JSON_CONNECTION
58987 field_addr.name = "upkeep";
58988#endif /* FREECIV_JSON_CONNECTION */
58989 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
58991 }
58992#ifdef FREECIV_JSON_CONNECTION
58993 field_addr.name = "sabotage";
58994#endif /* FREECIV_JSON_CONNECTION */
58995 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
58997 }
58998#ifdef FREECIV_JSON_CONNECTION
58999 field_addr.name = "flags";
59000#endif /* FREECIV_JSON_CONNECTION */
59001 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
59003 }
59004#ifdef FREECIV_JSON_CONNECTION
59005 field_addr.name = "soundtag";
59006#endif /* FREECIV_JSON_CONNECTION */
59007 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
59009 }
59010#ifdef FREECIV_JSON_CONNECTION
59011 field_addr.name = "soundtag_alt";
59012#endif /* FREECIV_JSON_CONNECTION */
59013 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
59014 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
59015 }
59016#ifdef FREECIV_JSON_CONNECTION
59017 field_addr.name = "soundtag_alt2";
59018#endif /* FREECIV_JSON_CONNECTION */
59019 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
59020 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
59021 }
59022#ifdef FREECIV_JSON_CONNECTION
59023 field_addr.name = "helptext";
59024#endif /* FREECIV_JSON_CONNECTION */
59025 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
59027 }
59028#endif
59029 log_packet_detailed("packet_ruleset_building_100: got info about ()");
59030
59031#ifdef FREECIV_DELTA_PROTOCOL
59032 if (NULL == *hash) {
59034 NULL, NULL, NULL, free);
59035 }
59036
59037 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
59038 *real_packet = *old;
59039 } else {
59040 log_packet_detailed(" no old info");
59041 memset(real_packet, 0, sizeof(*real_packet));
59042 }
59043
59044 if (BV_ISSET(fields, 0)) {
59045 log_packet_detailed(" got field 'id'");
59046#ifdef FREECIV_JSON_CONNECTION
59047 field_addr.name = "id";
59048#endif /* FREECIV_JSON_CONNECTION */
59049 {
59050 int readin;
59051
59052 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
59054 }
59055 real_packet->id = readin;
59056 }
59057 }
59058 if (BV_ISSET(fields, 1)) {
59059 log_packet_detailed(" got field 'genus'");
59060#ifdef FREECIV_JSON_CONNECTION
59061 field_addr.name = "genus";
59062#endif /* FREECIV_JSON_CONNECTION */
59063 {
59064 int readin;
59065
59066 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
59068 }
59069 real_packet->genus = readin;
59070 }
59071 }
59072 if (BV_ISSET(fields, 2)) {
59073 log_packet_detailed(" got field 'name'");
59074#ifdef FREECIV_JSON_CONNECTION
59075 field_addr.name = "name";
59076#endif /* FREECIV_JSON_CONNECTION */
59077 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
59079 }
59080 }
59081 if (BV_ISSET(fields, 3)) {
59082 log_packet_detailed(" got field 'rule_name'");
59083#ifdef FREECIV_JSON_CONNECTION
59084 field_addr.name = "rule_name";
59085#endif /* FREECIV_JSON_CONNECTION */
59086 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
59087 RECEIVE_PACKET_FIELD_ERROR(rule_name);
59088 }
59089 }
59090 if (BV_ISSET(fields, 4)) {
59091 log_packet_detailed(" got field 'graphic_str'");
59092#ifdef FREECIV_JSON_CONNECTION
59093 field_addr.name = "graphic_str";
59094#endif /* FREECIV_JSON_CONNECTION */
59095 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
59096 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
59097 }
59098 }
59099 if (BV_ISSET(fields, 5)) {
59100 log_packet_detailed(" got field 'graphic_alt'");
59101#ifdef FREECIV_JSON_CONNECTION
59102 field_addr.name = "graphic_alt";
59103#endif /* FREECIV_JSON_CONNECTION */
59104 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
59105 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
59106 }
59107 }
59108 if (BV_ISSET(fields, 6)) {
59109 log_packet_detailed(" got field 'graphic_alt2'");
59110#ifdef FREECIV_JSON_CONNECTION
59111 field_addr.name = "graphic_alt2";
59112#endif /* FREECIV_JSON_CONNECTION */
59113 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
59114 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
59115 }
59116 }
59117 if (BV_ISSET(fields, 7)) {
59118 log_packet_detailed(" got field 'reqs_count'");
59119#ifdef FREECIV_JSON_CONNECTION
59120 field_addr.name = "reqs_count";
59121#endif /* FREECIV_JSON_CONNECTION */
59122 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
59123 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
59124 }
59125 }
59126 if (BV_ISSET(fields, 8)) {
59127 log_packet_detailed(" got field 'reqs'");
59128#ifdef FREECIV_JSON_CONNECTION
59129 field_addr.name = "reqs";
59130#endif /* FREECIV_JSON_CONNECTION */
59131 if (real_packet->reqs_count > MAX_NUM_REQS) {
59132 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
59133 }
59134 {
59135 int i;
59136
59137#ifdef FREECIV_JSON_CONNECTION
59138 /* Enter array. */
59139 field_addr.sub_location = plocation_elem_new(0);
59140#endif /* FREECIV_JSON_CONNECTION */
59141
59142 for (i = 0; i < real_packet->reqs_count; i++) {
59143#ifdef FREECIV_JSON_CONNECTION
59144 field_addr.sub_location->number = i;
59145#endif /* FREECIV_JSON_CONNECTION */
59146
59147 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
59149 }
59150 }
59151
59152#ifdef FREECIV_JSON_CONNECTION
59153 /* Exit array. */
59154 FC_FREE(field_addr.sub_location);
59155#endif /* FREECIV_JSON_CONNECTION */
59156 }
59157 }
59158 if (BV_ISSET(fields, 9)) {
59159 log_packet_detailed(" got field 'obs_count'");
59160#ifdef FREECIV_JSON_CONNECTION
59161 field_addr.name = "obs_count";
59162#endif /* FREECIV_JSON_CONNECTION */
59163 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->obs_count)) {
59164 RECEIVE_PACKET_FIELD_ERROR(obs_count);
59165 }
59166 }
59167 if (BV_ISSET(fields, 10)) {
59168 log_packet_detailed(" got field 'obs_reqs'");
59169#ifdef FREECIV_JSON_CONNECTION
59170 field_addr.name = "obs_reqs";
59171#endif /* FREECIV_JSON_CONNECTION */
59172 if (real_packet->obs_count > MAX_NUM_REQS) {
59173 RECEIVE_PACKET_FIELD_ERROR(obs_reqs, ": truncation array");
59174 }
59175 {
59176 int i;
59177
59178#ifdef FREECIV_JSON_CONNECTION
59179 /* Enter array. */
59180 field_addr.sub_location = plocation_elem_new(0);
59181#endif /* FREECIV_JSON_CONNECTION */
59182
59183 for (i = 0; i < real_packet->obs_count; i++) {
59184#ifdef FREECIV_JSON_CONNECTION
59185 field_addr.sub_location->number = i;
59186#endif /* FREECIV_JSON_CONNECTION */
59187
59188 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->obs_reqs[i])) {
59190 }
59191 }
59192
59193#ifdef FREECIV_JSON_CONNECTION
59194 /* Exit array. */
59195 FC_FREE(field_addr.sub_location);
59196#endif /* FREECIV_JSON_CONNECTION */
59197 }
59198 }
59199 if (BV_ISSET(fields, 11)) {
59200 log_packet_detailed(" got field 'build_cost'");
59201#ifdef FREECIV_JSON_CONNECTION
59202 field_addr.name = "build_cost";
59203#endif /* FREECIV_JSON_CONNECTION */
59204 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->build_cost)) {
59205 RECEIVE_PACKET_FIELD_ERROR(build_cost);
59206 }
59207 }
59208 if (BV_ISSET(fields, 12)) {
59209 log_packet_detailed(" got field 'upkeep'");
59210#ifdef FREECIV_JSON_CONNECTION
59211 field_addr.name = "upkeep";
59212#endif /* FREECIV_JSON_CONNECTION */
59213 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->upkeep)) {
59215 }
59216 }
59217 if (BV_ISSET(fields, 13)) {
59218 log_packet_detailed(" got field 'sabotage'");
59219#ifdef FREECIV_JSON_CONNECTION
59220 field_addr.name = "sabotage";
59221#endif /* FREECIV_JSON_CONNECTION */
59222 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->sabotage)) {
59224 }
59225 }
59226 if (BV_ISSET(fields, 14)) {
59227 log_packet_detailed(" got field 'flags'");
59228#ifdef FREECIV_JSON_CONNECTION
59229 field_addr.name = "flags";
59230#endif /* FREECIV_JSON_CONNECTION */
59231 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
59233 }
59234 }
59235 if (BV_ISSET(fields, 15)) {
59236 log_packet_detailed(" got field 'soundtag'");
59237#ifdef FREECIV_JSON_CONNECTION
59238 field_addr.name = "soundtag";
59239#endif /* FREECIV_JSON_CONNECTION */
59240 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag, sizeof(real_packet->soundtag))) {
59242 }
59243 }
59244 if (BV_ISSET(fields, 16)) {
59245 log_packet_detailed(" got field 'soundtag_alt'");
59246#ifdef FREECIV_JSON_CONNECTION
59247 field_addr.name = "soundtag_alt";
59248#endif /* FREECIV_JSON_CONNECTION */
59249 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt, sizeof(real_packet->soundtag_alt))) {
59250 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt);
59251 }
59252 }
59253 if (BV_ISSET(fields, 17)) {
59254 log_packet_detailed(" got field 'soundtag_alt2'");
59255#ifdef FREECIV_JSON_CONNECTION
59256 field_addr.name = "soundtag_alt2";
59257#endif /* FREECIV_JSON_CONNECTION */
59258 if (!DIO_GET(string, &din, &field_addr, real_packet->soundtag_alt2, sizeof(real_packet->soundtag_alt2))) {
59259 RECEIVE_PACKET_FIELD_ERROR(soundtag_alt2);
59260 }
59261 }
59262 if (BV_ISSET(fields, 18)) {
59263 log_packet_detailed(" got field 'helptext'");
59264#ifdef FREECIV_JSON_CONNECTION
59265 field_addr.name = "helptext";
59266#endif /* FREECIV_JSON_CONNECTION */
59267 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
59269 }
59270 }
59271
59272 if (NULL == old) {
59273 old = fc_malloc(sizeof(*old));
59274 *old = *real_packet;
59275 genhash_insert(*hash, old, old);
59276 } else {
59277 *old = *real_packet;
59278 }
59279
59280#endif /* FREECIV_DELTA_PROTOCOL */
59282}
59283
59285{
59286 const struct packet_ruleset_building *real_packet = packet;
59287 int e;
59288#ifdef FREECIV_DELTA_PROTOCOL
59290 struct packet_ruleset_building *old;
59291 bool differ;
59292 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BUILDING;
59293#endif /* FREECIV_DELTA_PROTOCOL */
59295#ifdef FREECIV_JSON_CONNECTION
59296 struct plocation field_addr;
59297 {
59301 }
59302#endif /* FREECIV_JSON_CONNECTION */
59303
59304 log_packet_detailed("packet_ruleset_building_100: sending info about ()");
59305
59306#ifdef FREECIV_DELTA_PROTOCOL
59307 if (NULL == *hash) {
59309 NULL, NULL, NULL, free);
59310 }
59311 BV_CLR_ALL(fields);
59312
59313 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
59314 old = fc_malloc(sizeof(*old));
59315 *old = *real_packet;
59316 genhash_insert(*hash, old, old);
59317 memset(old, 0, sizeof(*old));
59318 }
59319 differ = (old->id != real_packet->id);
59320 if (differ) {
59321 BV_SET(fields, 0);
59322 }
59323
59324 differ = (old->genus != real_packet->genus);
59325 if (differ) {
59326 BV_SET(fields, 1);
59327 }
59328
59329 differ = (strcmp(old->name, real_packet->name) != 0);
59330 if (differ) {
59331 BV_SET(fields, 2);
59332 }
59333
59334 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
59335 if (differ) {
59336 BV_SET(fields, 3);
59337 }
59338
59339 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
59340 if (differ) {
59341 BV_SET(fields, 4);
59342 }
59343
59344 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
59345 if (differ) {
59346 BV_SET(fields, 5);
59347 }
59348
59349 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
59350 if (differ) {
59351 BV_SET(fields, 6);
59352 }
59353
59354 differ = (old->reqs_count != real_packet->reqs_count);
59355 if (differ) {
59356 BV_SET(fields, 7);
59357 }
59358
59359 differ = (old->reqs_count != real_packet->reqs_count);
59360 if (!differ) {
59361 int i;
59362
59363 for (i = 0; i < real_packet->reqs_count; i++) {
59364 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
59365 if (differ) {
59366 break;
59367 }
59368 }
59369 }
59370 if (differ) {
59371 BV_SET(fields, 8);
59372 }
59373
59374 differ = (old->obs_count != real_packet->obs_count);
59375 if (differ) {
59376 BV_SET(fields, 9);
59377 }
59378
59379 differ = (old->obs_count != real_packet->obs_count);
59380 if (!differ) {
59381 int i;
59382
59383 for (i = 0; i < real_packet->obs_count; i++) {
59384 differ = !are_requirements_equal(&old->obs_reqs[i], &real_packet->obs_reqs[i]);
59385 if (differ) {
59386 break;
59387 }
59388 }
59389 }
59390 if (differ) {
59391 BV_SET(fields, 10);
59392 }
59393
59394 differ = (old->build_cost != real_packet->build_cost);
59395 if (differ) {
59396 BV_SET(fields, 11);
59397 }
59398
59399 differ = (old->upkeep != real_packet->upkeep);
59400 if (differ) {
59401 BV_SET(fields, 12);
59402 }
59403
59404 differ = (old->sabotage != real_packet->sabotage);
59405 if (differ) {
59406 BV_SET(fields, 13);
59407 }
59408
59409 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
59410 if (differ) {
59411 BV_SET(fields, 14);
59412 }
59413
59414 differ = (strcmp(old->soundtag, real_packet->soundtag) != 0);
59415 if (differ) {
59416 BV_SET(fields, 15);
59417 }
59418
59419 differ = (strcmp(old->soundtag_alt, real_packet->soundtag_alt) != 0);
59420 if (differ) {
59421 BV_SET(fields, 16);
59422 }
59423
59424 differ = (strcmp(old->soundtag_alt2, real_packet->soundtag_alt2) != 0);
59425 if (differ) {
59426 BV_SET(fields, 17);
59427 }
59428
59429 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
59430 if (differ) {
59431 BV_SET(fields, 18);
59432 }
59433
59434
59435#ifdef FREECIV_JSON_CONNECTION
59436 field_addr.name = "fields";
59437#endif /* FREECIV_JSON_CONNECTION */
59438 e = 0;
59439 e |= DIO_BV_PUT(&dout, &field_addr, fields);
59440 if (e) {
59441 log_packet_detailed("fields bitvector error detected");
59442 }
59443
59444 if (BV_ISSET(fields, 0)) {
59445 log_packet_detailed(" field 'id' has changed");
59446#ifdef FREECIV_JSON_CONNECTION
59447 field_addr.name = "id";
59448#endif /* FREECIV_JSON_CONNECTION */
59449 e = 0;
59450 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
59451 if (e) {
59452 log_packet_detailed("'id' field error detected");
59453 }
59454 }
59455 if (BV_ISSET(fields, 1)) {
59456 log_packet_detailed(" field 'genus' has changed");
59457#ifdef FREECIV_JSON_CONNECTION
59458 field_addr.name = "genus";
59459#endif /* FREECIV_JSON_CONNECTION */
59460 e = 0;
59461 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
59462 if (e) {
59463 log_packet_detailed("'genus' field error detected");
59464 }
59465 }
59466 if (BV_ISSET(fields, 2)) {
59467 log_packet_detailed(" field 'name' has changed");
59468#ifdef FREECIV_JSON_CONNECTION
59469 field_addr.name = "name";
59470#endif /* FREECIV_JSON_CONNECTION */
59471 e = 0;
59472 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
59473 if (e) {
59474 log_packet_detailed("'name' field error detected");
59475 }
59476 }
59477 if (BV_ISSET(fields, 3)) {
59478 log_packet_detailed(" field 'rule_name' has changed");
59479#ifdef FREECIV_JSON_CONNECTION
59480 field_addr.name = "rule_name";
59481#endif /* FREECIV_JSON_CONNECTION */
59482 e = 0;
59483 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
59484 if (e) {
59485 log_packet_detailed("'rule_name' field error detected");
59486 }
59487 }
59488 if (BV_ISSET(fields, 4)) {
59489 log_packet_detailed(" field 'graphic_str' has changed");
59490#ifdef FREECIV_JSON_CONNECTION
59491 field_addr.name = "graphic_str";
59492#endif /* FREECIV_JSON_CONNECTION */
59493 e = 0;
59494 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
59495 if (e) {
59496 log_packet_detailed("'graphic_str' field error detected");
59497 }
59498 }
59499 if (BV_ISSET(fields, 5)) {
59500 log_packet_detailed(" field 'graphic_alt' has changed");
59501#ifdef FREECIV_JSON_CONNECTION
59502 field_addr.name = "graphic_alt";
59503#endif /* FREECIV_JSON_CONNECTION */
59504 e = 0;
59505 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
59506 if (e) {
59507 log_packet_detailed("'graphic_alt' field error detected");
59508 }
59509 }
59510 if (BV_ISSET(fields, 6)) {
59511 log_packet_detailed(" field 'graphic_alt2' has changed");
59512#ifdef FREECIV_JSON_CONNECTION
59513 field_addr.name = "graphic_alt2";
59514#endif /* FREECIV_JSON_CONNECTION */
59515 e = 0;
59516 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
59517 if (e) {
59518 log_packet_detailed("'graphic_alt2' field error detected");
59519 }
59520 }
59521 if (BV_ISSET(fields, 7)) {
59522 log_packet_detailed(" field 'reqs_count' has changed");
59523#ifdef FREECIV_JSON_CONNECTION
59524 field_addr.name = "reqs_count";
59525#endif /* FREECIV_JSON_CONNECTION */
59526 e = 0;
59527 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
59528 if (e) {
59529 log_packet_detailed("'reqs_count' field error detected");
59530 }
59531 }
59532 if (BV_ISSET(fields, 8)) {
59533 log_packet_detailed(" field 'reqs' has changed");
59534#ifdef FREECIV_JSON_CONNECTION
59535 field_addr.name = "reqs";
59536#endif /* FREECIV_JSON_CONNECTION */
59537 e = 0;
59538 {
59539 int i;
59540
59541#ifdef FREECIV_JSON_CONNECTION
59542 /* Create the array. */
59543 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
59544
59545 /* Enter the array. */
59546 field_addr.sub_location = plocation_elem_new(0);
59547#endif /* FREECIV_JSON_CONNECTION */
59548
59549 for (i = 0; i < real_packet->reqs_count; i++) {
59550#ifdef FREECIV_JSON_CONNECTION
59551 /* Next array element. */
59552 field_addr.sub_location->number = i;
59553#endif /* FREECIV_JSON_CONNECTION */
59554
59555 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
59556 }
59557
59558#ifdef FREECIV_JSON_CONNECTION
59559 /* Exit array. */
59560 FC_FREE(field_addr.sub_location);
59561#endif /* FREECIV_JSON_CONNECTION */
59562 }
59563 if (e) {
59564 log_packet_detailed("'reqs' field error detected");
59565 }
59566 }
59567 if (BV_ISSET(fields, 9)) {
59568 log_packet_detailed(" field 'obs_count' has changed");
59569#ifdef FREECIV_JSON_CONNECTION
59570 field_addr.name = "obs_count";
59571#endif /* FREECIV_JSON_CONNECTION */
59572 e = 0;
59573 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obs_count);
59574 if (e) {
59575 log_packet_detailed("'obs_count' field error detected");
59576 }
59577 }
59578 if (BV_ISSET(fields, 10)) {
59579 log_packet_detailed(" field 'obs_reqs' has changed");
59580#ifdef FREECIV_JSON_CONNECTION
59581 field_addr.name = "obs_reqs";
59582#endif /* FREECIV_JSON_CONNECTION */
59583 e = 0;
59584 {
59585 int i;
59586
59587#ifdef FREECIV_JSON_CONNECTION
59588 /* Create the array. */
59589 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->obs_count);
59590
59591 /* Enter the array. */
59592 field_addr.sub_location = plocation_elem_new(0);
59593#endif /* FREECIV_JSON_CONNECTION */
59594
59595 for (i = 0; i < real_packet->obs_count; i++) {
59596#ifdef FREECIV_JSON_CONNECTION
59597 /* Next array element. */
59598 field_addr.sub_location->number = i;
59599#endif /* FREECIV_JSON_CONNECTION */
59600
59601 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs[i]);
59602 }
59603
59604#ifdef FREECIV_JSON_CONNECTION
59605 /* Exit array. */
59606 FC_FREE(field_addr.sub_location);
59607#endif /* FREECIV_JSON_CONNECTION */
59608 }
59609 if (e) {
59610 log_packet_detailed("'obs_reqs' field error detected");
59611 }
59612 }
59613 if (BV_ISSET(fields, 11)) {
59614 log_packet_detailed(" field 'build_cost' has changed");
59615#ifdef FREECIV_JSON_CONNECTION
59616 field_addr.name = "build_cost";
59617#endif /* FREECIV_JSON_CONNECTION */
59618 e = 0;
59619 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
59620 if (e) {
59621 log_packet_detailed("'build_cost' field error detected");
59622 }
59623 }
59624 if (BV_ISSET(fields, 12)) {
59625 log_packet_detailed(" field 'upkeep' has changed");
59626#ifdef FREECIV_JSON_CONNECTION
59627 field_addr.name = "upkeep";
59628#endif /* FREECIV_JSON_CONNECTION */
59629 e = 0;
59630 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
59631 if (e) {
59632 log_packet_detailed("'upkeep' field error detected");
59633 }
59634 }
59635 if (BV_ISSET(fields, 13)) {
59636 log_packet_detailed(" field 'sabotage' has changed");
59637#ifdef FREECIV_JSON_CONNECTION
59638 field_addr.name = "sabotage";
59639#endif /* FREECIV_JSON_CONNECTION */
59640 e = 0;
59641 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
59642 if (e) {
59643 log_packet_detailed("'sabotage' field error detected");
59644 }
59645 }
59646 if (BV_ISSET(fields, 14)) {
59647 log_packet_detailed(" field 'flags' has changed");
59648#ifdef FREECIV_JSON_CONNECTION
59649 field_addr.name = "flags";
59650#endif /* FREECIV_JSON_CONNECTION */
59651 e = 0;
59652 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
59653 if (e) {
59654 log_packet_detailed("'flags' field error detected");
59655 }
59656 }
59657 if (BV_ISSET(fields, 15)) {
59658 log_packet_detailed(" field 'soundtag' has changed");
59659#ifdef FREECIV_JSON_CONNECTION
59660 field_addr.name = "soundtag";
59661#endif /* FREECIV_JSON_CONNECTION */
59662 e = 0;
59663 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
59664 if (e) {
59665 log_packet_detailed("'soundtag' field error detected");
59666 }
59667 }
59668 if (BV_ISSET(fields, 16)) {
59669 log_packet_detailed(" field 'soundtag_alt' has changed");
59670#ifdef FREECIV_JSON_CONNECTION
59671 field_addr.name = "soundtag_alt";
59672#endif /* FREECIV_JSON_CONNECTION */
59673 e = 0;
59674 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
59675 if (e) {
59676 log_packet_detailed("'soundtag_alt' field error detected");
59677 }
59678 }
59679 if (BV_ISSET(fields, 17)) {
59680 log_packet_detailed(" field 'soundtag_alt2' has changed");
59681#ifdef FREECIV_JSON_CONNECTION
59682 field_addr.name = "soundtag_alt2";
59683#endif /* FREECIV_JSON_CONNECTION */
59684 e = 0;
59685 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
59686 if (e) {
59687 log_packet_detailed("'soundtag_alt2' field error detected");
59688 }
59689 }
59690 if (BV_ISSET(fields, 18)) {
59691 log_packet_detailed(" field 'helptext' has changed");
59692#ifdef FREECIV_JSON_CONNECTION
59693 field_addr.name = "helptext";
59694#endif /* FREECIV_JSON_CONNECTION */
59695 e = 0;
59696 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
59697 if (e) {
59698 log_packet_detailed("'helptext' field error detected");
59699 }
59700 }
59701
59702 *old = *real_packet;
59703#endif /* FREECIV_DELTA_PROTOCOL */
59704#ifndef FREECIV_DELTA_PROTOCOL
59705#ifdef FREECIV_JSON_CONNECTION
59706 field_addr.name = "id";
59707#endif /* FREECIV_JSON_CONNECTION */
59708 e = 0;
59709 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
59710 if (e) {
59711 log_packet_detailed("'id' field error detected");
59712 }
59713#ifdef FREECIV_JSON_CONNECTION
59714 field_addr.name = "genus";
59715#endif /* FREECIV_JSON_CONNECTION */
59716 e = 0;
59717 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->genus);
59718 if (e) {
59719 log_packet_detailed("'genus' field error detected");
59720 }
59721#ifdef FREECIV_JSON_CONNECTION
59722 field_addr.name = "name";
59723#endif /* FREECIV_JSON_CONNECTION */
59724 e = 0;
59725 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
59726 if (e) {
59727 log_packet_detailed("'name' field error detected");
59728 }
59729#ifdef FREECIV_JSON_CONNECTION
59730 field_addr.name = "rule_name";
59731#endif /* FREECIV_JSON_CONNECTION */
59732 e = 0;
59733 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
59734 if (e) {
59735 log_packet_detailed("'rule_name' field error detected");
59736 }
59737#ifdef FREECIV_JSON_CONNECTION
59738 field_addr.name = "graphic_str";
59739#endif /* FREECIV_JSON_CONNECTION */
59740 e = 0;
59741 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
59742 if (e) {
59743 log_packet_detailed("'graphic_str' field error detected");
59744 }
59745#ifdef FREECIV_JSON_CONNECTION
59746 field_addr.name = "graphic_alt";
59747#endif /* FREECIV_JSON_CONNECTION */
59748 e = 0;
59749 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
59750 if (e) {
59751 log_packet_detailed("'graphic_alt' field error detected");
59752 }
59753#ifdef FREECIV_JSON_CONNECTION
59754 field_addr.name = "graphic_alt2";
59755#endif /* FREECIV_JSON_CONNECTION */
59756 e = 0;
59757 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
59758 if (e) {
59759 log_packet_detailed("'graphic_alt2' field error detected");
59760 }
59761#ifdef FREECIV_JSON_CONNECTION
59762 field_addr.name = "reqs_count";
59763#endif /* FREECIV_JSON_CONNECTION */
59764 e = 0;
59765 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
59766 if (e) {
59767 log_packet_detailed("'reqs_count' field error detected");
59768 }
59769#ifdef FREECIV_JSON_CONNECTION
59770 field_addr.name = "reqs";
59771#endif /* FREECIV_JSON_CONNECTION */
59772 e = 0;
59773 {
59774 int i;
59775
59776#ifdef FREECIV_JSON_CONNECTION
59777 /* Create the array. */
59778 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
59779
59780 /* Enter the array. */
59781 field_addr.sub_location = plocation_elem_new(0);
59782#endif /* FREECIV_JSON_CONNECTION */
59783
59784 for (i = 0; i < real_packet->reqs_count; i++) {
59785#ifdef FREECIV_JSON_CONNECTION
59786 /* Next array element. */
59787 field_addr.sub_location->number = i;
59788#endif /* FREECIV_JSON_CONNECTION */
59789
59790 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
59791 }
59792
59793#ifdef FREECIV_JSON_CONNECTION
59794 /* Exit array. */
59795 FC_FREE(field_addr.sub_location);
59796#endif /* FREECIV_JSON_CONNECTION */
59797 }
59798 if (e) {
59799 log_packet_detailed("'reqs' field error detected");
59800 }
59801#ifdef FREECIV_JSON_CONNECTION
59802 field_addr.name = "obs_count";
59803#endif /* FREECIV_JSON_CONNECTION */
59804 e = 0;
59805 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->obs_count);
59806 if (e) {
59807 log_packet_detailed("'obs_count' field error detected");
59808 }
59809#ifdef FREECIV_JSON_CONNECTION
59810 field_addr.name = "obs_reqs";
59811#endif /* FREECIV_JSON_CONNECTION */
59812 e = 0;
59813 {
59814 int i;
59815
59816#ifdef FREECIV_JSON_CONNECTION
59817 /* Create the array. */
59818 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->obs_count);
59819
59820 /* Enter the array. */
59821 field_addr.sub_location = plocation_elem_new(0);
59822#endif /* FREECIV_JSON_CONNECTION */
59823
59824 for (i = 0; i < real_packet->obs_count; i++) {
59825#ifdef FREECIV_JSON_CONNECTION
59826 /* Next array element. */
59827 field_addr.sub_location->number = i;
59828#endif /* FREECIV_JSON_CONNECTION */
59829
59830 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->obs_reqs[i]);
59831 }
59832
59833#ifdef FREECIV_JSON_CONNECTION
59834 /* Exit array. */
59835 FC_FREE(field_addr.sub_location);
59836#endif /* FREECIV_JSON_CONNECTION */
59837 }
59838 if (e) {
59839 log_packet_detailed("'obs_reqs' field error detected");
59840 }
59841#ifdef FREECIV_JSON_CONNECTION
59842 field_addr.name = "build_cost";
59843#endif /* FREECIV_JSON_CONNECTION */
59844 e = 0;
59845 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->build_cost);
59846 if (e) {
59847 log_packet_detailed("'build_cost' field error detected");
59848 }
59849#ifdef FREECIV_JSON_CONNECTION
59850 field_addr.name = "upkeep";
59851#endif /* FREECIV_JSON_CONNECTION */
59852 e = 0;
59853 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->upkeep);
59854 if (e) {
59855 log_packet_detailed("'upkeep' field error detected");
59856 }
59857#ifdef FREECIV_JSON_CONNECTION
59858 field_addr.name = "sabotage";
59859#endif /* FREECIV_JSON_CONNECTION */
59860 e = 0;
59861 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sabotage);
59862 if (e) {
59863 log_packet_detailed("'sabotage' field error detected");
59864 }
59865#ifdef FREECIV_JSON_CONNECTION
59866 field_addr.name = "flags";
59867#endif /* FREECIV_JSON_CONNECTION */
59868 e = 0;
59869 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
59870 if (e) {
59871 log_packet_detailed("'flags' field error detected");
59872 }
59873#ifdef FREECIV_JSON_CONNECTION
59874 field_addr.name = "soundtag";
59875#endif /* FREECIV_JSON_CONNECTION */
59876 e = 0;
59877 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag);
59878 if (e) {
59879 log_packet_detailed("'soundtag' field error detected");
59880 }
59881#ifdef FREECIV_JSON_CONNECTION
59882 field_addr.name = "soundtag_alt";
59883#endif /* FREECIV_JSON_CONNECTION */
59884 e = 0;
59885 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt);
59886 if (e) {
59887 log_packet_detailed("'soundtag_alt' field error detected");
59888 }
59889#ifdef FREECIV_JSON_CONNECTION
59890 field_addr.name = "soundtag_alt2";
59891#endif /* FREECIV_JSON_CONNECTION */
59892 e = 0;
59893 e |= DIO_PUT(string, &dout, &field_addr, real_packet->soundtag_alt2);
59894 if (e) {
59895 log_packet_detailed("'soundtag_alt2' field error detected");
59896 }
59897#ifdef FREECIV_JSON_CONNECTION
59898 field_addr.name = "helptext";
59899#endif /* FREECIV_JSON_CONNECTION */
59900 e = 0;
59901 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
59902 if (e) {
59903 log_packet_detailed("'helptext' field error detected");
59904 }
59905
59906#endif
59908}
59909
59911{
59912 if (!pc->used) {
59913 log_error("WARNING: trying to send data to the closed connection %s",
59915 return -1;
59916 }
59917 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet != NULL, -1,
59918 "Handler for PACKET_RULESET_BUILDING not installed");
59919 return pc->phs.handlers->send[PACKET_RULESET_BUILDING].packet(pc, packet);
59920}
59921
59923{
59924 conn_list_iterate(dest, pconn) {
59927}
59928
59929#ifdef FREECIV_DELTA_PROTOCOL
59930#define hash_packet_ruleset_impr_flag_100 hash_const
59931
59932#define cmp_packet_ruleset_impr_flag_100 cmp_const
59933
59935#endif /* FREECIV_DELTA_PROTOCOL */
59936
59938{
59939#ifdef FREECIV_DELTA_PROTOCOL
59941 struct packet_ruleset_impr_flag *old;
59942 struct genhash **hash = pc->phs.received + PACKET_RULESET_IMPR_FLAG;
59943#endif /* FREECIV_DELTA_PROTOCOL */
59945#ifdef FREECIV_JSON_CONNECTION
59946 struct plocation field_addr;
59947 {
59951 }
59952#endif /* FREECIV_JSON_CONNECTION */
59953
59954#ifdef FREECIV_DELTA_PROTOCOL
59955#ifdef FREECIV_JSON_CONNECTION
59956 field_addr.name = "fields";
59957#endif /* FREECIV_JSON_CONNECTION */
59958 DIO_BV_GET(&din, &field_addr, fields);
59959
59960#else /* FREECIV_DELTA_PROTOCOL */
59961#ifdef FREECIV_JSON_CONNECTION
59962 field_addr.name = "id";
59963#endif /* FREECIV_JSON_CONNECTION */
59964 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
59966 }
59967#ifdef FREECIV_JSON_CONNECTION
59968 field_addr.name = "name";
59969#endif /* FREECIV_JSON_CONNECTION */
59970 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
59972 }
59973#ifdef FREECIV_JSON_CONNECTION
59974 field_addr.name = "helptxt";
59975#endif /* FREECIV_JSON_CONNECTION */
59976 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
59978 }
59979#endif
59980 log_packet_detailed("packet_ruleset_impr_flag_100: got info about ()");
59981
59982#ifdef FREECIV_DELTA_PROTOCOL
59983 if (NULL == *hash) {
59985 NULL, NULL, NULL, free);
59986 }
59987
59988 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
59989 *real_packet = *old;
59990 } else {
59991 log_packet_detailed(" no old info");
59992 memset(real_packet, 0, sizeof(*real_packet));
59993 }
59994
59995 if (BV_ISSET(fields, 0)) {
59996 log_packet_detailed(" got field 'id'");
59997#ifdef FREECIV_JSON_CONNECTION
59998 field_addr.name = "id";
59999#endif /* FREECIV_JSON_CONNECTION */
60000 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
60002 }
60003 }
60004 if (BV_ISSET(fields, 1)) {
60005 log_packet_detailed(" got field 'name'");
60006#ifdef FREECIV_JSON_CONNECTION
60007 field_addr.name = "name";
60008#endif /* FREECIV_JSON_CONNECTION */
60009 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
60011 }
60012 }
60013 if (BV_ISSET(fields, 2)) {
60014 log_packet_detailed(" got field 'helptxt'");
60015#ifdef FREECIV_JSON_CONNECTION
60016 field_addr.name = "helptxt";
60017#endif /* FREECIV_JSON_CONNECTION */
60018 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
60020 }
60021 }
60022
60023 if (NULL == old) {
60024 old = fc_malloc(sizeof(*old));
60025 *old = *real_packet;
60026 genhash_insert(*hash, old, old);
60027 } else {
60028 *old = *real_packet;
60029 }
60030
60031#endif /* FREECIV_DELTA_PROTOCOL */
60033}
60034
60036{
60037 const struct packet_ruleset_impr_flag *real_packet = packet;
60038 int e;
60039#ifdef FREECIV_DELTA_PROTOCOL
60041 struct packet_ruleset_impr_flag *old;
60042 bool differ;
60043 struct genhash **hash = pc->phs.sent + PACKET_RULESET_IMPR_FLAG;
60044#endif /* FREECIV_DELTA_PROTOCOL */
60046#ifdef FREECIV_JSON_CONNECTION
60047 struct plocation field_addr;
60048 {
60052 }
60053#endif /* FREECIV_JSON_CONNECTION */
60054
60055 log_packet_detailed("packet_ruleset_impr_flag_100: sending info about ()");
60056
60057#ifdef FREECIV_DELTA_PROTOCOL
60058 if (NULL == *hash) {
60060 NULL, NULL, NULL, free);
60061 }
60062 BV_CLR_ALL(fields);
60063
60064 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
60065 old = fc_malloc(sizeof(*old));
60066 *old = *real_packet;
60067 genhash_insert(*hash, old, old);
60068 memset(old, 0, sizeof(*old));
60069 }
60070 differ = (old->id != real_packet->id);
60071 if (differ) {
60072 BV_SET(fields, 0);
60073 }
60074
60075 differ = (strcmp(old->name, real_packet->name) != 0);
60076 if (differ) {
60077 BV_SET(fields, 1);
60078 }
60079
60080 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
60081 if (differ) {
60082 BV_SET(fields, 2);
60083 }
60084
60085
60086#ifdef FREECIV_JSON_CONNECTION
60087 field_addr.name = "fields";
60088#endif /* FREECIV_JSON_CONNECTION */
60089 e = 0;
60090 e |= DIO_BV_PUT(&dout, &field_addr, fields);
60091 if (e) {
60092 log_packet_detailed("fields bitvector error detected");
60093 }
60094
60095 if (BV_ISSET(fields, 0)) {
60096 log_packet_detailed(" field 'id' has changed");
60097#ifdef FREECIV_JSON_CONNECTION
60098 field_addr.name = "id";
60099#endif /* FREECIV_JSON_CONNECTION */
60100 e = 0;
60101 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
60102 if (e) {
60103 log_packet_detailed("'id' field error detected");
60104 }
60105 }
60106 if (BV_ISSET(fields, 1)) {
60107 log_packet_detailed(" field 'name' has changed");
60108#ifdef FREECIV_JSON_CONNECTION
60109 field_addr.name = "name";
60110#endif /* FREECIV_JSON_CONNECTION */
60111 e = 0;
60112 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
60113 if (e) {
60114 log_packet_detailed("'name' field error detected");
60115 }
60116 }
60117 if (BV_ISSET(fields, 2)) {
60118 log_packet_detailed(" field 'helptxt' has changed");
60119#ifdef FREECIV_JSON_CONNECTION
60120 field_addr.name = "helptxt";
60121#endif /* FREECIV_JSON_CONNECTION */
60122 e = 0;
60123 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
60124 if (e) {
60125 log_packet_detailed("'helptxt' field error detected");
60126 }
60127 }
60128
60129 *old = *real_packet;
60130#endif /* FREECIV_DELTA_PROTOCOL */
60131#ifndef FREECIV_DELTA_PROTOCOL
60132#ifdef FREECIV_JSON_CONNECTION
60133 field_addr.name = "id";
60134#endif /* FREECIV_JSON_CONNECTION */
60135 e = 0;
60136 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
60137 if (e) {
60138 log_packet_detailed("'id' field error detected");
60139 }
60140#ifdef FREECIV_JSON_CONNECTION
60141 field_addr.name = "name";
60142#endif /* FREECIV_JSON_CONNECTION */
60143 e = 0;
60144 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
60145 if (e) {
60146 log_packet_detailed("'name' field error detected");
60147 }
60148#ifdef FREECIV_JSON_CONNECTION
60149 field_addr.name = "helptxt";
60150#endif /* FREECIV_JSON_CONNECTION */
60151 e = 0;
60152 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
60153 if (e) {
60154 log_packet_detailed("'helptxt' field error detected");
60155 }
60156
60157#endif
60159}
60160
60162{
60163 if (!pc->used) {
60164 log_error("WARNING: trying to send data to the closed connection %s",
60166 return -1;
60167 }
60168 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet != NULL, -1,
60169 "Handler for PACKET_RULESET_IMPR_FLAG not installed");
60170 return pc->phs.handlers->send[PACKET_RULESET_IMPR_FLAG].packet(pc, packet);
60171}
60172
60174{
60175 conn_list_iterate(dest, pconn) {
60178}
60179
60180#ifdef FREECIV_DELTA_PROTOCOL
60181#define hash_packet_ruleset_terrain_100 hash_const
60182
60183#define cmp_packet_ruleset_terrain_100 cmp_const
60184
60186#endif /* FREECIV_DELTA_PROTOCOL */
60187
60189{
60190#ifdef FREECIV_DELTA_PROTOCOL
60192 struct packet_ruleset_terrain *old;
60193 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN;
60194#endif /* FREECIV_DELTA_PROTOCOL */
60196#ifdef FREECIV_JSON_CONNECTION
60197 struct plocation field_addr;
60198 {
60202 }
60203#endif /* FREECIV_JSON_CONNECTION */
60204
60205#ifdef FREECIV_DELTA_PROTOCOL
60206#ifdef FREECIV_JSON_CONNECTION
60207 field_addr.name = "fields";
60208#endif /* FREECIV_JSON_CONNECTION */
60209 DIO_BV_GET(&din, &field_addr, fields);
60210
60211#else /* FREECIV_DELTA_PROTOCOL */
60212#ifdef FREECIV_JSON_CONNECTION
60213 field_addr.name = "id";
60214#endif /* FREECIV_JSON_CONNECTION */
60215 {
60216 int readin;
60217
60218 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60220 }
60221 real_packet->id = readin;
60222 }
60223#ifdef FREECIV_JSON_CONNECTION
60224 field_addr.name = "tclass";
60225#endif /* FREECIV_JSON_CONNECTION */
60226 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
60228 }
60229#ifdef FREECIV_JSON_CONNECTION
60230 field_addr.name = "flags";
60231#endif /* FREECIV_JSON_CONNECTION */
60232 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
60234 }
60235#ifdef FREECIV_JSON_CONNECTION
60236 field_addr.name = "native_to";
60237#endif /* FREECIV_JSON_CONNECTION */
60238 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
60239 RECEIVE_PACKET_FIELD_ERROR(native_to);
60240 }
60241#ifdef FREECIV_JSON_CONNECTION
60242 field_addr.name = "name";
60243#endif /* FREECIV_JSON_CONNECTION */
60244 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
60246 }
60247#ifdef FREECIV_JSON_CONNECTION
60248 field_addr.name = "rule_name";
60249#endif /* FREECIV_JSON_CONNECTION */
60250 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
60251 RECEIVE_PACKET_FIELD_ERROR(rule_name);
60252 }
60253#ifdef FREECIV_JSON_CONNECTION
60254 field_addr.name = "graphic_str";
60255#endif /* FREECIV_JSON_CONNECTION */
60256 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
60257 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
60258 }
60259#ifdef FREECIV_JSON_CONNECTION
60260 field_addr.name = "graphic_alt";
60261#endif /* FREECIV_JSON_CONNECTION */
60262 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
60263 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
60264 }
60265#ifdef FREECIV_JSON_CONNECTION
60266 field_addr.name = "graphic_alt2";
60267#endif /* FREECIV_JSON_CONNECTION */
60268 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
60269 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
60270 }
60271#ifdef FREECIV_JSON_CONNECTION
60272 field_addr.name = "movement_cost";
60273#endif /* FREECIV_JSON_CONNECTION */
60274 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
60275 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
60276 }
60277#ifdef FREECIV_JSON_CONNECTION
60278 field_addr.name = "defense_bonus";
60279#endif /* FREECIV_JSON_CONNECTION */
60280 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
60281 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
60282 }
60283#ifdef FREECIV_JSON_CONNECTION
60284 field_addr.name = "output";
60285#endif /* FREECIV_JSON_CONNECTION */
60286 {
60287 int i;
60288
60289#ifdef FREECIV_JSON_CONNECTION
60290 /* Enter array. */
60291 field_addr.sub_location = plocation_elem_new(0);
60292#endif /* FREECIV_JSON_CONNECTION */
60293
60294 for (i = 0; i < O_LAST; i++) {
60295#ifdef FREECIV_JSON_CONNECTION
60296 field_addr.sub_location->number = i;
60297#endif /* FREECIV_JSON_CONNECTION */
60298
60299 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
60301 }
60302 }
60303
60304#ifdef FREECIV_JSON_CONNECTION
60305 /* Exit array. */
60306 FC_FREE(field_addr.sub_location);
60307#endif /* FREECIV_JSON_CONNECTION */
60308 }
60309#ifdef FREECIV_JSON_CONNECTION
60310 field_addr.name = "num_resources";
60311#endif /* FREECIV_JSON_CONNECTION */
60312 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
60313 RECEIVE_PACKET_FIELD_ERROR(num_resources);
60314 }
60315#ifdef FREECIV_JSON_CONNECTION
60316 field_addr.name = "resources";
60317#endif /* FREECIV_JSON_CONNECTION */
60318 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
60319 RECEIVE_PACKET_FIELD_ERROR(resources, ": truncation array");
60320 }
60321 {
60322 int i;
60323
60324#ifdef FREECIV_JSON_CONNECTION
60325 /* Enter array. */
60326 field_addr.sub_location = plocation_elem_new(0);
60327#endif /* FREECIV_JSON_CONNECTION */
60328
60329 for (i = 0; i < real_packet->num_resources; i++) {
60330#ifdef FREECIV_JSON_CONNECTION
60331 field_addr.sub_location->number = i;
60332#endif /* FREECIV_JSON_CONNECTION */
60333
60334 {
60335 int readin;
60336
60337 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60339 }
60340 real_packet->resources[i] = readin;
60341 }
60342 }
60343
60344#ifdef FREECIV_JSON_CONNECTION
60345 /* Exit array. */
60346 FC_FREE(field_addr.sub_location);
60347#endif /* FREECIV_JSON_CONNECTION */
60348 }
60349#ifdef FREECIV_JSON_CONNECTION
60350 field_addr.name = "resource_freq";
60351#endif /* FREECIV_JSON_CONNECTION */
60352 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
60353 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": truncation array");
60354 }
60355 {
60356 int i;
60357
60358#ifdef FREECIV_JSON_CONNECTION
60359 /* Enter array. */
60360 field_addr.sub_location = plocation_elem_new(0);
60361#endif /* FREECIV_JSON_CONNECTION */
60362
60363 for (i = 0; i < real_packet->num_resources; i++) {
60364#ifdef FREECIV_JSON_CONNECTION
60365 field_addr.sub_location->number = i;
60366#endif /* FREECIV_JSON_CONNECTION */
60367
60368 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
60369 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
60370 }
60371 }
60372
60373#ifdef FREECIV_JSON_CONNECTION
60374 /* Exit array. */
60375 FC_FREE(field_addr.sub_location);
60376#endif /* FREECIV_JSON_CONNECTION */
60377 }
60378#ifdef FREECIV_JSON_CONNECTION
60379 field_addr.name = "road_output_incr_pct";
60380#endif /* FREECIV_JSON_CONNECTION */
60381 {
60382 int i;
60383
60384#ifdef FREECIV_JSON_CONNECTION
60385 /* Enter array. */
60386 field_addr.sub_location = plocation_elem_new(0);
60387#endif /* FREECIV_JSON_CONNECTION */
60388
60389 for (i = 0; i < O_LAST; i++) {
60390#ifdef FREECIV_JSON_CONNECTION
60391 field_addr.sub_location->number = i;
60392#endif /* FREECIV_JSON_CONNECTION */
60393
60394 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
60395 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
60396 }
60397 }
60398
60399#ifdef FREECIV_JSON_CONNECTION
60400 /* Exit array. */
60401 FC_FREE(field_addr.sub_location);
60402#endif /* FREECIV_JSON_CONNECTION */
60403 }
60404#ifdef FREECIV_JSON_CONNECTION
60405 field_addr.name = "base_time";
60406#endif /* FREECIV_JSON_CONNECTION */
60407 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
60408 RECEIVE_PACKET_FIELD_ERROR(base_time);
60409 }
60410#ifdef FREECIV_JSON_CONNECTION
60411 field_addr.name = "road_time";
60412#endif /* FREECIV_JSON_CONNECTION */
60413 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
60414 RECEIVE_PACKET_FIELD_ERROR(road_time);
60415 }
60416#ifdef FREECIV_JSON_CONNECTION
60417 field_addr.name = "cultivate_result";
60418#endif /* FREECIV_JSON_CONNECTION */
60419 {
60420 int readin;
60421
60422 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60423 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
60424 }
60425 real_packet->cultivate_result = readin;
60426 }
60427#ifdef FREECIV_JSON_CONNECTION
60428 field_addr.name = "cultivate_time";
60429#endif /* FREECIV_JSON_CONNECTION */
60430 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
60431 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
60432 }
60433#ifdef FREECIV_JSON_CONNECTION
60434 field_addr.name = "plant_result";
60435#endif /* FREECIV_JSON_CONNECTION */
60436 {
60437 int readin;
60438
60439 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60440 RECEIVE_PACKET_FIELD_ERROR(plant_result);
60441 }
60442 real_packet->plant_result = readin;
60443 }
60444#ifdef FREECIV_JSON_CONNECTION
60445 field_addr.name = "plant_time";
60446#endif /* FREECIV_JSON_CONNECTION */
60447 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
60448 RECEIVE_PACKET_FIELD_ERROR(plant_time);
60449 }
60450#ifdef FREECIV_JSON_CONNECTION
60451 field_addr.name = "irrigation_food_incr";
60452#endif /* FREECIV_JSON_CONNECTION */
60453 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
60454 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
60455 }
60456#ifdef FREECIV_JSON_CONNECTION
60457 field_addr.name = "irrigation_time";
60458#endif /* FREECIV_JSON_CONNECTION */
60459 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
60460 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
60461 }
60462#ifdef FREECIV_JSON_CONNECTION
60463 field_addr.name = "mining_shield_incr";
60464#endif /* FREECIV_JSON_CONNECTION */
60465 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
60466 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
60467 }
60468#ifdef FREECIV_JSON_CONNECTION
60469 field_addr.name = "mining_time";
60470#endif /* FREECIV_JSON_CONNECTION */
60471 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
60472 RECEIVE_PACKET_FIELD_ERROR(mining_time);
60473 }
60474#ifdef FREECIV_JSON_CONNECTION
60475 field_addr.name = "animal";
60476#endif /* FREECIV_JSON_CONNECTION */
60477 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
60479 }
60480#ifdef FREECIV_JSON_CONNECTION
60481 field_addr.name = "transform_result";
60482#endif /* FREECIV_JSON_CONNECTION */
60483 {
60484 int readin;
60485
60486 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60487 RECEIVE_PACKET_FIELD_ERROR(transform_result);
60488 }
60489 real_packet->transform_result = readin;
60490 }
60491#ifdef FREECIV_JSON_CONNECTION
60492 field_addr.name = "transform_time";
60493#endif /* FREECIV_JSON_CONNECTION */
60494 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
60495 RECEIVE_PACKET_FIELD_ERROR(transform_time);
60496 }
60497#ifdef FREECIV_JSON_CONNECTION
60498 field_addr.name = "placing_time";
60499#endif /* FREECIV_JSON_CONNECTION */
60500 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
60501 RECEIVE_PACKET_FIELD_ERROR(placing_time);
60502 }
60503#ifdef FREECIV_JSON_CONNECTION
60504 field_addr.name = "pillage_time";
60505#endif /* FREECIV_JSON_CONNECTION */
60506 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
60507 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
60508 }
60509#ifdef FREECIV_JSON_CONNECTION
60510 field_addr.name = "extra_count";
60511#endif /* FREECIV_JSON_CONNECTION */
60512 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
60514 }
60515#ifdef FREECIV_JSON_CONNECTION
60516 field_addr.name = "extra_removal_times";
60517#endif /* FREECIV_JSON_CONNECTION */
60518 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
60519 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": truncation array");
60520 }
60521 {
60522 int i;
60523
60524#ifdef FREECIV_JSON_CONNECTION
60525 /* Enter array. */
60526 field_addr.sub_location = plocation_elem_new(0);
60527#endif /* FREECIV_JSON_CONNECTION */
60528
60529 for (i = 0; i < real_packet->extra_count; i++) {
60530#ifdef FREECIV_JSON_CONNECTION
60531 field_addr.sub_location->number = i;
60532#endif /* FREECIV_JSON_CONNECTION */
60533
60534 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
60535 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
60536 }
60537 }
60538
60539#ifdef FREECIV_JSON_CONNECTION
60540 /* Exit array. */
60541 FC_FREE(field_addr.sub_location);
60542#endif /* FREECIV_JSON_CONNECTION */
60543 }
60544#ifdef FREECIV_JSON_CONNECTION
60545 field_addr.name = "color_red";
60546#endif /* FREECIV_JSON_CONNECTION */
60547 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
60548 RECEIVE_PACKET_FIELD_ERROR(color_red);
60549 }
60550#ifdef FREECIV_JSON_CONNECTION
60551 field_addr.name = "color_green";
60552#endif /* FREECIV_JSON_CONNECTION */
60553 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
60554 RECEIVE_PACKET_FIELD_ERROR(color_green);
60555 }
60556#ifdef FREECIV_JSON_CONNECTION
60557 field_addr.name = "color_blue";
60558#endif /* FREECIV_JSON_CONNECTION */
60559 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
60560 RECEIVE_PACKET_FIELD_ERROR(color_blue);
60561 }
60562#ifdef FREECIV_JSON_CONNECTION
60563 field_addr.name = "helptext";
60564#endif /* FREECIV_JSON_CONNECTION */
60565 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
60567 }
60568#endif
60569 log_packet_detailed("packet_ruleset_terrain_100: got info about ()");
60570
60571#ifdef FREECIV_DELTA_PROTOCOL
60572 if (NULL == *hash) {
60574 NULL, NULL, NULL, free);
60575 }
60576
60577 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
60578 *real_packet = *old;
60579 } else {
60580 log_packet_detailed(" no old info");
60581 memset(real_packet, 0, sizeof(*real_packet));
60582 }
60583
60584 if (BV_ISSET(fields, 0)) {
60585 log_packet_detailed(" got field 'id'");
60586#ifdef FREECIV_JSON_CONNECTION
60587 field_addr.name = "id";
60588#endif /* FREECIV_JSON_CONNECTION */
60589 {
60590 int readin;
60591
60592 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60594 }
60595 real_packet->id = readin;
60596 }
60597 }
60598 if (BV_ISSET(fields, 1)) {
60599 log_packet_detailed(" got field 'tclass'");
60600#ifdef FREECIV_JSON_CONNECTION
60601 field_addr.name = "tclass";
60602#endif /* FREECIV_JSON_CONNECTION */
60603 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tclass)) {
60605 }
60606 }
60607 if (BV_ISSET(fields, 2)) {
60608 log_packet_detailed(" got field 'flags'");
60609#ifdef FREECIV_JSON_CONNECTION
60610 field_addr.name = "flags";
60611#endif /* FREECIV_JSON_CONNECTION */
60612 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
60614 }
60615 }
60616 if (BV_ISSET(fields, 3)) {
60617 log_packet_detailed(" got field 'native_to'");
60618#ifdef FREECIV_JSON_CONNECTION
60619 field_addr.name = "native_to";
60620#endif /* FREECIV_JSON_CONNECTION */
60621 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
60622 RECEIVE_PACKET_FIELD_ERROR(native_to);
60623 }
60624 }
60625 if (BV_ISSET(fields, 4)) {
60626 log_packet_detailed(" got field 'name'");
60627#ifdef FREECIV_JSON_CONNECTION
60628 field_addr.name = "name";
60629#endif /* FREECIV_JSON_CONNECTION */
60630 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
60632 }
60633 }
60634 if (BV_ISSET(fields, 5)) {
60635 log_packet_detailed(" got field 'rule_name'");
60636#ifdef FREECIV_JSON_CONNECTION
60637 field_addr.name = "rule_name";
60638#endif /* FREECIV_JSON_CONNECTION */
60639 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
60640 RECEIVE_PACKET_FIELD_ERROR(rule_name);
60641 }
60642 }
60643 if (BV_ISSET(fields, 6)) {
60644 log_packet_detailed(" got field 'graphic_str'");
60645#ifdef FREECIV_JSON_CONNECTION
60646 field_addr.name = "graphic_str";
60647#endif /* FREECIV_JSON_CONNECTION */
60648 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
60649 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
60650 }
60651 }
60652 if (BV_ISSET(fields, 7)) {
60653 log_packet_detailed(" got field 'graphic_alt'");
60654#ifdef FREECIV_JSON_CONNECTION
60655 field_addr.name = "graphic_alt";
60656#endif /* FREECIV_JSON_CONNECTION */
60657 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
60658 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
60659 }
60660 }
60661 if (BV_ISSET(fields, 8)) {
60662 log_packet_detailed(" got field 'graphic_alt2'");
60663#ifdef FREECIV_JSON_CONNECTION
60664 field_addr.name = "graphic_alt2";
60665#endif /* FREECIV_JSON_CONNECTION */
60666 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt2, sizeof(real_packet->graphic_alt2))) {
60667 RECEIVE_PACKET_FIELD_ERROR(graphic_alt2);
60668 }
60669 }
60670 if (BV_ISSET(fields, 9)) {
60671 log_packet_detailed(" got field 'movement_cost'");
60672#ifdef FREECIV_JSON_CONNECTION
60673 field_addr.name = "movement_cost";
60674#endif /* FREECIV_JSON_CONNECTION */
60675 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->movement_cost)) {
60676 RECEIVE_PACKET_FIELD_ERROR(movement_cost);
60677 }
60678 }
60679 if (BV_ISSET(fields, 10)) {
60680 log_packet_detailed(" got field 'defense_bonus'");
60681#ifdef FREECIV_JSON_CONNECTION
60682 field_addr.name = "defense_bonus";
60683#endif /* FREECIV_JSON_CONNECTION */
60684 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->defense_bonus)) {
60685 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
60686 }
60687 }
60688 if (BV_ISSET(fields, 11)) {
60689 log_packet_detailed(" got field 'output'");
60690#ifdef FREECIV_JSON_CONNECTION
60691 field_addr.name = "output";
60692#endif /* FREECIV_JSON_CONNECTION */
60693 {
60694 int i;
60695
60696#ifdef FREECIV_JSON_CONNECTION
60697 /* Enter array. */
60698 field_addr.sub_location = plocation_elem_new(0);
60699#endif /* FREECIV_JSON_CONNECTION */
60700
60701 for (i = 0; i < O_LAST; i++) {
60702#ifdef FREECIV_JSON_CONNECTION
60703 field_addr.sub_location->number = i;
60704#endif /* FREECIV_JSON_CONNECTION */
60705
60706 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
60708 }
60709 }
60710
60711#ifdef FREECIV_JSON_CONNECTION
60712 /* Exit array. */
60713 FC_FREE(field_addr.sub_location);
60714#endif /* FREECIV_JSON_CONNECTION */
60715 }
60716 }
60717 if (BV_ISSET(fields, 12)) {
60718 log_packet_detailed(" got field 'num_resources'");
60719#ifdef FREECIV_JSON_CONNECTION
60720 field_addr.name = "num_resources";
60721#endif /* FREECIV_JSON_CONNECTION */
60722 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_resources)) {
60723 RECEIVE_PACKET_FIELD_ERROR(num_resources);
60724 }
60725 }
60726 if (BV_ISSET(fields, 13)) {
60727 log_packet_detailed(" got field 'resources'");
60728#ifdef FREECIV_JSON_CONNECTION
60729 field_addr.name = "resources";
60730#endif /* FREECIV_JSON_CONNECTION */
60731 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
60732 RECEIVE_PACKET_FIELD_ERROR(resources, ": truncation array");
60733 }
60734 {
60735 int i;
60736
60737#ifdef FREECIV_JSON_CONNECTION
60738 /* Enter array. */
60739 field_addr.sub_location = plocation_elem_new(0);
60740#endif /* FREECIV_JSON_CONNECTION */
60741
60742 for (i = 0; i < real_packet->num_resources; i++) {
60743#ifdef FREECIV_JSON_CONNECTION
60744 field_addr.sub_location->number = i;
60745#endif /* FREECIV_JSON_CONNECTION */
60746
60747 {
60748 int readin;
60749
60750 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60752 }
60753 real_packet->resources[i] = readin;
60754 }
60755 }
60756
60757#ifdef FREECIV_JSON_CONNECTION
60758 /* Exit array. */
60759 FC_FREE(field_addr.sub_location);
60760#endif /* FREECIV_JSON_CONNECTION */
60761 }
60762 }
60763 if (BV_ISSET(fields, 14)) {
60764 log_packet_detailed(" got field 'resource_freq'");
60765#ifdef FREECIV_JSON_CONNECTION
60766 field_addr.name = "resource_freq";
60767#endif /* FREECIV_JSON_CONNECTION */
60768 if (real_packet->num_resources > MAX_EXTRA_TYPES) {
60769 RECEIVE_PACKET_FIELD_ERROR(resource_freq, ": truncation array");
60770 }
60771 {
60772 int i;
60773
60774#ifdef FREECIV_JSON_CONNECTION
60775 /* Enter array. */
60776 field_addr.sub_location = plocation_elem_new(0);
60777#endif /* FREECIV_JSON_CONNECTION */
60778
60779 for (i = 0; i < real_packet->num_resources; i++) {
60780#ifdef FREECIV_JSON_CONNECTION
60781 field_addr.sub_location->number = i;
60782#endif /* FREECIV_JSON_CONNECTION */
60783
60784 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->resource_freq[i])) {
60785 RECEIVE_PACKET_FIELD_ERROR(resource_freq);
60786 }
60787 }
60788
60789#ifdef FREECIV_JSON_CONNECTION
60790 /* Exit array. */
60791 FC_FREE(field_addr.sub_location);
60792#endif /* FREECIV_JSON_CONNECTION */
60793 }
60794 }
60795 if (BV_ISSET(fields, 15)) {
60796 log_packet_detailed(" got field 'road_output_incr_pct'");
60797#ifdef FREECIV_JSON_CONNECTION
60798 field_addr.name = "road_output_incr_pct";
60799#endif /* FREECIV_JSON_CONNECTION */
60800 {
60801 int i;
60802
60803#ifdef FREECIV_JSON_CONNECTION
60804 /* Enter array. */
60805 field_addr.sub_location = plocation_elem_new(0);
60806#endif /* FREECIV_JSON_CONNECTION */
60807
60808 for (i = 0; i < O_LAST; i++) {
60809#ifdef FREECIV_JSON_CONNECTION
60810 field_addr.sub_location->number = i;
60811#endif /* FREECIV_JSON_CONNECTION */
60812
60813 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->road_output_incr_pct[i])) {
60814 RECEIVE_PACKET_FIELD_ERROR(road_output_incr_pct);
60815 }
60816 }
60817
60818#ifdef FREECIV_JSON_CONNECTION
60819 /* Exit array. */
60820 FC_FREE(field_addr.sub_location);
60821#endif /* FREECIV_JSON_CONNECTION */
60822 }
60823 }
60824 if (BV_ISSET(fields, 16)) {
60825 log_packet_detailed(" got field 'base_time'");
60826#ifdef FREECIV_JSON_CONNECTION
60827 field_addr.name = "base_time";
60828#endif /* FREECIV_JSON_CONNECTION */
60829 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->base_time)) {
60830 RECEIVE_PACKET_FIELD_ERROR(base_time);
60831 }
60832 }
60833 if (BV_ISSET(fields, 17)) {
60834 log_packet_detailed(" got field 'road_time'");
60835#ifdef FREECIV_JSON_CONNECTION
60836 field_addr.name = "road_time";
60837#endif /* FREECIV_JSON_CONNECTION */
60838 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->road_time)) {
60839 RECEIVE_PACKET_FIELD_ERROR(road_time);
60840 }
60841 }
60842 if (BV_ISSET(fields, 18)) {
60843 log_packet_detailed(" got field 'cultivate_result'");
60844#ifdef FREECIV_JSON_CONNECTION
60845 field_addr.name = "cultivate_result";
60846#endif /* FREECIV_JSON_CONNECTION */
60847 {
60848 int readin;
60849
60850 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60851 RECEIVE_PACKET_FIELD_ERROR(cultivate_result);
60852 }
60853 real_packet->cultivate_result = readin;
60854 }
60855 }
60856 if (BV_ISSET(fields, 19)) {
60857 log_packet_detailed(" got field 'cultivate_time'");
60858#ifdef FREECIV_JSON_CONNECTION
60859 field_addr.name = "cultivate_time";
60860#endif /* FREECIV_JSON_CONNECTION */
60861 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->cultivate_time)) {
60862 RECEIVE_PACKET_FIELD_ERROR(cultivate_time);
60863 }
60864 }
60865 if (BV_ISSET(fields, 20)) {
60866 log_packet_detailed(" got field 'plant_result'");
60867#ifdef FREECIV_JSON_CONNECTION
60868 field_addr.name = "plant_result";
60869#endif /* FREECIV_JSON_CONNECTION */
60870 {
60871 int readin;
60872
60873 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60874 RECEIVE_PACKET_FIELD_ERROR(plant_result);
60875 }
60876 real_packet->plant_result = readin;
60877 }
60878 }
60879 if (BV_ISSET(fields, 21)) {
60880 log_packet_detailed(" got field 'plant_time'");
60881#ifdef FREECIV_JSON_CONNECTION
60882 field_addr.name = "plant_time";
60883#endif /* FREECIV_JSON_CONNECTION */
60884 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->plant_time)) {
60885 RECEIVE_PACKET_FIELD_ERROR(plant_time);
60886 }
60887 }
60888 if (BV_ISSET(fields, 22)) {
60889 log_packet_detailed(" got field 'irrigation_food_incr'");
60890#ifdef FREECIV_JSON_CONNECTION
60891 field_addr.name = "irrigation_food_incr";
60892#endif /* FREECIV_JSON_CONNECTION */
60893 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_food_incr)) {
60894 RECEIVE_PACKET_FIELD_ERROR(irrigation_food_incr);
60895 }
60896 }
60897 if (BV_ISSET(fields, 23)) {
60898 log_packet_detailed(" got field 'irrigation_time'");
60899#ifdef FREECIV_JSON_CONNECTION
60900 field_addr.name = "irrigation_time";
60901#endif /* FREECIV_JSON_CONNECTION */
60902 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->irrigation_time)) {
60903 RECEIVE_PACKET_FIELD_ERROR(irrigation_time);
60904 }
60905 }
60906 if (BV_ISSET(fields, 24)) {
60907 log_packet_detailed(" got field 'mining_shield_incr'");
60908#ifdef FREECIV_JSON_CONNECTION
60909 field_addr.name = "mining_shield_incr";
60910#endif /* FREECIV_JSON_CONNECTION */
60911 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_shield_incr)) {
60912 RECEIVE_PACKET_FIELD_ERROR(mining_shield_incr);
60913 }
60914 }
60915 if (BV_ISSET(fields, 25)) {
60916 log_packet_detailed(" got field 'mining_time'");
60917#ifdef FREECIV_JSON_CONNECTION
60918 field_addr.name = "mining_time";
60919#endif /* FREECIV_JSON_CONNECTION */
60920 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->mining_time)) {
60921 RECEIVE_PACKET_FIELD_ERROR(mining_time);
60922 }
60923 }
60924 if (BV_ISSET(fields, 26)) {
60925 log_packet_detailed(" got field 'animal'");
60926#ifdef FREECIV_JSON_CONNECTION
60927 field_addr.name = "animal";
60928#endif /* FREECIV_JSON_CONNECTION */
60929 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->animal)) {
60931 }
60932 }
60933 if (BV_ISSET(fields, 27)) {
60934 log_packet_detailed(" got field 'transform_result'");
60935#ifdef FREECIV_JSON_CONNECTION
60936 field_addr.name = "transform_result";
60937#endif /* FREECIV_JSON_CONNECTION */
60938 {
60939 int readin;
60940
60941 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
60942 RECEIVE_PACKET_FIELD_ERROR(transform_result);
60943 }
60944 real_packet->transform_result = readin;
60945 }
60946 }
60947 if (BV_ISSET(fields, 28)) {
60948 log_packet_detailed(" got field 'transform_time'");
60949#ifdef FREECIV_JSON_CONNECTION
60950 field_addr.name = "transform_time";
60951#endif /* FREECIV_JSON_CONNECTION */
60952 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->transform_time)) {
60953 RECEIVE_PACKET_FIELD_ERROR(transform_time);
60954 }
60955 }
60956 if (BV_ISSET(fields, 29)) {
60957 log_packet_detailed(" got field 'placing_time'");
60958#ifdef FREECIV_JSON_CONNECTION
60959 field_addr.name = "placing_time";
60960#endif /* FREECIV_JSON_CONNECTION */
60961 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->placing_time)) {
60962 RECEIVE_PACKET_FIELD_ERROR(placing_time);
60963 }
60964 }
60965 if (BV_ISSET(fields, 30)) {
60966 log_packet_detailed(" got field 'pillage_time'");
60967#ifdef FREECIV_JSON_CONNECTION
60968 field_addr.name = "pillage_time";
60969#endif /* FREECIV_JSON_CONNECTION */
60970 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->pillage_time)) {
60971 RECEIVE_PACKET_FIELD_ERROR(pillage_time);
60972 }
60973 }
60974 if (BV_ISSET(fields, 31)) {
60975 log_packet_detailed(" got field 'extra_count'");
60976#ifdef FREECIV_JSON_CONNECTION
60977 field_addr.name = "extra_count";
60978#endif /* FREECIV_JSON_CONNECTION */
60979 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_count)) {
60981 }
60982 }
60983 if (BV_ISSET(fields, 32)) {
60984 log_packet_detailed(" got field 'extra_removal_times'");
60985#ifdef FREECIV_JSON_CONNECTION
60986 field_addr.name = "extra_removal_times";
60987#endif /* FREECIV_JSON_CONNECTION */
60988 if (real_packet->extra_count > MAX_EXTRA_TYPES) {
60989 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times, ": truncation array");
60990 }
60991 {
60992 int i;
60993
60994#ifdef FREECIV_JSON_CONNECTION
60995 /* Enter array. */
60996 field_addr.sub_location = plocation_elem_new(0);
60997#endif /* FREECIV_JSON_CONNECTION */
60998
60999 for (i = 0; i < real_packet->extra_count; i++) {
61000#ifdef FREECIV_JSON_CONNECTION
61001 field_addr.sub_location->number = i;
61002#endif /* FREECIV_JSON_CONNECTION */
61003
61004 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->extra_removal_times[i])) {
61005 RECEIVE_PACKET_FIELD_ERROR(extra_removal_times);
61006 }
61007 }
61008
61009#ifdef FREECIV_JSON_CONNECTION
61010 /* Exit array. */
61011 FC_FREE(field_addr.sub_location);
61012#endif /* FREECIV_JSON_CONNECTION */
61013 }
61014 }
61015 if (BV_ISSET(fields, 33)) {
61016 log_packet_detailed(" got field 'color_red'");
61017#ifdef FREECIV_JSON_CONNECTION
61018 field_addr.name = "color_red";
61019#endif /* FREECIV_JSON_CONNECTION */
61020 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_red)) {
61021 RECEIVE_PACKET_FIELD_ERROR(color_red);
61022 }
61023 }
61024 if (BV_ISSET(fields, 34)) {
61025 log_packet_detailed(" got field 'color_green'");
61026#ifdef FREECIV_JSON_CONNECTION
61027 field_addr.name = "color_green";
61028#endif /* FREECIV_JSON_CONNECTION */
61029 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_green)) {
61030 RECEIVE_PACKET_FIELD_ERROR(color_green);
61031 }
61032 }
61033 if (BV_ISSET(fields, 35)) {
61034 log_packet_detailed(" got field 'color_blue'");
61035#ifdef FREECIV_JSON_CONNECTION
61036 field_addr.name = "color_blue";
61037#endif /* FREECIV_JSON_CONNECTION */
61038 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->color_blue)) {
61039 RECEIVE_PACKET_FIELD_ERROR(color_blue);
61040 }
61041 }
61042 if (BV_ISSET(fields, 36)) {
61043 log_packet_detailed(" got field 'helptext'");
61044#ifdef FREECIV_JSON_CONNECTION
61045 field_addr.name = "helptext";
61046#endif /* FREECIV_JSON_CONNECTION */
61047 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
61049 }
61050 }
61051
61052 if (NULL == old) {
61053 old = fc_malloc(sizeof(*old));
61054 *old = *real_packet;
61055 genhash_insert(*hash, old, old);
61056 } else {
61057 *old = *real_packet;
61058 }
61059
61060#endif /* FREECIV_DELTA_PROTOCOL */
61062}
61063
61065{
61066 const struct packet_ruleset_terrain *real_packet = packet;
61067 int e;
61068#ifdef FREECIV_DELTA_PROTOCOL
61070 struct packet_ruleset_terrain *old;
61071 bool differ;
61072 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN;
61073#endif /* FREECIV_DELTA_PROTOCOL */
61075#ifdef FREECIV_JSON_CONNECTION
61076 struct plocation field_addr;
61077 {
61081 }
61082#endif /* FREECIV_JSON_CONNECTION */
61083
61084 log_packet_detailed("packet_ruleset_terrain_100: sending info about ()");
61085
61086#ifdef FREECIV_DELTA_PROTOCOL
61087 if (NULL == *hash) {
61089 NULL, NULL, NULL, free);
61090 }
61091 BV_CLR_ALL(fields);
61092
61093 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
61094 old = fc_malloc(sizeof(*old));
61095 *old = *real_packet;
61096 genhash_insert(*hash, old, old);
61097 memset(old, 0, sizeof(*old));
61098 }
61099 differ = (old->id != real_packet->id);
61100 if (differ) {
61101 BV_SET(fields, 0);
61102 }
61103
61104 differ = (old->tclass != real_packet->tclass);
61105 if (differ) {
61106 BV_SET(fields, 1);
61107 }
61108
61109 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
61110 if (differ) {
61111 BV_SET(fields, 2);
61112 }
61113
61114 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
61115 if (differ) {
61116 BV_SET(fields, 3);
61117 }
61118
61119 differ = (strcmp(old->name, real_packet->name) != 0);
61120 if (differ) {
61121 BV_SET(fields, 4);
61122 }
61123
61124 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
61125 if (differ) {
61126 BV_SET(fields, 5);
61127 }
61128
61129 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
61130 if (differ) {
61131 BV_SET(fields, 6);
61132 }
61133
61134 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
61135 if (differ) {
61136 BV_SET(fields, 7);
61137 }
61138
61139 differ = (strcmp(old->graphic_alt2, real_packet->graphic_alt2) != 0);
61140 if (differ) {
61141 BV_SET(fields, 8);
61142 }
61143
61144 differ = (old->movement_cost != real_packet->movement_cost);
61145 if (differ) {
61146 BV_SET(fields, 9);
61147 }
61148
61149 differ = (old->defense_bonus != real_packet->defense_bonus);
61150 if (differ) {
61151 BV_SET(fields, 10);
61152 }
61153
61154 differ = FALSE;
61155 {
61156 int i;
61157
61158 for (i = 0; i < O_LAST; i++) {
61159 differ = (old->output[i] != real_packet->output[i]);
61160 if (differ) {
61161 break;
61162 }
61163 }
61164 }
61165 if (differ) {
61166 BV_SET(fields, 11);
61167 }
61168
61169 differ = (old->num_resources != real_packet->num_resources);
61170 if (differ) {
61171 BV_SET(fields, 12);
61172 }
61173
61174 differ = (old->num_resources != real_packet->num_resources);
61175 if (!differ) {
61176 int i;
61177
61178 for (i = 0; i < real_packet->num_resources; i++) {
61179 differ = (old->resources[i] != real_packet->resources[i]);
61180 if (differ) {
61181 break;
61182 }
61183 }
61184 }
61185 if (differ) {
61186 BV_SET(fields, 13);
61187 }
61188
61189 differ = (old->num_resources != real_packet->num_resources);
61190 if (!differ) {
61191 int i;
61192
61193 for (i = 0; i < real_packet->num_resources; i++) {
61194 differ = (old->resource_freq[i] != real_packet->resource_freq[i]);
61195 if (differ) {
61196 break;
61197 }
61198 }
61199 }
61200 if (differ) {
61201 BV_SET(fields, 14);
61202 }
61203
61204 differ = FALSE;
61205 {
61206 int i;
61207
61208 for (i = 0; i < O_LAST; i++) {
61209 differ = (old->road_output_incr_pct[i] != real_packet->road_output_incr_pct[i]);
61210 if (differ) {
61211 break;
61212 }
61213 }
61214 }
61215 if (differ) {
61216 BV_SET(fields, 15);
61217 }
61218
61219 differ = (old->base_time != real_packet->base_time);
61220 if (differ) {
61221 BV_SET(fields, 16);
61222 }
61223
61224 differ = (old->road_time != real_packet->road_time);
61225 if (differ) {
61226 BV_SET(fields, 17);
61227 }
61228
61229 differ = (old->cultivate_result != real_packet->cultivate_result);
61230 if (differ) {
61231 BV_SET(fields, 18);
61232 }
61233
61234 differ = (old->cultivate_time != real_packet->cultivate_time);
61235 if (differ) {
61236 BV_SET(fields, 19);
61237 }
61238
61239 differ = (old->plant_result != real_packet->plant_result);
61240 if (differ) {
61241 BV_SET(fields, 20);
61242 }
61243
61244 differ = (old->plant_time != real_packet->plant_time);
61245 if (differ) {
61246 BV_SET(fields, 21);
61247 }
61248
61249 differ = (old->irrigation_food_incr != real_packet->irrigation_food_incr);
61250 if (differ) {
61251 BV_SET(fields, 22);
61252 }
61253
61254 differ = (old->irrigation_time != real_packet->irrigation_time);
61255 if (differ) {
61256 BV_SET(fields, 23);
61257 }
61258
61259 differ = (old->mining_shield_incr != real_packet->mining_shield_incr);
61260 if (differ) {
61261 BV_SET(fields, 24);
61262 }
61263
61264 differ = (old->mining_time != real_packet->mining_time);
61265 if (differ) {
61266 BV_SET(fields, 25);
61267 }
61268
61269 differ = (old->animal != real_packet->animal);
61270 if (differ) {
61271 BV_SET(fields, 26);
61272 }
61273
61274 differ = (old->transform_result != real_packet->transform_result);
61275 if (differ) {
61276 BV_SET(fields, 27);
61277 }
61278
61279 differ = (old->transform_time != real_packet->transform_time);
61280 if (differ) {
61281 BV_SET(fields, 28);
61282 }
61283
61284 differ = (old->placing_time != real_packet->placing_time);
61285 if (differ) {
61286 BV_SET(fields, 29);
61287 }
61288
61289 differ = (old->pillage_time != real_packet->pillage_time);
61290 if (differ) {
61291 BV_SET(fields, 30);
61292 }
61293
61294 differ = (old->extra_count != real_packet->extra_count);
61295 if (differ) {
61296 BV_SET(fields, 31);
61297 }
61298
61299 differ = (old->extra_count != real_packet->extra_count);
61300 if (!differ) {
61301 int i;
61302
61303 for (i = 0; i < real_packet->extra_count; i++) {
61304 differ = (old->extra_removal_times[i] != real_packet->extra_removal_times[i]);
61305 if (differ) {
61306 break;
61307 }
61308 }
61309 }
61310 if (differ) {
61311 BV_SET(fields, 32);
61312 }
61313
61314 differ = (old->color_red != real_packet->color_red);
61315 if (differ) {
61316 BV_SET(fields, 33);
61317 }
61318
61319 differ = (old->color_green != real_packet->color_green);
61320 if (differ) {
61321 BV_SET(fields, 34);
61322 }
61323
61324 differ = (old->color_blue != real_packet->color_blue);
61325 if (differ) {
61326 BV_SET(fields, 35);
61327 }
61328
61329 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
61330 if (differ) {
61331 BV_SET(fields, 36);
61332 }
61333
61334
61335#ifdef FREECIV_JSON_CONNECTION
61336 field_addr.name = "fields";
61337#endif /* FREECIV_JSON_CONNECTION */
61338 e = 0;
61339 e |= DIO_BV_PUT(&dout, &field_addr, fields);
61340 if (e) {
61341 log_packet_detailed("fields bitvector error detected");
61342 }
61343
61344 if (BV_ISSET(fields, 0)) {
61345 log_packet_detailed(" field 'id' has changed");
61346#ifdef FREECIV_JSON_CONNECTION
61347 field_addr.name = "id";
61348#endif /* FREECIV_JSON_CONNECTION */
61349 e = 0;
61350 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
61351 if (e) {
61352 log_packet_detailed("'id' field error detected");
61353 }
61354 }
61355 if (BV_ISSET(fields, 1)) {
61356 log_packet_detailed(" field 'tclass' has changed");
61357#ifdef FREECIV_JSON_CONNECTION
61358 field_addr.name = "tclass";
61359#endif /* FREECIV_JSON_CONNECTION */
61360 e = 0;
61361 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
61362 if (e) {
61363 log_packet_detailed("'tclass' field error detected");
61364 }
61365 }
61366 if (BV_ISSET(fields, 2)) {
61367 log_packet_detailed(" field 'flags' has changed");
61368#ifdef FREECIV_JSON_CONNECTION
61369 field_addr.name = "flags";
61370#endif /* FREECIV_JSON_CONNECTION */
61371 e = 0;
61372 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
61373 if (e) {
61374 log_packet_detailed("'flags' field error detected");
61375 }
61376 }
61377 if (BV_ISSET(fields, 3)) {
61378 log_packet_detailed(" field 'native_to' has changed");
61379#ifdef FREECIV_JSON_CONNECTION
61380 field_addr.name = "native_to";
61381#endif /* FREECIV_JSON_CONNECTION */
61382 e = 0;
61383 e |= DIO_BV_PUT(&dout, &field_addr, packet->native_to);
61384 if (e) {
61385 log_packet_detailed("'native_to' field error detected");
61386 }
61387 }
61388 if (BV_ISSET(fields, 4)) {
61389 log_packet_detailed(" field 'name' has changed");
61390#ifdef FREECIV_JSON_CONNECTION
61391 field_addr.name = "name";
61392#endif /* FREECIV_JSON_CONNECTION */
61393 e = 0;
61394 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
61395 if (e) {
61396 log_packet_detailed("'name' field error detected");
61397 }
61398 }
61399 if (BV_ISSET(fields, 5)) {
61400 log_packet_detailed(" field 'rule_name' has changed");
61401#ifdef FREECIV_JSON_CONNECTION
61402 field_addr.name = "rule_name";
61403#endif /* FREECIV_JSON_CONNECTION */
61404 e = 0;
61405 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
61406 if (e) {
61407 log_packet_detailed("'rule_name' field error detected");
61408 }
61409 }
61410 if (BV_ISSET(fields, 6)) {
61411 log_packet_detailed(" field 'graphic_str' has changed");
61412#ifdef FREECIV_JSON_CONNECTION
61413 field_addr.name = "graphic_str";
61414#endif /* FREECIV_JSON_CONNECTION */
61415 e = 0;
61416 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
61417 if (e) {
61418 log_packet_detailed("'graphic_str' field error detected");
61419 }
61420 }
61421 if (BV_ISSET(fields, 7)) {
61422 log_packet_detailed(" field 'graphic_alt' has changed");
61423#ifdef FREECIV_JSON_CONNECTION
61424 field_addr.name = "graphic_alt";
61425#endif /* FREECIV_JSON_CONNECTION */
61426 e = 0;
61427 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
61428 if (e) {
61429 log_packet_detailed("'graphic_alt' field error detected");
61430 }
61431 }
61432 if (BV_ISSET(fields, 8)) {
61433 log_packet_detailed(" field 'graphic_alt2' has changed");
61434#ifdef FREECIV_JSON_CONNECTION
61435 field_addr.name = "graphic_alt2";
61436#endif /* FREECIV_JSON_CONNECTION */
61437 e = 0;
61438 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
61439 if (e) {
61440 log_packet_detailed("'graphic_alt2' field error detected");
61441 }
61442 }
61443 if (BV_ISSET(fields, 9)) {
61444 log_packet_detailed(" field 'movement_cost' has changed");
61445#ifdef FREECIV_JSON_CONNECTION
61446 field_addr.name = "movement_cost";
61447#endif /* FREECIV_JSON_CONNECTION */
61448 e = 0;
61449 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
61450 if (e) {
61451 log_packet_detailed("'movement_cost' field error detected");
61452 }
61453 }
61454 if (BV_ISSET(fields, 10)) {
61455 log_packet_detailed(" field 'defense_bonus' has changed");
61456#ifdef FREECIV_JSON_CONNECTION
61457 field_addr.name = "defense_bonus";
61458#endif /* FREECIV_JSON_CONNECTION */
61459 e = 0;
61460 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
61461 if (e) {
61462 log_packet_detailed("'defense_bonus' field error detected");
61463 }
61464 }
61465 if (BV_ISSET(fields, 11)) {
61466 log_packet_detailed(" field 'output' has changed");
61467#ifdef FREECIV_JSON_CONNECTION
61468 field_addr.name = "output";
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, O_LAST);
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 < O_LAST; 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(uint8, &dout, &field_addr, real_packet->output[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("'output' field error detected");
61498 }
61499 }
61500 if (BV_ISSET(fields, 12)) {
61501 log_packet_detailed(" field 'num_resources' has changed");
61502#ifdef FREECIV_JSON_CONNECTION
61503 field_addr.name = "num_resources";
61504#endif /* FREECIV_JSON_CONNECTION */
61505 e = 0;
61506 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
61507 if (e) {
61508 log_packet_detailed("'num_resources' field error detected");
61509 }
61510 }
61511 if (BV_ISSET(fields, 13)) {
61512 log_packet_detailed(" field 'resources' has changed");
61513#ifdef FREECIV_JSON_CONNECTION
61514 field_addr.name = "resources";
61515#endif /* FREECIV_JSON_CONNECTION */
61516 e = 0;
61517 {
61518 int i;
61519
61520#ifdef FREECIV_JSON_CONNECTION
61521 /* Create the array. */
61522 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
61523
61524 /* Enter the array. */
61525 field_addr.sub_location = plocation_elem_new(0);
61526#endif /* FREECIV_JSON_CONNECTION */
61527
61528 for (i = 0; i < real_packet->num_resources; i++) {
61529#ifdef FREECIV_JSON_CONNECTION
61530 /* Next array element. */
61531 field_addr.sub_location->number = i;
61532#endif /* FREECIV_JSON_CONNECTION */
61533
61534 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
61535 }
61536
61537#ifdef FREECIV_JSON_CONNECTION
61538 /* Exit array. */
61539 FC_FREE(field_addr.sub_location);
61540#endif /* FREECIV_JSON_CONNECTION */
61541 }
61542 if (e) {
61543 log_packet_detailed("'resources' field error detected");
61544 }
61545 }
61546 if (BV_ISSET(fields, 14)) {
61547 log_packet_detailed(" field 'resource_freq' has changed");
61548#ifdef FREECIV_JSON_CONNECTION
61549 field_addr.name = "resource_freq";
61550#endif /* FREECIV_JSON_CONNECTION */
61551 e = 0;
61552 {
61553 int i;
61554
61555#ifdef FREECIV_JSON_CONNECTION
61556 /* Create the array. */
61557 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
61558
61559 /* Enter the array. */
61560 field_addr.sub_location = plocation_elem_new(0);
61561#endif /* FREECIV_JSON_CONNECTION */
61562
61563 for (i = 0; i < real_packet->num_resources; i++) {
61564#ifdef FREECIV_JSON_CONNECTION
61565 /* Next array element. */
61566 field_addr.sub_location->number = i;
61567#endif /* FREECIV_JSON_CONNECTION */
61568
61569 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
61570 }
61571
61572#ifdef FREECIV_JSON_CONNECTION
61573 /* Exit array. */
61574 FC_FREE(field_addr.sub_location);
61575#endif /* FREECIV_JSON_CONNECTION */
61576 }
61577 if (e) {
61578 log_packet_detailed("'resource_freq' field error detected");
61579 }
61580 }
61581 if (BV_ISSET(fields, 15)) {
61582 log_packet_detailed(" field 'road_output_incr_pct' has changed");
61583#ifdef FREECIV_JSON_CONNECTION
61584 field_addr.name = "road_output_incr_pct";
61585#endif /* FREECIV_JSON_CONNECTION */
61586 e = 0;
61587 {
61588 int i;
61589
61590#ifdef FREECIV_JSON_CONNECTION
61591 /* Create the array. */
61592 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
61593
61594 /* Enter the array. */
61595 field_addr.sub_location = plocation_elem_new(0);
61596#endif /* FREECIV_JSON_CONNECTION */
61597
61598 for (i = 0; i < O_LAST; i++) {
61599#ifdef FREECIV_JSON_CONNECTION
61600 /* Next array element. */
61601 field_addr.sub_location->number = i;
61602#endif /* FREECIV_JSON_CONNECTION */
61603
61604 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
61605 }
61606
61607#ifdef FREECIV_JSON_CONNECTION
61608 /* Exit array. */
61609 FC_FREE(field_addr.sub_location);
61610#endif /* FREECIV_JSON_CONNECTION */
61611 }
61612 if (e) {
61613 log_packet_detailed("'road_output_incr_pct' field error detected");
61614 }
61615 }
61616 if (BV_ISSET(fields, 16)) {
61617 log_packet_detailed(" field 'base_time' has changed");
61618#ifdef FREECIV_JSON_CONNECTION
61619 field_addr.name = "base_time";
61620#endif /* FREECIV_JSON_CONNECTION */
61621 e = 0;
61622 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
61623 if (e) {
61624 log_packet_detailed("'base_time' field error detected");
61625 }
61626 }
61627 if (BV_ISSET(fields, 17)) {
61628 log_packet_detailed(" field 'road_time' has changed");
61629#ifdef FREECIV_JSON_CONNECTION
61630 field_addr.name = "road_time";
61631#endif /* FREECIV_JSON_CONNECTION */
61632 e = 0;
61633 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
61634 if (e) {
61635 log_packet_detailed("'road_time' field error detected");
61636 }
61637 }
61638 if (BV_ISSET(fields, 18)) {
61639 log_packet_detailed(" field 'cultivate_result' has changed");
61640#ifdef FREECIV_JSON_CONNECTION
61641 field_addr.name = "cultivate_result";
61642#endif /* FREECIV_JSON_CONNECTION */
61643 e = 0;
61644 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
61645 if (e) {
61646 log_packet_detailed("'cultivate_result' field error detected");
61647 }
61648 }
61649 if (BV_ISSET(fields, 19)) {
61650 log_packet_detailed(" field 'cultivate_time' has changed");
61651#ifdef FREECIV_JSON_CONNECTION
61652 field_addr.name = "cultivate_time";
61653#endif /* FREECIV_JSON_CONNECTION */
61654 e = 0;
61655 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
61656 if (e) {
61657 log_packet_detailed("'cultivate_time' field error detected");
61658 }
61659 }
61660 if (BV_ISSET(fields, 20)) {
61661 log_packet_detailed(" field 'plant_result' has changed");
61662#ifdef FREECIV_JSON_CONNECTION
61663 field_addr.name = "plant_result";
61664#endif /* FREECIV_JSON_CONNECTION */
61665 e = 0;
61666 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
61667 if (e) {
61668 log_packet_detailed("'plant_result' field error detected");
61669 }
61670 }
61671 if (BV_ISSET(fields, 21)) {
61672 log_packet_detailed(" field 'plant_time' has changed");
61673#ifdef FREECIV_JSON_CONNECTION
61674 field_addr.name = "plant_time";
61675#endif /* FREECIV_JSON_CONNECTION */
61676 e = 0;
61677 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
61678 if (e) {
61679 log_packet_detailed("'plant_time' field error detected");
61680 }
61681 }
61682 if (BV_ISSET(fields, 22)) {
61683 log_packet_detailed(" field 'irrigation_food_incr' has changed");
61684#ifdef FREECIV_JSON_CONNECTION
61685 field_addr.name = "irrigation_food_incr";
61686#endif /* FREECIV_JSON_CONNECTION */
61687 e = 0;
61688 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
61689 if (e) {
61690 log_packet_detailed("'irrigation_food_incr' field error detected");
61691 }
61692 }
61693 if (BV_ISSET(fields, 23)) {
61694 log_packet_detailed(" field 'irrigation_time' has changed");
61695#ifdef FREECIV_JSON_CONNECTION
61696 field_addr.name = "irrigation_time";
61697#endif /* FREECIV_JSON_CONNECTION */
61698 e = 0;
61699 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
61700 if (e) {
61701 log_packet_detailed("'irrigation_time' field error detected");
61702 }
61703 }
61704 if (BV_ISSET(fields, 24)) {
61705 log_packet_detailed(" field 'mining_shield_incr' has changed");
61706#ifdef FREECIV_JSON_CONNECTION
61707 field_addr.name = "mining_shield_incr";
61708#endif /* FREECIV_JSON_CONNECTION */
61709 e = 0;
61710 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
61711 if (e) {
61712 log_packet_detailed("'mining_shield_incr' field error detected");
61713 }
61714 }
61715 if (BV_ISSET(fields, 25)) {
61716 log_packet_detailed(" field 'mining_time' has changed");
61717#ifdef FREECIV_JSON_CONNECTION
61718 field_addr.name = "mining_time";
61719#endif /* FREECIV_JSON_CONNECTION */
61720 e = 0;
61721 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
61722 if (e) {
61723 log_packet_detailed("'mining_time' field error detected");
61724 }
61725 }
61726 if (BV_ISSET(fields, 26)) {
61727 log_packet_detailed(" field 'animal' has changed");
61728#ifdef FREECIV_JSON_CONNECTION
61729 field_addr.name = "animal";
61730#endif /* FREECIV_JSON_CONNECTION */
61731 e = 0;
61732 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
61733 if (e) {
61734 log_packet_detailed("'animal' field error detected");
61735 }
61736 }
61737 if (BV_ISSET(fields, 27)) {
61738 log_packet_detailed(" field 'transform_result' has changed");
61739#ifdef FREECIV_JSON_CONNECTION
61740 field_addr.name = "transform_result";
61741#endif /* FREECIV_JSON_CONNECTION */
61742 e = 0;
61743 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
61744 if (e) {
61745 log_packet_detailed("'transform_result' field error detected");
61746 }
61747 }
61748 if (BV_ISSET(fields, 28)) {
61749 log_packet_detailed(" field 'transform_time' has changed");
61750#ifdef FREECIV_JSON_CONNECTION
61751 field_addr.name = "transform_time";
61752#endif /* FREECIV_JSON_CONNECTION */
61753 e = 0;
61754 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
61755 if (e) {
61756 log_packet_detailed("'transform_time' field error detected");
61757 }
61758 }
61759 if (BV_ISSET(fields, 29)) {
61760 log_packet_detailed(" field 'placing_time' has changed");
61761#ifdef FREECIV_JSON_CONNECTION
61762 field_addr.name = "placing_time";
61763#endif /* FREECIV_JSON_CONNECTION */
61764 e = 0;
61765 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
61766 if (e) {
61767 log_packet_detailed("'placing_time' field error detected");
61768 }
61769 }
61770 if (BV_ISSET(fields, 30)) {
61771 log_packet_detailed(" field 'pillage_time' has changed");
61772#ifdef FREECIV_JSON_CONNECTION
61773 field_addr.name = "pillage_time";
61774#endif /* FREECIV_JSON_CONNECTION */
61775 e = 0;
61776 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
61777 if (e) {
61778 log_packet_detailed("'pillage_time' field error detected");
61779 }
61780 }
61781 if (BV_ISSET(fields, 31)) {
61782 log_packet_detailed(" field 'extra_count' has changed");
61783#ifdef FREECIV_JSON_CONNECTION
61784 field_addr.name = "extra_count";
61785#endif /* FREECIV_JSON_CONNECTION */
61786 e = 0;
61787 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
61788 if (e) {
61789 log_packet_detailed("'extra_count' field error detected");
61790 }
61791 }
61792 if (BV_ISSET(fields, 32)) {
61793 log_packet_detailed(" field 'extra_removal_times' has changed");
61794#ifdef FREECIV_JSON_CONNECTION
61795 field_addr.name = "extra_removal_times";
61796#endif /* FREECIV_JSON_CONNECTION */
61797 e = 0;
61798 {
61799 int i;
61800
61801#ifdef FREECIV_JSON_CONNECTION
61802 /* Create the array. */
61803 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
61804
61805 /* Enter the array. */
61806 field_addr.sub_location = plocation_elem_new(0);
61807#endif /* FREECIV_JSON_CONNECTION */
61808
61809 for (i = 0; i < real_packet->extra_count; i++) {
61810#ifdef FREECIV_JSON_CONNECTION
61811 /* Next array element. */
61812 field_addr.sub_location->number = i;
61813#endif /* FREECIV_JSON_CONNECTION */
61814
61815 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
61816 }
61817
61818#ifdef FREECIV_JSON_CONNECTION
61819 /* Exit array. */
61820 FC_FREE(field_addr.sub_location);
61821#endif /* FREECIV_JSON_CONNECTION */
61822 }
61823 if (e) {
61824 log_packet_detailed("'extra_removal_times' field error detected");
61825 }
61826 }
61827 if (BV_ISSET(fields, 33)) {
61828 log_packet_detailed(" field 'color_red' has changed");
61829#ifdef FREECIV_JSON_CONNECTION
61830 field_addr.name = "color_red";
61831#endif /* FREECIV_JSON_CONNECTION */
61832 e = 0;
61833 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
61834 if (e) {
61835 log_packet_detailed("'color_red' field error detected");
61836 }
61837 }
61838 if (BV_ISSET(fields, 34)) {
61839 log_packet_detailed(" field 'color_green' has changed");
61840#ifdef FREECIV_JSON_CONNECTION
61841 field_addr.name = "color_green";
61842#endif /* FREECIV_JSON_CONNECTION */
61843 e = 0;
61844 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
61845 if (e) {
61846 log_packet_detailed("'color_green' field error detected");
61847 }
61848 }
61849 if (BV_ISSET(fields, 35)) {
61850 log_packet_detailed(" field 'color_blue' has changed");
61851#ifdef FREECIV_JSON_CONNECTION
61852 field_addr.name = "color_blue";
61853#endif /* FREECIV_JSON_CONNECTION */
61854 e = 0;
61855 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
61856 if (e) {
61857 log_packet_detailed("'color_blue' field error detected");
61858 }
61859 }
61860 if (BV_ISSET(fields, 36)) {
61861 log_packet_detailed(" field 'helptext' has changed");
61862#ifdef FREECIV_JSON_CONNECTION
61863 field_addr.name = "helptext";
61864#endif /* FREECIV_JSON_CONNECTION */
61865 e = 0;
61866 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
61867 if (e) {
61868 log_packet_detailed("'helptext' field error detected");
61869 }
61870 }
61871
61872 *old = *real_packet;
61873#endif /* FREECIV_DELTA_PROTOCOL */
61874#ifndef FREECIV_DELTA_PROTOCOL
61875#ifdef FREECIV_JSON_CONNECTION
61876 field_addr.name = "id";
61877#endif /* FREECIV_JSON_CONNECTION */
61878 e = 0;
61879 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
61880 if (e) {
61881 log_packet_detailed("'id' field error detected");
61882 }
61883#ifdef FREECIV_JSON_CONNECTION
61884 field_addr.name = "tclass";
61885#endif /* FREECIV_JSON_CONNECTION */
61886 e = 0;
61887 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tclass);
61888 if (e) {
61889 log_packet_detailed("'tclass' field error detected");
61890 }
61891#ifdef FREECIV_JSON_CONNECTION
61892 field_addr.name = "flags";
61893#endif /* FREECIV_JSON_CONNECTION */
61894 e = 0;
61895 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
61896 if (e) {
61897 log_packet_detailed("'flags' field error detected");
61898 }
61899#ifdef FREECIV_JSON_CONNECTION
61900 field_addr.name = "native_to";
61901#endif /* FREECIV_JSON_CONNECTION */
61902 e = 0;
61903 e |= DIO_BV_PUT(&dout, &field_addr, packet->native_to);
61904 if (e) {
61905 log_packet_detailed("'native_to' field error detected");
61906 }
61907#ifdef FREECIV_JSON_CONNECTION
61908 field_addr.name = "name";
61909#endif /* FREECIV_JSON_CONNECTION */
61910 e = 0;
61911 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
61912 if (e) {
61913 log_packet_detailed("'name' field error detected");
61914 }
61915#ifdef FREECIV_JSON_CONNECTION
61916 field_addr.name = "rule_name";
61917#endif /* FREECIV_JSON_CONNECTION */
61918 e = 0;
61919 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
61920 if (e) {
61921 log_packet_detailed("'rule_name' field error detected");
61922 }
61923#ifdef FREECIV_JSON_CONNECTION
61924 field_addr.name = "graphic_str";
61925#endif /* FREECIV_JSON_CONNECTION */
61926 e = 0;
61927 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
61928 if (e) {
61929 log_packet_detailed("'graphic_str' field error detected");
61930 }
61931#ifdef FREECIV_JSON_CONNECTION
61932 field_addr.name = "graphic_alt";
61933#endif /* FREECIV_JSON_CONNECTION */
61934 e = 0;
61935 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
61936 if (e) {
61937 log_packet_detailed("'graphic_alt' field error detected");
61938 }
61939#ifdef FREECIV_JSON_CONNECTION
61940 field_addr.name = "graphic_alt2";
61941#endif /* FREECIV_JSON_CONNECTION */
61942 e = 0;
61943 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt2);
61944 if (e) {
61945 log_packet_detailed("'graphic_alt2' field error detected");
61946 }
61947#ifdef FREECIV_JSON_CONNECTION
61948 field_addr.name = "movement_cost";
61949#endif /* FREECIV_JSON_CONNECTION */
61950 e = 0;
61951 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->movement_cost);
61952 if (e) {
61953 log_packet_detailed("'movement_cost' field error detected");
61954 }
61955#ifdef FREECIV_JSON_CONNECTION
61956 field_addr.name = "defense_bonus";
61957#endif /* FREECIV_JSON_CONNECTION */
61958 e = 0;
61959 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->defense_bonus);
61960 if (e) {
61961 log_packet_detailed("'defense_bonus' field error detected");
61962 }
61963#ifdef FREECIV_JSON_CONNECTION
61964 field_addr.name = "output";
61965#endif /* FREECIV_JSON_CONNECTION */
61966 e = 0;
61967 {
61968 int i;
61969
61970#ifdef FREECIV_JSON_CONNECTION
61971 /* Create the array. */
61972 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
61973
61974 /* Enter the array. */
61975 field_addr.sub_location = plocation_elem_new(0);
61976#endif /* FREECIV_JSON_CONNECTION */
61977
61978 for (i = 0; i < O_LAST; i++) {
61979#ifdef FREECIV_JSON_CONNECTION
61980 /* Next array element. */
61981 field_addr.sub_location->number = i;
61982#endif /* FREECIV_JSON_CONNECTION */
61983
61984 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
61985 }
61986
61987#ifdef FREECIV_JSON_CONNECTION
61988 /* Exit array. */
61989 FC_FREE(field_addr.sub_location);
61990#endif /* FREECIV_JSON_CONNECTION */
61991 }
61992 if (e) {
61993 log_packet_detailed("'output' field error detected");
61994 }
61995#ifdef FREECIV_JSON_CONNECTION
61996 field_addr.name = "num_resources";
61997#endif /* FREECIV_JSON_CONNECTION */
61998 e = 0;
61999 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_resources);
62000 if (e) {
62001 log_packet_detailed("'num_resources' field error detected");
62002 }
62003#ifdef FREECIV_JSON_CONNECTION
62004 field_addr.name = "resources";
62005#endif /* FREECIV_JSON_CONNECTION */
62006 e = 0;
62007 {
62008 int i;
62009
62010#ifdef FREECIV_JSON_CONNECTION
62011 /* Create the array. */
62012 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
62013
62014 /* Enter the array. */
62015 field_addr.sub_location = plocation_elem_new(0);
62016#endif /* FREECIV_JSON_CONNECTION */
62017
62018 for (i = 0; i < real_packet->num_resources; i++) {
62019#ifdef FREECIV_JSON_CONNECTION
62020 /* Next array element. */
62021 field_addr.sub_location->number = i;
62022#endif /* FREECIV_JSON_CONNECTION */
62023
62024 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resources[i]);
62025 }
62026
62027#ifdef FREECIV_JSON_CONNECTION
62028 /* Exit array. */
62029 FC_FREE(field_addr.sub_location);
62030#endif /* FREECIV_JSON_CONNECTION */
62031 }
62032 if (e) {
62033 log_packet_detailed("'resources' field error detected");
62034 }
62035#ifdef FREECIV_JSON_CONNECTION
62036 field_addr.name = "resource_freq";
62037#endif /* FREECIV_JSON_CONNECTION */
62038 e = 0;
62039 {
62040 int i;
62041
62042#ifdef FREECIV_JSON_CONNECTION
62043 /* Create the array. */
62044 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->num_resources);
62045
62046 /* Enter the array. */
62047 field_addr.sub_location = plocation_elem_new(0);
62048#endif /* FREECIV_JSON_CONNECTION */
62049
62050 for (i = 0; i < real_packet->num_resources; i++) {
62051#ifdef FREECIV_JSON_CONNECTION
62052 /* Next array element. */
62053 field_addr.sub_location->number = i;
62054#endif /* FREECIV_JSON_CONNECTION */
62055
62056 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource_freq[i]);
62057 }
62058
62059#ifdef FREECIV_JSON_CONNECTION
62060 /* Exit array. */
62061 FC_FREE(field_addr.sub_location);
62062#endif /* FREECIV_JSON_CONNECTION */
62063 }
62064 if (e) {
62065 log_packet_detailed("'resource_freq' field error detected");
62066 }
62067#ifdef FREECIV_JSON_CONNECTION
62068 field_addr.name = "road_output_incr_pct";
62069#endif /* FREECIV_JSON_CONNECTION */
62070 e = 0;
62071 {
62072 int i;
62073
62074#ifdef FREECIV_JSON_CONNECTION
62075 /* Create the array. */
62076 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
62077
62078 /* Enter the array. */
62079 field_addr.sub_location = plocation_elem_new(0);
62080#endif /* FREECIV_JSON_CONNECTION */
62081
62082 for (i = 0; i < O_LAST; i++) {
62083#ifdef FREECIV_JSON_CONNECTION
62084 /* Next array element. */
62085 field_addr.sub_location->number = i;
62086#endif /* FREECIV_JSON_CONNECTION */
62087
62088 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->road_output_incr_pct[i]);
62089 }
62090
62091#ifdef FREECIV_JSON_CONNECTION
62092 /* Exit array. */
62093 FC_FREE(field_addr.sub_location);
62094#endif /* FREECIV_JSON_CONNECTION */
62095 }
62096 if (e) {
62097 log_packet_detailed("'road_output_incr_pct' field error detected");
62098 }
62099#ifdef FREECIV_JSON_CONNECTION
62100 field_addr.name = "base_time";
62101#endif /* FREECIV_JSON_CONNECTION */
62102 e = 0;
62103 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->base_time);
62104 if (e) {
62105 log_packet_detailed("'base_time' field error detected");
62106 }
62107#ifdef FREECIV_JSON_CONNECTION
62108 field_addr.name = "road_time";
62109#endif /* FREECIV_JSON_CONNECTION */
62110 e = 0;
62111 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->road_time);
62112 if (e) {
62113 log_packet_detailed("'road_time' field error detected");
62114 }
62115#ifdef FREECIV_JSON_CONNECTION
62116 field_addr.name = "cultivate_result";
62117#endif /* FREECIV_JSON_CONNECTION */
62118 e = 0;
62119 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_result);
62120 if (e) {
62121 log_packet_detailed("'cultivate_result' field error detected");
62122 }
62123#ifdef FREECIV_JSON_CONNECTION
62124 field_addr.name = "cultivate_time";
62125#endif /* FREECIV_JSON_CONNECTION */
62126 e = 0;
62127 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cultivate_time);
62128 if (e) {
62129 log_packet_detailed("'cultivate_time' field error detected");
62130 }
62131#ifdef FREECIV_JSON_CONNECTION
62132 field_addr.name = "plant_result";
62133#endif /* FREECIV_JSON_CONNECTION */
62134 e = 0;
62135 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_result);
62136 if (e) {
62137 log_packet_detailed("'plant_result' field error detected");
62138 }
62139#ifdef FREECIV_JSON_CONNECTION
62140 field_addr.name = "plant_time";
62141#endif /* FREECIV_JSON_CONNECTION */
62142 e = 0;
62143 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->plant_time);
62144 if (e) {
62145 log_packet_detailed("'plant_time' field error detected");
62146 }
62147#ifdef FREECIV_JSON_CONNECTION
62148 field_addr.name = "irrigation_food_incr";
62149#endif /* FREECIV_JSON_CONNECTION */
62150 e = 0;
62151 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_food_incr);
62152 if (e) {
62153 log_packet_detailed("'irrigation_food_incr' field error detected");
62154 }
62155#ifdef FREECIV_JSON_CONNECTION
62156 field_addr.name = "irrigation_time";
62157#endif /* FREECIV_JSON_CONNECTION */
62158 e = 0;
62159 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->irrigation_time);
62160 if (e) {
62161 log_packet_detailed("'irrigation_time' field error detected");
62162 }
62163#ifdef FREECIV_JSON_CONNECTION
62164 field_addr.name = "mining_shield_incr";
62165#endif /* FREECIV_JSON_CONNECTION */
62166 e = 0;
62167 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_shield_incr);
62168 if (e) {
62169 log_packet_detailed("'mining_shield_incr' field error detected");
62170 }
62171#ifdef FREECIV_JSON_CONNECTION
62172 field_addr.name = "mining_time";
62173#endif /* FREECIV_JSON_CONNECTION */
62174 e = 0;
62175 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->mining_time);
62176 if (e) {
62177 log_packet_detailed("'mining_time' field error detected");
62178 }
62179#ifdef FREECIV_JSON_CONNECTION
62180 field_addr.name = "animal";
62181#endif /* FREECIV_JSON_CONNECTION */
62182 e = 0;
62183 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->animal);
62184 if (e) {
62185 log_packet_detailed("'animal' field error detected");
62186 }
62187#ifdef FREECIV_JSON_CONNECTION
62188 field_addr.name = "transform_result";
62189#endif /* FREECIV_JSON_CONNECTION */
62190 e = 0;
62191 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_result);
62192 if (e) {
62193 log_packet_detailed("'transform_result' field error detected");
62194 }
62195#ifdef FREECIV_JSON_CONNECTION
62196 field_addr.name = "transform_time";
62197#endif /* FREECIV_JSON_CONNECTION */
62198 e = 0;
62199 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->transform_time);
62200 if (e) {
62201 log_packet_detailed("'transform_time' field error detected");
62202 }
62203#ifdef FREECIV_JSON_CONNECTION
62204 field_addr.name = "placing_time";
62205#endif /* FREECIV_JSON_CONNECTION */
62206 e = 0;
62207 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->placing_time);
62208 if (e) {
62209 log_packet_detailed("'placing_time' field error detected");
62210 }
62211#ifdef FREECIV_JSON_CONNECTION
62212 field_addr.name = "pillage_time";
62213#endif /* FREECIV_JSON_CONNECTION */
62214 e = 0;
62215 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->pillage_time);
62216 if (e) {
62217 log_packet_detailed("'pillage_time' field error detected");
62218 }
62219#ifdef FREECIV_JSON_CONNECTION
62220 field_addr.name = "extra_count";
62221#endif /* FREECIV_JSON_CONNECTION */
62222 e = 0;
62223 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_count);
62224 if (e) {
62225 log_packet_detailed("'extra_count' field error detected");
62226 }
62227#ifdef FREECIV_JSON_CONNECTION
62228 field_addr.name = "extra_removal_times";
62229#endif /* FREECIV_JSON_CONNECTION */
62230 e = 0;
62231 {
62232 int i;
62233
62234#ifdef FREECIV_JSON_CONNECTION
62235 /* Create the array. */
62236 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->extra_count);
62237
62238 /* Enter the array. */
62239 field_addr.sub_location = plocation_elem_new(0);
62240#endif /* FREECIV_JSON_CONNECTION */
62241
62242 for (i = 0; i < real_packet->extra_count; i++) {
62243#ifdef FREECIV_JSON_CONNECTION
62244 /* Next array element. */
62245 field_addr.sub_location->number = i;
62246#endif /* FREECIV_JSON_CONNECTION */
62247
62248 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->extra_removal_times[i]);
62249 }
62250
62251#ifdef FREECIV_JSON_CONNECTION
62252 /* Exit array. */
62253 FC_FREE(field_addr.sub_location);
62254#endif /* FREECIV_JSON_CONNECTION */
62255 }
62256 if (e) {
62257 log_packet_detailed("'extra_removal_times' field error detected");
62258 }
62259#ifdef FREECIV_JSON_CONNECTION
62260 field_addr.name = "color_red";
62261#endif /* FREECIV_JSON_CONNECTION */
62262 e = 0;
62263 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_red);
62264 if (e) {
62265 log_packet_detailed("'color_red' field error detected");
62266 }
62267#ifdef FREECIV_JSON_CONNECTION
62268 field_addr.name = "color_green";
62269#endif /* FREECIV_JSON_CONNECTION */
62270 e = 0;
62271 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_green);
62272 if (e) {
62273 log_packet_detailed("'color_green' field error detected");
62274 }
62275#ifdef FREECIV_JSON_CONNECTION
62276 field_addr.name = "color_blue";
62277#endif /* FREECIV_JSON_CONNECTION */
62278 e = 0;
62279 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->color_blue);
62280 if (e) {
62281 log_packet_detailed("'color_blue' field error detected");
62282 }
62283#ifdef FREECIV_JSON_CONNECTION
62284 field_addr.name = "helptext";
62285#endif /* FREECIV_JSON_CONNECTION */
62286 e = 0;
62287 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
62288 if (e) {
62289 log_packet_detailed("'helptext' field error detected");
62290 }
62291
62292#endif
62294}
62295
62297{
62298 if (!pc->used) {
62299 log_error("WARNING: trying to send data to the closed connection %s",
62301 return -1;
62302 }
62303 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet != NULL, -1,
62304 "Handler for PACKET_RULESET_TERRAIN not installed");
62305 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN].packet(pc, packet);
62306}
62307
62308void lsend_packet_ruleset_terrain(struct conn_list *dest, const struct packet_ruleset_terrain *packet)
62309{
62310 conn_list_iterate(dest, pconn) {
62313}
62314
62315#ifdef FREECIV_DELTA_PROTOCOL
62316#define hash_packet_ruleset_terrain_flag_100 hash_const
62317
62318#define cmp_packet_ruleset_terrain_flag_100 cmp_const
62319
62321#endif /* FREECIV_DELTA_PROTOCOL */
62322
62324{
62325#ifdef FREECIV_DELTA_PROTOCOL
62327 struct packet_ruleset_terrain_flag *old;
62328 struct genhash **hash = pc->phs.received + PACKET_RULESET_TERRAIN_FLAG;
62329#endif /* FREECIV_DELTA_PROTOCOL */
62331#ifdef FREECIV_JSON_CONNECTION
62332 struct plocation field_addr;
62333 {
62337 }
62338#endif /* FREECIV_JSON_CONNECTION */
62339
62340#ifdef FREECIV_DELTA_PROTOCOL
62341#ifdef FREECIV_JSON_CONNECTION
62342 field_addr.name = "fields";
62343#endif /* FREECIV_JSON_CONNECTION */
62344 DIO_BV_GET(&din, &field_addr, fields);
62345
62346#else /* FREECIV_DELTA_PROTOCOL */
62347#ifdef FREECIV_JSON_CONNECTION
62348 field_addr.name = "id";
62349#endif /* FREECIV_JSON_CONNECTION */
62350 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62352 }
62353#ifdef FREECIV_JSON_CONNECTION
62354 field_addr.name = "name";
62355#endif /* FREECIV_JSON_CONNECTION */
62356 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62358 }
62359#ifdef FREECIV_JSON_CONNECTION
62360 field_addr.name = "helptxt";
62361#endif /* FREECIV_JSON_CONNECTION */
62362 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
62364 }
62365#endif
62366 log_packet_detailed("packet_ruleset_terrain_flag_100: got info about ()");
62367
62368#ifdef FREECIV_DELTA_PROTOCOL
62369 if (NULL == *hash) {
62371 NULL, NULL, NULL, free);
62372 }
62373
62374 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62375 *real_packet = *old;
62376 } else {
62377 log_packet_detailed(" no old info");
62378 memset(real_packet, 0, sizeof(*real_packet));
62379 }
62380
62381 if (BV_ISSET(fields, 0)) {
62382 log_packet_detailed(" got field 'id'");
62383#ifdef FREECIV_JSON_CONNECTION
62384 field_addr.name = "id";
62385#endif /* FREECIV_JSON_CONNECTION */
62386 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62388 }
62389 }
62390 if (BV_ISSET(fields, 1)) {
62391 log_packet_detailed(" got field 'name'");
62392#ifdef FREECIV_JSON_CONNECTION
62393 field_addr.name = "name";
62394#endif /* FREECIV_JSON_CONNECTION */
62395 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62397 }
62398 }
62399 if (BV_ISSET(fields, 2)) {
62400 log_packet_detailed(" got field 'helptxt'");
62401#ifdef FREECIV_JSON_CONNECTION
62402 field_addr.name = "helptxt";
62403#endif /* FREECIV_JSON_CONNECTION */
62404 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
62406 }
62407 }
62408
62409 if (NULL == old) {
62410 old = fc_malloc(sizeof(*old));
62411 *old = *real_packet;
62412 genhash_insert(*hash, old, old);
62413 } else {
62414 *old = *real_packet;
62415 }
62416
62417#endif /* FREECIV_DELTA_PROTOCOL */
62419}
62420
62422{
62423 const struct packet_ruleset_terrain_flag *real_packet = packet;
62424 int e;
62425#ifdef FREECIV_DELTA_PROTOCOL
62427 struct packet_ruleset_terrain_flag *old;
62428 bool differ;
62429 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TERRAIN_FLAG;
62430#endif /* FREECIV_DELTA_PROTOCOL */
62432#ifdef FREECIV_JSON_CONNECTION
62433 struct plocation field_addr;
62434 {
62438 }
62439#endif /* FREECIV_JSON_CONNECTION */
62440
62441 log_packet_detailed("packet_ruleset_terrain_flag_100: sending info about ()");
62442
62443#ifdef FREECIV_DELTA_PROTOCOL
62444 if (NULL == *hash) {
62446 NULL, NULL, NULL, free);
62447 }
62448 BV_CLR_ALL(fields);
62449
62450 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62451 old = fc_malloc(sizeof(*old));
62452 *old = *real_packet;
62453 genhash_insert(*hash, old, old);
62454 memset(old, 0, sizeof(*old));
62455 }
62456 differ = (old->id != real_packet->id);
62457 if (differ) {
62458 BV_SET(fields, 0);
62459 }
62460
62461 differ = (strcmp(old->name, real_packet->name) != 0);
62462 if (differ) {
62463 BV_SET(fields, 1);
62464 }
62465
62466 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
62467 if (differ) {
62468 BV_SET(fields, 2);
62469 }
62470
62471
62472#ifdef FREECIV_JSON_CONNECTION
62473 field_addr.name = "fields";
62474#endif /* FREECIV_JSON_CONNECTION */
62475 e = 0;
62476 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62477 if (e) {
62478 log_packet_detailed("fields bitvector error detected");
62479 }
62480
62481 if (BV_ISSET(fields, 0)) {
62482 log_packet_detailed(" field 'id' has changed");
62483#ifdef FREECIV_JSON_CONNECTION
62484 field_addr.name = "id";
62485#endif /* FREECIV_JSON_CONNECTION */
62486 e = 0;
62487 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62488 if (e) {
62489 log_packet_detailed("'id' field error detected");
62490 }
62491 }
62492 if (BV_ISSET(fields, 1)) {
62493 log_packet_detailed(" field 'name' has changed");
62494#ifdef FREECIV_JSON_CONNECTION
62495 field_addr.name = "name";
62496#endif /* FREECIV_JSON_CONNECTION */
62497 e = 0;
62498 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62499 if (e) {
62500 log_packet_detailed("'name' field error detected");
62501 }
62502 }
62503 if (BV_ISSET(fields, 2)) {
62504 log_packet_detailed(" field 'helptxt' has changed");
62505#ifdef FREECIV_JSON_CONNECTION
62506 field_addr.name = "helptxt";
62507#endif /* FREECIV_JSON_CONNECTION */
62508 e = 0;
62509 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
62510 if (e) {
62511 log_packet_detailed("'helptxt' field error detected");
62512 }
62513 }
62514
62515 *old = *real_packet;
62516#endif /* FREECIV_DELTA_PROTOCOL */
62517#ifndef FREECIV_DELTA_PROTOCOL
62518#ifdef FREECIV_JSON_CONNECTION
62519 field_addr.name = "id";
62520#endif /* FREECIV_JSON_CONNECTION */
62521 e = 0;
62522 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62523 if (e) {
62524 log_packet_detailed("'id' field error detected");
62525 }
62526#ifdef FREECIV_JSON_CONNECTION
62527 field_addr.name = "name";
62528#endif /* FREECIV_JSON_CONNECTION */
62529 e = 0;
62530 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62531 if (e) {
62532 log_packet_detailed("'name' field error detected");
62533 }
62534#ifdef FREECIV_JSON_CONNECTION
62535 field_addr.name = "helptxt";
62536#endif /* FREECIV_JSON_CONNECTION */
62537 e = 0;
62538 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
62539 if (e) {
62540 log_packet_detailed("'helptxt' field error detected");
62541 }
62542
62543#endif
62545}
62546
62548{
62549 if (!pc->used) {
62550 log_error("WARNING: trying to send data to the closed connection %s",
62552 return -1;
62553 }
62554 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet != NULL, -1,
62555 "Handler for PACKET_RULESET_TERRAIN_FLAG not installed");
62556 return pc->phs.handlers->send[PACKET_RULESET_TERRAIN_FLAG].packet(pc, packet);
62557}
62558
62560{
62561 conn_list_iterate(dest, pconn) {
62564}
62565
62566#ifdef FREECIV_DELTA_PROTOCOL
62567#define hash_packet_ruleset_unit_class_100 hash_const
62568
62569#define cmp_packet_ruleset_unit_class_100 cmp_const
62570
62572#endif /* FREECIV_DELTA_PROTOCOL */
62573
62575{
62576#ifdef FREECIV_DELTA_PROTOCOL
62578 struct packet_ruleset_unit_class *old;
62579 struct genhash **hash = pc->phs.received + PACKET_RULESET_UNIT_CLASS;
62580#endif /* FREECIV_DELTA_PROTOCOL */
62582#ifdef FREECIV_JSON_CONNECTION
62583 struct plocation field_addr;
62584 {
62588 }
62589#endif /* FREECIV_JSON_CONNECTION */
62590
62591#ifdef FREECIV_DELTA_PROTOCOL
62592#ifdef FREECIV_JSON_CONNECTION
62593 field_addr.name = "fields";
62594#endif /* FREECIV_JSON_CONNECTION */
62595 DIO_BV_GET(&din, &field_addr, fields);
62596
62597#else /* FREECIV_DELTA_PROTOCOL */
62598#ifdef FREECIV_JSON_CONNECTION
62599 field_addr.name = "id";
62600#endif /* FREECIV_JSON_CONNECTION */
62601 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62603 }
62604#ifdef FREECIV_JSON_CONNECTION
62605 field_addr.name = "name";
62606#endif /* FREECIV_JSON_CONNECTION */
62607 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62609 }
62610#ifdef FREECIV_JSON_CONNECTION
62611 field_addr.name = "rule_name";
62612#endif /* FREECIV_JSON_CONNECTION */
62613 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62614 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62615 }
62616#ifdef FREECIV_JSON_CONNECTION
62617 field_addr.name = "min_speed";
62618#endif /* FREECIV_JSON_CONNECTION */
62619 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
62620 RECEIVE_PACKET_FIELD_ERROR(min_speed);
62621 }
62622#ifdef FREECIV_JSON_CONNECTION
62623 field_addr.name = "hp_loss_pct";
62624#endif /* FREECIV_JSON_CONNECTION */
62625 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
62626 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
62627 }
62628#ifdef FREECIV_JSON_CONNECTION
62629 field_addr.name = "non_native_def_pct";
62630#endif /* FREECIV_JSON_CONNECTION */
62631 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
62632 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
62633 }
62634#ifdef FREECIV_JSON_CONNECTION
62635 field_addr.name = "flags";
62636#endif /* FREECIV_JSON_CONNECTION */
62637 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
62639 }
62640#ifdef FREECIV_JSON_CONNECTION
62641 field_addr.name = "helptext";
62642#endif /* FREECIV_JSON_CONNECTION */
62643 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
62645 }
62646#endif
62647 log_packet_detailed("packet_ruleset_unit_class_100: got info about ()");
62648
62649#ifdef FREECIV_DELTA_PROTOCOL
62650 if (NULL == *hash) {
62652 NULL, NULL, NULL, free);
62653 }
62654
62655 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
62656 *real_packet = *old;
62657 } else {
62658 log_packet_detailed(" no old info");
62659 memset(real_packet, 0, sizeof(*real_packet));
62660 }
62661
62662 if (BV_ISSET(fields, 0)) {
62663 log_packet_detailed(" got field 'id'");
62664#ifdef FREECIV_JSON_CONNECTION
62665 field_addr.name = "id";
62666#endif /* FREECIV_JSON_CONNECTION */
62667 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
62669 }
62670 }
62671 if (BV_ISSET(fields, 1)) {
62672 log_packet_detailed(" got field 'name'");
62673#ifdef FREECIV_JSON_CONNECTION
62674 field_addr.name = "name";
62675#endif /* FREECIV_JSON_CONNECTION */
62676 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
62678 }
62679 }
62680 if (BV_ISSET(fields, 2)) {
62681 log_packet_detailed(" got field 'rule_name'");
62682#ifdef FREECIV_JSON_CONNECTION
62683 field_addr.name = "rule_name";
62684#endif /* FREECIV_JSON_CONNECTION */
62685 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
62686 RECEIVE_PACKET_FIELD_ERROR(rule_name);
62687 }
62688 }
62689 if (BV_ISSET(fields, 3)) {
62690 log_packet_detailed(" got field 'min_speed'");
62691#ifdef FREECIV_JSON_CONNECTION
62692 field_addr.name = "min_speed";
62693#endif /* FREECIV_JSON_CONNECTION */
62694 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->min_speed)) {
62695 RECEIVE_PACKET_FIELD_ERROR(min_speed);
62696 }
62697 }
62698 if (BV_ISSET(fields, 4)) {
62699 log_packet_detailed(" got field 'hp_loss_pct'");
62700#ifdef FREECIV_JSON_CONNECTION
62701 field_addr.name = "hp_loss_pct";
62702#endif /* FREECIV_JSON_CONNECTION */
62703 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp_loss_pct)) {
62704 RECEIVE_PACKET_FIELD_ERROR(hp_loss_pct);
62705 }
62706 }
62707 if (BV_ISSET(fields, 5)) {
62708 log_packet_detailed(" got field 'non_native_def_pct'");
62709#ifdef FREECIV_JSON_CONNECTION
62710 field_addr.name = "non_native_def_pct";
62711#endif /* FREECIV_JSON_CONNECTION */
62712 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->non_native_def_pct)) {
62713 RECEIVE_PACKET_FIELD_ERROR(non_native_def_pct);
62714 }
62715 }
62716 if (BV_ISSET(fields, 6)) {
62717 log_packet_detailed(" got field 'flags'");
62718#ifdef FREECIV_JSON_CONNECTION
62719 field_addr.name = "flags";
62720#endif /* FREECIV_JSON_CONNECTION */
62721 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
62723 }
62724 }
62725 if (BV_ISSET(fields, 7)) {
62726 log_packet_detailed(" got field 'helptext'");
62727#ifdef FREECIV_JSON_CONNECTION
62728 field_addr.name = "helptext";
62729#endif /* FREECIV_JSON_CONNECTION */
62730 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
62732 }
62733 }
62734
62735 if (NULL == old) {
62736 old = fc_malloc(sizeof(*old));
62737 *old = *real_packet;
62738 genhash_insert(*hash, old, old);
62739 } else {
62740 *old = *real_packet;
62741 }
62742
62743#endif /* FREECIV_DELTA_PROTOCOL */
62745}
62746
62748{
62749 const struct packet_ruleset_unit_class *real_packet = packet;
62750 int e;
62751#ifdef FREECIV_DELTA_PROTOCOL
62753 struct packet_ruleset_unit_class *old;
62754 bool differ;
62755 struct genhash **hash = pc->phs.sent + PACKET_RULESET_UNIT_CLASS;
62756#endif /* FREECIV_DELTA_PROTOCOL */
62758#ifdef FREECIV_JSON_CONNECTION
62759 struct plocation field_addr;
62760 {
62764 }
62765#endif /* FREECIV_JSON_CONNECTION */
62766
62767 log_packet_detailed("packet_ruleset_unit_class_100: sending info about ()");
62768
62769#ifdef FREECIV_DELTA_PROTOCOL
62770 if (NULL == *hash) {
62772 NULL, NULL, NULL, free);
62773 }
62774 BV_CLR_ALL(fields);
62775
62776 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
62777 old = fc_malloc(sizeof(*old));
62778 *old = *real_packet;
62779 genhash_insert(*hash, old, old);
62780 memset(old, 0, sizeof(*old));
62781 }
62782 differ = (old->id != real_packet->id);
62783 if (differ) {
62784 BV_SET(fields, 0);
62785 }
62786
62787 differ = (strcmp(old->name, real_packet->name) != 0);
62788 if (differ) {
62789 BV_SET(fields, 1);
62790 }
62791
62792 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
62793 if (differ) {
62794 BV_SET(fields, 2);
62795 }
62796
62797 differ = (old->min_speed != real_packet->min_speed);
62798 if (differ) {
62799 BV_SET(fields, 3);
62800 }
62801
62802 differ = (old->hp_loss_pct != real_packet->hp_loss_pct);
62803 if (differ) {
62804 BV_SET(fields, 4);
62805 }
62806
62807 differ = (old->non_native_def_pct != real_packet->non_native_def_pct);
62808 if (differ) {
62809 BV_SET(fields, 5);
62810 }
62811
62812 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
62813 if (differ) {
62814 BV_SET(fields, 6);
62815 }
62816
62817 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
62818 if (differ) {
62819 BV_SET(fields, 7);
62820 }
62821
62822
62823#ifdef FREECIV_JSON_CONNECTION
62824 field_addr.name = "fields";
62825#endif /* FREECIV_JSON_CONNECTION */
62826 e = 0;
62827 e |= DIO_BV_PUT(&dout, &field_addr, fields);
62828 if (e) {
62829 log_packet_detailed("fields bitvector error detected");
62830 }
62831
62832 if (BV_ISSET(fields, 0)) {
62833 log_packet_detailed(" field 'id' has changed");
62834#ifdef FREECIV_JSON_CONNECTION
62835 field_addr.name = "id";
62836#endif /* FREECIV_JSON_CONNECTION */
62837 e = 0;
62838 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62839 if (e) {
62840 log_packet_detailed("'id' field error detected");
62841 }
62842 }
62843 if (BV_ISSET(fields, 1)) {
62844 log_packet_detailed(" field 'name' has changed");
62845#ifdef FREECIV_JSON_CONNECTION
62846 field_addr.name = "name";
62847#endif /* FREECIV_JSON_CONNECTION */
62848 e = 0;
62849 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62850 if (e) {
62851 log_packet_detailed("'name' field error detected");
62852 }
62853 }
62854 if (BV_ISSET(fields, 2)) {
62855 log_packet_detailed(" field 'rule_name' has changed");
62856#ifdef FREECIV_JSON_CONNECTION
62857 field_addr.name = "rule_name";
62858#endif /* FREECIV_JSON_CONNECTION */
62859 e = 0;
62860 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62861 if (e) {
62862 log_packet_detailed("'rule_name' field error detected");
62863 }
62864 }
62865 if (BV_ISSET(fields, 3)) {
62866 log_packet_detailed(" field 'min_speed' has changed");
62867#ifdef FREECIV_JSON_CONNECTION
62868 field_addr.name = "min_speed";
62869#endif /* FREECIV_JSON_CONNECTION */
62870 e = 0;
62871 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
62872 if (e) {
62873 log_packet_detailed("'min_speed' field error detected");
62874 }
62875 }
62876 if (BV_ISSET(fields, 4)) {
62877 log_packet_detailed(" field 'hp_loss_pct' has changed");
62878#ifdef FREECIV_JSON_CONNECTION
62879 field_addr.name = "hp_loss_pct";
62880#endif /* FREECIV_JSON_CONNECTION */
62881 e = 0;
62882 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
62883 if (e) {
62884 log_packet_detailed("'hp_loss_pct' field error detected");
62885 }
62886 }
62887 if (BV_ISSET(fields, 5)) {
62888 log_packet_detailed(" field 'non_native_def_pct' has changed");
62889#ifdef FREECIV_JSON_CONNECTION
62890 field_addr.name = "non_native_def_pct";
62891#endif /* FREECIV_JSON_CONNECTION */
62892 e = 0;
62893 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
62894 if (e) {
62895 log_packet_detailed("'non_native_def_pct' field error detected");
62896 }
62897 }
62898 if (BV_ISSET(fields, 6)) {
62899 log_packet_detailed(" field 'flags' has changed");
62900#ifdef FREECIV_JSON_CONNECTION
62901 field_addr.name = "flags";
62902#endif /* FREECIV_JSON_CONNECTION */
62903 e = 0;
62904 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
62905 if (e) {
62906 log_packet_detailed("'flags' field error detected");
62907 }
62908 }
62909 if (BV_ISSET(fields, 7)) {
62910 log_packet_detailed(" field 'helptext' has changed");
62911#ifdef FREECIV_JSON_CONNECTION
62912 field_addr.name = "helptext";
62913#endif /* FREECIV_JSON_CONNECTION */
62914 e = 0;
62915 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
62916 if (e) {
62917 log_packet_detailed("'helptext' field error detected");
62918 }
62919 }
62920
62921 *old = *real_packet;
62922#endif /* FREECIV_DELTA_PROTOCOL */
62923#ifndef FREECIV_DELTA_PROTOCOL
62924#ifdef FREECIV_JSON_CONNECTION
62925 field_addr.name = "id";
62926#endif /* FREECIV_JSON_CONNECTION */
62927 e = 0;
62928 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
62929 if (e) {
62930 log_packet_detailed("'id' field error detected");
62931 }
62932#ifdef FREECIV_JSON_CONNECTION
62933 field_addr.name = "name";
62934#endif /* FREECIV_JSON_CONNECTION */
62935 e = 0;
62936 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
62937 if (e) {
62938 log_packet_detailed("'name' field error detected");
62939 }
62940#ifdef FREECIV_JSON_CONNECTION
62941 field_addr.name = "rule_name";
62942#endif /* FREECIV_JSON_CONNECTION */
62943 e = 0;
62944 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
62945 if (e) {
62946 log_packet_detailed("'rule_name' field error detected");
62947 }
62948#ifdef FREECIV_JSON_CONNECTION
62949 field_addr.name = "min_speed";
62950#endif /* FREECIV_JSON_CONNECTION */
62951 e = 0;
62952 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->min_speed);
62953 if (e) {
62954 log_packet_detailed("'min_speed' field error detected");
62955 }
62956#ifdef FREECIV_JSON_CONNECTION
62957 field_addr.name = "hp_loss_pct";
62958#endif /* FREECIV_JSON_CONNECTION */
62959 e = 0;
62960 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp_loss_pct);
62961 if (e) {
62962 log_packet_detailed("'hp_loss_pct' field error detected");
62963 }
62964#ifdef FREECIV_JSON_CONNECTION
62965 field_addr.name = "non_native_def_pct";
62966#endif /* FREECIV_JSON_CONNECTION */
62967 e = 0;
62968 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->non_native_def_pct);
62969 if (e) {
62970 log_packet_detailed("'non_native_def_pct' field error detected");
62971 }
62972#ifdef FREECIV_JSON_CONNECTION
62973 field_addr.name = "flags";
62974#endif /* FREECIV_JSON_CONNECTION */
62975 e = 0;
62976 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
62977 if (e) {
62978 log_packet_detailed("'flags' field error detected");
62979 }
62980#ifdef FREECIV_JSON_CONNECTION
62981 field_addr.name = "helptext";
62982#endif /* FREECIV_JSON_CONNECTION */
62983 e = 0;
62984 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
62985 if (e) {
62986 log_packet_detailed("'helptext' field error detected");
62987 }
62988
62989#endif
62991}
62992
62994{
62995 if (!pc->used) {
62996 log_error("WARNING: trying to send data to the closed connection %s",
62998 return -1;
62999 }
63000 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet != NULL, -1,
63001 "Handler for PACKET_RULESET_UNIT_CLASS not installed");
63002 return pc->phs.handlers->send[PACKET_RULESET_UNIT_CLASS].packet(pc, packet);
63003}
63004
63006{
63007 conn_list_iterate(dest, pconn) {
63010}
63011
63012#ifdef FREECIV_DELTA_PROTOCOL
63013#define hash_packet_ruleset_extra_100 hash_const
63014
63015#define cmp_packet_ruleset_extra_100 cmp_const
63016
63018#endif /* FREECIV_DELTA_PROTOCOL */
63019
63021{
63022#ifdef FREECIV_DELTA_PROTOCOL
63024 struct packet_ruleset_extra *old;
63025 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA;
63026#endif /* FREECIV_DELTA_PROTOCOL */
63028#ifdef FREECIV_JSON_CONNECTION
63029 struct plocation field_addr;
63030 {
63034 }
63035#endif /* FREECIV_JSON_CONNECTION */
63036
63037#ifdef FREECIV_DELTA_PROTOCOL
63038#ifdef FREECIV_JSON_CONNECTION
63039 field_addr.name = "fields";
63040#endif /* FREECIV_JSON_CONNECTION */
63041 DIO_BV_GET(&din, &field_addr, fields);
63042
63043#else /* FREECIV_DELTA_PROTOCOL */
63044#ifdef FREECIV_JSON_CONNECTION
63045 field_addr.name = "id";
63046#endif /* FREECIV_JSON_CONNECTION */
63047 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
63049 }
63050#ifdef FREECIV_JSON_CONNECTION
63051 field_addr.name = "name";
63052#endif /* FREECIV_JSON_CONNECTION */
63053 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63055 }
63056#ifdef FREECIV_JSON_CONNECTION
63057 field_addr.name = "rule_name";
63058#endif /* FREECIV_JSON_CONNECTION */
63059 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63060 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63061 }
63062#ifdef FREECIV_JSON_CONNECTION
63063 field_addr.name = "category";
63064#endif /* FREECIV_JSON_CONNECTION */
63065 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
63067 }
63068#ifdef FREECIV_JSON_CONNECTION
63069 field_addr.name = "causes";
63070#endif /* FREECIV_JSON_CONNECTION */
63071 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
63073 }
63074#ifdef FREECIV_JSON_CONNECTION
63075 field_addr.name = "rmcauses";
63076#endif /* FREECIV_JSON_CONNECTION */
63077 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
63079 }
63080#ifdef FREECIV_JSON_CONNECTION
63081 field_addr.name = "activity_gfx";
63082#endif /* FREECIV_JSON_CONNECTION */
63083 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
63084 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
63085 }
63086#ifdef FREECIV_JSON_CONNECTION
63087 field_addr.name = "act_gfx_alt";
63088#endif /* FREECIV_JSON_CONNECTION */
63089 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
63090 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
63091 }
63092#ifdef FREECIV_JSON_CONNECTION
63093 field_addr.name = "act_gfx_alt2";
63094#endif /* FREECIV_JSON_CONNECTION */
63095 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
63096 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
63097 }
63098#ifdef FREECIV_JSON_CONNECTION
63099 field_addr.name = "rmact_gfx";
63100#endif /* FREECIV_JSON_CONNECTION */
63101 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
63102 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
63103 }
63104#ifdef FREECIV_JSON_CONNECTION
63105 field_addr.name = "rmact_gfx_alt";
63106#endif /* FREECIV_JSON_CONNECTION */
63107 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
63108 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
63109 }
63110#ifdef FREECIV_JSON_CONNECTION
63111 field_addr.name = "rmact_gfx_alt2";
63112#endif /* FREECIV_JSON_CONNECTION */
63113 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
63114 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
63115 }
63116#ifdef FREECIV_JSON_CONNECTION
63117 field_addr.name = "graphic_str";
63118#endif /* FREECIV_JSON_CONNECTION */
63119 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
63120 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
63121 }
63122#ifdef FREECIV_JSON_CONNECTION
63123 field_addr.name = "graphic_alt";
63124#endif /* FREECIV_JSON_CONNECTION */
63125 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
63126 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
63127 }
63128#ifdef FREECIV_JSON_CONNECTION
63129 field_addr.name = "reqs_count";
63130#endif /* FREECIV_JSON_CONNECTION */
63131 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
63132 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
63133 }
63134#ifdef FREECIV_JSON_CONNECTION
63135 field_addr.name = "reqs";
63136#endif /* FREECIV_JSON_CONNECTION */
63137 if (real_packet->reqs_count > MAX_NUM_REQS) {
63138 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
63139 }
63140 {
63141 int i;
63142
63143#ifdef FREECIV_JSON_CONNECTION
63144 /* Enter array. */
63145 field_addr.sub_location = plocation_elem_new(0);
63146#endif /* FREECIV_JSON_CONNECTION */
63147
63148 for (i = 0; i < real_packet->reqs_count; i++) {
63149#ifdef FREECIV_JSON_CONNECTION
63150 field_addr.sub_location->number = i;
63151#endif /* FREECIV_JSON_CONNECTION */
63152
63153 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
63155 }
63156 }
63157
63158#ifdef FREECIV_JSON_CONNECTION
63159 /* Exit array. */
63160 FC_FREE(field_addr.sub_location);
63161#endif /* FREECIV_JSON_CONNECTION */
63162 }
63163#ifdef FREECIV_JSON_CONNECTION
63164 field_addr.name = "rmreqs_count";
63165#endif /* FREECIV_JSON_CONNECTION */
63166 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rmreqs_count)) {
63167 RECEIVE_PACKET_FIELD_ERROR(rmreqs_count);
63168 }
63169#ifdef FREECIV_JSON_CONNECTION
63170 field_addr.name = "rmreqs";
63171#endif /* FREECIV_JSON_CONNECTION */
63172 if (real_packet->rmreqs_count > MAX_NUM_REQS) {
63173 RECEIVE_PACKET_FIELD_ERROR(rmreqs, ": truncation array");
63174 }
63175 {
63176 int i;
63177
63178#ifdef FREECIV_JSON_CONNECTION
63179 /* Enter array. */
63180 field_addr.sub_location = plocation_elem_new(0);
63181#endif /* FREECIV_JSON_CONNECTION */
63182
63183 for (i = 0; i < real_packet->rmreqs_count; i++) {
63184#ifdef FREECIV_JSON_CONNECTION
63185 field_addr.sub_location->number = i;
63186#endif /* FREECIV_JSON_CONNECTION */
63187
63188 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs[i])) {
63190 }
63191 }
63192
63193#ifdef FREECIV_JSON_CONNECTION
63194 /* Exit array. */
63195 FC_FREE(field_addr.sub_location);
63196#endif /* FREECIV_JSON_CONNECTION */
63197 }
63198#ifdef FREECIV_JSON_CONNECTION
63199 field_addr.name = "appearance_chance";
63200#endif /* FREECIV_JSON_CONNECTION */
63201 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
63202 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
63203 }
63204#ifdef FREECIV_JSON_CONNECTION
63205 field_addr.name = "appearance_reqs_count";
63206#endif /* FREECIV_JSON_CONNECTION */
63207 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->appearance_reqs_count)) {
63208 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs_count);
63209 }
63210#ifdef FREECIV_JSON_CONNECTION
63211 field_addr.name = "appearance_reqs";
63212#endif /* FREECIV_JSON_CONNECTION */
63213 if (real_packet->appearance_reqs_count > MAX_NUM_REQS) {
63214 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs, ": truncation array");
63215 }
63216 {
63217 int i;
63218
63219#ifdef FREECIV_JSON_CONNECTION
63220 /* Enter array. */
63221 field_addr.sub_location = plocation_elem_new(0);
63222#endif /* FREECIV_JSON_CONNECTION */
63223
63224 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
63225#ifdef FREECIV_JSON_CONNECTION
63226 field_addr.sub_location->number = i;
63227#endif /* FREECIV_JSON_CONNECTION */
63228
63229 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs[i])) {
63230 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
63231 }
63232 }
63233
63234#ifdef FREECIV_JSON_CONNECTION
63235 /* Exit array. */
63236 FC_FREE(field_addr.sub_location);
63237#endif /* FREECIV_JSON_CONNECTION */
63238 }
63239#ifdef FREECIV_JSON_CONNECTION
63240 field_addr.name = "disappearance_chance";
63241#endif /* FREECIV_JSON_CONNECTION */
63242 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
63243 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
63244 }
63245#ifdef FREECIV_JSON_CONNECTION
63246 field_addr.name = "disappearance_reqs_count";
63247#endif /* FREECIV_JSON_CONNECTION */
63248 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->disappearance_reqs_count)) {
63249 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs_count);
63250 }
63251#ifdef FREECIV_JSON_CONNECTION
63252 field_addr.name = "disappearance_reqs";
63253#endif /* FREECIV_JSON_CONNECTION */
63254 if (real_packet->disappearance_reqs_count > MAX_NUM_REQS) {
63255 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs, ": truncation array");
63256 }
63257 {
63258 int i;
63259
63260#ifdef FREECIV_JSON_CONNECTION
63261 /* Enter array. */
63262 field_addr.sub_location = plocation_elem_new(0);
63263#endif /* FREECIV_JSON_CONNECTION */
63264
63265 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
63266#ifdef FREECIV_JSON_CONNECTION
63267 field_addr.sub_location->number = i;
63268#endif /* FREECIV_JSON_CONNECTION */
63269
63270 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs[i])) {
63271 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
63272 }
63273 }
63274
63275#ifdef FREECIV_JSON_CONNECTION
63276 /* Exit array. */
63277 FC_FREE(field_addr.sub_location);
63278#endif /* FREECIV_JSON_CONNECTION */
63279 }
63280#ifdef FREECIV_JSON_CONNECTION
63281 field_addr.name = "visibility_req";
63282#endif /* FREECIV_JSON_CONNECTION */
63283 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
63284 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
63285 }
63286#ifdef FREECIV_JSON_CONNECTION
63287 field_addr.name = "buildable";
63288#endif /* FREECIV_JSON_CONNECTION */
63289 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->buildable)) {
63290 RECEIVE_PACKET_FIELD_ERROR(buildable);
63291 }
63292#ifdef FREECIV_JSON_CONNECTION
63293 field_addr.name = "generated";
63294#endif /* FREECIV_JSON_CONNECTION */
63295 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->generated)) {
63296 RECEIVE_PACKET_FIELD_ERROR(generated);
63297 }
63298#ifdef FREECIV_JSON_CONNECTION
63299 field_addr.name = "build_time";
63300#endif /* FREECIV_JSON_CONNECTION */
63301 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
63302 RECEIVE_PACKET_FIELD_ERROR(build_time);
63303 }
63304#ifdef FREECIV_JSON_CONNECTION
63305 field_addr.name = "build_time_factor";
63306#endif /* FREECIV_JSON_CONNECTION */
63307 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
63308 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
63309 }
63310#ifdef FREECIV_JSON_CONNECTION
63311 field_addr.name = "removal_time";
63312#endif /* FREECIV_JSON_CONNECTION */
63313 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
63314 RECEIVE_PACKET_FIELD_ERROR(removal_time);
63315 }
63316#ifdef FREECIV_JSON_CONNECTION
63317 field_addr.name = "removal_time_factor";
63318#endif /* FREECIV_JSON_CONNECTION */
63319 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
63320 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
63321 }
63322#ifdef FREECIV_JSON_CONNECTION
63323 field_addr.name = "infracost";
63324#endif /* FREECIV_JSON_CONNECTION */
63325 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
63326 RECEIVE_PACKET_FIELD_ERROR(infracost);
63327 }
63328#ifdef FREECIV_JSON_CONNECTION
63329 field_addr.name = "defense_bonus";
63330#endif /* FREECIV_JSON_CONNECTION */
63331 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
63332 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
63333 }
63334#ifdef FREECIV_JSON_CONNECTION
63335 field_addr.name = "eus";
63336#endif /* FREECIV_JSON_CONNECTION */
63337 {
63338 int readin;
63339
63340 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63342 }
63343 real_packet->eus = readin;
63344 }
63345#ifdef FREECIV_JSON_CONNECTION
63346 field_addr.name = "native_to";
63347#endif /* FREECIV_JSON_CONNECTION */
63348 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
63349 RECEIVE_PACKET_FIELD_ERROR(native_to);
63350 }
63351#ifdef FREECIV_JSON_CONNECTION
63352 field_addr.name = "flags";
63353#endif /* FREECIV_JSON_CONNECTION */
63354 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63356 }
63357#ifdef FREECIV_JSON_CONNECTION
63358 field_addr.name = "hidden_by";
63359#endif /* FREECIV_JSON_CONNECTION */
63360 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
63361 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
63362 }
63363#ifdef FREECIV_JSON_CONNECTION
63364 field_addr.name = "bridged_over";
63365#endif /* FREECIV_JSON_CONNECTION */
63366 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
63367 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
63368 }
63369#ifdef FREECIV_JSON_CONNECTION
63370 field_addr.name = "conflicts";
63371#endif /* FREECIV_JSON_CONNECTION */
63372 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
63373 RECEIVE_PACKET_FIELD_ERROR(conflicts);
63374 }
63375#ifdef FREECIV_JSON_CONNECTION
63376 field_addr.name = "no_aggr_near_city";
63377#endif /* FREECIV_JSON_CONNECTION */
63378 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
63379 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
63380 }
63381#ifdef FREECIV_JSON_CONNECTION
63382 field_addr.name = "helptext";
63383#endif /* FREECIV_JSON_CONNECTION */
63384 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
63386 }
63387#endif
63388 log_packet_detailed("packet_ruleset_extra_100: got info about ()");
63389
63390#ifdef FREECIV_DELTA_PROTOCOL
63391 if (NULL == *hash) {
63393 NULL, NULL, NULL, free);
63394 }
63395
63396 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
63397 *real_packet = *old;
63398 } else {
63399 log_packet_detailed(" no old info");
63400 memset(real_packet, 0, sizeof(*real_packet));
63401 }
63402
63403 if (BV_ISSET(fields, 0)) {
63404 log_packet_detailed(" got field 'id'");
63405#ifdef FREECIV_JSON_CONNECTION
63406 field_addr.name = "id";
63407#endif /* FREECIV_JSON_CONNECTION */
63408 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
63410 }
63411 }
63412 if (BV_ISSET(fields, 1)) {
63413 log_packet_detailed(" got field 'name'");
63414#ifdef FREECIV_JSON_CONNECTION
63415 field_addr.name = "name";
63416#endif /* FREECIV_JSON_CONNECTION */
63417 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
63419 }
63420 }
63421 if (BV_ISSET(fields, 2)) {
63422 log_packet_detailed(" got field 'rule_name'");
63423#ifdef FREECIV_JSON_CONNECTION
63424 field_addr.name = "rule_name";
63425#endif /* FREECIV_JSON_CONNECTION */
63426 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
63427 RECEIVE_PACKET_FIELD_ERROR(rule_name);
63428 }
63429 }
63430 if (BV_ISSET(fields, 3)) {
63431 log_packet_detailed(" got field 'category'");
63432#ifdef FREECIV_JSON_CONNECTION
63433 field_addr.name = "category";
63434#endif /* FREECIV_JSON_CONNECTION */
63435 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
63437 }
63438 }
63439 if (BV_ISSET(fields, 4)) {
63440 log_packet_detailed(" got field 'causes'");
63441#ifdef FREECIV_JSON_CONNECTION
63442 field_addr.name = "causes";
63443#endif /* FREECIV_JSON_CONNECTION */
63444 if (!DIO_BV_GET(&din, &field_addr, real_packet->causes)) {
63446 }
63447 }
63448 if (BV_ISSET(fields, 5)) {
63449 log_packet_detailed(" got field 'rmcauses'");
63450#ifdef FREECIV_JSON_CONNECTION
63451 field_addr.name = "rmcauses";
63452#endif /* FREECIV_JSON_CONNECTION */
63453 if (!DIO_BV_GET(&din, &field_addr, real_packet->rmcauses)) {
63455 }
63456 }
63457 if (BV_ISSET(fields, 6)) {
63458 log_packet_detailed(" got field 'activity_gfx'");
63459#ifdef FREECIV_JSON_CONNECTION
63460 field_addr.name = "activity_gfx";
63461#endif /* FREECIV_JSON_CONNECTION */
63462 if (!DIO_GET(string, &din, &field_addr, real_packet->activity_gfx, sizeof(real_packet->activity_gfx))) {
63463 RECEIVE_PACKET_FIELD_ERROR(activity_gfx);
63464 }
63465 }
63466 if (BV_ISSET(fields, 7)) {
63467 log_packet_detailed(" got field 'act_gfx_alt'");
63468#ifdef FREECIV_JSON_CONNECTION
63469 field_addr.name = "act_gfx_alt";
63470#endif /* FREECIV_JSON_CONNECTION */
63471 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt, sizeof(real_packet->act_gfx_alt))) {
63472 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt);
63473 }
63474 }
63475 if (BV_ISSET(fields, 8)) {
63476 log_packet_detailed(" got field 'act_gfx_alt2'");
63477#ifdef FREECIV_JSON_CONNECTION
63478 field_addr.name = "act_gfx_alt2";
63479#endif /* FREECIV_JSON_CONNECTION */
63480 if (!DIO_GET(string, &din, &field_addr, real_packet->act_gfx_alt2, sizeof(real_packet->act_gfx_alt2))) {
63481 RECEIVE_PACKET_FIELD_ERROR(act_gfx_alt2);
63482 }
63483 }
63484 if (BV_ISSET(fields, 9)) {
63485 log_packet_detailed(" got field 'rmact_gfx'");
63486#ifdef FREECIV_JSON_CONNECTION
63487 field_addr.name = "rmact_gfx";
63488#endif /* FREECIV_JSON_CONNECTION */
63489 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx, sizeof(real_packet->rmact_gfx))) {
63490 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx);
63491 }
63492 }
63493 if (BV_ISSET(fields, 10)) {
63494 log_packet_detailed(" got field 'rmact_gfx_alt'");
63495#ifdef FREECIV_JSON_CONNECTION
63496 field_addr.name = "rmact_gfx_alt";
63497#endif /* FREECIV_JSON_CONNECTION */
63498 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt, sizeof(real_packet->rmact_gfx_alt))) {
63499 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt);
63500 }
63501 }
63502 if (BV_ISSET(fields, 11)) {
63503 log_packet_detailed(" got field 'rmact_gfx_alt2'");
63504#ifdef FREECIV_JSON_CONNECTION
63505 field_addr.name = "rmact_gfx_alt2";
63506#endif /* FREECIV_JSON_CONNECTION */
63507 if (!DIO_GET(string, &din, &field_addr, real_packet->rmact_gfx_alt2, sizeof(real_packet->rmact_gfx_alt2))) {
63508 RECEIVE_PACKET_FIELD_ERROR(rmact_gfx_alt2);
63509 }
63510 }
63511 if (BV_ISSET(fields, 12)) {
63512 log_packet_detailed(" got field 'graphic_str'");
63513#ifdef FREECIV_JSON_CONNECTION
63514 field_addr.name = "graphic_str";
63515#endif /* FREECIV_JSON_CONNECTION */
63516 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_str, sizeof(real_packet->graphic_str))) {
63517 RECEIVE_PACKET_FIELD_ERROR(graphic_str);
63518 }
63519 }
63520 if (BV_ISSET(fields, 13)) {
63521 log_packet_detailed(" got field 'graphic_alt'");
63522#ifdef FREECIV_JSON_CONNECTION
63523 field_addr.name = "graphic_alt";
63524#endif /* FREECIV_JSON_CONNECTION */
63525 if (!DIO_GET(string, &din, &field_addr, real_packet->graphic_alt, sizeof(real_packet->graphic_alt))) {
63526 RECEIVE_PACKET_FIELD_ERROR(graphic_alt);
63527 }
63528 }
63529 if (BV_ISSET(fields, 14)) {
63530 log_packet_detailed(" got field 'reqs_count'");
63531#ifdef FREECIV_JSON_CONNECTION
63532 field_addr.name = "reqs_count";
63533#endif /* FREECIV_JSON_CONNECTION */
63534 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
63535 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
63536 }
63537 }
63538 if (BV_ISSET(fields, 15)) {
63539 log_packet_detailed(" got field 'reqs'");
63540#ifdef FREECIV_JSON_CONNECTION
63541 field_addr.name = "reqs";
63542#endif /* FREECIV_JSON_CONNECTION */
63543 if (real_packet->reqs_count > MAX_NUM_REQS) {
63544 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
63545 }
63546 {
63547 int i;
63548
63549#ifdef FREECIV_JSON_CONNECTION
63550 /* Enter array. */
63551 field_addr.sub_location = plocation_elem_new(0);
63552#endif /* FREECIV_JSON_CONNECTION */
63553
63554 for (i = 0; i < real_packet->reqs_count; i++) {
63555#ifdef FREECIV_JSON_CONNECTION
63556 field_addr.sub_location->number = i;
63557#endif /* FREECIV_JSON_CONNECTION */
63558
63559 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
63561 }
63562 }
63563
63564#ifdef FREECIV_JSON_CONNECTION
63565 /* Exit array. */
63566 FC_FREE(field_addr.sub_location);
63567#endif /* FREECIV_JSON_CONNECTION */
63568 }
63569 }
63570 if (BV_ISSET(fields, 16)) {
63571 log_packet_detailed(" got field 'rmreqs_count'");
63572#ifdef FREECIV_JSON_CONNECTION
63573 field_addr.name = "rmreqs_count";
63574#endif /* FREECIV_JSON_CONNECTION */
63575 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rmreqs_count)) {
63576 RECEIVE_PACKET_FIELD_ERROR(rmreqs_count);
63577 }
63578 }
63579 if (BV_ISSET(fields, 17)) {
63580 log_packet_detailed(" got field 'rmreqs'");
63581#ifdef FREECIV_JSON_CONNECTION
63582 field_addr.name = "rmreqs";
63583#endif /* FREECIV_JSON_CONNECTION */
63584 if (real_packet->rmreqs_count > MAX_NUM_REQS) {
63585 RECEIVE_PACKET_FIELD_ERROR(rmreqs, ": truncation array");
63586 }
63587 {
63588 int i;
63589
63590#ifdef FREECIV_JSON_CONNECTION
63591 /* Enter array. */
63592 field_addr.sub_location = plocation_elem_new(0);
63593#endif /* FREECIV_JSON_CONNECTION */
63594
63595 for (i = 0; i < real_packet->rmreqs_count; i++) {
63596#ifdef FREECIV_JSON_CONNECTION
63597 field_addr.sub_location->number = i;
63598#endif /* FREECIV_JSON_CONNECTION */
63599
63600 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->rmreqs[i])) {
63602 }
63603 }
63604
63605#ifdef FREECIV_JSON_CONNECTION
63606 /* Exit array. */
63607 FC_FREE(field_addr.sub_location);
63608#endif /* FREECIV_JSON_CONNECTION */
63609 }
63610 }
63611 if (BV_ISSET(fields, 18)) {
63612 log_packet_detailed(" got field 'appearance_chance'");
63613#ifdef FREECIV_JSON_CONNECTION
63614 field_addr.name = "appearance_chance";
63615#endif /* FREECIV_JSON_CONNECTION */
63616 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->appearance_chance)) {
63617 RECEIVE_PACKET_FIELD_ERROR(appearance_chance);
63618 }
63619 }
63620 if (BV_ISSET(fields, 19)) {
63621 log_packet_detailed(" got field 'appearance_reqs_count'");
63622#ifdef FREECIV_JSON_CONNECTION
63623 field_addr.name = "appearance_reqs_count";
63624#endif /* FREECIV_JSON_CONNECTION */
63625 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->appearance_reqs_count)) {
63626 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs_count);
63627 }
63628 }
63629 if (BV_ISSET(fields, 20)) {
63630 log_packet_detailed(" got field 'appearance_reqs'");
63631#ifdef FREECIV_JSON_CONNECTION
63632 field_addr.name = "appearance_reqs";
63633#endif /* FREECIV_JSON_CONNECTION */
63634 if (real_packet->appearance_reqs_count > MAX_NUM_REQS) {
63635 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs, ": truncation array");
63636 }
63637 {
63638 int i;
63639
63640#ifdef FREECIV_JSON_CONNECTION
63641 /* Enter array. */
63642 field_addr.sub_location = plocation_elem_new(0);
63643#endif /* FREECIV_JSON_CONNECTION */
63644
63645 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
63646#ifdef FREECIV_JSON_CONNECTION
63647 field_addr.sub_location->number = i;
63648#endif /* FREECIV_JSON_CONNECTION */
63649
63650 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->appearance_reqs[i])) {
63651 RECEIVE_PACKET_FIELD_ERROR(appearance_reqs);
63652 }
63653 }
63654
63655#ifdef FREECIV_JSON_CONNECTION
63656 /* Exit array. */
63657 FC_FREE(field_addr.sub_location);
63658#endif /* FREECIV_JSON_CONNECTION */
63659 }
63660 }
63661 if (BV_ISSET(fields, 21)) {
63662 log_packet_detailed(" got field 'disappearance_chance'");
63663#ifdef FREECIV_JSON_CONNECTION
63664 field_addr.name = "disappearance_chance";
63665#endif /* FREECIV_JSON_CONNECTION */
63666 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->disappearance_chance)) {
63667 RECEIVE_PACKET_FIELD_ERROR(disappearance_chance);
63668 }
63669 }
63670 if (BV_ISSET(fields, 22)) {
63671 log_packet_detailed(" got field 'disappearance_reqs_count'");
63672#ifdef FREECIV_JSON_CONNECTION
63673 field_addr.name = "disappearance_reqs_count";
63674#endif /* FREECIV_JSON_CONNECTION */
63675 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->disappearance_reqs_count)) {
63676 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs_count);
63677 }
63678 }
63679 if (BV_ISSET(fields, 23)) {
63680 log_packet_detailed(" got field 'disappearance_reqs'");
63681#ifdef FREECIV_JSON_CONNECTION
63682 field_addr.name = "disappearance_reqs";
63683#endif /* FREECIV_JSON_CONNECTION */
63684 if (real_packet->disappearance_reqs_count > MAX_NUM_REQS) {
63685 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs, ": truncation array");
63686 }
63687 {
63688 int i;
63689
63690#ifdef FREECIV_JSON_CONNECTION
63691 /* Enter array. */
63692 field_addr.sub_location = plocation_elem_new(0);
63693#endif /* FREECIV_JSON_CONNECTION */
63694
63695 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
63696#ifdef FREECIV_JSON_CONNECTION
63697 field_addr.sub_location->number = i;
63698#endif /* FREECIV_JSON_CONNECTION */
63699
63700 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->disappearance_reqs[i])) {
63701 RECEIVE_PACKET_FIELD_ERROR(disappearance_reqs);
63702 }
63703 }
63704
63705#ifdef FREECIV_JSON_CONNECTION
63706 /* Exit array. */
63707 FC_FREE(field_addr.sub_location);
63708#endif /* FREECIV_JSON_CONNECTION */
63709 }
63710 }
63711 if (BV_ISSET(fields, 24)) {
63712 log_packet_detailed(" got field 'visibility_req'");
63713#ifdef FREECIV_JSON_CONNECTION
63714 field_addr.name = "visibility_req";
63715#endif /* FREECIV_JSON_CONNECTION */
63716 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->visibility_req)) {
63717 RECEIVE_PACKET_FIELD_ERROR(visibility_req);
63718 }
63719 }
63720 real_packet->buildable = BV_ISSET(fields, 25);
63721 real_packet->generated = BV_ISSET(fields, 26);
63722 if (BV_ISSET(fields, 27)) {
63723 log_packet_detailed(" got field 'build_time'");
63724#ifdef FREECIV_JSON_CONNECTION
63725 field_addr.name = "build_time";
63726#endif /* FREECIV_JSON_CONNECTION */
63727 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time)) {
63728 RECEIVE_PACKET_FIELD_ERROR(build_time);
63729 }
63730 }
63731 if (BV_ISSET(fields, 28)) {
63732 log_packet_detailed(" got field 'build_time_factor'");
63733#ifdef FREECIV_JSON_CONNECTION
63734 field_addr.name = "build_time_factor";
63735#endif /* FREECIV_JSON_CONNECTION */
63736 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->build_time_factor)) {
63737 RECEIVE_PACKET_FIELD_ERROR(build_time_factor);
63738 }
63739 }
63740 if (BV_ISSET(fields, 29)) {
63741 log_packet_detailed(" got field 'removal_time'");
63742#ifdef FREECIV_JSON_CONNECTION
63743 field_addr.name = "removal_time";
63744#endif /* FREECIV_JSON_CONNECTION */
63745 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time)) {
63746 RECEIVE_PACKET_FIELD_ERROR(removal_time);
63747 }
63748 }
63749 if (BV_ISSET(fields, 30)) {
63750 log_packet_detailed(" got field 'removal_time_factor'");
63751#ifdef FREECIV_JSON_CONNECTION
63752 field_addr.name = "removal_time_factor";
63753#endif /* FREECIV_JSON_CONNECTION */
63754 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->removal_time_factor)) {
63755 RECEIVE_PACKET_FIELD_ERROR(removal_time_factor);
63756 }
63757 }
63758 if (BV_ISSET(fields, 31)) {
63759 log_packet_detailed(" got field 'infracost'");
63760#ifdef FREECIV_JSON_CONNECTION
63761 field_addr.name = "infracost";
63762#endif /* FREECIV_JSON_CONNECTION */
63763 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->infracost)) {
63764 RECEIVE_PACKET_FIELD_ERROR(infracost);
63765 }
63766 }
63767 if (BV_ISSET(fields, 32)) {
63768 log_packet_detailed(" got field 'defense_bonus'");
63769#ifdef FREECIV_JSON_CONNECTION
63770 field_addr.name = "defense_bonus";
63771#endif /* FREECIV_JSON_CONNECTION */
63772 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->defense_bonus)) {
63773 RECEIVE_PACKET_FIELD_ERROR(defense_bonus);
63774 }
63775 }
63776 if (BV_ISSET(fields, 33)) {
63777 log_packet_detailed(" got field 'eus'");
63778#ifdef FREECIV_JSON_CONNECTION
63779 field_addr.name = "eus";
63780#endif /* FREECIV_JSON_CONNECTION */
63781 {
63782 int readin;
63783
63784 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
63786 }
63787 real_packet->eus = readin;
63788 }
63789 }
63790 if (BV_ISSET(fields, 34)) {
63791 log_packet_detailed(" got field 'native_to'");
63792#ifdef FREECIV_JSON_CONNECTION
63793 field_addr.name = "native_to";
63794#endif /* FREECIV_JSON_CONNECTION */
63795 if (!DIO_BV_GET(&din, &field_addr, real_packet->native_to)) {
63796 RECEIVE_PACKET_FIELD_ERROR(native_to);
63797 }
63798 }
63799 if (BV_ISSET(fields, 35)) {
63800 log_packet_detailed(" got field 'flags'");
63801#ifdef FREECIV_JSON_CONNECTION
63802 field_addr.name = "flags";
63803#endif /* FREECIV_JSON_CONNECTION */
63804 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
63806 }
63807 }
63808 if (BV_ISSET(fields, 36)) {
63809 log_packet_detailed(" got field 'hidden_by'");
63810#ifdef FREECIV_JSON_CONNECTION
63811 field_addr.name = "hidden_by";
63812#endif /* FREECIV_JSON_CONNECTION */
63813 if (!DIO_BV_GET(&din, &field_addr, real_packet->hidden_by)) {
63814 RECEIVE_PACKET_FIELD_ERROR(hidden_by);
63815 }
63816 }
63817 if (BV_ISSET(fields, 37)) {
63818 log_packet_detailed(" got field 'bridged_over'");
63819#ifdef FREECIV_JSON_CONNECTION
63820 field_addr.name = "bridged_over";
63821#endif /* FREECIV_JSON_CONNECTION */
63822 if (!DIO_BV_GET(&din, &field_addr, real_packet->bridged_over)) {
63823 RECEIVE_PACKET_FIELD_ERROR(bridged_over);
63824 }
63825 }
63826 if (BV_ISSET(fields, 38)) {
63827 log_packet_detailed(" got field 'conflicts'");
63828#ifdef FREECIV_JSON_CONNECTION
63829 field_addr.name = "conflicts";
63830#endif /* FREECIV_JSON_CONNECTION */
63831 if (!DIO_BV_GET(&din, &field_addr, real_packet->conflicts)) {
63832 RECEIVE_PACKET_FIELD_ERROR(conflicts);
63833 }
63834 }
63835 if (BV_ISSET(fields, 39)) {
63836 log_packet_detailed(" got field 'no_aggr_near_city'");
63837#ifdef FREECIV_JSON_CONNECTION
63838 field_addr.name = "no_aggr_near_city";
63839#endif /* FREECIV_JSON_CONNECTION */
63840 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->no_aggr_near_city)) {
63841 RECEIVE_PACKET_FIELD_ERROR(no_aggr_near_city);
63842 }
63843 }
63844 if (BV_ISSET(fields, 40)) {
63845 log_packet_detailed(" got field 'helptext'");
63846#ifdef FREECIV_JSON_CONNECTION
63847 field_addr.name = "helptext";
63848#endif /* FREECIV_JSON_CONNECTION */
63849 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
63851 }
63852 }
63853
63854 if (NULL == old) {
63855 old = fc_malloc(sizeof(*old));
63856 *old = *real_packet;
63857 genhash_insert(*hash, old, old);
63858 } else {
63859 *old = *real_packet;
63860 }
63861
63862#endif /* FREECIV_DELTA_PROTOCOL */
63864}
63865
63866static int send_packet_ruleset_extra_100(struct connection *pc, const struct packet_ruleset_extra *packet)
63867{
63868 const struct packet_ruleset_extra *real_packet = packet;
63869 int e;
63870#ifdef FREECIV_DELTA_PROTOCOL
63872 struct packet_ruleset_extra *old;
63873 bool differ;
63874 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA;
63875#endif /* FREECIV_DELTA_PROTOCOL */
63877#ifdef FREECIV_JSON_CONNECTION
63878 struct plocation field_addr;
63879 {
63883 }
63884#endif /* FREECIV_JSON_CONNECTION */
63885
63886 log_packet_detailed("packet_ruleset_extra_100: sending info about ()");
63887
63888#ifdef FREECIV_DELTA_PROTOCOL
63889 if (NULL == *hash) {
63891 NULL, NULL, NULL, free);
63892 }
63893 BV_CLR_ALL(fields);
63894
63895 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
63896 old = fc_malloc(sizeof(*old));
63897 *old = *real_packet;
63898 genhash_insert(*hash, old, old);
63899 memset(old, 0, sizeof(*old));
63900 }
63901 differ = (old->id != real_packet->id);
63902 if (differ) {
63903 BV_SET(fields, 0);
63904 }
63905
63906 differ = (strcmp(old->name, real_packet->name) != 0);
63907 if (differ) {
63908 BV_SET(fields, 1);
63909 }
63910
63911 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
63912 if (differ) {
63913 BV_SET(fields, 2);
63914 }
63915
63916 differ = (old->category != real_packet->category);
63917 if (differ) {
63918 BV_SET(fields, 3);
63919 }
63920
63921 differ = !BV_ARE_EQUAL(old->causes, real_packet->causes);
63922 if (differ) {
63923 BV_SET(fields, 4);
63924 }
63925
63926 differ = !BV_ARE_EQUAL(old->rmcauses, real_packet->rmcauses);
63927 if (differ) {
63928 BV_SET(fields, 5);
63929 }
63930
63931 differ = (strcmp(old->activity_gfx, real_packet->activity_gfx) != 0);
63932 if (differ) {
63933 BV_SET(fields, 6);
63934 }
63935
63936 differ = (strcmp(old->act_gfx_alt, real_packet->act_gfx_alt) != 0);
63937 if (differ) {
63938 BV_SET(fields, 7);
63939 }
63940
63941 differ = (strcmp(old->act_gfx_alt2, real_packet->act_gfx_alt2) != 0);
63942 if (differ) {
63943 BV_SET(fields, 8);
63944 }
63945
63946 differ = (strcmp(old->rmact_gfx, real_packet->rmact_gfx) != 0);
63947 if (differ) {
63948 BV_SET(fields, 9);
63949 }
63950
63951 differ = (strcmp(old->rmact_gfx_alt, real_packet->rmact_gfx_alt) != 0);
63952 if (differ) {
63953 BV_SET(fields, 10);
63954 }
63955
63956 differ = (strcmp(old->rmact_gfx_alt2, real_packet->rmact_gfx_alt2) != 0);
63957 if (differ) {
63958 BV_SET(fields, 11);
63959 }
63960
63961 differ = (strcmp(old->graphic_str, real_packet->graphic_str) != 0);
63962 if (differ) {
63963 BV_SET(fields, 12);
63964 }
63965
63966 differ = (strcmp(old->graphic_alt, real_packet->graphic_alt) != 0);
63967 if (differ) {
63968 BV_SET(fields, 13);
63969 }
63970
63971 differ = (old->reqs_count != real_packet->reqs_count);
63972 if (differ) {
63973 BV_SET(fields, 14);
63974 }
63975
63976 differ = (old->reqs_count != real_packet->reqs_count);
63977 if (!differ) {
63978 int i;
63979
63980 for (i = 0; i < real_packet->reqs_count; i++) {
63981 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
63982 if (differ) {
63983 break;
63984 }
63985 }
63986 }
63987 if (differ) {
63988 BV_SET(fields, 15);
63989 }
63990
63991 differ = (old->rmreqs_count != real_packet->rmreqs_count);
63992 if (differ) {
63993 BV_SET(fields, 16);
63994 }
63995
63996 differ = (old->rmreqs_count != real_packet->rmreqs_count);
63997 if (!differ) {
63998 int i;
63999
64000 for (i = 0; i < real_packet->rmreqs_count; i++) {
64001 differ = !are_requirements_equal(&old->rmreqs[i], &real_packet->rmreqs[i]);
64002 if (differ) {
64003 break;
64004 }
64005 }
64006 }
64007 if (differ) {
64008 BV_SET(fields, 17);
64009 }
64010
64011 differ = (old->appearance_chance != real_packet->appearance_chance);
64012 if (differ) {
64013 BV_SET(fields, 18);
64014 }
64015
64016 differ = (old->appearance_reqs_count != real_packet->appearance_reqs_count);
64017 if (differ) {
64018 BV_SET(fields, 19);
64019 }
64020
64021 differ = (old->appearance_reqs_count != real_packet->appearance_reqs_count);
64022 if (!differ) {
64023 int i;
64024
64025 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
64026 differ = !are_requirements_equal(&old->appearance_reqs[i], &real_packet->appearance_reqs[i]);
64027 if (differ) {
64028 break;
64029 }
64030 }
64031 }
64032 if (differ) {
64033 BV_SET(fields, 20);
64034 }
64035
64036 differ = (old->disappearance_chance != real_packet->disappearance_chance);
64037 if (differ) {
64038 BV_SET(fields, 21);
64039 }
64040
64041 differ = (old->disappearance_reqs_count != real_packet->disappearance_reqs_count);
64042 if (differ) {
64043 BV_SET(fields, 22);
64044 }
64045
64046 differ = (old->disappearance_reqs_count != real_packet->disappearance_reqs_count);
64047 if (!differ) {
64048 int i;
64049
64050 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
64051 differ = !are_requirements_equal(&old->disappearance_reqs[i], &real_packet->disappearance_reqs[i]);
64052 if (differ) {
64053 break;
64054 }
64055 }
64056 }
64057 if (differ) {
64058 BV_SET(fields, 23);
64059 }
64060
64061 differ = (old->visibility_req != real_packet->visibility_req);
64062 if (differ) {
64063 BV_SET(fields, 24);
64064 }
64065
64066 if (packet->buildable) {
64067 BV_SET(fields, 25);
64068 }
64069
64070 if (packet->generated) {
64071 BV_SET(fields, 26);
64072 }
64073
64074 differ = (old->build_time != real_packet->build_time);
64075 if (differ) {
64076 BV_SET(fields, 27);
64077 }
64078
64079 differ = (old->build_time_factor != real_packet->build_time_factor);
64080 if (differ) {
64081 BV_SET(fields, 28);
64082 }
64083
64084 differ = (old->removal_time != real_packet->removal_time);
64085 if (differ) {
64086 BV_SET(fields, 29);
64087 }
64088
64089 differ = (old->removal_time_factor != real_packet->removal_time_factor);
64090 if (differ) {
64091 BV_SET(fields, 30);
64092 }
64093
64094 differ = (old->infracost != real_packet->infracost);
64095 if (differ) {
64096 BV_SET(fields, 31);
64097 }
64098
64099 differ = (old->defense_bonus != real_packet->defense_bonus);
64100 if (differ) {
64101 BV_SET(fields, 32);
64102 }
64103
64104 differ = (old->eus != real_packet->eus);
64105 if (differ) {
64106 BV_SET(fields, 33);
64107 }
64108
64109 differ = !BV_ARE_EQUAL(old->native_to, real_packet->native_to);
64110 if (differ) {
64111 BV_SET(fields, 34);
64112 }
64113
64114 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
64115 if (differ) {
64116 BV_SET(fields, 35);
64117 }
64118
64119 differ = !BV_ARE_EQUAL(old->hidden_by, real_packet->hidden_by);
64120 if (differ) {
64121 BV_SET(fields, 36);
64122 }
64123
64124 differ = !BV_ARE_EQUAL(old->bridged_over, real_packet->bridged_over);
64125 if (differ) {
64126 BV_SET(fields, 37);
64127 }
64128
64129 differ = !BV_ARE_EQUAL(old->conflicts, real_packet->conflicts);
64130 if (differ) {
64131 BV_SET(fields, 38);
64132 }
64133
64134 differ = (old->no_aggr_near_city != real_packet->no_aggr_near_city);
64135 if (differ) {
64136 BV_SET(fields, 39);
64137 }
64138
64139 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
64140 if (differ) {
64141 BV_SET(fields, 40);
64142 }
64143
64144
64145#ifdef FREECIV_JSON_CONNECTION
64146 field_addr.name = "fields";
64147#endif /* FREECIV_JSON_CONNECTION */
64148 e = 0;
64149 e |= DIO_BV_PUT(&dout, &field_addr, fields);
64150 if (e) {
64151 log_packet_detailed("fields bitvector error detected");
64152 }
64153
64154 if (BV_ISSET(fields, 0)) {
64155 log_packet_detailed(" field 'id' has changed");
64156#ifdef FREECIV_JSON_CONNECTION
64157 field_addr.name = "id";
64158#endif /* FREECIV_JSON_CONNECTION */
64159 e = 0;
64160 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64161 if (e) {
64162 log_packet_detailed("'id' field error detected");
64163 }
64164 }
64165 if (BV_ISSET(fields, 1)) {
64166 log_packet_detailed(" field 'name' has changed");
64167#ifdef FREECIV_JSON_CONNECTION
64168 field_addr.name = "name";
64169#endif /* FREECIV_JSON_CONNECTION */
64170 e = 0;
64171 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64172 if (e) {
64173 log_packet_detailed("'name' field error detected");
64174 }
64175 }
64176 if (BV_ISSET(fields, 2)) {
64177 log_packet_detailed(" field 'rule_name' has changed");
64178#ifdef FREECIV_JSON_CONNECTION
64179 field_addr.name = "rule_name";
64180#endif /* FREECIV_JSON_CONNECTION */
64181 e = 0;
64182 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64183 if (e) {
64184 log_packet_detailed("'rule_name' field error detected");
64185 }
64186 }
64187 if (BV_ISSET(fields, 3)) {
64188 log_packet_detailed(" field 'category' has changed");
64189#ifdef FREECIV_JSON_CONNECTION
64190 field_addr.name = "category";
64191#endif /* FREECIV_JSON_CONNECTION */
64192 e = 0;
64193 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
64194 if (e) {
64195 log_packet_detailed("'category' field error detected");
64196 }
64197 }
64198 if (BV_ISSET(fields, 4)) {
64199 log_packet_detailed(" field 'causes' has changed");
64200#ifdef FREECIV_JSON_CONNECTION
64201 field_addr.name = "causes";
64202#endif /* FREECIV_JSON_CONNECTION */
64203 e = 0;
64204 e |= DIO_BV_PUT(&dout, &field_addr, packet->causes);
64205 if (e) {
64206 log_packet_detailed("'causes' field error detected");
64207 }
64208 }
64209 if (BV_ISSET(fields, 5)) {
64210 log_packet_detailed(" field 'rmcauses' has changed");
64211#ifdef FREECIV_JSON_CONNECTION
64212 field_addr.name = "rmcauses";
64213#endif /* FREECIV_JSON_CONNECTION */
64214 e = 0;
64215 e |= DIO_BV_PUT(&dout, &field_addr, packet->rmcauses);
64216 if (e) {
64217 log_packet_detailed("'rmcauses' field error detected");
64218 }
64219 }
64220 if (BV_ISSET(fields, 6)) {
64221 log_packet_detailed(" field 'activity_gfx' has changed");
64222#ifdef FREECIV_JSON_CONNECTION
64223 field_addr.name = "activity_gfx";
64224#endif /* FREECIV_JSON_CONNECTION */
64225 e = 0;
64226 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
64227 if (e) {
64228 log_packet_detailed("'activity_gfx' field error detected");
64229 }
64230 }
64231 if (BV_ISSET(fields, 7)) {
64232 log_packet_detailed(" field 'act_gfx_alt' has changed");
64233#ifdef FREECIV_JSON_CONNECTION
64234 field_addr.name = "act_gfx_alt";
64235#endif /* FREECIV_JSON_CONNECTION */
64236 e = 0;
64237 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
64238 if (e) {
64239 log_packet_detailed("'act_gfx_alt' field error detected");
64240 }
64241 }
64242 if (BV_ISSET(fields, 8)) {
64243 log_packet_detailed(" field 'act_gfx_alt2' has changed");
64244#ifdef FREECIV_JSON_CONNECTION
64245 field_addr.name = "act_gfx_alt2";
64246#endif /* FREECIV_JSON_CONNECTION */
64247 e = 0;
64248 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
64249 if (e) {
64250 log_packet_detailed("'act_gfx_alt2' field error detected");
64251 }
64252 }
64253 if (BV_ISSET(fields, 9)) {
64254 log_packet_detailed(" field 'rmact_gfx' has changed");
64255#ifdef FREECIV_JSON_CONNECTION
64256 field_addr.name = "rmact_gfx";
64257#endif /* FREECIV_JSON_CONNECTION */
64258 e = 0;
64259 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
64260 if (e) {
64261 log_packet_detailed("'rmact_gfx' field error detected");
64262 }
64263 }
64264 if (BV_ISSET(fields, 10)) {
64265 log_packet_detailed(" field 'rmact_gfx_alt' has changed");
64266#ifdef FREECIV_JSON_CONNECTION
64267 field_addr.name = "rmact_gfx_alt";
64268#endif /* FREECIV_JSON_CONNECTION */
64269 e = 0;
64270 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
64271 if (e) {
64272 log_packet_detailed("'rmact_gfx_alt' field error detected");
64273 }
64274 }
64275 if (BV_ISSET(fields, 11)) {
64276 log_packet_detailed(" field 'rmact_gfx_alt2' has changed");
64277#ifdef FREECIV_JSON_CONNECTION
64278 field_addr.name = "rmact_gfx_alt2";
64279#endif /* FREECIV_JSON_CONNECTION */
64280 e = 0;
64281 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
64282 if (e) {
64283 log_packet_detailed("'rmact_gfx_alt2' field error detected");
64284 }
64285 }
64286 if (BV_ISSET(fields, 12)) {
64287 log_packet_detailed(" field 'graphic_str' has changed");
64288#ifdef FREECIV_JSON_CONNECTION
64289 field_addr.name = "graphic_str";
64290#endif /* FREECIV_JSON_CONNECTION */
64291 e = 0;
64292 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
64293 if (e) {
64294 log_packet_detailed("'graphic_str' field error detected");
64295 }
64296 }
64297 if (BV_ISSET(fields, 13)) {
64298 log_packet_detailed(" field 'graphic_alt' has changed");
64299#ifdef FREECIV_JSON_CONNECTION
64300 field_addr.name = "graphic_alt";
64301#endif /* FREECIV_JSON_CONNECTION */
64302 e = 0;
64303 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
64304 if (e) {
64305 log_packet_detailed("'graphic_alt' field error detected");
64306 }
64307 }
64308 if (BV_ISSET(fields, 14)) {
64309 log_packet_detailed(" field 'reqs_count' has changed");
64310#ifdef FREECIV_JSON_CONNECTION
64311 field_addr.name = "reqs_count";
64312#endif /* FREECIV_JSON_CONNECTION */
64313 e = 0;
64314 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
64315 if (e) {
64316 log_packet_detailed("'reqs_count' field error detected");
64317 }
64318 }
64319 if (BV_ISSET(fields, 15)) {
64320 log_packet_detailed(" field 'reqs' has changed");
64321#ifdef FREECIV_JSON_CONNECTION
64322 field_addr.name = "reqs";
64323#endif /* FREECIV_JSON_CONNECTION */
64324 e = 0;
64325 {
64326 int i;
64327
64328#ifdef FREECIV_JSON_CONNECTION
64329 /* Create the array. */
64330 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
64331
64332 /* Enter the array. */
64333 field_addr.sub_location = plocation_elem_new(0);
64334#endif /* FREECIV_JSON_CONNECTION */
64335
64336 for (i = 0; i < real_packet->reqs_count; i++) {
64337#ifdef FREECIV_JSON_CONNECTION
64338 /* Next array element. */
64339 field_addr.sub_location->number = i;
64340#endif /* FREECIV_JSON_CONNECTION */
64341
64342 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
64343 }
64344
64345#ifdef FREECIV_JSON_CONNECTION
64346 /* Exit array. */
64347 FC_FREE(field_addr.sub_location);
64348#endif /* FREECIV_JSON_CONNECTION */
64349 }
64350 if (e) {
64351 log_packet_detailed("'reqs' field error detected");
64352 }
64353 }
64354 if (BV_ISSET(fields, 16)) {
64355 log_packet_detailed(" field 'rmreqs_count' has changed");
64356#ifdef FREECIV_JSON_CONNECTION
64357 field_addr.name = "rmreqs_count";
64358#endif /* FREECIV_JSON_CONNECTION */
64359 e = 0;
64360 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rmreqs_count);
64361 if (e) {
64362 log_packet_detailed("'rmreqs_count' field error detected");
64363 }
64364 }
64365 if (BV_ISSET(fields, 17)) {
64366 log_packet_detailed(" field 'rmreqs' has changed");
64367#ifdef FREECIV_JSON_CONNECTION
64368 field_addr.name = "rmreqs";
64369#endif /* FREECIV_JSON_CONNECTION */
64370 e = 0;
64371 {
64372 int i;
64373
64374#ifdef FREECIV_JSON_CONNECTION
64375 /* Create the array. */
64376 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->rmreqs_count);
64377
64378 /* Enter the array. */
64379 field_addr.sub_location = plocation_elem_new(0);
64380#endif /* FREECIV_JSON_CONNECTION */
64381
64382 for (i = 0; i < real_packet->rmreqs_count; i++) {
64383#ifdef FREECIV_JSON_CONNECTION
64384 /* Next array element. */
64385 field_addr.sub_location->number = i;
64386#endif /* FREECIV_JSON_CONNECTION */
64387
64388 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs[i]);
64389 }
64390
64391#ifdef FREECIV_JSON_CONNECTION
64392 /* Exit array. */
64393 FC_FREE(field_addr.sub_location);
64394#endif /* FREECIV_JSON_CONNECTION */
64395 }
64396 if (e) {
64397 log_packet_detailed("'rmreqs' field error detected");
64398 }
64399 }
64400 if (BV_ISSET(fields, 18)) {
64401 log_packet_detailed(" field 'appearance_chance' has changed");
64402#ifdef FREECIV_JSON_CONNECTION
64403 field_addr.name = "appearance_chance";
64404#endif /* FREECIV_JSON_CONNECTION */
64405 e = 0;
64406 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
64407 if (e) {
64408 log_packet_detailed("'appearance_chance' field error detected");
64409 }
64410 }
64411 if (BV_ISSET(fields, 19)) {
64412 log_packet_detailed(" field 'appearance_reqs_count' has changed");
64413#ifdef FREECIV_JSON_CONNECTION
64414 field_addr.name = "appearance_reqs_count";
64415#endif /* FREECIV_JSON_CONNECTION */
64416 e = 0;
64417 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->appearance_reqs_count);
64418 if (e) {
64419 log_packet_detailed("'appearance_reqs_count' field error detected");
64420 }
64421 }
64422 if (BV_ISSET(fields, 20)) {
64423 log_packet_detailed(" field 'appearance_reqs' has changed");
64424#ifdef FREECIV_JSON_CONNECTION
64425 field_addr.name = "appearance_reqs";
64426#endif /* FREECIV_JSON_CONNECTION */
64427 e = 0;
64428 {
64429 int i;
64430
64431#ifdef FREECIV_JSON_CONNECTION
64432 /* Create the array. */
64433 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->appearance_reqs_count);
64434
64435 /* Enter the array. */
64436 field_addr.sub_location = plocation_elem_new(0);
64437#endif /* FREECIV_JSON_CONNECTION */
64438
64439 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
64440#ifdef FREECIV_JSON_CONNECTION
64441 /* Next array element. */
64442 field_addr.sub_location->number = i;
64443#endif /* FREECIV_JSON_CONNECTION */
64444
64445 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs[i]);
64446 }
64447
64448#ifdef FREECIV_JSON_CONNECTION
64449 /* Exit array. */
64450 FC_FREE(field_addr.sub_location);
64451#endif /* FREECIV_JSON_CONNECTION */
64452 }
64453 if (e) {
64454 log_packet_detailed("'appearance_reqs' field error detected");
64455 }
64456 }
64457 if (BV_ISSET(fields, 21)) {
64458 log_packet_detailed(" field 'disappearance_chance' has changed");
64459#ifdef FREECIV_JSON_CONNECTION
64460 field_addr.name = "disappearance_chance";
64461#endif /* FREECIV_JSON_CONNECTION */
64462 e = 0;
64463 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
64464 if (e) {
64465 log_packet_detailed("'disappearance_chance' field error detected");
64466 }
64467 }
64468 if (BV_ISSET(fields, 22)) {
64469 log_packet_detailed(" field 'disappearance_reqs_count' has changed");
64470#ifdef FREECIV_JSON_CONNECTION
64471 field_addr.name = "disappearance_reqs_count";
64472#endif /* FREECIV_JSON_CONNECTION */
64473 e = 0;
64474 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->disappearance_reqs_count);
64475 if (e) {
64476 log_packet_detailed("'disappearance_reqs_count' field error detected");
64477 }
64478 }
64479 if (BV_ISSET(fields, 23)) {
64480 log_packet_detailed(" field 'disappearance_reqs' has changed");
64481#ifdef FREECIV_JSON_CONNECTION
64482 field_addr.name = "disappearance_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->disappearance_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->disappearance_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->disappearance_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("'disappearance_reqs' field error detected");
64512 }
64513 }
64514 if (BV_ISSET(fields, 24)) {
64515 log_packet_detailed(" field 'visibility_req' has changed");
64516#ifdef FREECIV_JSON_CONNECTION
64517 field_addr.name = "visibility_req";
64518#endif /* FREECIV_JSON_CONNECTION */
64519 e = 0;
64520 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
64521 if (e) {
64522 log_packet_detailed("'visibility_req' field error detected");
64523 }
64524 }
64525 /* field 25 is folded into the header */
64526 /* field 26 is folded into the header */
64527 if (BV_ISSET(fields, 27)) {
64528 log_packet_detailed(" field 'build_time' has changed");
64529#ifdef FREECIV_JSON_CONNECTION
64530 field_addr.name = "build_time";
64531#endif /* FREECIV_JSON_CONNECTION */
64532 e = 0;
64533 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
64534 if (e) {
64535 log_packet_detailed("'build_time' field error detected");
64536 }
64537 }
64538 if (BV_ISSET(fields, 28)) {
64539 log_packet_detailed(" field 'build_time_factor' has changed");
64540#ifdef FREECIV_JSON_CONNECTION
64541 field_addr.name = "build_time_factor";
64542#endif /* FREECIV_JSON_CONNECTION */
64543 e = 0;
64544 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
64545 if (e) {
64546 log_packet_detailed("'build_time_factor' field error detected");
64547 }
64548 }
64549 if (BV_ISSET(fields, 29)) {
64550 log_packet_detailed(" field 'removal_time' has changed");
64551#ifdef FREECIV_JSON_CONNECTION
64552 field_addr.name = "removal_time";
64553#endif /* FREECIV_JSON_CONNECTION */
64554 e = 0;
64555 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
64556 if (e) {
64557 log_packet_detailed("'removal_time' field error detected");
64558 }
64559 }
64560 if (BV_ISSET(fields, 30)) {
64561 log_packet_detailed(" field 'removal_time_factor' has changed");
64562#ifdef FREECIV_JSON_CONNECTION
64563 field_addr.name = "removal_time_factor";
64564#endif /* FREECIV_JSON_CONNECTION */
64565 e = 0;
64566 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
64567 if (e) {
64568 log_packet_detailed("'removal_time_factor' field error detected");
64569 }
64570 }
64571 if (BV_ISSET(fields, 31)) {
64572 log_packet_detailed(" field 'infracost' has changed");
64573#ifdef FREECIV_JSON_CONNECTION
64574 field_addr.name = "infracost";
64575#endif /* FREECIV_JSON_CONNECTION */
64576 e = 0;
64577 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
64578 if (e) {
64579 log_packet_detailed("'infracost' field error detected");
64580 }
64581 }
64582 if (BV_ISSET(fields, 32)) {
64583 log_packet_detailed(" field 'defense_bonus' has changed");
64584#ifdef FREECIV_JSON_CONNECTION
64585 field_addr.name = "defense_bonus";
64586#endif /* FREECIV_JSON_CONNECTION */
64587 e = 0;
64588 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
64589 if (e) {
64590 log_packet_detailed("'defense_bonus' field error detected");
64591 }
64592 }
64593 if (BV_ISSET(fields, 33)) {
64594 log_packet_detailed(" field 'eus' has changed");
64595#ifdef FREECIV_JSON_CONNECTION
64596 field_addr.name = "eus";
64597#endif /* FREECIV_JSON_CONNECTION */
64598 e = 0;
64599 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
64600 if (e) {
64601 log_packet_detailed("'eus' field error detected");
64602 }
64603 }
64604 if (BV_ISSET(fields, 34)) {
64605 log_packet_detailed(" field 'native_to' has changed");
64606#ifdef FREECIV_JSON_CONNECTION
64607 field_addr.name = "native_to";
64608#endif /* FREECIV_JSON_CONNECTION */
64609 e = 0;
64610 e |= DIO_BV_PUT(&dout, &field_addr, packet->native_to);
64611 if (e) {
64612 log_packet_detailed("'native_to' field error detected");
64613 }
64614 }
64615 if (BV_ISSET(fields, 35)) {
64616 log_packet_detailed(" field 'flags' has changed");
64617#ifdef FREECIV_JSON_CONNECTION
64618 field_addr.name = "flags";
64619#endif /* FREECIV_JSON_CONNECTION */
64620 e = 0;
64621 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
64622 if (e) {
64623 log_packet_detailed("'flags' field error detected");
64624 }
64625 }
64626 if (BV_ISSET(fields, 36)) {
64627 log_packet_detailed(" field 'hidden_by' has changed");
64628#ifdef FREECIV_JSON_CONNECTION
64629 field_addr.name = "hidden_by";
64630#endif /* FREECIV_JSON_CONNECTION */
64631 e = 0;
64632 e |= DIO_BV_PUT(&dout, &field_addr, packet->hidden_by);
64633 if (e) {
64634 log_packet_detailed("'hidden_by' field error detected");
64635 }
64636 }
64637 if (BV_ISSET(fields, 37)) {
64638 log_packet_detailed(" field 'bridged_over' has changed");
64639#ifdef FREECIV_JSON_CONNECTION
64640 field_addr.name = "bridged_over";
64641#endif /* FREECIV_JSON_CONNECTION */
64642 e = 0;
64643 e |= DIO_BV_PUT(&dout, &field_addr, packet->bridged_over);
64644 if (e) {
64645 log_packet_detailed("'bridged_over' field error detected");
64646 }
64647 }
64648 if (BV_ISSET(fields, 38)) {
64649 log_packet_detailed(" field 'conflicts' has changed");
64650#ifdef FREECIV_JSON_CONNECTION
64651 field_addr.name = "conflicts";
64652#endif /* FREECIV_JSON_CONNECTION */
64653 e = 0;
64654 e |= DIO_BV_PUT(&dout, &field_addr, packet->conflicts);
64655 if (e) {
64656 log_packet_detailed("'conflicts' field error detected");
64657 }
64658 }
64659 if (BV_ISSET(fields, 39)) {
64660 log_packet_detailed(" field 'no_aggr_near_city' has changed");
64661#ifdef FREECIV_JSON_CONNECTION
64662 field_addr.name = "no_aggr_near_city";
64663#endif /* FREECIV_JSON_CONNECTION */
64664 e = 0;
64665 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
64666 if (e) {
64667 log_packet_detailed("'no_aggr_near_city' field error detected");
64668 }
64669 }
64670 if (BV_ISSET(fields, 40)) {
64671 log_packet_detailed(" field 'helptext' has changed");
64672#ifdef FREECIV_JSON_CONNECTION
64673 field_addr.name = "helptext";
64674#endif /* FREECIV_JSON_CONNECTION */
64675 e = 0;
64676 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
64677 if (e) {
64678 log_packet_detailed("'helptext' field error detected");
64679 }
64680 }
64681
64682 *old = *real_packet;
64683#endif /* FREECIV_DELTA_PROTOCOL */
64684#ifndef FREECIV_DELTA_PROTOCOL
64685#ifdef FREECIV_JSON_CONNECTION
64686 field_addr.name = "id";
64687#endif /* FREECIV_JSON_CONNECTION */
64688 e = 0;
64689 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
64690 if (e) {
64691 log_packet_detailed("'id' field error detected");
64692 }
64693#ifdef FREECIV_JSON_CONNECTION
64694 field_addr.name = "name";
64695#endif /* FREECIV_JSON_CONNECTION */
64696 e = 0;
64697 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
64698 if (e) {
64699 log_packet_detailed("'name' field error detected");
64700 }
64701#ifdef FREECIV_JSON_CONNECTION
64702 field_addr.name = "rule_name";
64703#endif /* FREECIV_JSON_CONNECTION */
64704 e = 0;
64705 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
64706 if (e) {
64707 log_packet_detailed("'rule_name' field error detected");
64708 }
64709#ifdef FREECIV_JSON_CONNECTION
64710 field_addr.name = "category";
64711#endif /* FREECIV_JSON_CONNECTION */
64712 e = 0;
64713 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
64714 if (e) {
64715 log_packet_detailed("'category' field error detected");
64716 }
64717#ifdef FREECIV_JSON_CONNECTION
64718 field_addr.name = "causes";
64719#endif /* FREECIV_JSON_CONNECTION */
64720 e = 0;
64721 e |= DIO_BV_PUT(&dout, &field_addr, packet->causes);
64722 if (e) {
64723 log_packet_detailed("'causes' field error detected");
64724 }
64725#ifdef FREECIV_JSON_CONNECTION
64726 field_addr.name = "rmcauses";
64727#endif /* FREECIV_JSON_CONNECTION */
64728 e = 0;
64729 e |= DIO_BV_PUT(&dout, &field_addr, packet->rmcauses);
64730 if (e) {
64731 log_packet_detailed("'rmcauses' field error detected");
64732 }
64733#ifdef FREECIV_JSON_CONNECTION
64734 field_addr.name = "activity_gfx";
64735#endif /* FREECIV_JSON_CONNECTION */
64736 e = 0;
64737 e |= DIO_PUT(string, &dout, &field_addr, real_packet->activity_gfx);
64738 if (e) {
64739 log_packet_detailed("'activity_gfx' field error detected");
64740 }
64741#ifdef FREECIV_JSON_CONNECTION
64742 field_addr.name = "act_gfx_alt";
64743#endif /* FREECIV_JSON_CONNECTION */
64744 e = 0;
64745 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt);
64746 if (e) {
64747 log_packet_detailed("'act_gfx_alt' field error detected");
64748 }
64749#ifdef FREECIV_JSON_CONNECTION
64750 field_addr.name = "act_gfx_alt2";
64751#endif /* FREECIV_JSON_CONNECTION */
64752 e = 0;
64753 e |= DIO_PUT(string, &dout, &field_addr, real_packet->act_gfx_alt2);
64754 if (e) {
64755 log_packet_detailed("'act_gfx_alt2' field error detected");
64756 }
64757#ifdef FREECIV_JSON_CONNECTION
64758 field_addr.name = "rmact_gfx";
64759#endif /* FREECIV_JSON_CONNECTION */
64760 e = 0;
64761 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx);
64762 if (e) {
64763 log_packet_detailed("'rmact_gfx' field error detected");
64764 }
64765#ifdef FREECIV_JSON_CONNECTION
64766 field_addr.name = "rmact_gfx_alt";
64767#endif /* FREECIV_JSON_CONNECTION */
64768 e = 0;
64769 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt);
64770 if (e) {
64771 log_packet_detailed("'rmact_gfx_alt' field error detected");
64772 }
64773#ifdef FREECIV_JSON_CONNECTION
64774 field_addr.name = "rmact_gfx_alt2";
64775#endif /* FREECIV_JSON_CONNECTION */
64776 e = 0;
64777 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rmact_gfx_alt2);
64778 if (e) {
64779 log_packet_detailed("'rmact_gfx_alt2' field error detected");
64780 }
64781#ifdef FREECIV_JSON_CONNECTION
64782 field_addr.name = "graphic_str";
64783#endif /* FREECIV_JSON_CONNECTION */
64784 e = 0;
64785 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_str);
64786 if (e) {
64787 log_packet_detailed("'graphic_str' field error detected");
64788 }
64789#ifdef FREECIV_JSON_CONNECTION
64790 field_addr.name = "graphic_alt";
64791#endif /* FREECIV_JSON_CONNECTION */
64792 e = 0;
64793 e |= DIO_PUT(string, &dout, &field_addr, real_packet->graphic_alt);
64794 if (e) {
64795 log_packet_detailed("'graphic_alt' field error detected");
64796 }
64797#ifdef FREECIV_JSON_CONNECTION
64798 field_addr.name = "reqs_count";
64799#endif /* FREECIV_JSON_CONNECTION */
64800 e = 0;
64801 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
64802 if (e) {
64803 log_packet_detailed("'reqs_count' field error detected");
64804 }
64805#ifdef FREECIV_JSON_CONNECTION
64806 field_addr.name = "reqs";
64807#endif /* FREECIV_JSON_CONNECTION */
64808 e = 0;
64809 {
64810 int i;
64811
64812#ifdef FREECIV_JSON_CONNECTION
64813 /* Create the array. */
64814 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
64815
64816 /* Enter the array. */
64817 field_addr.sub_location = plocation_elem_new(0);
64818#endif /* FREECIV_JSON_CONNECTION */
64819
64820 for (i = 0; i < real_packet->reqs_count; i++) {
64821#ifdef FREECIV_JSON_CONNECTION
64822 /* Next array element. */
64823 field_addr.sub_location->number = i;
64824#endif /* FREECIV_JSON_CONNECTION */
64825
64826 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
64827 }
64828
64829#ifdef FREECIV_JSON_CONNECTION
64830 /* Exit array. */
64831 FC_FREE(field_addr.sub_location);
64832#endif /* FREECIV_JSON_CONNECTION */
64833 }
64834 if (e) {
64835 log_packet_detailed("'reqs' field error detected");
64836 }
64837#ifdef FREECIV_JSON_CONNECTION
64838 field_addr.name = "rmreqs_count";
64839#endif /* FREECIV_JSON_CONNECTION */
64840 e = 0;
64841 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rmreqs_count);
64842 if (e) {
64843 log_packet_detailed("'rmreqs_count' field error detected");
64844 }
64845#ifdef FREECIV_JSON_CONNECTION
64846 field_addr.name = "rmreqs";
64847#endif /* FREECIV_JSON_CONNECTION */
64848 e = 0;
64849 {
64850 int i;
64851
64852#ifdef FREECIV_JSON_CONNECTION
64853 /* Create the array. */
64854 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->rmreqs_count);
64855
64856 /* Enter the array. */
64857 field_addr.sub_location = plocation_elem_new(0);
64858#endif /* FREECIV_JSON_CONNECTION */
64859
64860 for (i = 0; i < real_packet->rmreqs_count; i++) {
64861#ifdef FREECIV_JSON_CONNECTION
64862 /* Next array element. */
64863 field_addr.sub_location->number = i;
64864#endif /* FREECIV_JSON_CONNECTION */
64865
64866 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->rmreqs[i]);
64867 }
64868
64869#ifdef FREECIV_JSON_CONNECTION
64870 /* Exit array. */
64871 FC_FREE(field_addr.sub_location);
64872#endif /* FREECIV_JSON_CONNECTION */
64873 }
64874 if (e) {
64875 log_packet_detailed("'rmreqs' field error detected");
64876 }
64877#ifdef FREECIV_JSON_CONNECTION
64878 field_addr.name = "appearance_chance";
64879#endif /* FREECIV_JSON_CONNECTION */
64880 e = 0;
64881 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->appearance_chance);
64882 if (e) {
64883 log_packet_detailed("'appearance_chance' field error detected");
64884 }
64885#ifdef FREECIV_JSON_CONNECTION
64886 field_addr.name = "appearance_reqs_count";
64887#endif /* FREECIV_JSON_CONNECTION */
64888 e = 0;
64889 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->appearance_reqs_count);
64890 if (e) {
64891 log_packet_detailed("'appearance_reqs_count' field error detected");
64892 }
64893#ifdef FREECIV_JSON_CONNECTION
64894 field_addr.name = "appearance_reqs";
64895#endif /* FREECIV_JSON_CONNECTION */
64896 e = 0;
64897 {
64898 int i;
64899
64900#ifdef FREECIV_JSON_CONNECTION
64901 /* Create the array. */
64902 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->appearance_reqs_count);
64903
64904 /* Enter the array. */
64905 field_addr.sub_location = plocation_elem_new(0);
64906#endif /* FREECIV_JSON_CONNECTION */
64907
64908 for (i = 0; i < real_packet->appearance_reqs_count; i++) {
64909#ifdef FREECIV_JSON_CONNECTION
64910 /* Next array element. */
64911 field_addr.sub_location->number = i;
64912#endif /* FREECIV_JSON_CONNECTION */
64913
64914 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->appearance_reqs[i]);
64915 }
64916
64917#ifdef FREECIV_JSON_CONNECTION
64918 /* Exit array. */
64919 FC_FREE(field_addr.sub_location);
64920#endif /* FREECIV_JSON_CONNECTION */
64921 }
64922 if (e) {
64923 log_packet_detailed("'appearance_reqs' field error detected");
64924 }
64925#ifdef FREECIV_JSON_CONNECTION
64926 field_addr.name = "disappearance_chance";
64927#endif /* FREECIV_JSON_CONNECTION */
64928 e = 0;
64929 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->disappearance_chance);
64930 if (e) {
64931 log_packet_detailed("'disappearance_chance' field error detected");
64932 }
64933#ifdef FREECIV_JSON_CONNECTION
64934 field_addr.name = "disappearance_reqs_count";
64935#endif /* FREECIV_JSON_CONNECTION */
64936 e = 0;
64937 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->disappearance_reqs_count);
64938 if (e) {
64939 log_packet_detailed("'disappearance_reqs_count' field error detected");
64940 }
64941#ifdef FREECIV_JSON_CONNECTION
64942 field_addr.name = "disappearance_reqs";
64943#endif /* FREECIV_JSON_CONNECTION */
64944 e = 0;
64945 {
64946 int i;
64947
64948#ifdef FREECIV_JSON_CONNECTION
64949 /* Create the array. */
64950 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->disappearance_reqs_count);
64951
64952 /* Enter the array. */
64953 field_addr.sub_location = plocation_elem_new(0);
64954#endif /* FREECIV_JSON_CONNECTION */
64955
64956 for (i = 0; i < real_packet->disappearance_reqs_count; i++) {
64957#ifdef FREECIV_JSON_CONNECTION
64958 /* Next array element. */
64959 field_addr.sub_location->number = i;
64960#endif /* FREECIV_JSON_CONNECTION */
64961
64962 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->disappearance_reqs[i]);
64963 }
64964
64965#ifdef FREECIV_JSON_CONNECTION
64966 /* Exit array. */
64967 FC_FREE(field_addr.sub_location);
64968#endif /* FREECIV_JSON_CONNECTION */
64969 }
64970 if (e) {
64971 log_packet_detailed("'disappearance_reqs' field error detected");
64972 }
64973#ifdef FREECIV_JSON_CONNECTION
64974 field_addr.name = "visibility_req";
64975#endif /* FREECIV_JSON_CONNECTION */
64976 e = 0;
64977 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->visibility_req);
64978 if (e) {
64979 log_packet_detailed("'visibility_req' field error detected");
64980 }
64981#ifdef FREECIV_JSON_CONNECTION
64982 field_addr.name = "buildable";
64983#endif /* FREECIV_JSON_CONNECTION */
64984 e = 0;
64985 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->buildable);
64986 if (e) {
64987 log_packet_detailed("'buildable' field error detected");
64988 }
64989#ifdef FREECIV_JSON_CONNECTION
64990 field_addr.name = "generated";
64991#endif /* FREECIV_JSON_CONNECTION */
64992 e = 0;
64993 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->generated);
64994 if (e) {
64995 log_packet_detailed("'generated' field error detected");
64996 }
64997#ifdef FREECIV_JSON_CONNECTION
64998 field_addr.name = "build_time";
64999#endif /* FREECIV_JSON_CONNECTION */
65000 e = 0;
65001 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time);
65002 if (e) {
65003 log_packet_detailed("'build_time' field error detected");
65004 }
65005#ifdef FREECIV_JSON_CONNECTION
65006 field_addr.name = "build_time_factor";
65007#endif /* FREECIV_JSON_CONNECTION */
65008 e = 0;
65009 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->build_time_factor);
65010 if (e) {
65011 log_packet_detailed("'build_time_factor' field error detected");
65012 }
65013#ifdef FREECIV_JSON_CONNECTION
65014 field_addr.name = "removal_time";
65015#endif /* FREECIV_JSON_CONNECTION */
65016 e = 0;
65017 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time);
65018 if (e) {
65019 log_packet_detailed("'removal_time' field error detected");
65020 }
65021#ifdef FREECIV_JSON_CONNECTION
65022 field_addr.name = "removal_time_factor";
65023#endif /* FREECIV_JSON_CONNECTION */
65024 e = 0;
65025 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->removal_time_factor);
65026 if (e) {
65027 log_packet_detailed("'removal_time_factor' field error detected");
65028 }
65029#ifdef FREECIV_JSON_CONNECTION
65030 field_addr.name = "infracost";
65031#endif /* FREECIV_JSON_CONNECTION */
65032 e = 0;
65033 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->infracost);
65034 if (e) {
65035 log_packet_detailed("'infracost' field error detected");
65036 }
65037#ifdef FREECIV_JSON_CONNECTION
65038 field_addr.name = "defense_bonus";
65039#endif /* FREECIV_JSON_CONNECTION */
65040 e = 0;
65041 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->defense_bonus);
65042 if (e) {
65043 log_packet_detailed("'defense_bonus' field error detected");
65044 }
65045#ifdef FREECIV_JSON_CONNECTION
65046 field_addr.name = "eus";
65047#endif /* FREECIV_JSON_CONNECTION */
65048 e = 0;
65049 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->eus);
65050 if (e) {
65051 log_packet_detailed("'eus' field error detected");
65052 }
65053#ifdef FREECIV_JSON_CONNECTION
65054 field_addr.name = "native_to";
65055#endif /* FREECIV_JSON_CONNECTION */
65056 e = 0;
65057 e |= DIO_BV_PUT(&dout, &field_addr, packet->native_to);
65058 if (e) {
65059 log_packet_detailed("'native_to' field error detected");
65060 }
65061#ifdef FREECIV_JSON_CONNECTION
65062 field_addr.name = "flags";
65063#endif /* FREECIV_JSON_CONNECTION */
65064 e = 0;
65065 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
65066 if (e) {
65067 log_packet_detailed("'flags' field error detected");
65068 }
65069#ifdef FREECIV_JSON_CONNECTION
65070 field_addr.name = "hidden_by";
65071#endif /* FREECIV_JSON_CONNECTION */
65072 e = 0;
65073 e |= DIO_BV_PUT(&dout, &field_addr, packet->hidden_by);
65074 if (e) {
65075 log_packet_detailed("'hidden_by' field error detected");
65076 }
65077#ifdef FREECIV_JSON_CONNECTION
65078 field_addr.name = "bridged_over";
65079#endif /* FREECIV_JSON_CONNECTION */
65080 e = 0;
65081 e |= DIO_BV_PUT(&dout, &field_addr, packet->bridged_over);
65082 if (e) {
65083 log_packet_detailed("'bridged_over' field error detected");
65084 }
65085#ifdef FREECIV_JSON_CONNECTION
65086 field_addr.name = "conflicts";
65087#endif /* FREECIV_JSON_CONNECTION */
65088 e = 0;
65089 e |= DIO_BV_PUT(&dout, &field_addr, packet->conflicts);
65090 if (e) {
65091 log_packet_detailed("'conflicts' field error detected");
65092 }
65093#ifdef FREECIV_JSON_CONNECTION
65094 field_addr.name = "no_aggr_near_city";
65095#endif /* FREECIV_JSON_CONNECTION */
65096 e = 0;
65097 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->no_aggr_near_city);
65098 if (e) {
65099 log_packet_detailed("'no_aggr_near_city' field error detected");
65100 }
65101#ifdef FREECIV_JSON_CONNECTION
65102 field_addr.name = "helptext";
65103#endif /* FREECIV_JSON_CONNECTION */
65104 e = 0;
65105 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
65106 if (e) {
65107 log_packet_detailed("'helptext' field error detected");
65108 }
65109
65110#endif
65112}
65113
65115{
65116 if (!pc->used) {
65117 log_error("WARNING: trying to send data to the closed connection %s",
65119 return -1;
65120 }
65121 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet != NULL, -1,
65122 "Handler for PACKET_RULESET_EXTRA not installed");
65123 return pc->phs.handlers->send[PACKET_RULESET_EXTRA].packet(pc, packet);
65124}
65125
65126void lsend_packet_ruleset_extra(struct conn_list *dest, const struct packet_ruleset_extra *packet)
65127{
65128 conn_list_iterate(dest, pconn) {
65131}
65132
65133#ifdef FREECIV_DELTA_PROTOCOL
65134#define hash_packet_ruleset_extra_flag_100 hash_const
65135
65136#define cmp_packet_ruleset_extra_flag_100 cmp_const
65137
65139#endif /* FREECIV_DELTA_PROTOCOL */
65140
65142{
65143#ifdef FREECIV_DELTA_PROTOCOL
65145 struct packet_ruleset_extra_flag *old;
65146 struct genhash **hash = pc->phs.received + PACKET_RULESET_EXTRA_FLAG;
65147#endif /* FREECIV_DELTA_PROTOCOL */
65149#ifdef FREECIV_JSON_CONNECTION
65150 struct plocation field_addr;
65151 {
65155 }
65156#endif /* FREECIV_JSON_CONNECTION */
65157
65158#ifdef FREECIV_DELTA_PROTOCOL
65159#ifdef FREECIV_JSON_CONNECTION
65160 field_addr.name = "fields";
65161#endif /* FREECIV_JSON_CONNECTION */
65162 DIO_BV_GET(&din, &field_addr, fields);
65163
65164#else /* FREECIV_DELTA_PROTOCOL */
65165#ifdef FREECIV_JSON_CONNECTION
65166 field_addr.name = "id";
65167#endif /* FREECIV_JSON_CONNECTION */
65168 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
65170 }
65171#ifdef FREECIV_JSON_CONNECTION
65172 field_addr.name = "name";
65173#endif /* FREECIV_JSON_CONNECTION */
65174 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
65176 }
65177#ifdef FREECIV_JSON_CONNECTION
65178 field_addr.name = "helptxt";
65179#endif /* FREECIV_JSON_CONNECTION */
65180 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
65182 }
65183#endif
65184 log_packet_detailed("packet_ruleset_extra_flag_100: got info about ()");
65185
65186#ifdef FREECIV_DELTA_PROTOCOL
65187 if (NULL == *hash) {
65189 NULL, NULL, NULL, free);
65190 }
65191
65192 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
65193 *real_packet = *old;
65194 } else {
65195 log_packet_detailed(" no old info");
65196 memset(real_packet, 0, sizeof(*real_packet));
65197 }
65198
65199 if (BV_ISSET(fields, 0)) {
65200 log_packet_detailed(" got field 'id'");
65201#ifdef FREECIV_JSON_CONNECTION
65202 field_addr.name = "id";
65203#endif /* FREECIV_JSON_CONNECTION */
65204 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
65206 }
65207 }
65208 if (BV_ISSET(fields, 1)) {
65209 log_packet_detailed(" got field 'name'");
65210#ifdef FREECIV_JSON_CONNECTION
65211 field_addr.name = "name";
65212#endif /* FREECIV_JSON_CONNECTION */
65213 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
65215 }
65216 }
65217 if (BV_ISSET(fields, 2)) {
65218 log_packet_detailed(" got field 'helptxt'");
65219#ifdef FREECIV_JSON_CONNECTION
65220 field_addr.name = "helptxt";
65221#endif /* FREECIV_JSON_CONNECTION */
65222 if (!DIO_GET(string, &din, &field_addr, real_packet->helptxt, sizeof(real_packet->helptxt))) {
65224 }
65225 }
65226
65227 if (NULL == old) {
65228 old = fc_malloc(sizeof(*old));
65229 *old = *real_packet;
65230 genhash_insert(*hash, old, old);
65231 } else {
65232 *old = *real_packet;
65233 }
65234
65235#endif /* FREECIV_DELTA_PROTOCOL */
65237}
65238
65240{
65241 const struct packet_ruleset_extra_flag *real_packet = packet;
65242 int e;
65243#ifdef FREECIV_DELTA_PROTOCOL
65245 struct packet_ruleset_extra_flag *old;
65246 bool differ;
65247 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EXTRA_FLAG;
65248#endif /* FREECIV_DELTA_PROTOCOL */
65250#ifdef FREECIV_JSON_CONNECTION
65251 struct plocation field_addr;
65252 {
65256 }
65257#endif /* FREECIV_JSON_CONNECTION */
65258
65259 log_packet_detailed("packet_ruleset_extra_flag_100: sending info about ()");
65260
65261#ifdef FREECIV_DELTA_PROTOCOL
65262 if (NULL == *hash) {
65264 NULL, NULL, NULL, free);
65265 }
65266 BV_CLR_ALL(fields);
65267
65268 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
65269 old = fc_malloc(sizeof(*old));
65270 *old = *real_packet;
65271 genhash_insert(*hash, old, old);
65272 memset(old, 0, sizeof(*old));
65273 }
65274 differ = (old->id != real_packet->id);
65275 if (differ) {
65276 BV_SET(fields, 0);
65277 }
65278
65279 differ = (strcmp(old->name, real_packet->name) != 0);
65280 if (differ) {
65281 BV_SET(fields, 1);
65282 }
65283
65284 differ = (strcmp(old->helptxt, real_packet->helptxt) != 0);
65285 if (differ) {
65286 BV_SET(fields, 2);
65287 }
65288
65289
65290#ifdef FREECIV_JSON_CONNECTION
65291 field_addr.name = "fields";
65292#endif /* FREECIV_JSON_CONNECTION */
65293 e = 0;
65294 e |= DIO_BV_PUT(&dout, &field_addr, fields);
65295 if (e) {
65296 log_packet_detailed("fields bitvector error detected");
65297 }
65298
65299 if (BV_ISSET(fields, 0)) {
65300 log_packet_detailed(" field 'id' has changed");
65301#ifdef FREECIV_JSON_CONNECTION
65302 field_addr.name = "id";
65303#endif /* FREECIV_JSON_CONNECTION */
65304 e = 0;
65305 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65306 if (e) {
65307 log_packet_detailed("'id' field error detected");
65308 }
65309 }
65310 if (BV_ISSET(fields, 1)) {
65311 log_packet_detailed(" field 'name' has changed");
65312#ifdef FREECIV_JSON_CONNECTION
65313 field_addr.name = "name";
65314#endif /* FREECIV_JSON_CONNECTION */
65315 e = 0;
65316 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
65317 if (e) {
65318 log_packet_detailed("'name' field error detected");
65319 }
65320 }
65321 if (BV_ISSET(fields, 2)) {
65322 log_packet_detailed(" field 'helptxt' has changed");
65323#ifdef FREECIV_JSON_CONNECTION
65324 field_addr.name = "helptxt";
65325#endif /* FREECIV_JSON_CONNECTION */
65326 e = 0;
65327 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
65328 if (e) {
65329 log_packet_detailed("'helptxt' field error detected");
65330 }
65331 }
65332
65333 *old = *real_packet;
65334#endif /* FREECIV_DELTA_PROTOCOL */
65335#ifndef FREECIV_DELTA_PROTOCOL
65336#ifdef FREECIV_JSON_CONNECTION
65337 field_addr.name = "id";
65338#endif /* FREECIV_JSON_CONNECTION */
65339 e = 0;
65340 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65341 if (e) {
65342 log_packet_detailed("'id' field error detected");
65343 }
65344#ifdef FREECIV_JSON_CONNECTION
65345 field_addr.name = "name";
65346#endif /* FREECIV_JSON_CONNECTION */
65347 e = 0;
65348 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
65349 if (e) {
65350 log_packet_detailed("'name' field error detected");
65351 }
65352#ifdef FREECIV_JSON_CONNECTION
65353 field_addr.name = "helptxt";
65354#endif /* FREECIV_JSON_CONNECTION */
65355 e = 0;
65356 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptxt);
65357 if (e) {
65358 log_packet_detailed("'helptxt' field error detected");
65359 }
65360
65361#endif
65363}
65364
65366{
65367 if (!pc->used) {
65368 log_error("WARNING: trying to send data to the closed connection %s",
65370 return -1;
65371 }
65372 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet != NULL, -1,
65373 "Handler for PACKET_RULESET_EXTRA_FLAG not installed");
65374 return pc->phs.handlers->send[PACKET_RULESET_EXTRA_FLAG].packet(pc, packet);
65375}
65376
65378{
65379 conn_list_iterate(dest, pconn) {
65382}
65383
65384#ifdef FREECIV_DELTA_PROTOCOL
65385#define hash_packet_ruleset_base_100 hash_const
65386
65387#define cmp_packet_ruleset_base_100 cmp_const
65388
65390#endif /* FREECIV_DELTA_PROTOCOL */
65391
65393{
65394#ifdef FREECIV_DELTA_PROTOCOL
65396 struct packet_ruleset_base *old;
65397 struct genhash **hash = pc->phs.received + PACKET_RULESET_BASE;
65398#endif /* FREECIV_DELTA_PROTOCOL */
65400#ifdef FREECIV_JSON_CONNECTION
65401 struct plocation field_addr;
65402 {
65406 }
65407#endif /* FREECIV_JSON_CONNECTION */
65408
65409#ifdef FREECIV_DELTA_PROTOCOL
65410#ifdef FREECIV_JSON_CONNECTION
65411 field_addr.name = "fields";
65412#endif /* FREECIV_JSON_CONNECTION */
65413 DIO_BV_GET(&din, &field_addr, fields);
65414
65415#else /* FREECIV_DELTA_PROTOCOL */
65416#ifdef FREECIV_JSON_CONNECTION
65417 field_addr.name = "id";
65418#endif /* FREECIV_JSON_CONNECTION */
65419 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
65421 }
65422#ifdef FREECIV_JSON_CONNECTION
65423 field_addr.name = "gui_type";
65424#endif /* FREECIV_JSON_CONNECTION */
65425 {
65426 int readin;
65427
65428 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65430 }
65431 real_packet->gui_type = readin;
65432 }
65433#ifdef FREECIV_JSON_CONNECTION
65434 field_addr.name = "border_sq";
65435#endif /* FREECIV_JSON_CONNECTION */
65436 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
65437 RECEIVE_PACKET_FIELD_ERROR(border_sq);
65438 }
65439#ifdef FREECIV_JSON_CONNECTION
65440 field_addr.name = "vision_main_sq";
65441#endif /* FREECIV_JSON_CONNECTION */
65442 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
65443 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
65444 }
65445#ifdef FREECIV_JSON_CONNECTION
65446 field_addr.name = "vision_invis_sq";
65447#endif /* FREECIV_JSON_CONNECTION */
65448 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
65449 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
65450 }
65451#ifdef FREECIV_JSON_CONNECTION
65452 field_addr.name = "vision_subs_sq";
65453#endif /* FREECIV_JSON_CONNECTION */
65454 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
65455 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
65456 }
65457#endif
65458 log_packet_detailed("packet_ruleset_base_100: got info about ()");
65459
65460#ifdef FREECIV_DELTA_PROTOCOL
65461 if (NULL == *hash) {
65463 NULL, NULL, NULL, free);
65464 }
65465
65466 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
65467 *real_packet = *old;
65468 } else {
65469 log_packet_detailed(" no old info");
65470 memset(real_packet, 0, sizeof(*real_packet));
65471 }
65472
65473 if (BV_ISSET(fields, 0)) {
65474 log_packet_detailed(" got field 'id'");
65475#ifdef FREECIV_JSON_CONNECTION
65476 field_addr.name = "id";
65477#endif /* FREECIV_JSON_CONNECTION */
65478 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
65480 }
65481 }
65482 if (BV_ISSET(fields, 1)) {
65483 log_packet_detailed(" got field 'gui_type'");
65484#ifdef FREECIV_JSON_CONNECTION
65485 field_addr.name = "gui_type";
65486#endif /* FREECIV_JSON_CONNECTION */
65487 {
65488 int readin;
65489
65490 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65492 }
65493 real_packet->gui_type = readin;
65494 }
65495 }
65496 if (BV_ISSET(fields, 2)) {
65497 log_packet_detailed(" got field 'border_sq'");
65498#ifdef FREECIV_JSON_CONNECTION
65499 field_addr.name = "border_sq";
65500#endif /* FREECIV_JSON_CONNECTION */
65501 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->border_sq)) {
65502 RECEIVE_PACKET_FIELD_ERROR(border_sq);
65503 }
65504 }
65505 if (BV_ISSET(fields, 3)) {
65506 log_packet_detailed(" got field 'vision_main_sq'");
65507#ifdef FREECIV_JSON_CONNECTION
65508 field_addr.name = "vision_main_sq";
65509#endif /* FREECIV_JSON_CONNECTION */
65510 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_main_sq)) {
65511 RECEIVE_PACKET_FIELD_ERROR(vision_main_sq);
65512 }
65513 }
65514 if (BV_ISSET(fields, 4)) {
65515 log_packet_detailed(" got field 'vision_invis_sq'");
65516#ifdef FREECIV_JSON_CONNECTION
65517 field_addr.name = "vision_invis_sq";
65518#endif /* FREECIV_JSON_CONNECTION */
65519 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_invis_sq)) {
65520 RECEIVE_PACKET_FIELD_ERROR(vision_invis_sq);
65521 }
65522 }
65523 if (BV_ISSET(fields, 5)) {
65524 log_packet_detailed(" got field 'vision_subs_sq'");
65525#ifdef FREECIV_JSON_CONNECTION
65526 field_addr.name = "vision_subs_sq";
65527#endif /* FREECIV_JSON_CONNECTION */
65528 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->vision_subs_sq)) {
65529 RECEIVE_PACKET_FIELD_ERROR(vision_subs_sq);
65530 }
65531 }
65532
65533 if (NULL == old) {
65534 old = fc_malloc(sizeof(*old));
65535 *old = *real_packet;
65536 genhash_insert(*hash, old, old);
65537 } else {
65538 *old = *real_packet;
65539 }
65540
65541#endif /* FREECIV_DELTA_PROTOCOL */
65543}
65544
65545static int send_packet_ruleset_base_100(struct connection *pc, const struct packet_ruleset_base *packet)
65546{
65547 const struct packet_ruleset_base *real_packet = packet;
65548 int e;
65549#ifdef FREECIV_DELTA_PROTOCOL
65551 struct packet_ruleset_base *old;
65552 bool differ;
65553 struct genhash **hash = pc->phs.sent + PACKET_RULESET_BASE;
65554#endif /* FREECIV_DELTA_PROTOCOL */
65556#ifdef FREECIV_JSON_CONNECTION
65557 struct plocation field_addr;
65558 {
65562 }
65563#endif /* FREECIV_JSON_CONNECTION */
65564
65565 log_packet_detailed("packet_ruleset_base_100: sending info about ()");
65566
65567#ifdef FREECIV_DELTA_PROTOCOL
65568 if (NULL == *hash) {
65570 NULL, NULL, NULL, free);
65571 }
65572 BV_CLR_ALL(fields);
65573
65574 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
65575 old = fc_malloc(sizeof(*old));
65576 *old = *real_packet;
65577 genhash_insert(*hash, old, old);
65578 memset(old, 0, sizeof(*old));
65579 }
65580 differ = (old->id != real_packet->id);
65581 if (differ) {
65582 BV_SET(fields, 0);
65583 }
65584
65585 differ = (old->gui_type != real_packet->gui_type);
65586 if (differ) {
65587 BV_SET(fields, 1);
65588 }
65589
65590 differ = (old->border_sq != real_packet->border_sq);
65591 if (differ) {
65592 BV_SET(fields, 2);
65593 }
65594
65595 differ = (old->vision_main_sq != real_packet->vision_main_sq);
65596 if (differ) {
65597 BV_SET(fields, 3);
65598 }
65599
65600 differ = (old->vision_invis_sq != real_packet->vision_invis_sq);
65601 if (differ) {
65602 BV_SET(fields, 4);
65603 }
65604
65605 differ = (old->vision_subs_sq != real_packet->vision_subs_sq);
65606 if (differ) {
65607 BV_SET(fields, 5);
65608 }
65609
65610
65611#ifdef FREECIV_JSON_CONNECTION
65612 field_addr.name = "fields";
65613#endif /* FREECIV_JSON_CONNECTION */
65614 e = 0;
65615 e |= DIO_BV_PUT(&dout, &field_addr, fields);
65616 if (e) {
65617 log_packet_detailed("fields bitvector error detected");
65618 }
65619
65620 if (BV_ISSET(fields, 0)) {
65621 log_packet_detailed(" field 'id' has changed");
65622#ifdef FREECIV_JSON_CONNECTION
65623 field_addr.name = "id";
65624#endif /* FREECIV_JSON_CONNECTION */
65625 e = 0;
65626 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65627 if (e) {
65628 log_packet_detailed("'id' field error detected");
65629 }
65630 }
65631 if (BV_ISSET(fields, 1)) {
65632 log_packet_detailed(" field 'gui_type' has changed");
65633#ifdef FREECIV_JSON_CONNECTION
65634 field_addr.name = "gui_type";
65635#endif /* FREECIV_JSON_CONNECTION */
65636 e = 0;
65637 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
65638 if (e) {
65639 log_packet_detailed("'gui_type' field error detected");
65640 }
65641 }
65642 if (BV_ISSET(fields, 2)) {
65643 log_packet_detailed(" field 'border_sq' has changed");
65644#ifdef FREECIV_JSON_CONNECTION
65645 field_addr.name = "border_sq";
65646#endif /* FREECIV_JSON_CONNECTION */
65647 e = 0;
65648 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
65649 if (e) {
65650 log_packet_detailed("'border_sq' field error detected");
65651 }
65652 }
65653 if (BV_ISSET(fields, 3)) {
65654 log_packet_detailed(" field 'vision_main_sq' has changed");
65655#ifdef FREECIV_JSON_CONNECTION
65656 field_addr.name = "vision_main_sq";
65657#endif /* FREECIV_JSON_CONNECTION */
65658 e = 0;
65659 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
65660 if (e) {
65661 log_packet_detailed("'vision_main_sq' field error detected");
65662 }
65663 }
65664 if (BV_ISSET(fields, 4)) {
65665 log_packet_detailed(" field 'vision_invis_sq' has changed");
65666#ifdef FREECIV_JSON_CONNECTION
65667 field_addr.name = "vision_invis_sq";
65668#endif /* FREECIV_JSON_CONNECTION */
65669 e = 0;
65670 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
65671 if (e) {
65672 log_packet_detailed("'vision_invis_sq' field error detected");
65673 }
65674 }
65675 if (BV_ISSET(fields, 5)) {
65676 log_packet_detailed(" field 'vision_subs_sq' has changed");
65677#ifdef FREECIV_JSON_CONNECTION
65678 field_addr.name = "vision_subs_sq";
65679#endif /* FREECIV_JSON_CONNECTION */
65680 e = 0;
65681 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
65682 if (e) {
65683 log_packet_detailed("'vision_subs_sq' field error detected");
65684 }
65685 }
65686
65687 *old = *real_packet;
65688#endif /* FREECIV_DELTA_PROTOCOL */
65689#ifndef FREECIV_DELTA_PROTOCOL
65690#ifdef FREECIV_JSON_CONNECTION
65691 field_addr.name = "id";
65692#endif /* FREECIV_JSON_CONNECTION */
65693 e = 0;
65694 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
65695 if (e) {
65696 log_packet_detailed("'id' field error detected");
65697 }
65698#ifdef FREECIV_JSON_CONNECTION
65699 field_addr.name = "gui_type";
65700#endif /* FREECIV_JSON_CONNECTION */
65701 e = 0;
65702 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
65703 if (e) {
65704 log_packet_detailed("'gui_type' field error detected");
65705 }
65706#ifdef FREECIV_JSON_CONNECTION
65707 field_addr.name = "border_sq";
65708#endif /* FREECIV_JSON_CONNECTION */
65709 e = 0;
65710 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->border_sq);
65711 if (e) {
65712 log_packet_detailed("'border_sq' field error detected");
65713 }
65714#ifdef FREECIV_JSON_CONNECTION
65715 field_addr.name = "vision_main_sq";
65716#endif /* FREECIV_JSON_CONNECTION */
65717 e = 0;
65718 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_main_sq);
65719 if (e) {
65720 log_packet_detailed("'vision_main_sq' field error detected");
65721 }
65722#ifdef FREECIV_JSON_CONNECTION
65723 field_addr.name = "vision_invis_sq";
65724#endif /* FREECIV_JSON_CONNECTION */
65725 e = 0;
65726 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_invis_sq);
65727 if (e) {
65728 log_packet_detailed("'vision_invis_sq' field error detected");
65729 }
65730#ifdef FREECIV_JSON_CONNECTION
65731 field_addr.name = "vision_subs_sq";
65732#endif /* FREECIV_JSON_CONNECTION */
65733 e = 0;
65734 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->vision_subs_sq);
65735 if (e) {
65736 log_packet_detailed("'vision_subs_sq' field error detected");
65737 }
65738
65739#endif
65741}
65742
65744{
65745 if (!pc->used) {
65746 log_error("WARNING: trying to send data to the closed connection %s",
65748 return -1;
65749 }
65750 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_BASE].packet != NULL, -1,
65751 "Handler for PACKET_RULESET_BASE not installed");
65752 return pc->phs.handlers->send[PACKET_RULESET_BASE].packet(pc, packet);
65753}
65754
65755void lsend_packet_ruleset_base(struct conn_list *dest, const struct packet_ruleset_base *packet)
65756{
65757 conn_list_iterate(dest, pconn) {
65760}
65761
65762#ifdef FREECIV_DELTA_PROTOCOL
65763#define hash_packet_ruleset_road_100 hash_const
65764
65765#define cmp_packet_ruleset_road_100 cmp_const
65766
65768#endif /* FREECIV_DELTA_PROTOCOL */
65769
65771{
65772#ifdef FREECIV_DELTA_PROTOCOL
65774 struct packet_ruleset_road *old;
65775 struct genhash **hash = pc->phs.received + PACKET_RULESET_ROAD;
65776#endif /* FREECIV_DELTA_PROTOCOL */
65778#ifdef FREECIV_JSON_CONNECTION
65779 struct plocation field_addr;
65780 {
65784 }
65785#endif /* FREECIV_JSON_CONNECTION */
65786
65787#ifdef FREECIV_DELTA_PROTOCOL
65788#ifdef FREECIV_JSON_CONNECTION
65789 field_addr.name = "fields";
65790#endif /* FREECIV_JSON_CONNECTION */
65791 DIO_BV_GET(&din, &field_addr, fields);
65792
65793#else /* FREECIV_DELTA_PROTOCOL */
65794#ifdef FREECIV_JSON_CONNECTION
65795 field_addr.name = "id";
65796#endif /* FREECIV_JSON_CONNECTION */
65797 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
65799 }
65800#ifdef FREECIV_JSON_CONNECTION
65801 field_addr.name = "gui_type";
65802#endif /* FREECIV_JSON_CONNECTION */
65803 {
65804 int readin;
65805
65806 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65808 }
65809 real_packet->gui_type = readin;
65810 }
65811#ifdef FREECIV_JSON_CONNECTION
65812 field_addr.name = "first_reqs_count";
65813#endif /* FREECIV_JSON_CONNECTION */
65814 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->first_reqs_count)) {
65815 RECEIVE_PACKET_FIELD_ERROR(first_reqs_count);
65816 }
65817#ifdef FREECIV_JSON_CONNECTION
65818 field_addr.name = "first_reqs";
65819#endif /* FREECIV_JSON_CONNECTION */
65820 if (real_packet->first_reqs_count > MAX_NUM_REQS) {
65821 RECEIVE_PACKET_FIELD_ERROR(first_reqs, ": truncation array");
65822 }
65823 {
65824 int i;
65825
65826#ifdef FREECIV_JSON_CONNECTION
65827 /* Enter array. */
65828 field_addr.sub_location = plocation_elem_new(0);
65829#endif /* FREECIV_JSON_CONNECTION */
65830
65831 for (i = 0; i < real_packet->first_reqs_count; i++) {
65832#ifdef FREECIV_JSON_CONNECTION
65833 field_addr.sub_location->number = i;
65834#endif /* FREECIV_JSON_CONNECTION */
65835
65836 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs[i])) {
65837 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
65838 }
65839 }
65840
65841#ifdef FREECIV_JSON_CONNECTION
65842 /* Exit array. */
65843 FC_FREE(field_addr.sub_location);
65844#endif /* FREECIV_JSON_CONNECTION */
65845 }
65846#ifdef FREECIV_JSON_CONNECTION
65847 field_addr.name = "move_cost";
65848#endif /* FREECIV_JSON_CONNECTION */
65849 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
65850 RECEIVE_PACKET_FIELD_ERROR(move_cost);
65851 }
65852#ifdef FREECIV_JSON_CONNECTION
65853 field_addr.name = "move_mode";
65854#endif /* FREECIV_JSON_CONNECTION */
65855 {
65856 int readin;
65857
65858 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65859 RECEIVE_PACKET_FIELD_ERROR(move_mode);
65860 }
65861 real_packet->move_mode = readin;
65862 }
65863#ifdef FREECIV_JSON_CONNECTION
65864 field_addr.name = "tile_incr_const";
65865#endif /* FREECIV_JSON_CONNECTION */
65866 {
65867 int i;
65868
65869#ifdef FREECIV_JSON_CONNECTION
65870 /* Enter array. */
65871 field_addr.sub_location = plocation_elem_new(0);
65872#endif /* FREECIV_JSON_CONNECTION */
65873
65874 for (i = 0; i < O_LAST; i++) {
65875#ifdef FREECIV_JSON_CONNECTION
65876 field_addr.sub_location->number = i;
65877#endif /* FREECIV_JSON_CONNECTION */
65878
65879 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
65880 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
65881 }
65882 }
65883
65884#ifdef FREECIV_JSON_CONNECTION
65885 /* Exit array. */
65886 FC_FREE(field_addr.sub_location);
65887#endif /* FREECIV_JSON_CONNECTION */
65888 }
65889#ifdef FREECIV_JSON_CONNECTION
65890 field_addr.name = "tile_incr";
65891#endif /* FREECIV_JSON_CONNECTION */
65892 {
65893 int i;
65894
65895#ifdef FREECIV_JSON_CONNECTION
65896 /* Enter array. */
65897 field_addr.sub_location = plocation_elem_new(0);
65898#endif /* FREECIV_JSON_CONNECTION */
65899
65900 for (i = 0; i < O_LAST; i++) {
65901#ifdef FREECIV_JSON_CONNECTION
65902 field_addr.sub_location->number = i;
65903#endif /* FREECIV_JSON_CONNECTION */
65904
65905 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
65906 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
65907 }
65908 }
65909
65910#ifdef FREECIV_JSON_CONNECTION
65911 /* Exit array. */
65912 FC_FREE(field_addr.sub_location);
65913#endif /* FREECIV_JSON_CONNECTION */
65914 }
65915#ifdef FREECIV_JSON_CONNECTION
65916 field_addr.name = "tile_bonus";
65917#endif /* FREECIV_JSON_CONNECTION */
65918 {
65919 int i;
65920
65921#ifdef FREECIV_JSON_CONNECTION
65922 /* Enter array. */
65923 field_addr.sub_location = plocation_elem_new(0);
65924#endif /* FREECIV_JSON_CONNECTION */
65925
65926 for (i = 0; i < O_LAST; i++) {
65927#ifdef FREECIV_JSON_CONNECTION
65928 field_addr.sub_location->number = i;
65929#endif /* FREECIV_JSON_CONNECTION */
65930
65931 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
65932 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
65933 }
65934 }
65935
65936#ifdef FREECIV_JSON_CONNECTION
65937 /* Exit array. */
65938 FC_FREE(field_addr.sub_location);
65939#endif /* FREECIV_JSON_CONNECTION */
65940 }
65941#ifdef FREECIV_JSON_CONNECTION
65942 field_addr.name = "compat";
65943#endif /* FREECIV_JSON_CONNECTION */
65944 {
65945 int readin;
65946
65947 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65949 }
65950 real_packet->compat = readin;
65951 }
65952#ifdef FREECIV_JSON_CONNECTION
65953 field_addr.name = "integrates";
65954#endif /* FREECIV_JSON_CONNECTION */
65955 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
65956 RECEIVE_PACKET_FIELD_ERROR(integrates);
65957 }
65958#ifdef FREECIV_JSON_CONNECTION
65959 field_addr.name = "flags";
65960#endif /* FREECIV_JSON_CONNECTION */
65961 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
65963 }
65964#endif
65965 log_packet_detailed("packet_ruleset_road_100: got info about ()");
65966
65967#ifdef FREECIV_DELTA_PROTOCOL
65968 if (NULL == *hash) {
65970 NULL, NULL, NULL, free);
65971 }
65972
65973 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
65974 *real_packet = *old;
65975 } else {
65976 log_packet_detailed(" no old info");
65977 memset(real_packet, 0, sizeof(*real_packet));
65978 }
65979
65980 if (BV_ISSET(fields, 0)) {
65981 log_packet_detailed(" got field 'id'");
65982#ifdef FREECIV_JSON_CONNECTION
65983 field_addr.name = "id";
65984#endif /* FREECIV_JSON_CONNECTION */
65985 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
65987 }
65988 }
65989 if (BV_ISSET(fields, 1)) {
65990 log_packet_detailed(" got field 'gui_type'");
65991#ifdef FREECIV_JSON_CONNECTION
65992 field_addr.name = "gui_type";
65993#endif /* FREECIV_JSON_CONNECTION */
65994 {
65995 int readin;
65996
65997 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
65999 }
66000 real_packet->gui_type = readin;
66001 }
66002 }
66003 if (BV_ISSET(fields, 2)) {
66004 log_packet_detailed(" got field 'first_reqs_count'");
66005#ifdef FREECIV_JSON_CONNECTION
66006 field_addr.name = "first_reqs_count";
66007#endif /* FREECIV_JSON_CONNECTION */
66008 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->first_reqs_count)) {
66009 RECEIVE_PACKET_FIELD_ERROR(first_reqs_count);
66010 }
66011 }
66012 if (BV_ISSET(fields, 3)) {
66013 log_packet_detailed(" got field 'first_reqs'");
66014#ifdef FREECIV_JSON_CONNECTION
66015 field_addr.name = "first_reqs";
66016#endif /* FREECIV_JSON_CONNECTION */
66017 if (real_packet->first_reqs_count > MAX_NUM_REQS) {
66018 RECEIVE_PACKET_FIELD_ERROR(first_reqs, ": truncation array");
66019 }
66020 {
66021 int i;
66022
66023#ifdef FREECIV_JSON_CONNECTION
66024 /* Enter array. */
66025 field_addr.sub_location = plocation_elem_new(0);
66026#endif /* FREECIV_JSON_CONNECTION */
66027
66028 for (i = 0; i < real_packet->first_reqs_count; i++) {
66029#ifdef FREECIV_JSON_CONNECTION
66030 field_addr.sub_location->number = i;
66031#endif /* FREECIV_JSON_CONNECTION */
66032
66033 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->first_reqs[i])) {
66034 RECEIVE_PACKET_FIELD_ERROR(first_reqs);
66035 }
66036 }
66037
66038#ifdef FREECIV_JSON_CONNECTION
66039 /* Exit array. */
66040 FC_FREE(field_addr.sub_location);
66041#endif /* FREECIV_JSON_CONNECTION */
66042 }
66043 }
66044 if (BV_ISSET(fields, 4)) {
66045 log_packet_detailed(" got field 'move_cost'");
66046#ifdef FREECIV_JSON_CONNECTION
66047 field_addr.name = "move_cost";
66048#endif /* FREECIV_JSON_CONNECTION */
66049 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->move_cost)) {
66050 RECEIVE_PACKET_FIELD_ERROR(move_cost);
66051 }
66052 }
66053 if (BV_ISSET(fields, 5)) {
66054 log_packet_detailed(" got field 'move_mode'");
66055#ifdef FREECIV_JSON_CONNECTION
66056 field_addr.name = "move_mode";
66057#endif /* FREECIV_JSON_CONNECTION */
66058 {
66059 int readin;
66060
66061 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66062 RECEIVE_PACKET_FIELD_ERROR(move_mode);
66063 }
66064 real_packet->move_mode = readin;
66065 }
66066 }
66067 if (BV_ISSET(fields, 6)) {
66068 log_packet_detailed(" got field 'tile_incr_const'");
66069#ifdef FREECIV_JSON_CONNECTION
66070 field_addr.name = "tile_incr_const";
66071#endif /* FREECIV_JSON_CONNECTION */
66072 {
66073 int i;
66074
66075#ifdef FREECIV_JSON_CONNECTION
66076 /* Enter array. */
66077 field_addr.sub_location = plocation_elem_new(0);
66078#endif /* FREECIV_JSON_CONNECTION */
66079
66080 for (i = 0; i < O_LAST; i++) {
66081#ifdef FREECIV_JSON_CONNECTION
66082 field_addr.sub_location->number = i;
66083#endif /* FREECIV_JSON_CONNECTION */
66084
66085 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr_const[i])) {
66086 RECEIVE_PACKET_FIELD_ERROR(tile_incr_const);
66087 }
66088 }
66089
66090#ifdef FREECIV_JSON_CONNECTION
66091 /* Exit array. */
66092 FC_FREE(field_addr.sub_location);
66093#endif /* FREECIV_JSON_CONNECTION */
66094 }
66095 }
66096 if (BV_ISSET(fields, 7)) {
66097 log_packet_detailed(" got field 'tile_incr'");
66098#ifdef FREECIV_JSON_CONNECTION
66099 field_addr.name = "tile_incr";
66100#endif /* FREECIV_JSON_CONNECTION */
66101 {
66102 int i;
66103
66104#ifdef FREECIV_JSON_CONNECTION
66105 /* Enter array. */
66106 field_addr.sub_location = plocation_elem_new(0);
66107#endif /* FREECIV_JSON_CONNECTION */
66108
66109 for (i = 0; i < O_LAST; i++) {
66110#ifdef FREECIV_JSON_CONNECTION
66111 field_addr.sub_location->number = i;
66112#endif /* FREECIV_JSON_CONNECTION */
66113
66114 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_incr[i])) {
66115 RECEIVE_PACKET_FIELD_ERROR(tile_incr);
66116 }
66117 }
66118
66119#ifdef FREECIV_JSON_CONNECTION
66120 /* Exit array. */
66121 FC_FREE(field_addr.sub_location);
66122#endif /* FREECIV_JSON_CONNECTION */
66123 }
66124 }
66125 if (BV_ISSET(fields, 8)) {
66126 log_packet_detailed(" got field 'tile_bonus'");
66127#ifdef FREECIV_JSON_CONNECTION
66128 field_addr.name = "tile_bonus";
66129#endif /* FREECIV_JSON_CONNECTION */
66130 {
66131 int i;
66132
66133#ifdef FREECIV_JSON_CONNECTION
66134 /* Enter array. */
66135 field_addr.sub_location = plocation_elem_new(0);
66136#endif /* FREECIV_JSON_CONNECTION */
66137
66138 for (i = 0; i < O_LAST; i++) {
66139#ifdef FREECIV_JSON_CONNECTION
66140 field_addr.sub_location->number = i;
66141#endif /* FREECIV_JSON_CONNECTION */
66142
66143 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->tile_bonus[i])) {
66144 RECEIVE_PACKET_FIELD_ERROR(tile_bonus);
66145 }
66146 }
66147
66148#ifdef FREECIV_JSON_CONNECTION
66149 /* Exit array. */
66150 FC_FREE(field_addr.sub_location);
66151#endif /* FREECIV_JSON_CONNECTION */
66152 }
66153 }
66154 if (BV_ISSET(fields, 9)) {
66155 log_packet_detailed(" got field 'compat'");
66156#ifdef FREECIV_JSON_CONNECTION
66157 field_addr.name = "compat";
66158#endif /* FREECIV_JSON_CONNECTION */
66159 {
66160 int readin;
66161
66162 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
66164 }
66165 real_packet->compat = readin;
66166 }
66167 }
66168 if (BV_ISSET(fields, 10)) {
66169 log_packet_detailed(" got field 'integrates'");
66170#ifdef FREECIV_JSON_CONNECTION
66171 field_addr.name = "integrates";
66172#endif /* FREECIV_JSON_CONNECTION */
66173 if (!DIO_BV_GET(&din, &field_addr, real_packet->integrates)) {
66174 RECEIVE_PACKET_FIELD_ERROR(integrates);
66175 }
66176 }
66177 if (BV_ISSET(fields, 11)) {
66178 log_packet_detailed(" got field 'flags'");
66179#ifdef FREECIV_JSON_CONNECTION
66180 field_addr.name = "flags";
66181#endif /* FREECIV_JSON_CONNECTION */
66182 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
66184 }
66185 }
66186
66187 if (NULL == old) {
66188 old = fc_malloc(sizeof(*old));
66189 *old = *real_packet;
66190 genhash_insert(*hash, old, old);
66191 } else {
66192 *old = *real_packet;
66193 }
66194
66195#endif /* FREECIV_DELTA_PROTOCOL */
66197}
66198
66199static int send_packet_ruleset_road_100(struct connection *pc, const struct packet_ruleset_road *packet)
66200{
66201 const struct packet_ruleset_road *real_packet = packet;
66202 int e;
66203#ifdef FREECIV_DELTA_PROTOCOL
66205 struct packet_ruleset_road *old;
66206 bool differ;
66207 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ROAD;
66208#endif /* FREECIV_DELTA_PROTOCOL */
66210#ifdef FREECIV_JSON_CONNECTION
66211 struct plocation field_addr;
66212 {
66216 }
66217#endif /* FREECIV_JSON_CONNECTION */
66218
66219 log_packet_detailed("packet_ruleset_road_100: sending info about ()");
66220
66221#ifdef FREECIV_DELTA_PROTOCOL
66222 if (NULL == *hash) {
66224 NULL, NULL, NULL, free);
66225 }
66226 BV_CLR_ALL(fields);
66227
66228 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
66229 old = fc_malloc(sizeof(*old));
66230 *old = *real_packet;
66231 genhash_insert(*hash, old, old);
66232 memset(old, 0, sizeof(*old));
66233 }
66234 differ = (old->id != real_packet->id);
66235 if (differ) {
66236 BV_SET(fields, 0);
66237 }
66238
66239 differ = (old->gui_type != real_packet->gui_type);
66240 if (differ) {
66241 BV_SET(fields, 1);
66242 }
66243
66244 differ = (old->first_reqs_count != real_packet->first_reqs_count);
66245 if (differ) {
66246 BV_SET(fields, 2);
66247 }
66248
66249 differ = (old->first_reqs_count != real_packet->first_reqs_count);
66250 if (!differ) {
66251 int i;
66252
66253 for (i = 0; i < real_packet->first_reqs_count; i++) {
66254 differ = !are_requirements_equal(&old->first_reqs[i], &real_packet->first_reqs[i]);
66255 if (differ) {
66256 break;
66257 }
66258 }
66259 }
66260 if (differ) {
66261 BV_SET(fields, 3);
66262 }
66263
66264 differ = (old->move_cost != real_packet->move_cost);
66265 if (differ) {
66266 BV_SET(fields, 4);
66267 }
66268
66269 differ = (old->move_mode != real_packet->move_mode);
66270 if (differ) {
66271 BV_SET(fields, 5);
66272 }
66273
66274 differ = FALSE;
66275 {
66276 int i;
66277
66278 for (i = 0; i < O_LAST; i++) {
66279 differ = (old->tile_incr_const[i] != real_packet->tile_incr_const[i]);
66280 if (differ) {
66281 break;
66282 }
66283 }
66284 }
66285 if (differ) {
66286 BV_SET(fields, 6);
66287 }
66288
66289 differ = FALSE;
66290 {
66291 int i;
66292
66293 for (i = 0; i < O_LAST; i++) {
66294 differ = (old->tile_incr[i] != real_packet->tile_incr[i]);
66295 if (differ) {
66296 break;
66297 }
66298 }
66299 }
66300 if (differ) {
66301 BV_SET(fields, 7);
66302 }
66303
66304 differ = FALSE;
66305 {
66306 int i;
66307
66308 for (i = 0; i < O_LAST; i++) {
66309 differ = (old->tile_bonus[i] != real_packet->tile_bonus[i]);
66310 if (differ) {
66311 break;
66312 }
66313 }
66314 }
66315 if (differ) {
66316 BV_SET(fields, 8);
66317 }
66318
66319 differ = (old->compat != real_packet->compat);
66320 if (differ) {
66321 BV_SET(fields, 9);
66322 }
66323
66324 differ = !BV_ARE_EQUAL(old->integrates, real_packet->integrates);
66325 if (differ) {
66326 BV_SET(fields, 10);
66327 }
66328
66329 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
66330 if (differ) {
66331 BV_SET(fields, 11);
66332 }
66333
66334
66335#ifdef FREECIV_JSON_CONNECTION
66336 field_addr.name = "fields";
66337#endif /* FREECIV_JSON_CONNECTION */
66338 e = 0;
66339 e |= DIO_BV_PUT(&dout, &field_addr, fields);
66340 if (e) {
66341 log_packet_detailed("fields bitvector error detected");
66342 }
66343
66344 if (BV_ISSET(fields, 0)) {
66345 log_packet_detailed(" field 'id' has changed");
66346#ifdef FREECIV_JSON_CONNECTION
66347 field_addr.name = "id";
66348#endif /* FREECIV_JSON_CONNECTION */
66349 e = 0;
66350 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
66351 if (e) {
66352 log_packet_detailed("'id' field error detected");
66353 }
66354 }
66355 if (BV_ISSET(fields, 1)) {
66356 log_packet_detailed(" field 'gui_type' has changed");
66357#ifdef FREECIV_JSON_CONNECTION
66358 field_addr.name = "gui_type";
66359#endif /* FREECIV_JSON_CONNECTION */
66360 e = 0;
66361 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
66362 if (e) {
66363 log_packet_detailed("'gui_type' field error detected");
66364 }
66365 }
66366 if (BV_ISSET(fields, 2)) {
66367 log_packet_detailed(" field 'first_reqs_count' has changed");
66368#ifdef FREECIV_JSON_CONNECTION
66369 field_addr.name = "first_reqs_count";
66370#endif /* FREECIV_JSON_CONNECTION */
66371 e = 0;
66372 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->first_reqs_count);
66373 if (e) {
66374 log_packet_detailed("'first_reqs_count' field error detected");
66375 }
66376 }
66377 if (BV_ISSET(fields, 3)) {
66378 log_packet_detailed(" field 'first_reqs' has changed");
66379#ifdef FREECIV_JSON_CONNECTION
66380 field_addr.name = "first_reqs";
66381#endif /* FREECIV_JSON_CONNECTION */
66382 e = 0;
66383 {
66384 int i;
66385
66386#ifdef FREECIV_JSON_CONNECTION
66387 /* Create the array. */
66388 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->first_reqs_count);
66389
66390 /* Enter the array. */
66391 field_addr.sub_location = plocation_elem_new(0);
66392#endif /* FREECIV_JSON_CONNECTION */
66393
66394 for (i = 0; i < real_packet->first_reqs_count; i++) {
66395#ifdef FREECIV_JSON_CONNECTION
66396 /* Next array element. */
66397 field_addr.sub_location->number = i;
66398#endif /* FREECIV_JSON_CONNECTION */
66399
66400 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs[i]);
66401 }
66402
66403#ifdef FREECIV_JSON_CONNECTION
66404 /* Exit array. */
66405 FC_FREE(field_addr.sub_location);
66406#endif /* FREECIV_JSON_CONNECTION */
66407 }
66408 if (e) {
66409 log_packet_detailed("'first_reqs' field error detected");
66410 }
66411 }
66412 if (BV_ISSET(fields, 4)) {
66413 log_packet_detailed(" field 'move_cost' has changed");
66414#ifdef FREECIV_JSON_CONNECTION
66415 field_addr.name = "move_cost";
66416#endif /* FREECIV_JSON_CONNECTION */
66417 e = 0;
66418 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
66419 if (e) {
66420 log_packet_detailed("'move_cost' field error detected");
66421 }
66422 }
66423 if (BV_ISSET(fields, 5)) {
66424 log_packet_detailed(" field 'move_mode' has changed");
66425#ifdef FREECIV_JSON_CONNECTION
66426 field_addr.name = "move_mode";
66427#endif /* FREECIV_JSON_CONNECTION */
66428 e = 0;
66429 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
66430 if (e) {
66431 log_packet_detailed("'move_mode' field error detected");
66432 }
66433 }
66434 if (BV_ISSET(fields, 6)) {
66435 log_packet_detailed(" field 'tile_incr_const' has changed");
66436#ifdef FREECIV_JSON_CONNECTION
66437 field_addr.name = "tile_incr_const";
66438#endif /* FREECIV_JSON_CONNECTION */
66439 e = 0;
66440 {
66441 int i;
66442
66443#ifdef FREECIV_JSON_CONNECTION
66444 /* Create the array. */
66445 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66446
66447 /* Enter the array. */
66448 field_addr.sub_location = plocation_elem_new(0);
66449#endif /* FREECIV_JSON_CONNECTION */
66450
66451 for (i = 0; i < O_LAST; i++) {
66452#ifdef FREECIV_JSON_CONNECTION
66453 /* Next array element. */
66454 field_addr.sub_location->number = i;
66455#endif /* FREECIV_JSON_CONNECTION */
66456
66457 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
66458 }
66459
66460#ifdef FREECIV_JSON_CONNECTION
66461 /* Exit array. */
66462 FC_FREE(field_addr.sub_location);
66463#endif /* FREECIV_JSON_CONNECTION */
66464 }
66465 if (e) {
66466 log_packet_detailed("'tile_incr_const' field error detected");
66467 }
66468 }
66469 if (BV_ISSET(fields, 7)) {
66470 log_packet_detailed(" field 'tile_incr' has changed");
66471#ifdef FREECIV_JSON_CONNECTION
66472 field_addr.name = "tile_incr";
66473#endif /* FREECIV_JSON_CONNECTION */
66474 e = 0;
66475 {
66476 int i;
66477
66478#ifdef FREECIV_JSON_CONNECTION
66479 /* Create the array. */
66480 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66481
66482 /* Enter the array. */
66483 field_addr.sub_location = plocation_elem_new(0);
66484#endif /* FREECIV_JSON_CONNECTION */
66485
66486 for (i = 0; i < O_LAST; i++) {
66487#ifdef FREECIV_JSON_CONNECTION
66488 /* Next array element. */
66489 field_addr.sub_location->number = i;
66490#endif /* FREECIV_JSON_CONNECTION */
66491
66492 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
66493 }
66494
66495#ifdef FREECIV_JSON_CONNECTION
66496 /* Exit array. */
66497 FC_FREE(field_addr.sub_location);
66498#endif /* FREECIV_JSON_CONNECTION */
66499 }
66500 if (e) {
66501 log_packet_detailed("'tile_incr' field error detected");
66502 }
66503 }
66504 if (BV_ISSET(fields, 8)) {
66505 log_packet_detailed(" field 'tile_bonus' has changed");
66506#ifdef FREECIV_JSON_CONNECTION
66507 field_addr.name = "tile_bonus";
66508#endif /* FREECIV_JSON_CONNECTION */
66509 e = 0;
66510 {
66511 int i;
66512
66513#ifdef FREECIV_JSON_CONNECTION
66514 /* Create the array. */
66515 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66516
66517 /* Enter the array. */
66518 field_addr.sub_location = plocation_elem_new(0);
66519#endif /* FREECIV_JSON_CONNECTION */
66520
66521 for (i = 0; i < O_LAST; i++) {
66522#ifdef FREECIV_JSON_CONNECTION
66523 /* Next array element. */
66524 field_addr.sub_location->number = i;
66525#endif /* FREECIV_JSON_CONNECTION */
66526
66527 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
66528 }
66529
66530#ifdef FREECIV_JSON_CONNECTION
66531 /* Exit array. */
66532 FC_FREE(field_addr.sub_location);
66533#endif /* FREECIV_JSON_CONNECTION */
66534 }
66535 if (e) {
66536 log_packet_detailed("'tile_bonus' field error detected");
66537 }
66538 }
66539 if (BV_ISSET(fields, 9)) {
66540 log_packet_detailed(" field 'compat' has changed");
66541#ifdef FREECIV_JSON_CONNECTION
66542 field_addr.name = "compat";
66543#endif /* FREECIV_JSON_CONNECTION */
66544 e = 0;
66545 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
66546 if (e) {
66547 log_packet_detailed("'compat' field error detected");
66548 }
66549 }
66550 if (BV_ISSET(fields, 10)) {
66551 log_packet_detailed(" field 'integrates' has changed");
66552#ifdef FREECIV_JSON_CONNECTION
66553 field_addr.name = "integrates";
66554#endif /* FREECIV_JSON_CONNECTION */
66555 e = 0;
66556 e |= DIO_BV_PUT(&dout, &field_addr, packet->integrates);
66557 if (e) {
66558 log_packet_detailed("'integrates' field error detected");
66559 }
66560 }
66561 if (BV_ISSET(fields, 11)) {
66562 log_packet_detailed(" field 'flags' has changed");
66563#ifdef FREECIV_JSON_CONNECTION
66564 field_addr.name = "flags";
66565#endif /* FREECIV_JSON_CONNECTION */
66566 e = 0;
66567 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
66568 if (e) {
66569 log_packet_detailed("'flags' field error detected");
66570 }
66571 }
66572
66573 *old = *real_packet;
66574#endif /* FREECIV_DELTA_PROTOCOL */
66575#ifndef FREECIV_DELTA_PROTOCOL
66576#ifdef FREECIV_JSON_CONNECTION
66577 field_addr.name = "id";
66578#endif /* FREECIV_JSON_CONNECTION */
66579 e = 0;
66580 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
66581 if (e) {
66582 log_packet_detailed("'id' field error detected");
66583 }
66584#ifdef FREECIV_JSON_CONNECTION
66585 field_addr.name = "gui_type";
66586#endif /* FREECIV_JSON_CONNECTION */
66587 e = 0;
66588 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->gui_type);
66589 if (e) {
66590 log_packet_detailed("'gui_type' field error detected");
66591 }
66592#ifdef FREECIV_JSON_CONNECTION
66593 field_addr.name = "first_reqs_count";
66594#endif /* FREECIV_JSON_CONNECTION */
66595 e = 0;
66596 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->first_reqs_count);
66597 if (e) {
66598 log_packet_detailed("'first_reqs_count' field error detected");
66599 }
66600#ifdef FREECIV_JSON_CONNECTION
66601 field_addr.name = "first_reqs";
66602#endif /* FREECIV_JSON_CONNECTION */
66603 e = 0;
66604 {
66605 int i;
66606
66607#ifdef FREECIV_JSON_CONNECTION
66608 /* Create the array. */
66609 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->first_reqs_count);
66610
66611 /* Enter the array. */
66612 field_addr.sub_location = plocation_elem_new(0);
66613#endif /* FREECIV_JSON_CONNECTION */
66614
66615 for (i = 0; i < real_packet->first_reqs_count; i++) {
66616#ifdef FREECIV_JSON_CONNECTION
66617 /* Next array element. */
66618 field_addr.sub_location->number = i;
66619#endif /* FREECIV_JSON_CONNECTION */
66620
66621 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->first_reqs[i]);
66622 }
66623
66624#ifdef FREECIV_JSON_CONNECTION
66625 /* Exit array. */
66626 FC_FREE(field_addr.sub_location);
66627#endif /* FREECIV_JSON_CONNECTION */
66628 }
66629 if (e) {
66630 log_packet_detailed("'first_reqs' field error detected");
66631 }
66632#ifdef FREECIV_JSON_CONNECTION
66633 field_addr.name = "move_cost";
66634#endif /* FREECIV_JSON_CONNECTION */
66635 e = 0;
66636 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->move_cost);
66637 if (e) {
66638 log_packet_detailed("'move_cost' field error detected");
66639 }
66640#ifdef FREECIV_JSON_CONNECTION
66641 field_addr.name = "move_mode";
66642#endif /* FREECIV_JSON_CONNECTION */
66643 e = 0;
66644 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->move_mode);
66645 if (e) {
66646 log_packet_detailed("'move_mode' field error detected");
66647 }
66648#ifdef FREECIV_JSON_CONNECTION
66649 field_addr.name = "tile_incr_const";
66650#endif /* FREECIV_JSON_CONNECTION */
66651 e = 0;
66652 {
66653 int i;
66654
66655#ifdef FREECIV_JSON_CONNECTION
66656 /* Create the array. */
66657 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66658
66659 /* Enter the array. */
66660 field_addr.sub_location = plocation_elem_new(0);
66661#endif /* FREECIV_JSON_CONNECTION */
66662
66663 for (i = 0; i < O_LAST; i++) {
66664#ifdef FREECIV_JSON_CONNECTION
66665 /* Next array element. */
66666 field_addr.sub_location->number = i;
66667#endif /* FREECIV_JSON_CONNECTION */
66668
66669 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr_const[i]);
66670 }
66671
66672#ifdef FREECIV_JSON_CONNECTION
66673 /* Exit array. */
66674 FC_FREE(field_addr.sub_location);
66675#endif /* FREECIV_JSON_CONNECTION */
66676 }
66677 if (e) {
66678 log_packet_detailed("'tile_incr_const' field error detected");
66679 }
66680#ifdef FREECIV_JSON_CONNECTION
66681 field_addr.name = "tile_incr";
66682#endif /* FREECIV_JSON_CONNECTION */
66683 e = 0;
66684 {
66685 int i;
66686
66687#ifdef FREECIV_JSON_CONNECTION
66688 /* Create the array. */
66689 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66690
66691 /* Enter the array. */
66692 field_addr.sub_location = plocation_elem_new(0);
66693#endif /* FREECIV_JSON_CONNECTION */
66694
66695 for (i = 0; i < O_LAST; i++) {
66696#ifdef FREECIV_JSON_CONNECTION
66697 /* Next array element. */
66698 field_addr.sub_location->number = i;
66699#endif /* FREECIV_JSON_CONNECTION */
66700
66701 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_incr[i]);
66702 }
66703
66704#ifdef FREECIV_JSON_CONNECTION
66705 /* Exit array. */
66706 FC_FREE(field_addr.sub_location);
66707#endif /* FREECIV_JSON_CONNECTION */
66708 }
66709 if (e) {
66710 log_packet_detailed("'tile_incr' field error detected");
66711 }
66712#ifdef FREECIV_JSON_CONNECTION
66713 field_addr.name = "tile_bonus";
66714#endif /* FREECIV_JSON_CONNECTION */
66715 e = 0;
66716 {
66717 int i;
66718
66719#ifdef FREECIV_JSON_CONNECTION
66720 /* Create the array. */
66721 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
66722
66723 /* Enter the array. */
66724 field_addr.sub_location = plocation_elem_new(0);
66725#endif /* FREECIV_JSON_CONNECTION */
66726
66727 for (i = 0; i < O_LAST; i++) {
66728#ifdef FREECIV_JSON_CONNECTION
66729 /* Next array element. */
66730 field_addr.sub_location->number = i;
66731#endif /* FREECIV_JSON_CONNECTION */
66732
66733 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->tile_bonus[i]);
66734 }
66735
66736#ifdef FREECIV_JSON_CONNECTION
66737 /* Exit array. */
66738 FC_FREE(field_addr.sub_location);
66739#endif /* FREECIV_JSON_CONNECTION */
66740 }
66741 if (e) {
66742 log_packet_detailed("'tile_bonus' field error detected");
66743 }
66744#ifdef FREECIV_JSON_CONNECTION
66745 field_addr.name = "compat";
66746#endif /* FREECIV_JSON_CONNECTION */
66747 e = 0;
66748 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->compat);
66749 if (e) {
66750 log_packet_detailed("'compat' field error detected");
66751 }
66752#ifdef FREECIV_JSON_CONNECTION
66753 field_addr.name = "integrates";
66754#endif /* FREECIV_JSON_CONNECTION */
66755 e = 0;
66756 e |= DIO_BV_PUT(&dout, &field_addr, packet->integrates);
66757 if (e) {
66758 log_packet_detailed("'integrates' field error detected");
66759 }
66760#ifdef FREECIV_JSON_CONNECTION
66761 field_addr.name = "flags";
66762#endif /* FREECIV_JSON_CONNECTION */
66763 e = 0;
66764 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
66765 if (e) {
66766 log_packet_detailed("'flags' field error detected");
66767 }
66768
66769#endif
66771}
66772
66774{
66775 if (!pc->used) {
66776 log_error("WARNING: trying to send data to the closed connection %s",
66778 return -1;
66779 }
66780 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ROAD].packet != NULL, -1,
66781 "Handler for PACKET_RULESET_ROAD not installed");
66782 return pc->phs.handlers->send[PACKET_RULESET_ROAD].packet(pc, packet);
66783}
66784
66785void lsend_packet_ruleset_road(struct conn_list *dest, const struct packet_ruleset_road *packet)
66786{
66787 conn_list_iterate(dest, pconn) {
66790}
66791
66792#ifdef FREECIV_DELTA_PROTOCOL
66793#define hash_packet_ruleset_goods_100 hash_const
66794
66795#define cmp_packet_ruleset_goods_100 cmp_const
66796
66798#endif /* FREECIV_DELTA_PROTOCOL */
66799
66801{
66802#ifdef FREECIV_DELTA_PROTOCOL
66804 struct packet_ruleset_goods *old;
66805 struct genhash **hash = pc->phs.received + PACKET_RULESET_GOODS;
66806#endif /* FREECIV_DELTA_PROTOCOL */
66808#ifdef FREECIV_JSON_CONNECTION
66809 struct plocation field_addr;
66810 {
66814 }
66815#endif /* FREECIV_JSON_CONNECTION */
66816
66817#ifdef FREECIV_DELTA_PROTOCOL
66818#ifdef FREECIV_JSON_CONNECTION
66819 field_addr.name = "fields";
66820#endif /* FREECIV_JSON_CONNECTION */
66821 DIO_BV_GET(&din, &field_addr, fields);
66822
66823#else /* FREECIV_DELTA_PROTOCOL */
66824#ifdef FREECIV_JSON_CONNECTION
66825 field_addr.name = "id";
66826#endif /* FREECIV_JSON_CONNECTION */
66827 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
66829 }
66830#ifdef FREECIV_JSON_CONNECTION
66831 field_addr.name = "name";
66832#endif /* FREECIV_JSON_CONNECTION */
66833 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
66835 }
66836#ifdef FREECIV_JSON_CONNECTION
66837 field_addr.name = "rule_name";
66838#endif /* FREECIV_JSON_CONNECTION */
66839 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
66840 RECEIVE_PACKET_FIELD_ERROR(rule_name);
66841 }
66842#ifdef FREECIV_JSON_CONNECTION
66843 field_addr.name = "reqs_count";
66844#endif /* FREECIV_JSON_CONNECTION */
66845 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
66846 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
66847 }
66848#ifdef FREECIV_JSON_CONNECTION
66849 field_addr.name = "reqs";
66850#endif /* FREECIV_JSON_CONNECTION */
66851 if (real_packet->reqs_count > MAX_NUM_REQS) {
66852 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
66853 }
66854 {
66855 int i;
66856
66857#ifdef FREECIV_JSON_CONNECTION
66858 /* Enter array. */
66859 field_addr.sub_location = plocation_elem_new(0);
66860#endif /* FREECIV_JSON_CONNECTION */
66861
66862 for (i = 0; i < real_packet->reqs_count; i++) {
66863#ifdef FREECIV_JSON_CONNECTION
66864 field_addr.sub_location->number = i;
66865#endif /* FREECIV_JSON_CONNECTION */
66866
66867 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
66869 }
66870 }
66871
66872#ifdef FREECIV_JSON_CONNECTION
66873 /* Exit array. */
66874 FC_FREE(field_addr.sub_location);
66875#endif /* FREECIV_JSON_CONNECTION */
66876 }
66877#ifdef FREECIV_JSON_CONNECTION
66878 field_addr.name = "from_pct";
66879#endif /* FREECIV_JSON_CONNECTION */
66880 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
66882 }
66883#ifdef FREECIV_JSON_CONNECTION
66884 field_addr.name = "to_pct";
66885#endif /* FREECIV_JSON_CONNECTION */
66886 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
66888 }
66889#ifdef FREECIV_JSON_CONNECTION
66890 field_addr.name = "onetime_pct";
66891#endif /* FREECIV_JSON_CONNECTION */
66892 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
66893 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
66894 }
66895#ifdef FREECIV_JSON_CONNECTION
66896 field_addr.name = "flags";
66897#endif /* FREECIV_JSON_CONNECTION */
66898 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
66900 }
66901#ifdef FREECIV_JSON_CONNECTION
66902 field_addr.name = "helptext";
66903#endif /* FREECIV_JSON_CONNECTION */
66904 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
66906 }
66907#endif
66908 log_packet_detailed("packet_ruleset_goods_100: got info about ()");
66909
66910#ifdef FREECIV_DELTA_PROTOCOL
66911 if (NULL == *hash) {
66913 NULL, NULL, NULL, free);
66914 }
66915
66916 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
66917 *real_packet = *old;
66918 } else {
66919 log_packet_detailed(" no old info");
66920 memset(real_packet, 0, sizeof(*real_packet));
66921 }
66922
66923 if (BV_ISSET(fields, 0)) {
66924 log_packet_detailed(" got field 'id'");
66925#ifdef FREECIV_JSON_CONNECTION
66926 field_addr.name = "id";
66927#endif /* FREECIV_JSON_CONNECTION */
66928 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
66930 }
66931 }
66932 if (BV_ISSET(fields, 1)) {
66933 log_packet_detailed(" got field 'name'");
66934#ifdef FREECIV_JSON_CONNECTION
66935 field_addr.name = "name";
66936#endif /* FREECIV_JSON_CONNECTION */
66937 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
66939 }
66940 }
66941 if (BV_ISSET(fields, 2)) {
66942 log_packet_detailed(" got field 'rule_name'");
66943#ifdef FREECIV_JSON_CONNECTION
66944 field_addr.name = "rule_name";
66945#endif /* FREECIV_JSON_CONNECTION */
66946 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
66947 RECEIVE_PACKET_FIELD_ERROR(rule_name);
66948 }
66949 }
66950 if (BV_ISSET(fields, 3)) {
66951 log_packet_detailed(" got field 'reqs_count'");
66952#ifdef FREECIV_JSON_CONNECTION
66953 field_addr.name = "reqs_count";
66954#endif /* FREECIV_JSON_CONNECTION */
66955 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
66956 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
66957 }
66958 }
66959 if (BV_ISSET(fields, 4)) {
66960 log_packet_detailed(" got field 'reqs'");
66961#ifdef FREECIV_JSON_CONNECTION
66962 field_addr.name = "reqs";
66963#endif /* FREECIV_JSON_CONNECTION */
66964 if (real_packet->reqs_count > MAX_NUM_REQS) {
66965 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
66966 }
66967 {
66968 int i;
66969
66970#ifdef FREECIV_JSON_CONNECTION
66971 /* Enter array. */
66972 field_addr.sub_location = plocation_elem_new(0);
66973#endif /* FREECIV_JSON_CONNECTION */
66974
66975 for (i = 0; i < real_packet->reqs_count; i++) {
66976#ifdef FREECIV_JSON_CONNECTION
66977 field_addr.sub_location->number = i;
66978#endif /* FREECIV_JSON_CONNECTION */
66979
66980 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
66982 }
66983 }
66984
66985#ifdef FREECIV_JSON_CONNECTION
66986 /* Exit array. */
66987 FC_FREE(field_addr.sub_location);
66988#endif /* FREECIV_JSON_CONNECTION */
66989 }
66990 }
66991 if (BV_ISSET(fields, 5)) {
66992 log_packet_detailed(" got field 'from_pct'");
66993#ifdef FREECIV_JSON_CONNECTION
66994 field_addr.name = "from_pct";
66995#endif /* FREECIV_JSON_CONNECTION */
66996 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->from_pct)) {
66998 }
66999 }
67000 if (BV_ISSET(fields, 6)) {
67001 log_packet_detailed(" got field 'to_pct'");
67002#ifdef FREECIV_JSON_CONNECTION
67003 field_addr.name = "to_pct";
67004#endif /* FREECIV_JSON_CONNECTION */
67005 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->to_pct)) {
67007 }
67008 }
67009 if (BV_ISSET(fields, 7)) {
67010 log_packet_detailed(" got field 'onetime_pct'");
67011#ifdef FREECIV_JSON_CONNECTION
67012 field_addr.name = "onetime_pct";
67013#endif /* FREECIV_JSON_CONNECTION */
67014 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->onetime_pct)) {
67015 RECEIVE_PACKET_FIELD_ERROR(onetime_pct);
67016 }
67017 }
67018 if (BV_ISSET(fields, 8)) {
67019 log_packet_detailed(" got field 'flags'");
67020#ifdef FREECIV_JSON_CONNECTION
67021 field_addr.name = "flags";
67022#endif /* FREECIV_JSON_CONNECTION */
67023 if (!DIO_BV_GET(&din, &field_addr, real_packet->flags)) {
67025 }
67026 }
67027 if (BV_ISSET(fields, 9)) {
67028 log_packet_detailed(" got field 'helptext'");
67029#ifdef FREECIV_JSON_CONNECTION
67030 field_addr.name = "helptext";
67031#endif /* FREECIV_JSON_CONNECTION */
67032 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
67034 }
67035 }
67036
67037 if (NULL == old) {
67038 old = fc_malloc(sizeof(*old));
67039 *old = *real_packet;
67040 genhash_insert(*hash, old, old);
67041 } else {
67042 *old = *real_packet;
67043 }
67044
67045#endif /* FREECIV_DELTA_PROTOCOL */
67047}
67048
67049static int send_packet_ruleset_goods_100(struct connection *pc, const struct packet_ruleset_goods *packet)
67050{
67051 const struct packet_ruleset_goods *real_packet = packet;
67052 int e;
67053#ifdef FREECIV_DELTA_PROTOCOL
67055 struct packet_ruleset_goods *old;
67056 bool differ;
67057 struct genhash **hash = pc->phs.sent + PACKET_RULESET_GOODS;
67058#endif /* FREECIV_DELTA_PROTOCOL */
67060#ifdef FREECIV_JSON_CONNECTION
67061 struct plocation field_addr;
67062 {
67066 }
67067#endif /* FREECIV_JSON_CONNECTION */
67068
67069 log_packet_detailed("packet_ruleset_goods_100: sending info about ()");
67070
67071#ifdef FREECIV_DELTA_PROTOCOL
67072 if (NULL == *hash) {
67074 NULL, NULL, NULL, free);
67075 }
67076 BV_CLR_ALL(fields);
67077
67078 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
67079 old = fc_malloc(sizeof(*old));
67080 *old = *real_packet;
67081 genhash_insert(*hash, old, old);
67082 memset(old, 0, sizeof(*old));
67083 }
67084 differ = (old->id != real_packet->id);
67085 if (differ) {
67086 BV_SET(fields, 0);
67087 }
67088
67089 differ = (strcmp(old->name, real_packet->name) != 0);
67090 if (differ) {
67091 BV_SET(fields, 1);
67092 }
67093
67094 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
67095 if (differ) {
67096 BV_SET(fields, 2);
67097 }
67098
67099 differ = (old->reqs_count != real_packet->reqs_count);
67100 if (differ) {
67101 BV_SET(fields, 3);
67102 }
67103
67104 differ = (old->reqs_count != real_packet->reqs_count);
67105 if (!differ) {
67106 int i;
67107
67108 for (i = 0; i < real_packet->reqs_count; i++) {
67109 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
67110 if (differ) {
67111 break;
67112 }
67113 }
67114 }
67115 if (differ) {
67116 BV_SET(fields, 4);
67117 }
67118
67119 differ = (old->from_pct != real_packet->from_pct);
67120 if (differ) {
67121 BV_SET(fields, 5);
67122 }
67123
67124 differ = (old->to_pct != real_packet->to_pct);
67125 if (differ) {
67126 BV_SET(fields, 6);
67127 }
67128
67129 differ = (old->onetime_pct != real_packet->onetime_pct);
67130 if (differ) {
67131 BV_SET(fields, 7);
67132 }
67133
67134 differ = !BV_ARE_EQUAL(old->flags, real_packet->flags);
67135 if (differ) {
67136 BV_SET(fields, 8);
67137 }
67138
67139 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
67140 if (differ) {
67141 BV_SET(fields, 9);
67142 }
67143
67144
67145#ifdef FREECIV_JSON_CONNECTION
67146 field_addr.name = "fields";
67147#endif /* FREECIV_JSON_CONNECTION */
67148 e = 0;
67149 e |= DIO_BV_PUT(&dout, &field_addr, fields);
67150 if (e) {
67151 log_packet_detailed("fields bitvector error detected");
67152 }
67153
67154 if (BV_ISSET(fields, 0)) {
67155 log_packet_detailed(" field 'id' has changed");
67156#ifdef FREECIV_JSON_CONNECTION
67157 field_addr.name = "id";
67158#endif /* FREECIV_JSON_CONNECTION */
67159 e = 0;
67160 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67161 if (e) {
67162 log_packet_detailed("'id' field error detected");
67163 }
67164 }
67165 if (BV_ISSET(fields, 1)) {
67166 log_packet_detailed(" field 'name' has changed");
67167#ifdef FREECIV_JSON_CONNECTION
67168 field_addr.name = "name";
67169#endif /* FREECIV_JSON_CONNECTION */
67170 e = 0;
67171 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67172 if (e) {
67173 log_packet_detailed("'name' field error detected");
67174 }
67175 }
67176 if (BV_ISSET(fields, 2)) {
67177 log_packet_detailed(" field 'rule_name' has changed");
67178#ifdef FREECIV_JSON_CONNECTION
67179 field_addr.name = "rule_name";
67180#endif /* FREECIV_JSON_CONNECTION */
67181 e = 0;
67182 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67183 if (e) {
67184 log_packet_detailed("'rule_name' field error detected");
67185 }
67186 }
67187 if (BV_ISSET(fields, 3)) {
67188 log_packet_detailed(" field 'reqs_count' has changed");
67189#ifdef FREECIV_JSON_CONNECTION
67190 field_addr.name = "reqs_count";
67191#endif /* FREECIV_JSON_CONNECTION */
67192 e = 0;
67193 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
67194 if (e) {
67195 log_packet_detailed("'reqs_count' field error detected");
67196 }
67197 }
67198 if (BV_ISSET(fields, 4)) {
67199 log_packet_detailed(" field 'reqs' has changed");
67200#ifdef FREECIV_JSON_CONNECTION
67201 field_addr.name = "reqs";
67202#endif /* FREECIV_JSON_CONNECTION */
67203 e = 0;
67204 {
67205 int i;
67206
67207#ifdef FREECIV_JSON_CONNECTION
67208 /* Create the array. */
67209 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
67210
67211 /* Enter the array. */
67212 field_addr.sub_location = plocation_elem_new(0);
67213#endif /* FREECIV_JSON_CONNECTION */
67214
67215 for (i = 0; i < real_packet->reqs_count; i++) {
67216#ifdef FREECIV_JSON_CONNECTION
67217 /* Next array element. */
67218 field_addr.sub_location->number = i;
67219#endif /* FREECIV_JSON_CONNECTION */
67220
67221 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
67222 }
67223
67224#ifdef FREECIV_JSON_CONNECTION
67225 /* Exit array. */
67226 FC_FREE(field_addr.sub_location);
67227#endif /* FREECIV_JSON_CONNECTION */
67228 }
67229 if (e) {
67230 log_packet_detailed("'reqs' field error detected");
67231 }
67232 }
67233 if (BV_ISSET(fields, 5)) {
67234 log_packet_detailed(" field 'from_pct' has changed");
67235#ifdef FREECIV_JSON_CONNECTION
67236 field_addr.name = "from_pct";
67237#endif /* FREECIV_JSON_CONNECTION */
67238 e = 0;
67239 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
67240 if (e) {
67241 log_packet_detailed("'from_pct' field error detected");
67242 }
67243 }
67244 if (BV_ISSET(fields, 6)) {
67245 log_packet_detailed(" field 'to_pct' has changed");
67246#ifdef FREECIV_JSON_CONNECTION
67247 field_addr.name = "to_pct";
67248#endif /* FREECIV_JSON_CONNECTION */
67249 e = 0;
67250 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
67251 if (e) {
67252 log_packet_detailed("'to_pct' field error detected");
67253 }
67254 }
67255 if (BV_ISSET(fields, 7)) {
67256 log_packet_detailed(" field 'onetime_pct' has changed");
67257#ifdef FREECIV_JSON_CONNECTION
67258 field_addr.name = "onetime_pct";
67259#endif /* FREECIV_JSON_CONNECTION */
67260 e = 0;
67261 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
67262 if (e) {
67263 log_packet_detailed("'onetime_pct' field error detected");
67264 }
67265 }
67266 if (BV_ISSET(fields, 8)) {
67267 log_packet_detailed(" field 'flags' has changed");
67268#ifdef FREECIV_JSON_CONNECTION
67269 field_addr.name = "flags";
67270#endif /* FREECIV_JSON_CONNECTION */
67271 e = 0;
67272 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
67273 if (e) {
67274 log_packet_detailed("'flags' field error detected");
67275 }
67276 }
67277 if (BV_ISSET(fields, 9)) {
67278 log_packet_detailed(" field 'helptext' has changed");
67279#ifdef FREECIV_JSON_CONNECTION
67280 field_addr.name = "helptext";
67281#endif /* FREECIV_JSON_CONNECTION */
67282 e = 0;
67283 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
67284 if (e) {
67285 log_packet_detailed("'helptext' field error detected");
67286 }
67287 }
67288
67289 *old = *real_packet;
67290#endif /* FREECIV_DELTA_PROTOCOL */
67291#ifndef FREECIV_DELTA_PROTOCOL
67292#ifdef FREECIV_JSON_CONNECTION
67293 field_addr.name = "id";
67294#endif /* FREECIV_JSON_CONNECTION */
67295 e = 0;
67296 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67297 if (e) {
67298 log_packet_detailed("'id' field error detected");
67299 }
67300#ifdef FREECIV_JSON_CONNECTION
67301 field_addr.name = "name";
67302#endif /* FREECIV_JSON_CONNECTION */
67303 e = 0;
67304 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67305 if (e) {
67306 log_packet_detailed("'name' field error detected");
67307 }
67308#ifdef FREECIV_JSON_CONNECTION
67309 field_addr.name = "rule_name";
67310#endif /* FREECIV_JSON_CONNECTION */
67311 e = 0;
67312 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67313 if (e) {
67314 log_packet_detailed("'rule_name' field error detected");
67315 }
67316#ifdef FREECIV_JSON_CONNECTION
67317 field_addr.name = "reqs_count";
67318#endif /* FREECIV_JSON_CONNECTION */
67319 e = 0;
67320 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
67321 if (e) {
67322 log_packet_detailed("'reqs_count' field error detected");
67323 }
67324#ifdef FREECIV_JSON_CONNECTION
67325 field_addr.name = "reqs";
67326#endif /* FREECIV_JSON_CONNECTION */
67327 e = 0;
67328 {
67329 int i;
67330
67331#ifdef FREECIV_JSON_CONNECTION
67332 /* Create the array. */
67333 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
67334
67335 /* Enter the array. */
67336 field_addr.sub_location = plocation_elem_new(0);
67337#endif /* FREECIV_JSON_CONNECTION */
67338
67339 for (i = 0; i < real_packet->reqs_count; i++) {
67340#ifdef FREECIV_JSON_CONNECTION
67341 /* Next array element. */
67342 field_addr.sub_location->number = i;
67343#endif /* FREECIV_JSON_CONNECTION */
67344
67345 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
67346 }
67347
67348#ifdef FREECIV_JSON_CONNECTION
67349 /* Exit array. */
67350 FC_FREE(field_addr.sub_location);
67351#endif /* FREECIV_JSON_CONNECTION */
67352 }
67353 if (e) {
67354 log_packet_detailed("'reqs' field error detected");
67355 }
67356#ifdef FREECIV_JSON_CONNECTION
67357 field_addr.name = "from_pct";
67358#endif /* FREECIV_JSON_CONNECTION */
67359 e = 0;
67360 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->from_pct);
67361 if (e) {
67362 log_packet_detailed("'from_pct' field error detected");
67363 }
67364#ifdef FREECIV_JSON_CONNECTION
67365 field_addr.name = "to_pct";
67366#endif /* FREECIV_JSON_CONNECTION */
67367 e = 0;
67368 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->to_pct);
67369 if (e) {
67370 log_packet_detailed("'to_pct' field error detected");
67371 }
67372#ifdef FREECIV_JSON_CONNECTION
67373 field_addr.name = "onetime_pct";
67374#endif /* FREECIV_JSON_CONNECTION */
67375 e = 0;
67376 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->onetime_pct);
67377 if (e) {
67378 log_packet_detailed("'onetime_pct' field error detected");
67379 }
67380#ifdef FREECIV_JSON_CONNECTION
67381 field_addr.name = "flags";
67382#endif /* FREECIV_JSON_CONNECTION */
67383 e = 0;
67384 e |= DIO_BV_PUT(&dout, &field_addr, packet->flags);
67385 if (e) {
67386 log_packet_detailed("'flags' field error detected");
67387 }
67388#ifdef FREECIV_JSON_CONNECTION
67389 field_addr.name = "helptext";
67390#endif /* FREECIV_JSON_CONNECTION */
67391 e = 0;
67392 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
67393 if (e) {
67394 log_packet_detailed("'helptext' field error detected");
67395 }
67396
67397#endif
67399}
67400
67402{
67403 if (!pc->used) {
67404 log_error("WARNING: trying to send data to the closed connection %s",
67406 return -1;
67407 }
67408 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_GOODS].packet != NULL, -1,
67409 "Handler for PACKET_RULESET_GOODS not installed");
67410 return pc->phs.handlers->send[PACKET_RULESET_GOODS].packet(pc, packet);
67411}
67412
67413void lsend_packet_ruleset_goods(struct conn_list *dest, const struct packet_ruleset_goods *packet)
67414{
67415 conn_list_iterate(dest, pconn) {
67418}
67419
67420#ifdef FREECIV_DELTA_PROTOCOL
67421#define hash_packet_ruleset_disaster_100 hash_const
67422
67423#define cmp_packet_ruleset_disaster_100 cmp_const
67424
67426#endif /* FREECIV_DELTA_PROTOCOL */
67427
67429{
67430#ifdef FREECIV_DELTA_PROTOCOL
67432 struct packet_ruleset_disaster *old;
67433 struct genhash **hash = pc->phs.received + PACKET_RULESET_DISASTER;
67434#endif /* FREECIV_DELTA_PROTOCOL */
67436#ifdef FREECIV_JSON_CONNECTION
67437 struct plocation field_addr;
67438 {
67442 }
67443#endif /* FREECIV_JSON_CONNECTION */
67444
67445#ifdef FREECIV_DELTA_PROTOCOL
67446#ifdef FREECIV_JSON_CONNECTION
67447 field_addr.name = "fields";
67448#endif /* FREECIV_JSON_CONNECTION */
67449 DIO_BV_GET(&din, &field_addr, fields);
67450
67451#else /* FREECIV_DELTA_PROTOCOL */
67452#ifdef FREECIV_JSON_CONNECTION
67453 field_addr.name = "id";
67454#endif /* FREECIV_JSON_CONNECTION */
67455 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67457 }
67458#ifdef FREECIV_JSON_CONNECTION
67459 field_addr.name = "name";
67460#endif /* FREECIV_JSON_CONNECTION */
67461 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67463 }
67464#ifdef FREECIV_JSON_CONNECTION
67465 field_addr.name = "rule_name";
67466#endif /* FREECIV_JSON_CONNECTION */
67467 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
67468 RECEIVE_PACKET_FIELD_ERROR(rule_name);
67469 }
67470#ifdef FREECIV_JSON_CONNECTION
67471 field_addr.name = "reqs_count";
67472#endif /* FREECIV_JSON_CONNECTION */
67473 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
67474 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
67475 }
67476#ifdef FREECIV_JSON_CONNECTION
67477 field_addr.name = "reqs";
67478#endif /* FREECIV_JSON_CONNECTION */
67479 if (real_packet->reqs_count > MAX_NUM_REQS) {
67480 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
67481 }
67482 {
67483 int i;
67484
67485#ifdef FREECIV_JSON_CONNECTION
67486 /* Enter array. */
67487 field_addr.sub_location = plocation_elem_new(0);
67488#endif /* FREECIV_JSON_CONNECTION */
67489
67490 for (i = 0; i < real_packet->reqs_count; i++) {
67491#ifdef FREECIV_JSON_CONNECTION
67492 field_addr.sub_location->number = i;
67493#endif /* FREECIV_JSON_CONNECTION */
67494
67495 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
67497 }
67498 }
67499
67500#ifdef FREECIV_JSON_CONNECTION
67501 /* Exit array. */
67502 FC_FREE(field_addr.sub_location);
67503#endif /* FREECIV_JSON_CONNECTION */
67504 }
67505#ifdef FREECIV_JSON_CONNECTION
67506 field_addr.name = "frequency";
67507#endif /* FREECIV_JSON_CONNECTION */
67508 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
67509 RECEIVE_PACKET_FIELD_ERROR(frequency);
67510 }
67511#ifdef FREECIV_JSON_CONNECTION
67512 field_addr.name = "effects";
67513#endif /* FREECIV_JSON_CONNECTION */
67514 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
67516 }
67517#endif
67518 log_packet_detailed("packet_ruleset_disaster_100: got info about ()");
67519
67520#ifdef FREECIV_DELTA_PROTOCOL
67521 if (NULL == *hash) {
67523 NULL, NULL, NULL, free);
67524 }
67525
67526 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
67527 *real_packet = *old;
67528 } else {
67529 log_packet_detailed(" no old info");
67530 memset(real_packet, 0, sizeof(*real_packet));
67531 }
67532
67533 if (BV_ISSET(fields, 0)) {
67534 log_packet_detailed(" got field 'id'");
67535#ifdef FREECIV_JSON_CONNECTION
67536 field_addr.name = "id";
67537#endif /* FREECIV_JSON_CONNECTION */
67538 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67540 }
67541 }
67542 if (BV_ISSET(fields, 1)) {
67543 log_packet_detailed(" got field 'name'");
67544#ifdef FREECIV_JSON_CONNECTION
67545 field_addr.name = "name";
67546#endif /* FREECIV_JSON_CONNECTION */
67547 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67549 }
67550 }
67551 if (BV_ISSET(fields, 2)) {
67552 log_packet_detailed(" got field 'rule_name'");
67553#ifdef FREECIV_JSON_CONNECTION
67554 field_addr.name = "rule_name";
67555#endif /* FREECIV_JSON_CONNECTION */
67556 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
67557 RECEIVE_PACKET_FIELD_ERROR(rule_name);
67558 }
67559 }
67560 if (BV_ISSET(fields, 3)) {
67561 log_packet_detailed(" got field 'reqs_count'");
67562#ifdef FREECIV_JSON_CONNECTION
67563 field_addr.name = "reqs_count";
67564#endif /* FREECIV_JSON_CONNECTION */
67565 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
67566 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
67567 }
67568 }
67569 if (BV_ISSET(fields, 4)) {
67570 log_packet_detailed(" got field 'reqs'");
67571#ifdef FREECIV_JSON_CONNECTION
67572 field_addr.name = "reqs";
67573#endif /* FREECIV_JSON_CONNECTION */
67574 if (real_packet->reqs_count > MAX_NUM_REQS) {
67575 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
67576 }
67577 {
67578 int i;
67579
67580#ifdef FREECIV_JSON_CONNECTION
67581 /* Enter array. */
67582 field_addr.sub_location = plocation_elem_new(0);
67583#endif /* FREECIV_JSON_CONNECTION */
67584
67585 for (i = 0; i < real_packet->reqs_count; i++) {
67586#ifdef FREECIV_JSON_CONNECTION
67587 field_addr.sub_location->number = i;
67588#endif /* FREECIV_JSON_CONNECTION */
67589
67590 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
67592 }
67593 }
67594
67595#ifdef FREECIV_JSON_CONNECTION
67596 /* Exit array. */
67597 FC_FREE(field_addr.sub_location);
67598#endif /* FREECIV_JSON_CONNECTION */
67599 }
67600 }
67601 if (BV_ISSET(fields, 5)) {
67602 log_packet_detailed(" got field 'frequency'");
67603#ifdef FREECIV_JSON_CONNECTION
67604 field_addr.name = "frequency";
67605#endif /* FREECIV_JSON_CONNECTION */
67606 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->frequency)) {
67607 RECEIVE_PACKET_FIELD_ERROR(frequency);
67608 }
67609 }
67610 if (BV_ISSET(fields, 6)) {
67611 log_packet_detailed(" got field 'effects'");
67612#ifdef FREECIV_JSON_CONNECTION
67613 field_addr.name = "effects";
67614#endif /* FREECIV_JSON_CONNECTION */
67615 if (!DIO_BV_GET(&din, &field_addr, real_packet->effects)) {
67617 }
67618 }
67619
67620 if (NULL == old) {
67621 old = fc_malloc(sizeof(*old));
67622 *old = *real_packet;
67623 genhash_insert(*hash, old, old);
67624 } else {
67625 *old = *real_packet;
67626 }
67627
67628#endif /* FREECIV_DELTA_PROTOCOL */
67630}
67631
67633{
67634 const struct packet_ruleset_disaster *real_packet = packet;
67635 int e;
67636#ifdef FREECIV_DELTA_PROTOCOL
67638 struct packet_ruleset_disaster *old;
67639 bool differ;
67640 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DISASTER;
67641#endif /* FREECIV_DELTA_PROTOCOL */
67643#ifdef FREECIV_JSON_CONNECTION
67644 struct plocation field_addr;
67645 {
67649 }
67650#endif /* FREECIV_JSON_CONNECTION */
67651
67652 log_packet_detailed("packet_ruleset_disaster_100: sending info about ()");
67653
67654#ifdef FREECIV_DELTA_PROTOCOL
67655 if (NULL == *hash) {
67657 NULL, NULL, NULL, free);
67658 }
67659 BV_CLR_ALL(fields);
67660
67661 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
67662 old = fc_malloc(sizeof(*old));
67663 *old = *real_packet;
67664 genhash_insert(*hash, old, old);
67665 memset(old, 0, sizeof(*old));
67666 }
67667 differ = (old->id != real_packet->id);
67668 if (differ) {
67669 BV_SET(fields, 0);
67670 }
67671
67672 differ = (strcmp(old->name, real_packet->name) != 0);
67673 if (differ) {
67674 BV_SET(fields, 1);
67675 }
67676
67677 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
67678 if (differ) {
67679 BV_SET(fields, 2);
67680 }
67681
67682 differ = (old->reqs_count != real_packet->reqs_count);
67683 if (differ) {
67684 BV_SET(fields, 3);
67685 }
67686
67687 differ = (old->reqs_count != real_packet->reqs_count);
67688 if (!differ) {
67689 int i;
67690
67691 for (i = 0; i < real_packet->reqs_count; i++) {
67692 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
67693 if (differ) {
67694 break;
67695 }
67696 }
67697 }
67698 if (differ) {
67699 BV_SET(fields, 4);
67700 }
67701
67702 differ = (old->frequency != real_packet->frequency);
67703 if (differ) {
67704 BV_SET(fields, 5);
67705 }
67706
67707 differ = !BV_ARE_EQUAL(old->effects, real_packet->effects);
67708 if (differ) {
67709 BV_SET(fields, 6);
67710 }
67711
67712
67713#ifdef FREECIV_JSON_CONNECTION
67714 field_addr.name = "fields";
67715#endif /* FREECIV_JSON_CONNECTION */
67716 e = 0;
67717 e |= DIO_BV_PUT(&dout, &field_addr, fields);
67718 if (e) {
67719 log_packet_detailed("fields bitvector error detected");
67720 }
67721
67722 if (BV_ISSET(fields, 0)) {
67723 log_packet_detailed(" field 'id' has changed");
67724#ifdef FREECIV_JSON_CONNECTION
67725 field_addr.name = "id";
67726#endif /* FREECIV_JSON_CONNECTION */
67727 e = 0;
67728 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67729 if (e) {
67730 log_packet_detailed("'id' field error detected");
67731 }
67732 }
67733 if (BV_ISSET(fields, 1)) {
67734 log_packet_detailed(" field 'name' has changed");
67735#ifdef FREECIV_JSON_CONNECTION
67736 field_addr.name = "name";
67737#endif /* FREECIV_JSON_CONNECTION */
67738 e = 0;
67739 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67740 if (e) {
67741 log_packet_detailed("'name' field error detected");
67742 }
67743 }
67744 if (BV_ISSET(fields, 2)) {
67745 log_packet_detailed(" field 'rule_name' has changed");
67746#ifdef FREECIV_JSON_CONNECTION
67747 field_addr.name = "rule_name";
67748#endif /* FREECIV_JSON_CONNECTION */
67749 e = 0;
67750 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67751 if (e) {
67752 log_packet_detailed("'rule_name' field error detected");
67753 }
67754 }
67755 if (BV_ISSET(fields, 3)) {
67756 log_packet_detailed(" field 'reqs_count' has changed");
67757#ifdef FREECIV_JSON_CONNECTION
67758 field_addr.name = "reqs_count";
67759#endif /* FREECIV_JSON_CONNECTION */
67760 e = 0;
67761 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
67762 if (e) {
67763 log_packet_detailed("'reqs_count' field error detected");
67764 }
67765 }
67766 if (BV_ISSET(fields, 4)) {
67767 log_packet_detailed(" field 'reqs' has changed");
67768#ifdef FREECIV_JSON_CONNECTION
67769 field_addr.name = "reqs";
67770#endif /* FREECIV_JSON_CONNECTION */
67771 e = 0;
67772 {
67773 int i;
67774
67775#ifdef FREECIV_JSON_CONNECTION
67776 /* Create the array. */
67777 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
67778
67779 /* Enter the array. */
67780 field_addr.sub_location = plocation_elem_new(0);
67781#endif /* FREECIV_JSON_CONNECTION */
67782
67783 for (i = 0; i < real_packet->reqs_count; i++) {
67784#ifdef FREECIV_JSON_CONNECTION
67785 /* Next array element. */
67786 field_addr.sub_location->number = i;
67787#endif /* FREECIV_JSON_CONNECTION */
67788
67789 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
67790 }
67791
67792#ifdef FREECIV_JSON_CONNECTION
67793 /* Exit array. */
67794 FC_FREE(field_addr.sub_location);
67795#endif /* FREECIV_JSON_CONNECTION */
67796 }
67797 if (e) {
67798 log_packet_detailed("'reqs' field error detected");
67799 }
67800 }
67801 if (BV_ISSET(fields, 5)) {
67802 log_packet_detailed(" field 'frequency' has changed");
67803#ifdef FREECIV_JSON_CONNECTION
67804 field_addr.name = "frequency";
67805#endif /* FREECIV_JSON_CONNECTION */
67806 e = 0;
67807 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
67808 if (e) {
67809 log_packet_detailed("'frequency' field error detected");
67810 }
67811 }
67812 if (BV_ISSET(fields, 6)) {
67813 log_packet_detailed(" field 'effects' has changed");
67814#ifdef FREECIV_JSON_CONNECTION
67815 field_addr.name = "effects";
67816#endif /* FREECIV_JSON_CONNECTION */
67817 e = 0;
67818 e |= DIO_BV_PUT(&dout, &field_addr, packet->effects);
67819 if (e) {
67820 log_packet_detailed("'effects' field error detected");
67821 }
67822 }
67823
67824 *old = *real_packet;
67825#endif /* FREECIV_DELTA_PROTOCOL */
67826#ifndef FREECIV_DELTA_PROTOCOL
67827#ifdef FREECIV_JSON_CONNECTION
67828 field_addr.name = "id";
67829#endif /* FREECIV_JSON_CONNECTION */
67830 e = 0;
67831 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
67832 if (e) {
67833 log_packet_detailed("'id' field error detected");
67834 }
67835#ifdef FREECIV_JSON_CONNECTION
67836 field_addr.name = "name";
67837#endif /* FREECIV_JSON_CONNECTION */
67838 e = 0;
67839 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
67840 if (e) {
67841 log_packet_detailed("'name' field error detected");
67842 }
67843#ifdef FREECIV_JSON_CONNECTION
67844 field_addr.name = "rule_name";
67845#endif /* FREECIV_JSON_CONNECTION */
67846 e = 0;
67847 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
67848 if (e) {
67849 log_packet_detailed("'rule_name' field error detected");
67850 }
67851#ifdef FREECIV_JSON_CONNECTION
67852 field_addr.name = "reqs_count";
67853#endif /* FREECIV_JSON_CONNECTION */
67854 e = 0;
67855 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
67856 if (e) {
67857 log_packet_detailed("'reqs_count' field error detected");
67858 }
67859#ifdef FREECIV_JSON_CONNECTION
67860 field_addr.name = "reqs";
67861#endif /* FREECIV_JSON_CONNECTION */
67862 e = 0;
67863 {
67864 int i;
67865
67866#ifdef FREECIV_JSON_CONNECTION
67867 /* Create the array. */
67868 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
67869
67870 /* Enter the array. */
67871 field_addr.sub_location = plocation_elem_new(0);
67872#endif /* FREECIV_JSON_CONNECTION */
67873
67874 for (i = 0; i < real_packet->reqs_count; i++) {
67875#ifdef FREECIV_JSON_CONNECTION
67876 /* Next array element. */
67877 field_addr.sub_location->number = i;
67878#endif /* FREECIV_JSON_CONNECTION */
67879
67880 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
67881 }
67882
67883#ifdef FREECIV_JSON_CONNECTION
67884 /* Exit array. */
67885 FC_FREE(field_addr.sub_location);
67886#endif /* FREECIV_JSON_CONNECTION */
67887 }
67888 if (e) {
67889 log_packet_detailed("'reqs' field error detected");
67890 }
67891#ifdef FREECIV_JSON_CONNECTION
67892 field_addr.name = "frequency";
67893#endif /* FREECIV_JSON_CONNECTION */
67894 e = 0;
67895 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->frequency);
67896 if (e) {
67897 log_packet_detailed("'frequency' field error detected");
67898 }
67899#ifdef FREECIV_JSON_CONNECTION
67900 field_addr.name = "effects";
67901#endif /* FREECIV_JSON_CONNECTION */
67902 e = 0;
67903 e |= DIO_BV_PUT(&dout, &field_addr, packet->effects);
67904 if (e) {
67905 log_packet_detailed("'effects' field error detected");
67906 }
67907
67908#endif
67910}
67911
67913{
67914 if (!pc->used) {
67915 log_error("WARNING: trying to send data to the closed connection %s",
67917 return -1;
67918 }
67919 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet != NULL, -1,
67920 "Handler for PACKET_RULESET_DISASTER not installed");
67921 return pc->phs.handlers->send[PACKET_RULESET_DISASTER].packet(pc, packet);
67922}
67923
67925{
67926 conn_list_iterate(dest, pconn) {
67929}
67930
67931#ifdef FREECIV_DELTA_PROTOCOL
67932#define hash_packet_ruleset_achievement_100 hash_const
67933
67934#define cmp_packet_ruleset_achievement_100 cmp_const
67935
67937#endif /* FREECIV_DELTA_PROTOCOL */
67938
67940{
67941#ifdef FREECIV_DELTA_PROTOCOL
67943 struct packet_ruleset_achievement *old;
67944 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACHIEVEMENT;
67945#endif /* FREECIV_DELTA_PROTOCOL */
67947#ifdef FREECIV_JSON_CONNECTION
67948 struct plocation field_addr;
67949 {
67953 }
67954#endif /* FREECIV_JSON_CONNECTION */
67955
67956#ifdef FREECIV_DELTA_PROTOCOL
67957#ifdef FREECIV_JSON_CONNECTION
67958 field_addr.name = "fields";
67959#endif /* FREECIV_JSON_CONNECTION */
67960 DIO_BV_GET(&din, &field_addr, fields);
67961
67962#else /* FREECIV_DELTA_PROTOCOL */
67963#ifdef FREECIV_JSON_CONNECTION
67964 field_addr.name = "id";
67965#endif /* FREECIV_JSON_CONNECTION */
67966 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
67968 }
67969#ifdef FREECIV_JSON_CONNECTION
67970 field_addr.name = "name";
67971#endif /* FREECIV_JSON_CONNECTION */
67972 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
67974 }
67975#ifdef FREECIV_JSON_CONNECTION
67976 field_addr.name = "rule_name";
67977#endif /* FREECIV_JSON_CONNECTION */
67978 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
67979 RECEIVE_PACKET_FIELD_ERROR(rule_name);
67980 }
67981#ifdef FREECIV_JSON_CONNECTION
67982 field_addr.name = "type";
67983#endif /* FREECIV_JSON_CONNECTION */
67984 {
67985 int readin;
67986
67987 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
67989 }
67990 real_packet->type = readin;
67991 }
67992#ifdef FREECIV_JSON_CONNECTION
67993 field_addr.name = "unique";
67994#endif /* FREECIV_JSON_CONNECTION */
67995 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->unique)) {
67997 }
67998#ifdef FREECIV_JSON_CONNECTION
67999 field_addr.name = "value";
68000#endif /* FREECIV_JSON_CONNECTION */
68001 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
68003 }
68004#endif
68005 log_packet_detailed("packet_ruleset_achievement_100: got info about ()");
68006
68007#ifdef FREECIV_DELTA_PROTOCOL
68008 if (NULL == *hash) {
68010 NULL, NULL, NULL, free);
68011 }
68012
68013 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68014 *real_packet = *old;
68015 } else {
68016 log_packet_detailed(" no old info");
68017 memset(real_packet, 0, sizeof(*real_packet));
68018 }
68019
68020 if (BV_ISSET(fields, 0)) {
68021 log_packet_detailed(" got field 'id'");
68022#ifdef FREECIV_JSON_CONNECTION
68023 field_addr.name = "id";
68024#endif /* FREECIV_JSON_CONNECTION */
68025 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68027 }
68028 }
68029 if (BV_ISSET(fields, 1)) {
68030 log_packet_detailed(" got field 'name'");
68031#ifdef FREECIV_JSON_CONNECTION
68032 field_addr.name = "name";
68033#endif /* FREECIV_JSON_CONNECTION */
68034 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
68036 }
68037 }
68038 if (BV_ISSET(fields, 2)) {
68039 log_packet_detailed(" got field 'rule_name'");
68040#ifdef FREECIV_JSON_CONNECTION
68041 field_addr.name = "rule_name";
68042#endif /* FREECIV_JSON_CONNECTION */
68043 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
68044 RECEIVE_PACKET_FIELD_ERROR(rule_name);
68045 }
68046 }
68047 if (BV_ISSET(fields, 3)) {
68048 log_packet_detailed(" got field 'type'");
68049#ifdef FREECIV_JSON_CONNECTION
68050 field_addr.name = "type";
68051#endif /* FREECIV_JSON_CONNECTION */
68052 {
68053 int readin;
68054
68055 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68057 }
68058 real_packet->type = readin;
68059 }
68060 }
68061 real_packet->unique = BV_ISSET(fields, 4);
68062 if (BV_ISSET(fields, 5)) {
68063 log_packet_detailed(" got field 'value'");
68064#ifdef FREECIV_JSON_CONNECTION
68065 field_addr.name = "value";
68066#endif /* FREECIV_JSON_CONNECTION */
68067 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->value)) {
68069 }
68070 }
68071
68072 if (NULL == old) {
68073 old = fc_malloc(sizeof(*old));
68074 *old = *real_packet;
68075 genhash_insert(*hash, old, old);
68076 } else {
68077 *old = *real_packet;
68078 }
68079
68080#endif /* FREECIV_DELTA_PROTOCOL */
68082}
68083
68085{
68086 const struct packet_ruleset_achievement *real_packet = packet;
68087 int e;
68088#ifdef FREECIV_DELTA_PROTOCOL
68090 struct packet_ruleset_achievement *old;
68091 bool differ;
68092 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACHIEVEMENT;
68093#endif /* FREECIV_DELTA_PROTOCOL */
68095#ifdef FREECIV_JSON_CONNECTION
68096 struct plocation field_addr;
68097 {
68101 }
68102#endif /* FREECIV_JSON_CONNECTION */
68103
68104 log_packet_detailed("packet_ruleset_achievement_100: sending info about ()");
68105
68106#ifdef FREECIV_DELTA_PROTOCOL
68107 if (NULL == *hash) {
68109 NULL, NULL, NULL, free);
68110 }
68111 BV_CLR_ALL(fields);
68112
68113 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68114 old = fc_malloc(sizeof(*old));
68115 *old = *real_packet;
68116 genhash_insert(*hash, old, old);
68117 memset(old, 0, sizeof(*old));
68118 }
68119 differ = (old->id != real_packet->id);
68120 if (differ) {
68121 BV_SET(fields, 0);
68122 }
68123
68124 differ = (strcmp(old->name, real_packet->name) != 0);
68125 if (differ) {
68126 BV_SET(fields, 1);
68127 }
68128
68129 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
68130 if (differ) {
68131 BV_SET(fields, 2);
68132 }
68133
68134 differ = (old->type != real_packet->type);
68135 if (differ) {
68136 BV_SET(fields, 3);
68137 }
68138
68139 if (packet->unique) {
68140 BV_SET(fields, 4);
68141 }
68142
68143 differ = (old->value != real_packet->value);
68144 if (differ) {
68145 BV_SET(fields, 5);
68146 }
68147
68148
68149#ifdef FREECIV_JSON_CONNECTION
68150 field_addr.name = "fields";
68151#endif /* FREECIV_JSON_CONNECTION */
68152 e = 0;
68153 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68154 if (e) {
68155 log_packet_detailed("fields bitvector error detected");
68156 }
68157
68158 if (BV_ISSET(fields, 0)) {
68159 log_packet_detailed(" field 'id' has changed");
68160#ifdef FREECIV_JSON_CONNECTION
68161 field_addr.name = "id";
68162#endif /* FREECIV_JSON_CONNECTION */
68163 e = 0;
68164 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68165 if (e) {
68166 log_packet_detailed("'id' field error detected");
68167 }
68168 }
68169 if (BV_ISSET(fields, 1)) {
68170 log_packet_detailed(" field 'name' has changed");
68171#ifdef FREECIV_JSON_CONNECTION
68172 field_addr.name = "name";
68173#endif /* FREECIV_JSON_CONNECTION */
68174 e = 0;
68175 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68176 if (e) {
68177 log_packet_detailed("'name' field error detected");
68178 }
68179 }
68180 if (BV_ISSET(fields, 2)) {
68181 log_packet_detailed(" field 'rule_name' has changed");
68182#ifdef FREECIV_JSON_CONNECTION
68183 field_addr.name = "rule_name";
68184#endif /* FREECIV_JSON_CONNECTION */
68185 e = 0;
68186 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68187 if (e) {
68188 log_packet_detailed("'rule_name' field error detected");
68189 }
68190 }
68191 if (BV_ISSET(fields, 3)) {
68192 log_packet_detailed(" field 'type' has changed");
68193#ifdef FREECIV_JSON_CONNECTION
68194 field_addr.name = "type";
68195#endif /* FREECIV_JSON_CONNECTION */
68196 e = 0;
68197 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
68198 if (e) {
68199 log_packet_detailed("'type' field error detected");
68200 }
68201 }
68202 /* field 4 is folded into the header */
68203 if (BV_ISSET(fields, 5)) {
68204 log_packet_detailed(" field 'value' has changed");
68205#ifdef FREECIV_JSON_CONNECTION
68206 field_addr.name = "value";
68207#endif /* FREECIV_JSON_CONNECTION */
68208 e = 0;
68209 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
68210 if (e) {
68211 log_packet_detailed("'value' field error detected");
68212 }
68213 }
68214
68215 *old = *real_packet;
68216#endif /* FREECIV_DELTA_PROTOCOL */
68217#ifndef FREECIV_DELTA_PROTOCOL
68218#ifdef FREECIV_JSON_CONNECTION
68219 field_addr.name = "id";
68220#endif /* FREECIV_JSON_CONNECTION */
68221 e = 0;
68222 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68223 if (e) {
68224 log_packet_detailed("'id' field error detected");
68225 }
68226#ifdef FREECIV_JSON_CONNECTION
68227 field_addr.name = "name";
68228#endif /* FREECIV_JSON_CONNECTION */
68229 e = 0;
68230 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
68231 if (e) {
68232 log_packet_detailed("'name' field error detected");
68233 }
68234#ifdef FREECIV_JSON_CONNECTION
68235 field_addr.name = "rule_name";
68236#endif /* FREECIV_JSON_CONNECTION */
68237 e = 0;
68238 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
68239 if (e) {
68240 log_packet_detailed("'rule_name' field error detected");
68241 }
68242#ifdef FREECIV_JSON_CONNECTION
68243 field_addr.name = "type";
68244#endif /* FREECIV_JSON_CONNECTION */
68245 e = 0;
68246 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
68247 if (e) {
68248 log_packet_detailed("'type' field error detected");
68249 }
68250#ifdef FREECIV_JSON_CONNECTION
68251 field_addr.name = "unique";
68252#endif /* FREECIV_JSON_CONNECTION */
68253 e = 0;
68254 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->unique);
68255 if (e) {
68256 log_packet_detailed("'unique' field error detected");
68257 }
68258#ifdef FREECIV_JSON_CONNECTION
68259 field_addr.name = "value";
68260#endif /* FREECIV_JSON_CONNECTION */
68261 e = 0;
68262 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->value);
68263 if (e) {
68264 log_packet_detailed("'value' field error detected");
68265 }
68266
68267#endif
68269}
68270
68272{
68273 if (!pc->used) {
68274 log_error("WARNING: trying to send data to the closed connection %s",
68276 return -1;
68277 }
68278 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet != NULL, -1,
68279 "Handler for PACKET_RULESET_ACHIEVEMENT not installed");
68280 return pc->phs.handlers->send[PACKET_RULESET_ACHIEVEMENT].packet(pc, packet);
68281}
68282
68284{
68285 conn_list_iterate(dest, pconn) {
68288}
68289
68290#ifdef FREECIV_DELTA_PROTOCOL
68291#define hash_packet_ruleset_trade_100 hash_const
68292
68293#define cmp_packet_ruleset_trade_100 cmp_const
68294
68296#endif /* FREECIV_DELTA_PROTOCOL */
68297
68299{
68300#ifdef FREECIV_DELTA_PROTOCOL
68302 struct packet_ruleset_trade *old;
68303 struct genhash **hash = pc->phs.received + PACKET_RULESET_TRADE;
68304#endif /* FREECIV_DELTA_PROTOCOL */
68306#ifdef FREECIV_JSON_CONNECTION
68307 struct plocation field_addr;
68308 {
68312 }
68313#endif /* FREECIV_JSON_CONNECTION */
68314
68315#ifdef FREECIV_DELTA_PROTOCOL
68316#ifdef FREECIV_JSON_CONNECTION
68317 field_addr.name = "fields";
68318#endif /* FREECIV_JSON_CONNECTION */
68319 DIO_BV_GET(&din, &field_addr, fields);
68320
68321#else /* FREECIV_DELTA_PROTOCOL */
68322#ifdef FREECIV_JSON_CONNECTION
68323 field_addr.name = "id";
68324#endif /* FREECIV_JSON_CONNECTION */
68325 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68327 }
68328#ifdef FREECIV_JSON_CONNECTION
68329 field_addr.name = "trade_pct";
68330#endif /* FREECIV_JSON_CONNECTION */
68331 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
68332 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
68333 }
68334#ifdef FREECIV_JSON_CONNECTION
68335 field_addr.name = "cancelling";
68336#endif /* FREECIV_JSON_CONNECTION */
68337 {
68338 int readin;
68339
68340 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68341 RECEIVE_PACKET_FIELD_ERROR(cancelling);
68342 }
68343 real_packet->cancelling = readin;
68344 }
68345#ifdef FREECIV_JSON_CONNECTION
68346 field_addr.name = "bonus_type";
68347#endif /* FREECIV_JSON_CONNECTION */
68348 {
68349 int readin;
68350
68351 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68352 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
68353 }
68354 real_packet->bonus_type = readin;
68355 }
68356#endif
68357 log_packet_detailed("packet_ruleset_trade_100: got info about ()");
68358
68359#ifdef FREECIV_DELTA_PROTOCOL
68360 if (NULL == *hash) {
68362 NULL, NULL, NULL, free);
68363 }
68364
68365 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68366 *real_packet = *old;
68367 } else {
68368 log_packet_detailed(" no old info");
68369 memset(real_packet, 0, sizeof(*real_packet));
68370 }
68371
68372 if (BV_ISSET(fields, 0)) {
68373 log_packet_detailed(" got field 'id'");
68374#ifdef FREECIV_JSON_CONNECTION
68375 field_addr.name = "id";
68376#endif /* FREECIV_JSON_CONNECTION */
68377 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
68379 }
68380 }
68381 if (BV_ISSET(fields, 1)) {
68382 log_packet_detailed(" got field 'trade_pct'");
68383#ifdef FREECIV_JSON_CONNECTION
68384 field_addr.name = "trade_pct";
68385#endif /* FREECIV_JSON_CONNECTION */
68386 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->trade_pct)) {
68387 RECEIVE_PACKET_FIELD_ERROR(trade_pct);
68388 }
68389 }
68390 if (BV_ISSET(fields, 2)) {
68391 log_packet_detailed(" got field 'cancelling'");
68392#ifdef FREECIV_JSON_CONNECTION
68393 field_addr.name = "cancelling";
68394#endif /* FREECIV_JSON_CONNECTION */
68395 {
68396 int readin;
68397
68398 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68399 RECEIVE_PACKET_FIELD_ERROR(cancelling);
68400 }
68401 real_packet->cancelling = readin;
68402 }
68403 }
68404 if (BV_ISSET(fields, 3)) {
68405 log_packet_detailed(" got field 'bonus_type'");
68406#ifdef FREECIV_JSON_CONNECTION
68407 field_addr.name = "bonus_type";
68408#endif /* FREECIV_JSON_CONNECTION */
68409 {
68410 int readin;
68411
68412 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68413 RECEIVE_PACKET_FIELD_ERROR(bonus_type);
68414 }
68415 real_packet->bonus_type = readin;
68416 }
68417 }
68418
68419 if (NULL == old) {
68420 old = fc_malloc(sizeof(*old));
68421 *old = *real_packet;
68422 genhash_insert(*hash, old, old);
68423 } else {
68424 *old = *real_packet;
68425 }
68426
68427#endif /* FREECIV_DELTA_PROTOCOL */
68429}
68430
68431static int send_packet_ruleset_trade_100(struct connection *pc, const struct packet_ruleset_trade *packet)
68432{
68433 const struct packet_ruleset_trade *real_packet = packet;
68434 int e;
68435#ifdef FREECIV_DELTA_PROTOCOL
68437 struct packet_ruleset_trade *old;
68438 bool differ;
68439 struct genhash **hash = pc->phs.sent + PACKET_RULESET_TRADE;
68440#endif /* FREECIV_DELTA_PROTOCOL */
68442#ifdef FREECIV_JSON_CONNECTION
68443 struct plocation field_addr;
68444 {
68448 }
68449#endif /* FREECIV_JSON_CONNECTION */
68450
68451 log_packet_detailed("packet_ruleset_trade_100: sending info about ()");
68452
68453#ifdef FREECIV_DELTA_PROTOCOL
68454 if (NULL == *hash) {
68456 NULL, NULL, NULL, free);
68457 }
68458 BV_CLR_ALL(fields);
68459
68460 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68461 old = fc_malloc(sizeof(*old));
68462 *old = *real_packet;
68463 genhash_insert(*hash, old, old);
68464 memset(old, 0, sizeof(*old));
68465 }
68466 differ = (old->id != real_packet->id);
68467 if (differ) {
68468 BV_SET(fields, 0);
68469 }
68470
68471 differ = (old->trade_pct != real_packet->trade_pct);
68472 if (differ) {
68473 BV_SET(fields, 1);
68474 }
68475
68476 differ = (old->cancelling != real_packet->cancelling);
68477 if (differ) {
68478 BV_SET(fields, 2);
68479 }
68480
68481 differ = (old->bonus_type != real_packet->bonus_type);
68482 if (differ) {
68483 BV_SET(fields, 3);
68484 }
68485
68486
68487#ifdef FREECIV_JSON_CONNECTION
68488 field_addr.name = "fields";
68489#endif /* FREECIV_JSON_CONNECTION */
68490 e = 0;
68491 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68492 if (e) {
68493 log_packet_detailed("fields bitvector error detected");
68494 }
68495
68496 if (BV_ISSET(fields, 0)) {
68497 log_packet_detailed(" field 'id' has changed");
68498#ifdef FREECIV_JSON_CONNECTION
68499 field_addr.name = "id";
68500#endif /* FREECIV_JSON_CONNECTION */
68501 e = 0;
68502 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68503 if (e) {
68504 log_packet_detailed("'id' field error detected");
68505 }
68506 }
68507 if (BV_ISSET(fields, 1)) {
68508 log_packet_detailed(" field 'trade_pct' has changed");
68509#ifdef FREECIV_JSON_CONNECTION
68510 field_addr.name = "trade_pct";
68511#endif /* FREECIV_JSON_CONNECTION */
68512 e = 0;
68513 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
68514 if (e) {
68515 log_packet_detailed("'trade_pct' field error detected");
68516 }
68517 }
68518 if (BV_ISSET(fields, 2)) {
68519 log_packet_detailed(" field 'cancelling' has changed");
68520#ifdef FREECIV_JSON_CONNECTION
68521 field_addr.name = "cancelling";
68522#endif /* FREECIV_JSON_CONNECTION */
68523 e = 0;
68524 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
68525 if (e) {
68526 log_packet_detailed("'cancelling' field error detected");
68527 }
68528 }
68529 if (BV_ISSET(fields, 3)) {
68530 log_packet_detailed(" field 'bonus_type' has changed");
68531#ifdef FREECIV_JSON_CONNECTION
68532 field_addr.name = "bonus_type";
68533#endif /* FREECIV_JSON_CONNECTION */
68534 e = 0;
68535 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
68536 if (e) {
68537 log_packet_detailed("'bonus_type' field error detected");
68538 }
68539 }
68540
68541 *old = *real_packet;
68542#endif /* FREECIV_DELTA_PROTOCOL */
68543#ifndef FREECIV_DELTA_PROTOCOL
68544#ifdef FREECIV_JSON_CONNECTION
68545 field_addr.name = "id";
68546#endif /* FREECIV_JSON_CONNECTION */
68547 e = 0;
68548 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68549 if (e) {
68550 log_packet_detailed("'id' field error detected");
68551 }
68552#ifdef FREECIV_JSON_CONNECTION
68553 field_addr.name = "trade_pct";
68554#endif /* FREECIV_JSON_CONNECTION */
68555 e = 0;
68556 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->trade_pct);
68557 if (e) {
68558 log_packet_detailed("'trade_pct' field error detected");
68559 }
68560#ifdef FREECIV_JSON_CONNECTION
68561 field_addr.name = "cancelling";
68562#endif /* FREECIV_JSON_CONNECTION */
68563 e = 0;
68564 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cancelling);
68565 if (e) {
68566 log_packet_detailed("'cancelling' field error detected");
68567 }
68568#ifdef FREECIV_JSON_CONNECTION
68569 field_addr.name = "bonus_type";
68570#endif /* FREECIV_JSON_CONNECTION */
68571 e = 0;
68572 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bonus_type);
68573 if (e) {
68574 log_packet_detailed("'bonus_type' field error detected");
68575 }
68576
68577#endif
68579}
68580
68582{
68583 if (!pc->used) {
68584 log_error("WARNING: trying to send data to the closed connection %s",
68586 return -1;
68587 }
68588 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_TRADE].packet != NULL, -1,
68589 "Handler for PACKET_RULESET_TRADE not installed");
68590 return pc->phs.handlers->send[PACKET_RULESET_TRADE].packet(pc, packet);
68591}
68592
68593void lsend_packet_ruleset_trade(struct conn_list *dest, const struct packet_ruleset_trade *packet)
68594{
68595 conn_list_iterate(dest, pconn) {
68598}
68599
68600#ifdef FREECIV_DELTA_PROTOCOL
68601#define hash_packet_ruleset_action_100 hash_const
68602
68603#define cmp_packet_ruleset_action_100 cmp_const
68604
68606#endif /* FREECIV_DELTA_PROTOCOL */
68607
68609{
68610#ifdef FREECIV_DELTA_PROTOCOL
68612 struct packet_ruleset_action *old;
68613 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION;
68614#endif /* FREECIV_DELTA_PROTOCOL */
68616#ifdef FREECIV_JSON_CONNECTION
68617 struct plocation field_addr;
68618 {
68622 }
68623#endif /* FREECIV_JSON_CONNECTION */
68624
68625#ifdef FREECIV_DELTA_PROTOCOL
68626#ifdef FREECIV_JSON_CONNECTION
68627 field_addr.name = "fields";
68628#endif /* FREECIV_JSON_CONNECTION */
68629 DIO_BV_GET(&din, &field_addr, fields);
68630
68631#else /* FREECIV_DELTA_PROTOCOL */
68632#ifdef FREECIV_JSON_CONNECTION
68633 field_addr.name = "id";
68634#endif /* FREECIV_JSON_CONNECTION */
68635 {
68636 int readin;
68637
68638 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68640 }
68641 real_packet->id = readin;
68642 }
68643#ifdef FREECIV_JSON_CONNECTION
68644 field_addr.name = "ui_name";
68645#endif /* FREECIV_JSON_CONNECTION */
68646 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
68648 }
68649#ifdef FREECIV_JSON_CONNECTION
68650 field_addr.name = "quiet";
68651#endif /* FREECIV_JSON_CONNECTION */
68652 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->quiet)) {
68654 }
68655#ifdef FREECIV_JSON_CONNECTION
68656 field_addr.name = "result";
68657#endif /* FREECIV_JSON_CONNECTION */
68658 {
68659 int readin;
68660
68661 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68663 }
68664 real_packet->result = readin;
68665 }
68666#ifdef FREECIV_JSON_CONNECTION
68667 field_addr.name = "sub_results";
68668#endif /* FREECIV_JSON_CONNECTION */
68669 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
68670 RECEIVE_PACKET_FIELD_ERROR(sub_results);
68671 }
68672#ifdef FREECIV_JSON_CONNECTION
68673 field_addr.name = "actor_consuming_always";
68674#endif /* FREECIV_JSON_CONNECTION */
68675 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->actor_consuming_always)) {
68676 RECEIVE_PACKET_FIELD_ERROR(actor_consuming_always);
68677 }
68678#ifdef FREECIV_JSON_CONNECTION
68679 field_addr.name = "act_kind";
68680#endif /* FREECIV_JSON_CONNECTION */
68681 {
68682 int readin;
68683
68684 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68686 }
68687 real_packet->act_kind = readin;
68688 }
68689#ifdef FREECIV_JSON_CONNECTION
68690 field_addr.name = "tgt_kind";
68691#endif /* FREECIV_JSON_CONNECTION */
68692 {
68693 int readin;
68694
68695 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68697 }
68698 real_packet->tgt_kind = readin;
68699 }
68700#ifdef FREECIV_JSON_CONNECTION
68701 field_addr.name = "sub_tgt_kind";
68702#endif /* FREECIV_JSON_CONNECTION */
68703 {
68704 int readin;
68705
68706 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68707 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
68708 }
68709 real_packet->sub_tgt_kind = readin;
68710 }
68711#ifdef FREECIV_JSON_CONNECTION
68712 field_addr.name = "min_distance";
68713#endif /* FREECIV_JSON_CONNECTION */
68714 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
68715 RECEIVE_PACKET_FIELD_ERROR(min_distance);
68716 }
68717#ifdef FREECIV_JSON_CONNECTION
68718 field_addr.name = "max_distance";
68719#endif /* FREECIV_JSON_CONNECTION */
68720 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
68721 RECEIVE_PACKET_FIELD_ERROR(max_distance);
68722 }
68723#ifdef FREECIV_JSON_CONNECTION
68724 field_addr.name = "blocked_by";
68725#endif /* FREECIV_JSON_CONNECTION */
68726 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
68727 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
68728 }
68729#endif
68730 log_packet_detailed("packet_ruleset_action_100: got info about ()");
68731
68732#ifdef FREECIV_DELTA_PROTOCOL
68733 if (NULL == *hash) {
68735 NULL, NULL, NULL, free);
68736 }
68737
68738 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
68739 *real_packet = *old;
68740 } else {
68741 log_packet_detailed(" no old info");
68742 memset(real_packet, 0, sizeof(*real_packet));
68743 }
68744
68745 if (BV_ISSET(fields, 0)) {
68746 log_packet_detailed(" got field 'id'");
68747#ifdef FREECIV_JSON_CONNECTION
68748 field_addr.name = "id";
68749#endif /* FREECIV_JSON_CONNECTION */
68750 {
68751 int readin;
68752
68753 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68755 }
68756 real_packet->id = readin;
68757 }
68758 }
68759 if (BV_ISSET(fields, 1)) {
68760 log_packet_detailed(" got field 'ui_name'");
68761#ifdef FREECIV_JSON_CONNECTION
68762 field_addr.name = "ui_name";
68763#endif /* FREECIV_JSON_CONNECTION */
68764 if (!DIO_GET(string, &din, &field_addr, real_packet->ui_name, sizeof(real_packet->ui_name))) {
68766 }
68767 }
68768 real_packet->quiet = BV_ISSET(fields, 2);
68769 if (BV_ISSET(fields, 3)) {
68770 log_packet_detailed(" got field 'result'");
68771#ifdef FREECIV_JSON_CONNECTION
68772 field_addr.name = "result";
68773#endif /* FREECIV_JSON_CONNECTION */
68774 {
68775 int readin;
68776
68777 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68779 }
68780 real_packet->result = readin;
68781 }
68782 }
68783 if (BV_ISSET(fields, 4)) {
68784 log_packet_detailed(" got field 'sub_results'");
68785#ifdef FREECIV_JSON_CONNECTION
68786 field_addr.name = "sub_results";
68787#endif /* FREECIV_JSON_CONNECTION */
68788 if (!DIO_BV_GET(&din, &field_addr, real_packet->sub_results)) {
68789 RECEIVE_PACKET_FIELD_ERROR(sub_results);
68790 }
68791 }
68792 real_packet->actor_consuming_always = BV_ISSET(fields, 5);
68793 if (BV_ISSET(fields, 6)) {
68794 log_packet_detailed(" got field 'act_kind'");
68795#ifdef FREECIV_JSON_CONNECTION
68796 field_addr.name = "act_kind";
68797#endif /* FREECIV_JSON_CONNECTION */
68798 {
68799 int readin;
68800
68801 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68803 }
68804 real_packet->act_kind = readin;
68805 }
68806 }
68807 if (BV_ISSET(fields, 7)) {
68808 log_packet_detailed(" got field 'tgt_kind'");
68809#ifdef FREECIV_JSON_CONNECTION
68810 field_addr.name = "tgt_kind";
68811#endif /* FREECIV_JSON_CONNECTION */
68812 {
68813 int readin;
68814
68815 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68817 }
68818 real_packet->tgt_kind = readin;
68819 }
68820 }
68821 if (BV_ISSET(fields, 8)) {
68822 log_packet_detailed(" got field 'sub_tgt_kind'");
68823#ifdef FREECIV_JSON_CONNECTION
68824 field_addr.name = "sub_tgt_kind";
68825#endif /* FREECIV_JSON_CONNECTION */
68826 {
68827 int readin;
68828
68829 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
68830 RECEIVE_PACKET_FIELD_ERROR(sub_tgt_kind);
68831 }
68832 real_packet->sub_tgt_kind = readin;
68833 }
68834 }
68835 if (BV_ISSET(fields, 9)) {
68836 log_packet_detailed(" got field 'min_distance'");
68837#ifdef FREECIV_JSON_CONNECTION
68838 field_addr.name = "min_distance";
68839#endif /* FREECIV_JSON_CONNECTION */
68840 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_distance)) {
68841 RECEIVE_PACKET_FIELD_ERROR(min_distance);
68842 }
68843 }
68844 if (BV_ISSET(fields, 10)) {
68845 log_packet_detailed(" got field 'max_distance'");
68846#ifdef FREECIV_JSON_CONNECTION
68847 field_addr.name = "max_distance";
68848#endif /* FREECIV_JSON_CONNECTION */
68849 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_distance)) {
68850 RECEIVE_PACKET_FIELD_ERROR(max_distance);
68851 }
68852 }
68853 if (BV_ISSET(fields, 11)) {
68854 log_packet_detailed(" got field 'blocked_by'");
68855#ifdef FREECIV_JSON_CONNECTION
68856 field_addr.name = "blocked_by";
68857#endif /* FREECIV_JSON_CONNECTION */
68858 if (!DIO_BV_GET(&din, &field_addr, real_packet->blocked_by)) {
68859 RECEIVE_PACKET_FIELD_ERROR(blocked_by);
68860 }
68861 }
68862
68863 if (NULL == old) {
68864 old = fc_malloc(sizeof(*old));
68865 *old = *real_packet;
68866 genhash_insert(*hash, old, old);
68867 } else {
68868 *old = *real_packet;
68869 }
68870
68871#endif /* FREECIV_DELTA_PROTOCOL */
68873}
68874
68876{
68877 const struct packet_ruleset_action *real_packet = packet;
68878 int e;
68879#ifdef FREECIV_DELTA_PROTOCOL
68881 struct packet_ruleset_action *old;
68882 bool differ;
68883 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION;
68884#endif /* FREECIV_DELTA_PROTOCOL */
68886#ifdef FREECIV_JSON_CONNECTION
68887 struct plocation field_addr;
68888 {
68892 }
68893#endif /* FREECIV_JSON_CONNECTION */
68894
68895 log_packet_detailed("packet_ruleset_action_100: sending info about ()");
68896
68897#ifdef FREECIV_DELTA_PROTOCOL
68898 if (NULL == *hash) {
68900 NULL, NULL, NULL, free);
68901 }
68902 BV_CLR_ALL(fields);
68903
68904 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
68905 old = fc_malloc(sizeof(*old));
68906 *old = *real_packet;
68907 genhash_insert(*hash, old, old);
68908 memset(old, 0, sizeof(*old));
68909 }
68910 differ = (old->id != real_packet->id);
68911 if (differ) {
68912 BV_SET(fields, 0);
68913 }
68914
68915 differ = (strcmp(old->ui_name, real_packet->ui_name) != 0);
68916 if (differ) {
68917 BV_SET(fields, 1);
68918 }
68919
68920 if (packet->quiet) {
68921 BV_SET(fields, 2);
68922 }
68923
68924 differ = (old->result != real_packet->result);
68925 if (differ) {
68926 BV_SET(fields, 3);
68927 }
68928
68929 differ = !BV_ARE_EQUAL(old->sub_results, real_packet->sub_results);
68930 if (differ) {
68931 BV_SET(fields, 4);
68932 }
68933
68934 if (packet->actor_consuming_always) {
68935 BV_SET(fields, 5);
68936 }
68937
68938 differ = (old->act_kind != real_packet->act_kind);
68939 if (differ) {
68940 BV_SET(fields, 6);
68941 }
68942
68943 differ = (old->tgt_kind != real_packet->tgt_kind);
68944 if (differ) {
68945 BV_SET(fields, 7);
68946 }
68947
68948 differ = (old->sub_tgt_kind != real_packet->sub_tgt_kind);
68949 if (differ) {
68950 BV_SET(fields, 8);
68951 }
68952
68953 differ = (old->min_distance != real_packet->min_distance);
68954 if (differ) {
68955 BV_SET(fields, 9);
68956 }
68957
68958 differ = (old->max_distance != real_packet->max_distance);
68959 if (differ) {
68960 BV_SET(fields, 10);
68961 }
68962
68963 differ = !BV_ARE_EQUAL(old->blocked_by, real_packet->blocked_by);
68964 if (differ) {
68965 BV_SET(fields, 11);
68966 }
68967
68968
68969#ifdef FREECIV_JSON_CONNECTION
68970 field_addr.name = "fields";
68971#endif /* FREECIV_JSON_CONNECTION */
68972 e = 0;
68973 e |= DIO_BV_PUT(&dout, &field_addr, fields);
68974 if (e) {
68975 log_packet_detailed("fields bitvector error detected");
68976 }
68977
68978 if (BV_ISSET(fields, 0)) {
68979 log_packet_detailed(" field 'id' has changed");
68980#ifdef FREECIV_JSON_CONNECTION
68981 field_addr.name = "id";
68982#endif /* FREECIV_JSON_CONNECTION */
68983 e = 0;
68984 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
68985 if (e) {
68986 log_packet_detailed("'id' field error detected");
68987 }
68988 }
68989 if (BV_ISSET(fields, 1)) {
68990 log_packet_detailed(" field 'ui_name' has changed");
68991#ifdef FREECIV_JSON_CONNECTION
68992 field_addr.name = "ui_name";
68993#endif /* FREECIV_JSON_CONNECTION */
68994 e = 0;
68995 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
68996 if (e) {
68997 log_packet_detailed("'ui_name' field error detected");
68998 }
68999 }
69000 /* field 2 is folded into the header */
69001 if (BV_ISSET(fields, 3)) {
69002 log_packet_detailed(" field 'result' has changed");
69003#ifdef FREECIV_JSON_CONNECTION
69004 field_addr.name = "result";
69005#endif /* FREECIV_JSON_CONNECTION */
69006 e = 0;
69007 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
69008 if (e) {
69009 log_packet_detailed("'result' field error detected");
69010 }
69011 }
69012 if (BV_ISSET(fields, 4)) {
69013 log_packet_detailed(" field 'sub_results' has changed");
69014#ifdef FREECIV_JSON_CONNECTION
69015 field_addr.name = "sub_results";
69016#endif /* FREECIV_JSON_CONNECTION */
69017 e = 0;
69018 e |= DIO_BV_PUT(&dout, &field_addr, packet->sub_results);
69019 if (e) {
69020 log_packet_detailed("'sub_results' field error detected");
69021 }
69022 }
69023 /* field 5 is folded into the header */
69024 if (BV_ISSET(fields, 6)) {
69025 log_packet_detailed(" field 'act_kind' has changed");
69026#ifdef FREECIV_JSON_CONNECTION
69027 field_addr.name = "act_kind";
69028#endif /* FREECIV_JSON_CONNECTION */
69029 e = 0;
69030 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
69031 if (e) {
69032 log_packet_detailed("'act_kind' field error detected");
69033 }
69034 }
69035 if (BV_ISSET(fields, 7)) {
69036 log_packet_detailed(" field 'tgt_kind' has changed");
69037#ifdef FREECIV_JSON_CONNECTION
69038 field_addr.name = "tgt_kind";
69039#endif /* FREECIV_JSON_CONNECTION */
69040 e = 0;
69041 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
69042 if (e) {
69043 log_packet_detailed("'tgt_kind' field error detected");
69044 }
69045 }
69046 if (BV_ISSET(fields, 8)) {
69047 log_packet_detailed(" field 'sub_tgt_kind' has changed");
69048#ifdef FREECIV_JSON_CONNECTION
69049 field_addr.name = "sub_tgt_kind";
69050#endif /* FREECIV_JSON_CONNECTION */
69051 e = 0;
69052 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
69053 if (e) {
69054 log_packet_detailed("'sub_tgt_kind' field error detected");
69055 }
69056 }
69057 if (BV_ISSET(fields, 9)) {
69058 log_packet_detailed(" field 'min_distance' has changed");
69059#ifdef FREECIV_JSON_CONNECTION
69060 field_addr.name = "min_distance";
69061#endif /* FREECIV_JSON_CONNECTION */
69062 e = 0;
69063 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
69064 if (e) {
69065 log_packet_detailed("'min_distance' field error detected");
69066 }
69067 }
69068 if (BV_ISSET(fields, 10)) {
69069 log_packet_detailed(" field 'max_distance' has changed");
69070#ifdef FREECIV_JSON_CONNECTION
69071 field_addr.name = "max_distance";
69072#endif /* FREECIV_JSON_CONNECTION */
69073 e = 0;
69074 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
69075 if (e) {
69076 log_packet_detailed("'max_distance' field error detected");
69077 }
69078 }
69079 if (BV_ISSET(fields, 11)) {
69080 log_packet_detailed(" field 'blocked_by' has changed");
69081#ifdef FREECIV_JSON_CONNECTION
69082 field_addr.name = "blocked_by";
69083#endif /* FREECIV_JSON_CONNECTION */
69084 e = 0;
69085 e |= DIO_BV_PUT(&dout, &field_addr, packet->blocked_by);
69086 if (e) {
69087 log_packet_detailed("'blocked_by' field error detected");
69088 }
69089 }
69090
69091 *old = *real_packet;
69092#endif /* FREECIV_DELTA_PROTOCOL */
69093#ifndef FREECIV_DELTA_PROTOCOL
69094#ifdef FREECIV_JSON_CONNECTION
69095 field_addr.name = "id";
69096#endif /* FREECIV_JSON_CONNECTION */
69097 e = 0;
69098 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
69099 if (e) {
69100 log_packet_detailed("'id' field error detected");
69101 }
69102#ifdef FREECIV_JSON_CONNECTION
69103 field_addr.name = "ui_name";
69104#endif /* FREECIV_JSON_CONNECTION */
69105 e = 0;
69106 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ui_name);
69107 if (e) {
69108 log_packet_detailed("'ui_name' field error detected");
69109 }
69110#ifdef FREECIV_JSON_CONNECTION
69111 field_addr.name = "quiet";
69112#endif /* FREECIV_JSON_CONNECTION */
69113 e = 0;
69114 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->quiet);
69115 if (e) {
69116 log_packet_detailed("'quiet' field error detected");
69117 }
69118#ifdef FREECIV_JSON_CONNECTION
69119 field_addr.name = "result";
69120#endif /* FREECIV_JSON_CONNECTION */
69121 e = 0;
69122 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->result);
69123 if (e) {
69124 log_packet_detailed("'result' field error detected");
69125 }
69126#ifdef FREECIV_JSON_CONNECTION
69127 field_addr.name = "sub_results";
69128#endif /* FREECIV_JSON_CONNECTION */
69129 e = 0;
69130 e |= DIO_BV_PUT(&dout, &field_addr, packet->sub_results);
69131 if (e) {
69132 log_packet_detailed("'sub_results' field error detected");
69133 }
69134#ifdef FREECIV_JSON_CONNECTION
69135 field_addr.name = "actor_consuming_always";
69136#endif /* FREECIV_JSON_CONNECTION */
69137 e = 0;
69138 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->actor_consuming_always);
69139 if (e) {
69140 log_packet_detailed("'actor_consuming_always' field error detected");
69141 }
69142#ifdef FREECIV_JSON_CONNECTION
69143 field_addr.name = "act_kind";
69144#endif /* FREECIV_JSON_CONNECTION */
69145 e = 0;
69146 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->act_kind);
69147 if (e) {
69148 log_packet_detailed("'act_kind' field error detected");
69149 }
69150#ifdef FREECIV_JSON_CONNECTION
69151 field_addr.name = "tgt_kind";
69152#endif /* FREECIV_JSON_CONNECTION */
69153 e = 0;
69154 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tgt_kind);
69155 if (e) {
69156 log_packet_detailed("'tgt_kind' field error detected");
69157 }
69158#ifdef FREECIV_JSON_CONNECTION
69159 field_addr.name = "sub_tgt_kind";
69160#endif /* FREECIV_JSON_CONNECTION */
69161 e = 0;
69162 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->sub_tgt_kind);
69163 if (e) {
69164 log_packet_detailed("'sub_tgt_kind' field error detected");
69165 }
69166#ifdef FREECIV_JSON_CONNECTION
69167 field_addr.name = "min_distance";
69168#endif /* FREECIV_JSON_CONNECTION */
69169 e = 0;
69170 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_distance);
69171 if (e) {
69172 log_packet_detailed("'min_distance' field error detected");
69173 }
69174#ifdef FREECIV_JSON_CONNECTION
69175 field_addr.name = "max_distance";
69176#endif /* FREECIV_JSON_CONNECTION */
69177 e = 0;
69178 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_distance);
69179 if (e) {
69180 log_packet_detailed("'max_distance' field error detected");
69181 }
69182#ifdef FREECIV_JSON_CONNECTION
69183 field_addr.name = "blocked_by";
69184#endif /* FREECIV_JSON_CONNECTION */
69185 e = 0;
69186 e |= DIO_BV_PUT(&dout, &field_addr, packet->blocked_by);
69187 if (e) {
69188 log_packet_detailed("'blocked_by' field error detected");
69189 }
69190
69191#endif
69193}
69194
69196{
69197 if (!pc->used) {
69198 log_error("WARNING: trying to send data to the closed connection %s",
69200 return -1;
69201 }
69202 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION].packet != NULL, -1,
69203 "Handler for PACKET_RULESET_ACTION not installed");
69204 return pc->phs.handlers->send[PACKET_RULESET_ACTION].packet(pc, packet);
69205}
69206
69207void lsend_packet_ruleset_action(struct conn_list *dest, const struct packet_ruleset_action *packet)
69208{
69209 conn_list_iterate(dest, pconn) {
69212}
69213
69214#ifdef FREECIV_DELTA_PROTOCOL
69215#define hash_packet_ruleset_action_enabler_100 hash_const
69216
69217#define cmp_packet_ruleset_action_enabler_100 cmp_const
69218
69220#endif /* FREECIV_DELTA_PROTOCOL */
69221
69223{
69224#ifdef FREECIV_DELTA_PROTOCOL
69227 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_ENABLER;
69228#endif /* FREECIV_DELTA_PROTOCOL */
69230#ifdef FREECIV_JSON_CONNECTION
69231 struct plocation field_addr;
69232 {
69236 }
69237#endif /* FREECIV_JSON_CONNECTION */
69238
69239#ifdef FREECIV_DELTA_PROTOCOL
69240#ifdef FREECIV_JSON_CONNECTION
69241 field_addr.name = "fields";
69242#endif /* FREECIV_JSON_CONNECTION */
69243 DIO_BV_GET(&din, &field_addr, fields);
69244
69245#else /* FREECIV_DELTA_PROTOCOL */
69246#ifdef FREECIV_JSON_CONNECTION
69247 field_addr.name = "enabled_action";
69248#endif /* FREECIV_JSON_CONNECTION */
69249 {
69250 int readin;
69251
69252 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69253 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
69254 }
69255 real_packet->enabled_action = readin;
69256 }
69257#ifdef FREECIV_JSON_CONNECTION
69258 field_addr.name = "actor_reqs_count";
69259#endif /* FREECIV_JSON_CONNECTION */
69260 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->actor_reqs_count)) {
69261 RECEIVE_PACKET_FIELD_ERROR(actor_reqs_count);
69262 }
69263#ifdef FREECIV_JSON_CONNECTION
69264 field_addr.name = "actor_reqs";
69265#endif /* FREECIV_JSON_CONNECTION */
69266 if (real_packet->actor_reqs_count > MAX_NUM_REQS) {
69267 RECEIVE_PACKET_FIELD_ERROR(actor_reqs, ": truncation array");
69268 }
69269 {
69270 int i;
69271
69272#ifdef FREECIV_JSON_CONNECTION
69273 /* Enter array. */
69274 field_addr.sub_location = plocation_elem_new(0);
69275#endif /* FREECIV_JSON_CONNECTION */
69276
69277 for (i = 0; i < real_packet->actor_reqs_count; i++) {
69278#ifdef FREECIV_JSON_CONNECTION
69279 field_addr.sub_location->number = i;
69280#endif /* FREECIV_JSON_CONNECTION */
69281
69282 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs[i])) {
69283 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
69284 }
69285 }
69286
69287#ifdef FREECIV_JSON_CONNECTION
69288 /* Exit array. */
69289 FC_FREE(field_addr.sub_location);
69290#endif /* FREECIV_JSON_CONNECTION */
69291 }
69292#ifdef FREECIV_JSON_CONNECTION
69293 field_addr.name = "target_reqs_count";
69294#endif /* FREECIV_JSON_CONNECTION */
69295 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->target_reqs_count)) {
69296 RECEIVE_PACKET_FIELD_ERROR(target_reqs_count);
69297 }
69298#ifdef FREECIV_JSON_CONNECTION
69299 field_addr.name = "target_reqs";
69300#endif /* FREECIV_JSON_CONNECTION */
69301 if (real_packet->target_reqs_count > MAX_NUM_REQS) {
69302 RECEIVE_PACKET_FIELD_ERROR(target_reqs, ": truncation array");
69303 }
69304 {
69305 int i;
69306
69307#ifdef FREECIV_JSON_CONNECTION
69308 /* Enter array. */
69309 field_addr.sub_location = plocation_elem_new(0);
69310#endif /* FREECIV_JSON_CONNECTION */
69311
69312 for (i = 0; i < real_packet->target_reqs_count; i++) {
69313#ifdef FREECIV_JSON_CONNECTION
69314 field_addr.sub_location->number = i;
69315#endif /* FREECIV_JSON_CONNECTION */
69316
69317 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs[i])) {
69318 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
69319 }
69320 }
69321
69322#ifdef FREECIV_JSON_CONNECTION
69323 /* Exit array. */
69324 FC_FREE(field_addr.sub_location);
69325#endif /* FREECIV_JSON_CONNECTION */
69326 }
69327#endif
69328 log_packet_detailed("packet_ruleset_action_enabler_100: got info about ()");
69329
69330#ifdef FREECIV_DELTA_PROTOCOL
69331 if (NULL == *hash) {
69333 NULL, NULL, NULL, free);
69334 }
69335
69336 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
69337 *real_packet = *old;
69338 } else {
69339 log_packet_detailed(" no old info");
69340 memset(real_packet, 0, sizeof(*real_packet));
69341 }
69342
69343 if (BV_ISSET(fields, 0)) {
69344 log_packet_detailed(" got field 'enabled_action'");
69345#ifdef FREECIV_JSON_CONNECTION
69346 field_addr.name = "enabled_action";
69347#endif /* FREECIV_JSON_CONNECTION */
69348 {
69349 int readin;
69350
69351 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69352 RECEIVE_PACKET_FIELD_ERROR(enabled_action);
69353 }
69354 real_packet->enabled_action = readin;
69355 }
69356 }
69357 if (BV_ISSET(fields, 1)) {
69358 log_packet_detailed(" got field 'actor_reqs_count'");
69359#ifdef FREECIV_JSON_CONNECTION
69360 field_addr.name = "actor_reqs_count";
69361#endif /* FREECIV_JSON_CONNECTION */
69362 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->actor_reqs_count)) {
69363 RECEIVE_PACKET_FIELD_ERROR(actor_reqs_count);
69364 }
69365 }
69366 if (BV_ISSET(fields, 2)) {
69367 log_packet_detailed(" got field 'actor_reqs'");
69368#ifdef FREECIV_JSON_CONNECTION
69369 field_addr.name = "actor_reqs";
69370#endif /* FREECIV_JSON_CONNECTION */
69371 if (real_packet->actor_reqs_count > MAX_NUM_REQS) {
69372 RECEIVE_PACKET_FIELD_ERROR(actor_reqs, ": truncation array");
69373 }
69374 {
69375 int i;
69376
69377#ifdef FREECIV_JSON_CONNECTION
69378 /* Enter array. */
69379 field_addr.sub_location = plocation_elem_new(0);
69380#endif /* FREECIV_JSON_CONNECTION */
69381
69382 for (i = 0; i < real_packet->actor_reqs_count; i++) {
69383#ifdef FREECIV_JSON_CONNECTION
69384 field_addr.sub_location->number = i;
69385#endif /* FREECIV_JSON_CONNECTION */
69386
69387 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->actor_reqs[i])) {
69388 RECEIVE_PACKET_FIELD_ERROR(actor_reqs);
69389 }
69390 }
69391
69392#ifdef FREECIV_JSON_CONNECTION
69393 /* Exit array. */
69394 FC_FREE(field_addr.sub_location);
69395#endif /* FREECIV_JSON_CONNECTION */
69396 }
69397 }
69398 if (BV_ISSET(fields, 3)) {
69399 log_packet_detailed(" got field 'target_reqs_count'");
69400#ifdef FREECIV_JSON_CONNECTION
69401 field_addr.name = "target_reqs_count";
69402#endif /* FREECIV_JSON_CONNECTION */
69403 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->target_reqs_count)) {
69404 RECEIVE_PACKET_FIELD_ERROR(target_reqs_count);
69405 }
69406 }
69407 if (BV_ISSET(fields, 4)) {
69408 log_packet_detailed(" got field 'target_reqs'");
69409#ifdef FREECIV_JSON_CONNECTION
69410 field_addr.name = "target_reqs";
69411#endif /* FREECIV_JSON_CONNECTION */
69412 if (real_packet->target_reqs_count > MAX_NUM_REQS) {
69413 RECEIVE_PACKET_FIELD_ERROR(target_reqs, ": truncation array");
69414 }
69415 {
69416 int i;
69417
69418#ifdef FREECIV_JSON_CONNECTION
69419 /* Enter array. */
69420 field_addr.sub_location = plocation_elem_new(0);
69421#endif /* FREECIV_JSON_CONNECTION */
69422
69423 for (i = 0; i < real_packet->target_reqs_count; i++) {
69424#ifdef FREECIV_JSON_CONNECTION
69425 field_addr.sub_location->number = i;
69426#endif /* FREECIV_JSON_CONNECTION */
69427
69428 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->target_reqs[i])) {
69429 RECEIVE_PACKET_FIELD_ERROR(target_reqs);
69430 }
69431 }
69432
69433#ifdef FREECIV_JSON_CONNECTION
69434 /* Exit array. */
69435 FC_FREE(field_addr.sub_location);
69436#endif /* FREECIV_JSON_CONNECTION */
69437 }
69438 }
69439
69440 if (NULL == old) {
69441 old = fc_malloc(sizeof(*old));
69442 *old = *real_packet;
69443 genhash_insert(*hash, old, old);
69444 } else {
69445 *old = *real_packet;
69446 }
69447
69448#endif /* FREECIV_DELTA_PROTOCOL */
69450}
69451
69453{
69454 const struct packet_ruleset_action_enabler *real_packet = packet;
69455 int e;
69456#ifdef FREECIV_DELTA_PROTOCOL
69459 bool differ;
69460 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_ENABLER;
69461#endif /* FREECIV_DELTA_PROTOCOL */
69463#ifdef FREECIV_JSON_CONNECTION
69464 struct plocation field_addr;
69465 {
69469 }
69470#endif /* FREECIV_JSON_CONNECTION */
69471
69472 log_packet_detailed("packet_ruleset_action_enabler_100: sending info about ()");
69473
69474#ifdef FREECIV_DELTA_PROTOCOL
69475 if (NULL == *hash) {
69477 NULL, NULL, NULL, free);
69478 }
69479 BV_CLR_ALL(fields);
69480
69481 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
69482 old = fc_malloc(sizeof(*old));
69483 *old = *real_packet;
69484 genhash_insert(*hash, old, old);
69485 memset(old, 0, sizeof(*old));
69486 }
69487 differ = (old->enabled_action != real_packet->enabled_action);
69488 if (differ) {
69489 BV_SET(fields, 0);
69490 }
69491
69492 differ = (old->actor_reqs_count != real_packet->actor_reqs_count);
69493 if (differ) {
69494 BV_SET(fields, 1);
69495 }
69496
69497 differ = (old->actor_reqs_count != real_packet->actor_reqs_count);
69498 if (!differ) {
69499 int i;
69500
69501 for (i = 0; i < real_packet->actor_reqs_count; i++) {
69502 differ = !are_requirements_equal(&old->actor_reqs[i], &real_packet->actor_reqs[i]);
69503 if (differ) {
69504 break;
69505 }
69506 }
69507 }
69508 if (differ) {
69509 BV_SET(fields, 2);
69510 }
69511
69512 differ = (old->target_reqs_count != real_packet->target_reqs_count);
69513 if (differ) {
69514 BV_SET(fields, 3);
69515 }
69516
69517 differ = (old->target_reqs_count != real_packet->target_reqs_count);
69518 if (!differ) {
69519 int i;
69520
69521 for (i = 0; i < real_packet->target_reqs_count; i++) {
69522 differ = !are_requirements_equal(&old->target_reqs[i], &real_packet->target_reqs[i]);
69523 if (differ) {
69524 break;
69525 }
69526 }
69527 }
69528 if (differ) {
69529 BV_SET(fields, 4);
69530 }
69531
69532
69533#ifdef FREECIV_JSON_CONNECTION
69534 field_addr.name = "fields";
69535#endif /* FREECIV_JSON_CONNECTION */
69536 e = 0;
69537 e |= DIO_BV_PUT(&dout, &field_addr, fields);
69538 if (e) {
69539 log_packet_detailed("fields bitvector error detected");
69540 }
69541
69542 if (BV_ISSET(fields, 0)) {
69543 log_packet_detailed(" field 'enabled_action' has changed");
69544#ifdef FREECIV_JSON_CONNECTION
69545 field_addr.name = "enabled_action";
69546#endif /* FREECIV_JSON_CONNECTION */
69547 e = 0;
69548 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
69549 if (e) {
69550 log_packet_detailed("'enabled_action' field error detected");
69551 }
69552 }
69553 if (BV_ISSET(fields, 1)) {
69554 log_packet_detailed(" field 'actor_reqs_count' has changed");
69555#ifdef FREECIV_JSON_CONNECTION
69556 field_addr.name = "actor_reqs_count";
69557#endif /* FREECIV_JSON_CONNECTION */
69558 e = 0;
69559 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->actor_reqs_count);
69560 if (e) {
69561 log_packet_detailed("'actor_reqs_count' field error detected");
69562 }
69563 }
69564 if (BV_ISSET(fields, 2)) {
69565 log_packet_detailed(" field 'actor_reqs' has changed");
69566#ifdef FREECIV_JSON_CONNECTION
69567 field_addr.name = "actor_reqs";
69568#endif /* FREECIV_JSON_CONNECTION */
69569 e = 0;
69570 {
69571 int i;
69572
69573#ifdef FREECIV_JSON_CONNECTION
69574 /* Create the array. */
69575 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->actor_reqs_count);
69576
69577 /* Enter the array. */
69578 field_addr.sub_location = plocation_elem_new(0);
69579#endif /* FREECIV_JSON_CONNECTION */
69580
69581 for (i = 0; i < real_packet->actor_reqs_count; i++) {
69582#ifdef FREECIV_JSON_CONNECTION
69583 /* Next array element. */
69584 field_addr.sub_location->number = i;
69585#endif /* FREECIV_JSON_CONNECTION */
69586
69587 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs[i]);
69588 }
69589
69590#ifdef FREECIV_JSON_CONNECTION
69591 /* Exit array. */
69592 FC_FREE(field_addr.sub_location);
69593#endif /* FREECIV_JSON_CONNECTION */
69594 }
69595 if (e) {
69596 log_packet_detailed("'actor_reqs' field error detected");
69597 }
69598 }
69599 if (BV_ISSET(fields, 3)) {
69600 log_packet_detailed(" field 'target_reqs_count' has changed");
69601#ifdef FREECIV_JSON_CONNECTION
69602 field_addr.name = "target_reqs_count";
69603#endif /* FREECIV_JSON_CONNECTION */
69604 e = 0;
69605 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->target_reqs_count);
69606 if (e) {
69607 log_packet_detailed("'target_reqs_count' field error detected");
69608 }
69609 }
69610 if (BV_ISSET(fields, 4)) {
69611 log_packet_detailed(" field 'target_reqs' has changed");
69612#ifdef FREECIV_JSON_CONNECTION
69613 field_addr.name = "target_reqs";
69614#endif /* FREECIV_JSON_CONNECTION */
69615 e = 0;
69616 {
69617 int i;
69618
69619#ifdef FREECIV_JSON_CONNECTION
69620 /* Create the array. */
69621 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->target_reqs_count);
69622
69623 /* Enter the array. */
69624 field_addr.sub_location = plocation_elem_new(0);
69625#endif /* FREECIV_JSON_CONNECTION */
69626
69627 for (i = 0; i < real_packet->target_reqs_count; i++) {
69628#ifdef FREECIV_JSON_CONNECTION
69629 /* Next array element. */
69630 field_addr.sub_location->number = i;
69631#endif /* FREECIV_JSON_CONNECTION */
69632
69633 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs[i]);
69634 }
69635
69636#ifdef FREECIV_JSON_CONNECTION
69637 /* Exit array. */
69638 FC_FREE(field_addr.sub_location);
69639#endif /* FREECIV_JSON_CONNECTION */
69640 }
69641 if (e) {
69642 log_packet_detailed("'target_reqs' field error detected");
69643 }
69644 }
69645
69646 *old = *real_packet;
69647#endif /* FREECIV_DELTA_PROTOCOL */
69648#ifndef FREECIV_DELTA_PROTOCOL
69649#ifdef FREECIV_JSON_CONNECTION
69650 field_addr.name = "enabled_action";
69651#endif /* FREECIV_JSON_CONNECTION */
69652 e = 0;
69653 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->enabled_action);
69654 if (e) {
69655 log_packet_detailed("'enabled_action' field error detected");
69656 }
69657#ifdef FREECIV_JSON_CONNECTION
69658 field_addr.name = "actor_reqs_count";
69659#endif /* FREECIV_JSON_CONNECTION */
69660 e = 0;
69661 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->actor_reqs_count);
69662 if (e) {
69663 log_packet_detailed("'actor_reqs_count' field error detected");
69664 }
69665#ifdef FREECIV_JSON_CONNECTION
69666 field_addr.name = "actor_reqs";
69667#endif /* FREECIV_JSON_CONNECTION */
69668 e = 0;
69669 {
69670 int i;
69671
69672#ifdef FREECIV_JSON_CONNECTION
69673 /* Create the array. */
69674 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->actor_reqs_count);
69675
69676 /* Enter the array. */
69677 field_addr.sub_location = plocation_elem_new(0);
69678#endif /* FREECIV_JSON_CONNECTION */
69679
69680 for (i = 0; i < real_packet->actor_reqs_count; i++) {
69681#ifdef FREECIV_JSON_CONNECTION
69682 /* Next array element. */
69683 field_addr.sub_location->number = i;
69684#endif /* FREECIV_JSON_CONNECTION */
69685
69686 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->actor_reqs[i]);
69687 }
69688
69689#ifdef FREECIV_JSON_CONNECTION
69690 /* Exit array. */
69691 FC_FREE(field_addr.sub_location);
69692#endif /* FREECIV_JSON_CONNECTION */
69693 }
69694 if (e) {
69695 log_packet_detailed("'actor_reqs' field error detected");
69696 }
69697#ifdef FREECIV_JSON_CONNECTION
69698 field_addr.name = "target_reqs_count";
69699#endif /* FREECIV_JSON_CONNECTION */
69700 e = 0;
69701 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->target_reqs_count);
69702 if (e) {
69703 log_packet_detailed("'target_reqs_count' field error detected");
69704 }
69705#ifdef FREECIV_JSON_CONNECTION
69706 field_addr.name = "target_reqs";
69707#endif /* FREECIV_JSON_CONNECTION */
69708 e = 0;
69709 {
69710 int i;
69711
69712#ifdef FREECIV_JSON_CONNECTION
69713 /* Create the array. */
69714 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->target_reqs_count);
69715
69716 /* Enter the array. */
69717 field_addr.sub_location = plocation_elem_new(0);
69718#endif /* FREECIV_JSON_CONNECTION */
69719
69720 for (i = 0; i < real_packet->target_reqs_count; i++) {
69721#ifdef FREECIV_JSON_CONNECTION
69722 /* Next array element. */
69723 field_addr.sub_location->number = i;
69724#endif /* FREECIV_JSON_CONNECTION */
69725
69726 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->target_reqs[i]);
69727 }
69728
69729#ifdef FREECIV_JSON_CONNECTION
69730 /* Exit array. */
69731 FC_FREE(field_addr.sub_location);
69732#endif /* FREECIV_JSON_CONNECTION */
69733 }
69734 if (e) {
69735 log_packet_detailed("'target_reqs' field error detected");
69736 }
69737
69738#endif
69740}
69741
69743{
69744 if (!pc->used) {
69745 log_error("WARNING: trying to send data to the closed connection %s",
69747 return -1;
69748 }
69749 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet != NULL, -1,
69750 "Handler for PACKET_RULESET_ACTION_ENABLER not installed");
69751 return pc->phs.handlers->send[PACKET_RULESET_ACTION_ENABLER].packet(pc, packet);
69752}
69753
69760
69761#ifdef FREECIV_DELTA_PROTOCOL
69762#define hash_packet_ruleset_action_auto_100 hash_const
69763
69764#define cmp_packet_ruleset_action_auto_100 cmp_const
69765
69767#endif /* FREECIV_DELTA_PROTOCOL */
69768
69770{
69771#ifdef FREECIV_DELTA_PROTOCOL
69773 struct packet_ruleset_action_auto *old;
69774 struct genhash **hash = pc->phs.received + PACKET_RULESET_ACTION_AUTO;
69775#endif /* FREECIV_DELTA_PROTOCOL */
69777#ifdef FREECIV_JSON_CONNECTION
69778 struct plocation field_addr;
69779 {
69783 }
69784#endif /* FREECIV_JSON_CONNECTION */
69785
69786#ifdef FREECIV_DELTA_PROTOCOL
69787#ifdef FREECIV_JSON_CONNECTION
69788 field_addr.name = "fields";
69789#endif /* FREECIV_JSON_CONNECTION */
69790 DIO_BV_GET(&din, &field_addr, fields);
69791
69792#else /* FREECIV_DELTA_PROTOCOL */
69793#ifdef FREECIV_JSON_CONNECTION
69794 field_addr.name = "id";
69795#endif /* FREECIV_JSON_CONNECTION */
69796 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
69798 }
69799#ifdef FREECIV_JSON_CONNECTION
69800 field_addr.name = "cause";
69801#endif /* FREECIV_JSON_CONNECTION */
69802 {
69803 int readin;
69804
69805 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69807 }
69808 real_packet->cause = readin;
69809 }
69810#ifdef FREECIV_JSON_CONNECTION
69811 field_addr.name = "reqs_count";
69812#endif /* FREECIV_JSON_CONNECTION */
69813 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
69814 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
69815 }
69816#ifdef FREECIV_JSON_CONNECTION
69817 field_addr.name = "reqs";
69818#endif /* FREECIV_JSON_CONNECTION */
69819 if (real_packet->reqs_count > MAX_NUM_REQS) {
69820 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
69821 }
69822 {
69823 int i;
69824
69825#ifdef FREECIV_JSON_CONNECTION
69826 /* Enter array. */
69827 field_addr.sub_location = plocation_elem_new(0);
69828#endif /* FREECIV_JSON_CONNECTION */
69829
69830 for (i = 0; i < real_packet->reqs_count; i++) {
69831#ifdef FREECIV_JSON_CONNECTION
69832 field_addr.sub_location->number = i;
69833#endif /* FREECIV_JSON_CONNECTION */
69834
69835 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
69837 }
69838 }
69839
69840#ifdef FREECIV_JSON_CONNECTION
69841 /* Exit array. */
69842 FC_FREE(field_addr.sub_location);
69843#endif /* FREECIV_JSON_CONNECTION */
69844 }
69845#ifdef FREECIV_JSON_CONNECTION
69846 field_addr.name = "alternatives_count";
69847#endif /* FREECIV_JSON_CONNECTION */
69848 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
69849 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
69850 }
69851#ifdef FREECIV_JSON_CONNECTION
69852 field_addr.name = "alternatives";
69853#endif /* FREECIV_JSON_CONNECTION */
69854 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
69855 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": truncation array");
69856 }
69857 {
69858 int i;
69859
69860#ifdef FREECIV_JSON_CONNECTION
69861 /* Enter array. */
69862 field_addr.sub_location = plocation_elem_new(0);
69863#endif /* FREECIV_JSON_CONNECTION */
69864
69865 for (i = 0; i < real_packet->alternatives_count; i++) {
69866#ifdef FREECIV_JSON_CONNECTION
69867 field_addr.sub_location->number = i;
69868#endif /* FREECIV_JSON_CONNECTION */
69869
69870 {
69871 int readin;
69872
69873 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69874 RECEIVE_PACKET_FIELD_ERROR(alternatives);
69875 }
69876 real_packet->alternatives[i] = readin;
69877 }
69878 }
69879
69880#ifdef FREECIV_JSON_CONNECTION
69881 /* Exit array. */
69882 FC_FREE(field_addr.sub_location);
69883#endif /* FREECIV_JSON_CONNECTION */
69884 }
69885#endif
69886 log_packet_detailed("packet_ruleset_action_auto_100: got info about ()");
69887
69888#ifdef FREECIV_DELTA_PROTOCOL
69889 if (NULL == *hash) {
69891 NULL, NULL, NULL, free);
69892 }
69893
69894 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
69895 *real_packet = *old;
69896 } else {
69897 log_packet_detailed(" no old info");
69898 memset(real_packet, 0, sizeof(*real_packet));
69899 }
69900
69901 if (BV_ISSET(fields, 0)) {
69902 log_packet_detailed(" got field 'id'");
69903#ifdef FREECIV_JSON_CONNECTION
69904 field_addr.name = "id";
69905#endif /* FREECIV_JSON_CONNECTION */
69906 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
69908 }
69909 }
69910 if (BV_ISSET(fields, 1)) {
69911 log_packet_detailed(" got field 'cause'");
69912#ifdef FREECIV_JSON_CONNECTION
69913 field_addr.name = "cause";
69914#endif /* FREECIV_JSON_CONNECTION */
69915 {
69916 int readin;
69917
69918 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69920 }
69921 real_packet->cause = readin;
69922 }
69923 }
69924 if (BV_ISSET(fields, 2)) {
69925 log_packet_detailed(" got field 'reqs_count'");
69926#ifdef FREECIV_JSON_CONNECTION
69927 field_addr.name = "reqs_count";
69928#endif /* FREECIV_JSON_CONNECTION */
69929 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
69930 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
69931 }
69932 }
69933 if (BV_ISSET(fields, 3)) {
69934 log_packet_detailed(" got field 'reqs'");
69935#ifdef FREECIV_JSON_CONNECTION
69936 field_addr.name = "reqs";
69937#endif /* FREECIV_JSON_CONNECTION */
69938 if (real_packet->reqs_count > MAX_NUM_REQS) {
69939 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
69940 }
69941 {
69942 int i;
69943
69944#ifdef FREECIV_JSON_CONNECTION
69945 /* Enter array. */
69946 field_addr.sub_location = plocation_elem_new(0);
69947#endif /* FREECIV_JSON_CONNECTION */
69948
69949 for (i = 0; i < real_packet->reqs_count; i++) {
69950#ifdef FREECIV_JSON_CONNECTION
69951 field_addr.sub_location->number = i;
69952#endif /* FREECIV_JSON_CONNECTION */
69953
69954 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
69956 }
69957 }
69958
69959#ifdef FREECIV_JSON_CONNECTION
69960 /* Exit array. */
69961 FC_FREE(field_addr.sub_location);
69962#endif /* FREECIV_JSON_CONNECTION */
69963 }
69964 }
69965 if (BV_ISSET(fields, 4)) {
69966 log_packet_detailed(" got field 'alternatives_count'");
69967#ifdef FREECIV_JSON_CONNECTION
69968 field_addr.name = "alternatives_count";
69969#endif /* FREECIV_JSON_CONNECTION */
69970 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->alternatives_count)) {
69971 RECEIVE_PACKET_FIELD_ERROR(alternatives_count);
69972 }
69973 }
69974 if (BV_ISSET(fields, 5)) {
69975 log_packet_detailed(" got field 'alternatives'");
69976#ifdef FREECIV_JSON_CONNECTION
69977 field_addr.name = "alternatives";
69978#endif /* FREECIV_JSON_CONNECTION */
69979 if (real_packet->alternatives_count > MAX_NUM_ACTIONS) {
69980 RECEIVE_PACKET_FIELD_ERROR(alternatives, ": truncation array");
69981 }
69982 {
69983 int i;
69984
69985#ifdef FREECIV_JSON_CONNECTION
69986 /* Enter array. */
69987 field_addr.sub_location = plocation_elem_new(0);
69988#endif /* FREECIV_JSON_CONNECTION */
69989
69990 for (i = 0; i < real_packet->alternatives_count; i++) {
69991#ifdef FREECIV_JSON_CONNECTION
69992 field_addr.sub_location->number = i;
69993#endif /* FREECIV_JSON_CONNECTION */
69994
69995 {
69996 int readin;
69997
69998 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
69999 RECEIVE_PACKET_FIELD_ERROR(alternatives);
70000 }
70001 real_packet->alternatives[i] = readin;
70002 }
70003 }
70004
70005#ifdef FREECIV_JSON_CONNECTION
70006 /* Exit array. */
70007 FC_FREE(field_addr.sub_location);
70008#endif /* FREECIV_JSON_CONNECTION */
70009 }
70010 }
70011
70012 if (NULL == old) {
70013 old = fc_malloc(sizeof(*old));
70014 *old = *real_packet;
70015 genhash_insert(*hash, old, old);
70016 } else {
70017 *old = *real_packet;
70018 }
70019
70020#endif /* FREECIV_DELTA_PROTOCOL */
70022}
70023
70025{
70026 const struct packet_ruleset_action_auto *real_packet = packet;
70027 int e;
70028#ifdef FREECIV_DELTA_PROTOCOL
70030 struct packet_ruleset_action_auto *old;
70031 bool differ;
70032 struct genhash **hash = pc->phs.sent + PACKET_RULESET_ACTION_AUTO;
70033#endif /* FREECIV_DELTA_PROTOCOL */
70035#ifdef FREECIV_JSON_CONNECTION
70036 struct plocation field_addr;
70037 {
70041 }
70042#endif /* FREECIV_JSON_CONNECTION */
70043
70044 log_packet_detailed("packet_ruleset_action_auto_100: sending info about ()");
70045
70046#ifdef FREECIV_DELTA_PROTOCOL
70047 if (NULL == *hash) {
70049 NULL, NULL, NULL, free);
70050 }
70051 BV_CLR_ALL(fields);
70052
70053 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
70054 old = fc_malloc(sizeof(*old));
70055 *old = *real_packet;
70056 genhash_insert(*hash, old, old);
70057 memset(old, 0, sizeof(*old));
70058 }
70059 differ = (old->id != real_packet->id);
70060 if (differ) {
70061 BV_SET(fields, 0);
70062 }
70063
70064 differ = (old->cause != real_packet->cause);
70065 if (differ) {
70066 BV_SET(fields, 1);
70067 }
70068
70069 differ = (old->reqs_count != real_packet->reqs_count);
70070 if (differ) {
70071 BV_SET(fields, 2);
70072 }
70073
70074 differ = (old->reqs_count != real_packet->reqs_count);
70075 if (!differ) {
70076 int i;
70077
70078 for (i = 0; i < real_packet->reqs_count; i++) {
70079 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
70080 if (differ) {
70081 break;
70082 }
70083 }
70084 }
70085 if (differ) {
70086 BV_SET(fields, 3);
70087 }
70088
70089 differ = (old->alternatives_count != real_packet->alternatives_count);
70090 if (differ) {
70091 BV_SET(fields, 4);
70092 }
70093
70094 differ = (old->alternatives_count != real_packet->alternatives_count);
70095 if (!differ) {
70096 int i;
70097
70098 for (i = 0; i < real_packet->alternatives_count; i++) {
70099 differ = (old->alternatives[i] != real_packet->alternatives[i]);
70100 if (differ) {
70101 break;
70102 }
70103 }
70104 }
70105 if (differ) {
70106 BV_SET(fields, 5);
70107 }
70108
70109
70110#ifdef FREECIV_JSON_CONNECTION
70111 field_addr.name = "fields";
70112#endif /* FREECIV_JSON_CONNECTION */
70113 e = 0;
70114 e |= DIO_BV_PUT(&dout, &field_addr, fields);
70115 if (e) {
70116 log_packet_detailed("fields bitvector error detected");
70117 }
70118
70119 if (BV_ISSET(fields, 0)) {
70120 log_packet_detailed(" field 'id' has changed");
70121#ifdef FREECIV_JSON_CONNECTION
70122 field_addr.name = "id";
70123#endif /* FREECIV_JSON_CONNECTION */
70124 e = 0;
70125 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
70126 if (e) {
70127 log_packet_detailed("'id' field error detected");
70128 }
70129 }
70130 if (BV_ISSET(fields, 1)) {
70131 log_packet_detailed(" field 'cause' has changed");
70132#ifdef FREECIV_JSON_CONNECTION
70133 field_addr.name = "cause";
70134#endif /* FREECIV_JSON_CONNECTION */
70135 e = 0;
70136 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
70137 if (e) {
70138 log_packet_detailed("'cause' field error detected");
70139 }
70140 }
70141 if (BV_ISSET(fields, 2)) {
70142 log_packet_detailed(" field 'reqs_count' has changed");
70143#ifdef FREECIV_JSON_CONNECTION
70144 field_addr.name = "reqs_count";
70145#endif /* FREECIV_JSON_CONNECTION */
70146 e = 0;
70147 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
70148 if (e) {
70149 log_packet_detailed("'reqs_count' field error detected");
70150 }
70151 }
70152 if (BV_ISSET(fields, 3)) {
70153 log_packet_detailed(" field 'reqs' has changed");
70154#ifdef FREECIV_JSON_CONNECTION
70155 field_addr.name = "reqs";
70156#endif /* FREECIV_JSON_CONNECTION */
70157 e = 0;
70158 {
70159 int i;
70160
70161#ifdef FREECIV_JSON_CONNECTION
70162 /* Create the array. */
70163 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
70164
70165 /* Enter the array. */
70166 field_addr.sub_location = plocation_elem_new(0);
70167#endif /* FREECIV_JSON_CONNECTION */
70168
70169 for (i = 0; i < real_packet->reqs_count; i++) {
70170#ifdef FREECIV_JSON_CONNECTION
70171 /* Next array element. */
70172 field_addr.sub_location->number = i;
70173#endif /* FREECIV_JSON_CONNECTION */
70174
70175 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
70176 }
70177
70178#ifdef FREECIV_JSON_CONNECTION
70179 /* Exit array. */
70180 FC_FREE(field_addr.sub_location);
70181#endif /* FREECIV_JSON_CONNECTION */
70182 }
70183 if (e) {
70184 log_packet_detailed("'reqs' field error detected");
70185 }
70186 }
70187 if (BV_ISSET(fields, 4)) {
70188 log_packet_detailed(" field 'alternatives_count' has changed");
70189#ifdef FREECIV_JSON_CONNECTION
70190 field_addr.name = "alternatives_count";
70191#endif /* FREECIV_JSON_CONNECTION */
70192 e = 0;
70193 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
70194 if (e) {
70195 log_packet_detailed("'alternatives_count' field error detected");
70196 }
70197 }
70198 if (BV_ISSET(fields, 5)) {
70199 log_packet_detailed(" field 'alternatives' has changed");
70200#ifdef FREECIV_JSON_CONNECTION
70201 field_addr.name = "alternatives";
70202#endif /* FREECIV_JSON_CONNECTION */
70203 e = 0;
70204 {
70205 int i;
70206
70207#ifdef FREECIV_JSON_CONNECTION
70208 /* Create the array. */
70209 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
70210
70211 /* Enter the array. */
70212 field_addr.sub_location = plocation_elem_new(0);
70213#endif /* FREECIV_JSON_CONNECTION */
70214
70215 for (i = 0; i < real_packet->alternatives_count; i++) {
70216#ifdef FREECIV_JSON_CONNECTION
70217 /* Next array element. */
70218 field_addr.sub_location->number = i;
70219#endif /* FREECIV_JSON_CONNECTION */
70220
70221 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
70222 }
70223
70224#ifdef FREECIV_JSON_CONNECTION
70225 /* Exit array. */
70226 FC_FREE(field_addr.sub_location);
70227#endif /* FREECIV_JSON_CONNECTION */
70228 }
70229 if (e) {
70230 log_packet_detailed("'alternatives' field error detected");
70231 }
70232 }
70233
70234 *old = *real_packet;
70235#endif /* FREECIV_DELTA_PROTOCOL */
70236#ifndef FREECIV_DELTA_PROTOCOL
70237#ifdef FREECIV_JSON_CONNECTION
70238 field_addr.name = "id";
70239#endif /* FREECIV_JSON_CONNECTION */
70240 e = 0;
70241 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
70242 if (e) {
70243 log_packet_detailed("'id' field error detected");
70244 }
70245#ifdef FREECIV_JSON_CONNECTION
70246 field_addr.name = "cause";
70247#endif /* FREECIV_JSON_CONNECTION */
70248 e = 0;
70249 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->cause);
70250 if (e) {
70251 log_packet_detailed("'cause' field error detected");
70252 }
70253#ifdef FREECIV_JSON_CONNECTION
70254 field_addr.name = "reqs_count";
70255#endif /* FREECIV_JSON_CONNECTION */
70256 e = 0;
70257 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
70258 if (e) {
70259 log_packet_detailed("'reqs_count' field error detected");
70260 }
70261#ifdef FREECIV_JSON_CONNECTION
70262 field_addr.name = "reqs";
70263#endif /* FREECIV_JSON_CONNECTION */
70264 e = 0;
70265 {
70266 int i;
70267
70268#ifdef FREECIV_JSON_CONNECTION
70269 /* Create the array. */
70270 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
70271
70272 /* Enter the array. */
70273 field_addr.sub_location = plocation_elem_new(0);
70274#endif /* FREECIV_JSON_CONNECTION */
70275
70276 for (i = 0; i < real_packet->reqs_count; i++) {
70277#ifdef FREECIV_JSON_CONNECTION
70278 /* Next array element. */
70279 field_addr.sub_location->number = i;
70280#endif /* FREECIV_JSON_CONNECTION */
70281
70282 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
70283 }
70284
70285#ifdef FREECIV_JSON_CONNECTION
70286 /* Exit array. */
70287 FC_FREE(field_addr.sub_location);
70288#endif /* FREECIV_JSON_CONNECTION */
70289 }
70290 if (e) {
70291 log_packet_detailed("'reqs' field error detected");
70292 }
70293#ifdef FREECIV_JSON_CONNECTION
70294 field_addr.name = "alternatives_count";
70295#endif /* FREECIV_JSON_CONNECTION */
70296 e = 0;
70297 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives_count);
70298 if (e) {
70299 log_packet_detailed("'alternatives_count' field error detected");
70300 }
70301#ifdef FREECIV_JSON_CONNECTION
70302 field_addr.name = "alternatives";
70303#endif /* FREECIV_JSON_CONNECTION */
70304 e = 0;
70305 {
70306 int i;
70307
70308#ifdef FREECIV_JSON_CONNECTION
70309 /* Create the array. */
70310 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->alternatives_count);
70311
70312 /* Enter the array. */
70313 field_addr.sub_location = plocation_elem_new(0);
70314#endif /* FREECIV_JSON_CONNECTION */
70315
70316 for (i = 0; i < real_packet->alternatives_count; i++) {
70317#ifdef FREECIV_JSON_CONNECTION
70318 /* Next array element. */
70319 field_addr.sub_location->number = i;
70320#endif /* FREECIV_JSON_CONNECTION */
70321
70322 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->alternatives[i]);
70323 }
70324
70325#ifdef FREECIV_JSON_CONNECTION
70326 /* Exit array. */
70327 FC_FREE(field_addr.sub_location);
70328#endif /* FREECIV_JSON_CONNECTION */
70329 }
70330 if (e) {
70331 log_packet_detailed("'alternatives' field error detected");
70332 }
70333
70334#endif
70336}
70337
70339{
70340 if (!pc->used) {
70341 log_error("WARNING: trying to send data to the closed connection %s",
70343 return -1;
70344 }
70345 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet != NULL, -1,
70346 "Handler for PACKET_RULESET_ACTION_AUTO not installed");
70347 return pc->phs.handlers->send[PACKET_RULESET_ACTION_AUTO].packet(pc, packet);
70348}
70349
70351{
70352 conn_list_iterate(dest, pconn) {
70355}
70356
70357#ifdef FREECIV_DELTA_PROTOCOL
70358#define hash_packet_ruleset_counter_100 hash_const
70359
70360#define cmp_packet_ruleset_counter_100 cmp_const
70361
70363#endif /* FREECIV_DELTA_PROTOCOL */
70364
70366{
70367#ifdef FREECIV_DELTA_PROTOCOL
70369 struct packet_ruleset_counter *old;
70370 struct genhash **hash = pc->phs.received + PACKET_RULESET_COUNTER;
70371#endif /* FREECIV_DELTA_PROTOCOL */
70373#ifdef FREECIV_JSON_CONNECTION
70374 struct plocation field_addr;
70375 {
70379 }
70380#endif /* FREECIV_JSON_CONNECTION */
70381
70382#ifdef FREECIV_DELTA_PROTOCOL
70383#ifdef FREECIV_JSON_CONNECTION
70384 field_addr.name = "fields";
70385#endif /* FREECIV_JSON_CONNECTION */
70386 DIO_BV_GET(&din, &field_addr, fields);
70387
70388#else /* FREECIV_DELTA_PROTOCOL */
70389#ifdef FREECIV_JSON_CONNECTION
70390 field_addr.name = "name";
70391#endif /* FREECIV_JSON_CONNECTION */
70392 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
70394 }
70395#ifdef FREECIV_JSON_CONNECTION
70396 field_addr.name = "rule_name";
70397#endif /* FREECIV_JSON_CONNECTION */
70398 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
70399 RECEIVE_PACKET_FIELD_ERROR(rule_name);
70400 }
70401#ifdef FREECIV_JSON_CONNECTION
70402 field_addr.name = "helptext";
70403#endif /* FREECIV_JSON_CONNECTION */
70404 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
70406 }
70407#ifdef FREECIV_JSON_CONNECTION
70408 field_addr.name = "def";
70409#endif /* FREECIV_JSON_CONNECTION */
70410 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
70412 }
70413#ifdef FREECIV_JSON_CONNECTION
70414 field_addr.name = "checkpoint";
70415#endif /* FREECIV_JSON_CONNECTION */
70416 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
70417 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
70418 }
70419#ifdef FREECIV_JSON_CONNECTION
70420 field_addr.name = "type";
70421#endif /* FREECIV_JSON_CONNECTION */
70422 {
70423 int readin;
70424
70425 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
70427 }
70428 real_packet->type = readin;
70429 }
70430#ifdef FREECIV_JSON_CONNECTION
70431 field_addr.name = "behavior";
70432#endif /* FREECIV_JSON_CONNECTION */
70433 {
70434 int readin;
70435
70436 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
70438 }
70439 real_packet->behavior = readin;
70440 }
70441#endif
70442 log_packet_detailed("packet_ruleset_counter_100: got info about ()");
70443
70444#ifdef FREECIV_DELTA_PROTOCOL
70445 if (NULL == *hash) {
70447 NULL, NULL, NULL, free);
70448 }
70449
70450 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
70451 *real_packet = *old;
70452 } else {
70453 log_packet_detailed(" no old info");
70454 memset(real_packet, 0, sizeof(*real_packet));
70455 }
70456
70457 if (BV_ISSET(fields, 0)) {
70458 log_packet_detailed(" got field 'name'");
70459#ifdef FREECIV_JSON_CONNECTION
70460 field_addr.name = "name";
70461#endif /* FREECIV_JSON_CONNECTION */
70462 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
70464 }
70465 }
70466 if (BV_ISSET(fields, 1)) {
70467 log_packet_detailed(" got field 'rule_name'");
70468#ifdef FREECIV_JSON_CONNECTION
70469 field_addr.name = "rule_name";
70470#endif /* FREECIV_JSON_CONNECTION */
70471 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
70472 RECEIVE_PACKET_FIELD_ERROR(rule_name);
70473 }
70474 }
70475 if (BV_ISSET(fields, 2)) {
70476 log_packet_detailed(" got field 'helptext'");
70477#ifdef FREECIV_JSON_CONNECTION
70478 field_addr.name = "helptext";
70479#endif /* FREECIV_JSON_CONNECTION */
70480 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
70482 }
70483 }
70484 if (BV_ISSET(fields, 3)) {
70485 log_packet_detailed(" got field 'def'");
70486#ifdef FREECIV_JSON_CONNECTION
70487 field_addr.name = "def";
70488#endif /* FREECIV_JSON_CONNECTION */
70489 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->def)) {
70491 }
70492 }
70493 if (BV_ISSET(fields, 4)) {
70494 log_packet_detailed(" got field 'checkpoint'");
70495#ifdef FREECIV_JSON_CONNECTION
70496 field_addr.name = "checkpoint";
70497#endif /* FREECIV_JSON_CONNECTION */
70498 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->checkpoint)) {
70499 RECEIVE_PACKET_FIELD_ERROR(checkpoint);
70500 }
70501 }
70502 if (BV_ISSET(fields, 5)) {
70503 log_packet_detailed(" got field 'type'");
70504#ifdef FREECIV_JSON_CONNECTION
70505 field_addr.name = "type";
70506#endif /* FREECIV_JSON_CONNECTION */
70507 {
70508 int readin;
70509
70510 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
70512 }
70513 real_packet->type = readin;
70514 }
70515 }
70516 if (BV_ISSET(fields, 6)) {
70517 log_packet_detailed(" got field 'behavior'");
70518#ifdef FREECIV_JSON_CONNECTION
70519 field_addr.name = "behavior";
70520#endif /* FREECIV_JSON_CONNECTION */
70521 {
70522 int readin;
70523
70524 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
70526 }
70527 real_packet->behavior = readin;
70528 }
70529 }
70530
70531 if (NULL == old) {
70532 old = fc_malloc(sizeof(*old));
70533 *old = *real_packet;
70534 genhash_insert(*hash, old, old);
70535 } else {
70536 *old = *real_packet;
70537 }
70538
70539#endif /* FREECIV_DELTA_PROTOCOL */
70541}
70542
70544{
70545 const struct packet_ruleset_counter *real_packet = packet;
70546 int e;
70547#ifdef FREECIV_DELTA_PROTOCOL
70549 struct packet_ruleset_counter *old;
70550 bool differ;
70551 struct genhash **hash = pc->phs.sent + PACKET_RULESET_COUNTER;
70552#endif /* FREECIV_DELTA_PROTOCOL */
70554#ifdef FREECIV_JSON_CONNECTION
70555 struct plocation field_addr;
70556 {
70560 }
70561#endif /* FREECIV_JSON_CONNECTION */
70562
70563 log_packet_detailed("packet_ruleset_counter_100: sending info about ()");
70564
70565#ifdef FREECIV_DELTA_PROTOCOL
70566 if (NULL == *hash) {
70568 NULL, NULL, NULL, free);
70569 }
70570 BV_CLR_ALL(fields);
70571
70572 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
70573 old = fc_malloc(sizeof(*old));
70574 *old = *real_packet;
70575 genhash_insert(*hash, old, old);
70576 memset(old, 0, sizeof(*old));
70577 }
70578 differ = (strcmp(old->name, real_packet->name) != 0);
70579 if (differ) {
70580 BV_SET(fields, 0);
70581 }
70582
70583 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
70584 if (differ) {
70585 BV_SET(fields, 1);
70586 }
70587
70588 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
70589 if (differ) {
70590 BV_SET(fields, 2);
70591 }
70592
70593 differ = (old->def != real_packet->def);
70594 if (differ) {
70595 BV_SET(fields, 3);
70596 }
70597
70598 differ = (old->checkpoint != real_packet->checkpoint);
70599 if (differ) {
70600 BV_SET(fields, 4);
70601 }
70602
70603 differ = (old->type != real_packet->type);
70604 if (differ) {
70605 BV_SET(fields, 5);
70606 }
70607
70608 differ = (old->behavior != real_packet->behavior);
70609 if (differ) {
70610 BV_SET(fields, 6);
70611 }
70612
70613
70614#ifdef FREECIV_JSON_CONNECTION
70615 field_addr.name = "fields";
70616#endif /* FREECIV_JSON_CONNECTION */
70617 e = 0;
70618 e |= DIO_BV_PUT(&dout, &field_addr, fields);
70619 if (e) {
70620 log_packet_detailed("fields bitvector error detected");
70621 }
70622
70623 if (BV_ISSET(fields, 0)) {
70624 log_packet_detailed(" field 'name' has changed");
70625#ifdef FREECIV_JSON_CONNECTION
70626 field_addr.name = "name";
70627#endif /* FREECIV_JSON_CONNECTION */
70628 e = 0;
70629 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70630 if (e) {
70631 log_packet_detailed("'name' field error detected");
70632 }
70633 }
70634 if (BV_ISSET(fields, 1)) {
70635 log_packet_detailed(" field 'rule_name' has changed");
70636#ifdef FREECIV_JSON_CONNECTION
70637 field_addr.name = "rule_name";
70638#endif /* FREECIV_JSON_CONNECTION */
70639 e = 0;
70640 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
70641 if (e) {
70642 log_packet_detailed("'rule_name' field error detected");
70643 }
70644 }
70645 if (BV_ISSET(fields, 2)) {
70646 log_packet_detailed(" field 'helptext' has changed");
70647#ifdef FREECIV_JSON_CONNECTION
70648 field_addr.name = "helptext";
70649#endif /* FREECIV_JSON_CONNECTION */
70650 e = 0;
70651 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
70652 if (e) {
70653 log_packet_detailed("'helptext' field error detected");
70654 }
70655 }
70656 if (BV_ISSET(fields, 3)) {
70657 log_packet_detailed(" field 'def' has changed");
70658#ifdef FREECIV_JSON_CONNECTION
70659 field_addr.name = "def";
70660#endif /* FREECIV_JSON_CONNECTION */
70661 e = 0;
70662 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
70663 if (e) {
70664 log_packet_detailed("'def' field error detected");
70665 }
70666 }
70667 if (BV_ISSET(fields, 4)) {
70668 log_packet_detailed(" field 'checkpoint' has changed");
70669#ifdef FREECIV_JSON_CONNECTION
70670 field_addr.name = "checkpoint";
70671#endif /* FREECIV_JSON_CONNECTION */
70672 e = 0;
70673 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
70674 if (e) {
70675 log_packet_detailed("'checkpoint' field error detected");
70676 }
70677 }
70678 if (BV_ISSET(fields, 5)) {
70679 log_packet_detailed(" field 'type' has changed");
70680#ifdef FREECIV_JSON_CONNECTION
70681 field_addr.name = "type";
70682#endif /* FREECIV_JSON_CONNECTION */
70683 e = 0;
70684 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
70685 if (e) {
70686 log_packet_detailed("'type' field error detected");
70687 }
70688 }
70689 if (BV_ISSET(fields, 6)) {
70690 log_packet_detailed(" field 'behavior' has changed");
70691#ifdef FREECIV_JSON_CONNECTION
70692 field_addr.name = "behavior";
70693#endif /* FREECIV_JSON_CONNECTION */
70694 e = 0;
70695 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
70696 if (e) {
70697 log_packet_detailed("'behavior' field error detected");
70698 }
70699 }
70700
70701 *old = *real_packet;
70702#endif /* FREECIV_DELTA_PROTOCOL */
70703#ifndef FREECIV_DELTA_PROTOCOL
70704#ifdef FREECIV_JSON_CONNECTION
70705 field_addr.name = "name";
70706#endif /* FREECIV_JSON_CONNECTION */
70707 e = 0;
70708 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
70709 if (e) {
70710 log_packet_detailed("'name' field error detected");
70711 }
70712#ifdef FREECIV_JSON_CONNECTION
70713 field_addr.name = "rule_name";
70714#endif /* FREECIV_JSON_CONNECTION */
70715 e = 0;
70716 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
70717 if (e) {
70718 log_packet_detailed("'rule_name' field error detected");
70719 }
70720#ifdef FREECIV_JSON_CONNECTION
70721 field_addr.name = "helptext";
70722#endif /* FREECIV_JSON_CONNECTION */
70723 e = 0;
70724 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
70725 if (e) {
70726 log_packet_detailed("'helptext' field error detected");
70727 }
70728#ifdef FREECIV_JSON_CONNECTION
70729 field_addr.name = "def";
70730#endif /* FREECIV_JSON_CONNECTION */
70731 e = 0;
70732 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->def);
70733 if (e) {
70734 log_packet_detailed("'def' field error detected");
70735 }
70736#ifdef FREECIV_JSON_CONNECTION
70737 field_addr.name = "checkpoint";
70738#endif /* FREECIV_JSON_CONNECTION */
70739 e = 0;
70740 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->checkpoint);
70741 if (e) {
70742 log_packet_detailed("'checkpoint' field error detected");
70743 }
70744#ifdef FREECIV_JSON_CONNECTION
70745 field_addr.name = "type";
70746#endif /* FREECIV_JSON_CONNECTION */
70747 e = 0;
70748 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
70749 if (e) {
70750 log_packet_detailed("'type' field error detected");
70751 }
70752#ifdef FREECIV_JSON_CONNECTION
70753 field_addr.name = "behavior";
70754#endif /* FREECIV_JSON_CONNECTION */
70755 e = 0;
70756 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->behavior);
70757 if (e) {
70758 log_packet_detailed("'behavior' field error detected");
70759 }
70760
70761#endif
70763}
70764
70766{
70767 if (!pc->used) {
70768 log_error("WARNING: trying to send data to the closed connection %s",
70770 return -1;
70771 }
70772 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet != NULL, -1,
70773 "Handler for PACKET_RULESET_COUNTER not installed");
70774 return pc->phs.handlers->send[PACKET_RULESET_COUNTER].packet(pc, packet);
70775}
70776
70777void lsend_packet_ruleset_counter(struct conn_list *dest, const struct packet_ruleset_counter *packet)
70778{
70779 conn_list_iterate(dest, pconn) {
70782}
70783
70784#ifdef FREECIV_DELTA_PROTOCOL
70785#define hash_packet_ruleset_music_100 hash_const
70786
70787#define cmp_packet_ruleset_music_100 cmp_const
70788
70790#endif /* FREECIV_DELTA_PROTOCOL */
70791
70793{
70794#ifdef FREECIV_DELTA_PROTOCOL
70796 struct packet_ruleset_music *old;
70797 struct genhash **hash = pc->phs.received + PACKET_RULESET_MUSIC;
70798#endif /* FREECIV_DELTA_PROTOCOL */
70800#ifdef FREECIV_JSON_CONNECTION
70801 struct plocation field_addr;
70802 {
70806 }
70807#endif /* FREECIV_JSON_CONNECTION */
70808
70809#ifdef FREECIV_DELTA_PROTOCOL
70810#ifdef FREECIV_JSON_CONNECTION
70811 field_addr.name = "fields";
70812#endif /* FREECIV_JSON_CONNECTION */
70813 DIO_BV_GET(&din, &field_addr, fields);
70814
70815#else /* FREECIV_DELTA_PROTOCOL */
70816#ifdef FREECIV_JSON_CONNECTION
70817 field_addr.name = "id";
70818#endif /* FREECIV_JSON_CONNECTION */
70819 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
70821 }
70822#ifdef FREECIV_JSON_CONNECTION
70823 field_addr.name = "music_peaceful";
70824#endif /* FREECIV_JSON_CONNECTION */
70825 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
70826 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
70827 }
70828#ifdef FREECIV_JSON_CONNECTION
70829 field_addr.name = "music_combat";
70830#endif /* FREECIV_JSON_CONNECTION */
70831 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
70832 RECEIVE_PACKET_FIELD_ERROR(music_combat);
70833 }
70834#ifdef FREECIV_JSON_CONNECTION
70835 field_addr.name = "reqs_count";
70836#endif /* FREECIV_JSON_CONNECTION */
70837 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
70838 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
70839 }
70840#ifdef FREECIV_JSON_CONNECTION
70841 field_addr.name = "reqs";
70842#endif /* FREECIV_JSON_CONNECTION */
70843 if (real_packet->reqs_count > MAX_NUM_REQS) {
70844 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
70845 }
70846 {
70847 int i;
70848
70849#ifdef FREECIV_JSON_CONNECTION
70850 /* Enter array. */
70851 field_addr.sub_location = plocation_elem_new(0);
70852#endif /* FREECIV_JSON_CONNECTION */
70853
70854 for (i = 0; i < real_packet->reqs_count; i++) {
70855#ifdef FREECIV_JSON_CONNECTION
70856 field_addr.sub_location->number = i;
70857#endif /* FREECIV_JSON_CONNECTION */
70858
70859 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
70861 }
70862 }
70863
70864#ifdef FREECIV_JSON_CONNECTION
70865 /* Exit array. */
70866 FC_FREE(field_addr.sub_location);
70867#endif /* FREECIV_JSON_CONNECTION */
70868 }
70869#endif
70870 log_packet_detailed("packet_ruleset_music_100: got info about ()");
70871
70872#ifdef FREECIV_DELTA_PROTOCOL
70873 if (NULL == *hash) {
70875 NULL, NULL, NULL, free);
70876 }
70877
70878 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
70879 *real_packet = *old;
70880 } else {
70881 log_packet_detailed(" no old info");
70882 memset(real_packet, 0, sizeof(*real_packet));
70883 }
70884
70885 if (BV_ISSET(fields, 0)) {
70886 log_packet_detailed(" got field 'id'");
70887#ifdef FREECIV_JSON_CONNECTION
70888 field_addr.name = "id";
70889#endif /* FREECIV_JSON_CONNECTION */
70890 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
70892 }
70893 }
70894 if (BV_ISSET(fields, 1)) {
70895 log_packet_detailed(" got field 'music_peaceful'");
70896#ifdef FREECIV_JSON_CONNECTION
70897 field_addr.name = "music_peaceful";
70898#endif /* FREECIV_JSON_CONNECTION */
70899 if (!DIO_GET(string, &din, &field_addr, real_packet->music_peaceful, sizeof(real_packet->music_peaceful))) {
70900 RECEIVE_PACKET_FIELD_ERROR(music_peaceful);
70901 }
70902 }
70903 if (BV_ISSET(fields, 2)) {
70904 log_packet_detailed(" got field 'music_combat'");
70905#ifdef FREECIV_JSON_CONNECTION
70906 field_addr.name = "music_combat";
70907#endif /* FREECIV_JSON_CONNECTION */
70908 if (!DIO_GET(string, &din, &field_addr, real_packet->music_combat, sizeof(real_packet->music_combat))) {
70909 RECEIVE_PACKET_FIELD_ERROR(music_combat);
70910 }
70911 }
70912 if (BV_ISSET(fields, 3)) {
70913 log_packet_detailed(" got field 'reqs_count'");
70914#ifdef FREECIV_JSON_CONNECTION
70915 field_addr.name = "reqs_count";
70916#endif /* FREECIV_JSON_CONNECTION */
70917 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
70918 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
70919 }
70920 }
70921 if (BV_ISSET(fields, 4)) {
70922 log_packet_detailed(" got field 'reqs'");
70923#ifdef FREECIV_JSON_CONNECTION
70924 field_addr.name = "reqs";
70925#endif /* FREECIV_JSON_CONNECTION */
70926 if (real_packet->reqs_count > MAX_NUM_REQS) {
70927 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
70928 }
70929 {
70930 int i;
70931
70932#ifdef FREECIV_JSON_CONNECTION
70933 /* Enter array. */
70934 field_addr.sub_location = plocation_elem_new(0);
70935#endif /* FREECIV_JSON_CONNECTION */
70936
70937 for (i = 0; i < real_packet->reqs_count; i++) {
70938#ifdef FREECIV_JSON_CONNECTION
70939 field_addr.sub_location->number = i;
70940#endif /* FREECIV_JSON_CONNECTION */
70941
70942 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
70944 }
70945 }
70946
70947#ifdef FREECIV_JSON_CONNECTION
70948 /* Exit array. */
70949 FC_FREE(field_addr.sub_location);
70950#endif /* FREECIV_JSON_CONNECTION */
70951 }
70952 }
70953
70954 if (NULL == old) {
70955 old = fc_malloc(sizeof(*old));
70956 *old = *real_packet;
70957 genhash_insert(*hash, old, old);
70958 } else {
70959 *old = *real_packet;
70960 }
70961
70962#endif /* FREECIV_DELTA_PROTOCOL */
70964}
70965
70966static int send_packet_ruleset_music_100(struct connection *pc, const struct packet_ruleset_music *packet)
70967{
70968 const struct packet_ruleset_music *real_packet = packet;
70969 int e;
70970#ifdef FREECIV_DELTA_PROTOCOL
70972 struct packet_ruleset_music *old;
70973 bool differ;
70974 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MUSIC;
70975#endif /* FREECIV_DELTA_PROTOCOL */
70977#ifdef FREECIV_JSON_CONNECTION
70978 struct plocation field_addr;
70979 {
70983 }
70984#endif /* FREECIV_JSON_CONNECTION */
70985
70986 log_packet_detailed("packet_ruleset_music_100: sending info about ()");
70987
70988#ifdef FREECIV_DELTA_PROTOCOL
70989 if (NULL == *hash) {
70991 NULL, NULL, NULL, free);
70992 }
70993 BV_CLR_ALL(fields);
70994
70995 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
70996 old = fc_malloc(sizeof(*old));
70997 *old = *real_packet;
70998 genhash_insert(*hash, old, old);
70999 memset(old, 0, sizeof(*old));
71000 }
71001 differ = (old->id != real_packet->id);
71002 if (differ) {
71003 BV_SET(fields, 0);
71004 }
71005
71006 differ = (strcmp(old->music_peaceful, real_packet->music_peaceful) != 0);
71007 if (differ) {
71008 BV_SET(fields, 1);
71009 }
71010
71011 differ = (strcmp(old->music_combat, real_packet->music_combat) != 0);
71012 if (differ) {
71013 BV_SET(fields, 2);
71014 }
71015
71016 differ = (old->reqs_count != real_packet->reqs_count);
71017 if (differ) {
71018 BV_SET(fields, 3);
71019 }
71020
71021 differ = (old->reqs_count != real_packet->reqs_count);
71022 if (!differ) {
71023 int i;
71024
71025 for (i = 0; i < real_packet->reqs_count; i++) {
71026 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
71027 if (differ) {
71028 break;
71029 }
71030 }
71031 }
71032 if (differ) {
71033 BV_SET(fields, 4);
71034 }
71035
71036
71037#ifdef FREECIV_JSON_CONNECTION
71038 field_addr.name = "fields";
71039#endif /* FREECIV_JSON_CONNECTION */
71040 e = 0;
71041 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71042 if (e) {
71043 log_packet_detailed("fields bitvector error detected");
71044 }
71045
71046 if (BV_ISSET(fields, 0)) {
71047 log_packet_detailed(" field 'id' has changed");
71048#ifdef FREECIV_JSON_CONNECTION
71049 field_addr.name = "id";
71050#endif /* FREECIV_JSON_CONNECTION */
71051 e = 0;
71052 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71053 if (e) {
71054 log_packet_detailed("'id' field error detected");
71055 }
71056 }
71057 if (BV_ISSET(fields, 1)) {
71058 log_packet_detailed(" field 'music_peaceful' has changed");
71059#ifdef FREECIV_JSON_CONNECTION
71060 field_addr.name = "music_peaceful";
71061#endif /* FREECIV_JSON_CONNECTION */
71062 e = 0;
71063 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
71064 if (e) {
71065 log_packet_detailed("'music_peaceful' field error detected");
71066 }
71067 }
71068 if (BV_ISSET(fields, 2)) {
71069 log_packet_detailed(" field 'music_combat' has changed");
71070#ifdef FREECIV_JSON_CONNECTION
71071 field_addr.name = "music_combat";
71072#endif /* FREECIV_JSON_CONNECTION */
71073 e = 0;
71074 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
71075 if (e) {
71076 log_packet_detailed("'music_combat' field error detected");
71077 }
71078 }
71079 if (BV_ISSET(fields, 3)) {
71080 log_packet_detailed(" field 'reqs_count' has changed");
71081#ifdef FREECIV_JSON_CONNECTION
71082 field_addr.name = "reqs_count";
71083#endif /* FREECIV_JSON_CONNECTION */
71084 e = 0;
71085 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
71086 if (e) {
71087 log_packet_detailed("'reqs_count' field error detected");
71088 }
71089 }
71090 if (BV_ISSET(fields, 4)) {
71091 log_packet_detailed(" field 'reqs' has changed");
71092#ifdef FREECIV_JSON_CONNECTION
71093 field_addr.name = "reqs";
71094#endif /* FREECIV_JSON_CONNECTION */
71095 e = 0;
71096 {
71097 int i;
71098
71099#ifdef FREECIV_JSON_CONNECTION
71100 /* Create the array. */
71101 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
71102
71103 /* Enter the array. */
71104 field_addr.sub_location = plocation_elem_new(0);
71105#endif /* FREECIV_JSON_CONNECTION */
71106
71107 for (i = 0; i < real_packet->reqs_count; i++) {
71108#ifdef FREECIV_JSON_CONNECTION
71109 /* Next array element. */
71110 field_addr.sub_location->number = i;
71111#endif /* FREECIV_JSON_CONNECTION */
71112
71113 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
71114 }
71115
71116#ifdef FREECIV_JSON_CONNECTION
71117 /* Exit array. */
71118 FC_FREE(field_addr.sub_location);
71119#endif /* FREECIV_JSON_CONNECTION */
71120 }
71121 if (e) {
71122 log_packet_detailed("'reqs' field error detected");
71123 }
71124 }
71125
71126 *old = *real_packet;
71127#endif /* FREECIV_DELTA_PROTOCOL */
71128#ifndef FREECIV_DELTA_PROTOCOL
71129#ifdef FREECIV_JSON_CONNECTION
71130 field_addr.name = "id";
71131#endif /* FREECIV_JSON_CONNECTION */
71132 e = 0;
71133 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71134 if (e) {
71135 log_packet_detailed("'id' field error detected");
71136 }
71137#ifdef FREECIV_JSON_CONNECTION
71138 field_addr.name = "music_peaceful";
71139#endif /* FREECIV_JSON_CONNECTION */
71140 e = 0;
71141 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_peaceful);
71142 if (e) {
71143 log_packet_detailed("'music_peaceful' field error detected");
71144 }
71145#ifdef FREECIV_JSON_CONNECTION
71146 field_addr.name = "music_combat";
71147#endif /* FREECIV_JSON_CONNECTION */
71148 e = 0;
71149 e |= DIO_PUT(string, &dout, &field_addr, real_packet->music_combat);
71150 if (e) {
71151 log_packet_detailed("'music_combat' field error detected");
71152 }
71153#ifdef FREECIV_JSON_CONNECTION
71154 field_addr.name = "reqs_count";
71155#endif /* FREECIV_JSON_CONNECTION */
71156 e = 0;
71157 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
71158 if (e) {
71159 log_packet_detailed("'reqs_count' field error detected");
71160 }
71161#ifdef FREECIV_JSON_CONNECTION
71162 field_addr.name = "reqs";
71163#endif /* FREECIV_JSON_CONNECTION */
71164 e = 0;
71165 {
71166 int i;
71167
71168#ifdef FREECIV_JSON_CONNECTION
71169 /* Create the array. */
71170 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
71171
71172 /* Enter the array. */
71173 field_addr.sub_location = plocation_elem_new(0);
71174#endif /* FREECIV_JSON_CONNECTION */
71175
71176 for (i = 0; i < real_packet->reqs_count; i++) {
71177#ifdef FREECIV_JSON_CONNECTION
71178 /* Next array element. */
71179 field_addr.sub_location->number = i;
71180#endif /* FREECIV_JSON_CONNECTION */
71181
71182 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
71183 }
71184
71185#ifdef FREECIV_JSON_CONNECTION
71186 /* Exit array. */
71187 FC_FREE(field_addr.sub_location);
71188#endif /* FREECIV_JSON_CONNECTION */
71189 }
71190 if (e) {
71191 log_packet_detailed("'reqs' field error detected");
71192 }
71193
71194#endif
71196}
71197
71199{
71200 if (!pc->used) {
71201 log_error("WARNING: trying to send data to the closed connection %s",
71203 return -1;
71204 }
71205 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet != NULL, -1,
71206 "Handler for PACKET_RULESET_MUSIC not installed");
71207 return pc->phs.handlers->send[PACKET_RULESET_MUSIC].packet(pc, packet);
71208}
71209
71210void lsend_packet_ruleset_music(struct conn_list *dest, const struct packet_ruleset_music *packet)
71211{
71212 conn_list_iterate(dest, pconn) {
71215}
71216
71217#ifdef FREECIV_DELTA_PROTOCOL
71218#define hash_packet_ruleset_multiplier_100 hash_const
71219
71220#define cmp_packet_ruleset_multiplier_100 cmp_const
71221
71223#endif /* FREECIV_DELTA_PROTOCOL */
71224
71226{
71227#ifdef FREECIV_DELTA_PROTOCOL
71229 struct packet_ruleset_multiplier *old;
71230 struct genhash **hash = pc->phs.received + PACKET_RULESET_MULTIPLIER;
71231#endif /* FREECIV_DELTA_PROTOCOL */
71233#ifdef FREECIV_JSON_CONNECTION
71234 struct plocation field_addr;
71235 {
71239 }
71240#endif /* FREECIV_JSON_CONNECTION */
71241
71242#ifdef FREECIV_DELTA_PROTOCOL
71243#ifdef FREECIV_JSON_CONNECTION
71244 field_addr.name = "fields";
71245#endif /* FREECIV_JSON_CONNECTION */
71246 DIO_BV_GET(&din, &field_addr, fields);
71247
71248#else /* FREECIV_DELTA_PROTOCOL */
71249#ifdef FREECIV_JSON_CONNECTION
71250 field_addr.name = "id";
71251#endif /* FREECIV_JSON_CONNECTION */
71252 {
71253 int readin;
71254
71255 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
71257 }
71258 real_packet->id = readin;
71259 }
71260#ifdef FREECIV_JSON_CONNECTION
71261 field_addr.name = "start";
71262#endif /* FREECIV_JSON_CONNECTION */
71263 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
71265 }
71266#ifdef FREECIV_JSON_CONNECTION
71267 field_addr.name = "stop";
71268#endif /* FREECIV_JSON_CONNECTION */
71269 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
71271 }
71272#ifdef FREECIV_JSON_CONNECTION
71273 field_addr.name = "step";
71274#endif /* FREECIV_JSON_CONNECTION */
71275 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
71277 }
71278#ifdef FREECIV_JSON_CONNECTION
71279 field_addr.name = "def";
71280#endif /* FREECIV_JSON_CONNECTION */
71281 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
71283 }
71284#ifdef FREECIV_JSON_CONNECTION
71285 field_addr.name = "offset";
71286#endif /* FREECIV_JSON_CONNECTION */
71287 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
71289 }
71290#ifdef FREECIV_JSON_CONNECTION
71291 field_addr.name = "factor";
71292#endif /* FREECIV_JSON_CONNECTION */
71293 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
71295 }
71296#ifdef FREECIV_JSON_CONNECTION
71297 field_addr.name = "minimum_turns";
71298#endif /* FREECIV_JSON_CONNECTION */
71299 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
71300 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
71301 }
71302#ifdef FREECIV_JSON_CONNECTION
71303 field_addr.name = "name";
71304#endif /* FREECIV_JSON_CONNECTION */
71305 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
71307 }
71308#ifdef FREECIV_JSON_CONNECTION
71309 field_addr.name = "rule_name";
71310#endif /* FREECIV_JSON_CONNECTION */
71311 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
71312 RECEIVE_PACKET_FIELD_ERROR(rule_name);
71313 }
71314#ifdef FREECIV_JSON_CONNECTION
71315 field_addr.name = "reqs_count";
71316#endif /* FREECIV_JSON_CONNECTION */
71317 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
71318 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
71319 }
71320#ifdef FREECIV_JSON_CONNECTION
71321 field_addr.name = "reqs";
71322#endif /* FREECIV_JSON_CONNECTION */
71323 if (real_packet->reqs_count > MAX_NUM_REQS) {
71324 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
71325 }
71326 {
71327 int i;
71328
71329#ifdef FREECIV_JSON_CONNECTION
71330 /* Enter array. */
71331 field_addr.sub_location = plocation_elem_new(0);
71332#endif /* FREECIV_JSON_CONNECTION */
71333
71334 for (i = 0; i < real_packet->reqs_count; i++) {
71335#ifdef FREECIV_JSON_CONNECTION
71336 field_addr.sub_location->number = i;
71337#endif /* FREECIV_JSON_CONNECTION */
71338
71339 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
71341 }
71342 }
71343
71344#ifdef FREECIV_JSON_CONNECTION
71345 /* Exit array. */
71346 FC_FREE(field_addr.sub_location);
71347#endif /* FREECIV_JSON_CONNECTION */
71348 }
71349#ifdef FREECIV_JSON_CONNECTION
71350 field_addr.name = "helptext";
71351#endif /* FREECIV_JSON_CONNECTION */
71352 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
71354 }
71355#endif
71356 log_packet_detailed("packet_ruleset_multiplier_100: got info about ()");
71357
71358#ifdef FREECIV_DELTA_PROTOCOL
71359 if (NULL == *hash) {
71361 NULL, NULL, NULL, free);
71362 }
71363
71364 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
71365 *real_packet = *old;
71366 } else {
71367 log_packet_detailed(" no old info");
71368 memset(real_packet, 0, sizeof(*real_packet));
71369 }
71370
71371 if (BV_ISSET(fields, 0)) {
71372 log_packet_detailed(" got field 'id'");
71373#ifdef FREECIV_JSON_CONNECTION
71374 field_addr.name = "id";
71375#endif /* FREECIV_JSON_CONNECTION */
71376 {
71377 int readin;
71378
71379 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
71381 }
71382 real_packet->id = readin;
71383 }
71384 }
71385 if (BV_ISSET(fields, 1)) {
71386 log_packet_detailed(" got field 'start'");
71387#ifdef FREECIV_JSON_CONNECTION
71388 field_addr.name = "start";
71389#endif /* FREECIV_JSON_CONNECTION */
71390 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->start)) {
71392 }
71393 }
71394 if (BV_ISSET(fields, 2)) {
71395 log_packet_detailed(" got field 'stop'");
71396#ifdef FREECIV_JSON_CONNECTION
71397 field_addr.name = "stop";
71398#endif /* FREECIV_JSON_CONNECTION */
71399 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->stop)) {
71401 }
71402 }
71403 if (BV_ISSET(fields, 3)) {
71404 log_packet_detailed(" got field 'step'");
71405#ifdef FREECIV_JSON_CONNECTION
71406 field_addr.name = "step";
71407#endif /* FREECIV_JSON_CONNECTION */
71408 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->step)) {
71410 }
71411 }
71412 if (BV_ISSET(fields, 4)) {
71413 log_packet_detailed(" got field 'def'");
71414#ifdef FREECIV_JSON_CONNECTION
71415 field_addr.name = "def";
71416#endif /* FREECIV_JSON_CONNECTION */
71417 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->def)) {
71419 }
71420 }
71421 if (BV_ISSET(fields, 5)) {
71422 log_packet_detailed(" got field 'offset'");
71423#ifdef FREECIV_JSON_CONNECTION
71424 field_addr.name = "offset";
71425#endif /* FREECIV_JSON_CONNECTION */
71426 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->offset)) {
71428 }
71429 }
71430 if (BV_ISSET(fields, 6)) {
71431 log_packet_detailed(" got field 'factor'");
71432#ifdef FREECIV_JSON_CONNECTION
71433 field_addr.name = "factor";
71434#endif /* FREECIV_JSON_CONNECTION */
71435 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->factor)) {
71437 }
71438 }
71439 if (BV_ISSET(fields, 7)) {
71440 log_packet_detailed(" got field 'minimum_turns'");
71441#ifdef FREECIV_JSON_CONNECTION
71442 field_addr.name = "minimum_turns";
71443#endif /* FREECIV_JSON_CONNECTION */
71444 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->minimum_turns)) {
71445 RECEIVE_PACKET_FIELD_ERROR(minimum_turns);
71446 }
71447 }
71448 if (BV_ISSET(fields, 8)) {
71449 log_packet_detailed(" got field 'name'");
71450#ifdef FREECIV_JSON_CONNECTION
71451 field_addr.name = "name";
71452#endif /* FREECIV_JSON_CONNECTION */
71453 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
71455 }
71456 }
71457 if (BV_ISSET(fields, 9)) {
71458 log_packet_detailed(" got field 'rule_name'");
71459#ifdef FREECIV_JSON_CONNECTION
71460 field_addr.name = "rule_name";
71461#endif /* FREECIV_JSON_CONNECTION */
71462 if (!DIO_GET(string, &din, &field_addr, real_packet->rule_name, sizeof(real_packet->rule_name))) {
71463 RECEIVE_PACKET_FIELD_ERROR(rule_name);
71464 }
71465 }
71466 if (BV_ISSET(fields, 10)) {
71467 log_packet_detailed(" got field 'reqs_count'");
71468#ifdef FREECIV_JSON_CONNECTION
71469 field_addr.name = "reqs_count";
71470#endif /* FREECIV_JSON_CONNECTION */
71471 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
71472 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
71473 }
71474 }
71475 if (BV_ISSET(fields, 11)) {
71476 log_packet_detailed(" got field 'reqs'");
71477#ifdef FREECIV_JSON_CONNECTION
71478 field_addr.name = "reqs";
71479#endif /* FREECIV_JSON_CONNECTION */
71480 if (real_packet->reqs_count > MAX_NUM_REQS) {
71481 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
71482 }
71483 {
71484 int i;
71485
71486#ifdef FREECIV_JSON_CONNECTION
71487 /* Enter array. */
71488 field_addr.sub_location = plocation_elem_new(0);
71489#endif /* FREECIV_JSON_CONNECTION */
71490
71491 for (i = 0; i < real_packet->reqs_count; i++) {
71492#ifdef FREECIV_JSON_CONNECTION
71493 field_addr.sub_location->number = i;
71494#endif /* FREECIV_JSON_CONNECTION */
71495
71496 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
71498 }
71499 }
71500
71501#ifdef FREECIV_JSON_CONNECTION
71502 /* Exit array. */
71503 FC_FREE(field_addr.sub_location);
71504#endif /* FREECIV_JSON_CONNECTION */
71505 }
71506 }
71507 if (BV_ISSET(fields, 12)) {
71508 log_packet_detailed(" got field 'helptext'");
71509#ifdef FREECIV_JSON_CONNECTION
71510 field_addr.name = "helptext";
71511#endif /* FREECIV_JSON_CONNECTION */
71512 if (!DIO_GET(string, &din, &field_addr, real_packet->helptext, sizeof(real_packet->helptext))) {
71514 }
71515 }
71516
71517 if (NULL == old) {
71518 old = fc_malloc(sizeof(*old));
71519 *old = *real_packet;
71520 genhash_insert(*hash, old, old);
71521 } else {
71522 *old = *real_packet;
71523 }
71524
71525#endif /* FREECIV_DELTA_PROTOCOL */
71527}
71528
71530{
71531 const struct packet_ruleset_multiplier *real_packet = packet;
71532 int e;
71533#ifdef FREECIV_DELTA_PROTOCOL
71535 struct packet_ruleset_multiplier *old;
71536 bool differ;
71537 struct genhash **hash = pc->phs.sent + PACKET_RULESET_MULTIPLIER;
71538#endif /* FREECIV_DELTA_PROTOCOL */
71540#ifdef FREECIV_JSON_CONNECTION
71541 struct plocation field_addr;
71542 {
71546 }
71547#endif /* FREECIV_JSON_CONNECTION */
71548
71549 log_packet_detailed("packet_ruleset_multiplier_100: sending info about ()");
71550
71551#ifdef FREECIV_DELTA_PROTOCOL
71552 if (NULL == *hash) {
71554 NULL, NULL, NULL, free);
71555 }
71556 BV_CLR_ALL(fields);
71557
71558 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
71559 old = fc_malloc(sizeof(*old));
71560 *old = *real_packet;
71561 genhash_insert(*hash, old, old);
71562 memset(old, 0, sizeof(*old));
71563 }
71564 differ = (old->id != real_packet->id);
71565 if (differ) {
71566 BV_SET(fields, 0);
71567 }
71568
71569 differ = (old->start != real_packet->start);
71570 if (differ) {
71571 BV_SET(fields, 1);
71572 }
71573
71574 differ = (old->stop != real_packet->stop);
71575 if (differ) {
71576 BV_SET(fields, 2);
71577 }
71578
71579 differ = (old->step != real_packet->step);
71580 if (differ) {
71581 BV_SET(fields, 3);
71582 }
71583
71584 differ = (old->def != real_packet->def);
71585 if (differ) {
71586 BV_SET(fields, 4);
71587 }
71588
71589 differ = (old->offset != real_packet->offset);
71590 if (differ) {
71591 BV_SET(fields, 5);
71592 }
71593
71594 differ = (old->factor != real_packet->factor);
71595 if (differ) {
71596 BV_SET(fields, 6);
71597 }
71598
71599 differ = (old->minimum_turns != real_packet->minimum_turns);
71600 if (differ) {
71601 BV_SET(fields, 7);
71602 }
71603
71604 differ = (strcmp(old->name, real_packet->name) != 0);
71605 if (differ) {
71606 BV_SET(fields, 8);
71607 }
71608
71609 differ = (strcmp(old->rule_name, real_packet->rule_name) != 0);
71610 if (differ) {
71611 BV_SET(fields, 9);
71612 }
71613
71614 differ = (old->reqs_count != real_packet->reqs_count);
71615 if (differ) {
71616 BV_SET(fields, 10);
71617 }
71618
71619 differ = (old->reqs_count != real_packet->reqs_count);
71620 if (!differ) {
71621 int i;
71622
71623 for (i = 0; i < real_packet->reqs_count; i++) {
71624 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
71625 if (differ) {
71626 break;
71627 }
71628 }
71629 }
71630 if (differ) {
71631 BV_SET(fields, 11);
71632 }
71633
71634 differ = (strcmp(old->helptext, real_packet->helptext) != 0);
71635 if (differ) {
71636 BV_SET(fields, 12);
71637 }
71638
71639
71640#ifdef FREECIV_JSON_CONNECTION
71641 field_addr.name = "fields";
71642#endif /* FREECIV_JSON_CONNECTION */
71643 e = 0;
71644 e |= DIO_BV_PUT(&dout, &field_addr, fields);
71645 if (e) {
71646 log_packet_detailed("fields bitvector error detected");
71647 }
71648
71649 if (BV_ISSET(fields, 0)) {
71650 log_packet_detailed(" field 'id' has changed");
71651#ifdef FREECIV_JSON_CONNECTION
71652 field_addr.name = "id";
71653#endif /* FREECIV_JSON_CONNECTION */
71654 e = 0;
71655 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71656 if (e) {
71657 log_packet_detailed("'id' field error detected");
71658 }
71659 }
71660 if (BV_ISSET(fields, 1)) {
71661 log_packet_detailed(" field 'start' has changed");
71662#ifdef FREECIV_JSON_CONNECTION
71663 field_addr.name = "start";
71664#endif /* FREECIV_JSON_CONNECTION */
71665 e = 0;
71666 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
71667 if (e) {
71668 log_packet_detailed("'start' field error detected");
71669 }
71670 }
71671 if (BV_ISSET(fields, 2)) {
71672 log_packet_detailed(" field 'stop' has changed");
71673#ifdef FREECIV_JSON_CONNECTION
71674 field_addr.name = "stop";
71675#endif /* FREECIV_JSON_CONNECTION */
71676 e = 0;
71677 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
71678 if (e) {
71679 log_packet_detailed("'stop' field error detected");
71680 }
71681 }
71682 if (BV_ISSET(fields, 3)) {
71683 log_packet_detailed(" field 'step' has changed");
71684#ifdef FREECIV_JSON_CONNECTION
71685 field_addr.name = "step";
71686#endif /* FREECIV_JSON_CONNECTION */
71687 e = 0;
71688 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
71689 if (e) {
71690 log_packet_detailed("'step' field error detected");
71691 }
71692 }
71693 if (BV_ISSET(fields, 4)) {
71694 log_packet_detailed(" field 'def' has changed");
71695#ifdef FREECIV_JSON_CONNECTION
71696 field_addr.name = "def";
71697#endif /* FREECIV_JSON_CONNECTION */
71698 e = 0;
71699 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
71700 if (e) {
71701 log_packet_detailed("'def' field error detected");
71702 }
71703 }
71704 if (BV_ISSET(fields, 5)) {
71705 log_packet_detailed(" field 'offset' has changed");
71706#ifdef FREECIV_JSON_CONNECTION
71707 field_addr.name = "offset";
71708#endif /* FREECIV_JSON_CONNECTION */
71709 e = 0;
71710 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
71711 if (e) {
71712 log_packet_detailed("'offset' field error detected");
71713 }
71714 }
71715 if (BV_ISSET(fields, 6)) {
71716 log_packet_detailed(" field 'factor' has changed");
71717#ifdef FREECIV_JSON_CONNECTION
71718 field_addr.name = "factor";
71719#endif /* FREECIV_JSON_CONNECTION */
71720 e = 0;
71721 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
71722 if (e) {
71723 log_packet_detailed("'factor' field error detected");
71724 }
71725 }
71726 if (BV_ISSET(fields, 7)) {
71727 log_packet_detailed(" field 'minimum_turns' has changed");
71728#ifdef FREECIV_JSON_CONNECTION
71729 field_addr.name = "minimum_turns";
71730#endif /* FREECIV_JSON_CONNECTION */
71731 e = 0;
71732 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
71733 if (e) {
71734 log_packet_detailed("'minimum_turns' field error detected");
71735 }
71736 }
71737 if (BV_ISSET(fields, 8)) {
71738 log_packet_detailed(" field 'name' has changed");
71739#ifdef FREECIV_JSON_CONNECTION
71740 field_addr.name = "name";
71741#endif /* FREECIV_JSON_CONNECTION */
71742 e = 0;
71743 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
71744 if (e) {
71745 log_packet_detailed("'name' field error detected");
71746 }
71747 }
71748 if (BV_ISSET(fields, 9)) {
71749 log_packet_detailed(" field 'rule_name' has changed");
71750#ifdef FREECIV_JSON_CONNECTION
71751 field_addr.name = "rule_name";
71752#endif /* FREECIV_JSON_CONNECTION */
71753 e = 0;
71754 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
71755 if (e) {
71756 log_packet_detailed("'rule_name' field error detected");
71757 }
71758 }
71759 if (BV_ISSET(fields, 10)) {
71760 log_packet_detailed(" field 'reqs_count' has changed");
71761#ifdef FREECIV_JSON_CONNECTION
71762 field_addr.name = "reqs_count";
71763#endif /* FREECIV_JSON_CONNECTION */
71764 e = 0;
71765 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
71766 if (e) {
71767 log_packet_detailed("'reqs_count' field error detected");
71768 }
71769 }
71770 if (BV_ISSET(fields, 11)) {
71771 log_packet_detailed(" field 'reqs' has changed");
71772#ifdef FREECIV_JSON_CONNECTION
71773 field_addr.name = "reqs";
71774#endif /* FREECIV_JSON_CONNECTION */
71775 e = 0;
71776 {
71777 int i;
71778
71779#ifdef FREECIV_JSON_CONNECTION
71780 /* Create the array. */
71781 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
71782
71783 /* Enter the array. */
71784 field_addr.sub_location = plocation_elem_new(0);
71785#endif /* FREECIV_JSON_CONNECTION */
71786
71787 for (i = 0; i < real_packet->reqs_count; i++) {
71788#ifdef FREECIV_JSON_CONNECTION
71789 /* Next array element. */
71790 field_addr.sub_location->number = i;
71791#endif /* FREECIV_JSON_CONNECTION */
71792
71793 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
71794 }
71795
71796#ifdef FREECIV_JSON_CONNECTION
71797 /* Exit array. */
71798 FC_FREE(field_addr.sub_location);
71799#endif /* FREECIV_JSON_CONNECTION */
71800 }
71801 if (e) {
71802 log_packet_detailed("'reqs' field error detected");
71803 }
71804 }
71805 if (BV_ISSET(fields, 12)) {
71806 log_packet_detailed(" field 'helptext' has changed");
71807#ifdef FREECIV_JSON_CONNECTION
71808 field_addr.name = "helptext";
71809#endif /* FREECIV_JSON_CONNECTION */
71810 e = 0;
71811 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
71812 if (e) {
71813 log_packet_detailed("'helptext' field error detected");
71814 }
71815 }
71816
71817 *old = *real_packet;
71818#endif /* FREECIV_DELTA_PROTOCOL */
71819#ifndef FREECIV_DELTA_PROTOCOL
71820#ifdef FREECIV_JSON_CONNECTION
71821 field_addr.name = "id";
71822#endif /* FREECIV_JSON_CONNECTION */
71823 e = 0;
71824 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
71825 if (e) {
71826 log_packet_detailed("'id' field error detected");
71827 }
71828#ifdef FREECIV_JSON_CONNECTION
71829 field_addr.name = "start";
71830#endif /* FREECIV_JSON_CONNECTION */
71831 e = 0;
71832 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->start);
71833 if (e) {
71834 log_packet_detailed("'start' field error detected");
71835 }
71836#ifdef FREECIV_JSON_CONNECTION
71837 field_addr.name = "stop";
71838#endif /* FREECIV_JSON_CONNECTION */
71839 e = 0;
71840 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->stop);
71841 if (e) {
71842 log_packet_detailed("'stop' field error detected");
71843 }
71844#ifdef FREECIV_JSON_CONNECTION
71845 field_addr.name = "step";
71846#endif /* FREECIV_JSON_CONNECTION */
71847 e = 0;
71848 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->step);
71849 if (e) {
71850 log_packet_detailed("'step' field error detected");
71851 }
71852#ifdef FREECIV_JSON_CONNECTION
71853 field_addr.name = "def";
71854#endif /* FREECIV_JSON_CONNECTION */
71855 e = 0;
71856 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->def);
71857 if (e) {
71858 log_packet_detailed("'def' field error detected");
71859 }
71860#ifdef FREECIV_JSON_CONNECTION
71861 field_addr.name = "offset";
71862#endif /* FREECIV_JSON_CONNECTION */
71863 e = 0;
71864 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->offset);
71865 if (e) {
71866 log_packet_detailed("'offset' field error detected");
71867 }
71868#ifdef FREECIV_JSON_CONNECTION
71869 field_addr.name = "factor";
71870#endif /* FREECIV_JSON_CONNECTION */
71871 e = 0;
71872 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->factor);
71873 if (e) {
71874 log_packet_detailed("'factor' field error detected");
71875 }
71876#ifdef FREECIV_JSON_CONNECTION
71877 field_addr.name = "minimum_turns";
71878#endif /* FREECIV_JSON_CONNECTION */
71879 e = 0;
71880 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->minimum_turns);
71881 if (e) {
71882 log_packet_detailed("'minimum_turns' field error detected");
71883 }
71884#ifdef FREECIV_JSON_CONNECTION
71885 field_addr.name = "name";
71886#endif /* FREECIV_JSON_CONNECTION */
71887 e = 0;
71888 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
71889 if (e) {
71890 log_packet_detailed("'name' field error detected");
71891 }
71892#ifdef FREECIV_JSON_CONNECTION
71893 field_addr.name = "rule_name";
71894#endif /* FREECIV_JSON_CONNECTION */
71895 e = 0;
71896 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rule_name);
71897 if (e) {
71898 log_packet_detailed("'rule_name' field error detected");
71899 }
71900#ifdef FREECIV_JSON_CONNECTION
71901 field_addr.name = "reqs_count";
71902#endif /* FREECIV_JSON_CONNECTION */
71903 e = 0;
71904 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
71905 if (e) {
71906 log_packet_detailed("'reqs_count' field error detected");
71907 }
71908#ifdef FREECIV_JSON_CONNECTION
71909 field_addr.name = "reqs";
71910#endif /* FREECIV_JSON_CONNECTION */
71911 e = 0;
71912 {
71913 int i;
71914
71915#ifdef FREECIV_JSON_CONNECTION
71916 /* Create the array. */
71917 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
71918
71919 /* Enter the array. */
71920 field_addr.sub_location = plocation_elem_new(0);
71921#endif /* FREECIV_JSON_CONNECTION */
71922
71923 for (i = 0; i < real_packet->reqs_count; i++) {
71924#ifdef FREECIV_JSON_CONNECTION
71925 /* Next array element. */
71926 field_addr.sub_location->number = i;
71927#endif /* FREECIV_JSON_CONNECTION */
71928
71929 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
71930 }
71931
71932#ifdef FREECIV_JSON_CONNECTION
71933 /* Exit array. */
71934 FC_FREE(field_addr.sub_location);
71935#endif /* FREECIV_JSON_CONNECTION */
71936 }
71937 if (e) {
71938 log_packet_detailed("'reqs' field error detected");
71939 }
71940#ifdef FREECIV_JSON_CONNECTION
71941 field_addr.name = "helptext";
71942#endif /* FREECIV_JSON_CONNECTION */
71943 e = 0;
71944 e |= DIO_PUT(string, &dout, &field_addr, real_packet->helptext);
71945 if (e) {
71946 log_packet_detailed("'helptext' field error detected");
71947 }
71948
71949#endif
71951}
71952
71954{
71955 if (!pc->used) {
71956 log_error("WARNING: trying to send data to the closed connection %s",
71958 return -1;
71959 }
71960 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet != NULL, -1,
71961 "Handler for PACKET_RULESET_MULTIPLIER not installed");
71962 return pc->phs.handlers->send[PACKET_RULESET_MULTIPLIER].packet(pc, packet);
71963}
71964
71966{
71967 conn_list_iterate(dest, pconn) {
71970}
71971
71972int 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)
71973{
71974 struct packet_ruleset_multiplier packet, *real_packet = &packet;
71975
71976 real_packet->id = id;
71977 real_packet->start = start;
71978 real_packet->stop = stop;
71979 real_packet->step = step;
71980 real_packet->def = def;
71981 real_packet->offset = offset;
71982 real_packet->factor = factor;
71983 real_packet->minimum_turns = minimum_turns;
71984 sz_strlcpy(real_packet->name, name);
71985 sz_strlcpy(real_packet->rule_name, rule_name);
71986 real_packet->reqs_count = reqs_count;
71987 {
71988 int i;
71989
71990 for (i = 0; i < real_packet->reqs_count; i++) {
71991 real_packet->reqs[i] = reqs[i];
71992 }
71993 }
71994 sz_strlcpy(real_packet->helptext, helptext);
71995
71997}
71998
71999void 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)
72000{
72001 struct packet_ruleset_multiplier packet, *real_packet = &packet;
72002
72003 real_packet->id = id;
72004 real_packet->start = start;
72005 real_packet->stop = stop;
72006 real_packet->step = step;
72007 real_packet->def = def;
72008 real_packet->offset = offset;
72009 real_packet->factor = factor;
72010 real_packet->minimum_turns = minimum_turns;
72011 sz_strlcpy(real_packet->name, name);
72012 sz_strlcpy(real_packet->rule_name, rule_name);
72013 real_packet->reqs_count = reqs_count;
72014 {
72015 int i;
72016
72017 for (i = 0; i < real_packet->reqs_count; i++) {
72018 real_packet->reqs[i] = reqs[i];
72019 }
72020 }
72021 sz_strlcpy(real_packet->helptext, helptext);
72022
72024}
72025
72026#ifdef FREECIV_DELTA_PROTOCOL
72027#define hash_packet_ruleset_clause_100 hash_const
72028
72029#define cmp_packet_ruleset_clause_100 cmp_const
72030
72032#endif /* FREECIV_DELTA_PROTOCOL */
72033
72035{
72036#ifdef FREECIV_DELTA_PROTOCOL
72038 struct packet_ruleset_clause *old;
72039 struct genhash **hash = pc->phs.received + PACKET_RULESET_CLAUSE;
72040#endif /* FREECIV_DELTA_PROTOCOL */
72042#ifdef FREECIV_JSON_CONNECTION
72043 struct plocation field_addr;
72044 {
72048 }
72049#endif /* FREECIV_JSON_CONNECTION */
72050
72051#ifdef FREECIV_DELTA_PROTOCOL
72052#ifdef FREECIV_JSON_CONNECTION
72053 field_addr.name = "fields";
72054#endif /* FREECIV_JSON_CONNECTION */
72055 DIO_BV_GET(&din, &field_addr, fields);
72056
72057#else /* FREECIV_DELTA_PROTOCOL */
72058#ifdef FREECIV_JSON_CONNECTION
72059 field_addr.name = "type";
72060#endif /* FREECIV_JSON_CONNECTION */
72061 {
72062 int readin;
72063
72064 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72066 }
72067 real_packet->type = readin;
72068 }
72069#ifdef FREECIV_JSON_CONNECTION
72070 field_addr.name = "enabled";
72071#endif /* FREECIV_JSON_CONNECTION */
72072 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
72074 }
72075#ifdef FREECIV_JSON_CONNECTION
72076 field_addr.name = "giver_reqs_count";
72077#endif /* FREECIV_JSON_CONNECTION */
72078 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->giver_reqs_count)) {
72079 RECEIVE_PACKET_FIELD_ERROR(giver_reqs_count);
72080 }
72081#ifdef FREECIV_JSON_CONNECTION
72082 field_addr.name = "giver_reqs";
72083#endif /* FREECIV_JSON_CONNECTION */
72084 if (real_packet->giver_reqs_count > MAX_NUM_REQS) {
72085 RECEIVE_PACKET_FIELD_ERROR(giver_reqs, ": truncation array");
72086 }
72087 {
72088 int i;
72089
72090#ifdef FREECIV_JSON_CONNECTION
72091 /* Enter array. */
72092 field_addr.sub_location = plocation_elem_new(0);
72093#endif /* FREECIV_JSON_CONNECTION */
72094
72095 for (i = 0; i < real_packet->giver_reqs_count; i++) {
72096#ifdef FREECIV_JSON_CONNECTION
72097 field_addr.sub_location->number = i;
72098#endif /* FREECIV_JSON_CONNECTION */
72099
72100 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs[i])) {
72101 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
72102 }
72103 }
72104
72105#ifdef FREECIV_JSON_CONNECTION
72106 /* Exit array. */
72107 FC_FREE(field_addr.sub_location);
72108#endif /* FREECIV_JSON_CONNECTION */
72109 }
72110#ifdef FREECIV_JSON_CONNECTION
72111 field_addr.name = "receiver_reqs_count";
72112#endif /* FREECIV_JSON_CONNECTION */
72113 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->receiver_reqs_count)) {
72114 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs_count);
72115 }
72116#ifdef FREECIV_JSON_CONNECTION
72117 field_addr.name = "receiver_reqs";
72118#endif /* FREECIV_JSON_CONNECTION */
72119 if (real_packet->receiver_reqs_count > MAX_NUM_REQS) {
72120 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs, ": truncation array");
72121 }
72122 {
72123 int i;
72124
72125#ifdef FREECIV_JSON_CONNECTION
72126 /* Enter array. */
72127 field_addr.sub_location = plocation_elem_new(0);
72128#endif /* FREECIV_JSON_CONNECTION */
72129
72130 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
72131#ifdef FREECIV_JSON_CONNECTION
72132 field_addr.sub_location->number = i;
72133#endif /* FREECIV_JSON_CONNECTION */
72134
72135 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs[i])) {
72136 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
72137 }
72138 }
72139
72140#ifdef FREECIV_JSON_CONNECTION
72141 /* Exit array. */
72142 FC_FREE(field_addr.sub_location);
72143#endif /* FREECIV_JSON_CONNECTION */
72144 }
72145#endif
72146 log_packet_detailed("packet_ruleset_clause_100: got info about ()");
72147
72148#ifdef FREECIV_DELTA_PROTOCOL
72149 if (NULL == *hash) {
72151 NULL, NULL, NULL, free);
72152 }
72153
72154 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
72155 *real_packet = *old;
72156 } else {
72157 log_packet_detailed(" no old info");
72158 memset(real_packet, 0, sizeof(*real_packet));
72159 }
72160
72161 if (BV_ISSET(fields, 0)) {
72162 log_packet_detailed(" got field 'type'");
72163#ifdef FREECIV_JSON_CONNECTION
72164 field_addr.name = "type";
72165#endif /* FREECIV_JSON_CONNECTION */
72166 {
72167 int readin;
72168
72169 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
72171 }
72172 real_packet->type = readin;
72173 }
72174 }
72175 real_packet->enabled = BV_ISSET(fields, 1);
72176 if (BV_ISSET(fields, 2)) {
72177 log_packet_detailed(" got field 'giver_reqs_count'");
72178#ifdef FREECIV_JSON_CONNECTION
72179 field_addr.name = "giver_reqs_count";
72180#endif /* FREECIV_JSON_CONNECTION */
72181 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->giver_reqs_count)) {
72182 RECEIVE_PACKET_FIELD_ERROR(giver_reqs_count);
72183 }
72184 }
72185 if (BV_ISSET(fields, 3)) {
72186 log_packet_detailed(" got field 'giver_reqs'");
72187#ifdef FREECIV_JSON_CONNECTION
72188 field_addr.name = "giver_reqs";
72189#endif /* FREECIV_JSON_CONNECTION */
72190 if (real_packet->giver_reqs_count > MAX_NUM_REQS) {
72191 RECEIVE_PACKET_FIELD_ERROR(giver_reqs, ": truncation array");
72192 }
72193 {
72194 int i;
72195
72196#ifdef FREECIV_JSON_CONNECTION
72197 /* Enter array. */
72198 field_addr.sub_location = plocation_elem_new(0);
72199#endif /* FREECIV_JSON_CONNECTION */
72200
72201 for (i = 0; i < real_packet->giver_reqs_count; i++) {
72202#ifdef FREECIV_JSON_CONNECTION
72203 field_addr.sub_location->number = i;
72204#endif /* FREECIV_JSON_CONNECTION */
72205
72206 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->giver_reqs[i])) {
72207 RECEIVE_PACKET_FIELD_ERROR(giver_reqs);
72208 }
72209 }
72210
72211#ifdef FREECIV_JSON_CONNECTION
72212 /* Exit array. */
72213 FC_FREE(field_addr.sub_location);
72214#endif /* FREECIV_JSON_CONNECTION */
72215 }
72216 }
72217 if (BV_ISSET(fields, 4)) {
72218 log_packet_detailed(" got field 'receiver_reqs_count'");
72219#ifdef FREECIV_JSON_CONNECTION
72220 field_addr.name = "receiver_reqs_count";
72221#endif /* FREECIV_JSON_CONNECTION */
72222 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->receiver_reqs_count)) {
72223 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs_count);
72224 }
72225 }
72226 if (BV_ISSET(fields, 5)) {
72227 log_packet_detailed(" got field 'receiver_reqs'");
72228#ifdef FREECIV_JSON_CONNECTION
72229 field_addr.name = "receiver_reqs";
72230#endif /* FREECIV_JSON_CONNECTION */
72231 if (real_packet->receiver_reqs_count > MAX_NUM_REQS) {
72232 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs, ": truncation array");
72233 }
72234 {
72235 int i;
72236
72237#ifdef FREECIV_JSON_CONNECTION
72238 /* Enter array. */
72239 field_addr.sub_location = plocation_elem_new(0);
72240#endif /* FREECIV_JSON_CONNECTION */
72241
72242 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
72243#ifdef FREECIV_JSON_CONNECTION
72244 field_addr.sub_location->number = i;
72245#endif /* FREECIV_JSON_CONNECTION */
72246
72247 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->receiver_reqs[i])) {
72248 RECEIVE_PACKET_FIELD_ERROR(receiver_reqs);
72249 }
72250 }
72251
72252#ifdef FREECIV_JSON_CONNECTION
72253 /* Exit array. */
72254 FC_FREE(field_addr.sub_location);
72255#endif /* FREECIV_JSON_CONNECTION */
72256 }
72257 }
72258
72259 if (NULL == old) {
72260 old = fc_malloc(sizeof(*old));
72261 *old = *real_packet;
72262 genhash_insert(*hash, old, old);
72263 } else {
72264 *old = *real_packet;
72265 }
72266
72267#endif /* FREECIV_DELTA_PROTOCOL */
72269}
72270
72272{
72273 const struct packet_ruleset_clause *real_packet = packet;
72274 int e;
72275#ifdef FREECIV_DELTA_PROTOCOL
72277 struct packet_ruleset_clause *old;
72278 bool differ;
72279 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CLAUSE;
72280#endif /* FREECIV_DELTA_PROTOCOL */
72282#ifdef FREECIV_JSON_CONNECTION
72283 struct plocation field_addr;
72284 {
72288 }
72289#endif /* FREECIV_JSON_CONNECTION */
72290
72291 log_packet_detailed("packet_ruleset_clause_100: sending info about ()");
72292
72293#ifdef FREECIV_DELTA_PROTOCOL
72294 if (NULL == *hash) {
72296 NULL, NULL, NULL, free);
72297 }
72298 BV_CLR_ALL(fields);
72299
72300 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
72301 old = fc_malloc(sizeof(*old));
72302 *old = *real_packet;
72303 genhash_insert(*hash, old, old);
72304 memset(old, 0, sizeof(*old));
72305 }
72306 differ = (old->type != real_packet->type);
72307 if (differ) {
72308 BV_SET(fields, 0);
72309 }
72310
72311 if (packet->enabled) {
72312 BV_SET(fields, 1);
72313 }
72314
72315 differ = (old->giver_reqs_count != real_packet->giver_reqs_count);
72316 if (differ) {
72317 BV_SET(fields, 2);
72318 }
72319
72320 differ = (old->giver_reqs_count != real_packet->giver_reqs_count);
72321 if (!differ) {
72322 int i;
72323
72324 for (i = 0; i < real_packet->giver_reqs_count; i++) {
72325 differ = !are_requirements_equal(&old->giver_reqs[i], &real_packet->giver_reqs[i]);
72326 if (differ) {
72327 break;
72328 }
72329 }
72330 }
72331 if (differ) {
72332 BV_SET(fields, 3);
72333 }
72334
72335 differ = (old->receiver_reqs_count != real_packet->receiver_reqs_count);
72336 if (differ) {
72337 BV_SET(fields, 4);
72338 }
72339
72340 differ = (old->receiver_reqs_count != real_packet->receiver_reqs_count);
72341 if (!differ) {
72342 int i;
72343
72344 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
72345 differ = !are_requirements_equal(&old->receiver_reqs[i], &real_packet->receiver_reqs[i]);
72346 if (differ) {
72347 break;
72348 }
72349 }
72350 }
72351 if (differ) {
72352 BV_SET(fields, 5);
72353 }
72354
72355
72356#ifdef FREECIV_JSON_CONNECTION
72357 field_addr.name = "fields";
72358#endif /* FREECIV_JSON_CONNECTION */
72359 e = 0;
72360 e |= DIO_BV_PUT(&dout, &field_addr, fields);
72361 if (e) {
72362 log_packet_detailed("fields bitvector error detected");
72363 }
72364
72365 if (BV_ISSET(fields, 0)) {
72366 log_packet_detailed(" field 'type' has changed");
72367#ifdef FREECIV_JSON_CONNECTION
72368 field_addr.name = "type";
72369#endif /* FREECIV_JSON_CONNECTION */
72370 e = 0;
72371 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
72372 if (e) {
72373 log_packet_detailed("'type' field error detected");
72374 }
72375 }
72376 /* field 1 is folded into the header */
72377 if (BV_ISSET(fields, 2)) {
72378 log_packet_detailed(" field 'giver_reqs_count' has changed");
72379#ifdef FREECIV_JSON_CONNECTION
72380 field_addr.name = "giver_reqs_count";
72381#endif /* FREECIV_JSON_CONNECTION */
72382 e = 0;
72383 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->giver_reqs_count);
72384 if (e) {
72385 log_packet_detailed("'giver_reqs_count' field error detected");
72386 }
72387 }
72388 if (BV_ISSET(fields, 3)) {
72389 log_packet_detailed(" field 'giver_reqs' has changed");
72390#ifdef FREECIV_JSON_CONNECTION
72391 field_addr.name = "giver_reqs";
72392#endif /* FREECIV_JSON_CONNECTION */
72393 e = 0;
72394 {
72395 int i;
72396
72397#ifdef FREECIV_JSON_CONNECTION
72398 /* Create the array. */
72399 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->giver_reqs_count);
72400
72401 /* Enter the array. */
72402 field_addr.sub_location = plocation_elem_new(0);
72403#endif /* FREECIV_JSON_CONNECTION */
72404
72405 for (i = 0; i < real_packet->giver_reqs_count; i++) {
72406#ifdef FREECIV_JSON_CONNECTION
72407 /* Next array element. */
72408 field_addr.sub_location->number = i;
72409#endif /* FREECIV_JSON_CONNECTION */
72410
72411 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs[i]);
72412 }
72413
72414#ifdef FREECIV_JSON_CONNECTION
72415 /* Exit array. */
72416 FC_FREE(field_addr.sub_location);
72417#endif /* FREECIV_JSON_CONNECTION */
72418 }
72419 if (e) {
72420 log_packet_detailed("'giver_reqs' field error detected");
72421 }
72422 }
72423 if (BV_ISSET(fields, 4)) {
72424 log_packet_detailed(" field 'receiver_reqs_count' has changed");
72425#ifdef FREECIV_JSON_CONNECTION
72426 field_addr.name = "receiver_reqs_count";
72427#endif /* FREECIV_JSON_CONNECTION */
72428 e = 0;
72429 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->receiver_reqs_count);
72430 if (e) {
72431 log_packet_detailed("'receiver_reqs_count' field error detected");
72432 }
72433 }
72434 if (BV_ISSET(fields, 5)) {
72435 log_packet_detailed(" field 'receiver_reqs' has changed");
72436#ifdef FREECIV_JSON_CONNECTION
72437 field_addr.name = "receiver_reqs";
72438#endif /* FREECIV_JSON_CONNECTION */
72439 e = 0;
72440 {
72441 int i;
72442
72443#ifdef FREECIV_JSON_CONNECTION
72444 /* Create the array. */
72445 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->receiver_reqs_count);
72446
72447 /* Enter the array. */
72448 field_addr.sub_location = plocation_elem_new(0);
72449#endif /* FREECIV_JSON_CONNECTION */
72450
72451 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
72452#ifdef FREECIV_JSON_CONNECTION
72453 /* Next array element. */
72454 field_addr.sub_location->number = i;
72455#endif /* FREECIV_JSON_CONNECTION */
72456
72457 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs[i]);
72458 }
72459
72460#ifdef FREECIV_JSON_CONNECTION
72461 /* Exit array. */
72462 FC_FREE(field_addr.sub_location);
72463#endif /* FREECIV_JSON_CONNECTION */
72464 }
72465 if (e) {
72466 log_packet_detailed("'receiver_reqs' field error detected");
72467 }
72468 }
72469
72470 *old = *real_packet;
72471#endif /* FREECIV_DELTA_PROTOCOL */
72472#ifndef FREECIV_DELTA_PROTOCOL
72473#ifdef FREECIV_JSON_CONNECTION
72474 field_addr.name = "type";
72475#endif /* FREECIV_JSON_CONNECTION */
72476 e = 0;
72477 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->type);
72478 if (e) {
72479 log_packet_detailed("'type' field error detected");
72480 }
72481#ifdef FREECIV_JSON_CONNECTION
72482 field_addr.name = "enabled";
72483#endif /* FREECIV_JSON_CONNECTION */
72484 e = 0;
72485 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
72486 if (e) {
72487 log_packet_detailed("'enabled' field error detected");
72488 }
72489#ifdef FREECIV_JSON_CONNECTION
72490 field_addr.name = "giver_reqs_count";
72491#endif /* FREECIV_JSON_CONNECTION */
72492 e = 0;
72493 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->giver_reqs_count);
72494 if (e) {
72495 log_packet_detailed("'giver_reqs_count' field error detected");
72496 }
72497#ifdef FREECIV_JSON_CONNECTION
72498 field_addr.name = "giver_reqs";
72499#endif /* FREECIV_JSON_CONNECTION */
72500 e = 0;
72501 {
72502 int i;
72503
72504#ifdef FREECIV_JSON_CONNECTION
72505 /* Create the array. */
72506 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->giver_reqs_count);
72507
72508 /* Enter the array. */
72509 field_addr.sub_location = plocation_elem_new(0);
72510#endif /* FREECIV_JSON_CONNECTION */
72511
72512 for (i = 0; i < real_packet->giver_reqs_count; i++) {
72513#ifdef FREECIV_JSON_CONNECTION
72514 /* Next array element. */
72515 field_addr.sub_location->number = i;
72516#endif /* FREECIV_JSON_CONNECTION */
72517
72518 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->giver_reqs[i]);
72519 }
72520
72521#ifdef FREECIV_JSON_CONNECTION
72522 /* Exit array. */
72523 FC_FREE(field_addr.sub_location);
72524#endif /* FREECIV_JSON_CONNECTION */
72525 }
72526 if (e) {
72527 log_packet_detailed("'giver_reqs' field error detected");
72528 }
72529#ifdef FREECIV_JSON_CONNECTION
72530 field_addr.name = "receiver_reqs_count";
72531#endif /* FREECIV_JSON_CONNECTION */
72532 e = 0;
72533 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->receiver_reqs_count);
72534 if (e) {
72535 log_packet_detailed("'receiver_reqs_count' field error detected");
72536 }
72537#ifdef FREECIV_JSON_CONNECTION
72538 field_addr.name = "receiver_reqs";
72539#endif /* FREECIV_JSON_CONNECTION */
72540 e = 0;
72541 {
72542 int i;
72543
72544#ifdef FREECIV_JSON_CONNECTION
72545 /* Create the array. */
72546 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->receiver_reqs_count);
72547
72548 /* Enter the array. */
72549 field_addr.sub_location = plocation_elem_new(0);
72550#endif /* FREECIV_JSON_CONNECTION */
72551
72552 for (i = 0; i < real_packet->receiver_reqs_count; i++) {
72553#ifdef FREECIV_JSON_CONNECTION
72554 /* Next array element. */
72555 field_addr.sub_location->number = i;
72556#endif /* FREECIV_JSON_CONNECTION */
72557
72558 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->receiver_reqs[i]);
72559 }
72560
72561#ifdef FREECIV_JSON_CONNECTION
72562 /* Exit array. */
72563 FC_FREE(field_addr.sub_location);
72564#endif /* FREECIV_JSON_CONNECTION */
72565 }
72566 if (e) {
72567 log_packet_detailed("'receiver_reqs' field error detected");
72568 }
72569
72570#endif
72572}
72573
72575{
72576 if (!pc->used) {
72577 log_error("WARNING: trying to send data to the closed connection %s",
72579 return -1;
72580 }
72581 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet != NULL, -1,
72582 "Handler for PACKET_RULESET_CLAUSE not installed");
72583 return pc->phs.handlers->send[PACKET_RULESET_CLAUSE].packet(pc, packet);
72584}
72585
72586void lsend_packet_ruleset_clause(struct conn_list *dest, const struct packet_ruleset_clause *packet)
72587{
72588 conn_list_iterate(dest, pconn) {
72591}
72592
72593#ifdef FREECIV_DELTA_PROTOCOL
72594#define hash_packet_ruleset_control_100 hash_const
72595
72596#define cmp_packet_ruleset_control_100 cmp_const
72597
72599#endif /* FREECIV_DELTA_PROTOCOL */
72600
72602{
72603#ifdef FREECIV_DELTA_PROTOCOL
72605 struct packet_ruleset_control *old;
72606 struct genhash **hash = pc->phs.received + PACKET_RULESET_CONTROL;
72607#endif /* FREECIV_DELTA_PROTOCOL */
72609#ifdef FREECIV_JSON_CONNECTION
72610 struct plocation field_addr;
72611 {
72615 }
72616#endif /* FREECIV_JSON_CONNECTION */
72617
72618#ifdef FREECIV_DELTA_PROTOCOL
72619#ifdef FREECIV_JSON_CONNECTION
72620 field_addr.name = "fields";
72621#endif /* FREECIV_JSON_CONNECTION */
72622 DIO_BV_GET(&din, &field_addr, fields);
72623
72624#else /* FREECIV_DELTA_PROTOCOL */
72625#ifdef FREECIV_JSON_CONNECTION
72626 field_addr.name = "num_unit_classes";
72627#endif /* FREECIV_JSON_CONNECTION */
72628 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
72629 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
72630 }
72631#ifdef FREECIV_JSON_CONNECTION
72632 field_addr.name = "num_unit_types";
72633#endif /* FREECIV_JSON_CONNECTION */
72634 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
72635 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
72636 }
72637#ifdef FREECIV_JSON_CONNECTION
72638 field_addr.name = "num_impr_types";
72639#endif /* FREECIV_JSON_CONNECTION */
72640 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
72641 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
72642 }
72643#ifdef FREECIV_JSON_CONNECTION
72644 field_addr.name = "num_tech_classes";
72645#endif /* FREECIV_JSON_CONNECTION */
72646 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
72647 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
72648 }
72649#ifdef FREECIV_JSON_CONNECTION
72650 field_addr.name = "num_tech_types";
72651#endif /* FREECIV_JSON_CONNECTION */
72652 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
72653 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
72654 }
72655#ifdef FREECIV_JSON_CONNECTION
72656 field_addr.name = "num_extra_types";
72657#endif /* FREECIV_JSON_CONNECTION */
72658 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
72659 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
72660 }
72661#ifdef FREECIV_JSON_CONNECTION
72662 field_addr.name = "num_base_types";
72663#endif /* FREECIV_JSON_CONNECTION */
72664 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
72665 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
72666 }
72667#ifdef FREECIV_JSON_CONNECTION
72668 field_addr.name = "num_road_types";
72669#endif /* FREECIV_JSON_CONNECTION */
72670 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
72671 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
72672 }
72673#ifdef FREECIV_JSON_CONNECTION
72674 field_addr.name = "num_resource_types";
72675#endif /* FREECIV_JSON_CONNECTION */
72676 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
72677 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
72678 }
72679#ifdef FREECIV_JSON_CONNECTION
72680 field_addr.name = "num_goods_types";
72681#endif /* FREECIV_JSON_CONNECTION */
72682 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
72683 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
72684 }
72685#ifdef FREECIV_JSON_CONNECTION
72686 field_addr.name = "num_disaster_types";
72687#endif /* FREECIV_JSON_CONNECTION */
72688 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
72689 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
72690 }
72691#ifdef FREECIV_JSON_CONNECTION
72692 field_addr.name = "num_achievement_types";
72693#endif /* FREECIV_JSON_CONNECTION */
72694 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
72695 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
72696 }
72697#ifdef FREECIV_JSON_CONNECTION
72698 field_addr.name = "num_multipliers";
72699#endif /* FREECIV_JSON_CONNECTION */
72700 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
72701 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
72702 }
72703#ifdef FREECIV_JSON_CONNECTION
72704 field_addr.name = "num_styles";
72705#endif /* FREECIV_JSON_CONNECTION */
72706 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
72707 RECEIVE_PACKET_FIELD_ERROR(num_styles);
72708 }
72709#ifdef FREECIV_JSON_CONNECTION
72710 field_addr.name = "num_music_styles";
72711#endif /* FREECIV_JSON_CONNECTION */
72712 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
72713 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
72714 }
72715#ifdef FREECIV_JSON_CONNECTION
72716 field_addr.name = "government_count";
72717#endif /* FREECIV_JSON_CONNECTION */
72718 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
72720 }
72721#ifdef FREECIV_JSON_CONNECTION
72722 field_addr.name = "nation_count";
72723#endif /* FREECIV_JSON_CONNECTION */
72724 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
72726 }
72727#ifdef FREECIV_JSON_CONNECTION
72728 field_addr.name = "num_city_styles";
72729#endif /* FREECIV_JSON_CONNECTION */
72730 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
72731 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
72732 }
72733#ifdef FREECIV_JSON_CONNECTION
72734 field_addr.name = "terrain_count";
72735#endif /* FREECIV_JSON_CONNECTION */
72736 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
72738 }
72739#ifdef FREECIV_JSON_CONNECTION
72740 field_addr.name = "num_specialist_types";
72741#endif /* FREECIV_JSON_CONNECTION */
72742 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
72743 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
72744 }
72745#ifdef FREECIV_JSON_CONNECTION
72746 field_addr.name = "num_nation_groups";
72747#endif /* FREECIV_JSON_CONNECTION */
72748 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
72750 }
72751#ifdef FREECIV_JSON_CONNECTION
72752 field_addr.name = "num_nation_sets";
72753#endif /* FREECIV_JSON_CONNECTION */
72754 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
72756 }
72757#ifdef FREECIV_JSON_CONNECTION
72758 field_addr.name = "preferred_tileset";
72759#endif /* FREECIV_JSON_CONNECTION */
72760 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
72761 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
72762 }
72763#ifdef FREECIV_JSON_CONNECTION
72764 field_addr.name = "preferred_soundset";
72765#endif /* FREECIV_JSON_CONNECTION */
72766 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
72767 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
72768 }
72769#ifdef FREECIV_JSON_CONNECTION
72770 field_addr.name = "preferred_musicset";
72771#endif /* FREECIV_JSON_CONNECTION */
72772 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
72773 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
72774 }
72775#ifdef FREECIV_JSON_CONNECTION
72776 field_addr.name = "popup_tech_help";
72777#endif /* FREECIV_JSON_CONNECTION */
72778 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->popup_tech_help)) {
72779 RECEIVE_PACKET_FIELD_ERROR(popup_tech_help);
72780 }
72781#ifdef FREECIV_JSON_CONNECTION
72782 field_addr.name = "name";
72783#endif /* FREECIV_JSON_CONNECTION */
72784 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
72786 }
72787#ifdef FREECIV_JSON_CONNECTION
72788 field_addr.name = "version";
72789#endif /* FREECIV_JSON_CONNECTION */
72790 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
72792 }
72793#ifdef FREECIV_JSON_CONNECTION
72794 field_addr.name = "alt_dir";
72795#endif /* FREECIV_JSON_CONNECTION */
72796 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
72798 }
72799#ifdef FREECIV_JSON_CONNECTION
72800 field_addr.name = "desc_length";
72801#endif /* FREECIV_JSON_CONNECTION */
72802 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
72803 RECEIVE_PACKET_FIELD_ERROR(desc_length);
72804 }
72805#ifdef FREECIV_JSON_CONNECTION
72806 field_addr.name = "num_counters";
72807#endif /* FREECIV_JSON_CONNECTION */
72808 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
72809 RECEIVE_PACKET_FIELD_ERROR(num_counters);
72810 }
72811#endif
72812 log_packet_detailed("packet_ruleset_control_100: got info about ()");
72813
72814#ifdef FREECIV_DELTA_PROTOCOL
72815 if (NULL == *hash) {
72817 NULL, NULL, NULL, free);
72818 }
72819
72820 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
72821 *real_packet = *old;
72822 } else {
72823 log_packet_detailed(" no old info");
72824 memset(real_packet, 0, sizeof(*real_packet));
72825 }
72826
72827 if (BV_ISSET(fields, 0)) {
72828 log_packet_detailed(" got field 'num_unit_classes'");
72829#ifdef FREECIV_JSON_CONNECTION
72830 field_addr.name = "num_unit_classes";
72831#endif /* FREECIV_JSON_CONNECTION */
72832 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_classes)) {
72833 RECEIVE_PACKET_FIELD_ERROR(num_unit_classes);
72834 }
72835 }
72836 if (BV_ISSET(fields, 1)) {
72837 log_packet_detailed(" got field 'num_unit_types'");
72838#ifdef FREECIV_JSON_CONNECTION
72839 field_addr.name = "num_unit_types";
72840#endif /* FREECIV_JSON_CONNECTION */
72841 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_unit_types)) {
72842 RECEIVE_PACKET_FIELD_ERROR(num_unit_types);
72843 }
72844 }
72845 if (BV_ISSET(fields, 2)) {
72846 log_packet_detailed(" got field 'num_impr_types'");
72847#ifdef FREECIV_JSON_CONNECTION
72848 field_addr.name = "num_impr_types";
72849#endif /* FREECIV_JSON_CONNECTION */
72850 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_impr_types)) {
72851 RECEIVE_PACKET_FIELD_ERROR(num_impr_types);
72852 }
72853 }
72854 if (BV_ISSET(fields, 3)) {
72855 log_packet_detailed(" got field 'num_tech_classes'");
72856#ifdef FREECIV_JSON_CONNECTION
72857 field_addr.name = "num_tech_classes";
72858#endif /* FREECIV_JSON_CONNECTION */
72859 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_classes)) {
72860 RECEIVE_PACKET_FIELD_ERROR(num_tech_classes);
72861 }
72862 }
72863 if (BV_ISSET(fields, 4)) {
72864 log_packet_detailed(" got field 'num_tech_types'");
72865#ifdef FREECIV_JSON_CONNECTION
72866 field_addr.name = "num_tech_types";
72867#endif /* FREECIV_JSON_CONNECTION */
72868 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_tech_types)) {
72869 RECEIVE_PACKET_FIELD_ERROR(num_tech_types);
72870 }
72871 }
72872 if (BV_ISSET(fields, 5)) {
72873 log_packet_detailed(" got field 'num_extra_types'");
72874#ifdef FREECIV_JSON_CONNECTION
72875 field_addr.name = "num_extra_types";
72876#endif /* FREECIV_JSON_CONNECTION */
72877 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_extra_types)) {
72878 RECEIVE_PACKET_FIELD_ERROR(num_extra_types);
72879 }
72880 }
72881 if (BV_ISSET(fields, 6)) {
72882 log_packet_detailed(" got field 'num_base_types'");
72883#ifdef FREECIV_JSON_CONNECTION
72884 field_addr.name = "num_base_types";
72885#endif /* FREECIV_JSON_CONNECTION */
72886 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_base_types)) {
72887 RECEIVE_PACKET_FIELD_ERROR(num_base_types);
72888 }
72889 }
72890 if (BV_ISSET(fields, 7)) {
72891 log_packet_detailed(" got field 'num_road_types'");
72892#ifdef FREECIV_JSON_CONNECTION
72893 field_addr.name = "num_road_types";
72894#endif /* FREECIV_JSON_CONNECTION */
72895 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_road_types)) {
72896 RECEIVE_PACKET_FIELD_ERROR(num_road_types);
72897 }
72898 }
72899 if (BV_ISSET(fields, 8)) {
72900 log_packet_detailed(" got field 'num_resource_types'");
72901#ifdef FREECIV_JSON_CONNECTION
72902 field_addr.name = "num_resource_types";
72903#endif /* FREECIV_JSON_CONNECTION */
72904 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_resource_types)) {
72905 RECEIVE_PACKET_FIELD_ERROR(num_resource_types);
72906 }
72907 }
72908 if (BV_ISSET(fields, 9)) {
72909 log_packet_detailed(" got field 'num_goods_types'");
72910#ifdef FREECIV_JSON_CONNECTION
72911 field_addr.name = "num_goods_types";
72912#endif /* FREECIV_JSON_CONNECTION */
72913 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_goods_types)) {
72914 RECEIVE_PACKET_FIELD_ERROR(num_goods_types);
72915 }
72916 }
72917 if (BV_ISSET(fields, 10)) {
72918 log_packet_detailed(" got field 'num_disaster_types'");
72919#ifdef FREECIV_JSON_CONNECTION
72920 field_addr.name = "num_disaster_types";
72921#endif /* FREECIV_JSON_CONNECTION */
72922 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_disaster_types)) {
72923 RECEIVE_PACKET_FIELD_ERROR(num_disaster_types);
72924 }
72925 }
72926 if (BV_ISSET(fields, 11)) {
72927 log_packet_detailed(" got field 'num_achievement_types'");
72928#ifdef FREECIV_JSON_CONNECTION
72929 field_addr.name = "num_achievement_types";
72930#endif /* FREECIV_JSON_CONNECTION */
72931 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_achievement_types)) {
72932 RECEIVE_PACKET_FIELD_ERROR(num_achievement_types);
72933 }
72934 }
72935 if (BV_ISSET(fields, 12)) {
72936 log_packet_detailed(" got field 'num_multipliers'");
72937#ifdef FREECIV_JSON_CONNECTION
72938 field_addr.name = "num_multipliers";
72939#endif /* FREECIV_JSON_CONNECTION */
72940 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_multipliers)) {
72941 RECEIVE_PACKET_FIELD_ERROR(num_multipliers);
72942 }
72943 }
72944 if (BV_ISSET(fields, 13)) {
72945 log_packet_detailed(" got field 'num_styles'");
72946#ifdef FREECIV_JSON_CONNECTION
72947 field_addr.name = "num_styles";
72948#endif /* FREECIV_JSON_CONNECTION */
72949 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_styles)) {
72950 RECEIVE_PACKET_FIELD_ERROR(num_styles);
72951 }
72952 }
72953 if (BV_ISSET(fields, 14)) {
72954 log_packet_detailed(" got field 'num_music_styles'");
72955#ifdef FREECIV_JSON_CONNECTION
72956 field_addr.name = "num_music_styles";
72957#endif /* FREECIV_JSON_CONNECTION */
72958 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_music_styles)) {
72959 RECEIVE_PACKET_FIELD_ERROR(num_music_styles);
72960 }
72961 }
72962 if (BV_ISSET(fields, 15)) {
72963 log_packet_detailed(" got field 'government_count'");
72964#ifdef FREECIV_JSON_CONNECTION
72965 field_addr.name = "government_count";
72966#endif /* FREECIV_JSON_CONNECTION */
72967 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->government_count)) {
72969 }
72970 }
72971 if (BV_ISSET(fields, 16)) {
72972 log_packet_detailed(" got field 'nation_count'");
72973#ifdef FREECIV_JSON_CONNECTION
72974 field_addr.name = "nation_count";
72975#endif /* FREECIV_JSON_CONNECTION */
72976 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->nation_count)) {
72978 }
72979 }
72980 if (BV_ISSET(fields, 17)) {
72981 log_packet_detailed(" got field 'num_city_styles'");
72982#ifdef FREECIV_JSON_CONNECTION
72983 field_addr.name = "num_city_styles";
72984#endif /* FREECIV_JSON_CONNECTION */
72985 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_city_styles)) {
72986 RECEIVE_PACKET_FIELD_ERROR(num_city_styles);
72987 }
72988 }
72989 if (BV_ISSET(fields, 18)) {
72990 log_packet_detailed(" got field 'terrain_count'");
72991#ifdef FREECIV_JSON_CONNECTION
72992 field_addr.name = "terrain_count";
72993#endif /* FREECIV_JSON_CONNECTION */
72994 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->terrain_count)) {
72996 }
72997 }
72998 if (BV_ISSET(fields, 19)) {
72999 log_packet_detailed(" got field 'num_specialist_types'");
73000#ifdef FREECIV_JSON_CONNECTION
73001 field_addr.name = "num_specialist_types";
73002#endif /* FREECIV_JSON_CONNECTION */
73003 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_specialist_types)) {
73004 RECEIVE_PACKET_FIELD_ERROR(num_specialist_types);
73005 }
73006 }
73007 if (BV_ISSET(fields, 20)) {
73008 log_packet_detailed(" got field 'num_nation_groups'");
73009#ifdef FREECIV_JSON_CONNECTION
73010 field_addr.name = "num_nation_groups";
73011#endif /* FREECIV_JSON_CONNECTION */
73012 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_groups)) {
73014 }
73015 }
73016 if (BV_ISSET(fields, 21)) {
73017 log_packet_detailed(" got field 'num_nation_sets'");
73018#ifdef FREECIV_JSON_CONNECTION
73019 field_addr.name = "num_nation_sets";
73020#endif /* FREECIV_JSON_CONNECTION */
73021 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_nation_sets)) {
73023 }
73024 }
73025 if (BV_ISSET(fields, 22)) {
73026 log_packet_detailed(" got field 'preferred_tileset'");
73027#ifdef FREECIV_JSON_CONNECTION
73028 field_addr.name = "preferred_tileset";
73029#endif /* FREECIV_JSON_CONNECTION */
73030 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_tileset, sizeof(real_packet->preferred_tileset))) {
73031 RECEIVE_PACKET_FIELD_ERROR(preferred_tileset);
73032 }
73033 }
73034 if (BV_ISSET(fields, 23)) {
73035 log_packet_detailed(" got field 'preferred_soundset'");
73036#ifdef FREECIV_JSON_CONNECTION
73037 field_addr.name = "preferred_soundset";
73038#endif /* FREECIV_JSON_CONNECTION */
73039 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_soundset, sizeof(real_packet->preferred_soundset))) {
73040 RECEIVE_PACKET_FIELD_ERROR(preferred_soundset);
73041 }
73042 }
73043 if (BV_ISSET(fields, 24)) {
73044 log_packet_detailed(" got field 'preferred_musicset'");
73045#ifdef FREECIV_JSON_CONNECTION
73046 field_addr.name = "preferred_musicset";
73047#endif /* FREECIV_JSON_CONNECTION */
73048 if (!DIO_GET(string, &din, &field_addr, real_packet->preferred_musicset, sizeof(real_packet->preferred_musicset))) {
73049 RECEIVE_PACKET_FIELD_ERROR(preferred_musicset);
73050 }
73051 }
73052 real_packet->popup_tech_help = BV_ISSET(fields, 25);
73053 if (BV_ISSET(fields, 26)) {
73054 log_packet_detailed(" got field 'name'");
73055#ifdef FREECIV_JSON_CONNECTION
73056 field_addr.name = "name";
73057#endif /* FREECIV_JSON_CONNECTION */
73058 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
73060 }
73061 }
73062 if (BV_ISSET(fields, 27)) {
73063 log_packet_detailed(" got field 'version'");
73064#ifdef FREECIV_JSON_CONNECTION
73065 field_addr.name = "version";
73066#endif /* FREECIV_JSON_CONNECTION */
73067 if (!DIO_GET(string, &din, &field_addr, real_packet->version, sizeof(real_packet->version))) {
73069 }
73070 }
73071 if (BV_ISSET(fields, 28)) {
73072 log_packet_detailed(" got field 'alt_dir'");
73073#ifdef FREECIV_JSON_CONNECTION
73074 field_addr.name = "alt_dir";
73075#endif /* FREECIV_JSON_CONNECTION */
73076 if (!DIO_GET(string, &din, &field_addr, real_packet->alt_dir, sizeof(real_packet->alt_dir))) {
73078 }
73079 }
73080 if (BV_ISSET(fields, 29)) {
73081 log_packet_detailed(" got field 'desc_length'");
73082#ifdef FREECIV_JSON_CONNECTION
73083 field_addr.name = "desc_length";
73084#endif /* FREECIV_JSON_CONNECTION */
73085 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->desc_length)) {
73086 RECEIVE_PACKET_FIELD_ERROR(desc_length);
73087 }
73088 }
73089 if (BV_ISSET(fields, 30)) {
73090 log_packet_detailed(" got field 'num_counters'");
73091#ifdef FREECIV_JSON_CONNECTION
73092 field_addr.name = "num_counters";
73093#endif /* FREECIV_JSON_CONNECTION */
73094 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->num_counters)) {
73095 RECEIVE_PACKET_FIELD_ERROR(num_counters);
73096 }
73097 }
73098
73099 if (NULL == old) {
73100 old = fc_malloc(sizeof(*old));
73101 *old = *real_packet;
73102 genhash_insert(*hash, old, old);
73103 } else {
73104 *old = *real_packet;
73105 }
73106
73107#endif /* FREECIV_DELTA_PROTOCOL */
73109}
73110
73112{
73113 const struct packet_ruleset_control *real_packet = packet;
73114 int e;
73115#ifdef FREECIV_DELTA_PROTOCOL
73117 struct packet_ruleset_control *old;
73118 bool differ;
73119 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CONTROL;
73120#endif /* FREECIV_DELTA_PROTOCOL */
73122#ifdef FREECIV_JSON_CONNECTION
73123 struct plocation field_addr;
73124 {
73128 }
73129#endif /* FREECIV_JSON_CONNECTION */
73130
73131 log_packet_detailed("packet_ruleset_control_100: sending info about ()");
73132
73133#ifdef FREECIV_DELTA_PROTOCOL
73134 if (NULL == *hash) {
73136 NULL, NULL, NULL, free);
73137 }
73138 BV_CLR_ALL(fields);
73139
73140 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
73141 old = fc_malloc(sizeof(*old));
73142 *old = *real_packet;
73143 genhash_insert(*hash, old, old);
73144 memset(old, 0, sizeof(*old));
73145 }
73146 differ = (old->num_unit_classes != real_packet->num_unit_classes);
73147 if (differ) {
73148 BV_SET(fields, 0);
73149 }
73150
73151 differ = (old->num_unit_types != real_packet->num_unit_types);
73152 if (differ) {
73153 BV_SET(fields, 1);
73154 }
73155
73156 differ = (old->num_impr_types != real_packet->num_impr_types);
73157 if (differ) {
73158 BV_SET(fields, 2);
73159 }
73160
73161 differ = (old->num_tech_classes != real_packet->num_tech_classes);
73162 if (differ) {
73163 BV_SET(fields, 3);
73164 }
73165
73166 differ = (old->num_tech_types != real_packet->num_tech_types);
73167 if (differ) {
73168 BV_SET(fields, 4);
73169 }
73170
73171 differ = (old->num_extra_types != real_packet->num_extra_types);
73172 if (differ) {
73173 BV_SET(fields, 5);
73174 }
73175
73176 differ = (old->num_base_types != real_packet->num_base_types);
73177 if (differ) {
73178 BV_SET(fields, 6);
73179 }
73180
73181 differ = (old->num_road_types != real_packet->num_road_types);
73182 if (differ) {
73183 BV_SET(fields, 7);
73184 }
73185
73186 differ = (old->num_resource_types != real_packet->num_resource_types);
73187 if (differ) {
73188 BV_SET(fields, 8);
73189 }
73190
73191 differ = (old->num_goods_types != real_packet->num_goods_types);
73192 if (differ) {
73193 BV_SET(fields, 9);
73194 }
73195
73196 differ = (old->num_disaster_types != real_packet->num_disaster_types);
73197 if (differ) {
73198 BV_SET(fields, 10);
73199 }
73200
73201 differ = (old->num_achievement_types != real_packet->num_achievement_types);
73202 if (differ) {
73203 BV_SET(fields, 11);
73204 }
73205
73206 differ = (old->num_multipliers != real_packet->num_multipliers);
73207 if (differ) {
73208 BV_SET(fields, 12);
73209 }
73210
73211 differ = (old->num_styles != real_packet->num_styles);
73212 if (differ) {
73213 BV_SET(fields, 13);
73214 }
73215
73216 differ = (old->num_music_styles != real_packet->num_music_styles);
73217 if (differ) {
73218 BV_SET(fields, 14);
73219 }
73220
73221 differ = (old->government_count != real_packet->government_count);
73222 if (differ) {
73223 BV_SET(fields, 15);
73224 }
73225
73226 differ = (old->nation_count != real_packet->nation_count);
73227 if (differ) {
73228 BV_SET(fields, 16);
73229 }
73230
73231 differ = (old->num_city_styles != real_packet->num_city_styles);
73232 if (differ) {
73233 BV_SET(fields, 17);
73234 }
73235
73236 differ = (old->terrain_count != real_packet->terrain_count);
73237 if (differ) {
73238 BV_SET(fields, 18);
73239 }
73240
73241 differ = (old->num_specialist_types != real_packet->num_specialist_types);
73242 if (differ) {
73243 BV_SET(fields, 19);
73244 }
73245
73246 differ = (old->num_nation_groups != real_packet->num_nation_groups);
73247 if (differ) {
73248 BV_SET(fields, 20);
73249 }
73250
73251 differ = (old->num_nation_sets != real_packet->num_nation_sets);
73252 if (differ) {
73253 BV_SET(fields, 21);
73254 }
73255
73256 differ = (strcmp(old->preferred_tileset, real_packet->preferred_tileset) != 0);
73257 if (differ) {
73258 BV_SET(fields, 22);
73259 }
73260
73261 differ = (strcmp(old->preferred_soundset, real_packet->preferred_soundset) != 0);
73262 if (differ) {
73263 BV_SET(fields, 23);
73264 }
73265
73266 differ = (strcmp(old->preferred_musicset, real_packet->preferred_musicset) != 0);
73267 if (differ) {
73268 BV_SET(fields, 24);
73269 }
73270
73271 if (packet->popup_tech_help) {
73272 BV_SET(fields, 25);
73273 }
73274
73275 differ = (strcmp(old->name, real_packet->name) != 0);
73276 if (differ) {
73277 BV_SET(fields, 26);
73278 }
73279
73280 differ = (strcmp(old->version, real_packet->version) != 0);
73281 if (differ) {
73282 BV_SET(fields, 27);
73283 }
73284
73285 differ = (strcmp(old->alt_dir, real_packet->alt_dir) != 0);
73286 if (differ) {
73287 BV_SET(fields, 28);
73288 }
73289
73290 differ = (old->desc_length != real_packet->desc_length);
73291 if (differ) {
73292 BV_SET(fields, 29);
73293 }
73294
73295 differ = (old->num_counters != real_packet->num_counters);
73296 if (differ) {
73297 BV_SET(fields, 30);
73298 }
73299
73300
73301#ifdef FREECIV_JSON_CONNECTION
73302 field_addr.name = "fields";
73303#endif /* FREECIV_JSON_CONNECTION */
73304 e = 0;
73305 e |= DIO_BV_PUT(&dout, &field_addr, fields);
73306 if (e) {
73307 log_packet_detailed("fields bitvector error detected");
73308 }
73309
73310 if (BV_ISSET(fields, 0)) {
73311 log_packet_detailed(" field 'num_unit_classes' has changed");
73312#ifdef FREECIV_JSON_CONNECTION
73313 field_addr.name = "num_unit_classes";
73314#endif /* FREECIV_JSON_CONNECTION */
73315 e = 0;
73316 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
73317 if (e) {
73318 log_packet_detailed("'num_unit_classes' field error detected");
73319 }
73320 }
73321 if (BV_ISSET(fields, 1)) {
73322 log_packet_detailed(" field 'num_unit_types' has changed");
73323#ifdef FREECIV_JSON_CONNECTION
73324 field_addr.name = "num_unit_types";
73325#endif /* FREECIV_JSON_CONNECTION */
73326 e = 0;
73327 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
73328 if (e) {
73329 log_packet_detailed("'num_unit_types' field error detected");
73330 }
73331 }
73332 if (BV_ISSET(fields, 2)) {
73333 log_packet_detailed(" field 'num_impr_types' has changed");
73334#ifdef FREECIV_JSON_CONNECTION
73335 field_addr.name = "num_impr_types";
73336#endif /* FREECIV_JSON_CONNECTION */
73337 e = 0;
73338 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
73339 if (e) {
73340 log_packet_detailed("'num_impr_types' field error detected");
73341 }
73342 }
73343 if (BV_ISSET(fields, 3)) {
73344 log_packet_detailed(" field 'num_tech_classes' has changed");
73345#ifdef FREECIV_JSON_CONNECTION
73346 field_addr.name = "num_tech_classes";
73347#endif /* FREECIV_JSON_CONNECTION */
73348 e = 0;
73349 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
73350 if (e) {
73351 log_packet_detailed("'num_tech_classes' field error detected");
73352 }
73353 }
73354 if (BV_ISSET(fields, 4)) {
73355 log_packet_detailed(" field 'num_tech_types' has changed");
73356#ifdef FREECIV_JSON_CONNECTION
73357 field_addr.name = "num_tech_types";
73358#endif /* FREECIV_JSON_CONNECTION */
73359 e = 0;
73360 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
73361 if (e) {
73362 log_packet_detailed("'num_tech_types' field error detected");
73363 }
73364 }
73365 if (BV_ISSET(fields, 5)) {
73366 log_packet_detailed(" field 'num_extra_types' has changed");
73367#ifdef FREECIV_JSON_CONNECTION
73368 field_addr.name = "num_extra_types";
73369#endif /* FREECIV_JSON_CONNECTION */
73370 e = 0;
73371 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
73372 if (e) {
73373 log_packet_detailed("'num_extra_types' field error detected");
73374 }
73375 }
73376 if (BV_ISSET(fields, 6)) {
73377 log_packet_detailed(" field 'num_base_types' has changed");
73378#ifdef FREECIV_JSON_CONNECTION
73379 field_addr.name = "num_base_types";
73380#endif /* FREECIV_JSON_CONNECTION */
73381 e = 0;
73382 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
73383 if (e) {
73384 log_packet_detailed("'num_base_types' field error detected");
73385 }
73386 }
73387 if (BV_ISSET(fields, 7)) {
73388 log_packet_detailed(" field 'num_road_types' has changed");
73389#ifdef FREECIV_JSON_CONNECTION
73390 field_addr.name = "num_road_types";
73391#endif /* FREECIV_JSON_CONNECTION */
73392 e = 0;
73393 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
73394 if (e) {
73395 log_packet_detailed("'num_road_types' field error detected");
73396 }
73397 }
73398 if (BV_ISSET(fields, 8)) {
73399 log_packet_detailed(" field 'num_resource_types' has changed");
73400#ifdef FREECIV_JSON_CONNECTION
73401 field_addr.name = "num_resource_types";
73402#endif /* FREECIV_JSON_CONNECTION */
73403 e = 0;
73404 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
73405 if (e) {
73406 log_packet_detailed("'num_resource_types' field error detected");
73407 }
73408 }
73409 if (BV_ISSET(fields, 9)) {
73410 log_packet_detailed(" field 'num_goods_types' has changed");
73411#ifdef FREECIV_JSON_CONNECTION
73412 field_addr.name = "num_goods_types";
73413#endif /* FREECIV_JSON_CONNECTION */
73414 e = 0;
73415 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
73416 if (e) {
73417 log_packet_detailed("'num_goods_types' field error detected");
73418 }
73419 }
73420 if (BV_ISSET(fields, 10)) {
73421 log_packet_detailed(" field 'num_disaster_types' has changed");
73422#ifdef FREECIV_JSON_CONNECTION
73423 field_addr.name = "num_disaster_types";
73424#endif /* FREECIV_JSON_CONNECTION */
73425 e = 0;
73426 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
73427 if (e) {
73428 log_packet_detailed("'num_disaster_types' field error detected");
73429 }
73430 }
73431 if (BV_ISSET(fields, 11)) {
73432 log_packet_detailed(" field 'num_achievement_types' has changed");
73433#ifdef FREECIV_JSON_CONNECTION
73434 field_addr.name = "num_achievement_types";
73435#endif /* FREECIV_JSON_CONNECTION */
73436 e = 0;
73437 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
73438 if (e) {
73439 log_packet_detailed("'num_achievement_types' field error detected");
73440 }
73441 }
73442 if (BV_ISSET(fields, 12)) {
73443 log_packet_detailed(" field 'num_multipliers' has changed");
73444#ifdef FREECIV_JSON_CONNECTION
73445 field_addr.name = "num_multipliers";
73446#endif /* FREECIV_JSON_CONNECTION */
73447 e = 0;
73448 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
73449 if (e) {
73450 log_packet_detailed("'num_multipliers' field error detected");
73451 }
73452 }
73453 if (BV_ISSET(fields, 13)) {
73454 log_packet_detailed(" field 'num_styles' has changed");
73455#ifdef FREECIV_JSON_CONNECTION
73456 field_addr.name = "num_styles";
73457#endif /* FREECIV_JSON_CONNECTION */
73458 e = 0;
73459 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
73460 if (e) {
73461 log_packet_detailed("'num_styles' field error detected");
73462 }
73463 }
73464 if (BV_ISSET(fields, 14)) {
73465 log_packet_detailed(" field 'num_music_styles' has changed");
73466#ifdef FREECIV_JSON_CONNECTION
73467 field_addr.name = "num_music_styles";
73468#endif /* FREECIV_JSON_CONNECTION */
73469 e = 0;
73470 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
73471 if (e) {
73472 log_packet_detailed("'num_music_styles' field error detected");
73473 }
73474 }
73475 if (BV_ISSET(fields, 15)) {
73476 log_packet_detailed(" field 'government_count' has changed");
73477#ifdef FREECIV_JSON_CONNECTION
73478 field_addr.name = "government_count";
73479#endif /* FREECIV_JSON_CONNECTION */
73480 e = 0;
73481 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
73482 if (e) {
73483 log_packet_detailed("'government_count' field error detected");
73484 }
73485 }
73486 if (BV_ISSET(fields, 16)) {
73487 log_packet_detailed(" field 'nation_count' has changed");
73488#ifdef FREECIV_JSON_CONNECTION
73489 field_addr.name = "nation_count";
73490#endif /* FREECIV_JSON_CONNECTION */
73491 e = 0;
73492 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
73493 if (e) {
73494 log_packet_detailed("'nation_count' field error detected");
73495 }
73496 }
73497 if (BV_ISSET(fields, 17)) {
73498 log_packet_detailed(" field 'num_city_styles' has changed");
73499#ifdef FREECIV_JSON_CONNECTION
73500 field_addr.name = "num_city_styles";
73501#endif /* FREECIV_JSON_CONNECTION */
73502 e = 0;
73503 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
73504 if (e) {
73505 log_packet_detailed("'num_city_styles' field error detected");
73506 }
73507 }
73508 if (BV_ISSET(fields, 18)) {
73509 log_packet_detailed(" field 'terrain_count' has changed");
73510#ifdef FREECIV_JSON_CONNECTION
73511 field_addr.name = "terrain_count";
73512#endif /* FREECIV_JSON_CONNECTION */
73513 e = 0;
73514 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
73515 if (e) {
73516 log_packet_detailed("'terrain_count' field error detected");
73517 }
73518 }
73519 if (BV_ISSET(fields, 19)) {
73520 log_packet_detailed(" field 'num_specialist_types' has changed");
73521#ifdef FREECIV_JSON_CONNECTION
73522 field_addr.name = "num_specialist_types";
73523#endif /* FREECIV_JSON_CONNECTION */
73524 e = 0;
73525 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
73526 if (e) {
73527 log_packet_detailed("'num_specialist_types' field error detected");
73528 }
73529 }
73530 if (BV_ISSET(fields, 20)) {
73531 log_packet_detailed(" field 'num_nation_groups' has changed");
73532#ifdef FREECIV_JSON_CONNECTION
73533 field_addr.name = "num_nation_groups";
73534#endif /* FREECIV_JSON_CONNECTION */
73535 e = 0;
73536 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
73537 if (e) {
73538 log_packet_detailed("'num_nation_groups' field error detected");
73539 }
73540 }
73541 if (BV_ISSET(fields, 21)) {
73542 log_packet_detailed(" field 'num_nation_sets' has changed");
73543#ifdef FREECIV_JSON_CONNECTION
73544 field_addr.name = "num_nation_sets";
73545#endif /* FREECIV_JSON_CONNECTION */
73546 e = 0;
73547 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
73548 if (e) {
73549 log_packet_detailed("'num_nation_sets' field error detected");
73550 }
73551 }
73552 if (BV_ISSET(fields, 22)) {
73553 log_packet_detailed(" field 'preferred_tileset' has changed");
73554#ifdef FREECIV_JSON_CONNECTION
73555 field_addr.name = "preferred_tileset";
73556#endif /* FREECIV_JSON_CONNECTION */
73557 e = 0;
73558 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
73559 if (e) {
73560 log_packet_detailed("'preferred_tileset' field error detected");
73561 }
73562 }
73563 if (BV_ISSET(fields, 23)) {
73564 log_packet_detailed(" field 'preferred_soundset' has changed");
73565#ifdef FREECIV_JSON_CONNECTION
73566 field_addr.name = "preferred_soundset";
73567#endif /* FREECIV_JSON_CONNECTION */
73568 e = 0;
73569 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
73570 if (e) {
73571 log_packet_detailed("'preferred_soundset' field error detected");
73572 }
73573 }
73574 if (BV_ISSET(fields, 24)) {
73575 log_packet_detailed(" field 'preferred_musicset' has changed");
73576#ifdef FREECIV_JSON_CONNECTION
73577 field_addr.name = "preferred_musicset";
73578#endif /* FREECIV_JSON_CONNECTION */
73579 e = 0;
73580 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
73581 if (e) {
73582 log_packet_detailed("'preferred_musicset' field error detected");
73583 }
73584 }
73585 /* field 25 is folded into the header */
73586 if (BV_ISSET(fields, 26)) {
73587 log_packet_detailed(" field 'name' has changed");
73588#ifdef FREECIV_JSON_CONNECTION
73589 field_addr.name = "name";
73590#endif /* FREECIV_JSON_CONNECTION */
73591 e = 0;
73592 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
73593 if (e) {
73594 log_packet_detailed("'name' field error detected");
73595 }
73596 }
73597 if (BV_ISSET(fields, 27)) {
73598 log_packet_detailed(" field 'version' has changed");
73599#ifdef FREECIV_JSON_CONNECTION
73600 field_addr.name = "version";
73601#endif /* FREECIV_JSON_CONNECTION */
73602 e = 0;
73603 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
73604 if (e) {
73605 log_packet_detailed("'version' field error detected");
73606 }
73607 }
73608 if (BV_ISSET(fields, 28)) {
73609 log_packet_detailed(" field 'alt_dir' has changed");
73610#ifdef FREECIV_JSON_CONNECTION
73611 field_addr.name = "alt_dir";
73612#endif /* FREECIV_JSON_CONNECTION */
73613 e = 0;
73614 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
73615 if (e) {
73616 log_packet_detailed("'alt_dir' field error detected");
73617 }
73618 }
73619 if (BV_ISSET(fields, 29)) {
73620 log_packet_detailed(" field 'desc_length' has changed");
73621#ifdef FREECIV_JSON_CONNECTION
73622 field_addr.name = "desc_length";
73623#endif /* FREECIV_JSON_CONNECTION */
73624 e = 0;
73625 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
73626 if (e) {
73627 log_packet_detailed("'desc_length' field error detected");
73628 }
73629 }
73630 if (BV_ISSET(fields, 30)) {
73631 log_packet_detailed(" field 'num_counters' has changed");
73632#ifdef FREECIV_JSON_CONNECTION
73633 field_addr.name = "num_counters";
73634#endif /* FREECIV_JSON_CONNECTION */
73635 e = 0;
73636 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
73637 if (e) {
73638 log_packet_detailed("'num_counters' field error detected");
73639 }
73640 }
73641
73642 *old = *real_packet;
73643#endif /* FREECIV_DELTA_PROTOCOL */
73644#ifndef FREECIV_DELTA_PROTOCOL
73645#ifdef FREECIV_JSON_CONNECTION
73646 field_addr.name = "num_unit_classes";
73647#endif /* FREECIV_JSON_CONNECTION */
73648 e = 0;
73649 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_classes);
73650 if (e) {
73651 log_packet_detailed("'num_unit_classes' field error detected");
73652 }
73653#ifdef FREECIV_JSON_CONNECTION
73654 field_addr.name = "num_unit_types";
73655#endif /* FREECIV_JSON_CONNECTION */
73656 e = 0;
73657 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_unit_types);
73658 if (e) {
73659 log_packet_detailed("'num_unit_types' field error detected");
73660 }
73661#ifdef FREECIV_JSON_CONNECTION
73662 field_addr.name = "num_impr_types";
73663#endif /* FREECIV_JSON_CONNECTION */
73664 e = 0;
73665 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_impr_types);
73666 if (e) {
73667 log_packet_detailed("'num_impr_types' field error detected");
73668 }
73669#ifdef FREECIV_JSON_CONNECTION
73670 field_addr.name = "num_tech_classes";
73671#endif /* FREECIV_JSON_CONNECTION */
73672 e = 0;
73673 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_classes);
73674 if (e) {
73675 log_packet_detailed("'num_tech_classes' field error detected");
73676 }
73677#ifdef FREECIV_JSON_CONNECTION
73678 field_addr.name = "num_tech_types";
73679#endif /* FREECIV_JSON_CONNECTION */
73680 e = 0;
73681 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_tech_types);
73682 if (e) {
73683 log_packet_detailed("'num_tech_types' field error detected");
73684 }
73685#ifdef FREECIV_JSON_CONNECTION
73686 field_addr.name = "num_extra_types";
73687#endif /* FREECIV_JSON_CONNECTION */
73688 e = 0;
73689 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_extra_types);
73690 if (e) {
73691 log_packet_detailed("'num_extra_types' field error detected");
73692 }
73693#ifdef FREECIV_JSON_CONNECTION
73694 field_addr.name = "num_base_types";
73695#endif /* FREECIV_JSON_CONNECTION */
73696 e = 0;
73697 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_base_types);
73698 if (e) {
73699 log_packet_detailed("'num_base_types' field error detected");
73700 }
73701#ifdef FREECIV_JSON_CONNECTION
73702 field_addr.name = "num_road_types";
73703#endif /* FREECIV_JSON_CONNECTION */
73704 e = 0;
73705 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_road_types);
73706 if (e) {
73707 log_packet_detailed("'num_road_types' field error detected");
73708 }
73709#ifdef FREECIV_JSON_CONNECTION
73710 field_addr.name = "num_resource_types";
73711#endif /* FREECIV_JSON_CONNECTION */
73712 e = 0;
73713 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_resource_types);
73714 if (e) {
73715 log_packet_detailed("'num_resource_types' field error detected");
73716 }
73717#ifdef FREECIV_JSON_CONNECTION
73718 field_addr.name = "num_goods_types";
73719#endif /* FREECIV_JSON_CONNECTION */
73720 e = 0;
73721 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_goods_types);
73722 if (e) {
73723 log_packet_detailed("'num_goods_types' field error detected");
73724 }
73725#ifdef FREECIV_JSON_CONNECTION
73726 field_addr.name = "num_disaster_types";
73727#endif /* FREECIV_JSON_CONNECTION */
73728 e = 0;
73729 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_disaster_types);
73730 if (e) {
73731 log_packet_detailed("'num_disaster_types' field error detected");
73732 }
73733#ifdef FREECIV_JSON_CONNECTION
73734 field_addr.name = "num_achievement_types";
73735#endif /* FREECIV_JSON_CONNECTION */
73736 e = 0;
73737 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_achievement_types);
73738 if (e) {
73739 log_packet_detailed("'num_achievement_types' field error detected");
73740 }
73741#ifdef FREECIV_JSON_CONNECTION
73742 field_addr.name = "num_multipliers";
73743#endif /* FREECIV_JSON_CONNECTION */
73744 e = 0;
73745 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_multipliers);
73746 if (e) {
73747 log_packet_detailed("'num_multipliers' field error detected");
73748 }
73749#ifdef FREECIV_JSON_CONNECTION
73750 field_addr.name = "num_styles";
73751#endif /* FREECIV_JSON_CONNECTION */
73752 e = 0;
73753 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_styles);
73754 if (e) {
73755 log_packet_detailed("'num_styles' field error detected");
73756 }
73757#ifdef FREECIV_JSON_CONNECTION
73758 field_addr.name = "num_music_styles";
73759#endif /* FREECIV_JSON_CONNECTION */
73760 e = 0;
73761 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_music_styles);
73762 if (e) {
73763 log_packet_detailed("'num_music_styles' field error detected");
73764 }
73765#ifdef FREECIV_JSON_CONNECTION
73766 field_addr.name = "government_count";
73767#endif /* FREECIV_JSON_CONNECTION */
73768 e = 0;
73769 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->government_count);
73770 if (e) {
73771 log_packet_detailed("'government_count' field error detected");
73772 }
73773#ifdef FREECIV_JSON_CONNECTION
73774 field_addr.name = "nation_count";
73775#endif /* FREECIV_JSON_CONNECTION */
73776 e = 0;
73777 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->nation_count);
73778 if (e) {
73779 log_packet_detailed("'nation_count' field error detected");
73780 }
73781#ifdef FREECIV_JSON_CONNECTION
73782 field_addr.name = "num_city_styles";
73783#endif /* FREECIV_JSON_CONNECTION */
73784 e = 0;
73785 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_city_styles);
73786 if (e) {
73787 log_packet_detailed("'num_city_styles' field error detected");
73788 }
73789#ifdef FREECIV_JSON_CONNECTION
73790 field_addr.name = "terrain_count";
73791#endif /* FREECIV_JSON_CONNECTION */
73792 e = 0;
73793 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->terrain_count);
73794 if (e) {
73795 log_packet_detailed("'terrain_count' field error detected");
73796 }
73797#ifdef FREECIV_JSON_CONNECTION
73798 field_addr.name = "num_specialist_types";
73799#endif /* FREECIV_JSON_CONNECTION */
73800 e = 0;
73801 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_specialist_types);
73802 if (e) {
73803 log_packet_detailed("'num_specialist_types' field error detected");
73804 }
73805#ifdef FREECIV_JSON_CONNECTION
73806 field_addr.name = "num_nation_groups";
73807#endif /* FREECIV_JSON_CONNECTION */
73808 e = 0;
73809 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_groups);
73810 if (e) {
73811 log_packet_detailed("'num_nation_groups' field error detected");
73812 }
73813#ifdef FREECIV_JSON_CONNECTION
73814 field_addr.name = "num_nation_sets";
73815#endif /* FREECIV_JSON_CONNECTION */
73816 e = 0;
73817 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_nation_sets);
73818 if (e) {
73819 log_packet_detailed("'num_nation_sets' field error detected");
73820 }
73821#ifdef FREECIV_JSON_CONNECTION
73822 field_addr.name = "preferred_tileset";
73823#endif /* FREECIV_JSON_CONNECTION */
73824 e = 0;
73825 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_tileset);
73826 if (e) {
73827 log_packet_detailed("'preferred_tileset' field error detected");
73828 }
73829#ifdef FREECIV_JSON_CONNECTION
73830 field_addr.name = "preferred_soundset";
73831#endif /* FREECIV_JSON_CONNECTION */
73832 e = 0;
73833 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_soundset);
73834 if (e) {
73835 log_packet_detailed("'preferred_soundset' field error detected");
73836 }
73837#ifdef FREECIV_JSON_CONNECTION
73838 field_addr.name = "preferred_musicset";
73839#endif /* FREECIV_JSON_CONNECTION */
73840 e = 0;
73841 e |= DIO_PUT(string, &dout, &field_addr, real_packet->preferred_musicset);
73842 if (e) {
73843 log_packet_detailed("'preferred_musicset' field error detected");
73844 }
73845#ifdef FREECIV_JSON_CONNECTION
73846 field_addr.name = "popup_tech_help";
73847#endif /* FREECIV_JSON_CONNECTION */
73848 e = 0;
73849 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->popup_tech_help);
73850 if (e) {
73851 log_packet_detailed("'popup_tech_help' field error detected");
73852 }
73853#ifdef FREECIV_JSON_CONNECTION
73854 field_addr.name = "name";
73855#endif /* FREECIV_JSON_CONNECTION */
73856 e = 0;
73857 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
73858 if (e) {
73859 log_packet_detailed("'name' field error detected");
73860 }
73861#ifdef FREECIV_JSON_CONNECTION
73862 field_addr.name = "version";
73863#endif /* FREECIV_JSON_CONNECTION */
73864 e = 0;
73865 e |= DIO_PUT(string, &dout, &field_addr, real_packet->version);
73866 if (e) {
73867 log_packet_detailed("'version' field error detected");
73868 }
73869#ifdef FREECIV_JSON_CONNECTION
73870 field_addr.name = "alt_dir";
73871#endif /* FREECIV_JSON_CONNECTION */
73872 e = 0;
73873 e |= DIO_PUT(string, &dout, &field_addr, real_packet->alt_dir);
73874 if (e) {
73875 log_packet_detailed("'alt_dir' field error detected");
73876 }
73877#ifdef FREECIV_JSON_CONNECTION
73878 field_addr.name = "desc_length";
73879#endif /* FREECIV_JSON_CONNECTION */
73880 e = 0;
73881 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->desc_length);
73882 if (e) {
73883 log_packet_detailed("'desc_length' field error detected");
73884 }
73885#ifdef FREECIV_JSON_CONNECTION
73886 field_addr.name = "num_counters";
73887#endif /* FREECIV_JSON_CONNECTION */
73888 e = 0;
73889 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->num_counters);
73890 if (e) {
73891 log_packet_detailed("'num_counters' field error detected");
73892 }
73893
73894#endif
73896}
73897
73899{
73900 if (!pc->used) {
73901 log_error("WARNING: trying to send data to the closed connection %s",
73903 return -1;
73904 }
73905 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet != NULL, -1,
73906 "Handler for PACKET_RULESET_CONTROL not installed");
73907 return pc->phs.handlers->send[PACKET_RULESET_CONTROL].packet(pc, packet);
73908}
73909
73910void lsend_packet_ruleset_control(struct conn_list *dest, const struct packet_ruleset_control *packet)
73911{
73912 conn_list_iterate(dest, pconn) {
73915}
73916
73917#ifdef FREECIV_DELTA_PROTOCOL
73918#define hash_packet_ruleset_summary_100 hash_const
73919
73920#define cmp_packet_ruleset_summary_100 cmp_const
73921
73923#endif /* FREECIV_DELTA_PROTOCOL */
73924
73926{
73927#ifdef FREECIV_DELTA_PROTOCOL
73929 struct packet_ruleset_summary *old;
73930 struct genhash **hash = pc->phs.received + PACKET_RULESET_SUMMARY;
73931#endif /* FREECIV_DELTA_PROTOCOL */
73933#ifdef FREECIV_JSON_CONNECTION
73934 struct plocation field_addr;
73935 {
73939 }
73940#endif /* FREECIV_JSON_CONNECTION */
73941
73942#ifdef FREECIV_DELTA_PROTOCOL
73943#ifdef FREECIV_JSON_CONNECTION
73944 field_addr.name = "fields";
73945#endif /* FREECIV_JSON_CONNECTION */
73946 DIO_BV_GET(&din, &field_addr, fields);
73947
73948#else /* FREECIV_DELTA_PROTOCOL */
73949#ifdef FREECIV_JSON_CONNECTION
73950 field_addr.name = "text";
73951#endif /* FREECIV_JSON_CONNECTION */
73952 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
73954 }
73955#endif
73956 log_packet_detailed("packet_ruleset_summary_100: got info about ()");
73957
73958#ifdef FREECIV_DELTA_PROTOCOL
73959 if (NULL == *hash) {
73961 NULL, NULL, NULL, free);
73962 }
73963
73964 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
73965 *real_packet = *old;
73966 } else {
73967 log_packet_detailed(" no old info");
73968 memset(real_packet, 0, sizeof(*real_packet));
73969 }
73970
73971 if (BV_ISSET(fields, 0)) {
73972 log_packet_detailed(" got field 'text'");
73973#ifdef FREECIV_JSON_CONNECTION
73974 field_addr.name = "text";
73975#endif /* FREECIV_JSON_CONNECTION */
73976 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
73978 }
73979 }
73980
73981 if (NULL == old) {
73982 old = fc_malloc(sizeof(*old));
73983 *old = *real_packet;
73984 genhash_insert(*hash, old, old);
73985 } else {
73986 *old = *real_packet;
73987 }
73988
73989#endif /* FREECIV_DELTA_PROTOCOL */
73991}
73992
73994{
73995 const struct packet_ruleset_summary *real_packet = packet;
73996 int e;
73997#ifdef FREECIV_DELTA_PROTOCOL
73999 struct packet_ruleset_summary *old;
74000 bool differ;
74001 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SUMMARY;
74002#endif /* FREECIV_DELTA_PROTOCOL */
74004#ifdef FREECIV_JSON_CONNECTION
74005 struct plocation field_addr;
74006 {
74010 }
74011#endif /* FREECIV_JSON_CONNECTION */
74012
74013 log_packet_detailed("packet_ruleset_summary_100: sending info about ()");
74014
74015#ifdef FREECIV_DELTA_PROTOCOL
74016 if (NULL == *hash) {
74018 NULL, NULL, NULL, free);
74019 }
74020 BV_CLR_ALL(fields);
74021
74022 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74023 old = fc_malloc(sizeof(*old));
74024 *old = *real_packet;
74025 genhash_insert(*hash, old, old);
74026 memset(old, 0, sizeof(*old));
74027 }
74028 differ = (strcmp(old->text, real_packet->text) != 0);
74029 if (differ) {
74030 BV_SET(fields, 0);
74031 }
74032
74033
74034#ifdef FREECIV_JSON_CONNECTION
74035 field_addr.name = "fields";
74036#endif /* FREECIV_JSON_CONNECTION */
74037 e = 0;
74038 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74039 if (e) {
74040 log_packet_detailed("fields bitvector error detected");
74041 }
74042
74043 if (BV_ISSET(fields, 0)) {
74044 log_packet_detailed(" field 'text' has changed");
74045#ifdef FREECIV_JSON_CONNECTION
74046 field_addr.name = "text";
74047#endif /* FREECIV_JSON_CONNECTION */
74048 e = 0;
74049 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
74050 if (e) {
74051 log_packet_detailed("'text' field error detected");
74052 }
74053 }
74054
74055 *old = *real_packet;
74056#endif /* FREECIV_DELTA_PROTOCOL */
74057#ifndef FREECIV_DELTA_PROTOCOL
74058#ifdef FREECIV_JSON_CONNECTION
74059 field_addr.name = "text";
74060#endif /* FREECIV_JSON_CONNECTION */
74061 e = 0;
74062 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
74063 if (e) {
74064 log_packet_detailed("'text' field error detected");
74065 }
74066
74067#endif
74069}
74070
74072{
74073 if (!pc->used) {
74074 log_error("WARNING: trying to send data to the closed connection %s",
74076 return -1;
74077 }
74078 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet != NULL, -1,
74079 "Handler for PACKET_RULESET_SUMMARY not installed");
74080 return pc->phs.handlers->send[PACKET_RULESET_SUMMARY].packet(pc, packet);
74081}
74082
74083void lsend_packet_ruleset_summary(struct conn_list *dest, const struct packet_ruleset_summary *packet)
74084{
74085 conn_list_iterate(dest, pconn) {
74088}
74089
74090#ifdef FREECIV_DELTA_PROTOCOL
74091#define hash_packet_ruleset_description_part_100 hash_const
74092
74093#define cmp_packet_ruleset_description_part_100 cmp_const
74094
74096#endif /* FREECIV_DELTA_PROTOCOL */
74097
74099{
74100#ifdef FREECIV_DELTA_PROTOCOL
74103 struct genhash **hash = pc->phs.received + PACKET_RULESET_DESCRIPTION_PART;
74104#endif /* FREECIV_DELTA_PROTOCOL */
74106#ifdef FREECIV_JSON_CONNECTION
74107 struct plocation field_addr;
74108 {
74112 }
74113#endif /* FREECIV_JSON_CONNECTION */
74114
74115#ifdef FREECIV_DELTA_PROTOCOL
74116#ifdef FREECIV_JSON_CONNECTION
74117 field_addr.name = "fields";
74118#endif /* FREECIV_JSON_CONNECTION */
74119 DIO_BV_GET(&din, &field_addr, fields);
74120
74121#else /* FREECIV_DELTA_PROTOCOL */
74122#ifdef FREECIV_JSON_CONNECTION
74123 field_addr.name = "text";
74124#endif /* FREECIV_JSON_CONNECTION */
74125 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
74127 }
74128#endif
74129 log_packet_detailed("packet_ruleset_description_part_100: got info about ()");
74130
74131#ifdef FREECIV_DELTA_PROTOCOL
74132 if (NULL == *hash) {
74134 NULL, NULL, NULL, free);
74135 }
74136
74137 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74138 *real_packet = *old;
74139 } else {
74140 log_packet_detailed(" no old info");
74141 memset(real_packet, 0, sizeof(*real_packet));
74142 }
74143
74144 if (BV_ISSET(fields, 0)) {
74145 log_packet_detailed(" got field 'text'");
74146#ifdef FREECIV_JSON_CONNECTION
74147 field_addr.name = "text";
74148#endif /* FREECIV_JSON_CONNECTION */
74149 if (!DIO_GET(string, &din, &field_addr, real_packet->text, sizeof(real_packet->text))) {
74151 }
74152 }
74153
74154 if (NULL == old) {
74155 old = fc_malloc(sizeof(*old));
74156 *old = *real_packet;
74157 genhash_insert(*hash, old, old);
74158 } else {
74159 *old = *real_packet;
74160 }
74161
74162#endif /* FREECIV_DELTA_PROTOCOL */
74164}
74165
74167{
74168 const struct packet_ruleset_description_part *real_packet = packet;
74169 int e;
74170#ifdef FREECIV_DELTA_PROTOCOL
74173 bool differ;
74174 struct genhash **hash = pc->phs.sent + PACKET_RULESET_DESCRIPTION_PART;
74175#endif /* FREECIV_DELTA_PROTOCOL */
74177#ifdef FREECIV_JSON_CONNECTION
74178 struct plocation field_addr;
74179 {
74183 }
74184#endif /* FREECIV_JSON_CONNECTION */
74185
74186 log_packet_detailed("packet_ruleset_description_part_100: sending info about ()");
74187
74188#ifdef FREECIV_DELTA_PROTOCOL
74189 if (NULL == *hash) {
74191 NULL, NULL, NULL, free);
74192 }
74193 BV_CLR_ALL(fields);
74194
74195 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74196 old = fc_malloc(sizeof(*old));
74197 *old = *real_packet;
74198 genhash_insert(*hash, old, old);
74199 memset(old, 0, sizeof(*old));
74200 }
74201 differ = (strcmp(old->text, real_packet->text) != 0);
74202 if (differ) {
74203 BV_SET(fields, 0);
74204 }
74205
74206
74207#ifdef FREECIV_JSON_CONNECTION
74208 field_addr.name = "fields";
74209#endif /* FREECIV_JSON_CONNECTION */
74210 e = 0;
74211 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74212 if (e) {
74213 log_packet_detailed("fields bitvector error detected");
74214 }
74215
74216 if (BV_ISSET(fields, 0)) {
74217 log_packet_detailed(" field 'text' has changed");
74218#ifdef FREECIV_JSON_CONNECTION
74219 field_addr.name = "text";
74220#endif /* FREECIV_JSON_CONNECTION */
74221 e = 0;
74222 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
74223 if (e) {
74224 log_packet_detailed("'text' field error detected");
74225 }
74226 }
74227
74228 *old = *real_packet;
74229#endif /* FREECIV_DELTA_PROTOCOL */
74230#ifndef FREECIV_DELTA_PROTOCOL
74231#ifdef FREECIV_JSON_CONNECTION
74232 field_addr.name = "text";
74233#endif /* FREECIV_JSON_CONNECTION */
74234 e = 0;
74235 e |= DIO_PUT(string, &dout, &field_addr, real_packet->text);
74236 if (e) {
74237 log_packet_detailed("'text' field error detected");
74238 }
74239
74240#endif
74242}
74243
74245{
74246 if (!pc->used) {
74247 log_error("WARNING: trying to send data to the closed connection %s",
74249 return -1;
74250 }
74251 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet != NULL, -1,
74252 "Handler for PACKET_RULESET_DESCRIPTION_PART not installed");
74253 return pc->phs.handlers->send[PACKET_RULESET_DESCRIPTION_PART].packet(pc, packet);
74254}
74255
74262
74263#ifdef FREECIV_DELTA_PROTOCOL
74264#define hash_packet_single_want_hack_req_100 hash_const
74265
74266#define cmp_packet_single_want_hack_req_100 cmp_const
74267
74269#endif /* FREECIV_DELTA_PROTOCOL */
74270
74272{
74273#ifdef FREECIV_DELTA_PROTOCOL
74275 struct packet_single_want_hack_req *old;
74276 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REQ;
74277#endif /* FREECIV_DELTA_PROTOCOL */
74279#ifdef FREECIV_JSON_CONNECTION
74280 struct plocation field_addr;
74281 {
74285 }
74286#endif /* FREECIV_JSON_CONNECTION */
74287
74288#ifdef FREECIV_DELTA_PROTOCOL
74289#ifdef FREECIV_JSON_CONNECTION
74290 field_addr.name = "fields";
74291#endif /* FREECIV_JSON_CONNECTION */
74292 DIO_BV_GET(&din, &field_addr, fields);
74293
74294#else /* FREECIV_DELTA_PROTOCOL */
74295#ifdef FREECIV_JSON_CONNECTION
74296 field_addr.name = "token";
74297#endif /* FREECIV_JSON_CONNECTION */
74298 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
74300 }
74301#endif
74302 log_packet_detailed("packet_single_want_hack_req_100: got info about ()");
74303
74304#ifdef FREECIV_DELTA_PROTOCOL
74305 if (NULL == *hash) {
74307 NULL, NULL, NULL, free);
74308 }
74309
74310 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74311 *real_packet = *old;
74312 } else {
74313 log_packet_detailed(" no old info");
74314 memset(real_packet, 0, sizeof(*real_packet));
74315 }
74316
74317 if (BV_ISSET(fields, 0)) {
74318 log_packet_detailed(" got field 'token'");
74319#ifdef FREECIV_JSON_CONNECTION
74320 field_addr.name = "token";
74321#endif /* FREECIV_JSON_CONNECTION */
74322 if (!DIO_GET(string, &din, &field_addr, real_packet->token, sizeof(real_packet->token))) {
74324 }
74325 }
74326
74327 if (NULL == old) {
74328 old = fc_malloc(sizeof(*old));
74329 *old = *real_packet;
74330 genhash_insert(*hash, old, old);
74331 } else {
74332 *old = *real_packet;
74333 }
74334
74335#endif /* FREECIV_DELTA_PROTOCOL */
74337}
74338
74340{
74341 const struct packet_single_want_hack_req *real_packet = packet;
74342 int e;
74343#ifdef FREECIV_DELTA_PROTOCOL
74345 struct packet_single_want_hack_req *old;
74346 bool differ;
74347 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REQ;
74348#endif /* FREECIV_DELTA_PROTOCOL */
74350#ifdef FREECIV_JSON_CONNECTION
74351 struct plocation field_addr;
74352 {
74356 }
74357#endif /* FREECIV_JSON_CONNECTION */
74358
74359 log_packet_detailed("packet_single_want_hack_req_100: sending info about ()");
74360
74361#ifdef FREECIV_DELTA_PROTOCOL
74362 if (NULL == *hash) {
74364 NULL, NULL, NULL, free);
74365 }
74366 BV_CLR_ALL(fields);
74367
74368 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74369 old = fc_malloc(sizeof(*old));
74370 *old = *real_packet;
74371 genhash_insert(*hash, old, old);
74372 memset(old, 0, sizeof(*old));
74373 }
74374 differ = (strcmp(old->token, real_packet->token) != 0);
74375 if (differ) {
74376 BV_SET(fields, 0);
74377 }
74378
74379
74380#ifdef FREECIV_JSON_CONNECTION
74381 field_addr.name = "fields";
74382#endif /* FREECIV_JSON_CONNECTION */
74383 e = 0;
74384 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74385 if (e) {
74386 log_packet_detailed("fields bitvector error detected");
74387 }
74388
74389 if (BV_ISSET(fields, 0)) {
74390 log_packet_detailed(" field 'token' has changed");
74391#ifdef FREECIV_JSON_CONNECTION
74392 field_addr.name = "token";
74393#endif /* FREECIV_JSON_CONNECTION */
74394 e = 0;
74395 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
74396 if (e) {
74397 log_packet_detailed("'token' field error detected");
74398 }
74399 }
74400
74401 *old = *real_packet;
74402#endif /* FREECIV_DELTA_PROTOCOL */
74403#ifndef FREECIV_DELTA_PROTOCOL
74404#ifdef FREECIV_JSON_CONNECTION
74405 field_addr.name = "token";
74406#endif /* FREECIV_JSON_CONNECTION */
74407 e = 0;
74408 e |= DIO_PUT(string, &dout, &field_addr, real_packet->token);
74409 if (e) {
74410 log_packet_detailed("'token' field error detected");
74411 }
74412
74413#endif
74415}
74416
74418{
74419 if (!pc->used) {
74420 log_error("WARNING: trying to send data to the closed connection %s",
74422 return -1;
74423 }
74424 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet != NULL, -1,
74425 "Handler for PACKET_SINGLE_WANT_HACK_REQ not installed");
74426 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REQ].packet(pc, packet);
74427}
74428
74429#ifdef FREECIV_DELTA_PROTOCOL
74430#define hash_packet_single_want_hack_reply_100 hash_const
74431
74432#define cmp_packet_single_want_hack_reply_100 cmp_const
74433
74435#endif /* FREECIV_DELTA_PROTOCOL */
74436
74438{
74439#ifdef FREECIV_DELTA_PROTOCOL
74442 struct genhash **hash = pc->phs.received + PACKET_SINGLE_WANT_HACK_REPLY;
74443#endif /* FREECIV_DELTA_PROTOCOL */
74445#ifdef FREECIV_JSON_CONNECTION
74446 struct plocation field_addr;
74447 {
74451 }
74452#endif /* FREECIV_JSON_CONNECTION */
74453
74454#ifdef FREECIV_DELTA_PROTOCOL
74455#ifdef FREECIV_JSON_CONNECTION
74456 field_addr.name = "fields";
74457#endif /* FREECIV_JSON_CONNECTION */
74458 DIO_BV_GET(&din, &field_addr, fields);
74459
74460#else /* FREECIV_DELTA_PROTOCOL */
74461#ifdef FREECIV_JSON_CONNECTION
74462 field_addr.name = "you_have_hack";
74463#endif /* FREECIV_JSON_CONNECTION */
74464 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->you_have_hack)) {
74465 RECEIVE_PACKET_FIELD_ERROR(you_have_hack);
74466 }
74467#endif
74468 log_packet_detailed("packet_single_want_hack_reply_100: got info about ()");
74469
74470#ifdef FREECIV_DELTA_PROTOCOL
74471 if (NULL == *hash) {
74473 NULL, NULL, NULL, free);
74474 }
74475
74476 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74477 *real_packet = *old;
74478 } else {
74479 log_packet_detailed(" no old info");
74480 memset(real_packet, 0, sizeof(*real_packet));
74481 }
74482
74483 real_packet->you_have_hack = BV_ISSET(fields, 0);
74484
74485 if (NULL == old) {
74486 old = fc_malloc(sizeof(*old));
74487 *old = *real_packet;
74488 genhash_insert(*hash, old, old);
74489 } else {
74490 *old = *real_packet;
74491 }
74492
74493#endif /* FREECIV_DELTA_PROTOCOL */
74495}
74496
74498{
74499 const struct packet_single_want_hack_reply *real_packet = packet;
74500 int e;
74501#ifdef FREECIV_DELTA_PROTOCOL
74504 struct genhash **hash = pc->phs.sent + PACKET_SINGLE_WANT_HACK_REPLY;
74505#endif /* FREECIV_DELTA_PROTOCOL */
74507#ifdef FREECIV_JSON_CONNECTION
74508 struct plocation field_addr;
74509 {
74513 }
74514#endif /* FREECIV_JSON_CONNECTION */
74515
74516 log_packet_detailed("packet_single_want_hack_reply_100: sending info about ()");
74517
74518#ifdef FREECIV_DELTA_PROTOCOL
74519 if (NULL == *hash) {
74521 NULL, NULL, NULL, free);
74522 }
74523 BV_CLR_ALL(fields);
74524
74525 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74526 old = fc_malloc(sizeof(*old));
74527 *old = *real_packet;
74528 genhash_insert(*hash, old, old);
74529 memset(old, 0, sizeof(*old));
74530 }
74531 if (packet->you_have_hack) {
74532 BV_SET(fields, 0);
74533 }
74534
74535
74536#ifdef FREECIV_JSON_CONNECTION
74537 field_addr.name = "fields";
74538#endif /* FREECIV_JSON_CONNECTION */
74539 e = 0;
74540 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74541 if (e) {
74542 log_packet_detailed("fields bitvector error detected");
74543 }
74544
74545 /* field 0 is folded into the header */
74546
74547 *old = *real_packet;
74548#endif /* FREECIV_DELTA_PROTOCOL */
74549#ifndef FREECIV_DELTA_PROTOCOL
74550#ifdef FREECIV_JSON_CONNECTION
74551 field_addr.name = "you_have_hack";
74552#endif /* FREECIV_JSON_CONNECTION */
74553 e = 0;
74554 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->you_have_hack);
74555 if (e) {
74556 log_packet_detailed("'you_have_hack' field error detected");
74557 }
74558
74559#endif
74561}
74562
74564{
74565 if (!pc->used) {
74566 log_error("WARNING: trying to send data to the closed connection %s",
74568 return -1;
74569 }
74570 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet != NULL, -1,
74571 "Handler for PACKET_SINGLE_WANT_HACK_REPLY not installed");
74572 return pc->phs.handlers->send[PACKET_SINGLE_WANT_HACK_REPLY].packet(pc, packet);
74573}
74574
74575int dsend_packet_single_want_hack_reply(struct connection *pc, bool you_have_hack)
74576{
74577 struct packet_single_want_hack_reply packet, *real_packet = &packet;
74578
74580
74582}
74583
74584#ifdef FREECIV_DELTA_PROTOCOL
74585#define hash_packet_ruleset_choices_100 hash_const
74586
74587#define cmp_packet_ruleset_choices_100 cmp_const
74588
74590#endif /* FREECIV_DELTA_PROTOCOL */
74591
74593{
74594#ifdef FREECIV_DELTA_PROTOCOL
74596 struct packet_ruleset_choices *old;
74597 struct genhash **hash = pc->phs.received + PACKET_RULESET_CHOICES;
74598#endif /* FREECIV_DELTA_PROTOCOL */
74600#ifdef FREECIV_JSON_CONNECTION
74601 struct plocation field_addr;
74602 {
74606 }
74607#endif /* FREECIV_JSON_CONNECTION */
74608
74609#ifdef FREECIV_DELTA_PROTOCOL
74610#ifdef FREECIV_JSON_CONNECTION
74611 field_addr.name = "fields";
74612#endif /* FREECIV_JSON_CONNECTION */
74613 DIO_BV_GET(&din, &field_addr, fields);
74614
74615#else /* FREECIV_DELTA_PROTOCOL */
74616#ifdef FREECIV_JSON_CONNECTION
74617 field_addr.name = "ruleset_count";
74618#endif /* FREECIV_JSON_CONNECTION */
74619 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
74620 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
74621 }
74622#ifdef FREECIV_JSON_CONNECTION
74623 field_addr.name = "rulesets";
74624#endif /* FREECIV_JSON_CONNECTION */
74625 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
74626 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": truncation array");
74627 }
74628 {
74629 int i;
74630
74631#ifdef FREECIV_JSON_CONNECTION
74632 /* Enter array. */
74633 field_addr.sub_location = plocation_elem_new(0);
74634#endif /* FREECIV_JSON_CONNECTION */
74635
74636 for (i = 0; i < real_packet->ruleset_count; i++) {
74637#ifdef FREECIV_JSON_CONNECTION
74638 field_addr.sub_location->number = i;
74639#endif /* FREECIV_JSON_CONNECTION */
74640
74641 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
74643 }
74644 }
74645
74646#ifdef FREECIV_JSON_CONNECTION
74647 /* Exit array. */
74648 FC_FREE(field_addr.sub_location);
74649#endif /* FREECIV_JSON_CONNECTION */
74650 }
74651#endif
74652 log_packet_detailed("packet_ruleset_choices_100: got info about ()");
74653
74654#ifdef FREECIV_DELTA_PROTOCOL
74655 if (NULL == *hash) {
74657 NULL, NULL, NULL, free);
74658 }
74659
74660 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74661 *real_packet = *old;
74662 } else {
74663 log_packet_detailed(" no old info");
74664 memset(real_packet, 0, sizeof(*real_packet));
74665 }
74666
74667 if (BV_ISSET(fields, 0)) {
74668 log_packet_detailed(" got field 'ruleset_count'");
74669#ifdef FREECIV_JSON_CONNECTION
74670 field_addr.name = "ruleset_count";
74671#endif /* FREECIV_JSON_CONNECTION */
74672 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ruleset_count)) {
74673 RECEIVE_PACKET_FIELD_ERROR(ruleset_count);
74674 }
74675 }
74676 if (BV_ISSET(fields, 1)) {
74677 log_packet_detailed(" got field 'rulesets'");
74678#ifdef FREECIV_JSON_CONNECTION
74679 field_addr.name = "rulesets";
74680#endif /* FREECIV_JSON_CONNECTION */
74681 if (real_packet->ruleset_count > MAX_NUM_RULESETS) {
74682 RECEIVE_PACKET_FIELD_ERROR(rulesets, ": truncation array");
74683 }
74684 {
74685 int i;
74686
74687#ifdef FREECIV_JSON_CONNECTION
74688 /* Enter array. */
74689 field_addr.sub_location = plocation_elem_new(0);
74690#endif /* FREECIV_JSON_CONNECTION */
74691
74692 for (i = 0; i < real_packet->ruleset_count; i++) {
74693#ifdef FREECIV_JSON_CONNECTION
74694 field_addr.sub_location->number = i;
74695#endif /* FREECIV_JSON_CONNECTION */
74696
74697 if (!DIO_GET(string, &din, &field_addr, real_packet->rulesets[i], sizeof(real_packet->rulesets[i]))) {
74699 }
74700 }
74701
74702#ifdef FREECIV_JSON_CONNECTION
74703 /* Exit array. */
74704 FC_FREE(field_addr.sub_location);
74705#endif /* FREECIV_JSON_CONNECTION */
74706 }
74707 }
74708
74709 if (NULL == old) {
74710 old = fc_malloc(sizeof(*old));
74711 *old = *real_packet;
74712 genhash_insert(*hash, old, old);
74713 } else {
74714 *old = *real_packet;
74715 }
74716
74717#endif /* FREECIV_DELTA_PROTOCOL */
74719}
74720
74722{
74723 const struct packet_ruleset_choices *real_packet = packet;
74724 int e;
74725#ifdef FREECIV_DELTA_PROTOCOL
74727 struct packet_ruleset_choices *old;
74728 bool differ;
74729 struct genhash **hash = pc->phs.sent + PACKET_RULESET_CHOICES;
74730#endif /* FREECIV_DELTA_PROTOCOL */
74732#ifdef FREECIV_JSON_CONNECTION
74733 struct plocation field_addr;
74734 {
74738 }
74739#endif /* FREECIV_JSON_CONNECTION */
74740
74741 log_packet_detailed("packet_ruleset_choices_100: sending info about ()");
74742
74743#ifdef FREECIV_DELTA_PROTOCOL
74744 if (NULL == *hash) {
74746 NULL, NULL, NULL, free);
74747 }
74748 BV_CLR_ALL(fields);
74749
74750 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74751 old = fc_malloc(sizeof(*old));
74752 *old = *real_packet;
74753 genhash_insert(*hash, old, old);
74754 memset(old, 0, sizeof(*old));
74755 }
74756 differ = (old->ruleset_count != real_packet->ruleset_count);
74757 if (differ) {
74758 BV_SET(fields, 0);
74759 }
74760
74761 differ = (old->ruleset_count != real_packet->ruleset_count);
74762 if (!differ) {
74763 int i;
74764
74765 for (i = 0; i < real_packet->ruleset_count; i++) {
74766 differ = (strcmp(old->rulesets[i], real_packet->rulesets[i]) != 0);
74767 if (differ) {
74768 break;
74769 }
74770 }
74771 }
74772 if (differ) {
74773 BV_SET(fields, 1);
74774 }
74775
74776
74777#ifdef FREECIV_JSON_CONNECTION
74778 field_addr.name = "fields";
74779#endif /* FREECIV_JSON_CONNECTION */
74780 e = 0;
74781 e |= DIO_BV_PUT(&dout, &field_addr, fields);
74782 if (e) {
74783 log_packet_detailed("fields bitvector error detected");
74784 }
74785
74786 if (BV_ISSET(fields, 0)) {
74787 log_packet_detailed(" field 'ruleset_count' has changed");
74788#ifdef FREECIV_JSON_CONNECTION
74789 field_addr.name = "ruleset_count";
74790#endif /* FREECIV_JSON_CONNECTION */
74791 e = 0;
74792 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
74793 if (e) {
74794 log_packet_detailed("'ruleset_count' field error detected");
74795 }
74796 }
74797 if (BV_ISSET(fields, 1)) {
74798 log_packet_detailed(" field 'rulesets' has changed");
74799#ifdef FREECIV_JSON_CONNECTION
74800 field_addr.name = "rulesets";
74801#endif /* FREECIV_JSON_CONNECTION */
74802 e = 0;
74803 {
74804 int i;
74805
74806#ifdef FREECIV_JSON_CONNECTION
74807 /* Create the array. */
74808 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
74809
74810 /* Enter the array. */
74811 field_addr.sub_location = plocation_elem_new(0);
74812#endif /* FREECIV_JSON_CONNECTION */
74813
74814 for (i = 0; i < real_packet->ruleset_count; i++) {
74815#ifdef FREECIV_JSON_CONNECTION
74816 /* Next array element. */
74817 field_addr.sub_location->number = i;
74818#endif /* FREECIV_JSON_CONNECTION */
74819
74820 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
74821 }
74822
74823#ifdef FREECIV_JSON_CONNECTION
74824 /* Exit array. */
74825 FC_FREE(field_addr.sub_location);
74826#endif /* FREECIV_JSON_CONNECTION */
74827 }
74828 if (e) {
74829 log_packet_detailed("'rulesets' field error detected");
74830 }
74831 }
74832
74833 *old = *real_packet;
74834#endif /* FREECIV_DELTA_PROTOCOL */
74835#ifndef FREECIV_DELTA_PROTOCOL
74836#ifdef FREECIV_JSON_CONNECTION
74837 field_addr.name = "ruleset_count";
74838#endif /* FREECIV_JSON_CONNECTION */
74839 e = 0;
74840 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ruleset_count);
74841 if (e) {
74842 log_packet_detailed("'ruleset_count' field error detected");
74843 }
74844#ifdef FREECIV_JSON_CONNECTION
74845 field_addr.name = "rulesets";
74846#endif /* FREECIV_JSON_CONNECTION */
74847 e = 0;
74848 {
74849 int i;
74850
74851#ifdef FREECIV_JSON_CONNECTION
74852 /* Create the array. */
74853 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->ruleset_count);
74854
74855 /* Enter the array. */
74856 field_addr.sub_location = plocation_elem_new(0);
74857#endif /* FREECIV_JSON_CONNECTION */
74858
74859 for (i = 0; i < real_packet->ruleset_count; i++) {
74860#ifdef FREECIV_JSON_CONNECTION
74861 /* Next array element. */
74862 field_addr.sub_location->number = i;
74863#endif /* FREECIV_JSON_CONNECTION */
74864
74865 e |= DIO_PUT(string, &dout, &field_addr, real_packet->rulesets[i]);
74866 }
74867
74868#ifdef FREECIV_JSON_CONNECTION
74869 /* Exit array. */
74870 FC_FREE(field_addr.sub_location);
74871#endif /* FREECIV_JSON_CONNECTION */
74872 }
74873 if (e) {
74874 log_packet_detailed("'rulesets' field error detected");
74875 }
74876
74877#endif
74879}
74880
74882{
74883 if (!pc->used) {
74884 log_error("WARNING: trying to send data to the closed connection %s",
74886 return -1;
74887 }
74888 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet != NULL, -1,
74889 "Handler for PACKET_RULESET_CHOICES not installed");
74890 return pc->phs.handlers->send[PACKET_RULESET_CHOICES].packet(pc, packet);
74891}
74892
74893#ifdef FREECIV_DELTA_PROTOCOL
74894#define hash_packet_ruleset_select_100 hash_const
74895
74896#define cmp_packet_ruleset_select_100 cmp_const
74897
74899#endif /* FREECIV_DELTA_PROTOCOL */
74900
74902{
74903#ifdef FREECIV_DELTA_PROTOCOL
74905 struct packet_ruleset_select *old;
74906 struct genhash **hash = pc->phs.received + PACKET_RULESET_SELECT;
74907#endif /* FREECIV_DELTA_PROTOCOL */
74909#ifdef FREECIV_JSON_CONNECTION
74910 struct plocation field_addr;
74911 {
74915 }
74916#endif /* FREECIV_JSON_CONNECTION */
74917
74918#ifdef FREECIV_DELTA_PROTOCOL
74919#ifdef FREECIV_JSON_CONNECTION
74920 field_addr.name = "fields";
74921#endif /* FREECIV_JSON_CONNECTION */
74922 DIO_BV_GET(&din, &field_addr, fields);
74923
74924#else /* FREECIV_DELTA_PROTOCOL */
74925#ifdef FREECIV_JSON_CONNECTION
74926 field_addr.name = "modpack";
74927#endif /* FREECIV_JSON_CONNECTION */
74928 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
74930 }
74931#endif
74932 log_packet_detailed("packet_ruleset_select_100: got info about ()");
74933
74934#ifdef FREECIV_DELTA_PROTOCOL
74935 if (NULL == *hash) {
74937 NULL, NULL, NULL, free);
74938 }
74939
74940 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
74941 *real_packet = *old;
74942 } else {
74943 log_packet_detailed(" no old info");
74944 memset(real_packet, 0, sizeof(*real_packet));
74945 }
74946
74947 if (BV_ISSET(fields, 0)) {
74948 log_packet_detailed(" got field 'modpack'");
74949#ifdef FREECIV_JSON_CONNECTION
74950 field_addr.name = "modpack";
74951#endif /* FREECIV_JSON_CONNECTION */
74952 if (!DIO_GET(string, &din, &field_addr, real_packet->modpack, sizeof(real_packet->modpack))) {
74954 }
74955 }
74956
74957 if (NULL == old) {
74958 old = fc_malloc(sizeof(*old));
74959 *old = *real_packet;
74960 genhash_insert(*hash, old, old);
74961 } else {
74962 *old = *real_packet;
74963 }
74964
74965#endif /* FREECIV_DELTA_PROTOCOL */
74967}
74968
74970{
74971 const struct packet_ruleset_select *real_packet = packet;
74972 int e;
74973#ifdef FREECIV_DELTA_PROTOCOL
74975 struct packet_ruleset_select *old;
74976 bool differ;
74977 struct genhash **hash = pc->phs.sent + PACKET_RULESET_SELECT;
74978#endif /* FREECIV_DELTA_PROTOCOL */
74980#ifdef FREECIV_JSON_CONNECTION
74981 struct plocation field_addr;
74982 {
74986 }
74987#endif /* FREECIV_JSON_CONNECTION */
74988
74989 log_packet_detailed("packet_ruleset_select_100: sending info about ()");
74990
74991#ifdef FREECIV_DELTA_PROTOCOL
74992 if (NULL == *hash) {
74994 NULL, NULL, NULL, free);
74995 }
74996 BV_CLR_ALL(fields);
74997
74998 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
74999 old = fc_malloc(sizeof(*old));
75000 *old = *real_packet;
75001 genhash_insert(*hash, old, old);
75002 memset(old, 0, sizeof(*old));
75003 }
75004 differ = (strcmp(old->modpack, real_packet->modpack) != 0);
75005 if (differ) {
75006 BV_SET(fields, 0);
75007 }
75008
75009
75010#ifdef FREECIV_JSON_CONNECTION
75011 field_addr.name = "fields";
75012#endif /* FREECIV_JSON_CONNECTION */
75013 e = 0;
75014 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75015 if (e) {
75016 log_packet_detailed("fields bitvector error detected");
75017 }
75018
75019 if (BV_ISSET(fields, 0)) {
75020 log_packet_detailed(" field 'modpack' has changed");
75021#ifdef FREECIV_JSON_CONNECTION
75022 field_addr.name = "modpack";
75023#endif /* FREECIV_JSON_CONNECTION */
75024 e = 0;
75025 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
75026 if (e) {
75027 log_packet_detailed("'modpack' field error detected");
75028 }
75029 }
75030
75031 *old = *real_packet;
75032#endif /* FREECIV_DELTA_PROTOCOL */
75033#ifndef FREECIV_DELTA_PROTOCOL
75034#ifdef FREECIV_JSON_CONNECTION
75035 field_addr.name = "modpack";
75036#endif /* FREECIV_JSON_CONNECTION */
75037 e = 0;
75038 e |= DIO_PUT(string, &dout, &field_addr, real_packet->modpack);
75039 if (e) {
75040 log_packet_detailed("'modpack' field error detected");
75041 }
75042
75043#endif
75045}
75046
75048{
75049 if (!pc->used) {
75050 log_error("WARNING: trying to send data to the closed connection %s",
75052 return -1;
75053 }
75054 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_SELECT].packet != NULL, -1,
75055 "Handler for PACKET_RULESET_SELECT not installed");
75056 return pc->phs.handlers->send[PACKET_RULESET_SELECT].packet(pc, packet);
75057}
75058
75059#ifdef FREECIV_DELTA_PROTOCOL
75060#define hash_packet_game_load_100 hash_const
75061
75062#define cmp_packet_game_load_100 cmp_const
75063
75065#endif /* FREECIV_DELTA_PROTOCOL */
75066
75068{
75069#ifdef FREECIV_DELTA_PROTOCOL
75071 struct packet_game_load *old;
75072 struct genhash **hash = pc->phs.received + PACKET_GAME_LOAD;
75073#endif /* FREECIV_DELTA_PROTOCOL */
75075#ifdef FREECIV_JSON_CONNECTION
75076 struct plocation field_addr;
75077 {
75081 }
75082#endif /* FREECIV_JSON_CONNECTION */
75083
75084#ifdef FREECIV_DELTA_PROTOCOL
75085#ifdef FREECIV_JSON_CONNECTION
75086 field_addr.name = "fields";
75087#endif /* FREECIV_JSON_CONNECTION */
75088 DIO_BV_GET(&din, &field_addr, fields);
75089
75090#else /* FREECIV_DELTA_PROTOCOL */
75091#ifdef FREECIV_JSON_CONNECTION
75092 field_addr.name = "load_successful";
75093#endif /* FREECIV_JSON_CONNECTION */
75094 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->load_successful)) {
75095 RECEIVE_PACKET_FIELD_ERROR(load_successful);
75096 }
75097#ifdef FREECIV_JSON_CONNECTION
75098 field_addr.name = "load_filename";
75099#endif /* FREECIV_JSON_CONNECTION */
75100 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
75102 }
75103#endif
75104 log_packet_detailed("packet_game_load_100: got info about ()");
75105
75106#ifdef FREECIV_DELTA_PROTOCOL
75107 if (NULL == *hash) {
75109 NULL, NULL, NULL, free);
75110 }
75111
75112 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75113 *real_packet = *old;
75114 } else {
75115 log_packet_detailed(" no old info");
75116 memset(real_packet, 0, sizeof(*real_packet));
75117 }
75118
75119 real_packet->load_successful = BV_ISSET(fields, 0);
75120 if (BV_ISSET(fields, 1)) {
75121 log_packet_detailed(" got field 'load_filename'");
75122#ifdef FREECIV_JSON_CONNECTION
75123 field_addr.name = "load_filename";
75124#endif /* FREECIV_JSON_CONNECTION */
75125 if (!DIO_GET(string, &din, &field_addr, real_packet->load_filename, sizeof(real_packet->load_filename))) {
75127 }
75128 }
75129
75130 if (NULL == old) {
75131 old = fc_malloc(sizeof(*old));
75132 *old = *real_packet;
75133 genhash_insert(*hash, old, old);
75134 } else {
75135 *old = *real_packet;
75136 }
75137
75138#endif /* FREECIV_DELTA_PROTOCOL */
75140}
75141
75142static int send_packet_game_load_100(struct connection *pc, const struct packet_game_load *packet)
75143{
75144 const struct packet_game_load *real_packet = packet;
75145 int e;
75146#ifdef FREECIV_DELTA_PROTOCOL
75148 struct packet_game_load *old;
75149 bool differ;
75150 struct genhash **hash = pc->phs.sent + PACKET_GAME_LOAD;
75151#endif /* FREECIV_DELTA_PROTOCOL */
75153#ifdef FREECIV_JSON_CONNECTION
75154 struct plocation field_addr;
75155 {
75159 }
75160#endif /* FREECIV_JSON_CONNECTION */
75161
75162 log_packet_detailed("packet_game_load_100: sending info about ()");
75163
75164#ifdef FREECIV_DELTA_PROTOCOL
75165 if (NULL == *hash) {
75167 NULL, NULL, NULL, free);
75168 }
75169 BV_CLR_ALL(fields);
75170
75171 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75172 old = fc_malloc(sizeof(*old));
75173 *old = *real_packet;
75174 genhash_insert(*hash, old, old);
75175 memset(old, 0, sizeof(*old));
75176 }
75177 if (packet->load_successful) {
75178 BV_SET(fields, 0);
75179 }
75180
75181 differ = (strcmp(old->load_filename, real_packet->load_filename) != 0);
75182 if (differ) {
75183 BV_SET(fields, 1);
75184 }
75185
75186
75187#ifdef FREECIV_JSON_CONNECTION
75188 field_addr.name = "fields";
75189#endif /* FREECIV_JSON_CONNECTION */
75190 e = 0;
75191 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75192 if (e) {
75193 log_packet_detailed("fields bitvector error detected");
75194 }
75195
75196 /* field 0 is folded into the header */
75197 if (BV_ISSET(fields, 1)) {
75198 log_packet_detailed(" field 'load_filename' has changed");
75199#ifdef FREECIV_JSON_CONNECTION
75200 field_addr.name = "load_filename";
75201#endif /* FREECIV_JSON_CONNECTION */
75202 e = 0;
75203 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
75204 if (e) {
75205 log_packet_detailed("'load_filename' field error detected");
75206 }
75207 }
75208
75209 *old = *real_packet;
75210#endif /* FREECIV_DELTA_PROTOCOL */
75211#ifndef FREECIV_DELTA_PROTOCOL
75212#ifdef FREECIV_JSON_CONNECTION
75213 field_addr.name = "load_successful";
75214#endif /* FREECIV_JSON_CONNECTION */
75215 e = 0;
75216 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->load_successful);
75217 if (e) {
75218 log_packet_detailed("'load_successful' field error detected");
75219 }
75220#ifdef FREECIV_JSON_CONNECTION
75221 field_addr.name = "load_filename";
75222#endif /* FREECIV_JSON_CONNECTION */
75223 e = 0;
75224 e |= DIO_PUT(string, &dout, &field_addr, real_packet->load_filename);
75225 if (e) {
75226 log_packet_detailed("'load_filename' field error detected");
75227 }
75228
75229#endif
75231}
75232
75233int send_packet_game_load(struct connection *pc, const struct packet_game_load *packet)
75234{
75235 if (!pc->used) {
75236 log_error("WARNING: trying to send data to the closed connection %s",
75238 return -1;
75239 }
75240 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_GAME_LOAD].packet != NULL, -1,
75241 "Handler for PACKET_GAME_LOAD not installed");
75242 return pc->phs.handlers->send[PACKET_GAME_LOAD].packet(pc, packet);
75243}
75244
75245void lsend_packet_game_load(struct conn_list *dest, const struct packet_game_load *packet)
75246{
75247 conn_list_iterate(dest, pconn) {
75250}
75251
75252int dsend_packet_game_load(struct connection *pc, bool load_successful, const char *load_filename)
75253{
75254 struct packet_game_load packet, *real_packet = &packet;
75255
75257 sz_strlcpy(real_packet->load_filename, load_filename);
75258
75260}
75261
75263{
75264 struct packet_game_load packet, *real_packet = &packet;
75265
75267 sz_strlcpy(real_packet->load_filename, load_filename);
75268
75270}
75271
75272#ifdef FREECIV_DELTA_PROTOCOL
75273#define hash_packet_server_setting_control_100 hash_const
75274
75275#define cmp_packet_server_setting_control_100 cmp_const
75276
75278#endif /* FREECIV_DELTA_PROTOCOL */
75279
75281{
75282#ifdef FREECIV_DELTA_PROTOCOL
75285 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONTROL;
75286#endif /* FREECIV_DELTA_PROTOCOL */
75288#ifdef FREECIV_JSON_CONNECTION
75289 struct plocation field_addr;
75290 {
75294 }
75295#endif /* FREECIV_JSON_CONNECTION */
75296
75297#ifdef FREECIV_DELTA_PROTOCOL
75298#ifdef FREECIV_JSON_CONNECTION
75299 field_addr.name = "fields";
75300#endif /* FREECIV_JSON_CONNECTION */
75301 DIO_BV_GET(&din, &field_addr, fields);
75302
75303#else /* FREECIV_DELTA_PROTOCOL */
75304#ifdef FREECIV_JSON_CONNECTION
75305 field_addr.name = "settings_num";
75306#endif /* FREECIV_JSON_CONNECTION */
75307 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
75308 RECEIVE_PACKET_FIELD_ERROR(settings_num);
75309 }
75310#ifdef FREECIV_JSON_CONNECTION
75311 field_addr.name = "categories_num";
75312#endif /* FREECIV_JSON_CONNECTION */
75313 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
75314 RECEIVE_PACKET_FIELD_ERROR(categories_num);
75315 }
75316#ifdef FREECIV_JSON_CONNECTION
75317 field_addr.name = "category_names";
75318#endif /* FREECIV_JSON_CONNECTION */
75319 if (real_packet->categories_num > 256) {
75320 RECEIVE_PACKET_FIELD_ERROR(category_names, ": truncation array");
75321 }
75322 {
75323 int i;
75324
75325#ifdef FREECIV_JSON_CONNECTION
75326 /* Enter array. */
75327 field_addr.sub_location = plocation_elem_new(0);
75328#endif /* FREECIV_JSON_CONNECTION */
75329
75330 for (i = 0; i < real_packet->categories_num; i++) {
75331#ifdef FREECIV_JSON_CONNECTION
75332 field_addr.sub_location->number = i;
75333#endif /* FREECIV_JSON_CONNECTION */
75334
75335 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
75336 RECEIVE_PACKET_FIELD_ERROR(category_names);
75337 }
75338 }
75339
75340#ifdef FREECIV_JSON_CONNECTION
75341 /* Exit array. */
75342 FC_FREE(field_addr.sub_location);
75343#endif /* FREECIV_JSON_CONNECTION */
75344 }
75345#endif
75346 log_packet_detailed("packet_server_setting_control_100: got info about ()");
75347
75348#ifdef FREECIV_DELTA_PROTOCOL
75349 if (NULL == *hash) {
75351 NULL, NULL, NULL, free);
75352 }
75353
75354 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75355 *real_packet = *old;
75356 } else {
75357 log_packet_detailed(" no old info");
75358 memset(real_packet, 0, sizeof(*real_packet));
75359 }
75360
75361 if (BV_ISSET(fields, 0)) {
75362 log_packet_detailed(" got field 'settings_num'");
75363#ifdef FREECIV_JSON_CONNECTION
75364 field_addr.name = "settings_num";
75365#endif /* FREECIV_JSON_CONNECTION */
75366 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->settings_num)) {
75367 RECEIVE_PACKET_FIELD_ERROR(settings_num);
75368 }
75369 }
75370 if (BV_ISSET(fields, 1)) {
75371 log_packet_detailed(" got field 'categories_num'");
75372#ifdef FREECIV_JSON_CONNECTION
75373 field_addr.name = "categories_num";
75374#endif /* FREECIV_JSON_CONNECTION */
75375 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->categories_num)) {
75376 RECEIVE_PACKET_FIELD_ERROR(categories_num);
75377 }
75378 }
75379 if (BV_ISSET(fields, 2)) {
75380 log_packet_detailed(" got field 'category_names'");
75381#ifdef FREECIV_JSON_CONNECTION
75382 field_addr.name = "category_names";
75383#endif /* FREECIV_JSON_CONNECTION */
75384 if (real_packet->categories_num > 256) {
75385 RECEIVE_PACKET_FIELD_ERROR(category_names, ": truncation array");
75386 }
75387 {
75388 int i;
75389
75390#ifdef FREECIV_JSON_CONNECTION
75391 /* Enter array. */
75392 field_addr.sub_location = plocation_elem_new(0);
75393#endif /* FREECIV_JSON_CONNECTION */
75394
75395 for (i = 0; i < real_packet->categories_num; i++) {
75396#ifdef FREECIV_JSON_CONNECTION
75397 field_addr.sub_location->number = i;
75398#endif /* FREECIV_JSON_CONNECTION */
75399
75400 if (!DIO_GET(string, &din, &field_addr, real_packet->category_names[i], sizeof(real_packet->category_names[i]))) {
75401 RECEIVE_PACKET_FIELD_ERROR(category_names);
75402 }
75403 }
75404
75405#ifdef FREECIV_JSON_CONNECTION
75406 /* Exit array. */
75407 FC_FREE(field_addr.sub_location);
75408#endif /* FREECIV_JSON_CONNECTION */
75409 }
75410 }
75411
75412 if (NULL == old) {
75413 old = fc_malloc(sizeof(*old));
75414 *old = *real_packet;
75415 genhash_insert(*hash, old, old);
75416 } else {
75417 *old = *real_packet;
75418 }
75419
75420#endif /* FREECIV_DELTA_PROTOCOL */
75422}
75423
75425{
75426 const struct packet_server_setting_control *real_packet = packet;
75427 int e;
75428#ifdef FREECIV_DELTA_PROTOCOL
75431 bool differ;
75432 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONTROL;
75433 int different = 0;
75434#endif /* FREECIV_DELTA_PROTOCOL */
75436#ifdef FREECIV_JSON_CONNECTION
75437 struct plocation field_addr;
75438 {
75442 }
75443#endif /* FREECIV_JSON_CONNECTION */
75444
75445 log_packet_detailed("packet_server_setting_control_100: sending info about ()");
75446
75447#ifdef FREECIV_DELTA_PROTOCOL
75448 if (NULL == *hash) {
75450 NULL, NULL, NULL, free);
75451 }
75452 BV_CLR_ALL(fields);
75453
75454 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75455 old = fc_malloc(sizeof(*old));
75456 *old = *real_packet;
75457 genhash_insert(*hash, old, old);
75458 memset(old, 0, sizeof(*old));
75459 different = 1; /* Force to send. */
75460 }
75461 differ = (old->settings_num != real_packet->settings_num);
75462 if (differ) {
75463 different++;
75464 BV_SET(fields, 0);
75465 }
75466
75467 differ = (old->categories_num != real_packet->categories_num);
75468 if (differ) {
75469 different++;
75470 BV_SET(fields, 1);
75471 }
75472
75473 differ = (old->categories_num != real_packet->categories_num);
75474 if (!differ) {
75475 int i;
75476
75477 for (i = 0; i < real_packet->categories_num; i++) {
75478 differ = (strcmp(old->category_names[i], real_packet->category_names[i]) != 0);
75479 if (differ) {
75480 break;
75481 }
75482 }
75483 }
75484 if (differ) {
75485 different++;
75486 BV_SET(fields, 2);
75487 }
75488
75489 if (different == 0) {
75490 log_packet_detailed(" no change -> discard");
75492 }
75493
75494#ifdef FREECIV_JSON_CONNECTION
75495 field_addr.name = "fields";
75496#endif /* FREECIV_JSON_CONNECTION */
75497 e = 0;
75498 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75499 if (e) {
75500 log_packet_detailed("fields bitvector error detected");
75501 }
75502
75503 if (BV_ISSET(fields, 0)) {
75504 log_packet_detailed(" field 'settings_num' has changed");
75505#ifdef FREECIV_JSON_CONNECTION
75506 field_addr.name = "settings_num";
75507#endif /* FREECIV_JSON_CONNECTION */
75508 e = 0;
75509 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
75510 if (e) {
75511 log_packet_detailed("'settings_num' field error detected");
75512 }
75513 }
75514 if (BV_ISSET(fields, 1)) {
75515 log_packet_detailed(" field 'categories_num' has changed");
75516#ifdef FREECIV_JSON_CONNECTION
75517 field_addr.name = "categories_num";
75518#endif /* FREECIV_JSON_CONNECTION */
75519 e = 0;
75520 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
75521 if (e) {
75522 log_packet_detailed("'categories_num' field error detected");
75523 }
75524 }
75525 if (BV_ISSET(fields, 2)) {
75526 log_packet_detailed(" field 'category_names' has changed");
75527#ifdef FREECIV_JSON_CONNECTION
75528 field_addr.name = "category_names";
75529#endif /* FREECIV_JSON_CONNECTION */
75530 e = 0;
75531 {
75532 int i;
75533
75534#ifdef FREECIV_JSON_CONNECTION
75535 /* Create the array. */
75536 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
75537
75538 /* Enter the array. */
75539 field_addr.sub_location = plocation_elem_new(0);
75540#endif /* FREECIV_JSON_CONNECTION */
75541
75542 for (i = 0; i < real_packet->categories_num; i++) {
75543#ifdef FREECIV_JSON_CONNECTION
75544 /* Next array element. */
75545 field_addr.sub_location->number = i;
75546#endif /* FREECIV_JSON_CONNECTION */
75547
75548 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
75549 }
75550
75551#ifdef FREECIV_JSON_CONNECTION
75552 /* Exit array. */
75553 FC_FREE(field_addr.sub_location);
75554#endif /* FREECIV_JSON_CONNECTION */
75555 }
75556 if (e) {
75557 log_packet_detailed("'category_names' field error detected");
75558 }
75559 }
75560
75561 *old = *real_packet;
75562#endif /* FREECIV_DELTA_PROTOCOL */
75563#ifndef FREECIV_DELTA_PROTOCOL
75564#ifdef FREECIV_JSON_CONNECTION
75565 field_addr.name = "settings_num";
75566#endif /* FREECIV_JSON_CONNECTION */
75567 e = 0;
75568 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->settings_num);
75569 if (e) {
75570 log_packet_detailed("'settings_num' field error detected");
75571 }
75572#ifdef FREECIV_JSON_CONNECTION
75573 field_addr.name = "categories_num";
75574#endif /* FREECIV_JSON_CONNECTION */
75575 e = 0;
75576 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->categories_num);
75577 if (e) {
75578 log_packet_detailed("'categories_num' field error detected");
75579 }
75580#ifdef FREECIV_JSON_CONNECTION
75581 field_addr.name = "category_names";
75582#endif /* FREECIV_JSON_CONNECTION */
75583 e = 0;
75584 {
75585 int i;
75586
75587#ifdef FREECIV_JSON_CONNECTION
75588 /* Create the array. */
75589 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->categories_num);
75590
75591 /* Enter the array. */
75592 field_addr.sub_location = plocation_elem_new(0);
75593#endif /* FREECIV_JSON_CONNECTION */
75594
75595 for (i = 0; i < real_packet->categories_num; i++) {
75596#ifdef FREECIV_JSON_CONNECTION
75597 /* Next array element. */
75598 field_addr.sub_location->number = i;
75599#endif /* FREECIV_JSON_CONNECTION */
75600
75601 e |= DIO_PUT(string, &dout, &field_addr, real_packet->category_names[i]);
75602 }
75603
75604#ifdef FREECIV_JSON_CONNECTION
75605 /* Exit array. */
75606 FC_FREE(field_addr.sub_location);
75607#endif /* FREECIV_JSON_CONNECTION */
75608 }
75609 if (e) {
75610 log_packet_detailed("'category_names' field error detected");
75611 }
75612
75613#endif
75615}
75616
75618{
75619 if (!pc->used) {
75620 log_error("WARNING: trying to send data to the closed connection %s",
75622 return -1;
75623 }
75624 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet != NULL, -1,
75625 "Handler for PACKET_SERVER_SETTING_CONTROL not installed");
75626 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONTROL].packet(pc, packet);
75627}
75628
75629#ifdef FREECIV_DELTA_PROTOCOL
75631{
75632 const struct packet_server_setting_const *key = (const struct packet_server_setting_const *) vkey;
75633 genhash_val_t result = 0;
75634
75635 result += key->id;
75636
75637 result &= 0xFFFFFFFF;
75638 return result;
75639}
75640
75641static bool cmp_packet_server_setting_const_100(const void *vkey1, const void *vkey2)
75642{
75643 const struct packet_server_setting_const *old = (const struct packet_server_setting_const *) vkey1;
75645 bool differ;
75646
75647 differ = (old->id != real_packet->id);
75648
75649 return !differ;
75650}
75652#endif /* FREECIV_DELTA_PROTOCOL */
75653
75655{
75656#ifdef FREECIV_DELTA_PROTOCOL
75658 struct packet_server_setting_const *old;
75659 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_CONST;
75660#endif /* FREECIV_DELTA_PROTOCOL */
75662#ifdef FREECIV_JSON_CONNECTION
75663 struct plocation field_addr;
75664 {
75668 }
75669#endif /* FREECIV_JSON_CONNECTION */
75670
75671#ifdef FREECIV_DELTA_PROTOCOL
75672#ifdef FREECIV_JSON_CONNECTION
75673 field_addr.name = "fields";
75674#endif /* FREECIV_JSON_CONNECTION */
75675 DIO_BV_GET(&din, &field_addr, fields);
75676#ifdef FREECIV_JSON_CONNECTION
75677 field_addr.name = "id";
75678#endif /* FREECIV_JSON_CONNECTION */
75679 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
75681 }
75682
75683#else /* FREECIV_DELTA_PROTOCOL */
75684#ifdef FREECIV_JSON_CONNECTION
75685 field_addr.name = "id";
75686#endif /* FREECIV_JSON_CONNECTION */
75687 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
75689 }
75690#ifdef FREECIV_JSON_CONNECTION
75691 field_addr.name = "name";
75692#endif /* FREECIV_JSON_CONNECTION */
75693 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75695 }
75696#ifdef FREECIV_JSON_CONNECTION
75697 field_addr.name = "short_help";
75698#endif /* FREECIV_JSON_CONNECTION */
75699 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
75700 RECEIVE_PACKET_FIELD_ERROR(short_help);
75701 }
75702#ifdef FREECIV_JSON_CONNECTION
75703 field_addr.name = "extra_help";
75704#endif /* FREECIV_JSON_CONNECTION */
75705 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
75706 RECEIVE_PACKET_FIELD_ERROR(extra_help);
75707 }
75708#ifdef FREECIV_JSON_CONNECTION
75709 field_addr.name = "category";
75710#endif /* FREECIV_JSON_CONNECTION */
75711 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
75713 }
75714#endif
75715 log_packet_detailed("packet_server_setting_const_100: got info about (%d)",
75716 real_packet->id);
75717
75718#ifdef FREECIV_DELTA_PROTOCOL
75719 if (NULL == *hash) {
75721 NULL, NULL, NULL, free);
75722 }
75723
75724 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
75725 *real_packet = *old;
75726 } else {
75727 int id;
75728
75729 id = real_packet->id;
75730
75731 log_packet_detailed(" no old info");
75732 memset(real_packet, 0, sizeof(*real_packet));
75733
75734 real_packet->id = id;
75735 }
75736
75737 if (BV_ISSET(fields, 0)) {
75738 log_packet_detailed(" got field 'name'");
75739#ifdef FREECIV_JSON_CONNECTION
75740 field_addr.name = "name";
75741#endif /* FREECIV_JSON_CONNECTION */
75742 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
75744 }
75745 }
75746 if (BV_ISSET(fields, 1)) {
75747 log_packet_detailed(" got field 'short_help'");
75748#ifdef FREECIV_JSON_CONNECTION
75749 field_addr.name = "short_help";
75750#endif /* FREECIV_JSON_CONNECTION */
75751 if (!DIO_GET(string, &din, &field_addr, real_packet->short_help, sizeof(real_packet->short_help))) {
75752 RECEIVE_PACKET_FIELD_ERROR(short_help);
75753 }
75754 }
75755 if (BV_ISSET(fields, 2)) {
75756 log_packet_detailed(" got field 'extra_help'");
75757#ifdef FREECIV_JSON_CONNECTION
75758 field_addr.name = "extra_help";
75759#endif /* FREECIV_JSON_CONNECTION */
75760 if (!DIO_GET(string, &din, &field_addr, real_packet->extra_help, sizeof(real_packet->extra_help))) {
75761 RECEIVE_PACKET_FIELD_ERROR(extra_help);
75762 }
75763 }
75764 if (BV_ISSET(fields, 3)) {
75765 log_packet_detailed(" got field 'category'");
75766#ifdef FREECIV_JSON_CONNECTION
75767 field_addr.name = "category";
75768#endif /* FREECIV_JSON_CONNECTION */
75769 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->category)) {
75771 }
75772 }
75773
75774 if (NULL == old) {
75775 old = fc_malloc(sizeof(*old));
75776 *old = *real_packet;
75777 genhash_insert(*hash, old, old);
75778 } else {
75779 *old = *real_packet;
75780 }
75781
75782#endif /* FREECIV_DELTA_PROTOCOL */
75784}
75785
75787{
75788 const struct packet_server_setting_const *real_packet = packet;
75789 int e;
75790#ifdef FREECIV_DELTA_PROTOCOL
75792 struct packet_server_setting_const *old;
75793 bool differ;
75794 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_CONST;
75795 int different = 0;
75796#endif /* FREECIV_DELTA_PROTOCOL */
75798#ifdef FREECIV_JSON_CONNECTION
75799 struct plocation field_addr;
75800 {
75804 }
75805#endif /* FREECIV_JSON_CONNECTION */
75806
75807 log_packet_detailed("packet_server_setting_const_100: sending info about (%d)",
75808 real_packet->id);
75809
75810#ifdef FREECIV_DELTA_PROTOCOL
75811 if (NULL == *hash) {
75813 NULL, NULL, NULL, free);
75814 }
75815 BV_CLR_ALL(fields);
75816
75817 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
75818 old = fc_malloc(sizeof(*old));
75819 *old = *real_packet;
75820 genhash_insert(*hash, old, old);
75821 memset(old, 0, sizeof(*old));
75822 different = 1; /* Force to send. */
75823 }
75824 differ = (strcmp(old->name, real_packet->name) != 0);
75825 if (differ) {
75826 different++;
75827 BV_SET(fields, 0);
75828 }
75829
75830 differ = (strcmp(old->short_help, real_packet->short_help) != 0);
75831 if (differ) {
75832 different++;
75833 BV_SET(fields, 1);
75834 }
75835
75836 differ = (strcmp(old->extra_help, real_packet->extra_help) != 0);
75837 if (differ) {
75838 different++;
75839 BV_SET(fields, 2);
75840 }
75841
75842 differ = (old->category != real_packet->category);
75843 if (differ) {
75844 different++;
75845 BV_SET(fields, 3);
75846 }
75847
75848 if (different == 0) {
75849 log_packet_detailed(" no change -> discard");
75851 }
75852
75853#ifdef FREECIV_JSON_CONNECTION
75854 field_addr.name = "fields";
75855#endif /* FREECIV_JSON_CONNECTION */
75856 e = 0;
75857 e |= DIO_BV_PUT(&dout, &field_addr, fields);
75858 if (e) {
75859 log_packet_detailed("fields bitvector error detected");
75860 }
75861#ifdef FREECIV_JSON_CONNECTION
75862 field_addr.name = "id";
75863#endif /* FREECIV_JSON_CONNECTION */
75864 e = 0;
75865 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
75866 if (e) {
75867 log_packet_detailed("'id' field error detected");
75868 }
75869
75870 if (BV_ISSET(fields, 0)) {
75871 log_packet_detailed(" field 'name' has changed");
75872#ifdef FREECIV_JSON_CONNECTION
75873 field_addr.name = "name";
75874#endif /* FREECIV_JSON_CONNECTION */
75875 e = 0;
75876 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75877 if (e) {
75878 log_packet_detailed("'name' field error detected");
75879 }
75880 }
75881 if (BV_ISSET(fields, 1)) {
75882 log_packet_detailed(" field 'short_help' has changed");
75883#ifdef FREECIV_JSON_CONNECTION
75884 field_addr.name = "short_help";
75885#endif /* FREECIV_JSON_CONNECTION */
75886 e = 0;
75887 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
75888 if (e) {
75889 log_packet_detailed("'short_help' field error detected");
75890 }
75891 }
75892 if (BV_ISSET(fields, 2)) {
75893 log_packet_detailed(" field 'extra_help' has changed");
75894#ifdef FREECIV_JSON_CONNECTION
75895 field_addr.name = "extra_help";
75896#endif /* FREECIV_JSON_CONNECTION */
75897 e = 0;
75898 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
75899 if (e) {
75900 log_packet_detailed("'extra_help' field error detected");
75901 }
75902 }
75903 if (BV_ISSET(fields, 3)) {
75904 log_packet_detailed(" field 'category' has changed");
75905#ifdef FREECIV_JSON_CONNECTION
75906 field_addr.name = "category";
75907#endif /* FREECIV_JSON_CONNECTION */
75908 e = 0;
75909 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
75910 if (e) {
75911 log_packet_detailed("'category' field error detected");
75912 }
75913 }
75914
75915 *old = *real_packet;
75916#endif /* FREECIV_DELTA_PROTOCOL */
75917#ifndef FREECIV_DELTA_PROTOCOL
75918#ifdef FREECIV_JSON_CONNECTION
75919 field_addr.name = "id";
75920#endif /* FREECIV_JSON_CONNECTION */
75921 e = 0;
75922 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
75923 if (e) {
75924 log_packet_detailed("'id' field error detected");
75925 }
75926#ifdef FREECIV_JSON_CONNECTION
75927 field_addr.name = "name";
75928#endif /* FREECIV_JSON_CONNECTION */
75929 e = 0;
75930 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
75931 if (e) {
75932 log_packet_detailed("'name' field error detected");
75933 }
75934#ifdef FREECIV_JSON_CONNECTION
75935 field_addr.name = "short_help";
75936#endif /* FREECIV_JSON_CONNECTION */
75937 e = 0;
75938 e |= DIO_PUT(string, &dout, &field_addr, real_packet->short_help);
75939 if (e) {
75940 log_packet_detailed("'short_help' field error detected");
75941 }
75942#ifdef FREECIV_JSON_CONNECTION
75943 field_addr.name = "extra_help";
75944#endif /* FREECIV_JSON_CONNECTION */
75945 e = 0;
75946 e |= DIO_PUT(string, &dout, &field_addr, real_packet->extra_help);
75947 if (e) {
75948 log_packet_detailed("'extra_help' field error detected");
75949 }
75950#ifdef FREECIV_JSON_CONNECTION
75951 field_addr.name = "category";
75952#endif /* FREECIV_JSON_CONNECTION */
75953 e = 0;
75954 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->category);
75955 if (e) {
75956 log_packet_detailed("'category' field error detected");
75957 }
75958
75959#endif
75961}
75962
75964{
75965 if (!pc->used) {
75966 log_error("WARNING: trying to send data to the closed connection %s",
75968 return -1;
75969 }
75970 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet != NULL, -1,
75971 "Handler for PACKET_SERVER_SETTING_CONST not installed");
75972 return pc->phs.handlers->send[PACKET_SERVER_SETTING_CONST].packet(pc, packet);
75973}
75974
75975#ifdef FREECIV_DELTA_PROTOCOL
75977{
75978 const struct packet_server_setting_bool *key = (const struct packet_server_setting_bool *) vkey;
75979 genhash_val_t result = 0;
75980
75981 result += key->id;
75982
75983 result &= 0xFFFFFFFF;
75984 return result;
75985}
75986
75987static bool cmp_packet_server_setting_bool_100(const void *vkey1, const void *vkey2)
75988{
75989 const struct packet_server_setting_bool *old = (const struct packet_server_setting_bool *) vkey1;
75991 bool differ;
75992
75993 differ = (old->id != real_packet->id);
75994
75995 return !differ;
75996}
75998#endif /* FREECIV_DELTA_PROTOCOL */
75999
76001{
76002#ifdef FREECIV_DELTA_PROTOCOL
76004 struct packet_server_setting_bool *old;
76005 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BOOL;
76006#endif /* FREECIV_DELTA_PROTOCOL */
76008#ifdef FREECIV_JSON_CONNECTION
76009 struct plocation field_addr;
76010 {
76014 }
76015#endif /* FREECIV_JSON_CONNECTION */
76016
76017#ifdef FREECIV_DELTA_PROTOCOL
76018#ifdef FREECIV_JSON_CONNECTION
76019 field_addr.name = "fields";
76020#endif /* FREECIV_JSON_CONNECTION */
76021 DIO_BV_GET(&din, &field_addr, fields);
76022#ifdef FREECIV_JSON_CONNECTION
76023 field_addr.name = "id";
76024#endif /* FREECIV_JSON_CONNECTION */
76025 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
76027 }
76028
76029#else /* FREECIV_DELTA_PROTOCOL */
76030#ifdef FREECIV_JSON_CONNECTION
76031 field_addr.name = "id";
76032#endif /* FREECIV_JSON_CONNECTION */
76033 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
76035 }
76036#ifdef FREECIV_JSON_CONNECTION
76037 field_addr.name = "is_visible";
76038#endif /* FREECIV_JSON_CONNECTION */
76039 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
76040 RECEIVE_PACKET_FIELD_ERROR(is_visible);
76041 }
76042#ifdef FREECIV_JSON_CONNECTION
76043 field_addr.name = "is_changeable";
76044#endif /* FREECIV_JSON_CONNECTION */
76045 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
76046 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
76047 }
76048#ifdef FREECIV_JSON_CONNECTION
76049 field_addr.name = "initial_setting";
76050#endif /* FREECIV_JSON_CONNECTION */
76051 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
76052 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
76053 }
76054#ifdef FREECIV_JSON_CONNECTION
76055 field_addr.name = "setdef";
76056#endif /* FREECIV_JSON_CONNECTION */
76057 {
76058 int readin;
76059
76060 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76062 }
76063 real_packet->setdef = readin;
76064 }
76065#ifdef FREECIV_JSON_CONNECTION
76066 field_addr.name = "val";
76067#endif /* FREECIV_JSON_CONNECTION */
76068 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->val)) {
76070 }
76071#ifdef FREECIV_JSON_CONNECTION
76072 field_addr.name = "default_val";
76073#endif /* FREECIV_JSON_CONNECTION */
76074 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->default_val)) {
76075 RECEIVE_PACKET_FIELD_ERROR(default_val);
76076 }
76077#endif
76078 log_packet_detailed("packet_server_setting_bool_100: got info about (%d)",
76079 real_packet->id);
76080
76081#ifdef FREECIV_DELTA_PROTOCOL
76082 if (NULL == *hash) {
76084 NULL, NULL, NULL, free);
76085 }
76086
76087 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76088 *real_packet = *old;
76089 } else {
76090 int id;
76091
76092 id = real_packet->id;
76093
76094 log_packet_detailed(" no old info");
76095 memset(real_packet, 0, sizeof(*real_packet));
76096
76097 real_packet->id = id;
76098 }
76099
76100 real_packet->is_visible = BV_ISSET(fields, 0);
76101 real_packet->is_changeable = BV_ISSET(fields, 1);
76102 real_packet->initial_setting = BV_ISSET(fields, 2);
76103 if (BV_ISSET(fields, 3)) {
76104 log_packet_detailed(" got field 'setdef'");
76105#ifdef FREECIV_JSON_CONNECTION
76106 field_addr.name = "setdef";
76107#endif /* FREECIV_JSON_CONNECTION */
76108 {
76109 int readin;
76110
76111 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76113 }
76114 real_packet->setdef = readin;
76115 }
76116 }
76117 real_packet->val = BV_ISSET(fields, 4);
76118 real_packet->default_val = BV_ISSET(fields, 5);
76119
76120 if (NULL == old) {
76121 old = fc_malloc(sizeof(*old));
76122 *old = *real_packet;
76123 genhash_insert(*hash, old, old);
76124 } else {
76125 *old = *real_packet;
76126 }
76127
76128#endif /* FREECIV_DELTA_PROTOCOL */
76130}
76131
76133{
76134 const struct packet_server_setting_bool *real_packet = packet;
76135 int e;
76136#ifdef FREECIV_DELTA_PROTOCOL
76138 struct packet_server_setting_bool *old;
76139 bool differ;
76140 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BOOL;
76141 int different = 0;
76142#endif /* FREECIV_DELTA_PROTOCOL */
76144#ifdef FREECIV_JSON_CONNECTION
76145 struct plocation field_addr;
76146 {
76150 }
76151#endif /* FREECIV_JSON_CONNECTION */
76152
76153 log_packet_detailed("packet_server_setting_bool_100: sending info about (%d)",
76154 real_packet->id);
76155
76156#ifdef FREECIV_DELTA_PROTOCOL
76157 if (NULL == *hash) {
76159 NULL, NULL, NULL, free);
76160 }
76161 BV_CLR_ALL(fields);
76162
76163 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76164 old = fc_malloc(sizeof(*old));
76165 *old = *real_packet;
76166 genhash_insert(*hash, old, old);
76167 memset(old, 0, sizeof(*old));
76168 different = 1; /* Force to send. */
76169 }
76170 differ = (old->is_visible != real_packet->is_visible);
76171 if (differ) {
76172 different++;
76173 }
76174 if (packet->is_visible) {
76175 BV_SET(fields, 0);
76176 }
76177
76178 differ = (old->is_changeable != real_packet->is_changeable);
76179 if (differ) {
76180 different++;
76181 }
76182 if (packet->is_changeable) {
76183 BV_SET(fields, 1);
76184 }
76185
76186 differ = (old->initial_setting != real_packet->initial_setting);
76187 if (differ) {
76188 different++;
76189 }
76190 if (packet->initial_setting) {
76191 BV_SET(fields, 2);
76192 }
76193
76194 differ = (old->setdef != real_packet->setdef);
76195 if (differ) {
76196 different++;
76197 BV_SET(fields, 3);
76198 }
76199
76200 differ = (old->val != real_packet->val);
76201 if (differ) {
76202 different++;
76203 }
76204 if (packet->val) {
76205 BV_SET(fields, 4);
76206 }
76207
76208 differ = (old->default_val != real_packet->default_val);
76209 if (differ) {
76210 different++;
76211 }
76212 if (packet->default_val) {
76213 BV_SET(fields, 5);
76214 }
76215
76216 if (different == 0) {
76217 log_packet_detailed(" no change -> discard");
76219 }
76220
76221#ifdef FREECIV_JSON_CONNECTION
76222 field_addr.name = "fields";
76223#endif /* FREECIV_JSON_CONNECTION */
76224 e = 0;
76225 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76226 if (e) {
76227 log_packet_detailed("fields bitvector error detected");
76228 }
76229#ifdef FREECIV_JSON_CONNECTION
76230 field_addr.name = "id";
76231#endif /* FREECIV_JSON_CONNECTION */
76232 e = 0;
76233 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
76234 if (e) {
76235 log_packet_detailed("'id' field error detected");
76236 }
76237
76238 /* field 0 is folded into the header */
76239 /* field 1 is folded into the header */
76240 /* field 2 is folded into the header */
76241 if (BV_ISSET(fields, 3)) {
76242 log_packet_detailed(" field 'setdef' has changed");
76243#ifdef FREECIV_JSON_CONNECTION
76244 field_addr.name = "setdef";
76245#endif /* FREECIV_JSON_CONNECTION */
76246 e = 0;
76247 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
76248 if (e) {
76249 log_packet_detailed("'setdef' field error detected");
76250 }
76251 }
76252 /* field 4 is folded into the header */
76253 /* field 5 is folded into the header */
76254
76255 *old = *real_packet;
76256#endif /* FREECIV_DELTA_PROTOCOL */
76257#ifndef FREECIV_DELTA_PROTOCOL
76258#ifdef FREECIV_JSON_CONNECTION
76259 field_addr.name = "id";
76260#endif /* FREECIV_JSON_CONNECTION */
76261 e = 0;
76262 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
76263 if (e) {
76264 log_packet_detailed("'id' field error detected");
76265 }
76266#ifdef FREECIV_JSON_CONNECTION
76267 field_addr.name = "is_visible";
76268#endif /* FREECIV_JSON_CONNECTION */
76269 e = 0;
76270 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
76271 if (e) {
76272 log_packet_detailed("'is_visible' field error detected");
76273 }
76274#ifdef FREECIV_JSON_CONNECTION
76275 field_addr.name = "is_changeable";
76276#endif /* FREECIV_JSON_CONNECTION */
76277 e = 0;
76278 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
76279 if (e) {
76280 log_packet_detailed("'is_changeable' field error detected");
76281 }
76282#ifdef FREECIV_JSON_CONNECTION
76283 field_addr.name = "initial_setting";
76284#endif /* FREECIV_JSON_CONNECTION */
76285 e = 0;
76286 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
76287 if (e) {
76288 log_packet_detailed("'initial_setting' field error detected");
76289 }
76290#ifdef FREECIV_JSON_CONNECTION
76291 field_addr.name = "setdef";
76292#endif /* FREECIV_JSON_CONNECTION */
76293 e = 0;
76294 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
76295 if (e) {
76296 log_packet_detailed("'setdef' field error detected");
76297 }
76298#ifdef FREECIV_JSON_CONNECTION
76299 field_addr.name = "val";
76300#endif /* FREECIV_JSON_CONNECTION */
76301 e = 0;
76302 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->val);
76303 if (e) {
76304 log_packet_detailed("'val' field error detected");
76305 }
76306#ifdef FREECIV_JSON_CONNECTION
76307 field_addr.name = "default_val";
76308#endif /* FREECIV_JSON_CONNECTION */
76309 e = 0;
76310 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->default_val);
76311 if (e) {
76312 log_packet_detailed("'default_val' field error detected");
76313 }
76314
76315#endif
76317}
76318
76320{
76321 if (!pc->used) {
76322 log_error("WARNING: trying to send data to the closed connection %s",
76324 return -1;
76325 }
76326 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet != NULL, -1,
76327 "Handler for PACKET_SERVER_SETTING_BOOL not installed");
76328 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BOOL].packet(pc, packet);
76329}
76330
76331#ifdef FREECIV_DELTA_PROTOCOL
76333{
76334 const struct packet_server_setting_int *key = (const struct packet_server_setting_int *) vkey;
76335 genhash_val_t result = 0;
76336
76337 result += key->id;
76338
76339 result &= 0xFFFFFFFF;
76340 return result;
76341}
76342
76343static bool cmp_packet_server_setting_int_100(const void *vkey1, const void *vkey2)
76344{
76345 const struct packet_server_setting_int *old = (const struct packet_server_setting_int *) vkey1;
76347 bool differ;
76348
76349 differ = (old->id != real_packet->id);
76350
76351 return !differ;
76352}
76354#endif /* FREECIV_DELTA_PROTOCOL */
76355
76357{
76358#ifdef FREECIV_DELTA_PROTOCOL
76360 struct packet_server_setting_int *old;
76361 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_INT;
76362#endif /* FREECIV_DELTA_PROTOCOL */
76364#ifdef FREECIV_JSON_CONNECTION
76365 struct plocation field_addr;
76366 {
76370 }
76371#endif /* FREECIV_JSON_CONNECTION */
76372
76373#ifdef FREECIV_DELTA_PROTOCOL
76374#ifdef FREECIV_JSON_CONNECTION
76375 field_addr.name = "fields";
76376#endif /* FREECIV_JSON_CONNECTION */
76377 DIO_BV_GET(&din, &field_addr, fields);
76378#ifdef FREECIV_JSON_CONNECTION
76379 field_addr.name = "id";
76380#endif /* FREECIV_JSON_CONNECTION */
76381 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
76383 }
76384
76385#else /* FREECIV_DELTA_PROTOCOL */
76386#ifdef FREECIV_JSON_CONNECTION
76387 field_addr.name = "id";
76388#endif /* FREECIV_JSON_CONNECTION */
76389 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
76391 }
76392#ifdef FREECIV_JSON_CONNECTION
76393 field_addr.name = "is_visible";
76394#endif /* FREECIV_JSON_CONNECTION */
76395 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
76396 RECEIVE_PACKET_FIELD_ERROR(is_visible);
76397 }
76398#ifdef FREECIV_JSON_CONNECTION
76399 field_addr.name = "is_changeable";
76400#endif /* FREECIV_JSON_CONNECTION */
76401 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
76402 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
76403 }
76404#ifdef FREECIV_JSON_CONNECTION
76405 field_addr.name = "initial_setting";
76406#endif /* FREECIV_JSON_CONNECTION */
76407 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
76408 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
76409 }
76410#ifdef FREECIV_JSON_CONNECTION
76411 field_addr.name = "setdef";
76412#endif /* FREECIV_JSON_CONNECTION */
76413 {
76414 int readin;
76415
76416 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76418 }
76419 real_packet->setdef = readin;
76420 }
76421#ifdef FREECIV_JSON_CONNECTION
76422 field_addr.name = "val";
76423#endif /* FREECIV_JSON_CONNECTION */
76424 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
76426 }
76427#ifdef FREECIV_JSON_CONNECTION
76428 field_addr.name = "default_val";
76429#endif /* FREECIV_JSON_CONNECTION */
76430 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
76431 RECEIVE_PACKET_FIELD_ERROR(default_val);
76432 }
76433#ifdef FREECIV_JSON_CONNECTION
76434 field_addr.name = "min_val";
76435#endif /* FREECIV_JSON_CONNECTION */
76436 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
76438 }
76439#ifdef FREECIV_JSON_CONNECTION
76440 field_addr.name = "max_val";
76441#endif /* FREECIV_JSON_CONNECTION */
76442 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
76444 }
76445#endif
76446 log_packet_detailed("packet_server_setting_int_100: got info about (%d)",
76447 real_packet->id);
76448
76449#ifdef FREECIV_DELTA_PROTOCOL
76450 if (NULL == *hash) {
76452 NULL, NULL, NULL, free);
76453 }
76454
76455 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76456 *real_packet = *old;
76457 } else {
76458 int id;
76459
76460 id = real_packet->id;
76461
76462 log_packet_detailed(" no old info");
76463 memset(real_packet, 0, sizeof(*real_packet));
76464
76465 real_packet->id = id;
76466 }
76467
76468 real_packet->is_visible = BV_ISSET(fields, 0);
76469 real_packet->is_changeable = BV_ISSET(fields, 1);
76470 real_packet->initial_setting = BV_ISSET(fields, 2);
76471 if (BV_ISSET(fields, 3)) {
76472 log_packet_detailed(" got field 'setdef'");
76473#ifdef FREECIV_JSON_CONNECTION
76474 field_addr.name = "setdef";
76475#endif /* FREECIV_JSON_CONNECTION */
76476 {
76477 int readin;
76478
76479 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76481 }
76482 real_packet->setdef = readin;
76483 }
76484 }
76485 if (BV_ISSET(fields, 4)) {
76486 log_packet_detailed(" got field 'val'");
76487#ifdef FREECIV_JSON_CONNECTION
76488 field_addr.name = "val";
76489#endif /* FREECIV_JSON_CONNECTION */
76490 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->val)) {
76492 }
76493 }
76494 if (BV_ISSET(fields, 5)) {
76495 log_packet_detailed(" got field 'default_val'");
76496#ifdef FREECIV_JSON_CONNECTION
76497 field_addr.name = "default_val";
76498#endif /* FREECIV_JSON_CONNECTION */
76499 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->default_val)) {
76500 RECEIVE_PACKET_FIELD_ERROR(default_val);
76501 }
76502 }
76503 if (BV_ISSET(fields, 6)) {
76504 log_packet_detailed(" got field 'min_val'");
76505#ifdef FREECIV_JSON_CONNECTION
76506 field_addr.name = "min_val";
76507#endif /* FREECIV_JSON_CONNECTION */
76508 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->min_val)) {
76510 }
76511 }
76512 if (BV_ISSET(fields, 7)) {
76513 log_packet_detailed(" got field 'max_val'");
76514#ifdef FREECIV_JSON_CONNECTION
76515 field_addr.name = "max_val";
76516#endif /* FREECIV_JSON_CONNECTION */
76517 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->max_val)) {
76519 }
76520 }
76521
76522 if (NULL == old) {
76523 old = fc_malloc(sizeof(*old));
76524 *old = *real_packet;
76525 genhash_insert(*hash, old, old);
76526 } else {
76527 *old = *real_packet;
76528 }
76529
76530#endif /* FREECIV_DELTA_PROTOCOL */
76532}
76533
76535{
76536 const struct packet_server_setting_int *real_packet = packet;
76537 int e;
76538#ifdef FREECIV_DELTA_PROTOCOL
76540 struct packet_server_setting_int *old;
76541 bool differ;
76542 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_INT;
76543 int different = 0;
76544#endif /* FREECIV_DELTA_PROTOCOL */
76546#ifdef FREECIV_JSON_CONNECTION
76547 struct plocation field_addr;
76548 {
76552 }
76553#endif /* FREECIV_JSON_CONNECTION */
76554
76555 log_packet_detailed("packet_server_setting_int_100: sending info about (%d)",
76556 real_packet->id);
76557
76558#ifdef FREECIV_DELTA_PROTOCOL
76559 if (NULL == *hash) {
76561 NULL, NULL, NULL, free);
76562 }
76563 BV_CLR_ALL(fields);
76564
76565 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
76566 old = fc_malloc(sizeof(*old));
76567 *old = *real_packet;
76568 genhash_insert(*hash, old, old);
76569 memset(old, 0, sizeof(*old));
76570 different = 1; /* Force to send. */
76571 }
76572 differ = (old->is_visible != real_packet->is_visible);
76573 if (differ) {
76574 different++;
76575 }
76576 if (packet->is_visible) {
76577 BV_SET(fields, 0);
76578 }
76579
76580 differ = (old->is_changeable != real_packet->is_changeable);
76581 if (differ) {
76582 different++;
76583 }
76584 if (packet->is_changeable) {
76585 BV_SET(fields, 1);
76586 }
76587
76588 differ = (old->initial_setting != real_packet->initial_setting);
76589 if (differ) {
76590 different++;
76591 }
76592 if (packet->initial_setting) {
76593 BV_SET(fields, 2);
76594 }
76595
76596 differ = (old->setdef != real_packet->setdef);
76597 if (differ) {
76598 different++;
76599 BV_SET(fields, 3);
76600 }
76601
76602 differ = (old->val != real_packet->val);
76603 if (differ) {
76604 different++;
76605 BV_SET(fields, 4);
76606 }
76607
76608 differ = (old->default_val != real_packet->default_val);
76609 if (differ) {
76610 different++;
76611 BV_SET(fields, 5);
76612 }
76613
76614 differ = (old->min_val != real_packet->min_val);
76615 if (differ) {
76616 different++;
76617 BV_SET(fields, 6);
76618 }
76619
76620 differ = (old->max_val != real_packet->max_val);
76621 if (differ) {
76622 different++;
76623 BV_SET(fields, 7);
76624 }
76625
76626 if (different == 0) {
76627 log_packet_detailed(" no change -> discard");
76629 }
76630
76631#ifdef FREECIV_JSON_CONNECTION
76632 field_addr.name = "fields";
76633#endif /* FREECIV_JSON_CONNECTION */
76634 e = 0;
76635 e |= DIO_BV_PUT(&dout, &field_addr, fields);
76636 if (e) {
76637 log_packet_detailed("fields bitvector error detected");
76638 }
76639#ifdef FREECIV_JSON_CONNECTION
76640 field_addr.name = "id";
76641#endif /* FREECIV_JSON_CONNECTION */
76642 e = 0;
76643 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
76644 if (e) {
76645 log_packet_detailed("'id' field error detected");
76646 }
76647
76648 /* field 0 is folded into the header */
76649 /* field 1 is folded into the header */
76650 /* field 2 is folded into the header */
76651 if (BV_ISSET(fields, 3)) {
76652 log_packet_detailed(" field 'setdef' has changed");
76653#ifdef FREECIV_JSON_CONNECTION
76654 field_addr.name = "setdef";
76655#endif /* FREECIV_JSON_CONNECTION */
76656 e = 0;
76657 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
76658 if (e) {
76659 log_packet_detailed("'setdef' field error detected");
76660 }
76661 }
76662 if (BV_ISSET(fields, 4)) {
76663 log_packet_detailed(" field 'val' has changed");
76664#ifdef FREECIV_JSON_CONNECTION
76665 field_addr.name = "val";
76666#endif /* FREECIV_JSON_CONNECTION */
76667 e = 0;
76668 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
76669 if (e) {
76670 log_packet_detailed("'val' field error detected");
76671 }
76672 }
76673 if (BV_ISSET(fields, 5)) {
76674 log_packet_detailed(" field 'default_val' has changed");
76675#ifdef FREECIV_JSON_CONNECTION
76676 field_addr.name = "default_val";
76677#endif /* FREECIV_JSON_CONNECTION */
76678 e = 0;
76679 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
76680 if (e) {
76681 log_packet_detailed("'default_val' field error detected");
76682 }
76683 }
76684 if (BV_ISSET(fields, 6)) {
76685 log_packet_detailed(" field 'min_val' has changed");
76686#ifdef FREECIV_JSON_CONNECTION
76687 field_addr.name = "min_val";
76688#endif /* FREECIV_JSON_CONNECTION */
76689 e = 0;
76690 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
76691 if (e) {
76692 log_packet_detailed("'min_val' field error detected");
76693 }
76694 }
76695 if (BV_ISSET(fields, 7)) {
76696 log_packet_detailed(" field 'max_val' has changed");
76697#ifdef FREECIV_JSON_CONNECTION
76698 field_addr.name = "max_val";
76699#endif /* FREECIV_JSON_CONNECTION */
76700 e = 0;
76701 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
76702 if (e) {
76703 log_packet_detailed("'max_val' field error detected");
76704 }
76705 }
76706
76707 *old = *real_packet;
76708#endif /* FREECIV_DELTA_PROTOCOL */
76709#ifndef FREECIV_DELTA_PROTOCOL
76710#ifdef FREECIV_JSON_CONNECTION
76711 field_addr.name = "id";
76712#endif /* FREECIV_JSON_CONNECTION */
76713 e = 0;
76714 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
76715 if (e) {
76716 log_packet_detailed("'id' field error detected");
76717 }
76718#ifdef FREECIV_JSON_CONNECTION
76719 field_addr.name = "is_visible";
76720#endif /* FREECIV_JSON_CONNECTION */
76721 e = 0;
76722 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
76723 if (e) {
76724 log_packet_detailed("'is_visible' field error detected");
76725 }
76726#ifdef FREECIV_JSON_CONNECTION
76727 field_addr.name = "is_changeable";
76728#endif /* FREECIV_JSON_CONNECTION */
76729 e = 0;
76730 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
76731 if (e) {
76732 log_packet_detailed("'is_changeable' field error detected");
76733 }
76734#ifdef FREECIV_JSON_CONNECTION
76735 field_addr.name = "initial_setting";
76736#endif /* FREECIV_JSON_CONNECTION */
76737 e = 0;
76738 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
76739 if (e) {
76740 log_packet_detailed("'initial_setting' field error detected");
76741 }
76742#ifdef FREECIV_JSON_CONNECTION
76743 field_addr.name = "setdef";
76744#endif /* FREECIV_JSON_CONNECTION */
76745 e = 0;
76746 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
76747 if (e) {
76748 log_packet_detailed("'setdef' field error detected");
76749 }
76750#ifdef FREECIV_JSON_CONNECTION
76751 field_addr.name = "val";
76752#endif /* FREECIV_JSON_CONNECTION */
76753 e = 0;
76754 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->val);
76755 if (e) {
76756 log_packet_detailed("'val' field error detected");
76757 }
76758#ifdef FREECIV_JSON_CONNECTION
76759 field_addr.name = "default_val";
76760#endif /* FREECIV_JSON_CONNECTION */
76761 e = 0;
76762 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->default_val);
76763 if (e) {
76764 log_packet_detailed("'default_val' field error detected");
76765 }
76766#ifdef FREECIV_JSON_CONNECTION
76767 field_addr.name = "min_val";
76768#endif /* FREECIV_JSON_CONNECTION */
76769 e = 0;
76770 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->min_val);
76771 if (e) {
76772 log_packet_detailed("'min_val' field error detected");
76773 }
76774#ifdef FREECIV_JSON_CONNECTION
76775 field_addr.name = "max_val";
76776#endif /* FREECIV_JSON_CONNECTION */
76777 e = 0;
76778 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->max_val);
76779 if (e) {
76780 log_packet_detailed("'max_val' field error detected");
76781 }
76782
76783#endif
76785}
76786
76788{
76789 if (!pc->used) {
76790 log_error("WARNING: trying to send data to the closed connection %s",
76792 return -1;
76793 }
76794 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet != NULL, -1,
76795 "Handler for PACKET_SERVER_SETTING_INT not installed");
76796 return pc->phs.handlers->send[PACKET_SERVER_SETTING_INT].packet(pc, packet);
76797}
76798
76799#ifdef FREECIV_DELTA_PROTOCOL
76801{
76802 const struct packet_server_setting_str *key = (const struct packet_server_setting_str *) vkey;
76803 genhash_val_t result = 0;
76804
76805 result += key->id;
76806
76807 result &= 0xFFFFFFFF;
76808 return result;
76809}
76810
76811static bool cmp_packet_server_setting_str_100(const void *vkey1, const void *vkey2)
76812{
76813 const struct packet_server_setting_str *old = (const struct packet_server_setting_str *) vkey1;
76815 bool differ;
76816
76817 differ = (old->id != real_packet->id);
76818
76819 return !differ;
76820}
76822#endif /* FREECIV_DELTA_PROTOCOL */
76823
76825{
76826#ifdef FREECIV_DELTA_PROTOCOL
76828 struct packet_server_setting_str *old;
76829 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_STR;
76830#endif /* FREECIV_DELTA_PROTOCOL */
76832#ifdef FREECIV_JSON_CONNECTION
76833 struct plocation field_addr;
76834 {
76838 }
76839#endif /* FREECIV_JSON_CONNECTION */
76840
76841#ifdef FREECIV_DELTA_PROTOCOL
76842#ifdef FREECIV_JSON_CONNECTION
76843 field_addr.name = "fields";
76844#endif /* FREECIV_JSON_CONNECTION */
76845 DIO_BV_GET(&din, &field_addr, fields);
76846#ifdef FREECIV_JSON_CONNECTION
76847 field_addr.name = "id";
76848#endif /* FREECIV_JSON_CONNECTION */
76849 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
76851 }
76852
76853#else /* FREECIV_DELTA_PROTOCOL */
76854#ifdef FREECIV_JSON_CONNECTION
76855 field_addr.name = "id";
76856#endif /* FREECIV_JSON_CONNECTION */
76857 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
76859 }
76860#ifdef FREECIV_JSON_CONNECTION
76861 field_addr.name = "is_visible";
76862#endif /* FREECIV_JSON_CONNECTION */
76863 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
76864 RECEIVE_PACKET_FIELD_ERROR(is_visible);
76865 }
76866#ifdef FREECIV_JSON_CONNECTION
76867 field_addr.name = "is_changeable";
76868#endif /* FREECIV_JSON_CONNECTION */
76869 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
76870 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
76871 }
76872#ifdef FREECIV_JSON_CONNECTION
76873 field_addr.name = "initial_setting";
76874#endif /* FREECIV_JSON_CONNECTION */
76875 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
76876 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
76877 }
76878#ifdef FREECIV_JSON_CONNECTION
76879 field_addr.name = "setdef";
76880#endif /* FREECIV_JSON_CONNECTION */
76881 {
76882 int readin;
76883
76884 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76886 }
76887 real_packet->setdef = readin;
76888 }
76889#ifdef FREECIV_JSON_CONNECTION
76890 field_addr.name = "val";
76891#endif /* FREECIV_JSON_CONNECTION */
76892 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
76894 }
76895#ifdef FREECIV_JSON_CONNECTION
76896 field_addr.name = "default_val";
76897#endif /* FREECIV_JSON_CONNECTION */
76898 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
76899 RECEIVE_PACKET_FIELD_ERROR(default_val);
76900 }
76901#endif
76902 log_packet_detailed("packet_server_setting_str_100: got info about (%d)",
76903 real_packet->id);
76904
76905#ifdef FREECIV_DELTA_PROTOCOL
76906 if (NULL == *hash) {
76908 NULL, NULL, NULL, free);
76909 }
76910
76911 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
76912 *real_packet = *old;
76913 } else {
76914 int id;
76915
76916 id = real_packet->id;
76917
76918 log_packet_detailed(" no old info");
76919 memset(real_packet, 0, sizeof(*real_packet));
76920
76921 real_packet->id = id;
76922 }
76923
76924 real_packet->is_visible = BV_ISSET(fields, 0);
76925 real_packet->is_changeable = BV_ISSET(fields, 1);
76926 real_packet->initial_setting = BV_ISSET(fields, 2);
76927 if (BV_ISSET(fields, 3)) {
76928 log_packet_detailed(" got field 'setdef'");
76929#ifdef FREECIV_JSON_CONNECTION
76930 field_addr.name = "setdef";
76931#endif /* FREECIV_JSON_CONNECTION */
76932 {
76933 int readin;
76934
76935 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
76937 }
76938 real_packet->setdef = readin;
76939 }
76940 }
76941 if (BV_ISSET(fields, 4)) {
76942 log_packet_detailed(" got field 'val'");
76943#ifdef FREECIV_JSON_CONNECTION
76944 field_addr.name = "val";
76945#endif /* FREECIV_JSON_CONNECTION */
76946 if (!DIO_GET(string, &din, &field_addr, real_packet->val, sizeof(real_packet->val))) {
76948 }
76949 }
76950 if (BV_ISSET(fields, 5)) {
76951 log_packet_detailed(" got field 'default_val'");
76952#ifdef FREECIV_JSON_CONNECTION
76953 field_addr.name = "default_val";
76954#endif /* FREECIV_JSON_CONNECTION */
76955 if (!DIO_GET(string, &din, &field_addr, real_packet->default_val, sizeof(real_packet->default_val))) {
76956 RECEIVE_PACKET_FIELD_ERROR(default_val);
76957 }
76958 }
76959
76960 if (NULL == old) {
76961 old = fc_malloc(sizeof(*old));
76962 *old = *real_packet;
76963 genhash_insert(*hash, old, old);
76964 } else {
76965 *old = *real_packet;
76966 }
76967
76968#endif /* FREECIV_DELTA_PROTOCOL */
76970}
76971
76973{
76974 const struct packet_server_setting_str *real_packet = packet;
76975 int e;
76976#ifdef FREECIV_DELTA_PROTOCOL
76978 struct packet_server_setting_str *old;
76979 bool differ;
76980 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_STR;
76981 int different = 0;
76982#endif /* FREECIV_DELTA_PROTOCOL */
76984#ifdef FREECIV_JSON_CONNECTION
76985 struct plocation field_addr;
76986 {
76990 }
76991#endif /* FREECIV_JSON_CONNECTION */
76992
76993 log_packet_detailed("packet_server_setting_str_100: sending info about (%d)",
76994 real_packet->id);
76995
76996#ifdef FREECIV_DELTA_PROTOCOL
76997 if (NULL == *hash) {
76999 NULL, NULL, NULL, free);
77000 }
77001 BV_CLR_ALL(fields);
77002
77003 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77004 old = fc_malloc(sizeof(*old));
77005 *old = *real_packet;
77006 genhash_insert(*hash, old, old);
77007 memset(old, 0, sizeof(*old));
77008 different = 1; /* Force to send. */
77009 }
77010 differ = (old->is_visible != real_packet->is_visible);
77011 if (differ) {
77012 different++;
77013 }
77014 if (packet->is_visible) {
77015 BV_SET(fields, 0);
77016 }
77017
77018 differ = (old->is_changeable != real_packet->is_changeable);
77019 if (differ) {
77020 different++;
77021 }
77022 if (packet->is_changeable) {
77023 BV_SET(fields, 1);
77024 }
77025
77026 differ = (old->initial_setting != real_packet->initial_setting);
77027 if (differ) {
77028 different++;
77029 }
77030 if (packet->initial_setting) {
77031 BV_SET(fields, 2);
77032 }
77033
77034 differ = (old->setdef != real_packet->setdef);
77035 if (differ) {
77036 different++;
77037 BV_SET(fields, 3);
77038 }
77039
77040 differ = (strcmp(old->val, real_packet->val) != 0);
77041 if (differ) {
77042 different++;
77043 BV_SET(fields, 4);
77044 }
77045
77046 differ = (strcmp(old->default_val, real_packet->default_val) != 0);
77047 if (differ) {
77048 different++;
77049 BV_SET(fields, 5);
77050 }
77051
77052 if (different == 0) {
77053 log_packet_detailed(" no change -> discard");
77055 }
77056
77057#ifdef FREECIV_JSON_CONNECTION
77058 field_addr.name = "fields";
77059#endif /* FREECIV_JSON_CONNECTION */
77060 e = 0;
77061 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77062 if (e) {
77063 log_packet_detailed("fields bitvector error detected");
77064 }
77065#ifdef FREECIV_JSON_CONNECTION
77066 field_addr.name = "id";
77067#endif /* FREECIV_JSON_CONNECTION */
77068 e = 0;
77069 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
77070 if (e) {
77071 log_packet_detailed("'id' field error detected");
77072 }
77073
77074 /* field 0 is folded into the header */
77075 /* field 1 is folded into the header */
77076 /* field 2 is folded into the header */
77077 if (BV_ISSET(fields, 3)) {
77078 log_packet_detailed(" field 'setdef' has changed");
77079#ifdef FREECIV_JSON_CONNECTION
77080 field_addr.name = "setdef";
77081#endif /* FREECIV_JSON_CONNECTION */
77082 e = 0;
77083 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
77084 if (e) {
77085 log_packet_detailed("'setdef' field error detected");
77086 }
77087 }
77088 if (BV_ISSET(fields, 4)) {
77089 log_packet_detailed(" field 'val' has changed");
77090#ifdef FREECIV_JSON_CONNECTION
77091 field_addr.name = "val";
77092#endif /* FREECIV_JSON_CONNECTION */
77093 e = 0;
77094 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
77095 if (e) {
77096 log_packet_detailed("'val' field error detected");
77097 }
77098 }
77099 if (BV_ISSET(fields, 5)) {
77100 log_packet_detailed(" field 'default_val' has changed");
77101#ifdef FREECIV_JSON_CONNECTION
77102 field_addr.name = "default_val";
77103#endif /* FREECIV_JSON_CONNECTION */
77104 e = 0;
77105 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
77106 if (e) {
77107 log_packet_detailed("'default_val' field error detected");
77108 }
77109 }
77110
77111 *old = *real_packet;
77112#endif /* FREECIV_DELTA_PROTOCOL */
77113#ifndef FREECIV_DELTA_PROTOCOL
77114#ifdef FREECIV_JSON_CONNECTION
77115 field_addr.name = "id";
77116#endif /* FREECIV_JSON_CONNECTION */
77117 e = 0;
77118 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
77119 if (e) {
77120 log_packet_detailed("'id' field error detected");
77121 }
77122#ifdef FREECIV_JSON_CONNECTION
77123 field_addr.name = "is_visible";
77124#endif /* FREECIV_JSON_CONNECTION */
77125 e = 0;
77126 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
77127 if (e) {
77128 log_packet_detailed("'is_visible' field error detected");
77129 }
77130#ifdef FREECIV_JSON_CONNECTION
77131 field_addr.name = "is_changeable";
77132#endif /* FREECIV_JSON_CONNECTION */
77133 e = 0;
77134 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
77135 if (e) {
77136 log_packet_detailed("'is_changeable' field error detected");
77137 }
77138#ifdef FREECIV_JSON_CONNECTION
77139 field_addr.name = "initial_setting";
77140#endif /* FREECIV_JSON_CONNECTION */
77141 e = 0;
77142 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
77143 if (e) {
77144 log_packet_detailed("'initial_setting' field error detected");
77145 }
77146#ifdef FREECIV_JSON_CONNECTION
77147 field_addr.name = "setdef";
77148#endif /* FREECIV_JSON_CONNECTION */
77149 e = 0;
77150 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
77151 if (e) {
77152 log_packet_detailed("'setdef' field error detected");
77153 }
77154#ifdef FREECIV_JSON_CONNECTION
77155 field_addr.name = "val";
77156#endif /* FREECIV_JSON_CONNECTION */
77157 e = 0;
77158 e |= DIO_PUT(string, &dout, &field_addr, real_packet->val);
77159 if (e) {
77160 log_packet_detailed("'val' field error detected");
77161 }
77162#ifdef FREECIV_JSON_CONNECTION
77163 field_addr.name = "default_val";
77164#endif /* FREECIV_JSON_CONNECTION */
77165 e = 0;
77166 e |= DIO_PUT(string, &dout, &field_addr, real_packet->default_val);
77167 if (e) {
77168 log_packet_detailed("'default_val' field error detected");
77169 }
77170
77171#endif
77173}
77174
77176{
77177 if (!pc->used) {
77178 log_error("WARNING: trying to send data to the closed connection %s",
77180 return -1;
77181 }
77182 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet != NULL, -1,
77183 "Handler for PACKET_SERVER_SETTING_STR not installed");
77184 return pc->phs.handlers->send[PACKET_SERVER_SETTING_STR].packet(pc, packet);
77185}
77186
77187#ifdef FREECIV_DELTA_PROTOCOL
77189{
77190 const struct packet_server_setting_enum *key = (const struct packet_server_setting_enum *) vkey;
77191 genhash_val_t result = 0;
77192
77193 result += key->id;
77194
77195 result &= 0xFFFFFFFF;
77196 return result;
77197}
77198
77199static bool cmp_packet_server_setting_enum_100(const void *vkey1, const void *vkey2)
77200{
77201 const struct packet_server_setting_enum *old = (const struct packet_server_setting_enum *) vkey1;
77203 bool differ;
77204
77205 differ = (old->id != real_packet->id);
77206
77207 return !differ;
77208}
77210#endif /* FREECIV_DELTA_PROTOCOL */
77211
77213{
77214#ifdef FREECIV_DELTA_PROTOCOL
77216 struct packet_server_setting_enum *old;
77217 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_ENUM;
77218#endif /* FREECIV_DELTA_PROTOCOL */
77220#ifdef FREECIV_JSON_CONNECTION
77221 struct plocation field_addr;
77222 {
77226 }
77227#endif /* FREECIV_JSON_CONNECTION */
77228
77229#ifdef FREECIV_DELTA_PROTOCOL
77230#ifdef FREECIV_JSON_CONNECTION
77231 field_addr.name = "fields";
77232#endif /* FREECIV_JSON_CONNECTION */
77233 DIO_BV_GET(&din, &field_addr, fields);
77234#ifdef FREECIV_JSON_CONNECTION
77235 field_addr.name = "id";
77236#endif /* FREECIV_JSON_CONNECTION */
77237 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
77239 }
77240
77241#else /* FREECIV_DELTA_PROTOCOL */
77242#ifdef FREECIV_JSON_CONNECTION
77243 field_addr.name = "id";
77244#endif /* FREECIV_JSON_CONNECTION */
77245 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
77247 }
77248#ifdef FREECIV_JSON_CONNECTION
77249 field_addr.name = "is_visible";
77250#endif /* FREECIV_JSON_CONNECTION */
77251 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
77252 RECEIVE_PACKET_FIELD_ERROR(is_visible);
77253 }
77254#ifdef FREECIV_JSON_CONNECTION
77255 field_addr.name = "is_changeable";
77256#endif /* FREECIV_JSON_CONNECTION */
77257 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
77258 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
77259 }
77260#ifdef FREECIV_JSON_CONNECTION
77261 field_addr.name = "initial_setting";
77262#endif /* FREECIV_JSON_CONNECTION */
77263 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
77264 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
77265 }
77266#ifdef FREECIV_JSON_CONNECTION
77267 field_addr.name = "setdef";
77268#endif /* FREECIV_JSON_CONNECTION */
77269 {
77270 int readin;
77271
77272 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77274 }
77275 real_packet->setdef = readin;
77276 }
77277#ifdef FREECIV_JSON_CONNECTION
77278 field_addr.name = "val";
77279#endif /* FREECIV_JSON_CONNECTION */
77280 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
77282 }
77283#ifdef FREECIV_JSON_CONNECTION
77284 field_addr.name = "default_val";
77285#endif /* FREECIV_JSON_CONNECTION */
77286 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
77287 RECEIVE_PACKET_FIELD_ERROR(default_val);
77288 }
77289#ifdef FREECIV_JSON_CONNECTION
77290 field_addr.name = "values_num";
77291#endif /* FREECIV_JSON_CONNECTION */
77292 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
77293 RECEIVE_PACKET_FIELD_ERROR(values_num);
77294 }
77295#ifdef FREECIV_JSON_CONNECTION
77296 field_addr.name = "support_names";
77297#endif /* FREECIV_JSON_CONNECTION */
77298 if (real_packet->values_num > 64) {
77299 RECEIVE_PACKET_FIELD_ERROR(support_names, ": truncation array");
77300 }
77301 {
77302 int i;
77303
77304#ifdef FREECIV_JSON_CONNECTION
77305 /* Enter array. */
77306 field_addr.sub_location = plocation_elem_new(0);
77307#endif /* FREECIV_JSON_CONNECTION */
77308
77309 for (i = 0; i < real_packet->values_num; i++) {
77310#ifdef FREECIV_JSON_CONNECTION
77311 field_addr.sub_location->number = i;
77312#endif /* FREECIV_JSON_CONNECTION */
77313
77314 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
77315 RECEIVE_PACKET_FIELD_ERROR(support_names);
77316 }
77317 }
77318
77319#ifdef FREECIV_JSON_CONNECTION
77320 /* Exit array. */
77321 FC_FREE(field_addr.sub_location);
77322#endif /* FREECIV_JSON_CONNECTION */
77323 }
77324#ifdef FREECIV_JSON_CONNECTION
77325 field_addr.name = "pretty_names";
77326#endif /* FREECIV_JSON_CONNECTION */
77327 if (real_packet->values_num > 64) {
77328 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": truncation array");
77329 }
77330 {
77331 int i;
77332
77333#ifdef FREECIV_JSON_CONNECTION
77334 /* Enter array. */
77335 field_addr.sub_location = plocation_elem_new(0);
77336#endif /* FREECIV_JSON_CONNECTION */
77337
77338 for (i = 0; i < real_packet->values_num; i++) {
77339#ifdef FREECIV_JSON_CONNECTION
77340 field_addr.sub_location->number = i;
77341#endif /* FREECIV_JSON_CONNECTION */
77342
77343 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
77344 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
77345 }
77346 }
77347
77348#ifdef FREECIV_JSON_CONNECTION
77349 /* Exit array. */
77350 FC_FREE(field_addr.sub_location);
77351#endif /* FREECIV_JSON_CONNECTION */
77352 }
77353#endif
77354 log_packet_detailed("packet_server_setting_enum_100: got info about (%d)",
77355 real_packet->id);
77356
77357#ifdef FREECIV_DELTA_PROTOCOL
77358 if (NULL == *hash) {
77360 NULL, NULL, NULL, free);
77361 }
77362
77363 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
77364 *real_packet = *old;
77365 } else {
77366 int id;
77367
77368 id = real_packet->id;
77369
77370 log_packet_detailed(" no old info");
77371 memset(real_packet, 0, sizeof(*real_packet));
77372
77373 real_packet->id = id;
77374 }
77375
77376 real_packet->is_visible = BV_ISSET(fields, 0);
77377 real_packet->is_changeable = BV_ISSET(fields, 1);
77378 real_packet->initial_setting = BV_ISSET(fields, 2);
77379 if (BV_ISSET(fields, 3)) {
77380 log_packet_detailed(" got field 'setdef'");
77381#ifdef FREECIV_JSON_CONNECTION
77382 field_addr.name = "setdef";
77383#endif /* FREECIV_JSON_CONNECTION */
77384 {
77385 int readin;
77386
77387 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77389 }
77390 real_packet->setdef = readin;
77391 }
77392 }
77393 if (BV_ISSET(fields, 4)) {
77394 log_packet_detailed(" got field 'val'");
77395#ifdef FREECIV_JSON_CONNECTION
77396 field_addr.name = "val";
77397#endif /* FREECIV_JSON_CONNECTION */
77398 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->val)) {
77400 }
77401 }
77402 if (BV_ISSET(fields, 5)) {
77403 log_packet_detailed(" got field 'default_val'");
77404#ifdef FREECIV_JSON_CONNECTION
77405 field_addr.name = "default_val";
77406#endif /* FREECIV_JSON_CONNECTION */
77407 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->default_val)) {
77408 RECEIVE_PACKET_FIELD_ERROR(default_val);
77409 }
77410 }
77411 if (BV_ISSET(fields, 6)) {
77412 log_packet_detailed(" got field 'values_num'");
77413#ifdef FREECIV_JSON_CONNECTION
77414 field_addr.name = "values_num";
77415#endif /* FREECIV_JSON_CONNECTION */
77416 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->values_num)) {
77417 RECEIVE_PACKET_FIELD_ERROR(values_num);
77418 }
77419 }
77420 if (BV_ISSET(fields, 7)) {
77421 log_packet_detailed(" got field 'support_names'");
77422#ifdef FREECIV_JSON_CONNECTION
77423 field_addr.name = "support_names";
77424#endif /* FREECIV_JSON_CONNECTION */
77425 if (real_packet->values_num > 64) {
77426 RECEIVE_PACKET_FIELD_ERROR(support_names, ": truncation array");
77427 }
77428 {
77429 int i;
77430
77431#ifdef FREECIV_JSON_CONNECTION
77432 /* Enter array. */
77433 field_addr.sub_location = plocation_elem_new(0);
77434#endif /* FREECIV_JSON_CONNECTION */
77435
77436 for (i = 0; i < real_packet->values_num; i++) {
77437#ifdef FREECIV_JSON_CONNECTION
77438 field_addr.sub_location->number = i;
77439#endif /* FREECIV_JSON_CONNECTION */
77440
77441 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
77442 RECEIVE_PACKET_FIELD_ERROR(support_names);
77443 }
77444 }
77445
77446#ifdef FREECIV_JSON_CONNECTION
77447 /* Exit array. */
77448 FC_FREE(field_addr.sub_location);
77449#endif /* FREECIV_JSON_CONNECTION */
77450 }
77451 }
77452 if (BV_ISSET(fields, 8)) {
77453 log_packet_detailed(" got field 'pretty_names'");
77454#ifdef FREECIV_JSON_CONNECTION
77455 field_addr.name = "pretty_names";
77456#endif /* FREECIV_JSON_CONNECTION */
77457 if (real_packet->values_num > 64) {
77458 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": truncation array");
77459 }
77460 {
77461 int i;
77462
77463#ifdef FREECIV_JSON_CONNECTION
77464 /* Enter array. */
77465 field_addr.sub_location = plocation_elem_new(0);
77466#endif /* FREECIV_JSON_CONNECTION */
77467
77468 for (i = 0; i < real_packet->values_num; i++) {
77469#ifdef FREECIV_JSON_CONNECTION
77470 field_addr.sub_location->number = i;
77471#endif /* FREECIV_JSON_CONNECTION */
77472
77473 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
77474 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
77475 }
77476 }
77477
77478#ifdef FREECIV_JSON_CONNECTION
77479 /* Exit array. */
77480 FC_FREE(field_addr.sub_location);
77481#endif /* FREECIV_JSON_CONNECTION */
77482 }
77483 }
77484
77485 if (NULL == old) {
77486 old = fc_malloc(sizeof(*old));
77487 *old = *real_packet;
77488 genhash_insert(*hash, old, old);
77489 } else {
77490 *old = *real_packet;
77491 }
77492
77493#endif /* FREECIV_DELTA_PROTOCOL */
77495}
77496
77498{
77499 const struct packet_server_setting_enum *real_packet = packet;
77500 int e;
77501#ifdef FREECIV_DELTA_PROTOCOL
77503 struct packet_server_setting_enum *old;
77504 bool differ;
77505 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_ENUM;
77506 int different = 0;
77507#endif /* FREECIV_DELTA_PROTOCOL */
77509#ifdef FREECIV_JSON_CONNECTION
77510 struct plocation field_addr;
77511 {
77515 }
77516#endif /* FREECIV_JSON_CONNECTION */
77517
77518 log_packet_detailed("packet_server_setting_enum_100: sending info about (%d)",
77519 real_packet->id);
77520
77521#ifdef FREECIV_DELTA_PROTOCOL
77522 if (NULL == *hash) {
77524 NULL, NULL, NULL, free);
77525 }
77526 BV_CLR_ALL(fields);
77527
77528 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
77529 old = fc_malloc(sizeof(*old));
77530 *old = *real_packet;
77531 genhash_insert(*hash, old, old);
77532 memset(old, 0, sizeof(*old));
77533 different = 1; /* Force to send. */
77534 }
77535 differ = (old->is_visible != real_packet->is_visible);
77536 if (differ) {
77537 different++;
77538 }
77539 if (packet->is_visible) {
77540 BV_SET(fields, 0);
77541 }
77542
77543 differ = (old->is_changeable != real_packet->is_changeable);
77544 if (differ) {
77545 different++;
77546 }
77547 if (packet->is_changeable) {
77548 BV_SET(fields, 1);
77549 }
77550
77551 differ = (old->initial_setting != real_packet->initial_setting);
77552 if (differ) {
77553 different++;
77554 }
77555 if (packet->initial_setting) {
77556 BV_SET(fields, 2);
77557 }
77558
77559 differ = (old->setdef != real_packet->setdef);
77560 if (differ) {
77561 different++;
77562 BV_SET(fields, 3);
77563 }
77564
77565 differ = (old->val != real_packet->val);
77566 if (differ) {
77567 different++;
77568 BV_SET(fields, 4);
77569 }
77570
77571 differ = (old->default_val != real_packet->default_val);
77572 if (differ) {
77573 different++;
77574 BV_SET(fields, 5);
77575 }
77576
77577 differ = (old->values_num != real_packet->values_num);
77578 if (differ) {
77579 different++;
77580 BV_SET(fields, 6);
77581 }
77582
77583 differ = (old->values_num != real_packet->values_num);
77584 if (!differ) {
77585 int i;
77586
77587 for (i = 0; i < real_packet->values_num; i++) {
77588 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
77589 if (differ) {
77590 break;
77591 }
77592 }
77593 }
77594 if (differ) {
77595 different++;
77596 BV_SET(fields, 7);
77597 }
77598
77599 differ = (old->values_num != real_packet->values_num);
77600 if (!differ) {
77601 int i;
77602
77603 for (i = 0; i < real_packet->values_num; i++) {
77604 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
77605 if (differ) {
77606 break;
77607 }
77608 }
77609 }
77610 if (differ) {
77611 different++;
77612 BV_SET(fields, 8);
77613 }
77614
77615 if (different == 0) {
77616 log_packet_detailed(" no change -> discard");
77618 }
77619
77620#ifdef FREECIV_JSON_CONNECTION
77621 field_addr.name = "fields";
77622#endif /* FREECIV_JSON_CONNECTION */
77623 e = 0;
77624 e |= DIO_BV_PUT(&dout, &field_addr, fields);
77625 if (e) {
77626 log_packet_detailed("fields bitvector error detected");
77627 }
77628#ifdef FREECIV_JSON_CONNECTION
77629 field_addr.name = "id";
77630#endif /* FREECIV_JSON_CONNECTION */
77631 e = 0;
77632 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
77633 if (e) {
77634 log_packet_detailed("'id' field error detected");
77635 }
77636
77637 /* field 0 is folded into the header */
77638 /* field 1 is folded into the header */
77639 /* field 2 is folded into the header */
77640 if (BV_ISSET(fields, 3)) {
77641 log_packet_detailed(" field 'setdef' has changed");
77642#ifdef FREECIV_JSON_CONNECTION
77643 field_addr.name = "setdef";
77644#endif /* FREECIV_JSON_CONNECTION */
77645 e = 0;
77646 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
77647 if (e) {
77648 log_packet_detailed("'setdef' field error detected");
77649 }
77650 }
77651 if (BV_ISSET(fields, 4)) {
77652 log_packet_detailed(" field 'val' has changed");
77653#ifdef FREECIV_JSON_CONNECTION
77654 field_addr.name = "val";
77655#endif /* FREECIV_JSON_CONNECTION */
77656 e = 0;
77657 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
77658 if (e) {
77659 log_packet_detailed("'val' field error detected");
77660 }
77661 }
77662 if (BV_ISSET(fields, 5)) {
77663 log_packet_detailed(" field 'default_val' has changed");
77664#ifdef FREECIV_JSON_CONNECTION
77665 field_addr.name = "default_val";
77666#endif /* FREECIV_JSON_CONNECTION */
77667 e = 0;
77668 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
77669 if (e) {
77670 log_packet_detailed("'default_val' field error detected");
77671 }
77672 }
77673 if (BV_ISSET(fields, 6)) {
77674 log_packet_detailed(" field 'values_num' has changed");
77675#ifdef FREECIV_JSON_CONNECTION
77676 field_addr.name = "values_num";
77677#endif /* FREECIV_JSON_CONNECTION */
77678 e = 0;
77679 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
77680 if (e) {
77681 log_packet_detailed("'values_num' field error detected");
77682 }
77683 }
77684 if (BV_ISSET(fields, 7)) {
77685 log_packet_detailed(" field 'support_names' has changed");
77686#ifdef FREECIV_JSON_CONNECTION
77687 field_addr.name = "support_names";
77688#endif /* FREECIV_JSON_CONNECTION */
77689 e = 0;
77690 {
77691 int i;
77692
77693#ifdef FREECIV_JSON_CONNECTION
77694 /* Create the array. */
77695 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
77696
77697 /* Enter the array. */
77698 field_addr.sub_location = plocation_elem_new(0);
77699#endif /* FREECIV_JSON_CONNECTION */
77700
77701 for (i = 0; i < real_packet->values_num; i++) {
77702#ifdef FREECIV_JSON_CONNECTION
77703 /* Next array element. */
77704 field_addr.sub_location->number = i;
77705#endif /* FREECIV_JSON_CONNECTION */
77706
77707 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
77708 }
77709
77710#ifdef FREECIV_JSON_CONNECTION
77711 /* Exit array. */
77712 FC_FREE(field_addr.sub_location);
77713#endif /* FREECIV_JSON_CONNECTION */
77714 }
77715 if (e) {
77716 log_packet_detailed("'support_names' field error detected");
77717 }
77718 }
77719 if (BV_ISSET(fields, 8)) {
77720 log_packet_detailed(" field 'pretty_names' has changed");
77721#ifdef FREECIV_JSON_CONNECTION
77722 field_addr.name = "pretty_names";
77723#endif /* FREECIV_JSON_CONNECTION */
77724 e = 0;
77725 {
77726 int i;
77727
77728#ifdef FREECIV_JSON_CONNECTION
77729 /* Create the array. */
77730 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
77731
77732 /* Enter the array. */
77733 field_addr.sub_location = plocation_elem_new(0);
77734#endif /* FREECIV_JSON_CONNECTION */
77735
77736 for (i = 0; i < real_packet->values_num; i++) {
77737#ifdef FREECIV_JSON_CONNECTION
77738 /* Next array element. */
77739 field_addr.sub_location->number = i;
77740#endif /* FREECIV_JSON_CONNECTION */
77741
77742 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
77743 }
77744
77745#ifdef FREECIV_JSON_CONNECTION
77746 /* Exit array. */
77747 FC_FREE(field_addr.sub_location);
77748#endif /* FREECIV_JSON_CONNECTION */
77749 }
77750 if (e) {
77751 log_packet_detailed("'pretty_names' field error detected");
77752 }
77753 }
77754
77755 *old = *real_packet;
77756#endif /* FREECIV_DELTA_PROTOCOL */
77757#ifndef FREECIV_DELTA_PROTOCOL
77758#ifdef FREECIV_JSON_CONNECTION
77759 field_addr.name = "id";
77760#endif /* FREECIV_JSON_CONNECTION */
77761 e = 0;
77762 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
77763 if (e) {
77764 log_packet_detailed("'id' field error detected");
77765 }
77766#ifdef FREECIV_JSON_CONNECTION
77767 field_addr.name = "is_visible";
77768#endif /* FREECIV_JSON_CONNECTION */
77769 e = 0;
77770 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
77771 if (e) {
77772 log_packet_detailed("'is_visible' field error detected");
77773 }
77774#ifdef FREECIV_JSON_CONNECTION
77775 field_addr.name = "is_changeable";
77776#endif /* FREECIV_JSON_CONNECTION */
77777 e = 0;
77778 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
77779 if (e) {
77780 log_packet_detailed("'is_changeable' field error detected");
77781 }
77782#ifdef FREECIV_JSON_CONNECTION
77783 field_addr.name = "initial_setting";
77784#endif /* FREECIV_JSON_CONNECTION */
77785 e = 0;
77786 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
77787 if (e) {
77788 log_packet_detailed("'initial_setting' field error detected");
77789 }
77790#ifdef FREECIV_JSON_CONNECTION
77791 field_addr.name = "setdef";
77792#endif /* FREECIV_JSON_CONNECTION */
77793 e = 0;
77794 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
77795 if (e) {
77796 log_packet_detailed("'setdef' field error detected");
77797 }
77798#ifdef FREECIV_JSON_CONNECTION
77799 field_addr.name = "val";
77800#endif /* FREECIV_JSON_CONNECTION */
77801 e = 0;
77802 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->val);
77803 if (e) {
77804 log_packet_detailed("'val' field error detected");
77805 }
77806#ifdef FREECIV_JSON_CONNECTION
77807 field_addr.name = "default_val";
77808#endif /* FREECIV_JSON_CONNECTION */
77809 e = 0;
77810 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->default_val);
77811 if (e) {
77812 log_packet_detailed("'default_val' field error detected");
77813 }
77814#ifdef FREECIV_JSON_CONNECTION
77815 field_addr.name = "values_num";
77816#endif /* FREECIV_JSON_CONNECTION */
77817 e = 0;
77818 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->values_num);
77819 if (e) {
77820 log_packet_detailed("'values_num' field error detected");
77821 }
77822#ifdef FREECIV_JSON_CONNECTION
77823 field_addr.name = "support_names";
77824#endif /* FREECIV_JSON_CONNECTION */
77825 e = 0;
77826 {
77827 int i;
77828
77829#ifdef FREECIV_JSON_CONNECTION
77830 /* Create the array. */
77831 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
77832
77833 /* Enter the array. */
77834 field_addr.sub_location = plocation_elem_new(0);
77835#endif /* FREECIV_JSON_CONNECTION */
77836
77837 for (i = 0; i < real_packet->values_num; i++) {
77838#ifdef FREECIV_JSON_CONNECTION
77839 /* Next array element. */
77840 field_addr.sub_location->number = i;
77841#endif /* FREECIV_JSON_CONNECTION */
77842
77843 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
77844 }
77845
77846#ifdef FREECIV_JSON_CONNECTION
77847 /* Exit array. */
77848 FC_FREE(field_addr.sub_location);
77849#endif /* FREECIV_JSON_CONNECTION */
77850 }
77851 if (e) {
77852 log_packet_detailed("'support_names' field error detected");
77853 }
77854#ifdef FREECIV_JSON_CONNECTION
77855 field_addr.name = "pretty_names";
77856#endif /* FREECIV_JSON_CONNECTION */
77857 e = 0;
77858 {
77859 int i;
77860
77861#ifdef FREECIV_JSON_CONNECTION
77862 /* Create the array. */
77863 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->values_num);
77864
77865 /* Enter the array. */
77866 field_addr.sub_location = plocation_elem_new(0);
77867#endif /* FREECIV_JSON_CONNECTION */
77868
77869 for (i = 0; i < real_packet->values_num; i++) {
77870#ifdef FREECIV_JSON_CONNECTION
77871 /* Next array element. */
77872 field_addr.sub_location->number = i;
77873#endif /* FREECIV_JSON_CONNECTION */
77874
77875 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
77876 }
77877
77878#ifdef FREECIV_JSON_CONNECTION
77879 /* Exit array. */
77880 FC_FREE(field_addr.sub_location);
77881#endif /* FREECIV_JSON_CONNECTION */
77882 }
77883 if (e) {
77884 log_packet_detailed("'pretty_names' field error detected");
77885 }
77886
77887#endif
77889}
77890
77892{
77893 if (!pc->used) {
77894 log_error("WARNING: trying to send data to the closed connection %s",
77896 return -1;
77897 }
77898 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet != NULL, -1,
77899 "Handler for PACKET_SERVER_SETTING_ENUM not installed");
77900 return pc->phs.handlers->send[PACKET_SERVER_SETTING_ENUM].packet(pc, packet);
77901}
77902
77903#ifdef FREECIV_DELTA_PROTOCOL
77905{
77906 const struct packet_server_setting_bitwise *key = (const struct packet_server_setting_bitwise *) vkey;
77907 genhash_val_t result = 0;
77908
77909 result += key->id;
77910
77911 result &= 0xFFFFFFFF;
77912 return result;
77913}
77914
77915static bool cmp_packet_server_setting_bitwise_100(const void *vkey1, const void *vkey2)
77916{
77917 const struct packet_server_setting_bitwise *old = (const struct packet_server_setting_bitwise *) vkey1;
77919 bool differ;
77920
77921 differ = (old->id != real_packet->id);
77922
77923 return !differ;
77924}
77926#endif /* FREECIV_DELTA_PROTOCOL */
77927
77929{
77930#ifdef FREECIV_DELTA_PROTOCOL
77933 struct genhash **hash = pc->phs.received + PACKET_SERVER_SETTING_BITWISE;
77934#endif /* FREECIV_DELTA_PROTOCOL */
77936#ifdef FREECIV_JSON_CONNECTION
77937 struct plocation field_addr;
77938 {
77942 }
77943#endif /* FREECIV_JSON_CONNECTION */
77944
77945#ifdef FREECIV_DELTA_PROTOCOL
77946#ifdef FREECIV_JSON_CONNECTION
77947 field_addr.name = "fields";
77948#endif /* FREECIV_JSON_CONNECTION */
77949 DIO_BV_GET(&din, &field_addr, fields);
77950#ifdef FREECIV_JSON_CONNECTION
77951 field_addr.name = "id";
77952#endif /* FREECIV_JSON_CONNECTION */
77953 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
77955 }
77956
77957#else /* FREECIV_DELTA_PROTOCOL */
77958#ifdef FREECIV_JSON_CONNECTION
77959 field_addr.name = "id";
77960#endif /* FREECIV_JSON_CONNECTION */
77961 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
77963 }
77964#ifdef FREECIV_JSON_CONNECTION
77965 field_addr.name = "is_visible";
77966#endif /* FREECIV_JSON_CONNECTION */
77967 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_visible)) {
77968 RECEIVE_PACKET_FIELD_ERROR(is_visible);
77969 }
77970#ifdef FREECIV_JSON_CONNECTION
77971 field_addr.name = "is_changeable";
77972#endif /* FREECIV_JSON_CONNECTION */
77973 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_changeable)) {
77974 RECEIVE_PACKET_FIELD_ERROR(is_changeable);
77975 }
77976#ifdef FREECIV_JSON_CONNECTION
77977 field_addr.name = "initial_setting";
77978#endif /* FREECIV_JSON_CONNECTION */
77979 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->initial_setting)) {
77980 RECEIVE_PACKET_FIELD_ERROR(initial_setting);
77981 }
77982#ifdef FREECIV_JSON_CONNECTION
77983 field_addr.name = "setdef";
77984#endif /* FREECIV_JSON_CONNECTION */
77985 {
77986 int readin;
77987
77988 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
77990 }
77991 real_packet->setdef = readin;
77992 }
77993#ifdef FREECIV_JSON_CONNECTION
77994 field_addr.name = "val";
77995#endif /* FREECIV_JSON_CONNECTION */
77996 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
77998 }
77999#ifdef FREECIV_JSON_CONNECTION
78000 field_addr.name = "default_val";
78001#endif /* FREECIV_JSON_CONNECTION */
78002 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
78003 RECEIVE_PACKET_FIELD_ERROR(default_val);
78004 }
78005#ifdef FREECIV_JSON_CONNECTION
78006 field_addr.name = "bits_num";
78007#endif /* FREECIV_JSON_CONNECTION */
78008 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
78010 }
78011#ifdef FREECIV_JSON_CONNECTION
78012 field_addr.name = "support_names";
78013#endif /* FREECIV_JSON_CONNECTION */
78014 if (real_packet->bits_num > 64) {
78015 RECEIVE_PACKET_FIELD_ERROR(support_names, ": truncation array");
78016 }
78017 {
78018 int i;
78019
78020#ifdef FREECIV_JSON_CONNECTION
78021 /* Enter array. */
78022 field_addr.sub_location = plocation_elem_new(0);
78023#endif /* FREECIV_JSON_CONNECTION */
78024
78025 for (i = 0; i < real_packet->bits_num; i++) {
78026#ifdef FREECIV_JSON_CONNECTION
78027 field_addr.sub_location->number = i;
78028#endif /* FREECIV_JSON_CONNECTION */
78029
78030 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
78031 RECEIVE_PACKET_FIELD_ERROR(support_names);
78032 }
78033 }
78034
78035#ifdef FREECIV_JSON_CONNECTION
78036 /* Exit array. */
78037 FC_FREE(field_addr.sub_location);
78038#endif /* FREECIV_JSON_CONNECTION */
78039 }
78040#ifdef FREECIV_JSON_CONNECTION
78041 field_addr.name = "pretty_names";
78042#endif /* FREECIV_JSON_CONNECTION */
78043 if (real_packet->bits_num > 64) {
78044 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": truncation array");
78045 }
78046 {
78047 int i;
78048
78049#ifdef FREECIV_JSON_CONNECTION
78050 /* Enter array. */
78051 field_addr.sub_location = plocation_elem_new(0);
78052#endif /* FREECIV_JSON_CONNECTION */
78053
78054 for (i = 0; i < real_packet->bits_num; i++) {
78055#ifdef FREECIV_JSON_CONNECTION
78056 field_addr.sub_location->number = i;
78057#endif /* FREECIV_JSON_CONNECTION */
78058
78059 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
78060 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
78061 }
78062 }
78063
78064#ifdef FREECIV_JSON_CONNECTION
78065 /* Exit array. */
78066 FC_FREE(field_addr.sub_location);
78067#endif /* FREECIV_JSON_CONNECTION */
78068 }
78069#endif
78070 log_packet_detailed("packet_server_setting_bitwise_100: got info about (%d)",
78071 real_packet->id);
78072
78073#ifdef FREECIV_DELTA_PROTOCOL
78074 if (NULL == *hash) {
78076 NULL, NULL, NULL, free);
78077 }
78078
78079 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78080 *real_packet = *old;
78081 } else {
78082 int id;
78083
78084 id = real_packet->id;
78085
78086 log_packet_detailed(" no old info");
78087 memset(real_packet, 0, sizeof(*real_packet));
78088
78089 real_packet->id = id;
78090 }
78091
78092 real_packet->is_visible = BV_ISSET(fields, 0);
78093 real_packet->is_changeable = BV_ISSET(fields, 1);
78094 real_packet->initial_setting = BV_ISSET(fields, 2);
78095 if (BV_ISSET(fields, 3)) {
78096 log_packet_detailed(" got field 'setdef'");
78097#ifdef FREECIV_JSON_CONNECTION
78098 field_addr.name = "setdef";
78099#endif /* FREECIV_JSON_CONNECTION */
78100 {
78101 int readin;
78102
78103 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78105 }
78106 real_packet->setdef = readin;
78107 }
78108 }
78109 if (BV_ISSET(fields, 4)) {
78110 log_packet_detailed(" got field 'val'");
78111#ifdef FREECIV_JSON_CONNECTION
78112 field_addr.name = "val";
78113#endif /* FREECIV_JSON_CONNECTION */
78114 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->val)) {
78116 }
78117 }
78118 if (BV_ISSET(fields, 5)) {
78119 log_packet_detailed(" got field 'default_val'");
78120#ifdef FREECIV_JSON_CONNECTION
78121 field_addr.name = "default_val";
78122#endif /* FREECIV_JSON_CONNECTION */
78123 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->default_val)) {
78124 RECEIVE_PACKET_FIELD_ERROR(default_val);
78125 }
78126 }
78127 if (BV_ISSET(fields, 6)) {
78128 log_packet_detailed(" got field 'bits_num'");
78129#ifdef FREECIV_JSON_CONNECTION
78130 field_addr.name = "bits_num";
78131#endif /* FREECIV_JSON_CONNECTION */
78132 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->bits_num)) {
78134 }
78135 }
78136 if (BV_ISSET(fields, 7)) {
78137 log_packet_detailed(" got field 'support_names'");
78138#ifdef FREECIV_JSON_CONNECTION
78139 field_addr.name = "support_names";
78140#endif /* FREECIV_JSON_CONNECTION */
78141 if (real_packet->bits_num > 64) {
78142 RECEIVE_PACKET_FIELD_ERROR(support_names, ": truncation array");
78143 }
78144 {
78145 int i;
78146
78147#ifdef FREECIV_JSON_CONNECTION
78148 /* Enter array. */
78149 field_addr.sub_location = plocation_elem_new(0);
78150#endif /* FREECIV_JSON_CONNECTION */
78151
78152 for (i = 0; i < real_packet->bits_num; i++) {
78153#ifdef FREECIV_JSON_CONNECTION
78154 field_addr.sub_location->number = i;
78155#endif /* FREECIV_JSON_CONNECTION */
78156
78157 if (!DIO_GET(string, &din, &field_addr, real_packet->support_names[i], sizeof(real_packet->support_names[i]))) {
78158 RECEIVE_PACKET_FIELD_ERROR(support_names);
78159 }
78160 }
78161
78162#ifdef FREECIV_JSON_CONNECTION
78163 /* Exit array. */
78164 FC_FREE(field_addr.sub_location);
78165#endif /* FREECIV_JSON_CONNECTION */
78166 }
78167 }
78168 if (BV_ISSET(fields, 8)) {
78169 log_packet_detailed(" got field 'pretty_names'");
78170#ifdef FREECIV_JSON_CONNECTION
78171 field_addr.name = "pretty_names";
78172#endif /* FREECIV_JSON_CONNECTION */
78173 if (real_packet->bits_num > 64) {
78174 RECEIVE_PACKET_FIELD_ERROR(pretty_names, ": truncation array");
78175 }
78176 {
78177 int i;
78178
78179#ifdef FREECIV_JSON_CONNECTION
78180 /* Enter array. */
78181 field_addr.sub_location = plocation_elem_new(0);
78182#endif /* FREECIV_JSON_CONNECTION */
78183
78184 for (i = 0; i < real_packet->bits_num; i++) {
78185#ifdef FREECIV_JSON_CONNECTION
78186 field_addr.sub_location->number = i;
78187#endif /* FREECIV_JSON_CONNECTION */
78188
78189 if (!DIO_GET(string, &din, &field_addr, real_packet->pretty_names[i], sizeof(real_packet->pretty_names[i]))) {
78190 RECEIVE_PACKET_FIELD_ERROR(pretty_names);
78191 }
78192 }
78193
78194#ifdef FREECIV_JSON_CONNECTION
78195 /* Exit array. */
78196 FC_FREE(field_addr.sub_location);
78197#endif /* FREECIV_JSON_CONNECTION */
78198 }
78199 }
78200
78201 if (NULL == old) {
78202 old = fc_malloc(sizeof(*old));
78203 *old = *real_packet;
78204 genhash_insert(*hash, old, old);
78205 } else {
78206 *old = *real_packet;
78207 }
78208
78209#endif /* FREECIV_DELTA_PROTOCOL */
78211}
78212
78214{
78215 const struct packet_server_setting_bitwise *real_packet = packet;
78216 int e;
78217#ifdef FREECIV_DELTA_PROTOCOL
78220 bool differ;
78221 struct genhash **hash = pc->phs.sent + PACKET_SERVER_SETTING_BITWISE;
78222 int different = 0;
78223#endif /* FREECIV_DELTA_PROTOCOL */
78225#ifdef FREECIV_JSON_CONNECTION
78226 struct plocation field_addr;
78227 {
78231 }
78232#endif /* FREECIV_JSON_CONNECTION */
78233
78234 log_packet_detailed("packet_server_setting_bitwise_100: sending info about (%d)",
78235 real_packet->id);
78236
78237#ifdef FREECIV_DELTA_PROTOCOL
78238 if (NULL == *hash) {
78240 NULL, NULL, NULL, free);
78241 }
78242 BV_CLR_ALL(fields);
78243
78244 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78245 old = fc_malloc(sizeof(*old));
78246 *old = *real_packet;
78247 genhash_insert(*hash, old, old);
78248 memset(old, 0, sizeof(*old));
78249 different = 1; /* Force to send. */
78250 }
78251 differ = (old->is_visible != real_packet->is_visible);
78252 if (differ) {
78253 different++;
78254 }
78255 if (packet->is_visible) {
78256 BV_SET(fields, 0);
78257 }
78258
78259 differ = (old->is_changeable != real_packet->is_changeable);
78260 if (differ) {
78261 different++;
78262 }
78263 if (packet->is_changeable) {
78264 BV_SET(fields, 1);
78265 }
78266
78267 differ = (old->initial_setting != real_packet->initial_setting);
78268 if (differ) {
78269 different++;
78270 }
78271 if (packet->initial_setting) {
78272 BV_SET(fields, 2);
78273 }
78274
78275 differ = (old->setdef != real_packet->setdef);
78276 if (differ) {
78277 different++;
78278 BV_SET(fields, 3);
78279 }
78280
78281 differ = (old->val != real_packet->val);
78282 if (differ) {
78283 different++;
78284 BV_SET(fields, 4);
78285 }
78286
78287 differ = (old->default_val != real_packet->default_val);
78288 if (differ) {
78289 different++;
78290 BV_SET(fields, 5);
78291 }
78292
78293 differ = (old->bits_num != real_packet->bits_num);
78294 if (differ) {
78295 different++;
78296 BV_SET(fields, 6);
78297 }
78298
78299 differ = (old->bits_num != real_packet->bits_num);
78300 if (!differ) {
78301 int i;
78302
78303 for (i = 0; i < real_packet->bits_num; i++) {
78304 differ = (strcmp(old->support_names[i], real_packet->support_names[i]) != 0);
78305 if (differ) {
78306 break;
78307 }
78308 }
78309 }
78310 if (differ) {
78311 different++;
78312 BV_SET(fields, 7);
78313 }
78314
78315 differ = (old->bits_num != real_packet->bits_num);
78316 if (!differ) {
78317 int i;
78318
78319 for (i = 0; i < real_packet->bits_num; i++) {
78320 differ = (strcmp(old->pretty_names[i], real_packet->pretty_names[i]) != 0);
78321 if (differ) {
78322 break;
78323 }
78324 }
78325 }
78326 if (differ) {
78327 different++;
78328 BV_SET(fields, 8);
78329 }
78330
78331 if (different == 0) {
78332 log_packet_detailed(" no change -> discard");
78334 }
78335
78336#ifdef FREECIV_JSON_CONNECTION
78337 field_addr.name = "fields";
78338#endif /* FREECIV_JSON_CONNECTION */
78339 e = 0;
78340 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78341 if (e) {
78342 log_packet_detailed("fields bitvector error detected");
78343 }
78344#ifdef FREECIV_JSON_CONNECTION
78345 field_addr.name = "id";
78346#endif /* FREECIV_JSON_CONNECTION */
78347 e = 0;
78348 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
78349 if (e) {
78350 log_packet_detailed("'id' field error detected");
78351 }
78352
78353 /* field 0 is folded into the header */
78354 /* field 1 is folded into the header */
78355 /* field 2 is folded into the header */
78356 if (BV_ISSET(fields, 3)) {
78357 log_packet_detailed(" field 'setdef' has changed");
78358#ifdef FREECIV_JSON_CONNECTION
78359 field_addr.name = "setdef";
78360#endif /* FREECIV_JSON_CONNECTION */
78361 e = 0;
78362 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
78363 if (e) {
78364 log_packet_detailed("'setdef' field error detected");
78365 }
78366 }
78367 if (BV_ISSET(fields, 4)) {
78368 log_packet_detailed(" field 'val' has changed");
78369#ifdef FREECIV_JSON_CONNECTION
78370 field_addr.name = "val";
78371#endif /* FREECIV_JSON_CONNECTION */
78372 e = 0;
78373 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
78374 if (e) {
78375 log_packet_detailed("'val' field error detected");
78376 }
78377 }
78378 if (BV_ISSET(fields, 5)) {
78379 log_packet_detailed(" field 'default_val' has changed");
78380#ifdef FREECIV_JSON_CONNECTION
78381 field_addr.name = "default_val";
78382#endif /* FREECIV_JSON_CONNECTION */
78383 e = 0;
78384 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
78385 if (e) {
78386 log_packet_detailed("'default_val' field error detected");
78387 }
78388 }
78389 if (BV_ISSET(fields, 6)) {
78390 log_packet_detailed(" field 'bits_num' has changed");
78391#ifdef FREECIV_JSON_CONNECTION
78392 field_addr.name = "bits_num";
78393#endif /* FREECIV_JSON_CONNECTION */
78394 e = 0;
78395 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
78396 if (e) {
78397 log_packet_detailed("'bits_num' field error detected");
78398 }
78399 }
78400 if (BV_ISSET(fields, 7)) {
78401 log_packet_detailed(" field 'support_names' has changed");
78402#ifdef FREECIV_JSON_CONNECTION
78403 field_addr.name = "support_names";
78404#endif /* FREECIV_JSON_CONNECTION */
78405 e = 0;
78406 {
78407 int i;
78408
78409#ifdef FREECIV_JSON_CONNECTION
78410 /* Create the array. */
78411 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
78412
78413 /* Enter the array. */
78414 field_addr.sub_location = plocation_elem_new(0);
78415#endif /* FREECIV_JSON_CONNECTION */
78416
78417 for (i = 0; i < real_packet->bits_num; i++) {
78418#ifdef FREECIV_JSON_CONNECTION
78419 /* Next array element. */
78420 field_addr.sub_location->number = i;
78421#endif /* FREECIV_JSON_CONNECTION */
78422
78423 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
78424 }
78425
78426#ifdef FREECIV_JSON_CONNECTION
78427 /* Exit array. */
78428 FC_FREE(field_addr.sub_location);
78429#endif /* FREECIV_JSON_CONNECTION */
78430 }
78431 if (e) {
78432 log_packet_detailed("'support_names' field error detected");
78433 }
78434 }
78435 if (BV_ISSET(fields, 8)) {
78436 log_packet_detailed(" field 'pretty_names' has changed");
78437#ifdef FREECIV_JSON_CONNECTION
78438 field_addr.name = "pretty_names";
78439#endif /* FREECIV_JSON_CONNECTION */
78440 e = 0;
78441 {
78442 int i;
78443
78444#ifdef FREECIV_JSON_CONNECTION
78445 /* Create the array. */
78446 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
78447
78448 /* Enter the array. */
78449 field_addr.sub_location = plocation_elem_new(0);
78450#endif /* FREECIV_JSON_CONNECTION */
78451
78452 for (i = 0; i < real_packet->bits_num; i++) {
78453#ifdef FREECIV_JSON_CONNECTION
78454 /* Next array element. */
78455 field_addr.sub_location->number = i;
78456#endif /* FREECIV_JSON_CONNECTION */
78457
78458 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
78459 }
78460
78461#ifdef FREECIV_JSON_CONNECTION
78462 /* Exit array. */
78463 FC_FREE(field_addr.sub_location);
78464#endif /* FREECIV_JSON_CONNECTION */
78465 }
78466 if (e) {
78467 log_packet_detailed("'pretty_names' field error detected");
78468 }
78469 }
78470
78471 *old = *real_packet;
78472#endif /* FREECIV_DELTA_PROTOCOL */
78473#ifndef FREECIV_DELTA_PROTOCOL
78474#ifdef FREECIV_JSON_CONNECTION
78475 field_addr.name = "id";
78476#endif /* FREECIV_JSON_CONNECTION */
78477 e = 0;
78478 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
78479 if (e) {
78480 log_packet_detailed("'id' field error detected");
78481 }
78482#ifdef FREECIV_JSON_CONNECTION
78483 field_addr.name = "is_visible";
78484#endif /* FREECIV_JSON_CONNECTION */
78485 e = 0;
78486 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_visible);
78487 if (e) {
78488 log_packet_detailed("'is_visible' field error detected");
78489 }
78490#ifdef FREECIV_JSON_CONNECTION
78491 field_addr.name = "is_changeable";
78492#endif /* FREECIV_JSON_CONNECTION */
78493 e = 0;
78494 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_changeable);
78495 if (e) {
78496 log_packet_detailed("'is_changeable' field error detected");
78497 }
78498#ifdef FREECIV_JSON_CONNECTION
78499 field_addr.name = "initial_setting";
78500#endif /* FREECIV_JSON_CONNECTION */
78501 e = 0;
78502 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->initial_setting);
78503 if (e) {
78504 log_packet_detailed("'initial_setting' field error detected");
78505 }
78506#ifdef FREECIV_JSON_CONNECTION
78507 field_addr.name = "setdef";
78508#endif /* FREECIV_JSON_CONNECTION */
78509 e = 0;
78510 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->setdef);
78511 if (e) {
78512 log_packet_detailed("'setdef' field error detected");
78513 }
78514#ifdef FREECIV_JSON_CONNECTION
78515 field_addr.name = "val";
78516#endif /* FREECIV_JSON_CONNECTION */
78517 e = 0;
78518 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->val);
78519 if (e) {
78520 log_packet_detailed("'val' field error detected");
78521 }
78522#ifdef FREECIV_JSON_CONNECTION
78523 field_addr.name = "default_val";
78524#endif /* FREECIV_JSON_CONNECTION */
78525 e = 0;
78526 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->default_val);
78527 if (e) {
78528 log_packet_detailed("'default_val' field error detected");
78529 }
78530#ifdef FREECIV_JSON_CONNECTION
78531 field_addr.name = "bits_num";
78532#endif /* FREECIV_JSON_CONNECTION */
78533 e = 0;
78534 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->bits_num);
78535 if (e) {
78536 log_packet_detailed("'bits_num' field error detected");
78537 }
78538#ifdef FREECIV_JSON_CONNECTION
78539 field_addr.name = "support_names";
78540#endif /* FREECIV_JSON_CONNECTION */
78541 e = 0;
78542 {
78543 int i;
78544
78545#ifdef FREECIV_JSON_CONNECTION
78546 /* Create the array. */
78547 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
78548
78549 /* Enter the array. */
78550 field_addr.sub_location = plocation_elem_new(0);
78551#endif /* FREECIV_JSON_CONNECTION */
78552
78553 for (i = 0; i < real_packet->bits_num; i++) {
78554#ifdef FREECIV_JSON_CONNECTION
78555 /* Next array element. */
78556 field_addr.sub_location->number = i;
78557#endif /* FREECIV_JSON_CONNECTION */
78558
78559 e |= DIO_PUT(string, &dout, &field_addr, real_packet->support_names[i]);
78560 }
78561
78562#ifdef FREECIV_JSON_CONNECTION
78563 /* Exit array. */
78564 FC_FREE(field_addr.sub_location);
78565#endif /* FREECIV_JSON_CONNECTION */
78566 }
78567 if (e) {
78568 log_packet_detailed("'support_names' field error detected");
78569 }
78570#ifdef FREECIV_JSON_CONNECTION
78571 field_addr.name = "pretty_names";
78572#endif /* FREECIV_JSON_CONNECTION */
78573 e = 0;
78574 {
78575 int i;
78576
78577#ifdef FREECIV_JSON_CONNECTION
78578 /* Create the array. */
78579 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->bits_num);
78580
78581 /* Enter the array. */
78582 field_addr.sub_location = plocation_elem_new(0);
78583#endif /* FREECIV_JSON_CONNECTION */
78584
78585 for (i = 0; i < real_packet->bits_num; i++) {
78586#ifdef FREECIV_JSON_CONNECTION
78587 /* Next array element. */
78588 field_addr.sub_location->number = i;
78589#endif /* FREECIV_JSON_CONNECTION */
78590
78591 e |= DIO_PUT(string, &dout, &field_addr, real_packet->pretty_names[i]);
78592 }
78593
78594#ifdef FREECIV_JSON_CONNECTION
78595 /* Exit array. */
78596 FC_FREE(field_addr.sub_location);
78597#endif /* FREECIV_JSON_CONNECTION */
78598 }
78599 if (e) {
78600 log_packet_detailed("'pretty_names' field error detected");
78601 }
78602
78603#endif
78605}
78606
78608{
78609 if (!pc->used) {
78610 log_error("WARNING: trying to send data to the closed connection %s",
78612 return -1;
78613 }
78614 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet != NULL, -1,
78615 "Handler for PACKET_SERVER_SETTING_BITWISE not installed");
78616 return pc->phs.handlers->send[PACKET_SERVER_SETTING_BITWISE].packet(pc, packet);
78617}
78618
78619#ifdef FREECIV_DELTA_PROTOCOL
78620#define hash_packet_set_topology_100 hash_const
78621
78622#define cmp_packet_set_topology_100 cmp_const
78623
78625#endif /* FREECIV_DELTA_PROTOCOL */
78626
78628{
78629#ifdef FREECIV_DELTA_PROTOCOL
78631 struct packet_set_topology *old;
78632 struct genhash **hash = pc->phs.received + PACKET_SET_TOPOLOGY;
78633#endif /* FREECIV_DELTA_PROTOCOL */
78635#ifdef FREECIV_JSON_CONNECTION
78636 struct plocation field_addr;
78637 {
78641 }
78642#endif /* FREECIV_JSON_CONNECTION */
78643
78644#ifdef FREECIV_DELTA_PROTOCOL
78645#ifdef FREECIV_JSON_CONNECTION
78646 field_addr.name = "fields";
78647#endif /* FREECIV_JSON_CONNECTION */
78648 DIO_BV_GET(&din, &field_addr, fields);
78649
78650#else /* FREECIV_DELTA_PROTOCOL */
78651#ifdef FREECIV_JSON_CONNECTION
78652 field_addr.name = "topology_id";
78653#endif /* FREECIV_JSON_CONNECTION */
78654 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
78655 RECEIVE_PACKET_FIELD_ERROR(topology_id);
78656 }
78657#ifdef FREECIV_JSON_CONNECTION
78658 field_addr.name = "wrap_id";
78659#endif /* FREECIV_JSON_CONNECTION */
78660 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
78662 }
78663#endif
78664 log_packet_detailed("packet_set_topology_100: got info about ()");
78665
78666#ifdef FREECIV_DELTA_PROTOCOL
78667 if (NULL == *hash) {
78669 NULL, NULL, NULL, free);
78670 }
78671
78672 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78673 *real_packet = *old;
78674 } else {
78675 log_packet_detailed(" no old info");
78676 memset(real_packet, 0, sizeof(*real_packet));
78677 }
78678
78679 if (BV_ISSET(fields, 0)) {
78680 log_packet_detailed(" got field 'topology_id'");
78681#ifdef FREECIV_JSON_CONNECTION
78682 field_addr.name = "topology_id";
78683#endif /* FREECIV_JSON_CONNECTION */
78684 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->topology_id)) {
78685 RECEIVE_PACKET_FIELD_ERROR(topology_id);
78686 }
78687 }
78688 if (BV_ISSET(fields, 1)) {
78689 log_packet_detailed(" got field 'wrap_id'");
78690#ifdef FREECIV_JSON_CONNECTION
78691 field_addr.name = "wrap_id";
78692#endif /* FREECIV_JSON_CONNECTION */
78693 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->wrap_id)) {
78695 }
78696 }
78697
78698 if (NULL == old) {
78699 old = fc_malloc(sizeof(*old));
78700 *old = *real_packet;
78701 genhash_insert(*hash, old, old);
78702 } else {
78703 *old = *real_packet;
78704 }
78705
78706#endif /* FREECIV_DELTA_PROTOCOL */
78708}
78709
78710static int send_packet_set_topology_100(struct connection *pc, const struct packet_set_topology *packet)
78711{
78712 const struct packet_set_topology *real_packet = packet;
78713 int e;
78714#ifdef FREECIV_DELTA_PROTOCOL
78716 struct packet_set_topology *old;
78717 bool differ;
78718 struct genhash **hash = pc->phs.sent + PACKET_SET_TOPOLOGY;
78719#endif /* FREECIV_DELTA_PROTOCOL */
78721#ifdef FREECIV_JSON_CONNECTION
78722 struct plocation field_addr;
78723 {
78727 }
78728#endif /* FREECIV_JSON_CONNECTION */
78729
78730 log_packet_detailed("packet_set_topology_100: sending info about ()");
78731
78732#ifdef FREECIV_DELTA_PROTOCOL
78733 if (NULL == *hash) {
78735 NULL, NULL, NULL, free);
78736 }
78737 BV_CLR_ALL(fields);
78738
78739 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
78740 old = fc_malloc(sizeof(*old));
78741 *old = *real_packet;
78742 genhash_insert(*hash, old, old);
78743 memset(old, 0, sizeof(*old));
78744 }
78745 differ = (old->topology_id != real_packet->topology_id);
78746 if (differ) {
78747 BV_SET(fields, 0);
78748 }
78749
78750 differ = (old->wrap_id != real_packet->wrap_id);
78751 if (differ) {
78752 BV_SET(fields, 1);
78753 }
78754
78755
78756#ifdef FREECIV_JSON_CONNECTION
78757 field_addr.name = "fields";
78758#endif /* FREECIV_JSON_CONNECTION */
78759 e = 0;
78760 e |= DIO_BV_PUT(&dout, &field_addr, fields);
78761 if (e) {
78762 log_packet_detailed("fields bitvector error detected");
78763 }
78764
78765 if (BV_ISSET(fields, 0)) {
78766 log_packet_detailed(" field 'topology_id' has changed");
78767#ifdef FREECIV_JSON_CONNECTION
78768 field_addr.name = "topology_id";
78769#endif /* FREECIV_JSON_CONNECTION */
78770 e = 0;
78771 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
78772 if (e) {
78773 log_packet_detailed("'topology_id' field error detected");
78774 }
78775 }
78776 if (BV_ISSET(fields, 1)) {
78777 log_packet_detailed(" field 'wrap_id' has changed");
78778#ifdef FREECIV_JSON_CONNECTION
78779 field_addr.name = "wrap_id";
78780#endif /* FREECIV_JSON_CONNECTION */
78781 e = 0;
78782 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
78783 if (e) {
78784 log_packet_detailed("'wrap_id' field error detected");
78785 }
78786 }
78787
78788 *old = *real_packet;
78789#endif /* FREECIV_DELTA_PROTOCOL */
78790#ifndef FREECIV_DELTA_PROTOCOL
78791#ifdef FREECIV_JSON_CONNECTION
78792 field_addr.name = "topology_id";
78793#endif /* FREECIV_JSON_CONNECTION */
78794 e = 0;
78795 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->topology_id);
78796 if (e) {
78797 log_packet_detailed("'topology_id' field error detected");
78798 }
78799#ifdef FREECIV_JSON_CONNECTION
78800 field_addr.name = "wrap_id";
78801#endif /* FREECIV_JSON_CONNECTION */
78802 e = 0;
78803 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->wrap_id);
78804 if (e) {
78805 log_packet_detailed("'wrap_id' field error detected");
78806 }
78807
78808#endif
78810}
78811
78813{
78814 if (!pc->used) {
78815 log_error("WARNING: trying to send data to the closed connection %s",
78817 return -1;
78818 }
78819 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet != NULL, -1,
78820 "Handler for PACKET_SET_TOPOLOGY not installed");
78821 return pc->phs.handlers->send[PACKET_SET_TOPOLOGY].packet(pc, packet);
78822}
78823
78824#ifdef FREECIV_DELTA_PROTOCOL
78825#define hash_packet_ruleset_effect_100 hash_const
78826
78827#define cmp_packet_ruleset_effect_100 cmp_const
78828
78830#endif /* FREECIV_DELTA_PROTOCOL */
78831
78833{
78834#ifdef FREECIV_DELTA_PROTOCOL
78836 struct packet_ruleset_effect *old;
78837 struct genhash **hash = pc->phs.received + PACKET_RULESET_EFFECT;
78838#endif /* FREECIV_DELTA_PROTOCOL */
78840#ifdef FREECIV_JSON_CONNECTION
78841 struct plocation field_addr;
78842 {
78846 }
78847#endif /* FREECIV_JSON_CONNECTION */
78848
78849#ifdef FREECIV_DELTA_PROTOCOL
78850#ifdef FREECIV_JSON_CONNECTION
78851 field_addr.name = "fields";
78852#endif /* FREECIV_JSON_CONNECTION */
78853 DIO_BV_GET(&din, &field_addr, fields);
78854
78855#else /* FREECIV_DELTA_PROTOCOL */
78856#ifdef FREECIV_JSON_CONNECTION
78857 field_addr.name = "effect_type";
78858#endif /* FREECIV_JSON_CONNECTION */
78859 {
78860 int readin;
78861
78862 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78863 RECEIVE_PACKET_FIELD_ERROR(effect_type);
78864 }
78865 real_packet->effect_type = readin;
78866 }
78867#ifdef FREECIV_JSON_CONNECTION
78868 field_addr.name = "effect_value";
78869#endif /* FREECIV_JSON_CONNECTION */
78870 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
78871 RECEIVE_PACKET_FIELD_ERROR(effect_value);
78872 }
78873#ifdef FREECIV_JSON_CONNECTION
78874 field_addr.name = "has_multiplier";
78875#endif /* FREECIV_JSON_CONNECTION */
78876 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->has_multiplier)) {
78877 RECEIVE_PACKET_FIELD_ERROR(has_multiplier);
78878 }
78879#ifdef FREECIV_JSON_CONNECTION
78880 field_addr.name = "multiplier";
78881#endif /* FREECIV_JSON_CONNECTION */
78882 {
78883 int readin;
78884
78885 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78887 }
78888 real_packet->multiplier = readin;
78889 }
78890#ifdef FREECIV_JSON_CONNECTION
78891 field_addr.name = "reqs_count";
78892#endif /* FREECIV_JSON_CONNECTION */
78893 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
78894 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
78895 }
78896#ifdef FREECIV_JSON_CONNECTION
78897 field_addr.name = "reqs";
78898#endif /* FREECIV_JSON_CONNECTION */
78899 if (real_packet->reqs_count > MAX_NUM_REQS) {
78900 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
78901 }
78902 {
78903 int i;
78904
78905#ifdef FREECIV_JSON_CONNECTION
78906 /* Enter array. */
78907 field_addr.sub_location = plocation_elem_new(0);
78908#endif /* FREECIV_JSON_CONNECTION */
78909
78910 for (i = 0; i < real_packet->reqs_count; i++) {
78911#ifdef FREECIV_JSON_CONNECTION
78912 field_addr.sub_location->number = i;
78913#endif /* FREECIV_JSON_CONNECTION */
78914
78915 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
78917 }
78918 }
78919
78920#ifdef FREECIV_JSON_CONNECTION
78921 /* Exit array. */
78922 FC_FREE(field_addr.sub_location);
78923#endif /* FREECIV_JSON_CONNECTION */
78924 }
78925#endif
78926 log_packet_detailed("packet_ruleset_effect_100: got info about ()");
78927
78928#ifdef FREECIV_DELTA_PROTOCOL
78929 if (NULL == *hash) {
78931 NULL, NULL, NULL, free);
78932 }
78933
78934 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
78935 *real_packet = *old;
78936 } else {
78937 log_packet_detailed(" no old info");
78938 memset(real_packet, 0, sizeof(*real_packet));
78939 }
78940
78941 if (BV_ISSET(fields, 0)) {
78942 log_packet_detailed(" got field 'effect_type'");
78943#ifdef FREECIV_JSON_CONNECTION
78944 field_addr.name = "effect_type";
78945#endif /* FREECIV_JSON_CONNECTION */
78946 {
78947 int readin;
78948
78949 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78950 RECEIVE_PACKET_FIELD_ERROR(effect_type);
78951 }
78952 real_packet->effect_type = readin;
78953 }
78954 }
78955 if (BV_ISSET(fields, 1)) {
78956 log_packet_detailed(" got field 'effect_value'");
78957#ifdef FREECIV_JSON_CONNECTION
78958 field_addr.name = "effect_value";
78959#endif /* FREECIV_JSON_CONNECTION */
78960 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->effect_value)) {
78961 RECEIVE_PACKET_FIELD_ERROR(effect_value);
78962 }
78963 }
78964 real_packet->has_multiplier = BV_ISSET(fields, 2);
78965 if (BV_ISSET(fields, 3)) {
78966 log_packet_detailed(" got field 'multiplier'");
78967#ifdef FREECIV_JSON_CONNECTION
78968 field_addr.name = "multiplier";
78969#endif /* FREECIV_JSON_CONNECTION */
78970 {
78971 int readin;
78972
78973 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
78975 }
78976 real_packet->multiplier = readin;
78977 }
78978 }
78979 if (BV_ISSET(fields, 4)) {
78980 log_packet_detailed(" got field 'reqs_count'");
78981#ifdef FREECIV_JSON_CONNECTION
78982 field_addr.name = "reqs_count";
78983#endif /* FREECIV_JSON_CONNECTION */
78984 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->reqs_count)) {
78985 RECEIVE_PACKET_FIELD_ERROR(reqs_count);
78986 }
78987 }
78988 if (BV_ISSET(fields, 5)) {
78989 log_packet_detailed(" got field 'reqs'");
78990#ifdef FREECIV_JSON_CONNECTION
78991 field_addr.name = "reqs";
78992#endif /* FREECIV_JSON_CONNECTION */
78993 if (real_packet->reqs_count > MAX_NUM_REQS) {
78994 RECEIVE_PACKET_FIELD_ERROR(reqs, ": truncation array");
78995 }
78996 {
78997 int i;
78998
78999#ifdef FREECIV_JSON_CONNECTION
79000 /* Enter array. */
79001 field_addr.sub_location = plocation_elem_new(0);
79002#endif /* FREECIV_JSON_CONNECTION */
79003
79004 for (i = 0; i < real_packet->reqs_count; i++) {
79005#ifdef FREECIV_JSON_CONNECTION
79006 field_addr.sub_location->number = i;
79007#endif /* FREECIV_JSON_CONNECTION */
79008
79009 if (!DIO_GET(requirement, &din, &field_addr, &real_packet->reqs[i])) {
79011 }
79012 }
79013
79014#ifdef FREECIV_JSON_CONNECTION
79015 /* Exit array. */
79016 FC_FREE(field_addr.sub_location);
79017#endif /* FREECIV_JSON_CONNECTION */
79018 }
79019 }
79020
79021 if (NULL == old) {
79022 old = fc_malloc(sizeof(*old));
79023 *old = *real_packet;
79024 genhash_insert(*hash, old, old);
79025 } else {
79026 *old = *real_packet;
79027 }
79028
79029#endif /* FREECIV_DELTA_PROTOCOL */
79031}
79032
79034{
79035 const struct packet_ruleset_effect *real_packet = packet;
79036 int e;
79037#ifdef FREECIV_DELTA_PROTOCOL
79039 struct packet_ruleset_effect *old;
79040 bool differ;
79041 struct genhash **hash = pc->phs.sent + PACKET_RULESET_EFFECT;
79042#endif /* FREECIV_DELTA_PROTOCOL */
79044#ifdef FREECIV_JSON_CONNECTION
79045 struct plocation field_addr;
79046 {
79050 }
79051#endif /* FREECIV_JSON_CONNECTION */
79052
79053 log_packet_detailed("packet_ruleset_effect_100: sending info about ()");
79054
79055#ifdef FREECIV_DELTA_PROTOCOL
79056 if (NULL == *hash) {
79058 NULL, NULL, NULL, free);
79059 }
79060 BV_CLR_ALL(fields);
79061
79062 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79063 old = fc_malloc(sizeof(*old));
79064 *old = *real_packet;
79065 genhash_insert(*hash, old, old);
79066 memset(old, 0, sizeof(*old));
79067 }
79068 differ = (old->effect_type != real_packet->effect_type);
79069 if (differ) {
79070 BV_SET(fields, 0);
79071 }
79072
79073 differ = (old->effect_value != real_packet->effect_value);
79074 if (differ) {
79075 BV_SET(fields, 1);
79076 }
79077
79078 if (packet->has_multiplier) {
79079 BV_SET(fields, 2);
79080 }
79081
79082 differ = (old->multiplier != real_packet->multiplier);
79083 if (differ) {
79084 BV_SET(fields, 3);
79085 }
79086
79087 differ = (old->reqs_count != real_packet->reqs_count);
79088 if (differ) {
79089 BV_SET(fields, 4);
79090 }
79091
79092 differ = (old->reqs_count != real_packet->reqs_count);
79093 if (!differ) {
79094 int i;
79095
79096 for (i = 0; i < real_packet->reqs_count; i++) {
79097 differ = !are_requirements_equal(&old->reqs[i], &real_packet->reqs[i]);
79098 if (differ) {
79099 break;
79100 }
79101 }
79102 }
79103 if (differ) {
79104 BV_SET(fields, 5);
79105 }
79106
79107
79108#ifdef FREECIV_JSON_CONNECTION
79109 field_addr.name = "fields";
79110#endif /* FREECIV_JSON_CONNECTION */
79111 e = 0;
79112 e |= DIO_BV_PUT(&dout, &field_addr, fields);
79113 if (e) {
79114 log_packet_detailed("fields bitvector error detected");
79115 }
79116
79117 if (BV_ISSET(fields, 0)) {
79118 log_packet_detailed(" field 'effect_type' has changed");
79119#ifdef FREECIV_JSON_CONNECTION
79120 field_addr.name = "effect_type";
79121#endif /* FREECIV_JSON_CONNECTION */
79122 e = 0;
79123 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
79124 if (e) {
79125 log_packet_detailed("'effect_type' field error detected");
79126 }
79127 }
79128 if (BV_ISSET(fields, 1)) {
79129 log_packet_detailed(" field 'effect_value' has changed");
79130#ifdef FREECIV_JSON_CONNECTION
79131 field_addr.name = "effect_value";
79132#endif /* FREECIV_JSON_CONNECTION */
79133 e = 0;
79134 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
79135 if (e) {
79136 log_packet_detailed("'effect_value' field error detected");
79137 }
79138 }
79139 /* field 2 is folded into the header */
79140 if (BV_ISSET(fields, 3)) {
79141 log_packet_detailed(" field 'multiplier' has changed");
79142#ifdef FREECIV_JSON_CONNECTION
79143 field_addr.name = "multiplier";
79144#endif /* FREECIV_JSON_CONNECTION */
79145 e = 0;
79146 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
79147 if (e) {
79148 log_packet_detailed("'multiplier' field error detected");
79149 }
79150 }
79151 if (BV_ISSET(fields, 4)) {
79152 log_packet_detailed(" field 'reqs_count' has changed");
79153#ifdef FREECIV_JSON_CONNECTION
79154 field_addr.name = "reqs_count";
79155#endif /* FREECIV_JSON_CONNECTION */
79156 e = 0;
79157 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
79158 if (e) {
79159 log_packet_detailed("'reqs_count' field error detected");
79160 }
79161 }
79162 if (BV_ISSET(fields, 5)) {
79163 log_packet_detailed(" field 'reqs' has changed");
79164#ifdef FREECIV_JSON_CONNECTION
79165 field_addr.name = "reqs";
79166#endif /* FREECIV_JSON_CONNECTION */
79167 e = 0;
79168 {
79169 int i;
79170
79171#ifdef FREECIV_JSON_CONNECTION
79172 /* Create the array. */
79173 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
79174
79175 /* Enter the array. */
79176 field_addr.sub_location = plocation_elem_new(0);
79177#endif /* FREECIV_JSON_CONNECTION */
79178
79179 for (i = 0; i < real_packet->reqs_count; i++) {
79180#ifdef FREECIV_JSON_CONNECTION
79181 /* Next array element. */
79182 field_addr.sub_location->number = i;
79183#endif /* FREECIV_JSON_CONNECTION */
79184
79185 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
79186 }
79187
79188#ifdef FREECIV_JSON_CONNECTION
79189 /* Exit array. */
79190 FC_FREE(field_addr.sub_location);
79191#endif /* FREECIV_JSON_CONNECTION */
79192 }
79193 if (e) {
79194 log_packet_detailed("'reqs' field error detected");
79195 }
79196 }
79197
79198 *old = *real_packet;
79199#endif /* FREECIV_DELTA_PROTOCOL */
79200#ifndef FREECIV_DELTA_PROTOCOL
79201#ifdef FREECIV_JSON_CONNECTION
79202 field_addr.name = "effect_type";
79203#endif /* FREECIV_JSON_CONNECTION */
79204 e = 0;
79205 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->effect_type);
79206 if (e) {
79207 log_packet_detailed("'effect_type' field error detected");
79208 }
79209#ifdef FREECIV_JSON_CONNECTION
79210 field_addr.name = "effect_value";
79211#endif /* FREECIV_JSON_CONNECTION */
79212 e = 0;
79213 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->effect_value);
79214 if (e) {
79215 log_packet_detailed("'effect_value' field error detected");
79216 }
79217#ifdef FREECIV_JSON_CONNECTION
79218 field_addr.name = "has_multiplier";
79219#endif /* FREECIV_JSON_CONNECTION */
79220 e = 0;
79221 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->has_multiplier);
79222 if (e) {
79223 log_packet_detailed("'has_multiplier' field error detected");
79224 }
79225#ifdef FREECIV_JSON_CONNECTION
79226 field_addr.name = "multiplier";
79227#endif /* FREECIV_JSON_CONNECTION */
79228 e = 0;
79229 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->multiplier);
79230 if (e) {
79231 log_packet_detailed("'multiplier' field error detected");
79232 }
79233#ifdef FREECIV_JSON_CONNECTION
79234 field_addr.name = "reqs_count";
79235#endif /* FREECIV_JSON_CONNECTION */
79236 e = 0;
79237 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->reqs_count);
79238 if (e) {
79239 log_packet_detailed("'reqs_count' field error detected");
79240 }
79241#ifdef FREECIV_JSON_CONNECTION
79242 field_addr.name = "reqs";
79243#endif /* FREECIV_JSON_CONNECTION */
79244 e = 0;
79245 {
79246 int i;
79247
79248#ifdef FREECIV_JSON_CONNECTION
79249 /* Create the array. */
79250 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->reqs_count);
79251
79252 /* Enter the array. */
79253 field_addr.sub_location = plocation_elem_new(0);
79254#endif /* FREECIV_JSON_CONNECTION */
79255
79256 for (i = 0; i < real_packet->reqs_count; i++) {
79257#ifdef FREECIV_JSON_CONNECTION
79258 /* Next array element. */
79259 field_addr.sub_location->number = i;
79260#endif /* FREECIV_JSON_CONNECTION */
79261
79262 e |= DIO_PUT(requirement, &dout, &field_addr, &real_packet->reqs[i]);
79263 }
79264
79265#ifdef FREECIV_JSON_CONNECTION
79266 /* Exit array. */
79267 FC_FREE(field_addr.sub_location);
79268#endif /* FREECIV_JSON_CONNECTION */
79269 }
79270 if (e) {
79271 log_packet_detailed("'reqs' field error detected");
79272 }
79273
79274#endif
79276}
79277
79279{
79280 if (!pc->used) {
79281 log_error("WARNING: trying to send data to the closed connection %s",
79283 return -1;
79284 }
79285 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet != NULL, -1,
79286 "Handler for PACKET_RULESET_EFFECT not installed");
79287 return pc->phs.handlers->send[PACKET_RULESET_EFFECT].packet(pc, packet);
79288}
79289
79290void lsend_packet_ruleset_effect(struct conn_list *dest, const struct packet_ruleset_effect *packet)
79291{
79292 conn_list_iterate(dest, pconn) {
79295}
79296
79297#ifdef FREECIV_DELTA_PROTOCOL
79298#define hash_packet_ruleset_resource_100 hash_const
79299
79300#define cmp_packet_ruleset_resource_100 cmp_const
79301
79303#endif /* FREECIV_DELTA_PROTOCOL */
79304
79306{
79307#ifdef FREECIV_DELTA_PROTOCOL
79309 struct packet_ruleset_resource *old;
79310 struct genhash **hash = pc->phs.received + PACKET_RULESET_RESOURCE;
79311#endif /* FREECIV_DELTA_PROTOCOL */
79313#ifdef FREECIV_JSON_CONNECTION
79314 struct plocation field_addr;
79315 {
79319 }
79320#endif /* FREECIV_JSON_CONNECTION */
79321
79322#ifdef FREECIV_DELTA_PROTOCOL
79323#ifdef FREECIV_JSON_CONNECTION
79324 field_addr.name = "fields";
79325#endif /* FREECIV_JSON_CONNECTION */
79326 DIO_BV_GET(&din, &field_addr, fields);
79327
79328#else /* FREECIV_DELTA_PROTOCOL */
79329#ifdef FREECIV_JSON_CONNECTION
79330 field_addr.name = "id";
79331#endif /* FREECIV_JSON_CONNECTION */
79332 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
79334 }
79335#ifdef FREECIV_JSON_CONNECTION
79336 field_addr.name = "output";
79337#endif /* FREECIV_JSON_CONNECTION */
79338 {
79339 int i;
79340
79341#ifdef FREECIV_JSON_CONNECTION
79342 /* Enter array. */
79343 field_addr.sub_location = plocation_elem_new(0);
79344#endif /* FREECIV_JSON_CONNECTION */
79345
79346 for (i = 0; i < O_LAST; i++) {
79347#ifdef FREECIV_JSON_CONNECTION
79348 field_addr.sub_location->number = i;
79349#endif /* FREECIV_JSON_CONNECTION */
79350
79351 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
79353 }
79354 }
79355
79356#ifdef FREECIV_JSON_CONNECTION
79357 /* Exit array. */
79358 FC_FREE(field_addr.sub_location);
79359#endif /* FREECIV_JSON_CONNECTION */
79360 }
79361#endif
79362 log_packet_detailed("packet_ruleset_resource_100: got info about ()");
79363
79364#ifdef FREECIV_DELTA_PROTOCOL
79365 if (NULL == *hash) {
79367 NULL, NULL, NULL, free);
79368 }
79369
79370 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
79371 *real_packet = *old;
79372 } else {
79373 log_packet_detailed(" no old info");
79374 memset(real_packet, 0, sizeof(*real_packet));
79375 }
79376
79377 if (BV_ISSET(fields, 0)) {
79378 log_packet_detailed(" got field 'id'");
79379#ifdef FREECIV_JSON_CONNECTION
79380 field_addr.name = "id";
79381#endif /* FREECIV_JSON_CONNECTION */
79382 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->id)) {
79384 }
79385 }
79386 if (BV_ISSET(fields, 1)) {
79387 log_packet_detailed(" got field 'output'");
79388#ifdef FREECIV_JSON_CONNECTION
79389 field_addr.name = "output";
79390#endif /* FREECIV_JSON_CONNECTION */
79391 {
79392 int i;
79393
79394#ifdef FREECIV_JSON_CONNECTION
79395 /* Enter array. */
79396 field_addr.sub_location = plocation_elem_new(0);
79397#endif /* FREECIV_JSON_CONNECTION */
79398
79399 for (i = 0; i < O_LAST; i++) {
79400#ifdef FREECIV_JSON_CONNECTION
79401 field_addr.sub_location->number = i;
79402#endif /* FREECIV_JSON_CONNECTION */
79403
79404 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output[i])) {
79406 }
79407 }
79408
79409#ifdef FREECIV_JSON_CONNECTION
79410 /* Exit array. */
79411 FC_FREE(field_addr.sub_location);
79412#endif /* FREECIV_JSON_CONNECTION */
79413 }
79414 }
79415
79416 if (NULL == old) {
79417 old = fc_malloc(sizeof(*old));
79418 *old = *real_packet;
79419 genhash_insert(*hash, old, old);
79420 } else {
79421 *old = *real_packet;
79422 }
79423
79424#endif /* FREECIV_DELTA_PROTOCOL */
79426}
79427
79429{
79430 const struct packet_ruleset_resource *real_packet = packet;
79431 int e;
79432#ifdef FREECIV_DELTA_PROTOCOL
79434 struct packet_ruleset_resource *old;
79435 bool differ;
79436 struct genhash **hash = pc->phs.sent + PACKET_RULESET_RESOURCE;
79437#endif /* FREECIV_DELTA_PROTOCOL */
79439#ifdef FREECIV_JSON_CONNECTION
79440 struct plocation field_addr;
79441 {
79445 }
79446#endif /* FREECIV_JSON_CONNECTION */
79447
79448 log_packet_detailed("packet_ruleset_resource_100: sending info about ()");
79449
79450#ifdef FREECIV_DELTA_PROTOCOL
79451 if (NULL == *hash) {
79453 NULL, NULL, NULL, free);
79454 }
79455 BV_CLR_ALL(fields);
79456
79457 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79458 old = fc_malloc(sizeof(*old));
79459 *old = *real_packet;
79460 genhash_insert(*hash, old, old);
79461 memset(old, 0, sizeof(*old));
79462 }
79463 differ = (old->id != real_packet->id);
79464 if (differ) {
79465 BV_SET(fields, 0);
79466 }
79467
79468 differ = FALSE;
79469 {
79470 int i;
79471
79472 for (i = 0; i < O_LAST; i++) {
79473 differ = (old->output[i] != real_packet->output[i]);
79474 if (differ) {
79475 break;
79476 }
79477 }
79478 }
79479 if (differ) {
79480 BV_SET(fields, 1);
79481 }
79482
79483
79484#ifdef FREECIV_JSON_CONNECTION
79485 field_addr.name = "fields";
79486#endif /* FREECIV_JSON_CONNECTION */
79487 e = 0;
79488 e |= DIO_BV_PUT(&dout, &field_addr, fields);
79489 if (e) {
79490 log_packet_detailed("fields bitvector error detected");
79491 }
79492
79493 if (BV_ISSET(fields, 0)) {
79494 log_packet_detailed(" field 'id' has changed");
79495#ifdef FREECIV_JSON_CONNECTION
79496 field_addr.name = "id";
79497#endif /* FREECIV_JSON_CONNECTION */
79498 e = 0;
79499 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
79500 if (e) {
79501 log_packet_detailed("'id' field error detected");
79502 }
79503 }
79504 if (BV_ISSET(fields, 1)) {
79505 log_packet_detailed(" field 'output' has changed");
79506#ifdef FREECIV_JSON_CONNECTION
79507 field_addr.name = "output";
79508#endif /* FREECIV_JSON_CONNECTION */
79509 e = 0;
79510 {
79511 int i;
79512
79513#ifdef FREECIV_JSON_CONNECTION
79514 /* Create the array. */
79515 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
79516
79517 /* Enter the array. */
79518 field_addr.sub_location = plocation_elem_new(0);
79519#endif /* FREECIV_JSON_CONNECTION */
79520
79521 for (i = 0; i < O_LAST; i++) {
79522#ifdef FREECIV_JSON_CONNECTION
79523 /* Next array element. */
79524 field_addr.sub_location->number = i;
79525#endif /* FREECIV_JSON_CONNECTION */
79526
79527 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
79528 }
79529
79530#ifdef FREECIV_JSON_CONNECTION
79531 /* Exit array. */
79532 FC_FREE(field_addr.sub_location);
79533#endif /* FREECIV_JSON_CONNECTION */
79534 }
79535 if (e) {
79536 log_packet_detailed("'output' field error detected");
79537 }
79538 }
79539
79540 *old = *real_packet;
79541#endif /* FREECIV_DELTA_PROTOCOL */
79542#ifndef FREECIV_DELTA_PROTOCOL
79543#ifdef FREECIV_JSON_CONNECTION
79544 field_addr.name = "id";
79545#endif /* FREECIV_JSON_CONNECTION */
79546 e = 0;
79547 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->id);
79548 if (e) {
79549 log_packet_detailed("'id' field error detected");
79550 }
79551#ifdef FREECIV_JSON_CONNECTION
79552 field_addr.name = "output";
79553#endif /* FREECIV_JSON_CONNECTION */
79554 e = 0;
79555 {
79556 int i;
79557
79558#ifdef FREECIV_JSON_CONNECTION
79559 /* Create the array. */
79560 e |= DIO_PUT(farray, &dout, &field_addr, O_LAST);
79561
79562 /* Enter the array. */
79563 field_addr.sub_location = plocation_elem_new(0);
79564#endif /* FREECIV_JSON_CONNECTION */
79565
79566 for (i = 0; i < O_LAST; i++) {
79567#ifdef FREECIV_JSON_CONNECTION
79568 /* Next array element. */
79569 field_addr.sub_location->number = i;
79570#endif /* FREECIV_JSON_CONNECTION */
79571
79572 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output[i]);
79573 }
79574
79575#ifdef FREECIV_JSON_CONNECTION
79576 /* Exit array. */
79577 FC_FREE(field_addr.sub_location);
79578#endif /* FREECIV_JSON_CONNECTION */
79579 }
79580 if (e) {
79581 log_packet_detailed("'output' field error detected");
79582 }
79583
79584#endif
79586}
79587
79589{
79590 if (!pc->used) {
79591 log_error("WARNING: trying to send data to the closed connection %s",
79593 return -1;
79594 }
79595 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet != NULL, -1,
79596 "Handler for PACKET_RULESET_RESOURCE not installed");
79597 return pc->phs.handlers->send[PACKET_RULESET_RESOURCE].packet(pc, packet);
79598}
79599
79601{
79602 conn_list_iterate(dest, pconn) {
79605}
79606
79607#ifdef FREECIV_DELTA_PROTOCOL
79608#define hash_packet_scenario_info_100 hash_const
79609
79610#define cmp_packet_scenario_info_100 cmp_const
79611
79613#endif /* FREECIV_DELTA_PROTOCOL */
79614
79616{
79617#ifdef FREECIV_DELTA_PROTOCOL
79619 struct packet_scenario_info *old;
79620 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_INFO;
79621#endif /* FREECIV_DELTA_PROTOCOL */
79623#ifdef FREECIV_JSON_CONNECTION
79624 struct plocation field_addr;
79625 {
79629 }
79630#endif /* FREECIV_JSON_CONNECTION */
79631
79632#ifdef FREECIV_DELTA_PROTOCOL
79633#ifdef FREECIV_JSON_CONNECTION
79634 field_addr.name = "fields";
79635#endif /* FREECIV_JSON_CONNECTION */
79636 DIO_BV_GET(&din, &field_addr, fields);
79637
79638#else /* FREECIV_DELTA_PROTOCOL */
79639#ifdef FREECIV_JSON_CONNECTION
79640 field_addr.name = "is_scenario";
79641#endif /* FREECIV_JSON_CONNECTION */
79642 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_scenario)) {
79643 RECEIVE_PACKET_FIELD_ERROR(is_scenario);
79644 }
79645#ifdef FREECIV_JSON_CONNECTION
79646 field_addr.name = "name";
79647#endif /* FREECIV_JSON_CONNECTION */
79648 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
79650 }
79651#ifdef FREECIV_JSON_CONNECTION
79652 field_addr.name = "authors";
79653#endif /* FREECIV_JSON_CONNECTION */
79654 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
79656 }
79657#ifdef FREECIV_JSON_CONNECTION
79658 field_addr.name = "players";
79659#endif /* FREECIV_JSON_CONNECTION */
79660 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->players)) {
79662 }
79663#ifdef FREECIV_JSON_CONNECTION
79664 field_addr.name = "startpos_nations";
79665#endif /* FREECIV_JSON_CONNECTION */
79666 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
79667 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
79668 }
79669#ifdef FREECIV_JSON_CONNECTION
79670 field_addr.name = "save_random";
79671#endif /* FREECIV_JSON_CONNECTION */
79672 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->save_random)) {
79673 RECEIVE_PACKET_FIELD_ERROR(save_random);
79674 }
79675#ifdef FREECIV_JSON_CONNECTION
79676 field_addr.name = "prevent_new_cities";
79677#endif /* FREECIV_JSON_CONNECTION */
79678 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
79679 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
79680 }
79681#ifdef FREECIV_JSON_CONNECTION
79682 field_addr.name = "lake_flooding";
79683#endif /* FREECIV_JSON_CONNECTION */
79684 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
79685 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
79686 }
79687#ifdef FREECIV_JSON_CONNECTION
79688 field_addr.name = "handmade";
79689#endif /* FREECIV_JSON_CONNECTION */
79690 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->handmade)) {
79692 }
79693#ifdef FREECIV_JSON_CONNECTION
79694 field_addr.name = "allow_ai_type_fallback";
79695#endif /* FREECIV_JSON_CONNECTION */
79696 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->allow_ai_type_fallback)) {
79697 RECEIVE_PACKET_FIELD_ERROR(allow_ai_type_fallback);
79698 }
79699#ifdef FREECIV_JSON_CONNECTION
79700 field_addr.name = "ruleset_locked";
79701#endif /* FREECIV_JSON_CONNECTION */
79702 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
79703 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
79704 }
79705#ifdef FREECIV_JSON_CONNECTION
79706 field_addr.name = "datafile";
79707#endif /* FREECIV_JSON_CONNECTION */
79708 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
79710 }
79711#ifdef FREECIV_JSON_CONNECTION
79712 field_addr.name = "have_resources";
79713#endif /* FREECIV_JSON_CONNECTION */
79714 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->have_resources)) {
79715 RECEIVE_PACKET_FIELD_ERROR(have_resources);
79716 }
79717#ifdef FREECIV_JSON_CONNECTION
79718 field_addr.name = "req_caps";
79719#endif /* FREECIV_JSON_CONNECTION */
79720 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
79722 }
79723#endif
79724 log_packet_detailed("packet_scenario_info_100: got info about ()");
79725
79726#ifdef FREECIV_DELTA_PROTOCOL
79727 if (NULL == *hash) {
79729 NULL, NULL, NULL, free);
79730 }
79731
79732 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
79733 *real_packet = *old;
79734 } else {
79735 log_packet_detailed(" no old info");
79736 memset(real_packet, 0, sizeof(*real_packet));
79737 }
79738
79739 real_packet->is_scenario = BV_ISSET(fields, 0);
79740 if (BV_ISSET(fields, 1)) {
79741 log_packet_detailed(" got field 'name'");
79742#ifdef FREECIV_JSON_CONNECTION
79743 field_addr.name = "name";
79744#endif /* FREECIV_JSON_CONNECTION */
79745 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
79747 }
79748 }
79749 if (BV_ISSET(fields, 2)) {
79750 log_packet_detailed(" got field 'authors'");
79751#ifdef FREECIV_JSON_CONNECTION
79752 field_addr.name = "authors";
79753#endif /* FREECIV_JSON_CONNECTION */
79754 if (!DIO_GET(string, &din, &field_addr, real_packet->authors, sizeof(real_packet->authors))) {
79756 }
79757 }
79758 real_packet->players = BV_ISSET(fields, 3);
79759 real_packet->startpos_nations = BV_ISSET(fields, 4);
79760 real_packet->save_random = BV_ISSET(fields, 5);
79761 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
79762 real_packet->lake_flooding = BV_ISSET(fields, 7);
79763 real_packet->handmade = BV_ISSET(fields, 8);
79764 real_packet->allow_ai_type_fallback = BV_ISSET(fields, 9);
79765 real_packet->ruleset_locked = BV_ISSET(fields, 10);
79766 if (BV_ISSET(fields, 11)) {
79767 log_packet_detailed(" got field 'datafile'");
79768#ifdef FREECIV_JSON_CONNECTION
79769 field_addr.name = "datafile";
79770#endif /* FREECIV_JSON_CONNECTION */
79771 if (!DIO_GET(string, &din, &field_addr, real_packet->datafile, sizeof(real_packet->datafile))) {
79773 }
79774 }
79775 real_packet->have_resources = BV_ISSET(fields, 12);
79776 if (BV_ISSET(fields, 13)) {
79777 log_packet_detailed(" got field 'req_caps'");
79778#ifdef FREECIV_JSON_CONNECTION
79779 field_addr.name = "req_caps";
79780#endif /* FREECIV_JSON_CONNECTION */
79781 if (!DIO_GET(string, &din, &field_addr, real_packet->req_caps, sizeof(real_packet->req_caps))) {
79783 }
79784 }
79785
79786 if (NULL == old) {
79787 old = fc_malloc(sizeof(*old));
79788 *old = *real_packet;
79789 genhash_insert(*hash, old, old);
79790 } else {
79791 *old = *real_packet;
79792 }
79793
79794#endif /* FREECIV_DELTA_PROTOCOL */
79796}
79797
79798static int send_packet_scenario_info_100(struct connection *pc, const struct packet_scenario_info *packet)
79799{
79800 const struct packet_scenario_info *real_packet = packet;
79801 int e;
79802#ifdef FREECIV_DELTA_PROTOCOL
79804 struct packet_scenario_info *old;
79805 bool differ;
79806 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_INFO;
79807#endif /* FREECIV_DELTA_PROTOCOL */
79809#ifdef FREECIV_JSON_CONNECTION
79810 struct plocation field_addr;
79811 {
79815 }
79816#endif /* FREECIV_JSON_CONNECTION */
79817
79818 log_packet_detailed("packet_scenario_info_100: sending info about ()");
79819
79820#ifdef FREECIV_DELTA_PROTOCOL
79821 if (NULL == *hash) {
79823 NULL, NULL, NULL, free);
79824 }
79825 BV_CLR_ALL(fields);
79826
79827 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
79828 old = fc_malloc(sizeof(*old));
79829 *old = *real_packet;
79830 genhash_insert(*hash, old, old);
79831 memset(old, 0, sizeof(*old));
79832 }
79833 if (packet->is_scenario) {
79834 BV_SET(fields, 0);
79835 }
79836
79837 differ = (strcmp(old->name, real_packet->name) != 0);
79838 if (differ) {
79839 BV_SET(fields, 1);
79840 }
79841
79842 differ = (strcmp(old->authors, real_packet->authors) != 0);
79843 if (differ) {
79844 BV_SET(fields, 2);
79845 }
79846
79847 if (packet->players) {
79848 BV_SET(fields, 3);
79849 }
79850
79851 if (packet->startpos_nations) {
79852 BV_SET(fields, 4);
79853 }
79854
79855 if (packet->save_random) {
79856 BV_SET(fields, 5);
79857 }
79858
79859 if (packet->prevent_new_cities) {
79860 BV_SET(fields, 6);
79861 }
79862
79863 if (packet->lake_flooding) {
79864 BV_SET(fields, 7);
79865 }
79866
79867 if (packet->handmade) {
79868 BV_SET(fields, 8);
79869 }
79870
79871 if (packet->allow_ai_type_fallback) {
79872 BV_SET(fields, 9);
79873 }
79874
79875 if (packet->ruleset_locked) {
79876 BV_SET(fields, 10);
79877 }
79878
79879 differ = (strcmp(old->datafile, real_packet->datafile) != 0);
79880 if (differ) {
79881 BV_SET(fields, 11);
79882 }
79883
79884 if (packet->have_resources) {
79885 BV_SET(fields, 12);
79886 }
79887
79888 differ = (strcmp(old->req_caps, real_packet->req_caps) != 0);
79889 if (differ) {
79890 BV_SET(fields, 13);
79891 }
79892
79893
79894#ifdef FREECIV_JSON_CONNECTION
79895 field_addr.name = "fields";
79896#endif /* FREECIV_JSON_CONNECTION */
79897 e = 0;
79898 e |= DIO_BV_PUT(&dout, &field_addr, fields);
79899 if (e) {
79900 log_packet_detailed("fields bitvector error detected");
79901 }
79902
79903 /* field 0 is folded into the header */
79904 if (BV_ISSET(fields, 1)) {
79905 log_packet_detailed(" field 'name' has changed");
79906#ifdef FREECIV_JSON_CONNECTION
79907 field_addr.name = "name";
79908#endif /* FREECIV_JSON_CONNECTION */
79909 e = 0;
79910 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
79911 if (e) {
79912 log_packet_detailed("'name' field error detected");
79913 }
79914 }
79915 if (BV_ISSET(fields, 2)) {
79916 log_packet_detailed(" field 'authors' has changed");
79917#ifdef FREECIV_JSON_CONNECTION
79918 field_addr.name = "authors";
79919#endif /* FREECIV_JSON_CONNECTION */
79920 e = 0;
79921 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
79922 if (e) {
79923 log_packet_detailed("'authors' field error detected");
79924 }
79925 }
79926 /* field 3 is folded into the header */
79927 /* field 4 is folded into the header */
79928 /* field 5 is folded into the header */
79929 /* field 6 is folded into the header */
79930 /* field 7 is folded into the header */
79931 /* field 8 is folded into the header */
79932 /* field 9 is folded into the header */
79933 /* field 10 is folded into the header */
79934 if (BV_ISSET(fields, 11)) {
79935 log_packet_detailed(" field 'datafile' has changed");
79936#ifdef FREECIV_JSON_CONNECTION
79937 field_addr.name = "datafile";
79938#endif /* FREECIV_JSON_CONNECTION */
79939 e = 0;
79940 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
79941 if (e) {
79942 log_packet_detailed("'datafile' field error detected");
79943 }
79944 }
79945 /* field 12 is folded into the header */
79946 if (BV_ISSET(fields, 13)) {
79947 log_packet_detailed(" field 'req_caps' has changed");
79948#ifdef FREECIV_JSON_CONNECTION
79949 field_addr.name = "req_caps";
79950#endif /* FREECIV_JSON_CONNECTION */
79951 e = 0;
79952 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
79953 if (e) {
79954 log_packet_detailed("'req_caps' field error detected");
79955 }
79956 }
79957
79958 *old = *real_packet;
79959#endif /* FREECIV_DELTA_PROTOCOL */
79960#ifndef FREECIV_DELTA_PROTOCOL
79961#ifdef FREECIV_JSON_CONNECTION
79962 field_addr.name = "is_scenario";
79963#endif /* FREECIV_JSON_CONNECTION */
79964 e = 0;
79965 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_scenario);
79966 if (e) {
79967 log_packet_detailed("'is_scenario' field error detected");
79968 }
79969#ifdef FREECIV_JSON_CONNECTION
79970 field_addr.name = "name";
79971#endif /* FREECIV_JSON_CONNECTION */
79972 e = 0;
79973 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
79974 if (e) {
79975 log_packet_detailed("'name' field error detected");
79976 }
79977#ifdef FREECIV_JSON_CONNECTION
79978 field_addr.name = "authors";
79979#endif /* FREECIV_JSON_CONNECTION */
79980 e = 0;
79981 e |= DIO_PUT(string, &dout, &field_addr, real_packet->authors);
79982 if (e) {
79983 log_packet_detailed("'authors' field error detected");
79984 }
79985#ifdef FREECIV_JSON_CONNECTION
79986 field_addr.name = "players";
79987#endif /* FREECIV_JSON_CONNECTION */
79988 e = 0;
79989 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->players);
79990 if (e) {
79991 log_packet_detailed("'players' field error detected");
79992 }
79993#ifdef FREECIV_JSON_CONNECTION
79994 field_addr.name = "startpos_nations";
79995#endif /* FREECIV_JSON_CONNECTION */
79996 e = 0;
79997 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
79998 if (e) {
79999 log_packet_detailed("'startpos_nations' field error detected");
80000 }
80001#ifdef FREECIV_JSON_CONNECTION
80002 field_addr.name = "save_random";
80003#endif /* FREECIV_JSON_CONNECTION */
80004 e = 0;
80005 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->save_random);
80006 if (e) {
80007 log_packet_detailed("'save_random' field error detected");
80008 }
80009#ifdef FREECIV_JSON_CONNECTION
80010 field_addr.name = "prevent_new_cities";
80011#endif /* FREECIV_JSON_CONNECTION */
80012 e = 0;
80013 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
80014 if (e) {
80015 log_packet_detailed("'prevent_new_cities' field error detected");
80016 }
80017#ifdef FREECIV_JSON_CONNECTION
80018 field_addr.name = "lake_flooding";
80019#endif /* FREECIV_JSON_CONNECTION */
80020 e = 0;
80021 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
80022 if (e) {
80023 log_packet_detailed("'lake_flooding' field error detected");
80024 }
80025#ifdef FREECIV_JSON_CONNECTION
80026 field_addr.name = "handmade";
80027#endif /* FREECIV_JSON_CONNECTION */
80028 e = 0;
80029 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->handmade);
80030 if (e) {
80031 log_packet_detailed("'handmade' field error detected");
80032 }
80033#ifdef FREECIV_JSON_CONNECTION
80034 field_addr.name = "allow_ai_type_fallback";
80035#endif /* FREECIV_JSON_CONNECTION */
80036 e = 0;
80037 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->allow_ai_type_fallback);
80038 if (e) {
80039 log_packet_detailed("'allow_ai_type_fallback' field error detected");
80040 }
80041#ifdef FREECIV_JSON_CONNECTION
80042 field_addr.name = "ruleset_locked";
80043#endif /* FREECIV_JSON_CONNECTION */
80044 e = 0;
80045 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
80046 if (e) {
80047 log_packet_detailed("'ruleset_locked' field error detected");
80048 }
80049#ifdef FREECIV_JSON_CONNECTION
80050 field_addr.name = "datafile";
80051#endif /* FREECIV_JSON_CONNECTION */
80052 e = 0;
80053 e |= DIO_PUT(string, &dout, &field_addr, real_packet->datafile);
80054 if (e) {
80055 log_packet_detailed("'datafile' field error detected");
80056 }
80057#ifdef FREECIV_JSON_CONNECTION
80058 field_addr.name = "have_resources";
80059#endif /* FREECIV_JSON_CONNECTION */
80060 e = 0;
80061 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->have_resources);
80062 if (e) {
80063 log_packet_detailed("'have_resources' field error detected");
80064 }
80065#ifdef FREECIV_JSON_CONNECTION
80066 field_addr.name = "req_caps";
80067#endif /* FREECIV_JSON_CONNECTION */
80068 e = 0;
80069 e |= DIO_PUT(string, &dout, &field_addr, real_packet->req_caps);
80070 if (e) {
80071 log_packet_detailed("'req_caps' field error detected");
80072 }
80073
80074#endif
80076}
80077
80079{
80080 if (!pc->used) {
80081 log_error("WARNING: trying to send data to the closed connection %s",
80083 return -1;
80084 }
80085 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet != NULL, -1,
80086 "Handler for PACKET_SCENARIO_INFO not installed");
80087 return pc->phs.handlers->send[PACKET_SCENARIO_INFO].packet(pc, packet);
80088}
80089
80090#ifdef FREECIV_DELTA_PROTOCOL
80091#define hash_packet_scenario_description_100 hash_const
80092
80093#define cmp_packet_scenario_description_100 cmp_const
80094
80096#endif /* FREECIV_DELTA_PROTOCOL */
80097
80099{
80100#ifdef FREECIV_DELTA_PROTOCOL
80102 struct packet_scenario_description *old;
80103 struct genhash **hash = pc->phs.received + PACKET_SCENARIO_DESCRIPTION;
80104#endif /* FREECIV_DELTA_PROTOCOL */
80106#ifdef FREECIV_JSON_CONNECTION
80107 struct plocation field_addr;
80108 {
80112 }
80113#endif /* FREECIV_JSON_CONNECTION */
80114
80115#ifdef FREECIV_DELTA_PROTOCOL
80116#ifdef FREECIV_JSON_CONNECTION
80117 field_addr.name = "fields";
80118#endif /* FREECIV_JSON_CONNECTION */
80119 DIO_BV_GET(&din, &field_addr, fields);
80120
80121#else /* FREECIV_DELTA_PROTOCOL */
80122#ifdef FREECIV_JSON_CONNECTION
80123 field_addr.name = "description";
80124#endif /* FREECIV_JSON_CONNECTION */
80125 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
80126 RECEIVE_PACKET_FIELD_ERROR(description);
80127 }
80128#endif
80129 log_packet_detailed("packet_scenario_description_100: got info about ()");
80130
80131#ifdef FREECIV_DELTA_PROTOCOL
80132 if (NULL == *hash) {
80134 NULL, NULL, NULL, free);
80135 }
80136
80137 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80138 *real_packet = *old;
80139 } else {
80140 log_packet_detailed(" no old info");
80141 memset(real_packet, 0, sizeof(*real_packet));
80142 }
80143
80144 if (BV_ISSET(fields, 0)) {
80145 log_packet_detailed(" got field 'description'");
80146#ifdef FREECIV_JSON_CONNECTION
80147 field_addr.name = "description";
80148#endif /* FREECIV_JSON_CONNECTION */
80149 if (!DIO_GET(string, &din, &field_addr, real_packet->description, sizeof(real_packet->description))) {
80150 RECEIVE_PACKET_FIELD_ERROR(description);
80151 }
80152 }
80153
80154 if (NULL == old) {
80155 old = fc_malloc(sizeof(*old));
80156 *old = *real_packet;
80157 genhash_insert(*hash, old, old);
80158 } else {
80159 *old = *real_packet;
80160 }
80161
80162#endif /* FREECIV_DELTA_PROTOCOL */
80164}
80165
80167{
80168 const struct packet_scenario_description *real_packet = packet;
80169 int e;
80170#ifdef FREECIV_DELTA_PROTOCOL
80172 struct packet_scenario_description *old;
80173 bool differ;
80174 struct genhash **hash = pc->phs.sent + PACKET_SCENARIO_DESCRIPTION;
80175#endif /* FREECIV_DELTA_PROTOCOL */
80177#ifdef FREECIV_JSON_CONNECTION
80178 struct plocation field_addr;
80179 {
80183 }
80184#endif /* FREECIV_JSON_CONNECTION */
80185
80186 log_packet_detailed("packet_scenario_description_100: sending info about ()");
80187
80188#ifdef FREECIV_DELTA_PROTOCOL
80189 if (NULL == *hash) {
80191 NULL, NULL, NULL, free);
80192 }
80193 BV_CLR_ALL(fields);
80194
80195 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80196 old = fc_malloc(sizeof(*old));
80197 *old = *real_packet;
80198 genhash_insert(*hash, old, old);
80199 memset(old, 0, sizeof(*old));
80200 }
80201 differ = (strcmp(old->description, real_packet->description) != 0);
80202 if (differ) {
80203 BV_SET(fields, 0);
80204 }
80205
80206
80207#ifdef FREECIV_JSON_CONNECTION
80208 field_addr.name = "fields";
80209#endif /* FREECIV_JSON_CONNECTION */
80210 e = 0;
80211 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80212 if (e) {
80213 log_packet_detailed("fields bitvector error detected");
80214 }
80215
80216 if (BV_ISSET(fields, 0)) {
80217 log_packet_detailed(" field 'description' has changed");
80218#ifdef FREECIV_JSON_CONNECTION
80219 field_addr.name = "description";
80220#endif /* FREECIV_JSON_CONNECTION */
80221 e = 0;
80222 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
80223 if (e) {
80224 log_packet_detailed("'description' field error detected");
80225 }
80226 }
80227
80228 *old = *real_packet;
80229#endif /* FREECIV_DELTA_PROTOCOL */
80230#ifndef FREECIV_DELTA_PROTOCOL
80231#ifdef FREECIV_JSON_CONNECTION
80232 field_addr.name = "description";
80233#endif /* FREECIV_JSON_CONNECTION */
80234 e = 0;
80235 e |= DIO_PUT(string, &dout, &field_addr, real_packet->description);
80236 if (e) {
80237 log_packet_detailed("'description' field error detected");
80238 }
80239
80240#endif
80242}
80243
80245{
80246 if (!pc->used) {
80247 log_error("WARNING: trying to send data to the closed connection %s",
80249 return -1;
80250 }
80251 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet != NULL, -1,
80252 "Handler for PACKET_SCENARIO_DESCRIPTION not installed");
80253 return pc->phs.handlers->send[PACKET_SCENARIO_DESCRIPTION].packet(pc, packet);
80254}
80255
80256#ifdef FREECIV_DELTA_PROTOCOL
80257#define hash_packet_save_scenario_100 hash_const
80258
80259#define cmp_packet_save_scenario_100 cmp_const
80260
80262#endif /* FREECIV_DELTA_PROTOCOL */
80263
80265{
80266#ifdef FREECIV_DELTA_PROTOCOL
80268 struct packet_save_scenario *old;
80269 struct genhash **hash = pc->phs.received + PACKET_SAVE_SCENARIO;
80270#endif /* FREECIV_DELTA_PROTOCOL */
80272#ifdef FREECIV_JSON_CONNECTION
80273 struct plocation field_addr;
80274 {
80278 }
80279#endif /* FREECIV_JSON_CONNECTION */
80280
80281#ifdef FREECIV_DELTA_PROTOCOL
80282#ifdef FREECIV_JSON_CONNECTION
80283 field_addr.name = "fields";
80284#endif /* FREECIV_JSON_CONNECTION */
80285 DIO_BV_GET(&din, &field_addr, fields);
80286
80287#else /* FREECIV_DELTA_PROTOCOL */
80288#ifdef FREECIV_JSON_CONNECTION
80289 field_addr.name = "name";
80290#endif /* FREECIV_JSON_CONNECTION */
80291 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
80293 }
80294#endif
80295 log_packet_detailed("packet_save_scenario_100: got info about ()");
80296
80297#ifdef FREECIV_DELTA_PROTOCOL
80298 if (NULL == *hash) {
80300 NULL, NULL, NULL, free);
80301 }
80302
80303 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80304 *real_packet = *old;
80305 } else {
80306 log_packet_detailed(" no old info");
80307 memset(real_packet, 0, sizeof(*real_packet));
80308 }
80309
80310 if (BV_ISSET(fields, 0)) {
80311 log_packet_detailed(" got field 'name'");
80312#ifdef FREECIV_JSON_CONNECTION
80313 field_addr.name = "name";
80314#endif /* FREECIV_JSON_CONNECTION */
80315 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
80317 }
80318 }
80319
80320 if (NULL == old) {
80321 old = fc_malloc(sizeof(*old));
80322 *old = *real_packet;
80323 genhash_insert(*hash, old, old);
80324 } else {
80325 *old = *real_packet;
80326 }
80327
80328#endif /* FREECIV_DELTA_PROTOCOL */
80330}
80331
80332static int send_packet_save_scenario_100(struct connection *pc, const struct packet_save_scenario *packet)
80333{
80334 const struct packet_save_scenario *real_packet = packet;
80335 int e;
80336#ifdef FREECIV_DELTA_PROTOCOL
80338 struct packet_save_scenario *old;
80339 bool differ;
80340 struct genhash **hash = pc->phs.sent + PACKET_SAVE_SCENARIO;
80341#endif /* FREECIV_DELTA_PROTOCOL */
80343#ifdef FREECIV_JSON_CONNECTION
80344 struct plocation field_addr;
80345 {
80349 }
80350#endif /* FREECIV_JSON_CONNECTION */
80351
80352 log_packet_detailed("packet_save_scenario_100: sending info about ()");
80353
80354#ifdef FREECIV_DELTA_PROTOCOL
80355 if (NULL == *hash) {
80357 NULL, NULL, NULL, free);
80358 }
80359 BV_CLR_ALL(fields);
80360
80361 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80362 old = fc_malloc(sizeof(*old));
80363 *old = *real_packet;
80364 genhash_insert(*hash, old, old);
80365 memset(old, 0, sizeof(*old));
80366 }
80367 differ = (strcmp(old->name, real_packet->name) != 0);
80368 if (differ) {
80369 BV_SET(fields, 0);
80370 }
80371
80372
80373#ifdef FREECIV_JSON_CONNECTION
80374 field_addr.name = "fields";
80375#endif /* FREECIV_JSON_CONNECTION */
80376 e = 0;
80377 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80378 if (e) {
80379 log_packet_detailed("fields bitvector error detected");
80380 }
80381
80382 if (BV_ISSET(fields, 0)) {
80383 log_packet_detailed(" field 'name' has changed");
80384#ifdef FREECIV_JSON_CONNECTION
80385 field_addr.name = "name";
80386#endif /* FREECIV_JSON_CONNECTION */
80387 e = 0;
80388 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
80389 if (e) {
80390 log_packet_detailed("'name' field error detected");
80391 }
80392 }
80393
80394 *old = *real_packet;
80395#endif /* FREECIV_DELTA_PROTOCOL */
80396#ifndef FREECIV_DELTA_PROTOCOL
80397#ifdef FREECIV_JSON_CONNECTION
80398 field_addr.name = "name";
80399#endif /* FREECIV_JSON_CONNECTION */
80400 e = 0;
80401 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
80402 if (e) {
80403 log_packet_detailed("'name' field error detected");
80404 }
80405
80406#endif
80408}
80409
80411{
80412 if (!pc->used) {
80413 log_error("WARNING: trying to send data to the closed connection %s",
80415 return -1;
80416 }
80417 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet != NULL, -1,
80418 "Handler for PACKET_SAVE_SCENARIO not installed");
80419 return pc->phs.handlers->send[PACKET_SAVE_SCENARIO].packet(pc, packet);
80420}
80421
80423{
80424 struct packet_save_scenario packet, *real_packet = &packet;
80425
80426 sz_strlcpy(real_packet->name, name);
80427
80429}
80430
80431#ifdef FREECIV_DELTA_PROTOCOL
80432#define hash_packet_vote_new_100 hash_const
80433
80434#define cmp_packet_vote_new_100 cmp_const
80435
80437#endif /* FREECIV_DELTA_PROTOCOL */
80438
80440{
80441#ifdef FREECIV_DELTA_PROTOCOL
80443 struct packet_vote_new *old;
80444 struct genhash **hash = pc->phs.received + PACKET_VOTE_NEW;
80445#endif /* FREECIV_DELTA_PROTOCOL */
80447#ifdef FREECIV_JSON_CONNECTION
80448 struct plocation field_addr;
80449 {
80453 }
80454#endif /* FREECIV_JSON_CONNECTION */
80455
80456#ifdef FREECIV_DELTA_PROTOCOL
80457#ifdef FREECIV_JSON_CONNECTION
80458 field_addr.name = "fields";
80459#endif /* FREECIV_JSON_CONNECTION */
80460 DIO_BV_GET(&din, &field_addr, fields);
80461
80462#else /* FREECIV_DELTA_PROTOCOL */
80463#ifdef FREECIV_JSON_CONNECTION
80464 field_addr.name = "vote_no";
80465#endif /* FREECIV_JSON_CONNECTION */
80466 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
80468 }
80469#ifdef FREECIV_JSON_CONNECTION
80470 field_addr.name = "user";
80471#endif /* FREECIV_JSON_CONNECTION */
80472 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
80474 }
80475#ifdef FREECIV_JSON_CONNECTION
80476 field_addr.name = "desc";
80477#endif /* FREECIV_JSON_CONNECTION */
80478 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
80480 }
80481#ifdef FREECIV_JSON_CONNECTION
80482 field_addr.name = "percent_required";
80483#endif /* FREECIV_JSON_CONNECTION */
80484 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
80485 RECEIVE_PACKET_FIELD_ERROR(percent_required);
80486 }
80487#ifdef FREECIV_JSON_CONNECTION
80488 field_addr.name = "flags";
80489#endif /* FREECIV_JSON_CONNECTION */
80490 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
80492 }
80493#endif
80494 log_packet_detailed("packet_vote_new_100: got info about ()");
80495
80496#ifdef FREECIV_DELTA_PROTOCOL
80497 if (NULL == *hash) {
80499 NULL, NULL, NULL, free);
80500 }
80501
80502 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80503 *real_packet = *old;
80504 } else {
80505 log_packet_detailed(" no old info");
80506 memset(real_packet, 0, sizeof(*real_packet));
80507 }
80508
80509 if (BV_ISSET(fields, 0)) {
80510 log_packet_detailed(" got field 'vote_no'");
80511#ifdef FREECIV_JSON_CONNECTION
80512 field_addr.name = "vote_no";
80513#endif /* FREECIV_JSON_CONNECTION */
80514 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
80516 }
80517 }
80518 if (BV_ISSET(fields, 1)) {
80519 log_packet_detailed(" got field 'user'");
80520#ifdef FREECIV_JSON_CONNECTION
80521 field_addr.name = "user";
80522#endif /* FREECIV_JSON_CONNECTION */
80523 if (!DIO_GET(string, &din, &field_addr, real_packet->user, sizeof(real_packet->user))) {
80525 }
80526 }
80527 if (BV_ISSET(fields, 2)) {
80528 log_packet_detailed(" got field 'desc'");
80529#ifdef FREECIV_JSON_CONNECTION
80530 field_addr.name = "desc";
80531#endif /* FREECIV_JSON_CONNECTION */
80532 if (!DIO_GET(string, &din, &field_addr, real_packet->desc, sizeof(real_packet->desc))) {
80534 }
80535 }
80536 if (BV_ISSET(fields, 3)) {
80537 log_packet_detailed(" got field 'percent_required'");
80538#ifdef FREECIV_JSON_CONNECTION
80539 field_addr.name = "percent_required";
80540#endif /* FREECIV_JSON_CONNECTION */
80541 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->percent_required)) {
80542 RECEIVE_PACKET_FIELD_ERROR(percent_required);
80543 }
80544 }
80545 if (BV_ISSET(fields, 4)) {
80546 log_packet_detailed(" got field 'flags'");
80547#ifdef FREECIV_JSON_CONNECTION
80548 field_addr.name = "flags";
80549#endif /* FREECIV_JSON_CONNECTION */
80550 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->flags)) {
80552 }
80553 }
80554
80555 if (NULL == old) {
80556 old = fc_malloc(sizeof(*old));
80557 *old = *real_packet;
80558 genhash_insert(*hash, old, old);
80559 } else {
80560 *old = *real_packet;
80561 }
80562
80563#endif /* FREECIV_DELTA_PROTOCOL */
80565}
80566
80567static int send_packet_vote_new_100(struct connection *pc, const struct packet_vote_new *packet)
80568{
80569 const struct packet_vote_new *real_packet = packet;
80570 int e;
80571#ifdef FREECIV_DELTA_PROTOCOL
80573 struct packet_vote_new *old;
80574 bool differ;
80575 struct genhash **hash = pc->phs.sent + PACKET_VOTE_NEW;
80576#endif /* FREECIV_DELTA_PROTOCOL */
80578#ifdef FREECIV_JSON_CONNECTION
80579 struct plocation field_addr;
80580 {
80584 }
80585#endif /* FREECIV_JSON_CONNECTION */
80586
80587 log_packet_detailed("packet_vote_new_100: sending info about ()");
80588
80589#ifdef FREECIV_DELTA_PROTOCOL
80590 if (NULL == *hash) {
80592 NULL, NULL, NULL, free);
80593 }
80594 BV_CLR_ALL(fields);
80595
80596 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80597 old = fc_malloc(sizeof(*old));
80598 *old = *real_packet;
80599 genhash_insert(*hash, old, old);
80600 memset(old, 0, sizeof(*old));
80601 }
80602 differ = (old->vote_no != real_packet->vote_no);
80603 if (differ) {
80604 BV_SET(fields, 0);
80605 }
80606
80607 differ = (strcmp(old->user, real_packet->user) != 0);
80608 if (differ) {
80609 BV_SET(fields, 1);
80610 }
80611
80612 differ = (strcmp(old->desc, real_packet->desc) != 0);
80613 if (differ) {
80614 BV_SET(fields, 2);
80615 }
80616
80617 differ = (old->percent_required != real_packet->percent_required);
80618 if (differ) {
80619 BV_SET(fields, 3);
80620 }
80621
80622 differ = (old->flags != real_packet->flags);
80623 if (differ) {
80624 BV_SET(fields, 4);
80625 }
80626
80627
80628#ifdef FREECIV_JSON_CONNECTION
80629 field_addr.name = "fields";
80630#endif /* FREECIV_JSON_CONNECTION */
80631 e = 0;
80632 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80633 if (e) {
80634 log_packet_detailed("fields bitvector error detected");
80635 }
80636
80637 if (BV_ISSET(fields, 0)) {
80638 log_packet_detailed(" field 'vote_no' has changed");
80639#ifdef FREECIV_JSON_CONNECTION
80640 field_addr.name = "vote_no";
80641#endif /* FREECIV_JSON_CONNECTION */
80642 e = 0;
80643 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
80644 if (e) {
80645 log_packet_detailed("'vote_no' field error detected");
80646 }
80647 }
80648 if (BV_ISSET(fields, 1)) {
80649 log_packet_detailed(" field 'user' has changed");
80650#ifdef FREECIV_JSON_CONNECTION
80651 field_addr.name = "user";
80652#endif /* FREECIV_JSON_CONNECTION */
80653 e = 0;
80654 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
80655 if (e) {
80656 log_packet_detailed("'user' field error detected");
80657 }
80658 }
80659 if (BV_ISSET(fields, 2)) {
80660 log_packet_detailed(" field 'desc' has changed");
80661#ifdef FREECIV_JSON_CONNECTION
80662 field_addr.name = "desc";
80663#endif /* FREECIV_JSON_CONNECTION */
80664 e = 0;
80665 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
80666 if (e) {
80667 log_packet_detailed("'desc' field error detected");
80668 }
80669 }
80670 if (BV_ISSET(fields, 3)) {
80671 log_packet_detailed(" field 'percent_required' has changed");
80672#ifdef FREECIV_JSON_CONNECTION
80673 field_addr.name = "percent_required";
80674#endif /* FREECIV_JSON_CONNECTION */
80675 e = 0;
80676 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
80677 if (e) {
80678 log_packet_detailed("'percent_required' field error detected");
80679 }
80680 }
80681 if (BV_ISSET(fields, 4)) {
80682 log_packet_detailed(" field 'flags' has changed");
80683#ifdef FREECIV_JSON_CONNECTION
80684 field_addr.name = "flags";
80685#endif /* FREECIV_JSON_CONNECTION */
80686 e = 0;
80687 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
80688 if (e) {
80689 log_packet_detailed("'flags' field error detected");
80690 }
80691 }
80692
80693 *old = *real_packet;
80694#endif /* FREECIV_DELTA_PROTOCOL */
80695#ifndef FREECIV_DELTA_PROTOCOL
80696#ifdef FREECIV_JSON_CONNECTION
80697 field_addr.name = "vote_no";
80698#endif /* FREECIV_JSON_CONNECTION */
80699 e = 0;
80700 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
80701 if (e) {
80702 log_packet_detailed("'vote_no' field error detected");
80703 }
80704#ifdef FREECIV_JSON_CONNECTION
80705 field_addr.name = "user";
80706#endif /* FREECIV_JSON_CONNECTION */
80707 e = 0;
80708 e |= DIO_PUT(string, &dout, &field_addr, real_packet->user);
80709 if (e) {
80710 log_packet_detailed("'user' field error detected");
80711 }
80712#ifdef FREECIV_JSON_CONNECTION
80713 field_addr.name = "desc";
80714#endif /* FREECIV_JSON_CONNECTION */
80715 e = 0;
80716 e |= DIO_PUT(string, &dout, &field_addr, real_packet->desc);
80717 if (e) {
80718 log_packet_detailed("'desc' field error detected");
80719 }
80720#ifdef FREECIV_JSON_CONNECTION
80721 field_addr.name = "percent_required";
80722#endif /* FREECIV_JSON_CONNECTION */
80723 e = 0;
80724 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->percent_required);
80725 if (e) {
80726 log_packet_detailed("'percent_required' field error detected");
80727 }
80728#ifdef FREECIV_JSON_CONNECTION
80729 field_addr.name = "flags";
80730#endif /* FREECIV_JSON_CONNECTION */
80731 e = 0;
80732 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->flags);
80733 if (e) {
80734 log_packet_detailed("'flags' field error detected");
80735 }
80736
80737#endif
80739}
80740
80741int send_packet_vote_new(struct connection *pc, const struct packet_vote_new *packet)
80742{
80743 if (!pc->used) {
80744 log_error("WARNING: trying to send data to the closed connection %s",
80746 return -1;
80747 }
80748 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_NEW].packet != NULL, -1,
80749 "Handler for PACKET_VOTE_NEW not installed");
80750 return pc->phs.handlers->send[PACKET_VOTE_NEW].packet(pc, packet);
80751}
80752
80753#ifdef FREECIV_DELTA_PROTOCOL
80755{
80756 const struct packet_vote_update *key = (const struct packet_vote_update *) vkey;
80757 genhash_val_t result = 0;
80758
80759 result += key->vote_no;
80760
80761 result &= 0xFFFFFFFF;
80762 return result;
80763}
80764
80765static bool cmp_packet_vote_update_100(const void *vkey1, const void *vkey2)
80766{
80767 const struct packet_vote_update *old = (const struct packet_vote_update *) vkey1;
80768 const struct packet_vote_update *real_packet = (const struct packet_vote_update *) vkey2;
80769 bool differ;
80770
80771 differ = (old->vote_no != real_packet->vote_no);
80772
80773 return !differ;
80774}
80776#endif /* FREECIV_DELTA_PROTOCOL */
80777
80779{
80780#ifdef FREECIV_DELTA_PROTOCOL
80782 struct packet_vote_update *old;
80783 struct genhash **hash = pc->phs.received + PACKET_VOTE_UPDATE;
80784#endif /* FREECIV_DELTA_PROTOCOL */
80786#ifdef FREECIV_JSON_CONNECTION
80787 struct plocation field_addr;
80788 {
80792 }
80793#endif /* FREECIV_JSON_CONNECTION */
80794
80795#ifdef FREECIV_DELTA_PROTOCOL
80796#ifdef FREECIV_JSON_CONNECTION
80797 field_addr.name = "fields";
80798#endif /* FREECIV_JSON_CONNECTION */
80799 DIO_BV_GET(&din, &field_addr, fields);
80800#ifdef FREECIV_JSON_CONNECTION
80801 field_addr.name = "vote_no";
80802#endif /* FREECIV_JSON_CONNECTION */
80803 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
80805 }
80806
80807#else /* FREECIV_DELTA_PROTOCOL */
80808#ifdef FREECIV_JSON_CONNECTION
80809 field_addr.name = "vote_no";
80810#endif /* FREECIV_JSON_CONNECTION */
80811 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
80813 }
80814#ifdef FREECIV_JSON_CONNECTION
80815 field_addr.name = "yes";
80816#endif /* FREECIV_JSON_CONNECTION */
80817 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
80819 }
80820#ifdef FREECIV_JSON_CONNECTION
80821 field_addr.name = "no";
80822#endif /* FREECIV_JSON_CONNECTION */
80823 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
80825 }
80826#ifdef FREECIV_JSON_CONNECTION
80827 field_addr.name = "abstain";
80828#endif /* FREECIV_JSON_CONNECTION */
80829 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
80831 }
80832#ifdef FREECIV_JSON_CONNECTION
80833 field_addr.name = "num_voters";
80834#endif /* FREECIV_JSON_CONNECTION */
80835 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
80836 RECEIVE_PACKET_FIELD_ERROR(num_voters);
80837 }
80838#endif
80839 log_packet_detailed("packet_vote_update_100: got info about (%d)",
80840 real_packet->vote_no);
80841
80842#ifdef FREECIV_DELTA_PROTOCOL
80843 if (NULL == *hash) {
80845 NULL, NULL, NULL, free);
80846 }
80847
80848 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
80849 *real_packet = *old;
80850 } else {
80851 int vote_no;
80852
80853 vote_no = real_packet->vote_no;
80854
80855 log_packet_detailed(" no old info");
80856 memset(real_packet, 0, sizeof(*real_packet));
80857
80858 real_packet->vote_no = vote_no;
80859 }
80860
80861 if (BV_ISSET(fields, 0)) {
80862 log_packet_detailed(" got field 'yes'");
80863#ifdef FREECIV_JSON_CONNECTION
80864 field_addr.name = "yes";
80865#endif /* FREECIV_JSON_CONNECTION */
80866 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->yes)) {
80868 }
80869 }
80870 if (BV_ISSET(fields, 1)) {
80871 log_packet_detailed(" got field 'no'");
80872#ifdef FREECIV_JSON_CONNECTION
80873 field_addr.name = "no";
80874#endif /* FREECIV_JSON_CONNECTION */
80875 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->no)) {
80877 }
80878 }
80879 if (BV_ISSET(fields, 2)) {
80880 log_packet_detailed(" got field 'abstain'");
80881#ifdef FREECIV_JSON_CONNECTION
80882 field_addr.name = "abstain";
80883#endif /* FREECIV_JSON_CONNECTION */
80884 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->abstain)) {
80886 }
80887 }
80888 if (BV_ISSET(fields, 3)) {
80889 log_packet_detailed(" got field 'num_voters'");
80890#ifdef FREECIV_JSON_CONNECTION
80891 field_addr.name = "num_voters";
80892#endif /* FREECIV_JSON_CONNECTION */
80893 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->num_voters)) {
80894 RECEIVE_PACKET_FIELD_ERROR(num_voters);
80895 }
80896 }
80897
80898 if (NULL == old) {
80899 old = fc_malloc(sizeof(*old));
80900 *old = *real_packet;
80901 genhash_insert(*hash, old, old);
80902 } else {
80903 *old = *real_packet;
80904 }
80905
80906#endif /* FREECIV_DELTA_PROTOCOL */
80908}
80909
80910static int send_packet_vote_update_100(struct connection *pc, const struct packet_vote_update *packet)
80911{
80912 const struct packet_vote_update *real_packet = packet;
80913 int e;
80914#ifdef FREECIV_DELTA_PROTOCOL
80916 struct packet_vote_update *old;
80917 bool differ;
80918 struct genhash **hash = pc->phs.sent + PACKET_VOTE_UPDATE;
80919 int different = 0;
80920#endif /* FREECIV_DELTA_PROTOCOL */
80922#ifdef FREECIV_JSON_CONNECTION
80923 struct plocation field_addr;
80924 {
80928 }
80929#endif /* FREECIV_JSON_CONNECTION */
80930
80931 log_packet_detailed("packet_vote_update_100: sending info about (%d)",
80932 real_packet->vote_no);
80933
80934#ifdef FREECIV_DELTA_PROTOCOL
80935 if (NULL == *hash) {
80937 NULL, NULL, NULL, free);
80938 }
80939 BV_CLR_ALL(fields);
80940
80941 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
80942 old = fc_malloc(sizeof(*old));
80943 *old = *real_packet;
80944 genhash_insert(*hash, old, old);
80945 memset(old, 0, sizeof(*old));
80946 different = 1; /* Force to send. */
80947 }
80948 differ = (old->yes != real_packet->yes);
80949 if (differ) {
80950 different++;
80951 BV_SET(fields, 0);
80952 }
80953
80954 differ = (old->no != real_packet->no);
80955 if (differ) {
80956 different++;
80957 BV_SET(fields, 1);
80958 }
80959
80960 differ = (old->abstain != real_packet->abstain);
80961 if (differ) {
80962 different++;
80963 BV_SET(fields, 2);
80964 }
80965
80966 differ = (old->num_voters != real_packet->num_voters);
80967 if (differ) {
80968 different++;
80969 BV_SET(fields, 3);
80970 }
80971
80972 if (different == 0) {
80973 log_packet_detailed(" no change -> discard");
80975 }
80976
80977#ifdef FREECIV_JSON_CONNECTION
80978 field_addr.name = "fields";
80979#endif /* FREECIV_JSON_CONNECTION */
80980 e = 0;
80981 e |= DIO_BV_PUT(&dout, &field_addr, fields);
80982 if (e) {
80983 log_packet_detailed("fields bitvector error detected");
80984 }
80985#ifdef FREECIV_JSON_CONNECTION
80986 field_addr.name = "vote_no";
80987#endif /* FREECIV_JSON_CONNECTION */
80988 e = 0;
80989 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
80990 if (e) {
80991 log_packet_detailed("'vote_no' field error detected");
80992 }
80993
80994 if (BV_ISSET(fields, 0)) {
80995 log_packet_detailed(" field 'yes' has changed");
80996#ifdef FREECIV_JSON_CONNECTION
80997 field_addr.name = "yes";
80998#endif /* FREECIV_JSON_CONNECTION */
80999 e = 0;
81000 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
81001 if (e) {
81002 log_packet_detailed("'yes' field error detected");
81003 }
81004 }
81005 if (BV_ISSET(fields, 1)) {
81006 log_packet_detailed(" field 'no' has changed");
81007#ifdef FREECIV_JSON_CONNECTION
81008 field_addr.name = "no";
81009#endif /* FREECIV_JSON_CONNECTION */
81010 e = 0;
81011 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
81012 if (e) {
81013 log_packet_detailed("'no' field error detected");
81014 }
81015 }
81016 if (BV_ISSET(fields, 2)) {
81017 log_packet_detailed(" field 'abstain' has changed");
81018#ifdef FREECIV_JSON_CONNECTION
81019 field_addr.name = "abstain";
81020#endif /* FREECIV_JSON_CONNECTION */
81021 e = 0;
81022 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
81023 if (e) {
81024 log_packet_detailed("'abstain' field error detected");
81025 }
81026 }
81027 if (BV_ISSET(fields, 3)) {
81028 log_packet_detailed(" field 'num_voters' has changed");
81029#ifdef FREECIV_JSON_CONNECTION
81030 field_addr.name = "num_voters";
81031#endif /* FREECIV_JSON_CONNECTION */
81032 e = 0;
81033 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
81034 if (e) {
81035 log_packet_detailed("'num_voters' field error detected");
81036 }
81037 }
81038
81039 *old = *real_packet;
81040#endif /* FREECIV_DELTA_PROTOCOL */
81041#ifndef FREECIV_DELTA_PROTOCOL
81042#ifdef FREECIV_JSON_CONNECTION
81043 field_addr.name = "vote_no";
81044#endif /* FREECIV_JSON_CONNECTION */
81045 e = 0;
81046 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
81047 if (e) {
81048 log_packet_detailed("'vote_no' field error detected");
81049 }
81050#ifdef FREECIV_JSON_CONNECTION
81051 field_addr.name = "yes";
81052#endif /* FREECIV_JSON_CONNECTION */
81053 e = 0;
81054 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->yes);
81055 if (e) {
81056 log_packet_detailed("'yes' field error detected");
81057 }
81058#ifdef FREECIV_JSON_CONNECTION
81059 field_addr.name = "no";
81060#endif /* FREECIV_JSON_CONNECTION */
81061 e = 0;
81062 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->no);
81063 if (e) {
81064 log_packet_detailed("'no' field error detected");
81065 }
81066#ifdef FREECIV_JSON_CONNECTION
81067 field_addr.name = "abstain";
81068#endif /* FREECIV_JSON_CONNECTION */
81069 e = 0;
81070 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->abstain);
81071 if (e) {
81072 log_packet_detailed("'abstain' field error detected");
81073 }
81074#ifdef FREECIV_JSON_CONNECTION
81075 field_addr.name = "num_voters";
81076#endif /* FREECIV_JSON_CONNECTION */
81077 e = 0;
81078 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->num_voters);
81079 if (e) {
81080 log_packet_detailed("'num_voters' field error detected");
81081 }
81082
81083#endif
81085}
81086
81088{
81089 if (!pc->used) {
81090 log_error("WARNING: trying to send data to the closed connection %s",
81092 return -1;
81093 }
81094 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet != NULL, -1,
81095 "Handler for PACKET_VOTE_UPDATE not installed");
81096 return pc->phs.handlers->send[PACKET_VOTE_UPDATE].packet(pc, packet);
81097}
81098
81099#ifdef FREECIV_DELTA_PROTOCOL
81100#define hash_packet_vote_remove_100 hash_const
81101
81102#define cmp_packet_vote_remove_100 cmp_const
81103
81105#endif /* FREECIV_DELTA_PROTOCOL */
81106
81108{
81109#ifdef FREECIV_DELTA_PROTOCOL
81111 struct packet_vote_remove *old;
81112 struct genhash **hash = pc->phs.received + PACKET_VOTE_REMOVE;
81113#endif /* FREECIV_DELTA_PROTOCOL */
81115#ifdef FREECIV_JSON_CONNECTION
81116 struct plocation field_addr;
81117 {
81121 }
81122#endif /* FREECIV_JSON_CONNECTION */
81123
81124#ifdef FREECIV_DELTA_PROTOCOL
81125#ifdef FREECIV_JSON_CONNECTION
81126 field_addr.name = "fields";
81127#endif /* FREECIV_JSON_CONNECTION */
81128 DIO_BV_GET(&din, &field_addr, fields);
81129
81130#else /* FREECIV_DELTA_PROTOCOL */
81131#ifdef FREECIV_JSON_CONNECTION
81132 field_addr.name = "vote_no";
81133#endif /* FREECIV_JSON_CONNECTION */
81134 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
81136 }
81137#endif
81138 log_packet_detailed("packet_vote_remove_100: got info about ()");
81139
81140#ifdef FREECIV_DELTA_PROTOCOL
81141 if (NULL == *hash) {
81143 NULL, NULL, NULL, free);
81144 }
81145
81146 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81147 *real_packet = *old;
81148 } else {
81149 log_packet_detailed(" no old info");
81150 memset(real_packet, 0, sizeof(*real_packet));
81151 }
81152
81153 if (BV_ISSET(fields, 0)) {
81154 log_packet_detailed(" got field 'vote_no'");
81155#ifdef FREECIV_JSON_CONNECTION
81156 field_addr.name = "vote_no";
81157#endif /* FREECIV_JSON_CONNECTION */
81158 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
81160 }
81161 }
81162
81163 if (NULL == old) {
81164 old = fc_malloc(sizeof(*old));
81165 *old = *real_packet;
81166 genhash_insert(*hash, old, old);
81167 } else {
81168 *old = *real_packet;
81169 }
81170
81171#endif /* FREECIV_DELTA_PROTOCOL */
81173}
81174
81175static int send_packet_vote_remove_100(struct connection *pc, const struct packet_vote_remove *packet)
81176{
81177 const struct packet_vote_remove *real_packet = packet;
81178 int e;
81179#ifdef FREECIV_DELTA_PROTOCOL
81181 struct packet_vote_remove *old;
81182 bool differ;
81183 struct genhash **hash = pc->phs.sent + PACKET_VOTE_REMOVE;
81184#endif /* FREECIV_DELTA_PROTOCOL */
81186#ifdef FREECIV_JSON_CONNECTION
81187 struct plocation field_addr;
81188 {
81192 }
81193#endif /* FREECIV_JSON_CONNECTION */
81194
81195 log_packet_detailed("packet_vote_remove_100: sending info about ()");
81196
81197#ifdef FREECIV_DELTA_PROTOCOL
81198 if (NULL == *hash) {
81200 NULL, NULL, NULL, free);
81201 }
81202 BV_CLR_ALL(fields);
81203
81204 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81205 old = fc_malloc(sizeof(*old));
81206 *old = *real_packet;
81207 genhash_insert(*hash, old, old);
81208 memset(old, 0, sizeof(*old));
81209 }
81210 differ = (old->vote_no != real_packet->vote_no);
81211 if (differ) {
81212 BV_SET(fields, 0);
81213 }
81214
81215
81216#ifdef FREECIV_JSON_CONNECTION
81217 field_addr.name = "fields";
81218#endif /* FREECIV_JSON_CONNECTION */
81219 e = 0;
81220 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81221 if (e) {
81222 log_packet_detailed("fields bitvector error detected");
81223 }
81224
81225 if (BV_ISSET(fields, 0)) {
81226 log_packet_detailed(" field 'vote_no' has changed");
81227#ifdef FREECIV_JSON_CONNECTION
81228 field_addr.name = "vote_no";
81229#endif /* FREECIV_JSON_CONNECTION */
81230 e = 0;
81231 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
81232 if (e) {
81233 log_packet_detailed("'vote_no' field error detected");
81234 }
81235 }
81236
81237 *old = *real_packet;
81238#endif /* FREECIV_DELTA_PROTOCOL */
81239#ifndef FREECIV_DELTA_PROTOCOL
81240#ifdef FREECIV_JSON_CONNECTION
81241 field_addr.name = "vote_no";
81242#endif /* FREECIV_JSON_CONNECTION */
81243 e = 0;
81244 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
81245 if (e) {
81246 log_packet_detailed("'vote_no' field error detected");
81247 }
81248
81249#endif
81251}
81252
81254{
81255 if (!pc->used) {
81256 log_error("WARNING: trying to send data to the closed connection %s",
81258 return -1;
81259 }
81260 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet != NULL, -1,
81261 "Handler for PACKET_VOTE_REMOVE not installed");
81262 return pc->phs.handlers->send[PACKET_VOTE_REMOVE].packet(pc, packet);
81263}
81264
81265#ifdef FREECIV_DELTA_PROTOCOL
81266#define hash_packet_vote_resolve_100 hash_const
81267
81268#define cmp_packet_vote_resolve_100 cmp_const
81269
81271#endif /* FREECIV_DELTA_PROTOCOL */
81272
81274{
81275#ifdef FREECIV_DELTA_PROTOCOL
81277 struct packet_vote_resolve *old;
81278 struct genhash **hash = pc->phs.received + PACKET_VOTE_RESOLVE;
81279#endif /* FREECIV_DELTA_PROTOCOL */
81281#ifdef FREECIV_JSON_CONNECTION
81282 struct plocation field_addr;
81283 {
81287 }
81288#endif /* FREECIV_JSON_CONNECTION */
81289
81290#ifdef FREECIV_DELTA_PROTOCOL
81291#ifdef FREECIV_JSON_CONNECTION
81292 field_addr.name = "fields";
81293#endif /* FREECIV_JSON_CONNECTION */
81294 DIO_BV_GET(&din, &field_addr, fields);
81295
81296#else /* FREECIV_DELTA_PROTOCOL */
81297#ifdef FREECIV_JSON_CONNECTION
81298 field_addr.name = "vote_no";
81299#endif /* FREECIV_JSON_CONNECTION */
81300 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
81302 }
81303#ifdef FREECIV_JSON_CONNECTION
81304 field_addr.name = "passed";
81305#endif /* FREECIV_JSON_CONNECTION */
81306 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->passed)) {
81308 }
81309#endif
81310 log_packet_detailed("packet_vote_resolve_100: got info about ()");
81311
81312#ifdef FREECIV_DELTA_PROTOCOL
81313 if (NULL == *hash) {
81315 NULL, NULL, NULL, free);
81316 }
81317
81318 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81319 *real_packet = *old;
81320 } else {
81321 log_packet_detailed(" no old info");
81322 memset(real_packet, 0, sizeof(*real_packet));
81323 }
81324
81325 if (BV_ISSET(fields, 0)) {
81326 log_packet_detailed(" got field 'vote_no'");
81327#ifdef FREECIV_JSON_CONNECTION
81328 field_addr.name = "vote_no";
81329#endif /* FREECIV_JSON_CONNECTION */
81330 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
81332 }
81333 }
81334 real_packet->passed = BV_ISSET(fields, 1);
81335
81336 if (NULL == old) {
81337 old = fc_malloc(sizeof(*old));
81338 *old = *real_packet;
81339 genhash_insert(*hash, old, old);
81340 } else {
81341 *old = *real_packet;
81342 }
81343
81344#endif /* FREECIV_DELTA_PROTOCOL */
81346}
81347
81348static int send_packet_vote_resolve_100(struct connection *pc, const struct packet_vote_resolve *packet)
81349{
81350 const struct packet_vote_resolve *real_packet = packet;
81351 int e;
81352#ifdef FREECIV_DELTA_PROTOCOL
81354 struct packet_vote_resolve *old;
81355 bool differ;
81356 struct genhash **hash = pc->phs.sent + PACKET_VOTE_RESOLVE;
81357#endif /* FREECIV_DELTA_PROTOCOL */
81359#ifdef FREECIV_JSON_CONNECTION
81360 struct plocation field_addr;
81361 {
81365 }
81366#endif /* FREECIV_JSON_CONNECTION */
81367
81368 log_packet_detailed("packet_vote_resolve_100: sending info about ()");
81369
81370#ifdef FREECIV_DELTA_PROTOCOL
81371 if (NULL == *hash) {
81373 NULL, NULL, NULL, free);
81374 }
81375 BV_CLR_ALL(fields);
81376
81377 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81378 old = fc_malloc(sizeof(*old));
81379 *old = *real_packet;
81380 genhash_insert(*hash, old, old);
81381 memset(old, 0, sizeof(*old));
81382 }
81383 differ = (old->vote_no != real_packet->vote_no);
81384 if (differ) {
81385 BV_SET(fields, 0);
81386 }
81387
81388 if (packet->passed) {
81389 BV_SET(fields, 1);
81390 }
81391
81392
81393#ifdef FREECIV_JSON_CONNECTION
81394 field_addr.name = "fields";
81395#endif /* FREECIV_JSON_CONNECTION */
81396 e = 0;
81397 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81398 if (e) {
81399 log_packet_detailed("fields bitvector error detected");
81400 }
81401
81402 if (BV_ISSET(fields, 0)) {
81403 log_packet_detailed(" field 'vote_no' has changed");
81404#ifdef FREECIV_JSON_CONNECTION
81405 field_addr.name = "vote_no";
81406#endif /* FREECIV_JSON_CONNECTION */
81407 e = 0;
81408 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
81409 if (e) {
81410 log_packet_detailed("'vote_no' field error detected");
81411 }
81412 }
81413 /* field 1 is folded into the header */
81414
81415 *old = *real_packet;
81416#endif /* FREECIV_DELTA_PROTOCOL */
81417#ifndef FREECIV_DELTA_PROTOCOL
81418#ifdef FREECIV_JSON_CONNECTION
81419 field_addr.name = "vote_no";
81420#endif /* FREECIV_JSON_CONNECTION */
81421 e = 0;
81422 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
81423 if (e) {
81424 log_packet_detailed("'vote_no' field error detected");
81425 }
81426#ifdef FREECIV_JSON_CONNECTION
81427 field_addr.name = "passed";
81428#endif /* FREECIV_JSON_CONNECTION */
81429 e = 0;
81430 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->passed);
81431 if (e) {
81432 log_packet_detailed("'passed' field error detected");
81433 }
81434
81435#endif
81437}
81438
81440{
81441 if (!pc->used) {
81442 log_error("WARNING: trying to send data to the closed connection %s",
81444 return -1;
81445 }
81446 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet != NULL, -1,
81447 "Handler for PACKET_VOTE_RESOLVE not installed");
81448 return pc->phs.handlers->send[PACKET_VOTE_RESOLVE].packet(pc, packet);
81449}
81450
81452{
81454#ifdef FREECIV_JSON_CONNECTION
81455 struct plocation field_addr;
81456 {
81460 }
81461#endif /* FREECIV_JSON_CONNECTION */
81462#if 1 /* To match endif */
81463#ifdef FREECIV_JSON_CONNECTION
81464 field_addr.name = "vote_no";
81465#endif /* FREECIV_JSON_CONNECTION */
81466 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->vote_no)) {
81468 }
81469#ifdef FREECIV_JSON_CONNECTION
81470 field_addr.name = "value";
81471#endif /* FREECIV_JSON_CONNECTION */
81472 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->value)) {
81474 }
81475#endif
81476 log_packet_detailed("packet_vote_submit_100: got info about ()");
81478}
81479
81480static int send_packet_vote_submit_100(struct connection *pc, const struct packet_vote_submit *packet)
81481{
81482 const struct packet_vote_submit *real_packet = packet;
81483 int e;
81485#ifdef FREECIV_JSON_CONNECTION
81486 struct plocation field_addr;
81487 {
81491 }
81492#endif /* FREECIV_JSON_CONNECTION */
81493
81494 log_packet_detailed("packet_vote_submit_100: sending info about ()");
81495#if 1 /* To match endif */
81496#ifdef FREECIV_JSON_CONNECTION
81497 field_addr.name = "vote_no";
81498#endif /* FREECIV_JSON_CONNECTION */
81499 e = 0;
81500 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->vote_no);
81501 if (e) {
81502 log_packet_detailed("'vote_no' field error detected");
81503 }
81504#ifdef FREECIV_JSON_CONNECTION
81505 field_addr.name = "value";
81506#endif /* FREECIV_JSON_CONNECTION */
81507 e = 0;
81508 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->value);
81509 if (e) {
81510 log_packet_detailed("'value' field error detected");
81511 }
81512
81513#endif
81515}
81516
81518{
81519 if (!pc->used) {
81520 log_error("WARNING: trying to send data to the closed connection %s",
81522 return -1;
81523 }
81524 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet != NULL, -1,
81525 "Handler for PACKET_VOTE_SUBMIT not installed");
81526 return pc->phs.handlers->send[PACKET_VOTE_SUBMIT].packet(pc, packet);
81527}
81528
81529#ifdef FREECIV_DELTA_PROTOCOL
81530#define hash_packet_edit_mode_100 hash_const
81531
81532#define cmp_packet_edit_mode_100 cmp_const
81533
81535#endif /* FREECIV_DELTA_PROTOCOL */
81536
81538{
81539#ifdef FREECIV_DELTA_PROTOCOL
81541 struct packet_edit_mode *old;
81542 struct genhash **hash = pc->phs.received + PACKET_EDIT_MODE;
81543#endif /* FREECIV_DELTA_PROTOCOL */
81545#ifdef FREECIV_JSON_CONNECTION
81546 struct plocation field_addr;
81547 {
81551 }
81552#endif /* FREECIV_JSON_CONNECTION */
81553
81554#ifdef FREECIV_DELTA_PROTOCOL
81555#ifdef FREECIV_JSON_CONNECTION
81556 field_addr.name = "fields";
81557#endif /* FREECIV_JSON_CONNECTION */
81558 DIO_BV_GET(&din, &field_addr, fields);
81559
81560#else /* FREECIV_DELTA_PROTOCOL */
81561#ifdef FREECIV_JSON_CONNECTION
81562 field_addr.name = "state";
81563#endif /* FREECIV_JSON_CONNECTION */
81564 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->state)) {
81566 }
81567#endif
81568 log_packet_detailed("packet_edit_mode_100: got info about ()");
81569
81570#ifdef FREECIV_DELTA_PROTOCOL
81571 if (NULL == *hash) {
81573 NULL, NULL, NULL, free);
81574 }
81575
81576 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81577 *real_packet = *old;
81578 } else {
81579 log_packet_detailed(" no old info");
81580 memset(real_packet, 0, sizeof(*real_packet));
81581 }
81582
81583 real_packet->state = BV_ISSET(fields, 0);
81584
81585 if (NULL == old) {
81586 old = fc_malloc(sizeof(*old));
81587 *old = *real_packet;
81588 genhash_insert(*hash, old, old);
81589 } else {
81590 *old = *real_packet;
81591 }
81592
81593#endif /* FREECIV_DELTA_PROTOCOL */
81595}
81596
81597static int send_packet_edit_mode_100(struct connection *pc, const struct packet_edit_mode *packet)
81598{
81599 const struct packet_edit_mode *real_packet = packet;
81600 int e;
81601#ifdef FREECIV_DELTA_PROTOCOL
81603 struct packet_edit_mode *old;
81604 struct genhash **hash = pc->phs.sent + PACKET_EDIT_MODE;
81605#endif /* FREECIV_DELTA_PROTOCOL */
81607#ifdef FREECIV_JSON_CONNECTION
81608 struct plocation field_addr;
81609 {
81613 }
81614#endif /* FREECIV_JSON_CONNECTION */
81615
81616 log_packet_detailed("packet_edit_mode_100: sending info about ()");
81617
81618#ifdef FREECIV_DELTA_PROTOCOL
81619 if (NULL == *hash) {
81621 NULL, NULL, NULL, free);
81622 }
81623 BV_CLR_ALL(fields);
81624
81625 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81626 old = fc_malloc(sizeof(*old));
81627 *old = *real_packet;
81628 genhash_insert(*hash, old, old);
81629 memset(old, 0, sizeof(*old));
81630 }
81631 if (packet->state) {
81632 BV_SET(fields, 0);
81633 }
81634
81635
81636#ifdef FREECIV_JSON_CONNECTION
81637 field_addr.name = "fields";
81638#endif /* FREECIV_JSON_CONNECTION */
81639 e = 0;
81640 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81641 if (e) {
81642 log_packet_detailed("fields bitvector error detected");
81643 }
81644
81645 /* field 0 is folded into the header */
81646
81647 *old = *real_packet;
81648#endif /* FREECIV_DELTA_PROTOCOL */
81649#ifndef FREECIV_DELTA_PROTOCOL
81650#ifdef FREECIV_JSON_CONNECTION
81651 field_addr.name = "state";
81652#endif /* FREECIV_JSON_CONNECTION */
81653 e = 0;
81654 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->state);
81655 if (e) {
81656 log_packet_detailed("'state' field error detected");
81657 }
81658
81659#endif
81661}
81662
81663int send_packet_edit_mode(struct connection *pc, const struct packet_edit_mode *packet)
81664{
81665 if (!pc->used) {
81666 log_error("WARNING: trying to send data to the closed connection %s",
81668 return -1;
81669 }
81670 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_MODE].packet != NULL, -1,
81671 "Handler for PACKET_EDIT_MODE not installed");
81672 return pc->phs.handlers->send[PACKET_EDIT_MODE].packet(pc, packet);
81673}
81674
81675int dsend_packet_edit_mode(struct connection *pc, bool state)
81676{
81677 struct packet_edit_mode packet, *real_packet = &packet;
81678
81680
81682}
81683
81685{
81687#if 1 /* To match endif */
81688 real_packet->__dummy = 0xff;
81689#endif
81690 log_packet_detailed("packet_edit_recalculate_borders_100: got info about ()");
81692}
81693
81695{
81697
81698 log_packet_detailed("packet_edit_recalculate_borders_100: sending info about ()");
81700}
81701
81703{
81704 if (!pc->used) {
81705 log_error("WARNING: trying to send data to the closed connection %s",
81707 return -1;
81708 }
81709 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet != NULL, -1,
81710 "Handler for PACKET_EDIT_RECALCULATE_BORDERS not installed");
81711 return pc->phs.handlers->send[PACKET_EDIT_RECALCULATE_BORDERS].no_packet(pc);
81712}
81713
81715{
81717#if 1 /* To match endif */
81718 real_packet->__dummy = 0xff;
81719#endif
81720 log_packet_detailed("packet_edit_check_tiles_100: got info about ()");
81722}
81723
81725{
81727
81728 log_packet_detailed("packet_edit_check_tiles_100: sending info about ()");
81730}
81731
81733{
81734 if (!pc->used) {
81735 log_error("WARNING: trying to send data to the closed connection %s",
81737 return -1;
81738 }
81739 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet != NULL, -1,
81740 "Handler for PACKET_EDIT_CHECK_TILES not installed");
81741 return pc->phs.handlers->send[PACKET_EDIT_CHECK_TILES].no_packet(pc);
81742}
81743
81744#ifdef FREECIV_DELTA_PROTOCOL
81745#define hash_packet_edit_toggle_fogofwar_100 hash_const
81746
81747#define cmp_packet_edit_toggle_fogofwar_100 cmp_const
81748
81750#endif /* FREECIV_DELTA_PROTOCOL */
81751
81753{
81754#ifdef FREECIV_DELTA_PROTOCOL
81756 struct packet_edit_toggle_fogofwar *old;
81757 struct genhash **hash = pc->phs.received + PACKET_EDIT_TOGGLE_FOGOFWAR;
81758#endif /* FREECIV_DELTA_PROTOCOL */
81760#ifdef FREECIV_JSON_CONNECTION
81761 struct plocation field_addr;
81762 {
81766 }
81767#endif /* FREECIV_JSON_CONNECTION */
81768
81769#ifdef FREECIV_DELTA_PROTOCOL
81770#ifdef FREECIV_JSON_CONNECTION
81771 field_addr.name = "fields";
81772#endif /* FREECIV_JSON_CONNECTION */
81773 DIO_BV_GET(&din, &field_addr, fields);
81774
81775#else /* FREECIV_DELTA_PROTOCOL */
81776#ifdef FREECIV_JSON_CONNECTION
81777 field_addr.name = "player";
81778#endif /* FREECIV_JSON_CONNECTION */
81779 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player)) {
81781 }
81782#endif
81783 log_packet_detailed("packet_edit_toggle_fogofwar_100: got info about ()");
81784
81785#ifdef FREECIV_DELTA_PROTOCOL
81786 if (NULL == *hash) {
81788 NULL, NULL, NULL, free);
81789 }
81790
81791 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81792 *real_packet = *old;
81793 } else {
81794 log_packet_detailed(" no old info");
81795 memset(real_packet, 0, sizeof(*real_packet));
81796 }
81797
81798 if (BV_ISSET(fields, 0)) {
81799 log_packet_detailed(" got field 'player'");
81800#ifdef FREECIV_JSON_CONNECTION
81801 field_addr.name = "player";
81802#endif /* FREECIV_JSON_CONNECTION */
81803 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player)) {
81805 }
81806 }
81807
81808 if (NULL == old) {
81809 old = fc_malloc(sizeof(*old));
81810 *old = *real_packet;
81811 genhash_insert(*hash, old, old);
81812 } else {
81813 *old = *real_packet;
81814 }
81815
81816#endif /* FREECIV_DELTA_PROTOCOL */
81818}
81819
81821{
81822 const struct packet_edit_toggle_fogofwar *real_packet = packet;
81823 int e;
81824#ifdef FREECIV_DELTA_PROTOCOL
81826 struct packet_edit_toggle_fogofwar *old;
81827 bool differ;
81828 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TOGGLE_FOGOFWAR;
81829#endif /* FREECIV_DELTA_PROTOCOL */
81831#ifdef FREECIV_JSON_CONNECTION
81832 struct plocation field_addr;
81833 {
81837 }
81838#endif /* FREECIV_JSON_CONNECTION */
81839
81840 log_packet_detailed("packet_edit_toggle_fogofwar_100: sending info about ()");
81841
81842#ifdef FREECIV_DELTA_PROTOCOL
81843 if (NULL == *hash) {
81845 NULL, NULL, NULL, free);
81846 }
81847 BV_CLR_ALL(fields);
81848
81849 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
81850 old = fc_malloc(sizeof(*old));
81851 *old = *real_packet;
81852 genhash_insert(*hash, old, old);
81853 memset(old, 0, sizeof(*old));
81854 }
81855 differ = (old->player != real_packet->player);
81856 if (differ) {
81857 BV_SET(fields, 0);
81858 }
81859
81860
81861#ifdef FREECIV_JSON_CONNECTION
81862 field_addr.name = "fields";
81863#endif /* FREECIV_JSON_CONNECTION */
81864 e = 0;
81865 e |= DIO_BV_PUT(&dout, &field_addr, fields);
81866 if (e) {
81867 log_packet_detailed("fields bitvector error detected");
81868 }
81869
81870 if (BV_ISSET(fields, 0)) {
81871 log_packet_detailed(" field 'player' has changed");
81872#ifdef FREECIV_JSON_CONNECTION
81873 field_addr.name = "player";
81874#endif /* FREECIV_JSON_CONNECTION */
81875 e = 0;
81876 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player);
81877 if (e) {
81878 log_packet_detailed("'player' field error detected");
81879 }
81880 }
81881
81882 *old = *real_packet;
81883#endif /* FREECIV_DELTA_PROTOCOL */
81884#ifndef FREECIV_DELTA_PROTOCOL
81885#ifdef FREECIV_JSON_CONNECTION
81886 field_addr.name = "player";
81887#endif /* FREECIV_JSON_CONNECTION */
81888 e = 0;
81889 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player);
81890 if (e) {
81891 log_packet_detailed("'player' field error detected");
81892 }
81893
81894#endif
81896}
81897
81899{
81900 if (!pc->used) {
81901 log_error("WARNING: trying to send data to the closed connection %s",
81903 return -1;
81904 }
81905 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet != NULL, -1,
81906 "Handler for PACKET_EDIT_TOGGLE_FOGOFWAR not installed");
81907 return pc->phs.handlers->send[PACKET_EDIT_TOGGLE_FOGOFWAR].packet(pc, packet);
81908}
81909
81911{
81912 struct packet_edit_toggle_fogofwar packet, *real_packet = &packet;
81913
81915
81917}
81918
81919#ifdef FREECIV_DELTA_PROTOCOL
81920#define hash_packet_edit_fogofwar_state_100 hash_const
81921
81922#define cmp_packet_edit_fogofwar_state_100 cmp_const
81923
81925#endif /* FREECIV_DELTA_PROTOCOL */
81926
81928{
81929#ifdef FREECIV_DELTA_PROTOCOL
81931 struct packet_edit_fogofwar_state *old;
81932 struct genhash **hash = pc->phs.received + PACKET_EDIT_FOGOFWAR_STATE;
81933#endif /* FREECIV_DELTA_PROTOCOL */
81935#ifdef FREECIV_JSON_CONNECTION
81936 struct plocation field_addr;
81937 {
81941 }
81942#endif /* FREECIV_JSON_CONNECTION */
81943
81944#ifdef FREECIV_DELTA_PROTOCOL
81945#ifdef FREECIV_JSON_CONNECTION
81946 field_addr.name = "fields";
81947#endif /* FREECIV_JSON_CONNECTION */
81948 DIO_BV_GET(&din, &field_addr, fields);
81949
81950#else /* FREECIV_DELTA_PROTOCOL */
81951#ifdef FREECIV_JSON_CONNECTION
81952 field_addr.name = "enabled";
81953#endif /* FREECIV_JSON_CONNECTION */
81954 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->enabled)) {
81956 }
81957#endif
81958 log_packet_detailed("packet_edit_fogofwar_state_100: got info about ()");
81959
81960#ifdef FREECIV_DELTA_PROTOCOL
81961 if (NULL == *hash) {
81963 NULL, NULL, NULL, free);
81964 }
81965
81966 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
81967 *real_packet = *old;
81968 } else {
81969 log_packet_detailed(" no old info");
81970 memset(real_packet, 0, sizeof(*real_packet));
81971 }
81972
81973 real_packet->enabled = BV_ISSET(fields, 0);
81974
81975 if (NULL == old) {
81976 old = fc_malloc(sizeof(*old));
81977 *old = *real_packet;
81978 genhash_insert(*hash, old, old);
81979 } else {
81980 *old = *real_packet;
81981 }
81982
81983#endif /* FREECIV_DELTA_PROTOCOL */
81985}
81986
81988{
81989 const struct packet_edit_fogofwar_state *real_packet = packet;
81990 int e;
81991#ifdef FREECIV_DELTA_PROTOCOL
81993 struct packet_edit_fogofwar_state *old;
81994 struct genhash **hash = pc->phs.sent + PACKET_EDIT_FOGOFWAR_STATE;
81995#endif /* FREECIV_DELTA_PROTOCOL */
81997#ifdef FREECIV_JSON_CONNECTION
81998 struct plocation field_addr;
81999 {
82003 }
82004#endif /* FREECIV_JSON_CONNECTION */
82005
82006 log_packet_detailed("packet_edit_fogofwar_state_100: sending info about ()");
82007
82008#ifdef FREECIV_DELTA_PROTOCOL
82009 if (NULL == *hash) {
82011 NULL, NULL, NULL, free);
82012 }
82013 BV_CLR_ALL(fields);
82014
82015 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82016 old = fc_malloc(sizeof(*old));
82017 *old = *real_packet;
82018 genhash_insert(*hash, old, old);
82019 memset(old, 0, sizeof(*old));
82020 }
82021 if (packet->enabled) {
82022 BV_SET(fields, 0);
82023 }
82024
82025
82026#ifdef FREECIV_JSON_CONNECTION
82027 field_addr.name = "fields";
82028#endif /* FREECIV_JSON_CONNECTION */
82029 e = 0;
82030 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82031 if (e) {
82032 log_packet_detailed("fields bitvector error detected");
82033 }
82034
82035 /* field 0 is folded into the header */
82036
82037 *old = *real_packet;
82038#endif /* FREECIV_DELTA_PROTOCOL */
82039#ifndef FREECIV_DELTA_PROTOCOL
82040#ifdef FREECIV_JSON_CONNECTION
82041 field_addr.name = "enabled";
82042#endif /* FREECIV_JSON_CONNECTION */
82043 e = 0;
82044 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->enabled);
82045 if (e) {
82046 log_packet_detailed("'enabled' field error detected");
82047 }
82048
82049#endif
82051}
82052
82054{
82055 if (!pc->used) {
82056 log_error("WARNING: trying to send data to the closed connection %s",
82058 return -1;
82059 }
82060 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet != NULL, -1,
82061 "Handler for PACKET_EDIT_FOGOFWAR_STATE not installed");
82062 return pc->phs.handlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet(pc, packet);
82063}
82064
82066{
82067 conn_list_iterate(dest, pconn) {
82070}
82071
82073{
82074 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
82075
82077
82079}
82080
82082{
82083 struct packet_edit_fogofwar_state packet, *real_packet = &packet;
82084
82086
82088}
82089
82090#ifdef FREECIV_DELTA_PROTOCOL
82092{
82093 const struct packet_edit_tile_terrain *key = (const struct packet_edit_tile_terrain *) vkey;
82094 genhash_val_t result = 0;
82095
82096 result += key->tile;
82097
82098 result &= 0xFFFFFFFF;
82099 return result;
82100}
82101
82102static bool cmp_packet_edit_tile_terrain_100(const void *vkey1, const void *vkey2)
82103{
82104 const struct packet_edit_tile_terrain *old = (const struct packet_edit_tile_terrain *) vkey1;
82105 const struct packet_edit_tile_terrain *real_packet = (const struct packet_edit_tile_terrain *) vkey2;
82106 bool differ;
82107
82108 differ = (old->tile != real_packet->tile);
82109
82110 return !differ;
82111}
82113#endif /* FREECIV_DELTA_PROTOCOL */
82114
82116{
82117#ifdef FREECIV_DELTA_PROTOCOL
82119 struct packet_edit_tile_terrain *old;
82120 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_TERRAIN;
82121#endif /* FREECIV_DELTA_PROTOCOL */
82123#ifdef FREECIV_JSON_CONNECTION
82124 struct plocation field_addr;
82125 {
82129 }
82130#endif /* FREECIV_JSON_CONNECTION */
82131
82132#ifdef FREECIV_DELTA_PROTOCOL
82133#ifdef FREECIV_JSON_CONNECTION
82134 field_addr.name = "fields";
82135#endif /* FREECIV_JSON_CONNECTION */
82136 DIO_BV_GET(&din, &field_addr, fields);
82137#ifdef FREECIV_JSON_CONNECTION
82138 field_addr.name = "tile";
82139#endif /* FREECIV_JSON_CONNECTION */
82140 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
82142 }
82143
82144#else /* FREECIV_DELTA_PROTOCOL */
82145#ifdef FREECIV_JSON_CONNECTION
82146 field_addr.name = "tile";
82147#endif /* FREECIV_JSON_CONNECTION */
82148 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
82150 }
82151#ifdef FREECIV_JSON_CONNECTION
82152 field_addr.name = "terrain";
82153#endif /* FREECIV_JSON_CONNECTION */
82154 {
82155 int readin;
82156
82157 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
82159 }
82160 real_packet->terrain = readin;
82161 }
82162#ifdef FREECIV_JSON_CONNECTION
82163 field_addr.name = "size";
82164#endif /* FREECIV_JSON_CONNECTION */
82165 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
82167 }
82168#endif
82169 log_packet_detailed("packet_edit_tile_terrain_100: got info about (%d)",
82170 real_packet->tile);
82171
82172#ifdef FREECIV_DELTA_PROTOCOL
82173 if (NULL == *hash) {
82175 NULL, NULL, NULL, free);
82176 }
82177
82178 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
82179 *real_packet = *old;
82180 } else {
82181 int tile;
82182
82183 tile = real_packet->tile;
82184
82185 log_packet_detailed(" no old info");
82186 memset(real_packet, 0, sizeof(*real_packet));
82187
82188 real_packet->tile = tile;
82189 }
82190
82191 if (BV_ISSET(fields, 0)) {
82192 log_packet_detailed(" got field 'terrain'");
82193#ifdef FREECIV_JSON_CONNECTION
82194 field_addr.name = "terrain";
82195#endif /* FREECIV_JSON_CONNECTION */
82196 {
82197 int readin;
82198
82199 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
82201 }
82202 real_packet->terrain = readin;
82203 }
82204 }
82205 if (BV_ISSET(fields, 1)) {
82206 log_packet_detailed(" got field 'size'");
82207#ifdef FREECIV_JSON_CONNECTION
82208 field_addr.name = "size";
82209#endif /* FREECIV_JSON_CONNECTION */
82210 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
82212 }
82213 }
82214
82215 if (NULL == old) {
82216 old = fc_malloc(sizeof(*old));
82217 *old = *real_packet;
82218 genhash_insert(*hash, old, old);
82219 } else {
82220 *old = *real_packet;
82221 }
82222
82223#endif /* FREECIV_DELTA_PROTOCOL */
82225}
82226
82228{
82229 const struct packet_edit_tile_terrain *real_packet = packet;
82230 int e;
82231#ifdef FREECIV_DELTA_PROTOCOL
82233 struct packet_edit_tile_terrain *old;
82234 bool differ;
82235 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_TERRAIN;
82236#endif /* FREECIV_DELTA_PROTOCOL */
82238#ifdef FREECIV_JSON_CONNECTION
82239 struct plocation field_addr;
82240 {
82244 }
82245#endif /* FREECIV_JSON_CONNECTION */
82246
82247 log_packet_detailed("packet_edit_tile_terrain_100: sending info about (%d)",
82248 real_packet->tile);
82249
82250#ifdef FREECIV_DELTA_PROTOCOL
82251 if (NULL == *hash) {
82253 NULL, NULL, NULL, free);
82254 }
82255 BV_CLR_ALL(fields);
82256
82257 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82258 old = fc_malloc(sizeof(*old));
82259 *old = *real_packet;
82260 genhash_insert(*hash, old, old);
82261 memset(old, 0, sizeof(*old));
82262 }
82263 differ = (old->terrain != real_packet->terrain);
82264 if (differ) {
82265 BV_SET(fields, 0);
82266 }
82267
82268 differ = (old->size != real_packet->size);
82269 if (differ) {
82270 BV_SET(fields, 1);
82271 }
82272
82273
82274#ifdef FREECIV_JSON_CONNECTION
82275 field_addr.name = "fields";
82276#endif /* FREECIV_JSON_CONNECTION */
82277 e = 0;
82278 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82279 if (e) {
82280 log_packet_detailed("fields bitvector error detected");
82281 }
82282#ifdef FREECIV_JSON_CONNECTION
82283 field_addr.name = "tile";
82284#endif /* FREECIV_JSON_CONNECTION */
82285 e = 0;
82286 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
82287 if (e) {
82288 log_packet_detailed("'tile' field error detected");
82289 }
82290
82291 if (BV_ISSET(fields, 0)) {
82292 log_packet_detailed(" field 'terrain' has changed");
82293#ifdef FREECIV_JSON_CONNECTION
82294 field_addr.name = "terrain";
82295#endif /* FREECIV_JSON_CONNECTION */
82296 e = 0;
82297 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
82298 if (e) {
82299 log_packet_detailed("'terrain' field error detected");
82300 }
82301 }
82302 if (BV_ISSET(fields, 1)) {
82303 log_packet_detailed(" field 'size' has changed");
82304#ifdef FREECIV_JSON_CONNECTION
82305 field_addr.name = "size";
82306#endif /* FREECIV_JSON_CONNECTION */
82307 e = 0;
82308 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
82309 if (e) {
82310 log_packet_detailed("'size' field error detected");
82311 }
82312 }
82313
82314 *old = *real_packet;
82315#endif /* FREECIV_DELTA_PROTOCOL */
82316#ifndef FREECIV_DELTA_PROTOCOL
82317#ifdef FREECIV_JSON_CONNECTION
82318 field_addr.name = "tile";
82319#endif /* FREECIV_JSON_CONNECTION */
82320 e = 0;
82321 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
82322 if (e) {
82323 log_packet_detailed("'tile' field error detected");
82324 }
82325#ifdef FREECIV_JSON_CONNECTION
82326 field_addr.name = "terrain";
82327#endif /* FREECIV_JSON_CONNECTION */
82328 e = 0;
82329 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
82330 if (e) {
82331 log_packet_detailed("'terrain' field error detected");
82332 }
82333#ifdef FREECIV_JSON_CONNECTION
82334 field_addr.name = "size";
82335#endif /* FREECIV_JSON_CONNECTION */
82336 e = 0;
82337 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
82338 if (e) {
82339 log_packet_detailed("'size' field error detected");
82340 }
82341
82342#endif
82344}
82345
82347{
82348 if (!pc->used) {
82349 log_error("WARNING: trying to send data to the closed connection %s",
82351 return -1;
82352 }
82353 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet != NULL, -1,
82354 "Handler for PACKET_EDIT_TILE_TERRAIN not installed");
82355 return pc->phs.handlers->send[PACKET_EDIT_TILE_TERRAIN].packet(pc, packet);
82356}
82357
82359{
82360 struct packet_edit_tile_terrain packet, *real_packet = &packet;
82361
82363 real_packet->terrain = terrain;
82364 real_packet->size = size;
82365
82367}
82368
82369#ifdef FREECIV_DELTA_PROTOCOL
82371{
82372 const struct packet_edit_tile_extra *key = (const struct packet_edit_tile_extra *) vkey;
82373 genhash_val_t result = 0;
82374
82375 result += key->tile;
82376
82377 result &= 0xFFFFFFFF;
82378 return result;
82379}
82380
82381static bool cmp_packet_edit_tile_extra_100(const void *vkey1, const void *vkey2)
82382{
82383 const struct packet_edit_tile_extra *old = (const struct packet_edit_tile_extra *) vkey1;
82384 const struct packet_edit_tile_extra *real_packet = (const struct packet_edit_tile_extra *) vkey2;
82385 bool differ;
82386
82387 differ = (old->tile != real_packet->tile);
82388
82389 return !differ;
82390}
82392#endif /* FREECIV_DELTA_PROTOCOL */
82393
82395{
82396#ifdef FREECIV_DELTA_PROTOCOL
82398 struct packet_edit_tile_extra *old;
82399 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE_EXTRA;
82400#endif /* FREECIV_DELTA_PROTOCOL */
82402#ifdef FREECIV_JSON_CONNECTION
82403 struct plocation field_addr;
82404 {
82408 }
82409#endif /* FREECIV_JSON_CONNECTION */
82410
82411#ifdef FREECIV_DELTA_PROTOCOL
82412#ifdef FREECIV_JSON_CONNECTION
82413 field_addr.name = "fields";
82414#endif /* FREECIV_JSON_CONNECTION */
82415 DIO_BV_GET(&din, &field_addr, fields);
82416#ifdef FREECIV_JSON_CONNECTION
82417 field_addr.name = "tile";
82418#endif /* FREECIV_JSON_CONNECTION */
82419 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
82421 }
82422
82423#else /* FREECIV_DELTA_PROTOCOL */
82424#ifdef FREECIV_JSON_CONNECTION
82425 field_addr.name = "tile";
82426#endif /* FREECIV_JSON_CONNECTION */
82427 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
82429 }
82430#ifdef FREECIV_JSON_CONNECTION
82431 field_addr.name = "extra_type_id";
82432#endif /* FREECIV_JSON_CONNECTION */
82433 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
82434 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
82435 }
82436#ifdef FREECIV_JSON_CONNECTION
82437 field_addr.name = "removal";
82438#endif /* FREECIV_JSON_CONNECTION */
82439 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
82441 }
82442#ifdef FREECIV_JSON_CONNECTION
82443 field_addr.name = "eowner";
82444#endif /* FREECIV_JSON_CONNECTION */
82445 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->eowner)) {
82447 }
82448#ifdef FREECIV_JSON_CONNECTION
82449 field_addr.name = "size";
82450#endif /* FREECIV_JSON_CONNECTION */
82451 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
82453 }
82454#endif
82455 log_packet_detailed("packet_edit_tile_extra_100: got info about (%d)",
82456 real_packet->tile);
82457
82458#ifdef FREECIV_DELTA_PROTOCOL
82459 if (NULL == *hash) {
82461 NULL, NULL, NULL, free);
82462 }
82463
82464 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
82465 *real_packet = *old;
82466 } else {
82467 int tile;
82468
82469 tile = real_packet->tile;
82470
82471 log_packet_detailed(" no old info");
82472 memset(real_packet, 0, sizeof(*real_packet));
82473
82474 real_packet->tile = tile;
82475 }
82476
82477 if (BV_ISSET(fields, 0)) {
82478 log_packet_detailed(" got field 'extra_type_id'");
82479#ifdef FREECIV_JSON_CONNECTION
82480 field_addr.name = "extra_type_id";
82481#endif /* FREECIV_JSON_CONNECTION */
82482 if (!DIO_GET(sint8, &din, &field_addr, &real_packet->extra_type_id)) {
82483 RECEIVE_PACKET_FIELD_ERROR(extra_type_id);
82484 }
82485 }
82486 real_packet->removal = BV_ISSET(fields, 1);
82487 if (BV_ISSET(fields, 2)) {
82488 log_packet_detailed(" got field 'eowner'");
82489#ifdef FREECIV_JSON_CONNECTION
82490 field_addr.name = "eowner";
82491#endif /* FREECIV_JSON_CONNECTION */
82492 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->eowner)) {
82494 }
82495 }
82496 if (BV_ISSET(fields, 3)) {
82497 log_packet_detailed(" got field 'size'");
82498#ifdef FREECIV_JSON_CONNECTION
82499 field_addr.name = "size";
82500#endif /* FREECIV_JSON_CONNECTION */
82501 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
82503 }
82504 }
82505
82506 if (NULL == old) {
82507 old = fc_malloc(sizeof(*old));
82508 *old = *real_packet;
82509 genhash_insert(*hash, old, old);
82510 } else {
82511 *old = *real_packet;
82512 }
82513
82514#endif /* FREECIV_DELTA_PROTOCOL */
82516}
82517
82519{
82520 const struct packet_edit_tile_extra *real_packet = packet;
82521 int e;
82522#ifdef FREECIV_DELTA_PROTOCOL
82524 struct packet_edit_tile_extra *old;
82525 bool differ;
82526 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE_EXTRA;
82527#endif /* FREECIV_DELTA_PROTOCOL */
82529#ifdef FREECIV_JSON_CONNECTION
82530 struct plocation field_addr;
82531 {
82535 }
82536#endif /* FREECIV_JSON_CONNECTION */
82537
82538 log_packet_detailed("packet_edit_tile_extra_100: sending info about (%d)",
82539 real_packet->tile);
82540
82541#ifdef FREECIV_DELTA_PROTOCOL
82542 if (NULL == *hash) {
82544 NULL, NULL, NULL, free);
82545 }
82546 BV_CLR_ALL(fields);
82547
82548 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
82549 old = fc_malloc(sizeof(*old));
82550 *old = *real_packet;
82551 genhash_insert(*hash, old, old);
82552 memset(old, 0, sizeof(*old));
82553 }
82554 differ = (old->extra_type_id != real_packet->extra_type_id);
82555 if (differ) {
82556 BV_SET(fields, 0);
82557 }
82558
82559 if (packet->removal) {
82560 BV_SET(fields, 1);
82561 }
82562
82563 differ = (old->eowner != real_packet->eowner);
82564 if (differ) {
82565 BV_SET(fields, 2);
82566 }
82567
82568 differ = (old->size != real_packet->size);
82569 if (differ) {
82570 BV_SET(fields, 3);
82571 }
82572
82573
82574#ifdef FREECIV_JSON_CONNECTION
82575 field_addr.name = "fields";
82576#endif /* FREECIV_JSON_CONNECTION */
82577 e = 0;
82578 e |= DIO_BV_PUT(&dout, &field_addr, fields);
82579 if (e) {
82580 log_packet_detailed("fields bitvector error detected");
82581 }
82582#ifdef FREECIV_JSON_CONNECTION
82583 field_addr.name = "tile";
82584#endif /* FREECIV_JSON_CONNECTION */
82585 e = 0;
82586 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
82587 if (e) {
82588 log_packet_detailed("'tile' field error detected");
82589 }
82590
82591 if (BV_ISSET(fields, 0)) {
82592 log_packet_detailed(" field 'extra_type_id' has changed");
82593#ifdef FREECIV_JSON_CONNECTION
82594 field_addr.name = "extra_type_id";
82595#endif /* FREECIV_JSON_CONNECTION */
82596 e = 0;
82597 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
82598 if (e) {
82599 log_packet_detailed("'extra_type_id' field error detected");
82600 }
82601 }
82602 /* field 1 is folded into the header */
82603 if (BV_ISSET(fields, 2)) {
82604 log_packet_detailed(" field 'eowner' has changed");
82605#ifdef FREECIV_JSON_CONNECTION
82606 field_addr.name = "eowner";
82607#endif /* FREECIV_JSON_CONNECTION */
82608 e = 0;
82609 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->eowner);
82610 if (e) {
82611 log_packet_detailed("'eowner' field error detected");
82612 }
82613 }
82614 if (BV_ISSET(fields, 3)) {
82615 log_packet_detailed(" field 'size' has changed");
82616#ifdef FREECIV_JSON_CONNECTION
82617 field_addr.name = "size";
82618#endif /* FREECIV_JSON_CONNECTION */
82619 e = 0;
82620 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
82621 if (e) {
82622 log_packet_detailed("'size' field error detected");
82623 }
82624 }
82625
82626 *old = *real_packet;
82627#endif /* FREECIV_DELTA_PROTOCOL */
82628#ifndef FREECIV_DELTA_PROTOCOL
82629#ifdef FREECIV_JSON_CONNECTION
82630 field_addr.name = "tile";
82631#endif /* FREECIV_JSON_CONNECTION */
82632 e = 0;
82633 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
82634 if (e) {
82635 log_packet_detailed("'tile' field error detected");
82636 }
82637#ifdef FREECIV_JSON_CONNECTION
82638 field_addr.name = "extra_type_id";
82639#endif /* FREECIV_JSON_CONNECTION */
82640 e = 0;
82641 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->extra_type_id);
82642 if (e) {
82643 log_packet_detailed("'extra_type_id' field error detected");
82644 }
82645#ifdef FREECIV_JSON_CONNECTION
82646 field_addr.name = "removal";
82647#endif /* FREECIV_JSON_CONNECTION */
82648 e = 0;
82649 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
82650 if (e) {
82651 log_packet_detailed("'removal' field error detected");
82652 }
82653#ifdef FREECIV_JSON_CONNECTION
82654 field_addr.name = "eowner";
82655#endif /* FREECIV_JSON_CONNECTION */
82656 e = 0;
82657 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->eowner);
82658 if (e) {
82659 log_packet_detailed("'eowner' field error detected");
82660 }
82661#ifdef FREECIV_JSON_CONNECTION
82662 field_addr.name = "size";
82663#endif /* FREECIV_JSON_CONNECTION */
82664 e = 0;
82665 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
82666 if (e) {
82667 log_packet_detailed("'size' field error detected");
82668 }
82669
82670#endif
82672}
82673
82675{
82676 if (!pc->used) {
82677 log_error("WARNING: trying to send data to the closed connection %s",
82679 return -1;
82680 }
82681 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet != NULL, -1,
82682 "Handler for PACKET_EDIT_TILE_EXTRA not installed");
82683 return pc->phs.handlers->send[PACKET_EDIT_TILE_EXTRA].packet(pc, packet);
82684}
82685
82686int dsend_packet_edit_tile_extra(struct connection *pc, int tile, int extra_type_id, bool removal, int eowner, int size)
82687{
82688 struct packet_edit_tile_extra packet, *real_packet = &packet;
82689
82691 real_packet->extra_type_id = extra_type_id;
82692 real_packet->removal = removal;
82693 real_packet->eowner = eowner;
82694 real_packet->size = size;
82695
82697}
82698
82700{
82702#ifdef FREECIV_JSON_CONNECTION
82703 struct plocation field_addr;
82704 {
82708 }
82709#endif /* FREECIV_JSON_CONNECTION */
82710#if 1 /* To match endif */
82711#ifdef FREECIV_JSON_CONNECTION
82712 field_addr.name = "id";
82713#endif /* FREECIV_JSON_CONNECTION */
82714 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
82716 }
82717#ifdef FREECIV_JSON_CONNECTION
82718 field_addr.name = "removal";
82719#endif /* FREECIV_JSON_CONNECTION */
82720 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->removal)) {
82722 }
82723#ifdef FREECIV_JSON_CONNECTION
82724 field_addr.name = "tag";
82725#endif /* FREECIV_JSON_CONNECTION */
82726 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
82728 }
82729#endif
82730 log_packet_detailed("packet_edit_startpos_100: got info about ()");
82732}
82733
82734static int send_packet_edit_startpos_100(struct connection *pc, const struct packet_edit_startpos *packet)
82735{
82736 const struct packet_edit_startpos *real_packet = packet;
82737 int e;
82739#ifdef FREECIV_JSON_CONNECTION
82740 struct plocation field_addr;
82741 {
82745 }
82746#endif /* FREECIV_JSON_CONNECTION */
82747
82748 log_packet_detailed("packet_edit_startpos_100: sending info about ()");
82749#if 1 /* To match endif */
82750#ifdef FREECIV_JSON_CONNECTION
82751 field_addr.name = "id";
82752#endif /* FREECIV_JSON_CONNECTION */
82753 e = 0;
82754 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
82755 if (e) {
82756 log_packet_detailed("'id' field error detected");
82757 }
82758#ifdef FREECIV_JSON_CONNECTION
82759 field_addr.name = "removal";
82760#endif /* FREECIV_JSON_CONNECTION */
82761 e = 0;
82762 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->removal);
82763 if (e) {
82764 log_packet_detailed("'removal' field error detected");
82765 }
82766#ifdef FREECIV_JSON_CONNECTION
82767 field_addr.name = "tag";
82768#endif /* FREECIV_JSON_CONNECTION */
82769 e = 0;
82770 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
82771 if (e) {
82772 log_packet_detailed("'tag' field error detected");
82773 }
82774
82775#endif
82777}
82778
82780{
82781 if (!pc->used) {
82782 log_error("WARNING: trying to send data to the closed connection %s",
82784 return -1;
82785 }
82786 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet != NULL, -1,
82787 "Handler for PACKET_EDIT_STARTPOS not installed");
82788 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS].packet(pc, packet);
82789}
82790
82791int dsend_packet_edit_startpos(struct connection *pc, int id, bool removal, int tag)
82792{
82793 struct packet_edit_startpos packet, *real_packet = &packet;
82794
82795 real_packet->id = id;
82796 real_packet->removal = removal;
82797 real_packet->tag = tag;
82798
82800}
82801
82803{
82805#ifdef FREECIV_JSON_CONNECTION
82806 struct plocation field_addr;
82807 {
82811 }
82812#endif /* FREECIV_JSON_CONNECTION */
82813#if 1 /* To match endif */
82814#ifdef FREECIV_JSON_CONNECTION
82815 field_addr.name = "id";
82816#endif /* FREECIV_JSON_CONNECTION */
82817 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
82819 }
82820#ifdef FREECIV_JSON_CONNECTION
82821 field_addr.name = "exclude";
82822#endif /* FREECIV_JSON_CONNECTION */
82823 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->exclude)) {
82825 }
82826#ifdef FREECIV_JSON_CONNECTION
82827 field_addr.name = "nations";
82828#endif /* FREECIV_JSON_CONNECTION */
82829 if (!DIO_BV_GET(&din, &field_addr, real_packet->nations)) {
82831 }
82832#endif
82833 log_packet_detailed("packet_edit_startpos_full_100: got info about ()");
82835}
82836
82838{
82839 const struct packet_edit_startpos_full *real_packet = packet;
82840 int e;
82842#ifdef FREECIV_JSON_CONNECTION
82843 struct plocation field_addr;
82844 {
82848 }
82849#endif /* FREECIV_JSON_CONNECTION */
82850
82851 log_packet_detailed("packet_edit_startpos_full_100: sending info about ()");
82852#if 1 /* To match endif */
82853#ifdef FREECIV_JSON_CONNECTION
82854 field_addr.name = "id";
82855#endif /* FREECIV_JSON_CONNECTION */
82856 e = 0;
82857 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
82858 if (e) {
82859 log_packet_detailed("'id' field error detected");
82860 }
82861#ifdef FREECIV_JSON_CONNECTION
82862 field_addr.name = "exclude";
82863#endif /* FREECIV_JSON_CONNECTION */
82864 e = 0;
82865 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->exclude);
82866 if (e) {
82867 log_packet_detailed("'exclude' field error detected");
82868 }
82869#ifdef FREECIV_JSON_CONNECTION
82870 field_addr.name = "nations";
82871#endif /* FREECIV_JSON_CONNECTION */
82872 e = 0;
82873 e |= DIO_BV_PUT(&dout, &field_addr, packet->nations);
82874 if (e) {
82875 log_packet_detailed("'nations' field error detected");
82876 }
82877
82878#endif
82880}
82881
82883{
82884 if (!pc->used) {
82885 log_error("WARNING: trying to send data to the closed connection %s",
82887 return -1;
82888 }
82889 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet != NULL, -1,
82890 "Handler for PACKET_EDIT_STARTPOS_FULL not installed");
82891 return pc->phs.handlers->send[PACKET_EDIT_STARTPOS_FULL].packet(pc, packet);
82892}
82893
82894#ifdef FREECIV_DELTA_PROTOCOL
82896{
82897 const struct packet_edit_tile *key = (const struct packet_edit_tile *) vkey;
82898 genhash_val_t result = 0;
82899
82900 result += key->tile;
82901
82902 result &= 0xFFFFFFFF;
82903 return result;
82904}
82905
82906static bool cmp_packet_edit_tile_100(const void *vkey1, const void *vkey2)
82907{
82908 const struct packet_edit_tile *old = (const struct packet_edit_tile *) vkey1;
82909 const struct packet_edit_tile *real_packet = (const struct packet_edit_tile *) vkey2;
82910 bool differ;
82911
82912 differ = (old->tile != real_packet->tile);
82913
82914 return !differ;
82915}
82917#endif /* FREECIV_DELTA_PROTOCOL */
82918
82920{
82921#ifdef FREECIV_DELTA_PROTOCOL
82923 struct packet_edit_tile *old;
82924 struct genhash **hash = pc->phs.received + PACKET_EDIT_TILE;
82925#endif /* FREECIV_DELTA_PROTOCOL */
82927#ifdef FREECIV_JSON_CONNECTION
82928 struct plocation field_addr;
82929 {
82933 }
82934#endif /* FREECIV_JSON_CONNECTION */
82935
82936#ifdef FREECIV_DELTA_PROTOCOL
82937#ifdef FREECIV_JSON_CONNECTION
82938 field_addr.name = "fields";
82939#endif /* FREECIV_JSON_CONNECTION */
82940 DIO_BV_GET(&din, &field_addr, fields);
82941#ifdef FREECIV_JSON_CONNECTION
82942 field_addr.name = "tile";
82943#endif /* FREECIV_JSON_CONNECTION */
82944 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
82946 }
82947
82948#else /* FREECIV_DELTA_PROTOCOL */
82949#ifdef FREECIV_JSON_CONNECTION
82950 field_addr.name = "tile";
82951#endif /* FREECIV_JSON_CONNECTION */
82952 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
82954 }
82955#ifdef FREECIV_JSON_CONNECTION
82956 field_addr.name = "extras";
82957#endif /* FREECIV_JSON_CONNECTION */
82958 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
82960 }
82961#ifdef FREECIV_JSON_CONNECTION
82962 field_addr.name = "resource";
82963#endif /* FREECIV_JSON_CONNECTION */
82964 {
82965 int readin;
82966
82967 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
82969 }
82970 real_packet->resource = readin;
82971 }
82972#ifdef FREECIV_JSON_CONNECTION
82973 field_addr.name = "terrain";
82974#endif /* FREECIV_JSON_CONNECTION */
82975 {
82976 int readin;
82977
82978 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
82980 }
82981 real_packet->terrain = readin;
82982 }
82983#ifdef FREECIV_JSON_CONNECTION
82984 field_addr.name = "startpos_nation";
82985#endif /* FREECIV_JSON_CONNECTION */
82986 {
82987 int readin;
82988
82989 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
82990 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
82991 }
82992 real_packet->startpos_nation = readin;
82993 }
82994#ifdef FREECIV_JSON_CONNECTION
82995 field_addr.name = "eowner";
82996#endif /* FREECIV_JSON_CONNECTION */
82997 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->eowner)) {
82999 }
83000#ifdef FREECIV_JSON_CONNECTION
83001 field_addr.name = "label";
83002#endif /* FREECIV_JSON_CONNECTION */
83003 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
83005 }
83006#endif
83007 log_packet_detailed("packet_edit_tile_100: got info about (%d)",
83008 real_packet->tile);
83009
83010#ifdef FREECIV_DELTA_PROTOCOL
83011 if (NULL == *hash) {
83013 NULL, NULL, NULL, free);
83014 }
83015
83016 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83017 *real_packet = *old;
83018 } else {
83019 int tile;
83020
83021 tile = real_packet->tile;
83022
83023 log_packet_detailed(" no old info");
83024 memset(real_packet, 0, sizeof(*real_packet));
83025
83026 real_packet->tile = tile;
83027 }
83028
83029 if (BV_ISSET(fields, 0)) {
83030 log_packet_detailed(" got field 'extras'");
83031#ifdef FREECIV_JSON_CONNECTION
83032 field_addr.name = "extras";
83033#endif /* FREECIV_JSON_CONNECTION */
83034 if (!DIO_BV_GET(&din, &field_addr, real_packet->extras)) {
83036 }
83037 }
83038 if (BV_ISSET(fields, 1)) {
83039 log_packet_detailed(" got field 'resource'");
83040#ifdef FREECIV_JSON_CONNECTION
83041 field_addr.name = "resource";
83042#endif /* FREECIV_JSON_CONNECTION */
83043 {
83044 int readin;
83045
83046 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
83048 }
83049 real_packet->resource = readin;
83050 }
83051 }
83052 if (BV_ISSET(fields, 2)) {
83053 log_packet_detailed(" got field 'terrain'");
83054#ifdef FREECIV_JSON_CONNECTION
83055 field_addr.name = "terrain";
83056#endif /* FREECIV_JSON_CONNECTION */
83057 {
83058 int readin;
83059
83060 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
83062 }
83063 real_packet->terrain = readin;
83064 }
83065 }
83066 if (BV_ISSET(fields, 3)) {
83067 log_packet_detailed(" got field 'startpos_nation'");
83068#ifdef FREECIV_JSON_CONNECTION
83069 field_addr.name = "startpos_nation";
83070#endif /* FREECIV_JSON_CONNECTION */
83071 {
83072 int readin;
83073
83074 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
83075 RECEIVE_PACKET_FIELD_ERROR(startpos_nation);
83076 }
83077 real_packet->startpos_nation = readin;
83078 }
83079 }
83080 if (BV_ISSET(fields, 4)) {
83081 log_packet_detailed(" got field 'eowner'");
83082#ifdef FREECIV_JSON_CONNECTION
83083 field_addr.name = "eowner";
83084#endif /* FREECIV_JSON_CONNECTION */
83085 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->eowner)) {
83087 }
83088 }
83089 if (BV_ISSET(fields, 5)) {
83090 log_packet_detailed(" got field 'label'");
83091#ifdef FREECIV_JSON_CONNECTION
83092 field_addr.name = "label";
83093#endif /* FREECIV_JSON_CONNECTION */
83094 if (!DIO_GET(string, &din, &field_addr, real_packet->label, sizeof(real_packet->label))) {
83096 }
83097 }
83098
83099 if (NULL == old) {
83100 old = fc_malloc(sizeof(*old));
83101 *old = *real_packet;
83102 genhash_insert(*hash, old, old);
83103 } else {
83104 *old = *real_packet;
83105 }
83106
83107#endif /* FREECIV_DELTA_PROTOCOL */
83109}
83110
83111static int send_packet_edit_tile_100(struct connection *pc, const struct packet_edit_tile *packet)
83112{
83113 const struct packet_edit_tile *real_packet = packet;
83114 int e;
83115#ifdef FREECIV_DELTA_PROTOCOL
83117 struct packet_edit_tile *old;
83118 bool differ;
83119 struct genhash **hash = pc->phs.sent + PACKET_EDIT_TILE;
83120#endif /* FREECIV_DELTA_PROTOCOL */
83122#ifdef FREECIV_JSON_CONNECTION
83123 struct plocation field_addr;
83124 {
83128 }
83129#endif /* FREECIV_JSON_CONNECTION */
83130
83131 log_packet_detailed("packet_edit_tile_100: sending info about (%d)",
83132 real_packet->tile);
83133
83134#ifdef FREECIV_DELTA_PROTOCOL
83135 if (NULL == *hash) {
83137 NULL, NULL, NULL, free);
83138 }
83139 BV_CLR_ALL(fields);
83140
83141 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83142 old = fc_malloc(sizeof(*old));
83143 *old = *real_packet;
83144 genhash_insert(*hash, old, old);
83145 memset(old, 0, sizeof(*old));
83146 }
83147 differ = !BV_ARE_EQUAL(old->extras, real_packet->extras);
83148 if (differ) {
83149 BV_SET(fields, 0);
83150 }
83151
83152 differ = (old->resource != real_packet->resource);
83153 if (differ) {
83154 BV_SET(fields, 1);
83155 }
83156
83157 differ = (old->terrain != real_packet->terrain);
83158 if (differ) {
83159 BV_SET(fields, 2);
83160 }
83161
83162 differ = (old->startpos_nation != real_packet->startpos_nation);
83163 if (differ) {
83164 BV_SET(fields, 3);
83165 }
83166
83167 differ = (old->eowner != real_packet->eowner);
83168 if (differ) {
83169 BV_SET(fields, 4);
83170 }
83171
83172 differ = (strcmp(old->label, real_packet->label) != 0);
83173 if (differ) {
83174 BV_SET(fields, 5);
83175 }
83176
83177
83178#ifdef FREECIV_JSON_CONNECTION
83179 field_addr.name = "fields";
83180#endif /* FREECIV_JSON_CONNECTION */
83181 e = 0;
83182 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83183 if (e) {
83184 log_packet_detailed("fields bitvector error detected");
83185 }
83186#ifdef FREECIV_JSON_CONNECTION
83187 field_addr.name = "tile";
83188#endif /* FREECIV_JSON_CONNECTION */
83189 e = 0;
83190 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
83191 if (e) {
83192 log_packet_detailed("'tile' field error detected");
83193 }
83194
83195 if (BV_ISSET(fields, 0)) {
83196 log_packet_detailed(" field 'extras' has changed");
83197#ifdef FREECIV_JSON_CONNECTION
83198 field_addr.name = "extras";
83199#endif /* FREECIV_JSON_CONNECTION */
83200 e = 0;
83201 e |= DIO_BV_PUT(&dout, &field_addr, packet->extras);
83202 if (e) {
83203 log_packet_detailed("'extras' field error detected");
83204 }
83205 }
83206 if (BV_ISSET(fields, 1)) {
83207 log_packet_detailed(" field 'resource' has changed");
83208#ifdef FREECIV_JSON_CONNECTION
83209 field_addr.name = "resource";
83210#endif /* FREECIV_JSON_CONNECTION */
83211 e = 0;
83212 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
83213 if (e) {
83214 log_packet_detailed("'resource' field error detected");
83215 }
83216 }
83217 if (BV_ISSET(fields, 2)) {
83218 log_packet_detailed(" field 'terrain' has changed");
83219#ifdef FREECIV_JSON_CONNECTION
83220 field_addr.name = "terrain";
83221#endif /* FREECIV_JSON_CONNECTION */
83222 e = 0;
83223 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
83224 if (e) {
83225 log_packet_detailed("'terrain' field error detected");
83226 }
83227 }
83228 if (BV_ISSET(fields, 3)) {
83229 log_packet_detailed(" field 'startpos_nation' has changed");
83230#ifdef FREECIV_JSON_CONNECTION
83231 field_addr.name = "startpos_nation";
83232#endif /* FREECIV_JSON_CONNECTION */
83233 e = 0;
83234 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
83235 if (e) {
83236 log_packet_detailed("'startpos_nation' field error detected");
83237 }
83238 }
83239 if (BV_ISSET(fields, 4)) {
83240 log_packet_detailed(" field 'eowner' has changed");
83241#ifdef FREECIV_JSON_CONNECTION
83242 field_addr.name = "eowner";
83243#endif /* FREECIV_JSON_CONNECTION */
83244 e = 0;
83245 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->eowner);
83246 if (e) {
83247 log_packet_detailed("'eowner' field error detected");
83248 }
83249 }
83250 if (BV_ISSET(fields, 5)) {
83251 log_packet_detailed(" field 'label' has changed");
83252#ifdef FREECIV_JSON_CONNECTION
83253 field_addr.name = "label";
83254#endif /* FREECIV_JSON_CONNECTION */
83255 e = 0;
83256 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
83257 if (e) {
83258 log_packet_detailed("'label' field error detected");
83259 }
83260 }
83261
83262 *old = *real_packet;
83263#endif /* FREECIV_DELTA_PROTOCOL */
83264#ifndef FREECIV_DELTA_PROTOCOL
83265#ifdef FREECIV_JSON_CONNECTION
83266 field_addr.name = "tile";
83267#endif /* FREECIV_JSON_CONNECTION */
83268 e = 0;
83269 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
83270 if (e) {
83271 log_packet_detailed("'tile' field error detected");
83272 }
83273#ifdef FREECIV_JSON_CONNECTION
83274 field_addr.name = "extras";
83275#endif /* FREECIV_JSON_CONNECTION */
83276 e = 0;
83277 e |= DIO_BV_PUT(&dout, &field_addr, packet->extras);
83278 if (e) {
83279 log_packet_detailed("'extras' field error detected");
83280 }
83281#ifdef FREECIV_JSON_CONNECTION
83282 field_addr.name = "resource";
83283#endif /* FREECIV_JSON_CONNECTION */
83284 e = 0;
83285 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->resource);
83286 if (e) {
83287 log_packet_detailed("'resource' field error detected");
83288 }
83289#ifdef FREECIV_JSON_CONNECTION
83290 field_addr.name = "terrain";
83291#endif /* FREECIV_JSON_CONNECTION */
83292 e = 0;
83293 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->terrain);
83294 if (e) {
83295 log_packet_detailed("'terrain' field error detected");
83296 }
83297#ifdef FREECIV_JSON_CONNECTION
83298 field_addr.name = "startpos_nation";
83299#endif /* FREECIV_JSON_CONNECTION */
83300 e = 0;
83301 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->startpos_nation);
83302 if (e) {
83303 log_packet_detailed("'startpos_nation' field error detected");
83304 }
83305#ifdef FREECIV_JSON_CONNECTION
83306 field_addr.name = "eowner";
83307#endif /* FREECIV_JSON_CONNECTION */
83308 e = 0;
83309 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->eowner);
83310 if (e) {
83311 log_packet_detailed("'eowner' field error detected");
83312 }
83313#ifdef FREECIV_JSON_CONNECTION
83314 field_addr.name = "label";
83315#endif /* FREECIV_JSON_CONNECTION */
83316 e = 0;
83317 e |= DIO_PUT(string, &dout, &field_addr, real_packet->label);
83318 if (e) {
83319 log_packet_detailed("'label' field error detected");
83320 }
83321
83322#endif
83324}
83325
83326int send_packet_edit_tile(struct connection *pc, const struct packet_edit_tile *packet)
83327{
83328 if (!pc->used) {
83329 log_error("WARNING: trying to send data to the closed connection %s",
83331 return -1;
83332 }
83333 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_TILE].packet != NULL, -1,
83334 "Handler for PACKET_EDIT_TILE not installed");
83335 return pc->phs.handlers->send[PACKET_EDIT_TILE].packet(pc, packet);
83336}
83337
83338#ifdef FREECIV_DELTA_PROTOCOL
83339#define hash_packet_edit_unit_create_100 hash_const
83340
83341#define cmp_packet_edit_unit_create_100 cmp_const
83342
83344#endif /* FREECIV_DELTA_PROTOCOL */
83345
83347{
83348#ifdef FREECIV_DELTA_PROTOCOL
83350 struct packet_edit_unit_create *old;
83351 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_CREATE;
83352#endif /* FREECIV_DELTA_PROTOCOL */
83354#ifdef FREECIV_JSON_CONNECTION
83355 struct plocation field_addr;
83356 {
83360 }
83361#endif /* FREECIV_JSON_CONNECTION */
83362
83363#ifdef FREECIV_DELTA_PROTOCOL
83364#ifdef FREECIV_JSON_CONNECTION
83365 field_addr.name = "fields";
83366#endif /* FREECIV_JSON_CONNECTION */
83367 DIO_BV_GET(&din, &field_addr, fields);
83368
83369#else /* FREECIV_DELTA_PROTOCOL */
83370#ifdef FREECIV_JSON_CONNECTION
83371 field_addr.name = "owner";
83372#endif /* FREECIV_JSON_CONNECTION */
83373 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
83375 }
83376#ifdef FREECIV_JSON_CONNECTION
83377 field_addr.name = "tile";
83378#endif /* FREECIV_JSON_CONNECTION */
83379 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
83381 }
83382#ifdef FREECIV_JSON_CONNECTION
83383 field_addr.name = "type";
83384#endif /* FREECIV_JSON_CONNECTION */
83385 {
83386 int readin;
83387
83388 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
83390 }
83391 real_packet->type = readin;
83392 }
83393#ifdef FREECIV_JSON_CONNECTION
83394 field_addr.name = "count";
83395#endif /* FREECIV_JSON_CONNECTION */
83396 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
83398 }
83399#ifdef FREECIV_JSON_CONNECTION
83400 field_addr.name = "tag";
83401#endif /* FREECIV_JSON_CONNECTION */
83402 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
83404 }
83405#endif
83406 log_packet_detailed("packet_edit_unit_create_100: got info about ()");
83407
83408#ifdef FREECIV_DELTA_PROTOCOL
83409 if (NULL == *hash) {
83411 NULL, NULL, NULL, free);
83412 }
83413
83414 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83415 *real_packet = *old;
83416 } else {
83417 log_packet_detailed(" no old info");
83418 memset(real_packet, 0, sizeof(*real_packet));
83419 }
83420
83421 if (BV_ISSET(fields, 0)) {
83422 log_packet_detailed(" got field 'owner'");
83423#ifdef FREECIV_JSON_CONNECTION
83424 field_addr.name = "owner";
83425#endif /* FREECIV_JSON_CONNECTION */
83426 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
83428 }
83429 }
83430 if (BV_ISSET(fields, 1)) {
83431 log_packet_detailed(" got field 'tile'");
83432#ifdef FREECIV_JSON_CONNECTION
83433 field_addr.name = "tile";
83434#endif /* FREECIV_JSON_CONNECTION */
83435 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
83437 }
83438 }
83439 if (BV_ISSET(fields, 2)) {
83440 log_packet_detailed(" got field 'type'");
83441#ifdef FREECIV_JSON_CONNECTION
83442 field_addr.name = "type";
83443#endif /* FREECIV_JSON_CONNECTION */
83444 {
83445 int readin;
83446
83447 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
83449 }
83450 real_packet->type = readin;
83451 }
83452 }
83453 if (BV_ISSET(fields, 3)) {
83454 log_packet_detailed(" got field 'count'");
83455#ifdef FREECIV_JSON_CONNECTION
83456 field_addr.name = "count";
83457#endif /* FREECIV_JSON_CONNECTION */
83458 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
83460 }
83461 }
83462 if (BV_ISSET(fields, 4)) {
83463 log_packet_detailed(" got field 'tag'");
83464#ifdef FREECIV_JSON_CONNECTION
83465 field_addr.name = "tag";
83466#endif /* FREECIV_JSON_CONNECTION */
83467 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
83469 }
83470 }
83471
83472 if (NULL == old) {
83473 old = fc_malloc(sizeof(*old));
83474 *old = *real_packet;
83475 genhash_insert(*hash, old, old);
83476 } else {
83477 *old = *real_packet;
83478 }
83479
83480#endif /* FREECIV_DELTA_PROTOCOL */
83482}
83483
83485{
83486 const struct packet_edit_unit_create *real_packet = packet;
83487 int e;
83488#ifdef FREECIV_DELTA_PROTOCOL
83490 struct packet_edit_unit_create *old;
83491 bool differ;
83492 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_CREATE;
83493#endif /* FREECIV_DELTA_PROTOCOL */
83495#ifdef FREECIV_JSON_CONNECTION
83496 struct plocation field_addr;
83497 {
83501 }
83502#endif /* FREECIV_JSON_CONNECTION */
83503
83504 log_packet_detailed("packet_edit_unit_create_100: sending info about ()");
83505
83506#ifdef FREECIV_DELTA_PROTOCOL
83507 if (NULL == *hash) {
83509 NULL, NULL, NULL, free);
83510 }
83511 BV_CLR_ALL(fields);
83512
83513 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83514 old = fc_malloc(sizeof(*old));
83515 *old = *real_packet;
83516 genhash_insert(*hash, old, old);
83517 memset(old, 0, sizeof(*old));
83518 }
83519 differ = (old->owner != real_packet->owner);
83520 if (differ) {
83521 BV_SET(fields, 0);
83522 }
83523
83524 differ = (old->tile != real_packet->tile);
83525 if (differ) {
83526 BV_SET(fields, 1);
83527 }
83528
83529 differ = (old->type != real_packet->type);
83530 if (differ) {
83531 BV_SET(fields, 2);
83532 }
83533
83534 differ = (old->count != real_packet->count);
83535 if (differ) {
83536 BV_SET(fields, 3);
83537 }
83538
83539 differ = (old->tag != real_packet->tag);
83540 if (differ) {
83541 BV_SET(fields, 4);
83542 }
83543
83544
83545#ifdef FREECIV_JSON_CONNECTION
83546 field_addr.name = "fields";
83547#endif /* FREECIV_JSON_CONNECTION */
83548 e = 0;
83549 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83550 if (e) {
83551 log_packet_detailed("fields bitvector error detected");
83552 }
83553
83554 if (BV_ISSET(fields, 0)) {
83555 log_packet_detailed(" field 'owner' has changed");
83556#ifdef FREECIV_JSON_CONNECTION
83557 field_addr.name = "owner";
83558#endif /* FREECIV_JSON_CONNECTION */
83559 e = 0;
83560 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
83561 if (e) {
83562 log_packet_detailed("'owner' field error detected");
83563 }
83564 }
83565 if (BV_ISSET(fields, 1)) {
83566 log_packet_detailed(" field 'tile' has changed");
83567#ifdef FREECIV_JSON_CONNECTION
83568 field_addr.name = "tile";
83569#endif /* FREECIV_JSON_CONNECTION */
83570 e = 0;
83571 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
83572 if (e) {
83573 log_packet_detailed("'tile' field error detected");
83574 }
83575 }
83576 if (BV_ISSET(fields, 2)) {
83577 log_packet_detailed(" field 'type' has changed");
83578#ifdef FREECIV_JSON_CONNECTION
83579 field_addr.name = "type";
83580#endif /* FREECIV_JSON_CONNECTION */
83581 e = 0;
83582 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
83583 if (e) {
83584 log_packet_detailed("'type' field error detected");
83585 }
83586 }
83587 if (BV_ISSET(fields, 3)) {
83588 log_packet_detailed(" field 'count' has changed");
83589#ifdef FREECIV_JSON_CONNECTION
83590 field_addr.name = "count";
83591#endif /* FREECIV_JSON_CONNECTION */
83592 e = 0;
83593 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
83594 if (e) {
83595 log_packet_detailed("'count' field error detected");
83596 }
83597 }
83598 if (BV_ISSET(fields, 4)) {
83599 log_packet_detailed(" field 'tag' has changed");
83600#ifdef FREECIV_JSON_CONNECTION
83601 field_addr.name = "tag";
83602#endif /* FREECIV_JSON_CONNECTION */
83603 e = 0;
83604 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
83605 if (e) {
83606 log_packet_detailed("'tag' field error detected");
83607 }
83608 }
83609
83610 *old = *real_packet;
83611#endif /* FREECIV_DELTA_PROTOCOL */
83612#ifndef FREECIV_DELTA_PROTOCOL
83613#ifdef FREECIV_JSON_CONNECTION
83614 field_addr.name = "owner";
83615#endif /* FREECIV_JSON_CONNECTION */
83616 e = 0;
83617 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
83618 if (e) {
83619 log_packet_detailed("'owner' field error detected");
83620 }
83621#ifdef FREECIV_JSON_CONNECTION
83622 field_addr.name = "tile";
83623#endif /* FREECIV_JSON_CONNECTION */
83624 e = 0;
83625 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
83626 if (e) {
83627 log_packet_detailed("'tile' field error detected");
83628 }
83629#ifdef FREECIV_JSON_CONNECTION
83630 field_addr.name = "type";
83631#endif /* FREECIV_JSON_CONNECTION */
83632 e = 0;
83633 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
83634 if (e) {
83635 log_packet_detailed("'type' field error detected");
83636 }
83637#ifdef FREECIV_JSON_CONNECTION
83638 field_addr.name = "count";
83639#endif /* FREECIV_JSON_CONNECTION */
83640 e = 0;
83641 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
83642 if (e) {
83643 log_packet_detailed("'count' field error detected");
83644 }
83645#ifdef FREECIV_JSON_CONNECTION
83646 field_addr.name = "tag";
83647#endif /* FREECIV_JSON_CONNECTION */
83648 e = 0;
83649 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
83650 if (e) {
83651 log_packet_detailed("'tag' field error detected");
83652 }
83653
83654#endif
83656}
83657
83659{
83660 if (!pc->used) {
83661 log_error("WARNING: trying to send data to the closed connection %s",
83663 return -1;
83664 }
83665 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet != NULL, -1,
83666 "Handler for PACKET_EDIT_UNIT_CREATE not installed");
83667 return pc->phs.handlers->send[PACKET_EDIT_UNIT_CREATE].packet(pc, packet);
83668}
83669
83670int dsend_packet_edit_unit_create(struct connection *pc, int owner, int tile, Unit_type_id type, int count, int tag)
83671{
83672 struct packet_edit_unit_create packet, *real_packet = &packet;
83673
83676 real_packet->type = type;
83677 real_packet->count = count;
83678 real_packet->tag = tag;
83679
83681}
83682
83683#ifdef FREECIV_DELTA_PROTOCOL
83684#define hash_packet_edit_unit_remove_100 hash_const
83685
83686#define cmp_packet_edit_unit_remove_100 cmp_const
83687
83689#endif /* FREECIV_DELTA_PROTOCOL */
83690
83692{
83693#ifdef FREECIV_DELTA_PROTOCOL
83695 struct packet_edit_unit_remove *old;
83696 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE;
83697#endif /* FREECIV_DELTA_PROTOCOL */
83699#ifdef FREECIV_JSON_CONNECTION
83700 struct plocation field_addr;
83701 {
83705 }
83706#endif /* FREECIV_JSON_CONNECTION */
83707
83708#ifdef FREECIV_DELTA_PROTOCOL
83709#ifdef FREECIV_JSON_CONNECTION
83710 field_addr.name = "fields";
83711#endif /* FREECIV_JSON_CONNECTION */
83712 DIO_BV_GET(&din, &field_addr, fields);
83713
83714#else /* FREECIV_DELTA_PROTOCOL */
83715#ifdef FREECIV_JSON_CONNECTION
83716 field_addr.name = "owner";
83717#endif /* FREECIV_JSON_CONNECTION */
83718 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
83720 }
83721#ifdef FREECIV_JSON_CONNECTION
83722 field_addr.name = "tile";
83723#endif /* FREECIV_JSON_CONNECTION */
83724 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
83726 }
83727#ifdef FREECIV_JSON_CONNECTION
83728 field_addr.name = "type";
83729#endif /* FREECIV_JSON_CONNECTION */
83730 {
83731 int readin;
83732
83733 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
83735 }
83736 real_packet->type = readin;
83737 }
83738#ifdef FREECIV_JSON_CONNECTION
83739 field_addr.name = "count";
83740#endif /* FREECIV_JSON_CONNECTION */
83741 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
83743 }
83744#endif
83745 log_packet_detailed("packet_edit_unit_remove_100: got info about ()");
83746
83747#ifdef FREECIV_DELTA_PROTOCOL
83748 if (NULL == *hash) {
83750 NULL, NULL, NULL, free);
83751 }
83752
83753 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
83754 *real_packet = *old;
83755 } else {
83756 log_packet_detailed(" no old info");
83757 memset(real_packet, 0, sizeof(*real_packet));
83758 }
83759
83760 if (BV_ISSET(fields, 0)) {
83761 log_packet_detailed(" got field 'owner'");
83762#ifdef FREECIV_JSON_CONNECTION
83763 field_addr.name = "owner";
83764#endif /* FREECIV_JSON_CONNECTION */
83765 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
83767 }
83768 }
83769 if (BV_ISSET(fields, 1)) {
83770 log_packet_detailed(" got field 'tile'");
83771#ifdef FREECIV_JSON_CONNECTION
83772 field_addr.name = "tile";
83773#endif /* FREECIV_JSON_CONNECTION */
83774 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
83776 }
83777 }
83778 if (BV_ISSET(fields, 2)) {
83779 log_packet_detailed(" got field 'type'");
83780#ifdef FREECIV_JSON_CONNECTION
83781 field_addr.name = "type";
83782#endif /* FREECIV_JSON_CONNECTION */
83783 {
83784 int readin;
83785
83786 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
83788 }
83789 real_packet->type = readin;
83790 }
83791 }
83792 if (BV_ISSET(fields, 3)) {
83793 log_packet_detailed(" got field 'count'");
83794#ifdef FREECIV_JSON_CONNECTION
83795 field_addr.name = "count";
83796#endif /* FREECIV_JSON_CONNECTION */
83797 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->count)) {
83799 }
83800 }
83801
83802 if (NULL == old) {
83803 old = fc_malloc(sizeof(*old));
83804 *old = *real_packet;
83805 genhash_insert(*hash, old, old);
83806 } else {
83807 *old = *real_packet;
83808 }
83809
83810#endif /* FREECIV_DELTA_PROTOCOL */
83812}
83813
83815{
83816 const struct packet_edit_unit_remove *real_packet = packet;
83817 int e;
83818#ifdef FREECIV_DELTA_PROTOCOL
83820 struct packet_edit_unit_remove *old;
83821 bool differ;
83822 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE;
83823#endif /* FREECIV_DELTA_PROTOCOL */
83825#ifdef FREECIV_JSON_CONNECTION
83826 struct plocation field_addr;
83827 {
83831 }
83832#endif /* FREECIV_JSON_CONNECTION */
83833
83834 log_packet_detailed("packet_edit_unit_remove_100: sending info about ()");
83835
83836#ifdef FREECIV_DELTA_PROTOCOL
83837 if (NULL == *hash) {
83839 NULL, NULL, NULL, free);
83840 }
83841 BV_CLR_ALL(fields);
83842
83843 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
83844 old = fc_malloc(sizeof(*old));
83845 *old = *real_packet;
83846 genhash_insert(*hash, old, old);
83847 memset(old, 0, sizeof(*old));
83848 }
83849 differ = (old->owner != real_packet->owner);
83850 if (differ) {
83851 BV_SET(fields, 0);
83852 }
83853
83854 differ = (old->tile != real_packet->tile);
83855 if (differ) {
83856 BV_SET(fields, 1);
83857 }
83858
83859 differ = (old->type != real_packet->type);
83860 if (differ) {
83861 BV_SET(fields, 2);
83862 }
83863
83864 differ = (old->count != real_packet->count);
83865 if (differ) {
83866 BV_SET(fields, 3);
83867 }
83868
83869
83870#ifdef FREECIV_JSON_CONNECTION
83871 field_addr.name = "fields";
83872#endif /* FREECIV_JSON_CONNECTION */
83873 e = 0;
83874 e |= DIO_BV_PUT(&dout, &field_addr, fields);
83875 if (e) {
83876 log_packet_detailed("fields bitvector error detected");
83877 }
83878
83879 if (BV_ISSET(fields, 0)) {
83880 log_packet_detailed(" field 'owner' has changed");
83881#ifdef FREECIV_JSON_CONNECTION
83882 field_addr.name = "owner";
83883#endif /* FREECIV_JSON_CONNECTION */
83884 e = 0;
83885 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
83886 if (e) {
83887 log_packet_detailed("'owner' field error detected");
83888 }
83889 }
83890 if (BV_ISSET(fields, 1)) {
83891 log_packet_detailed(" field 'tile' has changed");
83892#ifdef FREECIV_JSON_CONNECTION
83893 field_addr.name = "tile";
83894#endif /* FREECIV_JSON_CONNECTION */
83895 e = 0;
83896 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
83897 if (e) {
83898 log_packet_detailed("'tile' field error detected");
83899 }
83900 }
83901 if (BV_ISSET(fields, 2)) {
83902 log_packet_detailed(" field 'type' has changed");
83903#ifdef FREECIV_JSON_CONNECTION
83904 field_addr.name = "type";
83905#endif /* FREECIV_JSON_CONNECTION */
83906 e = 0;
83907 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
83908 if (e) {
83909 log_packet_detailed("'type' field error detected");
83910 }
83911 }
83912 if (BV_ISSET(fields, 3)) {
83913 log_packet_detailed(" field 'count' has changed");
83914#ifdef FREECIV_JSON_CONNECTION
83915 field_addr.name = "count";
83916#endif /* FREECIV_JSON_CONNECTION */
83917 e = 0;
83918 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
83919 if (e) {
83920 log_packet_detailed("'count' field error detected");
83921 }
83922 }
83923
83924 *old = *real_packet;
83925#endif /* FREECIV_DELTA_PROTOCOL */
83926#ifndef FREECIV_DELTA_PROTOCOL
83927#ifdef FREECIV_JSON_CONNECTION
83928 field_addr.name = "owner";
83929#endif /* FREECIV_JSON_CONNECTION */
83930 e = 0;
83931 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
83932 if (e) {
83933 log_packet_detailed("'owner' field error detected");
83934 }
83935#ifdef FREECIV_JSON_CONNECTION
83936 field_addr.name = "tile";
83937#endif /* FREECIV_JSON_CONNECTION */
83938 e = 0;
83939 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
83940 if (e) {
83941 log_packet_detailed("'tile' field error detected");
83942 }
83943#ifdef FREECIV_JSON_CONNECTION
83944 field_addr.name = "type";
83945#endif /* FREECIV_JSON_CONNECTION */
83946 e = 0;
83947 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->type);
83948 if (e) {
83949 log_packet_detailed("'type' field error detected");
83950 }
83951#ifdef FREECIV_JSON_CONNECTION
83952 field_addr.name = "count";
83953#endif /* FREECIV_JSON_CONNECTION */
83954 e = 0;
83955 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->count);
83956 if (e) {
83957 log_packet_detailed("'count' field error detected");
83958 }
83959
83960#endif
83962}
83963
83965{
83966 if (!pc->used) {
83967 log_error("WARNING: trying to send data to the closed connection %s",
83969 return -1;
83970 }
83971 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet != NULL, -1,
83972 "Handler for PACKET_EDIT_UNIT_REMOVE not installed");
83973 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE].packet(pc, packet);
83974}
83975
83977{
83978 struct packet_edit_unit_remove packet, *real_packet = &packet;
83979
83982 real_packet->type = type;
83983 real_packet->count = count;
83984
83986}
83987
83988#ifdef FREECIV_DELTA_PROTOCOL
83989#define hash_packet_edit_unit_remove_by_id_100 hash_const
83990
83991#define cmp_packet_edit_unit_remove_by_id_100 cmp_const
83992
83994#endif /* FREECIV_DELTA_PROTOCOL */
83995
83997{
83998#ifdef FREECIV_DELTA_PROTOCOL
84001 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT_REMOVE_BY_ID;
84002#endif /* FREECIV_DELTA_PROTOCOL */
84004#ifdef FREECIV_JSON_CONNECTION
84005 struct plocation field_addr;
84006 {
84010 }
84011#endif /* FREECIV_JSON_CONNECTION */
84012
84013#ifdef FREECIV_DELTA_PROTOCOL
84014#ifdef FREECIV_JSON_CONNECTION
84015 field_addr.name = "fields";
84016#endif /* FREECIV_JSON_CONNECTION */
84017 DIO_BV_GET(&din, &field_addr, fields);
84018
84019#else /* FREECIV_DELTA_PROTOCOL */
84020#ifdef FREECIV_JSON_CONNECTION
84021 field_addr.name = "id";
84022#endif /* FREECIV_JSON_CONNECTION */
84023 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
84025 }
84026#endif
84027 log_packet_detailed("packet_edit_unit_remove_by_id_100: got info about ()");
84028
84029#ifdef FREECIV_DELTA_PROTOCOL
84030 if (NULL == *hash) {
84032 NULL, NULL, NULL, free);
84033 }
84034
84035 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84036 *real_packet = *old;
84037 } else {
84038 log_packet_detailed(" no old info");
84039 memset(real_packet, 0, sizeof(*real_packet));
84040 }
84041
84042 if (BV_ISSET(fields, 0)) {
84043 log_packet_detailed(" got field 'id'");
84044#ifdef FREECIV_JSON_CONNECTION
84045 field_addr.name = "id";
84046#endif /* FREECIV_JSON_CONNECTION */
84047 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
84049 }
84050 }
84051
84052 if (NULL == old) {
84053 old = fc_malloc(sizeof(*old));
84054 *old = *real_packet;
84055 genhash_insert(*hash, old, old);
84056 } else {
84057 *old = *real_packet;
84058 }
84059
84060#endif /* FREECIV_DELTA_PROTOCOL */
84062}
84063
84065{
84066 const struct packet_edit_unit_remove_by_id *real_packet = packet;
84067 int e;
84068#ifdef FREECIV_DELTA_PROTOCOL
84071 bool differ;
84072 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT_REMOVE_BY_ID;
84073#endif /* FREECIV_DELTA_PROTOCOL */
84075#ifdef FREECIV_JSON_CONNECTION
84076 struct plocation field_addr;
84077 {
84081 }
84082#endif /* FREECIV_JSON_CONNECTION */
84083
84084 log_packet_detailed("packet_edit_unit_remove_by_id_100: sending info about ()");
84085
84086#ifdef FREECIV_DELTA_PROTOCOL
84087 if (NULL == *hash) {
84089 NULL, NULL, NULL, free);
84090 }
84091 BV_CLR_ALL(fields);
84092
84093 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84094 old = fc_malloc(sizeof(*old));
84095 *old = *real_packet;
84096 genhash_insert(*hash, old, old);
84097 memset(old, 0, sizeof(*old));
84098 }
84099 differ = (old->id != real_packet->id);
84100 if (differ) {
84101 BV_SET(fields, 0);
84102 }
84103
84104
84105#ifdef FREECIV_JSON_CONNECTION
84106 field_addr.name = "fields";
84107#endif /* FREECIV_JSON_CONNECTION */
84108 e = 0;
84109 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84110 if (e) {
84111 log_packet_detailed("fields bitvector error detected");
84112 }
84113
84114 if (BV_ISSET(fields, 0)) {
84115 log_packet_detailed(" field 'id' has changed");
84116#ifdef FREECIV_JSON_CONNECTION
84117 field_addr.name = "id";
84118#endif /* FREECIV_JSON_CONNECTION */
84119 e = 0;
84120 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
84121 if (e) {
84122 log_packet_detailed("'id' field error detected");
84123 }
84124 }
84125
84126 *old = *real_packet;
84127#endif /* FREECIV_DELTA_PROTOCOL */
84128#ifndef FREECIV_DELTA_PROTOCOL
84129#ifdef FREECIV_JSON_CONNECTION
84130 field_addr.name = "id";
84131#endif /* FREECIV_JSON_CONNECTION */
84132 e = 0;
84133 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
84134 if (e) {
84135 log_packet_detailed("'id' field error detected");
84136 }
84137
84138#endif
84140}
84141
84143{
84144 if (!pc->used) {
84145 log_error("WARNING: trying to send data to the closed connection %s",
84147 return -1;
84148 }
84149 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet != NULL, -1,
84150 "Handler for PACKET_EDIT_UNIT_REMOVE_BY_ID not installed");
84151 return pc->phs.handlers->send[PACKET_EDIT_UNIT_REMOVE_BY_ID].packet(pc, packet);
84152}
84153
84155{
84156 struct packet_edit_unit_remove_by_id packet, *real_packet = &packet;
84157
84158 real_packet->id = id;
84159
84161}
84162
84163#ifdef FREECIV_DELTA_PROTOCOL
84165{
84166 const struct packet_edit_unit *key = (const struct packet_edit_unit *) vkey;
84167 genhash_val_t result = 0;
84168
84169 result += key->id;
84170
84171 result &= 0xFFFFFFFF;
84172 return result;
84173}
84174
84175static bool cmp_packet_edit_unit_100(const void *vkey1, const void *vkey2)
84176{
84177 const struct packet_edit_unit *old = (const struct packet_edit_unit *) vkey1;
84178 const struct packet_edit_unit *real_packet = (const struct packet_edit_unit *) vkey2;
84179 bool differ;
84180
84181 differ = (old->id != real_packet->id);
84182
84183 return !differ;
84184}
84186#endif /* FREECIV_DELTA_PROTOCOL */
84187
84189{
84190#ifdef FREECIV_DELTA_PROTOCOL
84192 struct packet_edit_unit *old;
84193 struct genhash **hash = pc->phs.received + PACKET_EDIT_UNIT;
84194#endif /* FREECIV_DELTA_PROTOCOL */
84196#ifdef FREECIV_JSON_CONNECTION
84197 struct plocation field_addr;
84198 {
84202 }
84203#endif /* FREECIV_JSON_CONNECTION */
84204
84205#ifdef FREECIV_DELTA_PROTOCOL
84206#ifdef FREECIV_JSON_CONNECTION
84207 field_addr.name = "fields";
84208#endif /* FREECIV_JSON_CONNECTION */
84209 DIO_BV_GET(&din, &field_addr, fields);
84210#ifdef FREECIV_JSON_CONNECTION
84211 field_addr.name = "id";
84212#endif /* FREECIV_JSON_CONNECTION */
84213 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
84215 }
84216
84217#else /* FREECIV_DELTA_PROTOCOL */
84218#ifdef FREECIV_JSON_CONNECTION
84219 field_addr.name = "id";
84220#endif /* FREECIV_JSON_CONNECTION */
84221 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
84223 }
84224#ifdef FREECIV_JSON_CONNECTION
84225 field_addr.name = "utype";
84226#endif /* FREECIV_JSON_CONNECTION */
84227 {
84228 int readin;
84229
84230 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
84232 }
84233 real_packet->utype = readin;
84234 }
84235#ifdef FREECIV_JSON_CONNECTION
84236 field_addr.name = "owner";
84237#endif /* FREECIV_JSON_CONNECTION */
84238 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
84240 }
84241#ifdef FREECIV_JSON_CONNECTION
84242 field_addr.name = "homecity";
84243#endif /* FREECIV_JSON_CONNECTION */
84244 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
84246 }
84247#ifdef FREECIV_JSON_CONNECTION
84248 field_addr.name = "moves_left";
84249#endif /* FREECIV_JSON_CONNECTION */
84250 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
84251 RECEIVE_PACKET_FIELD_ERROR(moves_left);
84252 }
84253#ifdef FREECIV_JSON_CONNECTION
84254 field_addr.name = "hp";
84255#endif /* FREECIV_JSON_CONNECTION */
84256 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
84258 }
84259#ifdef FREECIV_JSON_CONNECTION
84260 field_addr.name = "veteran";
84261#endif /* FREECIV_JSON_CONNECTION */
84262 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
84264 }
84265#ifdef FREECIV_JSON_CONNECTION
84266 field_addr.name = "fuel";
84267#endif /* FREECIV_JSON_CONNECTION */
84268 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
84270 }
84271#ifdef FREECIV_JSON_CONNECTION
84272 field_addr.name = "activity";
84273#endif /* FREECIV_JSON_CONNECTION */
84274 {
84275 int readin;
84276
84277 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
84279 }
84280 real_packet->activity = readin;
84281 }
84282#ifdef FREECIV_JSON_CONNECTION
84283 field_addr.name = "activity_count";
84284#endif /* FREECIV_JSON_CONNECTION */
84285 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
84286 RECEIVE_PACKET_FIELD_ERROR(activity_count);
84287 }
84288#ifdef FREECIV_JSON_CONNECTION
84289 field_addr.name = "activity_base";
84290#endif /* FREECIV_JSON_CONNECTION */
84291 {
84292 int readin;
84293
84294 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
84295 RECEIVE_PACKET_FIELD_ERROR(activity_base);
84296 }
84297 real_packet->activity_base = readin;
84298 }
84299#ifdef FREECIV_JSON_CONNECTION
84300 field_addr.name = "debug";
84301#endif /* FREECIV_JSON_CONNECTION */
84302 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
84304 }
84305#ifdef FREECIV_JSON_CONNECTION
84306 field_addr.name = "moved";
84307#endif /* FREECIV_JSON_CONNECTION */
84308 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->moved)) {
84310 }
84311#ifdef FREECIV_JSON_CONNECTION
84312 field_addr.name = "paradropped";
84313#endif /* FREECIV_JSON_CONNECTION */
84314 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->paradropped)) {
84315 RECEIVE_PACKET_FIELD_ERROR(paradropped);
84316 }
84317#ifdef FREECIV_JSON_CONNECTION
84318 field_addr.name = "done_moving";
84319#endif /* FREECIV_JSON_CONNECTION */
84320 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->done_moving)) {
84321 RECEIVE_PACKET_FIELD_ERROR(done_moving);
84322 }
84323#ifdef FREECIV_JSON_CONNECTION
84324 field_addr.name = "transported_by";
84325#endif /* FREECIV_JSON_CONNECTION */
84326 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
84327 RECEIVE_PACKET_FIELD_ERROR(transported_by);
84328 }
84329#ifdef FREECIV_JSON_CONNECTION
84330 field_addr.name = "stay";
84331#endif /* FREECIV_JSON_CONNECTION */
84332 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->stay)) {
84334 }
84335#endif
84336 log_packet_detailed("packet_edit_unit_100: got info about (%d)",
84337 real_packet->id);
84338
84339#ifdef FREECIV_DELTA_PROTOCOL
84340 if (NULL == *hash) {
84342 NULL, NULL, NULL, free);
84343 }
84344
84345 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84346 *real_packet = *old;
84347 } else {
84348 int id;
84349
84350 id = real_packet->id;
84351
84352 log_packet_detailed(" no old info");
84353 memset(real_packet, 0, sizeof(*real_packet));
84354
84355 real_packet->id = id;
84356 }
84357
84358 if (BV_ISSET(fields, 0)) {
84359 log_packet_detailed(" got field 'utype'");
84360#ifdef FREECIV_JSON_CONNECTION
84361 field_addr.name = "utype";
84362#endif /* FREECIV_JSON_CONNECTION */
84363 {
84364 int readin;
84365
84366 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
84368 }
84369 real_packet->utype = readin;
84370 }
84371 }
84372 if (BV_ISSET(fields, 1)) {
84373 log_packet_detailed(" got field 'owner'");
84374#ifdef FREECIV_JSON_CONNECTION
84375 field_addr.name = "owner";
84376#endif /* FREECIV_JSON_CONNECTION */
84377 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
84379 }
84380 }
84381 if (BV_ISSET(fields, 2)) {
84382 log_packet_detailed(" got field 'homecity'");
84383#ifdef FREECIV_JSON_CONNECTION
84384 field_addr.name = "homecity";
84385#endif /* FREECIV_JSON_CONNECTION */
84386 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->homecity)) {
84388 }
84389 }
84390 if (BV_ISSET(fields, 3)) {
84391 log_packet_detailed(" got field 'moves_left'");
84392#ifdef FREECIV_JSON_CONNECTION
84393 field_addr.name = "moves_left";
84394#endif /* FREECIV_JSON_CONNECTION */
84395 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->moves_left)) {
84396 RECEIVE_PACKET_FIELD_ERROR(moves_left);
84397 }
84398 }
84399 if (BV_ISSET(fields, 4)) {
84400 log_packet_detailed(" got field 'hp'");
84401#ifdef FREECIV_JSON_CONNECTION
84402 field_addr.name = "hp";
84403#endif /* FREECIV_JSON_CONNECTION */
84404 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->hp)) {
84406 }
84407 }
84408 if (BV_ISSET(fields, 5)) {
84409 log_packet_detailed(" got field 'veteran'");
84410#ifdef FREECIV_JSON_CONNECTION
84411 field_addr.name = "veteran";
84412#endif /* FREECIV_JSON_CONNECTION */
84413 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->veteran)) {
84415 }
84416 }
84417 if (BV_ISSET(fields, 6)) {
84418 log_packet_detailed(" got field 'fuel'");
84419#ifdef FREECIV_JSON_CONNECTION
84420 field_addr.name = "fuel";
84421#endif /* FREECIV_JSON_CONNECTION */
84422 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->fuel)) {
84424 }
84425 }
84426 if (BV_ISSET(fields, 7)) {
84427 log_packet_detailed(" got field 'activity'");
84428#ifdef FREECIV_JSON_CONNECTION
84429 field_addr.name = "activity";
84430#endif /* FREECIV_JSON_CONNECTION */
84431 {
84432 int readin;
84433
84434 if (!DIO_GET(uint8, &din, &field_addr, &readin)) {
84436 }
84437 real_packet->activity = readin;
84438 }
84439 }
84440 if (BV_ISSET(fields, 8)) {
84441 log_packet_detailed(" got field 'activity_count'");
84442#ifdef FREECIV_JSON_CONNECTION
84443 field_addr.name = "activity_count";
84444#endif /* FREECIV_JSON_CONNECTION */
84445 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->activity_count)) {
84446 RECEIVE_PACKET_FIELD_ERROR(activity_count);
84447 }
84448 }
84449 if (BV_ISSET(fields, 9)) {
84450 log_packet_detailed(" got field 'activity_base'");
84451#ifdef FREECIV_JSON_CONNECTION
84452 field_addr.name = "activity_base";
84453#endif /* FREECIV_JSON_CONNECTION */
84454 {
84455 int readin;
84456
84457 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
84458 RECEIVE_PACKET_FIELD_ERROR(activity_base);
84459 }
84460 real_packet->activity_base = readin;
84461 }
84462 }
84463 real_packet->debug = BV_ISSET(fields, 10);
84464 real_packet->moved = BV_ISSET(fields, 11);
84465 real_packet->paradropped = BV_ISSET(fields, 12);
84466 real_packet->done_moving = BV_ISSET(fields, 13);
84467 if (BV_ISSET(fields, 14)) {
84468 log_packet_detailed(" got field 'transported_by'");
84469#ifdef FREECIV_JSON_CONNECTION
84470 field_addr.name = "transported_by";
84471#endif /* FREECIV_JSON_CONNECTION */
84472 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->transported_by)) {
84473 RECEIVE_PACKET_FIELD_ERROR(transported_by);
84474 }
84475 }
84476 real_packet->stay = BV_ISSET(fields, 15);
84477
84478 if (NULL == old) {
84479 old = fc_malloc(sizeof(*old));
84480 *old = *real_packet;
84481 genhash_insert(*hash, old, old);
84482 } else {
84483 *old = *real_packet;
84484 }
84485
84486#endif /* FREECIV_DELTA_PROTOCOL */
84488}
84489
84490static int send_packet_edit_unit_100(struct connection *pc, const struct packet_edit_unit *packet)
84491{
84492 const struct packet_edit_unit *real_packet = packet;
84493 int e;
84494#ifdef FREECIV_DELTA_PROTOCOL
84496 struct packet_edit_unit *old;
84497 bool differ;
84498 struct genhash **hash = pc->phs.sent + PACKET_EDIT_UNIT;
84499#endif /* FREECIV_DELTA_PROTOCOL */
84501#ifdef FREECIV_JSON_CONNECTION
84502 struct plocation field_addr;
84503 {
84507 }
84508#endif /* FREECIV_JSON_CONNECTION */
84509
84510 log_packet_detailed("packet_edit_unit_100: sending info about (%d)",
84511 real_packet->id);
84512
84513#ifdef FREECIV_DELTA_PROTOCOL
84514 if (NULL == *hash) {
84516 NULL, NULL, NULL, free);
84517 }
84518 BV_CLR_ALL(fields);
84519
84520 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
84521 old = fc_malloc(sizeof(*old));
84522 *old = *real_packet;
84523 genhash_insert(*hash, old, old);
84524 memset(old, 0, sizeof(*old));
84525 }
84526 differ = (old->utype != real_packet->utype);
84527 if (differ) {
84528 BV_SET(fields, 0);
84529 }
84530
84531 differ = (old->owner != real_packet->owner);
84532 if (differ) {
84533 BV_SET(fields, 1);
84534 }
84535
84536 differ = (old->homecity != real_packet->homecity);
84537 if (differ) {
84538 BV_SET(fields, 2);
84539 }
84540
84541 differ = (old->moves_left != real_packet->moves_left);
84542 if (differ) {
84543 BV_SET(fields, 3);
84544 }
84545
84546 differ = (old->hp != real_packet->hp);
84547 if (differ) {
84548 BV_SET(fields, 4);
84549 }
84550
84551 differ = (old->veteran != real_packet->veteran);
84552 if (differ) {
84553 BV_SET(fields, 5);
84554 }
84555
84556 differ = (old->fuel != real_packet->fuel);
84557 if (differ) {
84558 BV_SET(fields, 6);
84559 }
84560
84561 differ = (old->activity != real_packet->activity);
84562 if (differ) {
84563 BV_SET(fields, 7);
84564 }
84565
84566 differ = (old->activity_count != real_packet->activity_count);
84567 if (differ) {
84568 BV_SET(fields, 8);
84569 }
84570
84571 differ = (old->activity_base != real_packet->activity_base);
84572 if (differ) {
84573 BV_SET(fields, 9);
84574 }
84575
84576 if (packet->debug) {
84577 BV_SET(fields, 10);
84578 }
84579
84580 if (packet->moved) {
84581 BV_SET(fields, 11);
84582 }
84583
84584 if (packet->paradropped) {
84585 BV_SET(fields, 12);
84586 }
84587
84588 if (packet->done_moving) {
84589 BV_SET(fields, 13);
84590 }
84591
84592 differ = (old->transported_by != real_packet->transported_by);
84593 if (differ) {
84594 BV_SET(fields, 14);
84595 }
84596
84597 if (packet->stay) {
84598 BV_SET(fields, 15);
84599 }
84600
84601
84602#ifdef FREECIV_JSON_CONNECTION
84603 field_addr.name = "fields";
84604#endif /* FREECIV_JSON_CONNECTION */
84605 e = 0;
84606 e |= DIO_BV_PUT(&dout, &field_addr, fields);
84607 if (e) {
84608 log_packet_detailed("fields bitvector error detected");
84609 }
84610#ifdef FREECIV_JSON_CONNECTION
84611 field_addr.name = "id";
84612#endif /* FREECIV_JSON_CONNECTION */
84613 e = 0;
84614 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
84615 if (e) {
84616 log_packet_detailed("'id' field error detected");
84617 }
84618
84619 if (BV_ISSET(fields, 0)) {
84620 log_packet_detailed(" field 'utype' has changed");
84621#ifdef FREECIV_JSON_CONNECTION
84622 field_addr.name = "utype";
84623#endif /* FREECIV_JSON_CONNECTION */
84624 e = 0;
84625 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
84626 if (e) {
84627 log_packet_detailed("'utype' field error detected");
84628 }
84629 }
84630 if (BV_ISSET(fields, 1)) {
84631 log_packet_detailed(" field 'owner' has changed");
84632#ifdef FREECIV_JSON_CONNECTION
84633 field_addr.name = "owner";
84634#endif /* FREECIV_JSON_CONNECTION */
84635 e = 0;
84636 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
84637 if (e) {
84638 log_packet_detailed("'owner' field error detected");
84639 }
84640 }
84641 if (BV_ISSET(fields, 2)) {
84642 log_packet_detailed(" field 'homecity' has changed");
84643#ifdef FREECIV_JSON_CONNECTION
84644 field_addr.name = "homecity";
84645#endif /* FREECIV_JSON_CONNECTION */
84646 e = 0;
84647 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
84648 if (e) {
84649 log_packet_detailed("'homecity' field error detected");
84650 }
84651 }
84652 if (BV_ISSET(fields, 3)) {
84653 log_packet_detailed(" field 'moves_left' has changed");
84654#ifdef FREECIV_JSON_CONNECTION
84655 field_addr.name = "moves_left";
84656#endif /* FREECIV_JSON_CONNECTION */
84657 e = 0;
84658 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
84659 if (e) {
84660 log_packet_detailed("'moves_left' field error detected");
84661 }
84662 }
84663 if (BV_ISSET(fields, 4)) {
84664 log_packet_detailed(" field 'hp' has changed");
84665#ifdef FREECIV_JSON_CONNECTION
84666 field_addr.name = "hp";
84667#endif /* FREECIV_JSON_CONNECTION */
84668 e = 0;
84669 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
84670 if (e) {
84671 log_packet_detailed("'hp' field error detected");
84672 }
84673 }
84674 if (BV_ISSET(fields, 5)) {
84675 log_packet_detailed(" field 'veteran' has changed");
84676#ifdef FREECIV_JSON_CONNECTION
84677 field_addr.name = "veteran";
84678#endif /* FREECIV_JSON_CONNECTION */
84679 e = 0;
84680 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
84681 if (e) {
84682 log_packet_detailed("'veteran' field error detected");
84683 }
84684 }
84685 if (BV_ISSET(fields, 6)) {
84686 log_packet_detailed(" field 'fuel' has changed");
84687#ifdef FREECIV_JSON_CONNECTION
84688 field_addr.name = "fuel";
84689#endif /* FREECIV_JSON_CONNECTION */
84690 e = 0;
84691 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
84692 if (e) {
84693 log_packet_detailed("'fuel' field error detected");
84694 }
84695 }
84696 if (BV_ISSET(fields, 7)) {
84697 log_packet_detailed(" field 'activity' has changed");
84698#ifdef FREECIV_JSON_CONNECTION
84699 field_addr.name = "activity";
84700#endif /* FREECIV_JSON_CONNECTION */
84701 e = 0;
84702 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
84703 if (e) {
84704 log_packet_detailed("'activity' field error detected");
84705 }
84706 }
84707 if (BV_ISSET(fields, 8)) {
84708 log_packet_detailed(" field 'activity_count' has changed");
84709#ifdef FREECIV_JSON_CONNECTION
84710 field_addr.name = "activity_count";
84711#endif /* FREECIV_JSON_CONNECTION */
84712 e = 0;
84713 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
84714 if (e) {
84715 log_packet_detailed("'activity_count' field error detected");
84716 }
84717 }
84718 if (BV_ISSET(fields, 9)) {
84719 log_packet_detailed(" field 'activity_base' has changed");
84720#ifdef FREECIV_JSON_CONNECTION
84721 field_addr.name = "activity_base";
84722#endif /* FREECIV_JSON_CONNECTION */
84723 e = 0;
84724 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
84725 if (e) {
84726 log_packet_detailed("'activity_base' field error detected");
84727 }
84728 }
84729 /* field 10 is folded into the header */
84730 /* field 11 is folded into the header */
84731 /* field 12 is folded into the header */
84732 /* field 13 is folded into the header */
84733 if (BV_ISSET(fields, 14)) {
84734 log_packet_detailed(" field 'transported_by' has changed");
84735#ifdef FREECIV_JSON_CONNECTION
84736 field_addr.name = "transported_by";
84737#endif /* FREECIV_JSON_CONNECTION */
84738 e = 0;
84739 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
84740 if (e) {
84741 log_packet_detailed("'transported_by' field error detected");
84742 }
84743 }
84744 /* field 15 is folded into the header */
84745
84746 *old = *real_packet;
84747#endif /* FREECIV_DELTA_PROTOCOL */
84748#ifndef FREECIV_DELTA_PROTOCOL
84749#ifdef FREECIV_JSON_CONNECTION
84750 field_addr.name = "id";
84751#endif /* FREECIV_JSON_CONNECTION */
84752 e = 0;
84753 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
84754 if (e) {
84755 log_packet_detailed("'id' field error detected");
84756 }
84757#ifdef FREECIV_JSON_CONNECTION
84758 field_addr.name = "utype";
84759#endif /* FREECIV_JSON_CONNECTION */
84760 e = 0;
84761 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->utype);
84762 if (e) {
84763 log_packet_detailed("'utype' field error detected");
84764 }
84765#ifdef FREECIV_JSON_CONNECTION
84766 field_addr.name = "owner";
84767#endif /* FREECIV_JSON_CONNECTION */
84768 e = 0;
84769 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
84770 if (e) {
84771 log_packet_detailed("'owner' field error detected");
84772 }
84773#ifdef FREECIV_JSON_CONNECTION
84774 field_addr.name = "homecity";
84775#endif /* FREECIV_JSON_CONNECTION */
84776 e = 0;
84777 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->homecity);
84778 if (e) {
84779 log_packet_detailed("'homecity' field error detected");
84780 }
84781#ifdef FREECIV_JSON_CONNECTION
84782 field_addr.name = "moves_left";
84783#endif /* FREECIV_JSON_CONNECTION */
84784 e = 0;
84785 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->moves_left);
84786 if (e) {
84787 log_packet_detailed("'moves_left' field error detected");
84788 }
84789#ifdef FREECIV_JSON_CONNECTION
84790 field_addr.name = "hp";
84791#endif /* FREECIV_JSON_CONNECTION */
84792 e = 0;
84793 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->hp);
84794 if (e) {
84795 log_packet_detailed("'hp' field error detected");
84796 }
84797#ifdef FREECIV_JSON_CONNECTION
84798 field_addr.name = "veteran";
84799#endif /* FREECIV_JSON_CONNECTION */
84800 e = 0;
84801 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->veteran);
84802 if (e) {
84803 log_packet_detailed("'veteran' field error detected");
84804 }
84805#ifdef FREECIV_JSON_CONNECTION
84806 field_addr.name = "fuel";
84807#endif /* FREECIV_JSON_CONNECTION */
84808 e = 0;
84809 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->fuel);
84810 if (e) {
84811 log_packet_detailed("'fuel' field error detected");
84812 }
84813#ifdef FREECIV_JSON_CONNECTION
84814 field_addr.name = "activity";
84815#endif /* FREECIV_JSON_CONNECTION */
84816 e = 0;
84817 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->activity);
84818 if (e) {
84819 log_packet_detailed("'activity' field error detected");
84820 }
84821#ifdef FREECIV_JSON_CONNECTION
84822 field_addr.name = "activity_count";
84823#endif /* FREECIV_JSON_CONNECTION */
84824 e = 0;
84825 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->activity_count);
84826 if (e) {
84827 log_packet_detailed("'activity_count' field error detected");
84828 }
84829#ifdef FREECIV_JSON_CONNECTION
84830 field_addr.name = "activity_base";
84831#endif /* FREECIV_JSON_CONNECTION */
84832 e = 0;
84833 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->activity_base);
84834 if (e) {
84835 log_packet_detailed("'activity_base' field error detected");
84836 }
84837#ifdef FREECIV_JSON_CONNECTION
84838 field_addr.name = "debug";
84839#endif /* FREECIV_JSON_CONNECTION */
84840 e = 0;
84841 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
84842 if (e) {
84843 log_packet_detailed("'debug' field error detected");
84844 }
84845#ifdef FREECIV_JSON_CONNECTION
84846 field_addr.name = "moved";
84847#endif /* FREECIV_JSON_CONNECTION */
84848 e = 0;
84849 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->moved);
84850 if (e) {
84851 log_packet_detailed("'moved' field error detected");
84852 }
84853#ifdef FREECIV_JSON_CONNECTION
84854 field_addr.name = "paradropped";
84855#endif /* FREECIV_JSON_CONNECTION */
84856 e = 0;
84857 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->paradropped);
84858 if (e) {
84859 log_packet_detailed("'paradropped' field error detected");
84860 }
84861#ifdef FREECIV_JSON_CONNECTION
84862 field_addr.name = "done_moving";
84863#endif /* FREECIV_JSON_CONNECTION */
84864 e = 0;
84865 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->done_moving);
84866 if (e) {
84867 log_packet_detailed("'done_moving' field error detected");
84868 }
84869#ifdef FREECIV_JSON_CONNECTION
84870 field_addr.name = "transported_by";
84871#endif /* FREECIV_JSON_CONNECTION */
84872 e = 0;
84873 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->transported_by);
84874 if (e) {
84875 log_packet_detailed("'transported_by' field error detected");
84876 }
84877#ifdef FREECIV_JSON_CONNECTION
84878 field_addr.name = "stay";
84879#endif /* FREECIV_JSON_CONNECTION */
84880 e = 0;
84881 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->stay);
84882 if (e) {
84883 log_packet_detailed("'stay' field error detected");
84884 }
84885
84886#endif
84888}
84889
84890int send_packet_edit_unit(struct connection *pc, const struct packet_edit_unit *packet)
84891{
84892 if (!pc->used) {
84893 log_error("WARNING: trying to send data to the closed connection %s",
84895 return -1;
84896 }
84897 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_UNIT].packet != NULL, -1,
84898 "Handler for PACKET_EDIT_UNIT not installed");
84899 return pc->phs.handlers->send[PACKET_EDIT_UNIT].packet(pc, packet);
84900}
84901
84902#ifdef FREECIV_DELTA_PROTOCOL
84903#define hash_packet_edit_city_create_100 hash_const
84904
84905#define cmp_packet_edit_city_create_100 cmp_const
84906
84908#endif /* FREECIV_DELTA_PROTOCOL */
84909
84911{
84912#ifdef FREECIV_DELTA_PROTOCOL
84914 struct packet_edit_city_create *old;
84915 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_CREATE;
84916#endif /* FREECIV_DELTA_PROTOCOL */
84918#ifdef FREECIV_JSON_CONNECTION
84919 struct plocation field_addr;
84920 {
84924 }
84925#endif /* FREECIV_JSON_CONNECTION */
84926
84927#ifdef FREECIV_DELTA_PROTOCOL
84928#ifdef FREECIV_JSON_CONNECTION
84929 field_addr.name = "fields";
84930#endif /* FREECIV_JSON_CONNECTION */
84931 DIO_BV_GET(&din, &field_addr, fields);
84932
84933#else /* FREECIV_DELTA_PROTOCOL */
84934#ifdef FREECIV_JSON_CONNECTION
84935 field_addr.name = "owner";
84936#endif /* FREECIV_JSON_CONNECTION */
84937 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
84939 }
84940#ifdef FREECIV_JSON_CONNECTION
84941 field_addr.name = "tile";
84942#endif /* FREECIV_JSON_CONNECTION */
84943 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
84945 }
84946#ifdef FREECIV_JSON_CONNECTION
84947 field_addr.name = "size";
84948#endif /* FREECIV_JSON_CONNECTION */
84949 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
84951 }
84952#ifdef FREECIV_JSON_CONNECTION
84953 field_addr.name = "tag";
84954#endif /* FREECIV_JSON_CONNECTION */
84955 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
84957 }
84958#endif
84959 log_packet_detailed("packet_edit_city_create_100: got info about ()");
84960
84961#ifdef FREECIV_DELTA_PROTOCOL
84962 if (NULL == *hash) {
84964 NULL, NULL, NULL, free);
84965 }
84966
84967 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
84968 *real_packet = *old;
84969 } else {
84970 log_packet_detailed(" no old info");
84971 memset(real_packet, 0, sizeof(*real_packet));
84972 }
84973
84974 if (BV_ISSET(fields, 0)) {
84975 log_packet_detailed(" got field 'owner'");
84976#ifdef FREECIV_JSON_CONNECTION
84977 field_addr.name = "owner";
84978#endif /* FREECIV_JSON_CONNECTION */
84979 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
84981 }
84982 }
84983 if (BV_ISSET(fields, 1)) {
84984 log_packet_detailed(" got field 'tile'");
84985#ifdef FREECIV_JSON_CONNECTION
84986 field_addr.name = "tile";
84987#endif /* FREECIV_JSON_CONNECTION */
84988 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
84990 }
84991 }
84992 if (BV_ISSET(fields, 2)) {
84993 log_packet_detailed(" got field 'size'");
84994#ifdef FREECIV_JSON_CONNECTION
84995 field_addr.name = "size";
84996#endif /* FREECIV_JSON_CONNECTION */
84997 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
84999 }
85000 }
85001 if (BV_ISSET(fields, 3)) {
85002 log_packet_detailed(" got field 'tag'");
85003#ifdef FREECIV_JSON_CONNECTION
85004 field_addr.name = "tag";
85005#endif /* FREECIV_JSON_CONNECTION */
85006 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
85008 }
85009 }
85010
85011 if (NULL == old) {
85012 old = fc_malloc(sizeof(*old));
85013 *old = *real_packet;
85014 genhash_insert(*hash, old, old);
85015 } else {
85016 *old = *real_packet;
85017 }
85018
85019#endif /* FREECIV_DELTA_PROTOCOL */
85021}
85022
85024{
85025 const struct packet_edit_city_create *real_packet = packet;
85026 int e;
85027#ifdef FREECIV_DELTA_PROTOCOL
85029 struct packet_edit_city_create *old;
85030 bool differ;
85031 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_CREATE;
85032#endif /* FREECIV_DELTA_PROTOCOL */
85034#ifdef FREECIV_JSON_CONNECTION
85035 struct plocation field_addr;
85036 {
85040 }
85041#endif /* FREECIV_JSON_CONNECTION */
85042
85043 log_packet_detailed("packet_edit_city_create_100: sending info about ()");
85044
85045#ifdef FREECIV_DELTA_PROTOCOL
85046 if (NULL == *hash) {
85048 NULL, NULL, NULL, free);
85049 }
85050 BV_CLR_ALL(fields);
85051
85052 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85053 old = fc_malloc(sizeof(*old));
85054 *old = *real_packet;
85055 genhash_insert(*hash, old, old);
85056 memset(old, 0, sizeof(*old));
85057 }
85058 differ = (old->owner != real_packet->owner);
85059 if (differ) {
85060 BV_SET(fields, 0);
85061 }
85062
85063 differ = (old->tile != real_packet->tile);
85064 if (differ) {
85065 BV_SET(fields, 1);
85066 }
85067
85068 differ = (old->size != real_packet->size);
85069 if (differ) {
85070 BV_SET(fields, 2);
85071 }
85072
85073 differ = (old->tag != real_packet->tag);
85074 if (differ) {
85075 BV_SET(fields, 3);
85076 }
85077
85078
85079#ifdef FREECIV_JSON_CONNECTION
85080 field_addr.name = "fields";
85081#endif /* FREECIV_JSON_CONNECTION */
85082 e = 0;
85083 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85084 if (e) {
85085 log_packet_detailed("fields bitvector error detected");
85086 }
85087
85088 if (BV_ISSET(fields, 0)) {
85089 log_packet_detailed(" field 'owner' has changed");
85090#ifdef FREECIV_JSON_CONNECTION
85091 field_addr.name = "owner";
85092#endif /* FREECIV_JSON_CONNECTION */
85093 e = 0;
85094 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
85095 if (e) {
85096 log_packet_detailed("'owner' field error detected");
85097 }
85098 }
85099 if (BV_ISSET(fields, 1)) {
85100 log_packet_detailed(" field 'tile' has changed");
85101#ifdef FREECIV_JSON_CONNECTION
85102 field_addr.name = "tile";
85103#endif /* FREECIV_JSON_CONNECTION */
85104 e = 0;
85105 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
85106 if (e) {
85107 log_packet_detailed("'tile' field error detected");
85108 }
85109 }
85110 if (BV_ISSET(fields, 2)) {
85111 log_packet_detailed(" field 'size' has changed");
85112#ifdef FREECIV_JSON_CONNECTION
85113 field_addr.name = "size";
85114#endif /* FREECIV_JSON_CONNECTION */
85115 e = 0;
85116 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
85117 if (e) {
85118 log_packet_detailed("'size' field error detected");
85119 }
85120 }
85121 if (BV_ISSET(fields, 3)) {
85122 log_packet_detailed(" field 'tag' has changed");
85123#ifdef FREECIV_JSON_CONNECTION
85124 field_addr.name = "tag";
85125#endif /* FREECIV_JSON_CONNECTION */
85126 e = 0;
85127 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
85128 if (e) {
85129 log_packet_detailed("'tag' field error detected");
85130 }
85131 }
85132
85133 *old = *real_packet;
85134#endif /* FREECIV_DELTA_PROTOCOL */
85135#ifndef FREECIV_DELTA_PROTOCOL
85136#ifdef FREECIV_JSON_CONNECTION
85137 field_addr.name = "owner";
85138#endif /* FREECIV_JSON_CONNECTION */
85139 e = 0;
85140 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
85141 if (e) {
85142 log_packet_detailed("'owner' field error detected");
85143 }
85144#ifdef FREECIV_JSON_CONNECTION
85145 field_addr.name = "tile";
85146#endif /* FREECIV_JSON_CONNECTION */
85147 e = 0;
85148 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
85149 if (e) {
85150 log_packet_detailed("'tile' field error detected");
85151 }
85152#ifdef FREECIV_JSON_CONNECTION
85153 field_addr.name = "size";
85154#endif /* FREECIV_JSON_CONNECTION */
85155 e = 0;
85156 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
85157 if (e) {
85158 log_packet_detailed("'size' field error detected");
85159 }
85160#ifdef FREECIV_JSON_CONNECTION
85161 field_addr.name = "tag";
85162#endif /* FREECIV_JSON_CONNECTION */
85163 e = 0;
85164 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
85165 if (e) {
85166 log_packet_detailed("'tag' field error detected");
85167 }
85168
85169#endif
85171}
85172
85174{
85175 if (!pc->used) {
85176 log_error("WARNING: trying to send data to the closed connection %s",
85178 return -1;
85179 }
85180 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet != NULL, -1,
85181 "Handler for PACKET_EDIT_CITY_CREATE not installed");
85182 return pc->phs.handlers->send[PACKET_EDIT_CITY_CREATE].packet(pc, packet);
85183}
85184
85185int dsend_packet_edit_city_create(struct connection *pc, int owner, int tile, int size, int tag)
85186{
85187 struct packet_edit_city_create packet, *real_packet = &packet;
85188
85191 real_packet->size = size;
85192 real_packet->tag = tag;
85193
85195}
85196
85197#ifdef FREECIV_DELTA_PROTOCOL
85198#define hash_packet_edit_city_remove_100 hash_const
85199
85200#define cmp_packet_edit_city_remove_100 cmp_const
85201
85203#endif /* FREECIV_DELTA_PROTOCOL */
85204
85206{
85207#ifdef FREECIV_DELTA_PROTOCOL
85209 struct packet_edit_city_remove *old;
85210 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY_REMOVE;
85211#endif /* FREECIV_DELTA_PROTOCOL */
85213#ifdef FREECIV_JSON_CONNECTION
85214 struct plocation field_addr;
85215 {
85219 }
85220#endif /* FREECIV_JSON_CONNECTION */
85221
85222#ifdef FREECIV_DELTA_PROTOCOL
85223#ifdef FREECIV_JSON_CONNECTION
85224 field_addr.name = "fields";
85225#endif /* FREECIV_JSON_CONNECTION */
85226 DIO_BV_GET(&din, &field_addr, fields);
85227
85228#else /* FREECIV_DELTA_PROTOCOL */
85229#ifdef FREECIV_JSON_CONNECTION
85230 field_addr.name = "id";
85231#endif /* FREECIV_JSON_CONNECTION */
85232 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
85234 }
85235#endif
85236 log_packet_detailed("packet_edit_city_remove_100: got info about ()");
85237
85238#ifdef FREECIV_DELTA_PROTOCOL
85239 if (NULL == *hash) {
85241 NULL, NULL, NULL, free);
85242 }
85243
85244 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85245 *real_packet = *old;
85246 } else {
85247 log_packet_detailed(" no old info");
85248 memset(real_packet, 0, sizeof(*real_packet));
85249 }
85250
85251 if (BV_ISSET(fields, 0)) {
85252 log_packet_detailed(" got field 'id'");
85253#ifdef FREECIV_JSON_CONNECTION
85254 field_addr.name = "id";
85255#endif /* FREECIV_JSON_CONNECTION */
85256 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
85258 }
85259 }
85260
85261 if (NULL == old) {
85262 old = fc_malloc(sizeof(*old));
85263 *old = *real_packet;
85264 genhash_insert(*hash, old, old);
85265 } else {
85266 *old = *real_packet;
85267 }
85268
85269#endif /* FREECIV_DELTA_PROTOCOL */
85271}
85272
85274{
85275 const struct packet_edit_city_remove *real_packet = packet;
85276 int e;
85277#ifdef FREECIV_DELTA_PROTOCOL
85279 struct packet_edit_city_remove *old;
85280 bool differ;
85281 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY_REMOVE;
85282#endif /* FREECIV_DELTA_PROTOCOL */
85284#ifdef FREECIV_JSON_CONNECTION
85285 struct plocation field_addr;
85286 {
85290 }
85291#endif /* FREECIV_JSON_CONNECTION */
85292
85293 log_packet_detailed("packet_edit_city_remove_100: sending info about ()");
85294
85295#ifdef FREECIV_DELTA_PROTOCOL
85296 if (NULL == *hash) {
85298 NULL, NULL, NULL, free);
85299 }
85300 BV_CLR_ALL(fields);
85301
85302 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
85303 old = fc_malloc(sizeof(*old));
85304 *old = *real_packet;
85305 genhash_insert(*hash, old, old);
85306 memset(old, 0, sizeof(*old));
85307 }
85308 differ = (old->id != real_packet->id);
85309 if (differ) {
85310 BV_SET(fields, 0);
85311 }
85312
85313
85314#ifdef FREECIV_JSON_CONNECTION
85315 field_addr.name = "fields";
85316#endif /* FREECIV_JSON_CONNECTION */
85317 e = 0;
85318 e |= DIO_BV_PUT(&dout, &field_addr, fields);
85319 if (e) {
85320 log_packet_detailed("fields bitvector error detected");
85321 }
85322
85323 if (BV_ISSET(fields, 0)) {
85324 log_packet_detailed(" field 'id' has changed");
85325#ifdef FREECIV_JSON_CONNECTION
85326 field_addr.name = "id";
85327#endif /* FREECIV_JSON_CONNECTION */
85328 e = 0;
85329 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
85330 if (e) {
85331 log_packet_detailed("'id' field error detected");
85332 }
85333 }
85334
85335 *old = *real_packet;
85336#endif /* FREECIV_DELTA_PROTOCOL */
85337#ifndef FREECIV_DELTA_PROTOCOL
85338#ifdef FREECIV_JSON_CONNECTION
85339 field_addr.name = "id";
85340#endif /* FREECIV_JSON_CONNECTION */
85341 e = 0;
85342 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
85343 if (e) {
85344 log_packet_detailed("'id' field error detected");
85345 }
85346
85347#endif
85349}
85350
85352{
85353 if (!pc->used) {
85354 log_error("WARNING: trying to send data to the closed connection %s",
85356 return -1;
85357 }
85358 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet != NULL, -1,
85359 "Handler for PACKET_EDIT_CITY_REMOVE not installed");
85360 return pc->phs.handlers->send[PACKET_EDIT_CITY_REMOVE].packet(pc, packet);
85361}
85362
85364{
85365 struct packet_edit_city_remove packet, *real_packet = &packet;
85366
85367 real_packet->id = id;
85368
85370}
85371
85372#ifdef FREECIV_DELTA_PROTOCOL
85374{
85375 const struct packet_edit_city *key = (const struct packet_edit_city *) vkey;
85376 genhash_val_t result = 0;
85377
85378 result += key->id;
85379
85380 result &= 0xFFFFFFFF;
85381 return result;
85382}
85383
85384static bool cmp_packet_edit_city_100(const void *vkey1, const void *vkey2)
85385{
85386 const struct packet_edit_city *old = (const struct packet_edit_city *) vkey1;
85387 const struct packet_edit_city *real_packet = (const struct packet_edit_city *) vkey2;
85388 bool differ;
85389
85390 differ = (old->id != real_packet->id);
85391
85392 return !differ;
85393}
85395#endif /* FREECIV_DELTA_PROTOCOL */
85396
85398{
85399#ifdef FREECIV_DELTA_PROTOCOL
85401 struct packet_edit_city *old;
85402 struct genhash **hash = pc->phs.received + PACKET_EDIT_CITY;
85403#endif /* FREECIV_DELTA_PROTOCOL */
85405#ifdef FREECIV_JSON_CONNECTION
85406 struct plocation field_addr;
85407 {
85411 }
85412#endif /* FREECIV_JSON_CONNECTION */
85413
85414#ifdef FREECIV_DELTA_PROTOCOL
85415#ifdef FREECIV_JSON_CONNECTION
85416 field_addr.name = "fields";
85417#endif /* FREECIV_JSON_CONNECTION */
85418 DIO_BV_GET(&din, &field_addr, fields);
85419#ifdef FREECIV_JSON_CONNECTION
85420 field_addr.name = "id";
85421#endif /* FREECIV_JSON_CONNECTION */
85422 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
85424 }
85425
85426#else /* FREECIV_DELTA_PROTOCOL */
85427#ifdef FREECIV_JSON_CONNECTION
85428 field_addr.name = "id";
85429#endif /* FREECIV_JSON_CONNECTION */
85430 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
85432 }
85433#ifdef FREECIV_JSON_CONNECTION
85434 field_addr.name = "name";
85435#endif /* FREECIV_JSON_CONNECTION */
85436 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
85438 }
85439#ifdef FREECIV_JSON_CONNECTION
85440 field_addr.name = "owner";
85441#endif /* FREECIV_JSON_CONNECTION */
85442 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
85444 }
85445#ifdef FREECIV_JSON_CONNECTION
85446 field_addr.name = "original";
85447#endif /* FREECIV_JSON_CONNECTION */
85448 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
85450 }
85451#ifdef FREECIV_JSON_CONNECTION
85452 field_addr.name = "size";
85453#endif /* FREECIV_JSON_CONNECTION */
85454 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
85456 }
85457#ifdef FREECIV_JSON_CONNECTION
85458 field_addr.name = "history";
85459#endif /* FREECIV_JSON_CONNECTION */
85460 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
85462 }
85463#ifdef FREECIV_JSON_CONNECTION
85464 field_addr.name = "ppl_happy";
85465#endif /* FREECIV_JSON_CONNECTION */
85466 {
85467 int i;
85468
85469#ifdef FREECIV_JSON_CONNECTION
85470 /* Enter array. */
85471 field_addr.sub_location = plocation_elem_new(0);
85472#endif /* FREECIV_JSON_CONNECTION */
85473
85474 for (i = 0; i < 5; i++) {
85475#ifdef FREECIV_JSON_CONNECTION
85476 field_addr.sub_location->number = i;
85477#endif /* FREECIV_JSON_CONNECTION */
85478
85479 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
85480 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
85481 }
85482 }
85483
85484#ifdef FREECIV_JSON_CONNECTION
85485 /* Exit array. */
85486 FC_FREE(field_addr.sub_location);
85487#endif /* FREECIV_JSON_CONNECTION */
85488 }
85489#ifdef FREECIV_JSON_CONNECTION
85490 field_addr.name = "ppl_content";
85491#endif /* FREECIV_JSON_CONNECTION */
85492 {
85493 int i;
85494
85495#ifdef FREECIV_JSON_CONNECTION
85496 /* Enter array. */
85497 field_addr.sub_location = plocation_elem_new(0);
85498#endif /* FREECIV_JSON_CONNECTION */
85499
85500 for (i = 0; i < 5; i++) {
85501#ifdef FREECIV_JSON_CONNECTION
85502 field_addr.sub_location->number = i;
85503#endif /* FREECIV_JSON_CONNECTION */
85504
85505 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
85506 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
85507 }
85508 }
85509
85510#ifdef FREECIV_JSON_CONNECTION
85511 /* Exit array. */
85512 FC_FREE(field_addr.sub_location);
85513#endif /* FREECIV_JSON_CONNECTION */
85514 }
85515#ifdef FREECIV_JSON_CONNECTION
85516 field_addr.name = "ppl_unhappy";
85517#endif /* FREECIV_JSON_CONNECTION */
85518 {
85519 int i;
85520
85521#ifdef FREECIV_JSON_CONNECTION
85522 /* Enter array. */
85523 field_addr.sub_location = plocation_elem_new(0);
85524#endif /* FREECIV_JSON_CONNECTION */
85525
85526 for (i = 0; i < 5; i++) {
85527#ifdef FREECIV_JSON_CONNECTION
85528 field_addr.sub_location->number = i;
85529#endif /* FREECIV_JSON_CONNECTION */
85530
85531 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
85532 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
85533 }
85534 }
85535
85536#ifdef FREECIV_JSON_CONNECTION
85537 /* Exit array. */
85538 FC_FREE(field_addr.sub_location);
85539#endif /* FREECIV_JSON_CONNECTION */
85540 }
85541#ifdef FREECIV_JSON_CONNECTION
85542 field_addr.name = "ppl_angry";
85543#endif /* FREECIV_JSON_CONNECTION */
85544 {
85545 int i;
85546
85547#ifdef FREECIV_JSON_CONNECTION
85548 /* Enter array. */
85549 field_addr.sub_location = plocation_elem_new(0);
85550#endif /* FREECIV_JSON_CONNECTION */
85551
85552 for (i = 0; i < 5; i++) {
85553#ifdef FREECIV_JSON_CONNECTION
85554 field_addr.sub_location->number = i;
85555#endif /* FREECIV_JSON_CONNECTION */
85556
85557 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
85558 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
85559 }
85560 }
85561
85562#ifdef FREECIV_JSON_CONNECTION
85563 /* Exit array. */
85564 FC_FREE(field_addr.sub_location);
85565#endif /* FREECIV_JSON_CONNECTION */
85566 }
85567#ifdef FREECIV_JSON_CONNECTION
85568 field_addr.name = "specialists_size";
85569#endif /* FREECIV_JSON_CONNECTION */
85570 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
85571 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
85572 }
85573#ifdef FREECIV_JSON_CONNECTION
85574 field_addr.name = "specialists";
85575#endif /* FREECIV_JSON_CONNECTION */
85576 if (real_packet->specialists_size > SP_MAX) {
85577 RECEIVE_PACKET_FIELD_ERROR(specialists, ": truncation array");
85578 }
85579 {
85580 int i;
85581
85582#ifdef FREECIV_JSON_CONNECTION
85583 /* Enter array. */
85584 field_addr.sub_location = plocation_elem_new(0);
85585#endif /* FREECIV_JSON_CONNECTION */
85586
85587 for (i = 0; i < real_packet->specialists_size; i++) {
85588#ifdef FREECIV_JSON_CONNECTION
85589 field_addr.sub_location->number = i;
85590#endif /* FREECIV_JSON_CONNECTION */
85591
85592 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
85594 }
85595 }
85596
85597#ifdef FREECIV_JSON_CONNECTION
85598 /* Exit array. */
85599 FC_FREE(field_addr.sub_location);
85600#endif /* FREECIV_JSON_CONNECTION */
85601 }
85602#ifdef FREECIV_JSON_CONNECTION
85603 field_addr.name = "food_stock";
85604#endif /* FREECIV_JSON_CONNECTION */
85605 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
85606 RECEIVE_PACKET_FIELD_ERROR(food_stock);
85607 }
85608#ifdef FREECIV_JSON_CONNECTION
85609 field_addr.name = "shield_stock";
85610#endif /* FREECIV_JSON_CONNECTION */
85611 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
85612 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
85613 }
85614#ifdef FREECIV_JSON_CONNECTION
85615 field_addr.name = "airlift";
85616#endif /* FREECIV_JSON_CONNECTION */
85617 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->airlift)) {
85619 }
85620#ifdef FREECIV_JSON_CONNECTION
85621 field_addr.name = "debug";
85622#endif /* FREECIV_JSON_CONNECTION */
85623 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->debug)) {
85625 }
85626#ifdef FREECIV_JSON_CONNECTION
85627 field_addr.name = "did_buy";
85628#endif /* FREECIV_JSON_CONNECTION */
85629 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_buy)) {
85631 }
85632#ifdef FREECIV_JSON_CONNECTION
85633 field_addr.name = "did_sell";
85634#endif /* FREECIV_JSON_CONNECTION */
85635 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->did_sell)) {
85637 }
85638#ifdef FREECIV_JSON_CONNECTION
85639 field_addr.name = "was_happy";
85640#endif /* FREECIV_JSON_CONNECTION */
85641 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->was_happy)) {
85642 RECEIVE_PACKET_FIELD_ERROR(was_happy);
85643 }
85644#ifdef FREECIV_JSON_CONNECTION
85645 field_addr.name = "had_famine";
85646#endif /* FREECIV_JSON_CONNECTION */
85647 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->had_famine)) {
85648 RECEIVE_PACKET_FIELD_ERROR(had_famine);
85649 }
85650#ifdef FREECIV_JSON_CONNECTION
85651 field_addr.name = "anarchy";
85652#endif /* FREECIV_JSON_CONNECTION */
85653 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
85655 }
85656#ifdef FREECIV_JSON_CONNECTION
85657 field_addr.name = "rapture";
85658#endif /* FREECIV_JSON_CONNECTION */
85659 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
85661 }
85662#ifdef FREECIV_JSON_CONNECTION
85663 field_addr.name = "steal";
85664#endif /* FREECIV_JSON_CONNECTION */
85665 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
85667 }
85668#ifdef FREECIV_JSON_CONNECTION
85669 field_addr.name = "turn_founded";
85670#endif /* FREECIV_JSON_CONNECTION */
85671 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
85672 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
85673 }
85674#ifdef FREECIV_JSON_CONNECTION
85675 field_addr.name = "turn_last_built";
85676#endif /* FREECIV_JSON_CONNECTION */
85677 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
85678 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
85679 }
85680#ifdef FREECIV_JSON_CONNECTION
85681 field_addr.name = "built";
85682#endif /* FREECIV_JSON_CONNECTION */
85683 {
85684 int i;
85685
85686#ifdef FREECIV_JSON_CONNECTION
85687 /* Enter array. */
85688 field_addr.sub_location = plocation_elem_new(0);
85689#endif /* FREECIV_JSON_CONNECTION */
85690
85691 for (i = 0; i < B_LAST; i++) {
85692#ifdef FREECIV_JSON_CONNECTION
85693 field_addr.sub_location->number = i;
85694#endif /* FREECIV_JSON_CONNECTION */
85695
85696 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
85698 }
85699 }
85700
85701#ifdef FREECIV_JSON_CONNECTION
85702 /* Exit array. */
85703 FC_FREE(field_addr.sub_location);
85704#endif /* FREECIV_JSON_CONNECTION */
85705 }
85706#ifdef FREECIV_JSON_CONNECTION
85707 field_addr.name = "production_kind";
85708#endif /* FREECIV_JSON_CONNECTION */
85709 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
85710 RECEIVE_PACKET_FIELD_ERROR(production_kind);
85711 }
85712#ifdef FREECIV_JSON_CONNECTION
85713 field_addr.name = "production_value";
85714#endif /* FREECIV_JSON_CONNECTION */
85715 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
85716 RECEIVE_PACKET_FIELD_ERROR(production_value);
85717 }
85718#endif
85719 log_packet_detailed("packet_edit_city_100: got info about (%d)",
85720 real_packet->id);
85721
85722#ifdef FREECIV_DELTA_PROTOCOL
85723 if (NULL == *hash) {
85725 NULL, NULL, NULL, free);
85726 }
85727
85728 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
85729 *real_packet = *old;
85730 } else {
85731 int id;
85732
85733 id = real_packet->id;
85734
85735 log_packet_detailed(" no old info");
85736 memset(real_packet, 0, sizeof(*real_packet));
85737
85738 real_packet->id = id;
85739 }
85740
85741 if (BV_ISSET(fields, 0)) {
85742 log_packet_detailed(" got field 'name'");
85743#ifdef FREECIV_JSON_CONNECTION
85744 field_addr.name = "name";
85745#endif /* FREECIV_JSON_CONNECTION */
85746 if (!DIO_GET(estring, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
85748 }
85749 }
85750 if (BV_ISSET(fields, 1)) {
85751 log_packet_detailed(" got field 'owner'");
85752#ifdef FREECIV_JSON_CONNECTION
85753 field_addr.name = "owner";
85754#endif /* FREECIV_JSON_CONNECTION */
85755 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->owner)) {
85757 }
85758 }
85759 if (BV_ISSET(fields, 2)) {
85760 log_packet_detailed(" got field 'original'");
85761#ifdef FREECIV_JSON_CONNECTION
85762 field_addr.name = "original";
85763#endif /* FREECIV_JSON_CONNECTION */
85764 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->original)) {
85766 }
85767 }
85768 if (BV_ISSET(fields, 3)) {
85769 log_packet_detailed(" got field 'size'");
85770#ifdef FREECIV_JSON_CONNECTION
85771 field_addr.name = "size";
85772#endif /* FREECIV_JSON_CONNECTION */
85773 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
85775 }
85776 }
85777 if (BV_ISSET(fields, 4)) {
85778 log_packet_detailed(" got field 'history'");
85779#ifdef FREECIV_JSON_CONNECTION
85780 field_addr.name = "history";
85781#endif /* FREECIV_JSON_CONNECTION */
85782 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->history)) {
85784 }
85785 }
85786 if (BV_ISSET(fields, 5)) {
85787 log_packet_detailed(" got field 'ppl_happy'");
85788#ifdef FREECIV_JSON_CONNECTION
85789 field_addr.name = "ppl_happy";
85790#endif /* FREECIV_JSON_CONNECTION */
85791 {
85792 int i;
85793
85794#ifdef FREECIV_JSON_CONNECTION
85795 /* Enter array. */
85796 field_addr.sub_location = plocation_elem_new(0);
85797#endif /* FREECIV_JSON_CONNECTION */
85798
85799 for (i = 0; i < 5; i++) {
85800#ifdef FREECIV_JSON_CONNECTION
85801 field_addr.sub_location->number = i;
85802#endif /* FREECIV_JSON_CONNECTION */
85803
85804 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_happy[i])) {
85805 RECEIVE_PACKET_FIELD_ERROR(ppl_happy);
85806 }
85807 }
85808
85809#ifdef FREECIV_JSON_CONNECTION
85810 /* Exit array. */
85811 FC_FREE(field_addr.sub_location);
85812#endif /* FREECIV_JSON_CONNECTION */
85813 }
85814 }
85815 if (BV_ISSET(fields, 6)) {
85816 log_packet_detailed(" got field 'ppl_content'");
85817#ifdef FREECIV_JSON_CONNECTION
85818 field_addr.name = "ppl_content";
85819#endif /* FREECIV_JSON_CONNECTION */
85820 {
85821 int i;
85822
85823#ifdef FREECIV_JSON_CONNECTION
85824 /* Enter array. */
85825 field_addr.sub_location = plocation_elem_new(0);
85826#endif /* FREECIV_JSON_CONNECTION */
85827
85828 for (i = 0; i < 5; i++) {
85829#ifdef FREECIV_JSON_CONNECTION
85830 field_addr.sub_location->number = i;
85831#endif /* FREECIV_JSON_CONNECTION */
85832
85833 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_content[i])) {
85834 RECEIVE_PACKET_FIELD_ERROR(ppl_content);
85835 }
85836 }
85837
85838#ifdef FREECIV_JSON_CONNECTION
85839 /* Exit array. */
85840 FC_FREE(field_addr.sub_location);
85841#endif /* FREECIV_JSON_CONNECTION */
85842 }
85843 }
85844 if (BV_ISSET(fields, 7)) {
85845 log_packet_detailed(" got field 'ppl_unhappy'");
85846#ifdef FREECIV_JSON_CONNECTION
85847 field_addr.name = "ppl_unhappy";
85848#endif /* FREECIV_JSON_CONNECTION */
85849 {
85850 int i;
85851
85852#ifdef FREECIV_JSON_CONNECTION
85853 /* Enter array. */
85854 field_addr.sub_location = plocation_elem_new(0);
85855#endif /* FREECIV_JSON_CONNECTION */
85856
85857 for (i = 0; i < 5; i++) {
85858#ifdef FREECIV_JSON_CONNECTION
85859 field_addr.sub_location->number = i;
85860#endif /* FREECIV_JSON_CONNECTION */
85861
85862 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_unhappy[i])) {
85863 RECEIVE_PACKET_FIELD_ERROR(ppl_unhappy);
85864 }
85865 }
85866
85867#ifdef FREECIV_JSON_CONNECTION
85868 /* Exit array. */
85869 FC_FREE(field_addr.sub_location);
85870#endif /* FREECIV_JSON_CONNECTION */
85871 }
85872 }
85873 if (BV_ISSET(fields, 8)) {
85874 log_packet_detailed(" got field 'ppl_angry'");
85875#ifdef FREECIV_JSON_CONNECTION
85876 field_addr.name = "ppl_angry";
85877#endif /* FREECIV_JSON_CONNECTION */
85878 {
85879 int i;
85880
85881#ifdef FREECIV_JSON_CONNECTION
85882 /* Enter array. */
85883 field_addr.sub_location = plocation_elem_new(0);
85884#endif /* FREECIV_JSON_CONNECTION */
85885
85886 for (i = 0; i < 5; i++) {
85887#ifdef FREECIV_JSON_CONNECTION
85888 field_addr.sub_location->number = i;
85889#endif /* FREECIV_JSON_CONNECTION */
85890
85891 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->ppl_angry[i])) {
85892 RECEIVE_PACKET_FIELD_ERROR(ppl_angry);
85893 }
85894 }
85895
85896#ifdef FREECIV_JSON_CONNECTION
85897 /* Exit array. */
85898 FC_FREE(field_addr.sub_location);
85899#endif /* FREECIV_JSON_CONNECTION */
85900 }
85901 }
85902 if (BV_ISSET(fields, 9)) {
85903 log_packet_detailed(" got field 'specialists_size'");
85904#ifdef FREECIV_JSON_CONNECTION
85905 field_addr.name = "specialists_size";
85906#endif /* FREECIV_JSON_CONNECTION */
85907 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists_size)) {
85908 RECEIVE_PACKET_FIELD_ERROR(specialists_size);
85909 }
85910 }
85911 if (BV_ISSET(fields, 10)) {
85912 log_packet_detailed(" got field 'specialists'");
85913#ifdef FREECIV_JSON_CONNECTION
85914 field_addr.name = "specialists";
85915#endif /* FREECIV_JSON_CONNECTION */
85916 if (real_packet->specialists_size > SP_MAX) {
85917 RECEIVE_PACKET_FIELD_ERROR(specialists, ": truncation array");
85918 }
85919 {
85920 int i;
85921
85922#ifdef FREECIV_JSON_CONNECTION
85923 /* Enter array. */
85924 field_addr.sub_location = plocation_elem_new(0);
85925#endif /* FREECIV_JSON_CONNECTION */
85926
85927 for (i = 0; i < real_packet->specialists_size; i++) {
85928#ifdef FREECIV_JSON_CONNECTION
85929 field_addr.sub_location->number = i;
85930#endif /* FREECIV_JSON_CONNECTION */
85931
85932 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->specialists[i])) {
85934 }
85935 }
85936
85937#ifdef FREECIV_JSON_CONNECTION
85938 /* Exit array. */
85939 FC_FREE(field_addr.sub_location);
85940#endif /* FREECIV_JSON_CONNECTION */
85941 }
85942 }
85943 if (BV_ISSET(fields, 11)) {
85944 log_packet_detailed(" got field 'food_stock'");
85945#ifdef FREECIV_JSON_CONNECTION
85946 field_addr.name = "food_stock";
85947#endif /* FREECIV_JSON_CONNECTION */
85948 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->food_stock)) {
85949 RECEIVE_PACKET_FIELD_ERROR(food_stock);
85950 }
85951 }
85952 if (BV_ISSET(fields, 12)) {
85953 log_packet_detailed(" got field 'shield_stock'");
85954#ifdef FREECIV_JSON_CONNECTION
85955 field_addr.name = "shield_stock";
85956#endif /* FREECIV_JSON_CONNECTION */
85957 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->shield_stock)) {
85958 RECEIVE_PACKET_FIELD_ERROR(shield_stock);
85959 }
85960 }
85961 real_packet->airlift = BV_ISSET(fields, 13);
85962 real_packet->debug = BV_ISSET(fields, 14);
85963 real_packet->did_buy = BV_ISSET(fields, 15);
85964 real_packet->did_sell = BV_ISSET(fields, 16);
85965 real_packet->was_happy = BV_ISSET(fields, 17);
85966 real_packet->had_famine = BV_ISSET(fields, 18);
85967 if (BV_ISSET(fields, 19)) {
85968 log_packet_detailed(" got field 'anarchy'");
85969#ifdef FREECIV_JSON_CONNECTION
85970 field_addr.name = "anarchy";
85971#endif /* FREECIV_JSON_CONNECTION */
85972 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->anarchy)) {
85974 }
85975 }
85976 if (BV_ISSET(fields, 20)) {
85977 log_packet_detailed(" got field 'rapture'");
85978#ifdef FREECIV_JSON_CONNECTION
85979 field_addr.name = "rapture";
85980#endif /* FREECIV_JSON_CONNECTION */
85981 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->rapture)) {
85983 }
85984 }
85985 if (BV_ISSET(fields, 21)) {
85986 log_packet_detailed(" got field 'steal'");
85987#ifdef FREECIV_JSON_CONNECTION
85988 field_addr.name = "steal";
85989#endif /* FREECIV_JSON_CONNECTION */
85990 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->steal)) {
85992 }
85993 }
85994 if (BV_ISSET(fields, 22)) {
85995 log_packet_detailed(" got field 'turn_founded'");
85996#ifdef FREECIV_JSON_CONNECTION
85997 field_addr.name = "turn_founded";
85998#endif /* FREECIV_JSON_CONNECTION */
85999 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_founded)) {
86000 RECEIVE_PACKET_FIELD_ERROR(turn_founded);
86001 }
86002 }
86003 if (BV_ISSET(fields, 23)) {
86004 log_packet_detailed(" got field 'turn_last_built'");
86005#ifdef FREECIV_JSON_CONNECTION
86006 field_addr.name = "turn_last_built";
86007#endif /* FREECIV_JSON_CONNECTION */
86008 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->turn_last_built)) {
86009 RECEIVE_PACKET_FIELD_ERROR(turn_last_built);
86010 }
86011 }
86012 if (BV_ISSET(fields, 24)) {
86013 log_packet_detailed(" got field 'built'");
86014#ifdef FREECIV_JSON_CONNECTION
86015 field_addr.name = "built";
86016#endif /* FREECIV_JSON_CONNECTION */
86018#ifdef FREECIV_JSON_CONNECTION
86019 /* Enter array (start at initial element). */
86020 field_addr.sub_location = plocation_elem_new(0);
86021 /* Enter diff array element (start at the index address). */
86022 field_addr.sub_location->sub_location = plocation_elem_new(0);
86023#endif /* FREECIV_JSON_CONNECTION */
86024
86025 while (TRUE) {
86026 int i;
86027
86028 /* Read next index */
86029#if B_LAST <= MAX_UINT8
86030 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
86031#else
86032 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
86033#endif
86035 }
86036
86037 if (i == B_LAST) {
86038 break;
86039 }
86040 if (i > B_LAST) {
86042 ": unexpected value %d "
86043 "(> B_LAST) in array diff",
86044 i);
86045 }
86046
86047#ifdef FREECIV_JSON_CONNECTION
86048 /* Content address. */
86049 field_addr.sub_location->sub_location->number = 1;
86050#endif /* FREECIV_JSON_CONNECTION */
86051
86052 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->built[i])) {
86054 }
86055
86056#ifdef FREECIV_JSON_CONNECTION
86057 /* Move to the next diff array element. */
86058 field_addr.sub_location->number++;
86059 /* Back to the index address. */
86060 field_addr.sub_location->sub_location->number = 0;
86061#endif /* FREECIV_JSON_CONNECTION */
86062 }
86063
86064#ifdef FREECIV_JSON_CONNECTION
86065 /* Exit diff array element. */
86066 FC_FREE(field_addr.sub_location->sub_location);
86067 /* Exit array. */
86068 FC_FREE(field_addr.sub_location);
86069#endif /* FREECIV_JSON_CONNECTION */
86070 }
86071 if (BV_ISSET(fields, 25)) {
86072 log_packet_detailed(" got field 'production_kind'");
86073#ifdef FREECIV_JSON_CONNECTION
86074 field_addr.name = "production_kind";
86075#endif /* FREECIV_JSON_CONNECTION */
86076 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_kind)) {
86077 RECEIVE_PACKET_FIELD_ERROR(production_kind);
86078 }
86079 }
86080 if (BV_ISSET(fields, 26)) {
86081 log_packet_detailed(" got field 'production_value'");
86082#ifdef FREECIV_JSON_CONNECTION
86083 field_addr.name = "production_value";
86084#endif /* FREECIV_JSON_CONNECTION */
86085 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->production_value)) {
86086 RECEIVE_PACKET_FIELD_ERROR(production_value);
86087 }
86088 }
86089
86090 if (NULL == old) {
86091 old = fc_malloc(sizeof(*old));
86092 *old = *real_packet;
86093 genhash_insert(*hash, old, old);
86094 } else {
86095 *old = *real_packet;
86096 }
86097
86098#endif /* FREECIV_DELTA_PROTOCOL */
86100}
86101
86102static int send_packet_edit_city_100(struct connection *pc, const struct packet_edit_city *packet)
86103{
86104 const struct packet_edit_city *real_packet = packet;
86105 int e;
86106#ifdef FREECIV_DELTA_PROTOCOL
86108 struct packet_edit_city *old;
86109 bool differ;
86110 struct genhash **hash = pc->phs.sent + PACKET_EDIT_CITY;
86111#endif /* FREECIV_DELTA_PROTOCOL */
86113#ifdef FREECIV_JSON_CONNECTION
86114 struct plocation field_addr;
86115 {
86119 }
86120#endif /* FREECIV_JSON_CONNECTION */
86121
86122 log_packet_detailed("packet_edit_city_100: sending info about (%d)",
86123 real_packet->id);
86124
86125#ifdef FREECIV_DELTA_PROTOCOL
86126 if (NULL == *hash) {
86128 NULL, NULL, NULL, free);
86129 }
86130 BV_CLR_ALL(fields);
86131
86132 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
86133 old = fc_malloc(sizeof(*old));
86134 *old = *real_packet;
86135 genhash_insert(*hash, old, old);
86136 memset(old, 0, sizeof(*old));
86137 }
86138 differ = (strcmp(old->name, real_packet->name) != 0);
86139 if (differ) {
86140 BV_SET(fields, 0);
86141 }
86142
86143 differ = (old->owner != real_packet->owner);
86144 if (differ) {
86145 BV_SET(fields, 1);
86146 }
86147
86148 differ = (old->original != real_packet->original);
86149 if (differ) {
86150 BV_SET(fields, 2);
86151 }
86152
86153 differ = (old->size != real_packet->size);
86154 if (differ) {
86155 BV_SET(fields, 3);
86156 }
86157
86158 differ = (old->history != real_packet->history);
86159 if (differ) {
86160 BV_SET(fields, 4);
86161 }
86162
86163 differ = FALSE;
86164 {
86165 int i;
86166
86167 for (i = 0; i < 5; i++) {
86168 differ = (old->ppl_happy[i] != real_packet->ppl_happy[i]);
86169 if (differ) {
86170 break;
86171 }
86172 }
86173 }
86174 if (differ) {
86175 BV_SET(fields, 5);
86176 }
86177
86178 differ = FALSE;
86179 {
86180 int i;
86181
86182 for (i = 0; i < 5; i++) {
86183 differ = (old->ppl_content[i] != real_packet->ppl_content[i]);
86184 if (differ) {
86185 break;
86186 }
86187 }
86188 }
86189 if (differ) {
86190 BV_SET(fields, 6);
86191 }
86192
86193 differ = FALSE;
86194 {
86195 int i;
86196
86197 for (i = 0; i < 5; i++) {
86198 differ = (old->ppl_unhappy[i] != real_packet->ppl_unhappy[i]);
86199 if (differ) {
86200 break;
86201 }
86202 }
86203 }
86204 if (differ) {
86205 BV_SET(fields, 7);
86206 }
86207
86208 differ = FALSE;
86209 {
86210 int i;
86211
86212 for (i = 0; i < 5; i++) {
86213 differ = (old->ppl_angry[i] != real_packet->ppl_angry[i]);
86214 if (differ) {
86215 break;
86216 }
86217 }
86218 }
86219 if (differ) {
86220 BV_SET(fields, 8);
86221 }
86222
86223 differ = (old->specialists_size != real_packet->specialists_size);
86224 if (differ) {
86225 BV_SET(fields, 9);
86226 }
86227
86228 differ = (old->specialists_size != real_packet->specialists_size);
86229 if (!differ) {
86230 int i;
86231
86232 for (i = 0; i < real_packet->specialists_size; i++) {
86233 differ = (old->specialists[i] != real_packet->specialists[i]);
86234 if (differ) {
86235 break;
86236 }
86237 }
86238 }
86239 if (differ) {
86240 BV_SET(fields, 10);
86241 }
86242
86243 differ = (old->food_stock != real_packet->food_stock);
86244 if (differ) {
86245 BV_SET(fields, 11);
86246 }
86247
86248 differ = (old->shield_stock != real_packet->shield_stock);
86249 if (differ) {
86250 BV_SET(fields, 12);
86251 }
86252
86253 if (packet->airlift) {
86254 BV_SET(fields, 13);
86255 }
86256
86257 if (packet->debug) {
86258 BV_SET(fields, 14);
86259 }
86260
86261 if (packet->did_buy) {
86262 BV_SET(fields, 15);
86263 }
86264
86265 if (packet->did_sell) {
86266 BV_SET(fields, 16);
86267 }
86268
86269 if (packet->was_happy) {
86270 BV_SET(fields, 17);
86271 }
86272
86273 if (packet->had_famine) {
86274 BV_SET(fields, 18);
86275 }
86276
86277 differ = (old->anarchy != real_packet->anarchy);
86278 if (differ) {
86279 BV_SET(fields, 19);
86280 }
86281
86282 differ = (old->rapture != real_packet->rapture);
86283 if (differ) {
86284 BV_SET(fields, 20);
86285 }
86286
86287 differ = (old->steal != real_packet->steal);
86288 if (differ) {
86289 BV_SET(fields, 21);
86290 }
86291
86292 differ = (old->turn_founded != real_packet->turn_founded);
86293 if (differ) {
86294 BV_SET(fields, 22);
86295 }
86296
86297 differ = (old->turn_last_built != real_packet->turn_last_built);
86298 if (differ) {
86299 BV_SET(fields, 23);
86300 }
86301
86302 differ = FALSE;
86303 {
86304 int i;
86305
86306 for (i = 0; i < B_LAST; i++) {
86307 differ = (old->built[i] != real_packet->built[i]);
86308 if (differ) {
86309 break;
86310 }
86311 }
86312 }
86313 if (differ) {
86314 BV_SET(fields, 24);
86315 }
86316
86317 differ = (old->production_kind != real_packet->production_kind);
86318 if (differ) {
86319 BV_SET(fields, 25);
86320 }
86321
86322 differ = (old->production_value != real_packet->production_value);
86323 if (differ) {
86324 BV_SET(fields, 26);
86325 }
86326
86327
86328#ifdef FREECIV_JSON_CONNECTION
86329 field_addr.name = "fields";
86330#endif /* FREECIV_JSON_CONNECTION */
86331 e = 0;
86332 e |= DIO_BV_PUT(&dout, &field_addr, fields);
86333 if (e) {
86334 log_packet_detailed("fields bitvector error detected");
86335 }
86336#ifdef FREECIV_JSON_CONNECTION
86337 field_addr.name = "id";
86338#endif /* FREECIV_JSON_CONNECTION */
86339 e = 0;
86340 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
86341 if (e) {
86342 log_packet_detailed("'id' field error detected");
86343 }
86344
86345 if (BV_ISSET(fields, 0)) {
86346 log_packet_detailed(" field 'name' has changed");
86347#ifdef FREECIV_JSON_CONNECTION
86348 field_addr.name = "name";
86349#endif /* FREECIV_JSON_CONNECTION */
86350 e = 0;
86351 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
86352 if (e) {
86353 log_packet_detailed("'name' field error detected");
86354 }
86355 }
86356 if (BV_ISSET(fields, 1)) {
86357 log_packet_detailed(" field 'owner' has changed");
86358#ifdef FREECIV_JSON_CONNECTION
86359 field_addr.name = "owner";
86360#endif /* FREECIV_JSON_CONNECTION */
86361 e = 0;
86362 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
86363 if (e) {
86364 log_packet_detailed("'owner' field error detected");
86365 }
86366 }
86367 if (BV_ISSET(fields, 2)) {
86368 log_packet_detailed(" field 'original' has changed");
86369#ifdef FREECIV_JSON_CONNECTION
86370 field_addr.name = "original";
86371#endif /* FREECIV_JSON_CONNECTION */
86372 e = 0;
86373 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
86374 if (e) {
86375 log_packet_detailed("'original' field error detected");
86376 }
86377 }
86378 if (BV_ISSET(fields, 3)) {
86379 log_packet_detailed(" field 'size' has changed");
86380#ifdef FREECIV_JSON_CONNECTION
86381 field_addr.name = "size";
86382#endif /* FREECIV_JSON_CONNECTION */
86383 e = 0;
86384 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
86385 if (e) {
86386 log_packet_detailed("'size' field error detected");
86387 }
86388 }
86389 if (BV_ISSET(fields, 4)) {
86390 log_packet_detailed(" field 'history' has changed");
86391#ifdef FREECIV_JSON_CONNECTION
86392 field_addr.name = "history";
86393#endif /* FREECIV_JSON_CONNECTION */
86394 e = 0;
86395 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
86396 if (e) {
86397 log_packet_detailed("'history' field error detected");
86398 }
86399 }
86400 if (BV_ISSET(fields, 5)) {
86401 log_packet_detailed(" field 'ppl_happy' has changed");
86402#ifdef FREECIV_JSON_CONNECTION
86403 field_addr.name = "ppl_happy";
86404#endif /* FREECIV_JSON_CONNECTION */
86405 e = 0;
86406 {
86407 int i;
86408
86409#ifdef FREECIV_JSON_CONNECTION
86410 /* Create the array. */
86411 e |= DIO_PUT(farray, &dout, &field_addr, 5);
86412
86413 /* Enter the array. */
86414 field_addr.sub_location = plocation_elem_new(0);
86415#endif /* FREECIV_JSON_CONNECTION */
86416
86417 for (i = 0; i < 5; i++) {
86418#ifdef FREECIV_JSON_CONNECTION
86419 /* Next array element. */
86420 field_addr.sub_location->number = i;
86421#endif /* FREECIV_JSON_CONNECTION */
86422
86423 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
86424 }
86425
86426#ifdef FREECIV_JSON_CONNECTION
86427 /* Exit array. */
86428 FC_FREE(field_addr.sub_location);
86429#endif /* FREECIV_JSON_CONNECTION */
86430 }
86431 if (e) {
86432 log_packet_detailed("'ppl_happy' field error detected");
86433 }
86434 }
86435 if (BV_ISSET(fields, 6)) {
86436 log_packet_detailed(" field 'ppl_content' has changed");
86437#ifdef FREECIV_JSON_CONNECTION
86438 field_addr.name = "ppl_content";
86439#endif /* FREECIV_JSON_CONNECTION */
86440 e = 0;
86441 {
86442 int i;
86443
86444#ifdef FREECIV_JSON_CONNECTION
86445 /* Create the array. */
86446 e |= DIO_PUT(farray, &dout, &field_addr, 5);
86447
86448 /* Enter the array. */
86449 field_addr.sub_location = plocation_elem_new(0);
86450#endif /* FREECIV_JSON_CONNECTION */
86451
86452 for (i = 0; i < 5; i++) {
86453#ifdef FREECIV_JSON_CONNECTION
86454 /* Next array element. */
86455 field_addr.sub_location->number = i;
86456#endif /* FREECIV_JSON_CONNECTION */
86457
86458 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
86459 }
86460
86461#ifdef FREECIV_JSON_CONNECTION
86462 /* Exit array. */
86463 FC_FREE(field_addr.sub_location);
86464#endif /* FREECIV_JSON_CONNECTION */
86465 }
86466 if (e) {
86467 log_packet_detailed("'ppl_content' field error detected");
86468 }
86469 }
86470 if (BV_ISSET(fields, 7)) {
86471 log_packet_detailed(" field 'ppl_unhappy' has changed");
86472#ifdef FREECIV_JSON_CONNECTION
86473 field_addr.name = "ppl_unhappy";
86474#endif /* FREECIV_JSON_CONNECTION */
86475 e = 0;
86476 {
86477 int i;
86478
86479#ifdef FREECIV_JSON_CONNECTION
86480 /* Create the array. */
86481 e |= DIO_PUT(farray, &dout, &field_addr, 5);
86482
86483 /* Enter the array. */
86484 field_addr.sub_location = plocation_elem_new(0);
86485#endif /* FREECIV_JSON_CONNECTION */
86486
86487 for (i = 0; i < 5; i++) {
86488#ifdef FREECIV_JSON_CONNECTION
86489 /* Next array element. */
86490 field_addr.sub_location->number = i;
86491#endif /* FREECIV_JSON_CONNECTION */
86492
86493 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
86494 }
86495
86496#ifdef FREECIV_JSON_CONNECTION
86497 /* Exit array. */
86498 FC_FREE(field_addr.sub_location);
86499#endif /* FREECIV_JSON_CONNECTION */
86500 }
86501 if (e) {
86502 log_packet_detailed("'ppl_unhappy' field error detected");
86503 }
86504 }
86505 if (BV_ISSET(fields, 8)) {
86506 log_packet_detailed(" field 'ppl_angry' has changed");
86507#ifdef FREECIV_JSON_CONNECTION
86508 field_addr.name = "ppl_angry";
86509#endif /* FREECIV_JSON_CONNECTION */
86510 e = 0;
86511 {
86512 int i;
86513
86514#ifdef FREECIV_JSON_CONNECTION
86515 /* Create the array. */
86516 e |= DIO_PUT(farray, &dout, &field_addr, 5);
86517
86518 /* Enter the array. */
86519 field_addr.sub_location = plocation_elem_new(0);
86520#endif /* FREECIV_JSON_CONNECTION */
86521
86522 for (i = 0; i < 5; i++) {
86523#ifdef FREECIV_JSON_CONNECTION
86524 /* Next array element. */
86525 field_addr.sub_location->number = i;
86526#endif /* FREECIV_JSON_CONNECTION */
86527
86528 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
86529 }
86530
86531#ifdef FREECIV_JSON_CONNECTION
86532 /* Exit array. */
86533 FC_FREE(field_addr.sub_location);
86534#endif /* FREECIV_JSON_CONNECTION */
86535 }
86536 if (e) {
86537 log_packet_detailed("'ppl_angry' field error detected");
86538 }
86539 }
86540 if (BV_ISSET(fields, 9)) {
86541 log_packet_detailed(" field 'specialists_size' has changed");
86542#ifdef FREECIV_JSON_CONNECTION
86543 field_addr.name = "specialists_size";
86544#endif /* FREECIV_JSON_CONNECTION */
86545 e = 0;
86546 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
86547 if (e) {
86548 log_packet_detailed("'specialists_size' field error detected");
86549 }
86550 }
86551 if (BV_ISSET(fields, 10)) {
86552 log_packet_detailed(" field 'specialists' has changed");
86553#ifdef FREECIV_JSON_CONNECTION
86554 field_addr.name = "specialists";
86555#endif /* FREECIV_JSON_CONNECTION */
86556 e = 0;
86557 {
86558 int i;
86559
86560#ifdef FREECIV_JSON_CONNECTION
86561 /* Create the array. */
86562 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
86563
86564 /* Enter the array. */
86565 field_addr.sub_location = plocation_elem_new(0);
86566#endif /* FREECIV_JSON_CONNECTION */
86567
86568 for (i = 0; i < real_packet->specialists_size; i++) {
86569#ifdef FREECIV_JSON_CONNECTION
86570 /* Next array element. */
86571 field_addr.sub_location->number = i;
86572#endif /* FREECIV_JSON_CONNECTION */
86573
86574 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
86575 }
86576
86577#ifdef FREECIV_JSON_CONNECTION
86578 /* Exit array. */
86579 FC_FREE(field_addr.sub_location);
86580#endif /* FREECIV_JSON_CONNECTION */
86581 }
86582 if (e) {
86583 log_packet_detailed("'specialists' field error detected");
86584 }
86585 }
86586 if (BV_ISSET(fields, 11)) {
86587 log_packet_detailed(" field 'food_stock' has changed");
86588#ifdef FREECIV_JSON_CONNECTION
86589 field_addr.name = "food_stock";
86590#endif /* FREECIV_JSON_CONNECTION */
86591 e = 0;
86592 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
86593 if (e) {
86594 log_packet_detailed("'food_stock' field error detected");
86595 }
86596 }
86597 if (BV_ISSET(fields, 12)) {
86598 log_packet_detailed(" field 'shield_stock' has changed");
86599#ifdef FREECIV_JSON_CONNECTION
86600 field_addr.name = "shield_stock";
86601#endif /* FREECIV_JSON_CONNECTION */
86602 e = 0;
86603 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
86604 if (e) {
86605 log_packet_detailed("'shield_stock' field error detected");
86606 }
86607 }
86608 /* field 13 is folded into the header */
86609 /* field 14 is folded into the header */
86610 /* field 15 is folded into the header */
86611 /* field 16 is folded into the header */
86612 /* field 17 is folded into the header */
86613 /* field 18 is folded into the header */
86614 if (BV_ISSET(fields, 19)) {
86615 log_packet_detailed(" field 'anarchy' has changed");
86616#ifdef FREECIV_JSON_CONNECTION
86617 field_addr.name = "anarchy";
86618#endif /* FREECIV_JSON_CONNECTION */
86619 e = 0;
86620 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
86621 if (e) {
86622 log_packet_detailed("'anarchy' field error detected");
86623 }
86624 }
86625 if (BV_ISSET(fields, 20)) {
86626 log_packet_detailed(" field 'rapture' has changed");
86627#ifdef FREECIV_JSON_CONNECTION
86628 field_addr.name = "rapture";
86629#endif /* FREECIV_JSON_CONNECTION */
86630 e = 0;
86631 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
86632 if (e) {
86633 log_packet_detailed("'rapture' field error detected");
86634 }
86635 }
86636 if (BV_ISSET(fields, 21)) {
86637 log_packet_detailed(" field 'steal' has changed");
86638#ifdef FREECIV_JSON_CONNECTION
86639 field_addr.name = "steal";
86640#endif /* FREECIV_JSON_CONNECTION */
86641 e = 0;
86642 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
86643 if (e) {
86644 log_packet_detailed("'steal' field error detected");
86645 }
86646 }
86647 if (BV_ISSET(fields, 22)) {
86648 log_packet_detailed(" field 'turn_founded' has changed");
86649#ifdef FREECIV_JSON_CONNECTION
86650 field_addr.name = "turn_founded";
86651#endif /* FREECIV_JSON_CONNECTION */
86652 e = 0;
86653 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
86654 if (e) {
86655 log_packet_detailed("'turn_founded' field error detected");
86656 }
86657 }
86658 if (BV_ISSET(fields, 23)) {
86659 log_packet_detailed(" field 'turn_last_built' has changed");
86660#ifdef FREECIV_JSON_CONNECTION
86661 field_addr.name = "turn_last_built";
86662#endif /* FREECIV_JSON_CONNECTION */
86663 e = 0;
86664 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
86665 if (e) {
86666 log_packet_detailed("'turn_last_built' field error detected");
86667 }
86668 }
86669 if (BV_ISSET(fields, 24)) {
86670 log_packet_detailed(" field 'built' has changed");
86671#ifdef FREECIV_JSON_CONNECTION
86672 field_addr.name = "built";
86673#endif /* FREECIV_JSON_CONNECTION */
86674 e = 0;
86676 {
86677 int i;
86678
86679#ifdef FREECIV_JSON_CONNECTION
86680 size_t count_i = 0;
86681
86682 /* Create the array. */
86683 e |= DIO_PUT(farray, &dout, &field_addr, 0);
86684
86685 /* Enter array. */
86686 field_addr.sub_location = plocation_elem_new(0);
86687#endif /* FREECIV_JSON_CONNECTION */
86688
86689 for (i = 0; i < B_LAST; i++) {
86690 differ = (old->built[i] != real_packet->built[i]);
86691
86692 if (differ) {
86693#ifdef FREECIV_JSON_CONNECTION
86694 /* Append next diff array element. */
86695 field_addr.sub_location->number = -1;
86696
86697 /* Create the diff array element. */
86698 e |= DIO_PUT(farray, &dout, &field_addr, 2);
86699
86700 /* Enter diff array element (start at the index address). */
86701 field_addr.sub_location->number = count_i++;
86702 field_addr.sub_location->sub_location = plocation_elem_new(0);
86703#endif /* FREECIV_JSON_CONNECTION */
86704
86705 /* Write the index */
86706#if B_LAST <= MAX_UINT8
86707 e |= DIO_PUT(uint8, &dout, &field_addr, i);
86708#else
86709 e |= DIO_PUT(uint16, &dout, &field_addr, i);
86710#endif
86711
86712#ifdef FREECIV_JSON_CONNECTION
86713 /* Content address. */
86714 field_addr.sub_location->sub_location->number = 1;
86715#endif /* FREECIV_JSON_CONNECTION */
86716
86717 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
86718
86719#ifdef FREECIV_JSON_CONNECTION
86720 /* Exit diff array element. */
86721 FC_FREE(field_addr.sub_location->sub_location);
86722#endif /* FREECIV_JSON_CONNECTION */
86723 }
86724 }
86725
86726#ifdef FREECIV_JSON_CONNECTION
86727 /* Append diff array element. */
86728 field_addr.sub_location->number = -1;
86729
86730 /* Create the terminating diff array element. */
86731 e |= DIO_PUT(farray, &dout, &field_addr, 1);
86732
86733 /* Enter diff array element (start at the index address). */
86734 field_addr.sub_location->number = count_i;
86735 field_addr.sub_location->sub_location = plocation_elem_new(0);
86736#endif /* FREECIV_JSON_CONNECTION */
86737
86738 /* Write the sentinel value */
86739#if B_LAST <= MAX_UINT8
86740 e |= DIO_PUT(uint8, &dout, &field_addr, B_LAST);
86741#else
86742 e |= DIO_PUT(uint16, &dout, &field_addr, B_LAST);
86743#endif
86744
86745#ifdef FREECIV_JSON_CONNECTION
86746 /* Exit diff array element. */
86747 FC_FREE(field_addr.sub_location->sub_location);
86748
86749 /* Exit array. */
86750 FC_FREE(field_addr.sub_location);
86751#endif /* FREECIV_JSON_CONNECTION */
86752 }
86753 if (e) {
86754 log_packet_detailed("'built' field error detected");
86755 }
86756 }
86757 if (BV_ISSET(fields, 25)) {
86758 log_packet_detailed(" field 'production_kind' has changed");
86759#ifdef FREECIV_JSON_CONNECTION
86760 field_addr.name = "production_kind";
86761#endif /* FREECIV_JSON_CONNECTION */
86762 e = 0;
86763 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
86764 if (e) {
86765 log_packet_detailed("'production_kind' field error detected");
86766 }
86767 }
86768 if (BV_ISSET(fields, 26)) {
86769 log_packet_detailed(" field 'production_value' has changed");
86770#ifdef FREECIV_JSON_CONNECTION
86771 field_addr.name = "production_value";
86772#endif /* FREECIV_JSON_CONNECTION */
86773 e = 0;
86774 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
86775 if (e) {
86776 log_packet_detailed("'production_value' field error detected");
86777 }
86778 }
86779
86780 *old = *real_packet;
86781#endif /* FREECIV_DELTA_PROTOCOL */
86782#ifndef FREECIV_DELTA_PROTOCOL
86783#ifdef FREECIV_JSON_CONNECTION
86784 field_addr.name = "id";
86785#endif /* FREECIV_JSON_CONNECTION */
86786 e = 0;
86787 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
86788 if (e) {
86789 log_packet_detailed("'id' field error detected");
86790 }
86791#ifdef FREECIV_JSON_CONNECTION
86792 field_addr.name = "name";
86793#endif /* FREECIV_JSON_CONNECTION */
86794 e = 0;
86795 e |= DIO_PUT(estring, &dout, &field_addr, real_packet->name);
86796 if (e) {
86797 log_packet_detailed("'name' field error detected");
86798 }
86799#ifdef FREECIV_JSON_CONNECTION
86800 field_addr.name = "owner";
86801#endif /* FREECIV_JSON_CONNECTION */
86802 e = 0;
86803 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->owner);
86804 if (e) {
86805 log_packet_detailed("'owner' field error detected");
86806 }
86807#ifdef FREECIV_JSON_CONNECTION
86808 field_addr.name = "original";
86809#endif /* FREECIV_JSON_CONNECTION */
86810 e = 0;
86811 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->original);
86812 if (e) {
86813 log_packet_detailed("'original' field error detected");
86814 }
86815#ifdef FREECIV_JSON_CONNECTION
86816 field_addr.name = "size";
86817#endif /* FREECIV_JSON_CONNECTION */
86818 e = 0;
86819 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
86820 if (e) {
86821 log_packet_detailed("'size' field error detected");
86822 }
86823#ifdef FREECIV_JSON_CONNECTION
86824 field_addr.name = "history";
86825#endif /* FREECIV_JSON_CONNECTION */
86826 e = 0;
86827 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->history);
86828 if (e) {
86829 log_packet_detailed("'history' field error detected");
86830 }
86831#ifdef FREECIV_JSON_CONNECTION
86832 field_addr.name = "ppl_happy";
86833#endif /* FREECIV_JSON_CONNECTION */
86834 e = 0;
86835 {
86836 int i;
86837
86838#ifdef FREECIV_JSON_CONNECTION
86839 /* Create the array. */
86840 e |= DIO_PUT(farray, &dout, &field_addr, 5);
86841
86842 /* Enter the array. */
86843 field_addr.sub_location = plocation_elem_new(0);
86844#endif /* FREECIV_JSON_CONNECTION */
86845
86846 for (i = 0; i < 5; i++) {
86847#ifdef FREECIV_JSON_CONNECTION
86848 /* Next array element. */
86849 field_addr.sub_location->number = i;
86850#endif /* FREECIV_JSON_CONNECTION */
86851
86852 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_happy[i]);
86853 }
86854
86855#ifdef FREECIV_JSON_CONNECTION
86856 /* Exit array. */
86857 FC_FREE(field_addr.sub_location);
86858#endif /* FREECIV_JSON_CONNECTION */
86859 }
86860 if (e) {
86861 log_packet_detailed("'ppl_happy' field error detected");
86862 }
86863#ifdef FREECIV_JSON_CONNECTION
86864 field_addr.name = "ppl_content";
86865#endif /* FREECIV_JSON_CONNECTION */
86866 e = 0;
86867 {
86868 int i;
86869
86870#ifdef FREECIV_JSON_CONNECTION
86871 /* Create the array. */
86872 e |= DIO_PUT(farray, &dout, &field_addr, 5);
86873
86874 /* Enter the array. */
86875 field_addr.sub_location = plocation_elem_new(0);
86876#endif /* FREECIV_JSON_CONNECTION */
86877
86878 for (i = 0; i < 5; i++) {
86879#ifdef FREECIV_JSON_CONNECTION
86880 /* Next array element. */
86881 field_addr.sub_location->number = i;
86882#endif /* FREECIV_JSON_CONNECTION */
86883
86884 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_content[i]);
86885 }
86886
86887#ifdef FREECIV_JSON_CONNECTION
86888 /* Exit array. */
86889 FC_FREE(field_addr.sub_location);
86890#endif /* FREECIV_JSON_CONNECTION */
86891 }
86892 if (e) {
86893 log_packet_detailed("'ppl_content' field error detected");
86894 }
86895#ifdef FREECIV_JSON_CONNECTION
86896 field_addr.name = "ppl_unhappy";
86897#endif /* FREECIV_JSON_CONNECTION */
86898 e = 0;
86899 {
86900 int i;
86901
86902#ifdef FREECIV_JSON_CONNECTION
86903 /* Create the array. */
86904 e |= DIO_PUT(farray, &dout, &field_addr, 5);
86905
86906 /* Enter the array. */
86907 field_addr.sub_location = plocation_elem_new(0);
86908#endif /* FREECIV_JSON_CONNECTION */
86909
86910 for (i = 0; i < 5; i++) {
86911#ifdef FREECIV_JSON_CONNECTION
86912 /* Next array element. */
86913 field_addr.sub_location->number = i;
86914#endif /* FREECIV_JSON_CONNECTION */
86915
86916 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_unhappy[i]);
86917 }
86918
86919#ifdef FREECIV_JSON_CONNECTION
86920 /* Exit array. */
86921 FC_FREE(field_addr.sub_location);
86922#endif /* FREECIV_JSON_CONNECTION */
86923 }
86924 if (e) {
86925 log_packet_detailed("'ppl_unhappy' field error detected");
86926 }
86927#ifdef FREECIV_JSON_CONNECTION
86928 field_addr.name = "ppl_angry";
86929#endif /* FREECIV_JSON_CONNECTION */
86930 e = 0;
86931 {
86932 int i;
86933
86934#ifdef FREECIV_JSON_CONNECTION
86935 /* Create the array. */
86936 e |= DIO_PUT(farray, &dout, &field_addr, 5);
86937
86938 /* Enter the array. */
86939 field_addr.sub_location = plocation_elem_new(0);
86940#endif /* FREECIV_JSON_CONNECTION */
86941
86942 for (i = 0; i < 5; i++) {
86943#ifdef FREECIV_JSON_CONNECTION
86944 /* Next array element. */
86945 field_addr.sub_location->number = i;
86946#endif /* FREECIV_JSON_CONNECTION */
86947
86948 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->ppl_angry[i]);
86949 }
86950
86951#ifdef FREECIV_JSON_CONNECTION
86952 /* Exit array. */
86953 FC_FREE(field_addr.sub_location);
86954#endif /* FREECIV_JSON_CONNECTION */
86955 }
86956 if (e) {
86957 log_packet_detailed("'ppl_angry' field error detected");
86958 }
86959#ifdef FREECIV_JSON_CONNECTION
86960 field_addr.name = "specialists_size";
86961#endif /* FREECIV_JSON_CONNECTION */
86962 e = 0;
86963 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists_size);
86964 if (e) {
86965 log_packet_detailed("'specialists_size' field error detected");
86966 }
86967#ifdef FREECIV_JSON_CONNECTION
86968 field_addr.name = "specialists";
86969#endif /* FREECIV_JSON_CONNECTION */
86970 e = 0;
86971 {
86972 int i;
86973
86974#ifdef FREECIV_JSON_CONNECTION
86975 /* Create the array. */
86976 e |= DIO_PUT(farray, &dout, &field_addr, real_packet->specialists_size);
86977
86978 /* Enter the array. */
86979 field_addr.sub_location = plocation_elem_new(0);
86980#endif /* FREECIV_JSON_CONNECTION */
86981
86982 for (i = 0; i < real_packet->specialists_size; i++) {
86983#ifdef FREECIV_JSON_CONNECTION
86984 /* Next array element. */
86985 field_addr.sub_location->number = i;
86986#endif /* FREECIV_JSON_CONNECTION */
86987
86988 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->specialists[i]);
86989 }
86990
86991#ifdef FREECIV_JSON_CONNECTION
86992 /* Exit array. */
86993 FC_FREE(field_addr.sub_location);
86994#endif /* FREECIV_JSON_CONNECTION */
86995 }
86996 if (e) {
86997 log_packet_detailed("'specialists' field error detected");
86998 }
86999#ifdef FREECIV_JSON_CONNECTION
87000 field_addr.name = "food_stock";
87001#endif /* FREECIV_JSON_CONNECTION */
87002 e = 0;
87003 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->food_stock);
87004 if (e) {
87005 log_packet_detailed("'food_stock' field error detected");
87006 }
87007#ifdef FREECIV_JSON_CONNECTION
87008 field_addr.name = "shield_stock";
87009#endif /* FREECIV_JSON_CONNECTION */
87010 e = 0;
87011 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->shield_stock);
87012 if (e) {
87013 log_packet_detailed("'shield_stock' field error detected");
87014 }
87015#ifdef FREECIV_JSON_CONNECTION
87016 field_addr.name = "airlift";
87017#endif /* FREECIV_JSON_CONNECTION */
87018 e = 0;
87019 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->airlift);
87020 if (e) {
87021 log_packet_detailed("'airlift' field error detected");
87022 }
87023#ifdef FREECIV_JSON_CONNECTION
87024 field_addr.name = "debug";
87025#endif /* FREECIV_JSON_CONNECTION */
87026 e = 0;
87027 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->debug);
87028 if (e) {
87029 log_packet_detailed("'debug' field error detected");
87030 }
87031#ifdef FREECIV_JSON_CONNECTION
87032 field_addr.name = "did_buy";
87033#endif /* FREECIV_JSON_CONNECTION */
87034 e = 0;
87035 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_buy);
87036 if (e) {
87037 log_packet_detailed("'did_buy' field error detected");
87038 }
87039#ifdef FREECIV_JSON_CONNECTION
87040 field_addr.name = "did_sell";
87041#endif /* FREECIV_JSON_CONNECTION */
87042 e = 0;
87043 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->did_sell);
87044 if (e) {
87045 log_packet_detailed("'did_sell' field error detected");
87046 }
87047#ifdef FREECIV_JSON_CONNECTION
87048 field_addr.name = "was_happy";
87049#endif /* FREECIV_JSON_CONNECTION */
87050 e = 0;
87051 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->was_happy);
87052 if (e) {
87053 log_packet_detailed("'was_happy' field error detected");
87054 }
87055#ifdef FREECIV_JSON_CONNECTION
87056 field_addr.name = "had_famine";
87057#endif /* FREECIV_JSON_CONNECTION */
87058 e = 0;
87059 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->had_famine);
87060 if (e) {
87061 log_packet_detailed("'had_famine' field error detected");
87062 }
87063#ifdef FREECIV_JSON_CONNECTION
87064 field_addr.name = "anarchy";
87065#endif /* FREECIV_JSON_CONNECTION */
87066 e = 0;
87067 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->anarchy);
87068 if (e) {
87069 log_packet_detailed("'anarchy' field error detected");
87070 }
87071#ifdef FREECIV_JSON_CONNECTION
87072 field_addr.name = "rapture";
87073#endif /* FREECIV_JSON_CONNECTION */
87074 e = 0;
87075 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->rapture);
87076 if (e) {
87077 log_packet_detailed("'rapture' field error detected");
87078 }
87079#ifdef FREECIV_JSON_CONNECTION
87080 field_addr.name = "steal";
87081#endif /* FREECIV_JSON_CONNECTION */
87082 e = 0;
87083 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->steal);
87084 if (e) {
87085 log_packet_detailed("'steal' field error detected");
87086 }
87087#ifdef FREECIV_JSON_CONNECTION
87088 field_addr.name = "turn_founded";
87089#endif /* FREECIV_JSON_CONNECTION */
87090 e = 0;
87091 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_founded);
87092 if (e) {
87093 log_packet_detailed("'turn_founded' field error detected");
87094 }
87095#ifdef FREECIV_JSON_CONNECTION
87096 field_addr.name = "turn_last_built";
87097#endif /* FREECIV_JSON_CONNECTION */
87098 e = 0;
87099 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->turn_last_built);
87100 if (e) {
87101 log_packet_detailed("'turn_last_built' field error detected");
87102 }
87103#ifdef FREECIV_JSON_CONNECTION
87104 field_addr.name = "built";
87105#endif /* FREECIV_JSON_CONNECTION */
87106 e = 0;
87107 {
87108 int i;
87109
87110#ifdef FREECIV_JSON_CONNECTION
87111 /* Create the array. */
87112 e |= DIO_PUT(farray, &dout, &field_addr, B_LAST);
87113
87114 /* Enter the array. */
87115 field_addr.sub_location = plocation_elem_new(0);
87116#endif /* FREECIV_JSON_CONNECTION */
87117
87118 for (i = 0; i < B_LAST; i++) {
87119#ifdef FREECIV_JSON_CONNECTION
87120 /* Next array element. */
87121 field_addr.sub_location->number = i;
87122#endif /* FREECIV_JSON_CONNECTION */
87123
87124 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->built[i]);
87125 }
87126
87127#ifdef FREECIV_JSON_CONNECTION
87128 /* Exit array. */
87129 FC_FREE(field_addr.sub_location);
87130#endif /* FREECIV_JSON_CONNECTION */
87131 }
87132 if (e) {
87133 log_packet_detailed("'built' field error detected");
87134 }
87135#ifdef FREECIV_JSON_CONNECTION
87136 field_addr.name = "production_kind";
87137#endif /* FREECIV_JSON_CONNECTION */
87138 e = 0;
87139 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_kind);
87140 if (e) {
87141 log_packet_detailed("'production_kind' field error detected");
87142 }
87143#ifdef FREECIV_JSON_CONNECTION
87144 field_addr.name = "production_value";
87145#endif /* FREECIV_JSON_CONNECTION */
87146 e = 0;
87147 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->production_value);
87148 if (e) {
87149 log_packet_detailed("'production_value' field error detected");
87150 }
87151
87152#endif
87154}
87155
87156int send_packet_edit_city(struct connection *pc, const struct packet_edit_city *packet)
87157{
87158 if (!pc->used) {
87159 log_error("WARNING: trying to send data to the closed connection %s",
87161 return -1;
87162 }
87163 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_CITY].packet != NULL, -1,
87164 "Handler for PACKET_EDIT_CITY not installed");
87165 return pc->phs.handlers->send[PACKET_EDIT_CITY].packet(pc, packet);
87166}
87167
87168#ifdef FREECIV_DELTA_PROTOCOL
87169#define hash_packet_edit_player_create_100 hash_const
87170
87171#define cmp_packet_edit_player_create_100 cmp_const
87172
87174#endif /* FREECIV_DELTA_PROTOCOL */
87175
87177{
87178#ifdef FREECIV_DELTA_PROTOCOL
87180 struct packet_edit_player_create *old;
87181 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_CREATE;
87182#endif /* FREECIV_DELTA_PROTOCOL */
87184#ifdef FREECIV_JSON_CONNECTION
87185 struct plocation field_addr;
87186 {
87190 }
87191#endif /* FREECIV_JSON_CONNECTION */
87192
87193#ifdef FREECIV_DELTA_PROTOCOL
87194#ifdef FREECIV_JSON_CONNECTION
87195 field_addr.name = "fields";
87196#endif /* FREECIV_JSON_CONNECTION */
87197 DIO_BV_GET(&din, &field_addr, fields);
87198
87199#else /* FREECIV_DELTA_PROTOCOL */
87200#ifdef FREECIV_JSON_CONNECTION
87201 field_addr.name = "tag";
87202#endif /* FREECIV_JSON_CONNECTION */
87203 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
87205 }
87206#endif
87207 log_packet_detailed("packet_edit_player_create_100: got info about ()");
87208
87209#ifdef FREECIV_DELTA_PROTOCOL
87210 if (NULL == *hash) {
87212 NULL, NULL, NULL, free);
87213 }
87214
87215 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87216 *real_packet = *old;
87217 } else {
87218 log_packet_detailed(" no old info");
87219 memset(real_packet, 0, sizeof(*real_packet));
87220 }
87221
87222 if (BV_ISSET(fields, 0)) {
87223 log_packet_detailed(" got field 'tag'");
87224#ifdef FREECIV_JSON_CONNECTION
87225 field_addr.name = "tag";
87226#endif /* FREECIV_JSON_CONNECTION */
87227 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
87229 }
87230 }
87231
87232 if (NULL == old) {
87233 old = fc_malloc(sizeof(*old));
87234 *old = *real_packet;
87235 genhash_insert(*hash, old, old);
87236 } else {
87237 *old = *real_packet;
87238 }
87239
87240#endif /* FREECIV_DELTA_PROTOCOL */
87242}
87243
87245{
87246 const struct packet_edit_player_create *real_packet = packet;
87247 int e;
87248#ifdef FREECIV_DELTA_PROTOCOL
87250 struct packet_edit_player_create *old;
87251 bool differ;
87252 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_CREATE;
87253#endif /* FREECIV_DELTA_PROTOCOL */
87255#ifdef FREECIV_JSON_CONNECTION
87256 struct plocation field_addr;
87257 {
87261 }
87262#endif /* FREECIV_JSON_CONNECTION */
87263
87264 log_packet_detailed("packet_edit_player_create_100: sending info about ()");
87265
87266#ifdef FREECIV_DELTA_PROTOCOL
87267 if (NULL == *hash) {
87269 NULL, NULL, NULL, free);
87270 }
87271 BV_CLR_ALL(fields);
87272
87273 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
87274 old = fc_malloc(sizeof(*old));
87275 *old = *real_packet;
87276 genhash_insert(*hash, old, old);
87277 memset(old, 0, sizeof(*old));
87278 }
87279 differ = (old->tag != real_packet->tag);
87280 if (differ) {
87281 BV_SET(fields, 0);
87282 }
87283
87284
87285#ifdef FREECIV_JSON_CONNECTION
87286 field_addr.name = "fields";
87287#endif /* FREECIV_JSON_CONNECTION */
87288 e = 0;
87289 e |= DIO_BV_PUT(&dout, &field_addr, fields);
87290 if (e) {
87291 log_packet_detailed("fields bitvector error detected");
87292 }
87293
87294 if (BV_ISSET(fields, 0)) {
87295 log_packet_detailed(" field 'tag' has changed");
87296#ifdef FREECIV_JSON_CONNECTION
87297 field_addr.name = "tag";
87298#endif /* FREECIV_JSON_CONNECTION */
87299 e = 0;
87300 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
87301 if (e) {
87302 log_packet_detailed("'tag' field error detected");
87303 }
87304 }
87305
87306 *old = *real_packet;
87307#endif /* FREECIV_DELTA_PROTOCOL */
87308#ifndef FREECIV_DELTA_PROTOCOL
87309#ifdef FREECIV_JSON_CONNECTION
87310 field_addr.name = "tag";
87311#endif /* FREECIV_JSON_CONNECTION */
87312 e = 0;
87313 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
87314 if (e) {
87315 log_packet_detailed("'tag' field error detected");
87316 }
87317
87318#endif
87320}
87321
87323{
87324 if (!pc->used) {
87325 log_error("WARNING: trying to send data to the closed connection %s",
87327 return -1;
87328 }
87329 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet != NULL, -1,
87330 "Handler for PACKET_EDIT_PLAYER_CREATE not installed");
87331 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_CREATE].packet(pc, packet);
87332}
87333
87335{
87336 struct packet_edit_player_create packet, *real_packet = &packet;
87337
87338 real_packet->tag = tag;
87339
87341}
87342
87343#ifdef FREECIV_DELTA_PROTOCOL
87344#define hash_packet_edit_player_remove_100 hash_const
87345
87346#define cmp_packet_edit_player_remove_100 cmp_const
87347
87349#endif /* FREECIV_DELTA_PROTOCOL */
87350
87352{
87353#ifdef FREECIV_DELTA_PROTOCOL
87355 struct packet_edit_player_remove *old;
87356 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_REMOVE;
87357#endif /* FREECIV_DELTA_PROTOCOL */
87359#ifdef FREECIV_JSON_CONNECTION
87360 struct plocation field_addr;
87361 {
87365 }
87366#endif /* FREECIV_JSON_CONNECTION */
87367
87368#ifdef FREECIV_DELTA_PROTOCOL
87369#ifdef FREECIV_JSON_CONNECTION
87370 field_addr.name = "fields";
87371#endif /* FREECIV_JSON_CONNECTION */
87372 DIO_BV_GET(&din, &field_addr, fields);
87373
87374#else /* FREECIV_DELTA_PROTOCOL */
87375#ifdef FREECIV_JSON_CONNECTION
87376 field_addr.name = "id";
87377#endif /* FREECIV_JSON_CONNECTION */
87378 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
87380 }
87381#endif
87382 log_packet_detailed("packet_edit_player_remove_100: got info about ()");
87383
87384#ifdef FREECIV_DELTA_PROTOCOL
87385 if (NULL == *hash) {
87387 NULL, NULL, NULL, free);
87388 }
87389
87390 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87391 *real_packet = *old;
87392 } else {
87393 log_packet_detailed(" no old info");
87394 memset(real_packet, 0, sizeof(*real_packet));
87395 }
87396
87397 if (BV_ISSET(fields, 0)) {
87398 log_packet_detailed(" got field 'id'");
87399#ifdef FREECIV_JSON_CONNECTION
87400 field_addr.name = "id";
87401#endif /* FREECIV_JSON_CONNECTION */
87402 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
87404 }
87405 }
87406
87407 if (NULL == old) {
87408 old = fc_malloc(sizeof(*old));
87409 *old = *real_packet;
87410 genhash_insert(*hash, old, old);
87411 } else {
87412 *old = *real_packet;
87413 }
87414
87415#endif /* FREECIV_DELTA_PROTOCOL */
87417}
87418
87420{
87421 const struct packet_edit_player_remove *real_packet = packet;
87422 int e;
87423#ifdef FREECIV_DELTA_PROTOCOL
87425 struct packet_edit_player_remove *old;
87426 bool differ;
87427 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_REMOVE;
87428#endif /* FREECIV_DELTA_PROTOCOL */
87430#ifdef FREECIV_JSON_CONNECTION
87431 struct plocation field_addr;
87432 {
87436 }
87437#endif /* FREECIV_JSON_CONNECTION */
87438
87439 log_packet_detailed("packet_edit_player_remove_100: sending info about ()");
87440
87441#ifdef FREECIV_DELTA_PROTOCOL
87442 if (NULL == *hash) {
87444 NULL, NULL, NULL, free);
87445 }
87446 BV_CLR_ALL(fields);
87447
87448 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
87449 old = fc_malloc(sizeof(*old));
87450 *old = *real_packet;
87451 genhash_insert(*hash, old, old);
87452 memset(old, 0, sizeof(*old));
87453 }
87454 differ = (old->id != real_packet->id);
87455 if (differ) {
87456 BV_SET(fields, 0);
87457 }
87458
87459
87460#ifdef FREECIV_JSON_CONNECTION
87461 field_addr.name = "fields";
87462#endif /* FREECIV_JSON_CONNECTION */
87463 e = 0;
87464 e |= DIO_BV_PUT(&dout, &field_addr, fields);
87465 if (e) {
87466 log_packet_detailed("fields bitvector error detected");
87467 }
87468
87469 if (BV_ISSET(fields, 0)) {
87470 log_packet_detailed(" field 'id' has changed");
87471#ifdef FREECIV_JSON_CONNECTION
87472 field_addr.name = "id";
87473#endif /* FREECIV_JSON_CONNECTION */
87474 e = 0;
87475 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
87476 if (e) {
87477 log_packet_detailed("'id' field error detected");
87478 }
87479 }
87480
87481 *old = *real_packet;
87482#endif /* FREECIV_DELTA_PROTOCOL */
87483#ifndef FREECIV_DELTA_PROTOCOL
87484#ifdef FREECIV_JSON_CONNECTION
87485 field_addr.name = "id";
87486#endif /* FREECIV_JSON_CONNECTION */
87487 e = 0;
87488 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
87489 if (e) {
87490 log_packet_detailed("'id' field error detected");
87491 }
87492
87493#endif
87495}
87496
87498{
87499 if (!pc->used) {
87500 log_error("WARNING: trying to send data to the closed connection %s",
87502 return -1;
87503 }
87504 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet != NULL, -1,
87505 "Handler for PACKET_EDIT_PLAYER_REMOVE not installed");
87506 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_REMOVE].packet(pc, packet);
87507}
87508
87510{
87511 struct packet_edit_player_remove packet, *real_packet = &packet;
87512
87513 real_packet->id = id;
87514
87516}
87517
87518#ifdef FREECIV_DELTA_PROTOCOL
87520{
87521 const struct packet_edit_player *key = (const struct packet_edit_player *) vkey;
87522 genhash_val_t result = 0;
87523
87524 result += key->id;
87525
87526 result &= 0xFFFFFFFF;
87527 return result;
87528}
87529
87530static bool cmp_packet_edit_player_100(const void *vkey1, const void *vkey2)
87531{
87532 const struct packet_edit_player *old = (const struct packet_edit_player *) vkey1;
87533 const struct packet_edit_player *real_packet = (const struct packet_edit_player *) vkey2;
87534 bool differ;
87535
87536 differ = (old->id != real_packet->id);
87537
87538 return !differ;
87539}
87541#endif /* FREECIV_DELTA_PROTOCOL */
87542
87544{
87545#ifdef FREECIV_DELTA_PROTOCOL
87547 struct packet_edit_player *old;
87548 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER;
87549#endif /* FREECIV_DELTA_PROTOCOL */
87551#ifdef FREECIV_JSON_CONNECTION
87552 struct plocation field_addr;
87553 {
87557 }
87558#endif /* FREECIV_JSON_CONNECTION */
87559
87560#ifdef FREECIV_DELTA_PROTOCOL
87561#ifdef FREECIV_JSON_CONNECTION
87562 field_addr.name = "fields";
87563#endif /* FREECIV_JSON_CONNECTION */
87564 DIO_BV_GET(&din, &field_addr, fields);
87565#ifdef FREECIV_JSON_CONNECTION
87566 field_addr.name = "id";
87567#endif /* FREECIV_JSON_CONNECTION */
87568 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
87570 }
87571
87572#else /* FREECIV_DELTA_PROTOCOL */
87573#ifdef FREECIV_JSON_CONNECTION
87574 field_addr.name = "id";
87575#endif /* FREECIV_JSON_CONNECTION */
87576 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->id)) {
87578 }
87579#ifdef FREECIV_JSON_CONNECTION
87580 field_addr.name = "name";
87581#endif /* FREECIV_JSON_CONNECTION */
87582 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
87584 }
87585#ifdef FREECIV_JSON_CONNECTION
87586 field_addr.name = "username";
87587#endif /* FREECIV_JSON_CONNECTION */
87588 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
87590 }
87591#ifdef FREECIV_JSON_CONNECTION
87592 field_addr.name = "ranked_username";
87593#endif /* FREECIV_JSON_CONNECTION */
87594 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
87595 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
87596 }
87597#ifdef FREECIV_JSON_CONNECTION
87598 field_addr.name = "user_turns";
87599#endif /* FREECIV_JSON_CONNECTION */
87600 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
87601 RECEIVE_PACKET_FIELD_ERROR(user_turns);
87602 }
87603#ifdef FREECIV_JSON_CONNECTION
87604 field_addr.name = "is_male";
87605#endif /* FREECIV_JSON_CONNECTION */
87606 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_male)) {
87608 }
87609#ifdef FREECIV_JSON_CONNECTION
87610 field_addr.name = "government";
87611#endif /* FREECIV_JSON_CONNECTION */
87612 {
87613 int readin;
87614
87615 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
87617 }
87618 real_packet->government = readin;
87619 }
87620#ifdef FREECIV_JSON_CONNECTION
87621 field_addr.name = "target_government";
87622#endif /* FREECIV_JSON_CONNECTION */
87623 {
87624 int readin;
87625
87626 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
87627 RECEIVE_PACKET_FIELD_ERROR(target_government);
87628 }
87629 real_packet->target_government = readin;
87630 }
87631#ifdef FREECIV_JSON_CONNECTION
87632 field_addr.name = "nation";
87633#endif /* FREECIV_JSON_CONNECTION */
87634 {
87635 int readin;
87636
87637 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
87639 }
87640 real_packet->nation = readin;
87641 }
87642#ifdef FREECIV_JSON_CONNECTION
87643 field_addr.name = "team";
87644#endif /* FREECIV_JSON_CONNECTION */
87645 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
87647 }
87648#ifdef FREECIV_JSON_CONNECTION
87649 field_addr.name = "phase_done";
87650#endif /* FREECIV_JSON_CONNECTION */
87651 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->phase_done)) {
87652 RECEIVE_PACKET_FIELD_ERROR(phase_done);
87653 }
87654#ifdef FREECIV_JSON_CONNECTION
87655 field_addr.name = "nturns_idle";
87656#endif /* FREECIV_JSON_CONNECTION */
87657 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
87658 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
87659 }
87660#ifdef FREECIV_JSON_CONNECTION
87661 field_addr.name = "is_alive";
87662#endif /* FREECIV_JSON_CONNECTION */
87663 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->is_alive)) {
87665 }
87666#ifdef FREECIV_JSON_CONNECTION
87667 field_addr.name = "revolution_finishes";
87668#endif /* FREECIV_JSON_CONNECTION */
87669 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
87670 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
87671 }
87672#ifdef FREECIV_JSON_CONNECTION
87673 field_addr.name = "autoselect_weight";
87674#endif /* FREECIV_JSON_CONNECTION */
87675 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
87676 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
87677 }
87678#ifdef FREECIV_JSON_CONNECTION
87679 field_addr.name = "embassy";
87680#endif /* FREECIV_JSON_CONNECTION */
87681 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
87683 }
87684#ifdef FREECIV_JSON_CONNECTION
87685 field_addr.name = "gold";
87686#endif /* FREECIV_JSON_CONNECTION */
87687 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
87689 }
87690#ifdef FREECIV_JSON_CONNECTION
87691 field_addr.name = "infrapoints";
87692#endif /* FREECIV_JSON_CONNECTION */
87693 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
87694 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
87695 }
87696#ifdef FREECIV_JSON_CONNECTION
87697 field_addr.name = "tax";
87698#endif /* FREECIV_JSON_CONNECTION */
87699 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
87701 }
87702#ifdef FREECIV_JSON_CONNECTION
87703 field_addr.name = "science";
87704#endif /* FREECIV_JSON_CONNECTION */
87705 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
87707 }
87708#ifdef FREECIV_JSON_CONNECTION
87709 field_addr.name = "luxury";
87710#endif /* FREECIV_JSON_CONNECTION */
87711 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
87713 }
87714#ifdef FREECIV_JSON_CONNECTION
87715 field_addr.name = "future_tech";
87716#endif /* FREECIV_JSON_CONNECTION */
87717 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
87718 RECEIVE_PACKET_FIELD_ERROR(future_tech);
87719 }
87720#ifdef FREECIV_JSON_CONNECTION
87721 field_addr.name = "researching";
87722#endif /* FREECIV_JSON_CONNECTION */
87723 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
87724 RECEIVE_PACKET_FIELD_ERROR(researching);
87725 }
87726#ifdef FREECIV_JSON_CONNECTION
87727 field_addr.name = "bulbs_researched";
87728#endif /* FREECIV_JSON_CONNECTION */
87729 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
87730 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
87731 }
87732#ifdef FREECIV_JSON_CONNECTION
87733 field_addr.name = "inventions";
87734#endif /* FREECIV_JSON_CONNECTION */
87735 {
87736 int i;
87737
87738#ifdef FREECIV_JSON_CONNECTION
87739 /* Enter array. */
87740 field_addr.sub_location = plocation_elem_new(0);
87741#endif /* FREECIV_JSON_CONNECTION */
87742
87743 for (i = 0; i < A_LAST + 1; i++) {
87744#ifdef FREECIV_JSON_CONNECTION
87745 field_addr.sub_location->number = i;
87746#endif /* FREECIV_JSON_CONNECTION */
87747
87748 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
87749 RECEIVE_PACKET_FIELD_ERROR(inventions);
87750 }
87751 }
87752
87753#ifdef FREECIV_JSON_CONNECTION
87754 /* Exit array. */
87755 FC_FREE(field_addr.sub_location);
87756#endif /* FREECIV_JSON_CONNECTION */
87757 }
87758#ifdef FREECIV_JSON_CONNECTION
87759 field_addr.name = "ai";
87760#endif /* FREECIV_JSON_CONNECTION */
87761 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ai)) {
87763 }
87764#ifdef FREECIV_JSON_CONNECTION
87765 field_addr.name = "scenario_reserved";
87766#endif /* FREECIV_JSON_CONNECTION */
87767 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_reserved)) {
87768 RECEIVE_PACKET_FIELD_ERROR(scenario_reserved);
87769 }
87770#endif
87771 log_packet_detailed("packet_edit_player_100: got info about (%d)",
87772 real_packet->id);
87773
87774#ifdef FREECIV_DELTA_PROTOCOL
87775 if (NULL == *hash) {
87777 NULL, NULL, NULL, free);
87778 }
87779
87780 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
87781 *real_packet = *old;
87782 } else {
87783 int id;
87784
87785 id = real_packet->id;
87786
87787 log_packet_detailed(" no old info");
87788 memset(real_packet, 0, sizeof(*real_packet));
87789
87790 real_packet->id = id;
87791 }
87792
87793 if (BV_ISSET(fields, 0)) {
87794 log_packet_detailed(" got field 'name'");
87795#ifdef FREECIV_JSON_CONNECTION
87796 field_addr.name = "name";
87797#endif /* FREECIV_JSON_CONNECTION */
87798 if (!DIO_GET(string, &din, &field_addr, real_packet->name, sizeof(real_packet->name))) {
87800 }
87801 }
87802 if (BV_ISSET(fields, 1)) {
87803 log_packet_detailed(" got field 'username'");
87804#ifdef FREECIV_JSON_CONNECTION
87805 field_addr.name = "username";
87806#endif /* FREECIV_JSON_CONNECTION */
87807 if (!DIO_GET(string, &din, &field_addr, real_packet->username, sizeof(real_packet->username))) {
87809 }
87810 }
87811 if (BV_ISSET(fields, 2)) {
87812 log_packet_detailed(" got field 'ranked_username'");
87813#ifdef FREECIV_JSON_CONNECTION
87814 field_addr.name = "ranked_username";
87815#endif /* FREECIV_JSON_CONNECTION */
87816 if (!DIO_GET(string, &din, &field_addr, real_packet->ranked_username, sizeof(real_packet->ranked_username))) {
87817 RECEIVE_PACKET_FIELD_ERROR(ranked_username);
87818 }
87819 }
87820 if (BV_ISSET(fields, 3)) {
87821 log_packet_detailed(" got field 'user_turns'");
87822#ifdef FREECIV_JSON_CONNECTION
87823 field_addr.name = "user_turns";
87824#endif /* FREECIV_JSON_CONNECTION */
87825 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->user_turns)) {
87826 RECEIVE_PACKET_FIELD_ERROR(user_turns);
87827 }
87828 }
87829 real_packet->is_male = BV_ISSET(fields, 4);
87830 if (BV_ISSET(fields, 5)) {
87831 log_packet_detailed(" got field 'government'");
87832#ifdef FREECIV_JSON_CONNECTION
87833 field_addr.name = "government";
87834#endif /* FREECIV_JSON_CONNECTION */
87835 {
87836 int readin;
87837
87838 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
87840 }
87841 real_packet->government = readin;
87842 }
87843 }
87844 if (BV_ISSET(fields, 6)) {
87845 log_packet_detailed(" got field 'target_government'");
87846#ifdef FREECIV_JSON_CONNECTION
87847 field_addr.name = "target_government";
87848#endif /* FREECIV_JSON_CONNECTION */
87849 {
87850 int readin;
87851
87852 if (!DIO_GET(sint8, &din, &field_addr, &readin)) {
87853 RECEIVE_PACKET_FIELD_ERROR(target_government);
87854 }
87855 real_packet->target_government = readin;
87856 }
87857 }
87858 if (BV_ISSET(fields, 7)) {
87859 log_packet_detailed(" got field 'nation'");
87860#ifdef FREECIV_JSON_CONNECTION
87861 field_addr.name = "nation";
87862#endif /* FREECIV_JSON_CONNECTION */
87863 {
87864 int readin;
87865
87866 if (!DIO_GET(sint16, &din, &field_addr, &readin)) {
87868 }
87869 real_packet->nation = readin;
87870 }
87871 }
87872 if (BV_ISSET(fields, 8)) {
87873 log_packet_detailed(" got field 'team'");
87874#ifdef FREECIV_JSON_CONNECTION
87875 field_addr.name = "team";
87876#endif /* FREECIV_JSON_CONNECTION */
87877 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->team)) {
87879 }
87880 }
87881 real_packet->phase_done = BV_ISSET(fields, 9);
87882 if (BV_ISSET(fields, 10)) {
87883 log_packet_detailed(" got field 'nturns_idle'");
87884#ifdef FREECIV_JSON_CONNECTION
87885 field_addr.name = "nturns_idle";
87886#endif /* FREECIV_JSON_CONNECTION */
87887 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->nturns_idle)) {
87888 RECEIVE_PACKET_FIELD_ERROR(nturns_idle);
87889 }
87890 }
87891 real_packet->is_alive = BV_ISSET(fields, 11);
87892 if (BV_ISSET(fields, 12)) {
87893 log_packet_detailed(" got field 'revolution_finishes'");
87894#ifdef FREECIV_JSON_CONNECTION
87895 field_addr.name = "revolution_finishes";
87896#endif /* FREECIV_JSON_CONNECTION */
87897 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->revolution_finishes)) {
87898 RECEIVE_PACKET_FIELD_ERROR(revolution_finishes);
87899 }
87900 }
87901 if (BV_ISSET(fields, 13)) {
87902 log_packet_detailed(" got field 'autoselect_weight'");
87903#ifdef FREECIV_JSON_CONNECTION
87904 field_addr.name = "autoselect_weight";
87905#endif /* FREECIV_JSON_CONNECTION */
87906 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->autoselect_weight)) {
87907 RECEIVE_PACKET_FIELD_ERROR(autoselect_weight);
87908 }
87909 }
87910 if (BV_ISSET(fields, 14)) {
87911 log_packet_detailed(" got field 'embassy'");
87912#ifdef FREECIV_JSON_CONNECTION
87913 field_addr.name = "embassy";
87914#endif /* FREECIV_JSON_CONNECTION */
87915 if (!DIO_BV_GET(&din, &field_addr, real_packet->embassy)) {
87917 }
87918 }
87919 if (BV_ISSET(fields, 15)) {
87920 log_packet_detailed(" got field 'gold'");
87921#ifdef FREECIV_JSON_CONNECTION
87922 field_addr.name = "gold";
87923#endif /* FREECIV_JSON_CONNECTION */
87924 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->gold)) {
87926 }
87927 }
87928 if (BV_ISSET(fields, 16)) {
87929 log_packet_detailed(" got field 'infrapoints'");
87930#ifdef FREECIV_JSON_CONNECTION
87931 field_addr.name = "infrapoints";
87932#endif /* FREECIV_JSON_CONNECTION */
87933 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->infrapoints)) {
87934 RECEIVE_PACKET_FIELD_ERROR(infrapoints);
87935 }
87936 }
87937 if (BV_ISSET(fields, 17)) {
87938 log_packet_detailed(" got field 'tax'");
87939#ifdef FREECIV_JSON_CONNECTION
87940 field_addr.name = "tax";
87941#endif /* FREECIV_JSON_CONNECTION */
87942 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->tax)) {
87944 }
87945 }
87946 if (BV_ISSET(fields, 18)) {
87947 log_packet_detailed(" got field 'science'");
87948#ifdef FREECIV_JSON_CONNECTION
87949 field_addr.name = "science";
87950#endif /* FREECIV_JSON_CONNECTION */
87951 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->science)) {
87953 }
87954 }
87955 if (BV_ISSET(fields, 19)) {
87956 log_packet_detailed(" got field 'luxury'");
87957#ifdef FREECIV_JSON_CONNECTION
87958 field_addr.name = "luxury";
87959#endif /* FREECIV_JSON_CONNECTION */
87960 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->luxury)) {
87962 }
87963 }
87964 if (BV_ISSET(fields, 20)) {
87965 log_packet_detailed(" got field 'future_tech'");
87966#ifdef FREECIV_JSON_CONNECTION
87967 field_addr.name = "future_tech";
87968#endif /* FREECIV_JSON_CONNECTION */
87969 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->future_tech)) {
87970 RECEIVE_PACKET_FIELD_ERROR(future_tech);
87971 }
87972 }
87973 if (BV_ISSET(fields, 21)) {
87974 log_packet_detailed(" got field 'researching'");
87975#ifdef FREECIV_JSON_CONNECTION
87976 field_addr.name = "researching";
87977#endif /* FREECIV_JSON_CONNECTION */
87978 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->researching)) {
87979 RECEIVE_PACKET_FIELD_ERROR(researching);
87980 }
87981 }
87982 if (BV_ISSET(fields, 22)) {
87983 log_packet_detailed(" got field 'bulbs_researched'");
87984#ifdef FREECIV_JSON_CONNECTION
87985 field_addr.name = "bulbs_researched";
87986#endif /* FREECIV_JSON_CONNECTION */
87987 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->bulbs_researched)) {
87988 RECEIVE_PACKET_FIELD_ERROR(bulbs_researched);
87989 }
87990 }
87991 if (BV_ISSET(fields, 23)) {
87992 log_packet_detailed(" got field 'inventions'");
87993#ifdef FREECIV_JSON_CONNECTION
87994 field_addr.name = "inventions";
87995#endif /* FREECIV_JSON_CONNECTION */
87997#ifdef FREECIV_JSON_CONNECTION
87998 /* Enter array (start at initial element). */
87999 field_addr.sub_location = plocation_elem_new(0);
88000 /* Enter diff array element (start at the index address). */
88001 field_addr.sub_location->sub_location = plocation_elem_new(0);
88002#endif /* FREECIV_JSON_CONNECTION */
88003
88004 while (TRUE) {
88005 int i;
88006
88007 /* Read next index */
88008#if A_LAST + 1 <= MAX_UINT8
88009 if (!DIO_GET(uint8, &din, &field_addr, &i)) {
88010#else
88011 if (!DIO_GET(uint16, &din, &field_addr, &i)) {
88012#endif
88013 RECEIVE_PACKET_FIELD_ERROR(inventions);
88014 }
88015
88016 if (i == A_LAST + 1) {
88017 break;
88018 }
88019 if (i > A_LAST + 1) {
88020 RECEIVE_PACKET_FIELD_ERROR(inventions,
88021 ": unexpected value %d "
88022 "(> A_LAST + 1) in array diff",
88023 i);
88024 }
88025
88026#ifdef FREECIV_JSON_CONNECTION
88027 /* Content address. */
88028 field_addr.sub_location->sub_location->number = 1;
88029#endif /* FREECIV_JSON_CONNECTION */
88030
88031 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->inventions[i])) {
88032 RECEIVE_PACKET_FIELD_ERROR(inventions);
88033 }
88034
88035#ifdef FREECIV_JSON_CONNECTION
88036 /* Move to the next diff array element. */
88037 field_addr.sub_location->number++;
88038 /* Back to the index address. */
88039 field_addr.sub_location->sub_location->number = 0;
88040#endif /* FREECIV_JSON_CONNECTION */
88041 }
88042
88043#ifdef FREECIV_JSON_CONNECTION
88044 /* Exit diff array element. */
88045 FC_FREE(field_addr.sub_location->sub_location);
88046 /* Exit array. */
88047 FC_FREE(field_addr.sub_location);
88048#endif /* FREECIV_JSON_CONNECTION */
88049 }
88050 real_packet->ai = BV_ISSET(fields, 24);
88051 real_packet->scenario_reserved = BV_ISSET(fields, 25);
88052
88053 if (NULL == old) {
88054 old = fc_malloc(sizeof(*old));
88055 *old = *real_packet;
88056 genhash_insert(*hash, old, old);
88057 } else {
88058 *old = *real_packet;
88059 }
88060
88061#endif /* FREECIV_DELTA_PROTOCOL */
88063}
88064
88065static int send_packet_edit_player_100(struct connection *pc, const struct packet_edit_player *packet)
88066{
88067 const struct packet_edit_player *real_packet = packet;
88068 int e;
88069#ifdef FREECIV_DELTA_PROTOCOL
88071 struct packet_edit_player *old;
88072 bool differ;
88073 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER;
88074#endif /* FREECIV_DELTA_PROTOCOL */
88076#ifdef FREECIV_JSON_CONNECTION
88077 struct plocation field_addr;
88078 {
88082 }
88083#endif /* FREECIV_JSON_CONNECTION */
88084
88085 log_packet_detailed("packet_edit_player_100: sending info about (%d)",
88086 real_packet->id);
88087
88088#ifdef FREECIV_DELTA_PROTOCOL
88089 if (NULL == *hash) {
88091 NULL, NULL, NULL, free);
88092 }
88093 BV_CLR_ALL(fields);
88094
88095 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88096 old = fc_malloc(sizeof(*old));
88097 *old = *real_packet;
88098 genhash_insert(*hash, old, old);
88099 memset(old, 0, sizeof(*old));
88100 }
88101 differ = (strcmp(old->name, real_packet->name) != 0);
88102 if (differ) {
88103 BV_SET(fields, 0);
88104 }
88105
88106 differ = (strcmp(old->username, real_packet->username) != 0);
88107 if (differ) {
88108 BV_SET(fields, 1);
88109 }
88110
88111 differ = (strcmp(old->ranked_username, real_packet->ranked_username) != 0);
88112 if (differ) {
88113 BV_SET(fields, 2);
88114 }
88115
88116 differ = (old->user_turns != real_packet->user_turns);
88117 if (differ) {
88118 BV_SET(fields, 3);
88119 }
88120
88121 if (packet->is_male) {
88122 BV_SET(fields, 4);
88123 }
88124
88125 differ = (old->government != real_packet->government);
88126 if (differ) {
88127 BV_SET(fields, 5);
88128 }
88129
88130 differ = (old->target_government != real_packet->target_government);
88131 if (differ) {
88132 BV_SET(fields, 6);
88133 }
88134
88135 differ = (old->nation != real_packet->nation);
88136 if (differ) {
88137 BV_SET(fields, 7);
88138 }
88139
88140 differ = (old->team != real_packet->team);
88141 if (differ) {
88142 BV_SET(fields, 8);
88143 }
88144
88145 if (packet->phase_done) {
88146 BV_SET(fields, 9);
88147 }
88148
88149 differ = (old->nturns_idle != real_packet->nturns_idle);
88150 if (differ) {
88151 BV_SET(fields, 10);
88152 }
88153
88154 if (packet->is_alive) {
88155 BV_SET(fields, 11);
88156 }
88157
88158 differ = (old->revolution_finishes != real_packet->revolution_finishes);
88159 if (differ) {
88160 BV_SET(fields, 12);
88161 }
88162
88163 differ = (old->autoselect_weight != real_packet->autoselect_weight);
88164 if (differ) {
88165 BV_SET(fields, 13);
88166 }
88167
88168 differ = !BV_ARE_EQUAL(old->embassy, real_packet->embassy);
88169 if (differ) {
88170 BV_SET(fields, 14);
88171 }
88172
88173 differ = (old->gold != real_packet->gold);
88174 if (differ) {
88175 BV_SET(fields, 15);
88176 }
88177
88178 differ = (old->infrapoints != real_packet->infrapoints);
88179 if (differ) {
88180 BV_SET(fields, 16);
88181 }
88182
88183 differ = (old->tax != real_packet->tax);
88184 if (differ) {
88185 BV_SET(fields, 17);
88186 }
88187
88188 differ = (old->science != real_packet->science);
88189 if (differ) {
88190 BV_SET(fields, 18);
88191 }
88192
88193 differ = (old->luxury != real_packet->luxury);
88194 if (differ) {
88195 BV_SET(fields, 19);
88196 }
88197
88198 differ = (old->future_tech != real_packet->future_tech);
88199 if (differ) {
88200 BV_SET(fields, 20);
88201 }
88202
88203 differ = (old->researching != real_packet->researching);
88204 if (differ) {
88205 BV_SET(fields, 21);
88206 }
88207
88208 differ = (old->bulbs_researched != real_packet->bulbs_researched);
88209 if (differ) {
88210 BV_SET(fields, 22);
88211 }
88212
88213 differ = FALSE;
88214 {
88215 int i;
88216
88217 for (i = 0; i < A_LAST + 1; i++) {
88218 differ = (old->inventions[i] != real_packet->inventions[i]);
88219 if (differ) {
88220 break;
88221 }
88222 }
88223 }
88224 if (differ) {
88225 BV_SET(fields, 23);
88226 }
88227
88228 if (packet->ai) {
88229 BV_SET(fields, 24);
88230 }
88231
88232 if (packet->scenario_reserved) {
88233 BV_SET(fields, 25);
88234 }
88235
88236
88237#ifdef FREECIV_JSON_CONNECTION
88238 field_addr.name = "fields";
88239#endif /* FREECIV_JSON_CONNECTION */
88240 e = 0;
88241 e |= DIO_BV_PUT(&dout, &field_addr, fields);
88242 if (e) {
88243 log_packet_detailed("fields bitvector error detected");
88244 }
88245#ifdef FREECIV_JSON_CONNECTION
88246 field_addr.name = "id";
88247#endif /* FREECIV_JSON_CONNECTION */
88248 e = 0;
88249 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
88250 if (e) {
88251 log_packet_detailed("'id' field error detected");
88252 }
88253
88254 if (BV_ISSET(fields, 0)) {
88255 log_packet_detailed(" field 'name' has changed");
88256#ifdef FREECIV_JSON_CONNECTION
88257 field_addr.name = "name";
88258#endif /* FREECIV_JSON_CONNECTION */
88259 e = 0;
88260 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
88261 if (e) {
88262 log_packet_detailed("'name' field error detected");
88263 }
88264 }
88265 if (BV_ISSET(fields, 1)) {
88266 log_packet_detailed(" field 'username' has changed");
88267#ifdef FREECIV_JSON_CONNECTION
88268 field_addr.name = "username";
88269#endif /* FREECIV_JSON_CONNECTION */
88270 e = 0;
88271 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
88272 if (e) {
88273 log_packet_detailed("'username' field error detected");
88274 }
88275 }
88276 if (BV_ISSET(fields, 2)) {
88277 log_packet_detailed(" field 'ranked_username' has changed");
88278#ifdef FREECIV_JSON_CONNECTION
88279 field_addr.name = "ranked_username";
88280#endif /* FREECIV_JSON_CONNECTION */
88281 e = 0;
88282 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
88283 if (e) {
88284 log_packet_detailed("'ranked_username' field error detected");
88285 }
88286 }
88287 if (BV_ISSET(fields, 3)) {
88288 log_packet_detailed(" field 'user_turns' has changed");
88289#ifdef FREECIV_JSON_CONNECTION
88290 field_addr.name = "user_turns";
88291#endif /* FREECIV_JSON_CONNECTION */
88292 e = 0;
88293 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
88294 if (e) {
88295 log_packet_detailed("'user_turns' field error detected");
88296 }
88297 }
88298 /* field 4 is folded into the header */
88299 if (BV_ISSET(fields, 5)) {
88300 log_packet_detailed(" field 'government' has changed");
88301#ifdef FREECIV_JSON_CONNECTION
88302 field_addr.name = "government";
88303#endif /* FREECIV_JSON_CONNECTION */
88304 e = 0;
88305 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
88306 if (e) {
88307 log_packet_detailed("'government' field error detected");
88308 }
88309 }
88310 if (BV_ISSET(fields, 6)) {
88311 log_packet_detailed(" field 'target_government' has changed");
88312#ifdef FREECIV_JSON_CONNECTION
88313 field_addr.name = "target_government";
88314#endif /* FREECIV_JSON_CONNECTION */
88315 e = 0;
88316 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
88317 if (e) {
88318 log_packet_detailed("'target_government' field error detected");
88319 }
88320 }
88321 if (BV_ISSET(fields, 7)) {
88322 log_packet_detailed(" field 'nation' has changed");
88323#ifdef FREECIV_JSON_CONNECTION
88324 field_addr.name = "nation";
88325#endif /* FREECIV_JSON_CONNECTION */
88326 e = 0;
88327 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
88328 if (e) {
88329 log_packet_detailed("'nation' field error detected");
88330 }
88331 }
88332 if (BV_ISSET(fields, 8)) {
88333 log_packet_detailed(" field 'team' has changed");
88334#ifdef FREECIV_JSON_CONNECTION
88335 field_addr.name = "team";
88336#endif /* FREECIV_JSON_CONNECTION */
88337 e = 0;
88338 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
88339 if (e) {
88340 log_packet_detailed("'team' field error detected");
88341 }
88342 }
88343 /* field 9 is folded into the header */
88344 if (BV_ISSET(fields, 10)) {
88345 log_packet_detailed(" field 'nturns_idle' has changed");
88346#ifdef FREECIV_JSON_CONNECTION
88347 field_addr.name = "nturns_idle";
88348#endif /* FREECIV_JSON_CONNECTION */
88349 e = 0;
88350 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
88351 if (e) {
88352 log_packet_detailed("'nturns_idle' field error detected");
88353 }
88354 }
88355 /* field 11 is folded into the header */
88356 if (BV_ISSET(fields, 12)) {
88357 log_packet_detailed(" field 'revolution_finishes' has changed");
88358#ifdef FREECIV_JSON_CONNECTION
88359 field_addr.name = "revolution_finishes";
88360#endif /* FREECIV_JSON_CONNECTION */
88361 e = 0;
88362 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
88363 if (e) {
88364 log_packet_detailed("'revolution_finishes' field error detected");
88365 }
88366 }
88367 if (BV_ISSET(fields, 13)) {
88368 log_packet_detailed(" field 'autoselect_weight' has changed");
88369#ifdef FREECIV_JSON_CONNECTION
88370 field_addr.name = "autoselect_weight";
88371#endif /* FREECIV_JSON_CONNECTION */
88372 e = 0;
88373 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
88374 if (e) {
88375 log_packet_detailed("'autoselect_weight' field error detected");
88376 }
88377 }
88378 if (BV_ISSET(fields, 14)) {
88379 log_packet_detailed(" field 'embassy' has changed");
88380#ifdef FREECIV_JSON_CONNECTION
88381 field_addr.name = "embassy";
88382#endif /* FREECIV_JSON_CONNECTION */
88383 e = 0;
88384 e |= DIO_BV_PUT(&dout, &field_addr, packet->embassy);
88385 if (e) {
88386 log_packet_detailed("'embassy' field error detected");
88387 }
88388 }
88389 if (BV_ISSET(fields, 15)) {
88390 log_packet_detailed(" field 'gold' has changed");
88391#ifdef FREECIV_JSON_CONNECTION
88392 field_addr.name = "gold";
88393#endif /* FREECIV_JSON_CONNECTION */
88394 e = 0;
88395 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
88396 if (e) {
88397 log_packet_detailed("'gold' field error detected");
88398 }
88399 }
88400 if (BV_ISSET(fields, 16)) {
88401 log_packet_detailed(" field 'infrapoints' has changed");
88402#ifdef FREECIV_JSON_CONNECTION
88403 field_addr.name = "infrapoints";
88404#endif /* FREECIV_JSON_CONNECTION */
88405 e = 0;
88406 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
88407 if (e) {
88408 log_packet_detailed("'infrapoints' field error detected");
88409 }
88410 }
88411 if (BV_ISSET(fields, 17)) {
88412 log_packet_detailed(" field 'tax' has changed");
88413#ifdef FREECIV_JSON_CONNECTION
88414 field_addr.name = "tax";
88415#endif /* FREECIV_JSON_CONNECTION */
88416 e = 0;
88417 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
88418 if (e) {
88419 log_packet_detailed("'tax' field error detected");
88420 }
88421 }
88422 if (BV_ISSET(fields, 18)) {
88423 log_packet_detailed(" field 'science' has changed");
88424#ifdef FREECIV_JSON_CONNECTION
88425 field_addr.name = "science";
88426#endif /* FREECIV_JSON_CONNECTION */
88427 e = 0;
88428 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
88429 if (e) {
88430 log_packet_detailed("'science' field error detected");
88431 }
88432 }
88433 if (BV_ISSET(fields, 19)) {
88434 log_packet_detailed(" field 'luxury' has changed");
88435#ifdef FREECIV_JSON_CONNECTION
88436 field_addr.name = "luxury";
88437#endif /* FREECIV_JSON_CONNECTION */
88438 e = 0;
88439 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
88440 if (e) {
88441 log_packet_detailed("'luxury' field error detected");
88442 }
88443 }
88444 if (BV_ISSET(fields, 20)) {
88445 log_packet_detailed(" field 'future_tech' has changed");
88446#ifdef FREECIV_JSON_CONNECTION
88447 field_addr.name = "future_tech";
88448#endif /* FREECIV_JSON_CONNECTION */
88449 e = 0;
88450 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
88451 if (e) {
88452 log_packet_detailed("'future_tech' field error detected");
88453 }
88454 }
88455 if (BV_ISSET(fields, 21)) {
88456 log_packet_detailed(" field 'researching' has changed");
88457#ifdef FREECIV_JSON_CONNECTION
88458 field_addr.name = "researching";
88459#endif /* FREECIV_JSON_CONNECTION */
88460 e = 0;
88461 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
88462 if (e) {
88463 log_packet_detailed("'researching' field error detected");
88464 }
88465 }
88466 if (BV_ISSET(fields, 22)) {
88467 log_packet_detailed(" field 'bulbs_researched' has changed");
88468#ifdef FREECIV_JSON_CONNECTION
88469 field_addr.name = "bulbs_researched";
88470#endif /* FREECIV_JSON_CONNECTION */
88471 e = 0;
88472 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
88473 if (e) {
88474 log_packet_detailed("'bulbs_researched' field error detected");
88475 }
88476 }
88477 if (BV_ISSET(fields, 23)) {
88478 log_packet_detailed(" field 'inventions' has changed");
88479#ifdef FREECIV_JSON_CONNECTION
88480 field_addr.name = "inventions";
88481#endif /* FREECIV_JSON_CONNECTION */
88482 e = 0;
88484 {
88485 int i;
88486
88487#ifdef FREECIV_JSON_CONNECTION
88488 size_t count_i = 0;
88489
88490 /* Create the array. */
88491 e |= DIO_PUT(farray, &dout, &field_addr, 0);
88492
88493 /* Enter array. */
88494 field_addr.sub_location = plocation_elem_new(0);
88495#endif /* FREECIV_JSON_CONNECTION */
88496
88497 for (i = 0; i < A_LAST + 1; i++) {
88498 differ = (old->inventions[i] != real_packet->inventions[i]);
88499
88500 if (differ) {
88501#ifdef FREECIV_JSON_CONNECTION
88502 /* Append next diff array element. */
88503 field_addr.sub_location->number = -1;
88504
88505 /* Create the diff array element. */
88506 e |= DIO_PUT(farray, &dout, &field_addr, 2);
88507
88508 /* Enter diff array element (start at the index address). */
88509 field_addr.sub_location->number = count_i++;
88510 field_addr.sub_location->sub_location = plocation_elem_new(0);
88511#endif /* FREECIV_JSON_CONNECTION */
88512
88513 /* Write the index */
88514#if A_LAST + 1 <= MAX_UINT8
88515 e |= DIO_PUT(uint8, &dout, &field_addr, i);
88516#else
88517 e |= DIO_PUT(uint16, &dout, &field_addr, i);
88518#endif
88519
88520#ifdef FREECIV_JSON_CONNECTION
88521 /* Content address. */
88522 field_addr.sub_location->sub_location->number = 1;
88523#endif /* FREECIV_JSON_CONNECTION */
88524
88525 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
88526
88527#ifdef FREECIV_JSON_CONNECTION
88528 /* Exit diff array element. */
88529 FC_FREE(field_addr.sub_location->sub_location);
88530#endif /* FREECIV_JSON_CONNECTION */
88531 }
88532 }
88533
88534#ifdef FREECIV_JSON_CONNECTION
88535 /* Append diff array element. */
88536 field_addr.sub_location->number = -1;
88537
88538 /* Create the terminating diff array element. */
88539 e |= DIO_PUT(farray, &dout, &field_addr, 1);
88540
88541 /* Enter diff array element (start at the index address). */
88542 field_addr.sub_location->number = count_i;
88543 field_addr.sub_location->sub_location = plocation_elem_new(0);
88544#endif /* FREECIV_JSON_CONNECTION */
88545
88546 /* Write the sentinel value */
88547#if A_LAST + 1 <= MAX_UINT8
88548 e |= DIO_PUT(uint8, &dout, &field_addr, A_LAST + 1);
88549#else
88550 e |= DIO_PUT(uint16, &dout, &field_addr, A_LAST + 1);
88551#endif
88552
88553#ifdef FREECIV_JSON_CONNECTION
88554 /* Exit diff array element. */
88555 FC_FREE(field_addr.sub_location->sub_location);
88556
88557 /* Exit array. */
88558 FC_FREE(field_addr.sub_location);
88559#endif /* FREECIV_JSON_CONNECTION */
88560 }
88561 if (e) {
88562 log_packet_detailed("'inventions' field error detected");
88563 }
88564 }
88565 /* field 24 is folded into the header */
88566 /* field 25 is folded into the header */
88567
88568 *old = *real_packet;
88569#endif /* FREECIV_DELTA_PROTOCOL */
88570#ifndef FREECIV_DELTA_PROTOCOL
88571#ifdef FREECIV_JSON_CONNECTION
88572 field_addr.name = "id";
88573#endif /* FREECIV_JSON_CONNECTION */
88574 e = 0;
88575 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
88576 if (e) {
88577 log_packet_detailed("'id' field error detected");
88578 }
88579#ifdef FREECIV_JSON_CONNECTION
88580 field_addr.name = "name";
88581#endif /* FREECIV_JSON_CONNECTION */
88582 e = 0;
88583 e |= DIO_PUT(string, &dout, &field_addr, real_packet->name);
88584 if (e) {
88585 log_packet_detailed("'name' field error detected");
88586 }
88587#ifdef FREECIV_JSON_CONNECTION
88588 field_addr.name = "username";
88589#endif /* FREECIV_JSON_CONNECTION */
88590 e = 0;
88591 e |= DIO_PUT(string, &dout, &field_addr, real_packet->username);
88592 if (e) {
88593 log_packet_detailed("'username' field error detected");
88594 }
88595#ifdef FREECIV_JSON_CONNECTION
88596 field_addr.name = "ranked_username";
88597#endif /* FREECIV_JSON_CONNECTION */
88598 e = 0;
88599 e |= DIO_PUT(string, &dout, &field_addr, real_packet->ranked_username);
88600 if (e) {
88601 log_packet_detailed("'ranked_username' field error detected");
88602 }
88603#ifdef FREECIV_JSON_CONNECTION
88604 field_addr.name = "user_turns";
88605#endif /* FREECIV_JSON_CONNECTION */
88606 e = 0;
88607 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->user_turns);
88608 if (e) {
88609 log_packet_detailed("'user_turns' field error detected");
88610 }
88611#ifdef FREECIV_JSON_CONNECTION
88612 field_addr.name = "is_male";
88613#endif /* FREECIV_JSON_CONNECTION */
88614 e = 0;
88615 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_male);
88616 if (e) {
88617 log_packet_detailed("'is_male' field error detected");
88618 }
88619#ifdef FREECIV_JSON_CONNECTION
88620 field_addr.name = "government";
88621#endif /* FREECIV_JSON_CONNECTION */
88622 e = 0;
88623 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->government);
88624 if (e) {
88625 log_packet_detailed("'government' field error detected");
88626 }
88627#ifdef FREECIV_JSON_CONNECTION
88628 field_addr.name = "target_government";
88629#endif /* FREECIV_JSON_CONNECTION */
88630 e = 0;
88631 e |= DIO_PUT(sint8, &dout, &field_addr, real_packet->target_government);
88632 if (e) {
88633 log_packet_detailed("'target_government' field error detected");
88634 }
88635#ifdef FREECIV_JSON_CONNECTION
88636 field_addr.name = "nation";
88637#endif /* FREECIV_JSON_CONNECTION */
88638 e = 0;
88639 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nation);
88640 if (e) {
88641 log_packet_detailed("'nation' field error detected");
88642 }
88643#ifdef FREECIV_JSON_CONNECTION
88644 field_addr.name = "team";
88645#endif /* FREECIV_JSON_CONNECTION */
88646 e = 0;
88647 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->team);
88648 if (e) {
88649 log_packet_detailed("'team' field error detected");
88650 }
88651#ifdef FREECIV_JSON_CONNECTION
88652 field_addr.name = "phase_done";
88653#endif /* FREECIV_JSON_CONNECTION */
88654 e = 0;
88655 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->phase_done);
88656 if (e) {
88657 log_packet_detailed("'phase_done' field error detected");
88658 }
88659#ifdef FREECIV_JSON_CONNECTION
88660 field_addr.name = "nturns_idle";
88661#endif /* FREECIV_JSON_CONNECTION */
88662 e = 0;
88663 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->nturns_idle);
88664 if (e) {
88665 log_packet_detailed("'nturns_idle' field error detected");
88666 }
88667#ifdef FREECIV_JSON_CONNECTION
88668 field_addr.name = "is_alive";
88669#endif /* FREECIV_JSON_CONNECTION */
88670 e = 0;
88671 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->is_alive);
88672 if (e) {
88673 log_packet_detailed("'is_alive' field error detected");
88674 }
88675#ifdef FREECIV_JSON_CONNECTION
88676 field_addr.name = "revolution_finishes";
88677#endif /* FREECIV_JSON_CONNECTION */
88678 e = 0;
88679 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->revolution_finishes);
88680 if (e) {
88681 log_packet_detailed("'revolution_finishes' field error detected");
88682 }
88683#ifdef FREECIV_JSON_CONNECTION
88684 field_addr.name = "autoselect_weight";
88685#endif /* FREECIV_JSON_CONNECTION */
88686 e = 0;
88687 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->autoselect_weight);
88688 if (e) {
88689 log_packet_detailed("'autoselect_weight' field error detected");
88690 }
88691#ifdef FREECIV_JSON_CONNECTION
88692 field_addr.name = "embassy";
88693#endif /* FREECIV_JSON_CONNECTION */
88694 e = 0;
88695 e |= DIO_BV_PUT(&dout, &field_addr, packet->embassy);
88696 if (e) {
88697 log_packet_detailed("'embassy' field error detected");
88698 }
88699#ifdef FREECIV_JSON_CONNECTION
88700 field_addr.name = "gold";
88701#endif /* FREECIV_JSON_CONNECTION */
88702 e = 0;
88703 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->gold);
88704 if (e) {
88705 log_packet_detailed("'gold' field error detected");
88706 }
88707#ifdef FREECIV_JSON_CONNECTION
88708 field_addr.name = "infrapoints";
88709#endif /* FREECIV_JSON_CONNECTION */
88710 e = 0;
88711 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->infrapoints);
88712 if (e) {
88713 log_packet_detailed("'infrapoints' field error detected");
88714 }
88715#ifdef FREECIV_JSON_CONNECTION
88716 field_addr.name = "tax";
88717#endif /* FREECIV_JSON_CONNECTION */
88718 e = 0;
88719 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->tax);
88720 if (e) {
88721 log_packet_detailed("'tax' field error detected");
88722 }
88723#ifdef FREECIV_JSON_CONNECTION
88724 field_addr.name = "science";
88725#endif /* FREECIV_JSON_CONNECTION */
88726 e = 0;
88727 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->science);
88728 if (e) {
88729 log_packet_detailed("'science' field error detected");
88730 }
88731#ifdef FREECIV_JSON_CONNECTION
88732 field_addr.name = "luxury";
88733#endif /* FREECIV_JSON_CONNECTION */
88734 e = 0;
88735 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->luxury);
88736 if (e) {
88737 log_packet_detailed("'luxury' field error detected");
88738 }
88739#ifdef FREECIV_JSON_CONNECTION
88740 field_addr.name = "future_tech";
88741#endif /* FREECIV_JSON_CONNECTION */
88742 e = 0;
88743 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->future_tech);
88744 if (e) {
88745 log_packet_detailed("'future_tech' field error detected");
88746 }
88747#ifdef FREECIV_JSON_CONNECTION
88748 field_addr.name = "researching";
88749#endif /* FREECIV_JSON_CONNECTION */
88750 e = 0;
88751 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->researching);
88752 if (e) {
88753 log_packet_detailed("'researching' field error detected");
88754 }
88755#ifdef FREECIV_JSON_CONNECTION
88756 field_addr.name = "bulbs_researched";
88757#endif /* FREECIV_JSON_CONNECTION */
88758 e = 0;
88759 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->bulbs_researched);
88760 if (e) {
88761 log_packet_detailed("'bulbs_researched' field error detected");
88762 }
88763#ifdef FREECIV_JSON_CONNECTION
88764 field_addr.name = "inventions";
88765#endif /* FREECIV_JSON_CONNECTION */
88766 e = 0;
88767 {
88768 int i;
88769
88770#ifdef FREECIV_JSON_CONNECTION
88771 /* Create the array. */
88772 e |= DIO_PUT(farray, &dout, &field_addr, A_LAST + 1);
88773
88774 /* Enter the array. */
88775 field_addr.sub_location = plocation_elem_new(0);
88776#endif /* FREECIV_JSON_CONNECTION */
88777
88778 for (i = 0; i < A_LAST + 1; i++) {
88779#ifdef FREECIV_JSON_CONNECTION
88780 /* Next array element. */
88781 field_addr.sub_location->number = i;
88782#endif /* FREECIV_JSON_CONNECTION */
88783
88784 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->inventions[i]);
88785 }
88786
88787#ifdef FREECIV_JSON_CONNECTION
88788 /* Exit array. */
88789 FC_FREE(field_addr.sub_location);
88790#endif /* FREECIV_JSON_CONNECTION */
88791 }
88792 if (e) {
88793 log_packet_detailed("'inventions' field error detected");
88794 }
88795#ifdef FREECIV_JSON_CONNECTION
88796 field_addr.name = "ai";
88797#endif /* FREECIV_JSON_CONNECTION */
88798 e = 0;
88799 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ai);
88800 if (e) {
88801 log_packet_detailed("'ai' field error detected");
88802 }
88803#ifdef FREECIV_JSON_CONNECTION
88804 field_addr.name = "scenario_reserved";
88805#endif /* FREECIV_JSON_CONNECTION */
88806 e = 0;
88807 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_reserved);
88808 if (e) {
88809 log_packet_detailed("'scenario_reserved' field error detected");
88810 }
88811
88812#endif
88814}
88815
88817{
88818 if (!pc->used) {
88819 log_error("WARNING: trying to send data to the closed connection %s",
88821 return -1;
88822 }
88823 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet != NULL, -1,
88824 "Handler for PACKET_EDIT_PLAYER not installed");
88825 return pc->phs.handlers->send[PACKET_EDIT_PLAYER].packet(pc, packet);
88826}
88827
88828void lsend_packet_edit_player(struct conn_list *dest, const struct packet_edit_player *packet)
88829{
88830 conn_list_iterate(dest, pconn) {
88833}
88834
88835#ifdef FREECIV_DELTA_PROTOCOL
88836#define hash_packet_edit_player_vision_100 hash_const
88837
88838#define cmp_packet_edit_player_vision_100 cmp_const
88839
88841#endif /* FREECIV_DELTA_PROTOCOL */
88842
88844{
88845#ifdef FREECIV_DELTA_PROTOCOL
88847 struct packet_edit_player_vision *old;
88848 struct genhash **hash = pc->phs.received + PACKET_EDIT_PLAYER_VISION;
88849#endif /* FREECIV_DELTA_PROTOCOL */
88851#ifdef FREECIV_JSON_CONNECTION
88852 struct plocation field_addr;
88853 {
88857 }
88858#endif /* FREECIV_JSON_CONNECTION */
88859
88860#ifdef FREECIV_DELTA_PROTOCOL
88861#ifdef FREECIV_JSON_CONNECTION
88862 field_addr.name = "fields";
88863#endif /* FREECIV_JSON_CONNECTION */
88864 DIO_BV_GET(&din, &field_addr, fields);
88865
88866#else /* FREECIV_DELTA_PROTOCOL */
88867#ifdef FREECIV_JSON_CONNECTION
88868 field_addr.name = "player";
88869#endif /* FREECIV_JSON_CONNECTION */
88870 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player)) {
88872 }
88873#ifdef FREECIV_JSON_CONNECTION
88874 field_addr.name = "tile";
88875#endif /* FREECIV_JSON_CONNECTION */
88876 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
88878 }
88879#ifdef FREECIV_JSON_CONNECTION
88880 field_addr.name = "known";
88881#endif /* FREECIV_JSON_CONNECTION */
88882 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->known)) {
88884 }
88885#ifdef FREECIV_JSON_CONNECTION
88886 field_addr.name = "size";
88887#endif /* FREECIV_JSON_CONNECTION */
88888 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
88890 }
88891#endif
88892 log_packet_detailed("packet_edit_player_vision_100: got info about ()");
88893
88894#ifdef FREECIV_DELTA_PROTOCOL
88895 if (NULL == *hash) {
88897 NULL, NULL, NULL, free);
88898 }
88899
88900 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
88901 *real_packet = *old;
88902 } else {
88903 log_packet_detailed(" no old info");
88904 memset(real_packet, 0, sizeof(*real_packet));
88905 }
88906
88907 if (BV_ISSET(fields, 0)) {
88908 log_packet_detailed(" got field 'player'");
88909#ifdef FREECIV_JSON_CONNECTION
88910 field_addr.name = "player";
88911#endif /* FREECIV_JSON_CONNECTION */
88912 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->player)) {
88914 }
88915 }
88916 if (BV_ISSET(fields, 1)) {
88917 log_packet_detailed(" got field 'tile'");
88918#ifdef FREECIV_JSON_CONNECTION
88919 field_addr.name = "tile";
88920#endif /* FREECIV_JSON_CONNECTION */
88921 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tile)) {
88923 }
88924 }
88925 real_packet->known = BV_ISSET(fields, 2);
88926 if (BV_ISSET(fields, 3)) {
88927 log_packet_detailed(" got field 'size'");
88928#ifdef FREECIV_JSON_CONNECTION
88929 field_addr.name = "size";
88930#endif /* FREECIV_JSON_CONNECTION */
88931 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->size)) {
88933 }
88934 }
88935
88936 if (NULL == old) {
88937 old = fc_malloc(sizeof(*old));
88938 *old = *real_packet;
88939 genhash_insert(*hash, old, old);
88940 } else {
88941 *old = *real_packet;
88942 }
88943
88944#endif /* FREECIV_DELTA_PROTOCOL */
88946}
88947
88949{
88950 const struct packet_edit_player_vision *real_packet = packet;
88951 int e;
88952#ifdef FREECIV_DELTA_PROTOCOL
88954 struct packet_edit_player_vision *old;
88955 bool differ;
88956 struct genhash **hash = pc->phs.sent + PACKET_EDIT_PLAYER_VISION;
88957#endif /* FREECIV_DELTA_PROTOCOL */
88959#ifdef FREECIV_JSON_CONNECTION
88960 struct plocation field_addr;
88961 {
88965 }
88966#endif /* FREECIV_JSON_CONNECTION */
88967
88968 log_packet_detailed("packet_edit_player_vision_100: sending info about ()");
88969
88970#ifdef FREECIV_DELTA_PROTOCOL
88971 if (NULL == *hash) {
88973 NULL, NULL, NULL, free);
88974 }
88975 BV_CLR_ALL(fields);
88976
88977 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
88978 old = fc_malloc(sizeof(*old));
88979 *old = *real_packet;
88980 genhash_insert(*hash, old, old);
88981 memset(old, 0, sizeof(*old));
88982 }
88983 differ = (old->player != real_packet->player);
88984 if (differ) {
88985 BV_SET(fields, 0);
88986 }
88987
88988 differ = (old->tile != real_packet->tile);
88989 if (differ) {
88990 BV_SET(fields, 1);
88991 }
88992
88993 if (packet->known) {
88994 BV_SET(fields, 2);
88995 }
88996
88997 differ = (old->size != real_packet->size);
88998 if (differ) {
88999 BV_SET(fields, 3);
89000 }
89001
89002
89003#ifdef FREECIV_JSON_CONNECTION
89004 field_addr.name = "fields";
89005#endif /* FREECIV_JSON_CONNECTION */
89006 e = 0;
89007 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89008 if (e) {
89009 log_packet_detailed("fields bitvector error detected");
89010 }
89011
89012 if (BV_ISSET(fields, 0)) {
89013 log_packet_detailed(" field 'player' has changed");
89014#ifdef FREECIV_JSON_CONNECTION
89015 field_addr.name = "player";
89016#endif /* FREECIV_JSON_CONNECTION */
89017 e = 0;
89018 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player);
89019 if (e) {
89020 log_packet_detailed("'player' field error detected");
89021 }
89022 }
89023 if (BV_ISSET(fields, 1)) {
89024 log_packet_detailed(" field 'tile' has changed");
89025#ifdef FREECIV_JSON_CONNECTION
89026 field_addr.name = "tile";
89027#endif /* FREECIV_JSON_CONNECTION */
89028 e = 0;
89029 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
89030 if (e) {
89031 log_packet_detailed("'tile' field error detected");
89032 }
89033 }
89034 /* field 2 is folded into the header */
89035 if (BV_ISSET(fields, 3)) {
89036 log_packet_detailed(" field 'size' has changed");
89037#ifdef FREECIV_JSON_CONNECTION
89038 field_addr.name = "size";
89039#endif /* FREECIV_JSON_CONNECTION */
89040 e = 0;
89041 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
89042 if (e) {
89043 log_packet_detailed("'size' field error detected");
89044 }
89045 }
89046
89047 *old = *real_packet;
89048#endif /* FREECIV_DELTA_PROTOCOL */
89049#ifndef FREECIV_DELTA_PROTOCOL
89050#ifdef FREECIV_JSON_CONNECTION
89051 field_addr.name = "player";
89052#endif /* FREECIV_JSON_CONNECTION */
89053 e = 0;
89054 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->player);
89055 if (e) {
89056 log_packet_detailed("'player' field error detected");
89057 }
89058#ifdef FREECIV_JSON_CONNECTION
89059 field_addr.name = "tile";
89060#endif /* FREECIV_JSON_CONNECTION */
89061 e = 0;
89062 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tile);
89063 if (e) {
89064 log_packet_detailed("'tile' field error detected");
89065 }
89066#ifdef FREECIV_JSON_CONNECTION
89067 field_addr.name = "known";
89068#endif /* FREECIV_JSON_CONNECTION */
89069 e = 0;
89070 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->known);
89071 if (e) {
89072 log_packet_detailed("'known' field error detected");
89073 }
89074#ifdef FREECIV_JSON_CONNECTION
89075 field_addr.name = "size";
89076#endif /* FREECIV_JSON_CONNECTION */
89077 e = 0;
89078 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->size);
89079 if (e) {
89080 log_packet_detailed("'size' field error detected");
89081 }
89082
89083#endif
89085}
89086
89088{
89089 if (!pc->used) {
89090 log_error("WARNING: trying to send data to the closed connection %s",
89092 return -1;
89093 }
89094 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet != NULL, -1,
89095 "Handler for PACKET_EDIT_PLAYER_VISION not installed");
89096 return pc->phs.handlers->send[PACKET_EDIT_PLAYER_VISION].packet(pc, packet);
89097}
89098
89099int dsend_packet_edit_player_vision(struct connection *pc, int player, int tile, bool known, int size)
89100{
89101 struct packet_edit_player_vision packet, *real_packet = &packet;
89102
89104 real_packet->tile = tile;
89105 real_packet->known = known;
89106 real_packet->size = size;
89107
89109}
89110
89111#ifdef FREECIV_DELTA_PROTOCOL
89112#define hash_packet_edit_game_100 hash_const
89113
89114#define cmp_packet_edit_game_100 cmp_const
89115
89117#endif /* FREECIV_DELTA_PROTOCOL */
89118
89120{
89121#ifdef FREECIV_DELTA_PROTOCOL
89123 struct packet_edit_game *old;
89124 struct genhash **hash = pc->phs.received + PACKET_EDIT_GAME;
89125#endif /* FREECIV_DELTA_PROTOCOL */
89127#ifdef FREECIV_JSON_CONNECTION
89128 struct plocation field_addr;
89129 {
89133 }
89134#endif /* FREECIV_JSON_CONNECTION */
89135
89136#ifdef FREECIV_DELTA_PROTOCOL
89137#ifdef FREECIV_JSON_CONNECTION
89138 field_addr.name = "fields";
89139#endif /* FREECIV_JSON_CONNECTION */
89140 DIO_BV_GET(&din, &field_addr, fields);
89141
89142#else /* FREECIV_DELTA_PROTOCOL */
89143#ifdef FREECIV_JSON_CONNECTION
89144 field_addr.name = "scenario";
89145#endif /* FREECIV_JSON_CONNECTION */
89146 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario)) {
89148 }
89149#ifdef FREECIV_JSON_CONNECTION
89150 field_addr.name = "scenario_name";
89151#endif /* FREECIV_JSON_CONNECTION */
89152 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
89153 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
89154 }
89155#ifdef FREECIV_JSON_CONNECTION
89156 field_addr.name = "scenario_authors";
89157#endif /* FREECIV_JSON_CONNECTION */
89158 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
89160 }
89161#ifdef FREECIV_JSON_CONNECTION
89162 field_addr.name = "scenario_random";
89163#endif /* FREECIV_JSON_CONNECTION */
89164 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_random)) {
89165 RECEIVE_PACKET_FIELD_ERROR(scenario_random);
89166 }
89167#ifdef FREECIV_JSON_CONNECTION
89168 field_addr.name = "scenario_players";
89169#endif /* FREECIV_JSON_CONNECTION */
89170 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->scenario_players)) {
89171 RECEIVE_PACKET_FIELD_ERROR(scenario_players);
89172 }
89173#ifdef FREECIV_JSON_CONNECTION
89174 field_addr.name = "startpos_nations";
89175#endif /* FREECIV_JSON_CONNECTION */
89176 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->startpos_nations)) {
89177 RECEIVE_PACKET_FIELD_ERROR(startpos_nations);
89178 }
89179#ifdef FREECIV_JSON_CONNECTION
89180 field_addr.name = "prevent_new_cities";
89181#endif /* FREECIV_JSON_CONNECTION */
89182 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->prevent_new_cities)) {
89183 RECEIVE_PACKET_FIELD_ERROR(prevent_new_cities);
89184 }
89185#ifdef FREECIV_JSON_CONNECTION
89186 field_addr.name = "lake_flooding";
89187#endif /* FREECIV_JSON_CONNECTION */
89188 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->lake_flooding)) {
89189 RECEIVE_PACKET_FIELD_ERROR(lake_flooding);
89190 }
89191#ifdef FREECIV_JSON_CONNECTION
89192 field_addr.name = "ruleset_locked";
89193#endif /* FREECIV_JSON_CONNECTION */
89194 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->ruleset_locked)) {
89195 RECEIVE_PACKET_FIELD_ERROR(ruleset_locked);
89196 }
89197#endif
89198 log_packet_detailed("packet_edit_game_100: got info about ()");
89199
89200#ifdef FREECIV_DELTA_PROTOCOL
89201 if (NULL == *hash) {
89203 NULL, NULL, NULL, free);
89204 }
89205
89206 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89207 *real_packet = *old;
89208 } else {
89209 log_packet_detailed(" no old info");
89210 memset(real_packet, 0, sizeof(*real_packet));
89211 }
89212
89213 real_packet->scenario = BV_ISSET(fields, 0);
89214 if (BV_ISSET(fields, 1)) {
89215 log_packet_detailed(" got field 'scenario_name'");
89216#ifdef FREECIV_JSON_CONNECTION
89217 field_addr.name = "scenario_name";
89218#endif /* FREECIV_JSON_CONNECTION */
89219 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_name, sizeof(real_packet->scenario_name))) {
89220 RECEIVE_PACKET_FIELD_ERROR(scenario_name);
89221 }
89222 }
89223 if (BV_ISSET(fields, 2)) {
89224 log_packet_detailed(" got field 'scenario_authors'");
89225#ifdef FREECIV_JSON_CONNECTION
89226 field_addr.name = "scenario_authors";
89227#endif /* FREECIV_JSON_CONNECTION */
89228 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_authors, sizeof(real_packet->scenario_authors))) {
89230 }
89231 }
89232 real_packet->scenario_random = BV_ISSET(fields, 3);
89233 real_packet->scenario_players = BV_ISSET(fields, 4);
89234 real_packet->startpos_nations = BV_ISSET(fields, 5);
89235 real_packet->prevent_new_cities = BV_ISSET(fields, 6);
89236 real_packet->lake_flooding = BV_ISSET(fields, 7);
89237 real_packet->ruleset_locked = BV_ISSET(fields, 8);
89238
89239 if (NULL == old) {
89240 old = fc_malloc(sizeof(*old));
89241 *old = *real_packet;
89242 genhash_insert(*hash, old, old);
89243 } else {
89244 *old = *real_packet;
89245 }
89246
89247#endif /* FREECIV_DELTA_PROTOCOL */
89249}
89250
89251static int send_packet_edit_game_100(struct connection *pc, const struct packet_edit_game *packet)
89252{
89253 const struct packet_edit_game *real_packet = packet;
89254 int e;
89255#ifdef FREECIV_DELTA_PROTOCOL
89257 struct packet_edit_game *old;
89258 bool differ;
89259 struct genhash **hash = pc->phs.sent + PACKET_EDIT_GAME;
89260#endif /* FREECIV_DELTA_PROTOCOL */
89262#ifdef FREECIV_JSON_CONNECTION
89263 struct plocation field_addr;
89264 {
89268 }
89269#endif /* FREECIV_JSON_CONNECTION */
89270
89271 log_packet_detailed("packet_edit_game_100: sending info about ()");
89272
89273#ifdef FREECIV_DELTA_PROTOCOL
89274 if (NULL == *hash) {
89276 NULL, NULL, NULL, free);
89277 }
89278 BV_CLR_ALL(fields);
89279
89280 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89281 old = fc_malloc(sizeof(*old));
89282 *old = *real_packet;
89283 genhash_insert(*hash, old, old);
89284 memset(old, 0, sizeof(*old));
89285 }
89286 if (packet->scenario) {
89287 BV_SET(fields, 0);
89288 }
89289
89290 differ = (strcmp(old->scenario_name, real_packet->scenario_name) != 0);
89291 if (differ) {
89292 BV_SET(fields, 1);
89293 }
89294
89295 differ = (strcmp(old->scenario_authors, real_packet->scenario_authors) != 0);
89296 if (differ) {
89297 BV_SET(fields, 2);
89298 }
89299
89300 if (packet->scenario_random) {
89301 BV_SET(fields, 3);
89302 }
89303
89304 if (packet->scenario_players) {
89305 BV_SET(fields, 4);
89306 }
89307
89308 if (packet->startpos_nations) {
89309 BV_SET(fields, 5);
89310 }
89311
89312 if (packet->prevent_new_cities) {
89313 BV_SET(fields, 6);
89314 }
89315
89316 if (packet->lake_flooding) {
89317 BV_SET(fields, 7);
89318 }
89319
89320 if (packet->ruleset_locked) {
89321 BV_SET(fields, 8);
89322 }
89323
89324
89325#ifdef FREECIV_JSON_CONNECTION
89326 field_addr.name = "fields";
89327#endif /* FREECIV_JSON_CONNECTION */
89328 e = 0;
89329 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89330 if (e) {
89331 log_packet_detailed("fields bitvector error detected");
89332 }
89333
89334 /* field 0 is folded into the header */
89335 if (BV_ISSET(fields, 1)) {
89336 log_packet_detailed(" field 'scenario_name' has changed");
89337#ifdef FREECIV_JSON_CONNECTION
89338 field_addr.name = "scenario_name";
89339#endif /* FREECIV_JSON_CONNECTION */
89340 e = 0;
89341 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
89342 if (e) {
89343 log_packet_detailed("'scenario_name' field error detected");
89344 }
89345 }
89346 if (BV_ISSET(fields, 2)) {
89347 log_packet_detailed(" field 'scenario_authors' has changed");
89348#ifdef FREECIV_JSON_CONNECTION
89349 field_addr.name = "scenario_authors";
89350#endif /* FREECIV_JSON_CONNECTION */
89351 e = 0;
89352 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
89353 if (e) {
89354 log_packet_detailed("'scenario_authors' field error detected");
89355 }
89356 }
89357 /* field 3 is folded into the header */
89358 /* field 4 is folded into the header */
89359 /* field 5 is folded into the header */
89360 /* field 6 is folded into the header */
89361 /* field 7 is folded into the header */
89362 /* field 8 is folded into the header */
89363
89364 *old = *real_packet;
89365#endif /* FREECIV_DELTA_PROTOCOL */
89366#ifndef FREECIV_DELTA_PROTOCOL
89367#ifdef FREECIV_JSON_CONNECTION
89368 field_addr.name = "scenario";
89369#endif /* FREECIV_JSON_CONNECTION */
89370 e = 0;
89371 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario);
89372 if (e) {
89373 log_packet_detailed("'scenario' field error detected");
89374 }
89375#ifdef FREECIV_JSON_CONNECTION
89376 field_addr.name = "scenario_name";
89377#endif /* FREECIV_JSON_CONNECTION */
89378 e = 0;
89379 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_name);
89380 if (e) {
89381 log_packet_detailed("'scenario_name' field error detected");
89382 }
89383#ifdef FREECIV_JSON_CONNECTION
89384 field_addr.name = "scenario_authors";
89385#endif /* FREECIV_JSON_CONNECTION */
89386 e = 0;
89387 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_authors);
89388 if (e) {
89389 log_packet_detailed("'scenario_authors' field error detected");
89390 }
89391#ifdef FREECIV_JSON_CONNECTION
89392 field_addr.name = "scenario_random";
89393#endif /* FREECIV_JSON_CONNECTION */
89394 e = 0;
89395 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_random);
89396 if (e) {
89397 log_packet_detailed("'scenario_random' field error detected");
89398 }
89399#ifdef FREECIV_JSON_CONNECTION
89400 field_addr.name = "scenario_players";
89401#endif /* FREECIV_JSON_CONNECTION */
89402 e = 0;
89403 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->scenario_players);
89404 if (e) {
89405 log_packet_detailed("'scenario_players' field error detected");
89406 }
89407#ifdef FREECIV_JSON_CONNECTION
89408 field_addr.name = "startpos_nations";
89409#endif /* FREECIV_JSON_CONNECTION */
89410 e = 0;
89411 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->startpos_nations);
89412 if (e) {
89413 log_packet_detailed("'startpos_nations' field error detected");
89414 }
89415#ifdef FREECIV_JSON_CONNECTION
89416 field_addr.name = "prevent_new_cities";
89417#endif /* FREECIV_JSON_CONNECTION */
89418 e = 0;
89419 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->prevent_new_cities);
89420 if (e) {
89421 log_packet_detailed("'prevent_new_cities' field error detected");
89422 }
89423#ifdef FREECIV_JSON_CONNECTION
89424 field_addr.name = "lake_flooding";
89425#endif /* FREECIV_JSON_CONNECTION */
89426 e = 0;
89427 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->lake_flooding);
89428 if (e) {
89429 log_packet_detailed("'lake_flooding' field error detected");
89430 }
89431#ifdef FREECIV_JSON_CONNECTION
89432 field_addr.name = "ruleset_locked";
89433#endif /* FREECIV_JSON_CONNECTION */
89434 e = 0;
89435 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->ruleset_locked);
89436 if (e) {
89437 log_packet_detailed("'ruleset_locked' field error detected");
89438 }
89439
89440#endif
89442}
89443
89444int send_packet_edit_game(struct connection *pc, const struct packet_edit_game *packet)
89445{
89446 if (!pc->used) {
89447 log_error("WARNING: trying to send data to the closed connection %s",
89449 return -1;
89450 }
89451 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_GAME].packet != NULL, -1,
89452 "Handler for PACKET_EDIT_GAME not installed");
89453 return pc->phs.handlers->send[PACKET_EDIT_GAME].packet(pc, packet);
89454}
89455
89456#ifdef FREECIV_DELTA_PROTOCOL
89457#define hash_packet_edit_scenario_desc_100 hash_const
89458
89459#define cmp_packet_edit_scenario_desc_100 cmp_const
89460
89462#endif /* FREECIV_DELTA_PROTOCOL */
89463
89465{
89466#ifdef FREECIV_DELTA_PROTOCOL
89468 struct packet_edit_scenario_desc *old;
89469 struct genhash **hash = pc->phs.received + PACKET_EDIT_SCENARIO_DESC;
89470#endif /* FREECIV_DELTA_PROTOCOL */
89472#ifdef FREECIV_JSON_CONNECTION
89473 struct plocation field_addr;
89474 {
89478 }
89479#endif /* FREECIV_JSON_CONNECTION */
89480
89481#ifdef FREECIV_DELTA_PROTOCOL
89482#ifdef FREECIV_JSON_CONNECTION
89483 field_addr.name = "fields";
89484#endif /* FREECIV_JSON_CONNECTION */
89485 DIO_BV_GET(&din, &field_addr, fields);
89486
89487#else /* FREECIV_DELTA_PROTOCOL */
89488#ifdef FREECIV_JSON_CONNECTION
89489 field_addr.name = "scenario_desc";
89490#endif /* FREECIV_JSON_CONNECTION */
89491 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
89492 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
89493 }
89494#endif
89495 log_packet_detailed("packet_edit_scenario_desc_100: got info about ()");
89496
89497#ifdef FREECIV_DELTA_PROTOCOL
89498 if (NULL == *hash) {
89500 NULL, NULL, NULL, free);
89501 }
89502
89503 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89504 *real_packet = *old;
89505 } else {
89506 log_packet_detailed(" no old info");
89507 memset(real_packet, 0, sizeof(*real_packet));
89508 }
89509
89510 if (BV_ISSET(fields, 0)) {
89511 log_packet_detailed(" got field 'scenario_desc'");
89512#ifdef FREECIV_JSON_CONNECTION
89513 field_addr.name = "scenario_desc";
89514#endif /* FREECIV_JSON_CONNECTION */
89515 if (!DIO_GET(string, &din, &field_addr, real_packet->scenario_desc, sizeof(real_packet->scenario_desc))) {
89516 RECEIVE_PACKET_FIELD_ERROR(scenario_desc);
89517 }
89518 }
89519
89520 if (NULL == old) {
89521 old = fc_malloc(sizeof(*old));
89522 *old = *real_packet;
89523 genhash_insert(*hash, old, old);
89524 } else {
89525 *old = *real_packet;
89526 }
89527
89528#endif /* FREECIV_DELTA_PROTOCOL */
89530}
89531
89533{
89534 const struct packet_edit_scenario_desc *real_packet = packet;
89535 int e;
89536#ifdef FREECIV_DELTA_PROTOCOL
89538 struct packet_edit_scenario_desc *old;
89539 bool differ;
89540 struct genhash **hash = pc->phs.sent + PACKET_EDIT_SCENARIO_DESC;
89541#endif /* FREECIV_DELTA_PROTOCOL */
89543#ifdef FREECIV_JSON_CONNECTION
89544 struct plocation field_addr;
89545 {
89549 }
89550#endif /* FREECIV_JSON_CONNECTION */
89551
89552 log_packet_detailed("packet_edit_scenario_desc_100: sending info about ()");
89553
89554#ifdef FREECIV_DELTA_PROTOCOL
89555 if (NULL == *hash) {
89557 NULL, NULL, NULL, free);
89558 }
89559 BV_CLR_ALL(fields);
89560
89561 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89562 old = fc_malloc(sizeof(*old));
89563 *old = *real_packet;
89564 genhash_insert(*hash, old, old);
89565 memset(old, 0, sizeof(*old));
89566 }
89567 differ = (strcmp(old->scenario_desc, real_packet->scenario_desc) != 0);
89568 if (differ) {
89569 BV_SET(fields, 0);
89570 }
89571
89572
89573#ifdef FREECIV_JSON_CONNECTION
89574 field_addr.name = "fields";
89575#endif /* FREECIV_JSON_CONNECTION */
89576 e = 0;
89577 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89578 if (e) {
89579 log_packet_detailed("fields bitvector error detected");
89580 }
89581
89582 if (BV_ISSET(fields, 0)) {
89583 log_packet_detailed(" field 'scenario_desc' has changed");
89584#ifdef FREECIV_JSON_CONNECTION
89585 field_addr.name = "scenario_desc";
89586#endif /* FREECIV_JSON_CONNECTION */
89587 e = 0;
89588 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
89589 if (e) {
89590 log_packet_detailed("'scenario_desc' field error detected");
89591 }
89592 }
89593
89594 *old = *real_packet;
89595#endif /* FREECIV_DELTA_PROTOCOL */
89596#ifndef FREECIV_DELTA_PROTOCOL
89597#ifdef FREECIV_JSON_CONNECTION
89598 field_addr.name = "scenario_desc";
89599#endif /* FREECIV_JSON_CONNECTION */
89600 e = 0;
89601 e |= DIO_PUT(string, &dout, &field_addr, real_packet->scenario_desc);
89602 if (e) {
89603 log_packet_detailed("'scenario_desc' field error detected");
89604 }
89605
89606#endif
89608}
89609
89611{
89612 if (!pc->used) {
89613 log_error("WARNING: trying to send data to the closed connection %s",
89615 return -1;
89616 }
89617 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet != NULL, -1,
89618 "Handler for PACKET_EDIT_SCENARIO_DESC not installed");
89619 return pc->phs.handlers->send[PACKET_EDIT_SCENARIO_DESC].packet(pc, packet);
89620}
89621
89622#ifdef FREECIV_DELTA_PROTOCOL
89623#define hash_packet_edit_object_created_100 hash_const
89624
89625#define cmp_packet_edit_object_created_100 cmp_const
89626
89628#endif /* FREECIV_DELTA_PROTOCOL */
89629
89631{
89632#ifdef FREECIV_DELTA_PROTOCOL
89634 struct packet_edit_object_created *old;
89635 struct genhash **hash = pc->phs.received + PACKET_EDIT_OBJECT_CREATED;
89636#endif /* FREECIV_DELTA_PROTOCOL */
89638#ifdef FREECIV_JSON_CONNECTION
89639 struct plocation field_addr;
89640 {
89644 }
89645#endif /* FREECIV_JSON_CONNECTION */
89646
89647#ifdef FREECIV_DELTA_PROTOCOL
89648#ifdef FREECIV_JSON_CONNECTION
89649 field_addr.name = "fields";
89650#endif /* FREECIV_JSON_CONNECTION */
89651 DIO_BV_GET(&din, &field_addr, fields);
89652
89653#else /* FREECIV_DELTA_PROTOCOL */
89654#ifdef FREECIV_JSON_CONNECTION
89655 field_addr.name = "tag";
89656#endif /* FREECIV_JSON_CONNECTION */
89657 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
89659 }
89660#ifdef FREECIV_JSON_CONNECTION
89661 field_addr.name = "id";
89662#endif /* FREECIV_JSON_CONNECTION */
89663 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
89665 }
89666#endif
89667 log_packet_detailed("packet_edit_object_created_100: got info about ()");
89668
89669#ifdef FREECIV_DELTA_PROTOCOL
89670 if (NULL == *hash) {
89672 NULL, NULL, NULL, free);
89673 }
89674
89675 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89676 *real_packet = *old;
89677 } else {
89678 log_packet_detailed(" no old info");
89679 memset(real_packet, 0, sizeof(*real_packet));
89680 }
89681
89682 if (BV_ISSET(fields, 0)) {
89683 log_packet_detailed(" got field 'tag'");
89684#ifdef FREECIV_JSON_CONNECTION
89685 field_addr.name = "tag";
89686#endif /* FREECIV_JSON_CONNECTION */
89687 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->tag)) {
89689 }
89690 }
89691 if (BV_ISSET(fields, 1)) {
89692 log_packet_detailed(" got field 'id'");
89693#ifdef FREECIV_JSON_CONNECTION
89694 field_addr.name = "id";
89695#endif /* FREECIV_JSON_CONNECTION */
89696 if (!DIO_GET(sint32, &din, &field_addr, &real_packet->id)) {
89698 }
89699 }
89700
89701 if (NULL == old) {
89702 old = fc_malloc(sizeof(*old));
89703 *old = *real_packet;
89704 genhash_insert(*hash, old, old);
89705 } else {
89706 *old = *real_packet;
89707 }
89708
89709#endif /* FREECIV_DELTA_PROTOCOL */
89711}
89712
89714{
89715 const struct packet_edit_object_created *real_packet = packet;
89716 int e;
89717#ifdef FREECIV_DELTA_PROTOCOL
89719 struct packet_edit_object_created *old;
89720 bool differ;
89721 struct genhash **hash = pc->phs.sent + PACKET_EDIT_OBJECT_CREATED;
89722#endif /* FREECIV_DELTA_PROTOCOL */
89724#ifdef FREECIV_JSON_CONNECTION
89725 struct plocation field_addr;
89726 {
89730 }
89731#endif /* FREECIV_JSON_CONNECTION */
89732
89733 log_packet_detailed("packet_edit_object_created_100: sending info about ()");
89734
89735#ifdef FREECIV_DELTA_PROTOCOL
89736 if (NULL == *hash) {
89738 NULL, NULL, NULL, free);
89739 }
89740 BV_CLR_ALL(fields);
89741
89742 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89743 old = fc_malloc(sizeof(*old));
89744 *old = *real_packet;
89745 genhash_insert(*hash, old, old);
89746 memset(old, 0, sizeof(*old));
89747 }
89748 differ = (old->tag != real_packet->tag);
89749 if (differ) {
89750 BV_SET(fields, 0);
89751 }
89752
89753 differ = (old->id != real_packet->id);
89754 if (differ) {
89755 BV_SET(fields, 1);
89756 }
89757
89758
89759#ifdef FREECIV_JSON_CONNECTION
89760 field_addr.name = "fields";
89761#endif /* FREECIV_JSON_CONNECTION */
89762 e = 0;
89763 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89764 if (e) {
89765 log_packet_detailed("fields bitvector error detected");
89766 }
89767
89768 if (BV_ISSET(fields, 0)) {
89769 log_packet_detailed(" field 'tag' has changed");
89770#ifdef FREECIV_JSON_CONNECTION
89771 field_addr.name = "tag";
89772#endif /* FREECIV_JSON_CONNECTION */
89773 e = 0;
89774 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
89775 if (e) {
89776 log_packet_detailed("'tag' field error detected");
89777 }
89778 }
89779 if (BV_ISSET(fields, 1)) {
89780 log_packet_detailed(" field 'id' has changed");
89781#ifdef FREECIV_JSON_CONNECTION
89782 field_addr.name = "id";
89783#endif /* FREECIV_JSON_CONNECTION */
89784 e = 0;
89785 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
89786 if (e) {
89787 log_packet_detailed("'id' field error detected");
89788 }
89789 }
89790
89791 *old = *real_packet;
89792#endif /* FREECIV_DELTA_PROTOCOL */
89793#ifndef FREECIV_DELTA_PROTOCOL
89794#ifdef FREECIV_JSON_CONNECTION
89795 field_addr.name = "tag";
89796#endif /* FREECIV_JSON_CONNECTION */
89797 e = 0;
89798 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->tag);
89799 if (e) {
89800 log_packet_detailed("'tag' field error detected");
89801 }
89802#ifdef FREECIV_JSON_CONNECTION
89803 field_addr.name = "id";
89804#endif /* FREECIV_JSON_CONNECTION */
89805 e = 0;
89806 e |= DIO_PUT(sint32, &dout, &field_addr, real_packet->id);
89807 if (e) {
89808 log_packet_detailed("'id' field error detected");
89809 }
89810
89811#endif
89813}
89814
89816{
89817 if (!pc->used) {
89818 log_error("WARNING: trying to send data to the closed connection %s",
89820 return -1;
89821 }
89822 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet != NULL, -1,
89823 "Handler for PACKET_EDIT_OBJECT_CREATED not installed");
89824 return pc->phs.handlers->send[PACKET_EDIT_OBJECT_CREATED].packet(pc, packet);
89825}
89826
89828{
89829 struct packet_edit_object_created packet, *real_packet = &packet;
89830
89831 real_packet->tag = tag;
89832 real_packet->id = id;
89833
89835}
89836
89837#ifdef FREECIV_DELTA_PROTOCOL
89838#define hash_packet_play_music_100 hash_const
89839
89840#define cmp_packet_play_music_100 cmp_const
89841
89843#endif /* FREECIV_DELTA_PROTOCOL */
89844
89846{
89847#ifdef FREECIV_DELTA_PROTOCOL
89849 struct packet_play_music *old;
89850 struct genhash **hash = pc->phs.received + PACKET_PLAY_MUSIC;
89851#endif /* FREECIV_DELTA_PROTOCOL */
89853#ifdef FREECIV_JSON_CONNECTION
89854 struct plocation field_addr;
89855 {
89859 }
89860#endif /* FREECIV_JSON_CONNECTION */
89861
89862#ifdef FREECIV_DELTA_PROTOCOL
89863#ifdef FREECIV_JSON_CONNECTION
89864 field_addr.name = "fields";
89865#endif /* FREECIV_JSON_CONNECTION */
89866 DIO_BV_GET(&din, &field_addr, fields);
89867
89868#else /* FREECIV_DELTA_PROTOCOL */
89869#ifdef FREECIV_JSON_CONNECTION
89870 field_addr.name = "tag";
89871#endif /* FREECIV_JSON_CONNECTION */
89872 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
89874 }
89875#endif
89876 log_packet_detailed("packet_play_music_100: got info about ()");
89877
89878#ifdef FREECIV_DELTA_PROTOCOL
89879 if (NULL == *hash) {
89881 NULL, NULL, NULL, free);
89882 }
89883
89884 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
89885 *real_packet = *old;
89886 } else {
89887 log_packet_detailed(" no old info");
89888 memset(real_packet, 0, sizeof(*real_packet));
89889 }
89890
89891 if (BV_ISSET(fields, 0)) {
89892 log_packet_detailed(" got field 'tag'");
89893#ifdef FREECIV_JSON_CONNECTION
89894 field_addr.name = "tag";
89895#endif /* FREECIV_JSON_CONNECTION */
89896 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
89898 }
89899 }
89900
89901 if (NULL == old) {
89902 old = fc_malloc(sizeof(*old));
89903 *old = *real_packet;
89904 genhash_insert(*hash, old, old);
89905 } else {
89906 *old = *real_packet;
89907 }
89908
89909#endif /* FREECIV_DELTA_PROTOCOL */
89911}
89912
89913static int send_packet_play_music_100(struct connection *pc, const struct packet_play_music *packet)
89914{
89915 const struct packet_play_music *real_packet = packet;
89916 int e;
89917#ifdef FREECIV_DELTA_PROTOCOL
89919 struct packet_play_music *old;
89920 bool differ;
89921 struct genhash **hash = pc->phs.sent + PACKET_PLAY_MUSIC;
89922#endif /* FREECIV_DELTA_PROTOCOL */
89924#ifdef FREECIV_JSON_CONNECTION
89925 struct plocation field_addr;
89926 {
89930 }
89931#endif /* FREECIV_JSON_CONNECTION */
89932
89933 log_packet_detailed("packet_play_music_100: sending info about ()");
89934
89935#ifdef FREECIV_DELTA_PROTOCOL
89936 if (NULL == *hash) {
89938 NULL, NULL, NULL, free);
89939 }
89940 BV_CLR_ALL(fields);
89941
89942 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
89943 old = fc_malloc(sizeof(*old));
89944 *old = *real_packet;
89945 genhash_insert(*hash, old, old);
89946 memset(old, 0, sizeof(*old));
89947 }
89948 differ = (strcmp(old->tag, real_packet->tag) != 0);
89949 if (differ) {
89950 BV_SET(fields, 0);
89951 }
89952
89953
89954#ifdef FREECIV_JSON_CONNECTION
89955 field_addr.name = "fields";
89956#endif /* FREECIV_JSON_CONNECTION */
89957 e = 0;
89958 e |= DIO_BV_PUT(&dout, &field_addr, fields);
89959 if (e) {
89960 log_packet_detailed("fields bitvector error detected");
89961 }
89962
89963 if (BV_ISSET(fields, 0)) {
89964 log_packet_detailed(" field 'tag' has changed");
89965#ifdef FREECIV_JSON_CONNECTION
89966 field_addr.name = "tag";
89967#endif /* FREECIV_JSON_CONNECTION */
89968 e = 0;
89969 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
89970 if (e) {
89971 log_packet_detailed("'tag' field error detected");
89972 }
89973 }
89974
89975 *old = *real_packet;
89976#endif /* FREECIV_DELTA_PROTOCOL */
89977#ifndef FREECIV_DELTA_PROTOCOL
89978#ifdef FREECIV_JSON_CONNECTION
89979 field_addr.name = "tag";
89980#endif /* FREECIV_JSON_CONNECTION */
89981 e = 0;
89982 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
89983 if (e) {
89984 log_packet_detailed("'tag' field error detected");
89985 }
89986
89987#endif
89989}
89990
89991int send_packet_play_music(struct connection *pc, const struct packet_play_music *packet)
89992{
89993 if (!pc->used) {
89994 log_error("WARNING: trying to send data to the closed connection %s",
89996 return -1;
89997 }
89998 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet != NULL, -1,
89999 "Handler for PACKET_PLAY_MUSIC not installed");
90000 return pc->phs.handlers->send[PACKET_PLAY_MUSIC].packet(pc, packet);
90001}
90002
90003void lsend_packet_play_music(struct conn_list *dest, const struct packet_play_music *packet)
90004{
90005 conn_list_iterate(dest, pconn) {
90008}
90009
90010#ifdef FREECIV_DELTA_PROTOCOL
90011#define hash_packet_popup_image_100 hash_const
90012
90013#define cmp_packet_popup_image_100 cmp_const
90014
90016#endif /* FREECIV_DELTA_PROTOCOL */
90017
90019{
90020#ifdef FREECIV_DELTA_PROTOCOL
90022 struct packet_popup_image *old;
90023 struct genhash **hash = pc->phs.received + PACKET_POPUP_IMAGE;
90024#endif /* FREECIV_DELTA_PROTOCOL */
90026#ifdef FREECIV_JSON_CONNECTION
90027 struct plocation field_addr;
90028 {
90032 }
90033#endif /* FREECIV_JSON_CONNECTION */
90034
90035#ifdef FREECIV_DELTA_PROTOCOL
90036#ifdef FREECIV_JSON_CONNECTION
90037 field_addr.name = "fields";
90038#endif /* FREECIV_JSON_CONNECTION */
90039 DIO_BV_GET(&din, &field_addr, fields);
90040
90041#else /* FREECIV_DELTA_PROTOCOL */
90042#ifdef FREECIV_JSON_CONNECTION
90043 field_addr.name = "tag";
90044#endif /* FREECIV_JSON_CONNECTION */
90045 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
90047 }
90048#endif
90049 log_packet_detailed("packet_popup_image_100: got info about ()");
90050
90051#ifdef FREECIV_DELTA_PROTOCOL
90052 if (NULL == *hash) {
90054 NULL, NULL, NULL, free);
90055 }
90056
90057 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90058 *real_packet = *old;
90059 } else {
90060 log_packet_detailed(" no old info");
90061 memset(real_packet, 0, sizeof(*real_packet));
90062 }
90063
90064 if (BV_ISSET(fields, 0)) {
90065 log_packet_detailed(" got field 'tag'");
90066#ifdef FREECIV_JSON_CONNECTION
90067 field_addr.name = "tag";
90068#endif /* FREECIV_JSON_CONNECTION */
90069 if (!DIO_GET(string, &din, &field_addr, real_packet->tag, sizeof(real_packet->tag))) {
90071 }
90072 }
90073
90074 if (NULL == old) {
90075 old = fc_malloc(sizeof(*old));
90076 *old = *real_packet;
90077 genhash_insert(*hash, old, old);
90078 } else {
90079 *old = *real_packet;
90080 }
90081
90082#endif /* FREECIV_DELTA_PROTOCOL */
90084}
90085
90086static int send_packet_popup_image_100(struct connection *pc, const struct packet_popup_image *packet)
90087{
90088 const struct packet_popup_image *real_packet = packet;
90089 int e;
90090#ifdef FREECIV_DELTA_PROTOCOL
90092 struct packet_popup_image *old;
90093 bool differ;
90094 struct genhash **hash = pc->phs.sent + PACKET_POPUP_IMAGE;
90095#endif /* FREECIV_DELTA_PROTOCOL */
90097#ifdef FREECIV_JSON_CONNECTION
90098 struct plocation field_addr;
90099 {
90103 }
90104#endif /* FREECIV_JSON_CONNECTION */
90105
90106 log_packet_detailed("packet_popup_image_100: sending info about ()");
90107
90108#ifdef FREECIV_DELTA_PROTOCOL
90109 if (NULL == *hash) {
90111 NULL, NULL, NULL, free);
90112 }
90113 BV_CLR_ALL(fields);
90114
90115 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90116 old = fc_malloc(sizeof(*old));
90117 *old = *real_packet;
90118 genhash_insert(*hash, old, old);
90119 memset(old, 0, sizeof(*old));
90120 }
90121 differ = (strcmp(old->tag, real_packet->tag) != 0);
90122 if (differ) {
90123 BV_SET(fields, 0);
90124 }
90125
90126
90127#ifdef FREECIV_JSON_CONNECTION
90128 field_addr.name = "fields";
90129#endif /* FREECIV_JSON_CONNECTION */
90130 e = 0;
90131 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90132 if (e) {
90133 log_packet_detailed("fields bitvector error detected");
90134 }
90135
90136 if (BV_ISSET(fields, 0)) {
90137 log_packet_detailed(" field 'tag' has changed");
90138#ifdef FREECIV_JSON_CONNECTION
90139 field_addr.name = "tag";
90140#endif /* FREECIV_JSON_CONNECTION */
90141 e = 0;
90142 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
90143 if (e) {
90144 log_packet_detailed("'tag' field error detected");
90145 }
90146 }
90147
90148 *old = *real_packet;
90149#endif /* FREECIV_DELTA_PROTOCOL */
90150#ifndef FREECIV_DELTA_PROTOCOL
90151#ifdef FREECIV_JSON_CONNECTION
90152 field_addr.name = "tag";
90153#endif /* FREECIV_JSON_CONNECTION */
90154 e = 0;
90155 e |= DIO_PUT(string, &dout, &field_addr, real_packet->tag);
90156 if (e) {
90157 log_packet_detailed("'tag' field error detected");
90158 }
90159
90160#endif
90162}
90163
90165{
90166 if (!pc->used) {
90167 log_error("WARNING: trying to send data to the closed connection %s",
90169 return -1;
90170 }
90171 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet != NULL, -1,
90172 "Handler for PACKET_POPUP_IMAGE not installed");
90173 return pc->phs.handlers->send[PACKET_POPUP_IMAGE].packet(pc, packet);
90174}
90175
90176void lsend_packet_popup_image(struct conn_list *dest, const struct packet_popup_image *packet)
90177{
90178 conn_list_iterate(dest, pconn) {
90181}
90182
90183#ifdef FREECIV_DELTA_PROTOCOL
90184#define hash_packet_sync_serial_100 hash_const
90185
90186#define cmp_packet_sync_serial_100 cmp_const
90187
90189#endif /* FREECIV_DELTA_PROTOCOL */
90190
90192{
90193#ifdef FREECIV_DELTA_PROTOCOL
90195 struct packet_sync_serial *old;
90196 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL;
90197#endif /* FREECIV_DELTA_PROTOCOL */
90199#ifdef FREECIV_JSON_CONNECTION
90200 struct plocation field_addr;
90201 {
90205 }
90206#endif /* FREECIV_JSON_CONNECTION */
90207
90208#ifdef FREECIV_DELTA_PROTOCOL
90209#ifdef FREECIV_JSON_CONNECTION
90210 field_addr.name = "fields";
90211#endif /* FREECIV_JSON_CONNECTION */
90212 DIO_BV_GET(&din, &field_addr, fields);
90213
90214#else /* FREECIV_DELTA_PROTOCOL */
90215#ifdef FREECIV_JSON_CONNECTION
90216 field_addr.name = "serial";
90217#endif /* FREECIV_JSON_CONNECTION */
90218 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
90220 }
90221#endif
90222 log_packet_detailed("packet_sync_serial_100: got info about ()");
90223
90224#ifdef FREECIV_DELTA_PROTOCOL
90225 if (NULL == *hash) {
90227 NULL, NULL, NULL, free);
90228 }
90229
90230 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90231 *real_packet = *old;
90232 } else {
90233 log_packet_detailed(" no old info");
90234 memset(real_packet, 0, sizeof(*real_packet));
90235 }
90236
90237 if (BV_ISSET(fields, 0)) {
90238 log_packet_detailed(" got field 'serial'");
90239#ifdef FREECIV_JSON_CONNECTION
90240 field_addr.name = "serial";
90241#endif /* FREECIV_JSON_CONNECTION */
90242 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
90244 }
90245 }
90246
90247 if (NULL == old) {
90248 old = fc_malloc(sizeof(*old));
90249 *old = *real_packet;
90250 genhash_insert(*hash, old, old);
90251 } else {
90252 *old = *real_packet;
90253 }
90254
90255#endif /* FREECIV_DELTA_PROTOCOL */
90257}
90258
90259static int send_packet_sync_serial_100(struct connection *pc, const struct packet_sync_serial *packet)
90260{
90261 const struct packet_sync_serial *real_packet = packet;
90262 int e;
90263#ifdef FREECIV_DELTA_PROTOCOL
90265 struct packet_sync_serial *old;
90266 bool differ;
90267 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL;
90268#endif /* FREECIV_DELTA_PROTOCOL */
90270#ifdef FREECIV_JSON_CONNECTION
90271 struct plocation field_addr;
90272 {
90276 }
90277#endif /* FREECIV_JSON_CONNECTION */
90278
90279 log_packet_detailed("packet_sync_serial_100: sending info about ()");
90280
90281#ifdef FREECIV_DELTA_PROTOCOL
90282 if (NULL == *hash) {
90284 NULL, NULL, NULL, free);
90285 }
90286 BV_CLR_ALL(fields);
90287
90288 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90289 old = fc_malloc(sizeof(*old));
90290 *old = *real_packet;
90291 genhash_insert(*hash, old, old);
90292 memset(old, 0, sizeof(*old));
90293 }
90294 differ = (old->serial != real_packet->serial);
90295 if (differ) {
90296 BV_SET(fields, 0);
90297 }
90298
90299
90300#ifdef FREECIV_JSON_CONNECTION
90301 field_addr.name = "fields";
90302#endif /* FREECIV_JSON_CONNECTION */
90303 e = 0;
90304 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90305 if (e) {
90306 log_packet_detailed("fields bitvector error detected");
90307 }
90308
90309 if (BV_ISSET(fields, 0)) {
90310 log_packet_detailed(" field 'serial' has changed");
90311#ifdef FREECIV_JSON_CONNECTION
90312 field_addr.name = "serial";
90313#endif /* FREECIV_JSON_CONNECTION */
90314 e = 0;
90315 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
90316 if (e) {
90317 log_packet_detailed("'serial' field error detected");
90318 }
90319 }
90320
90321 *old = *real_packet;
90322#endif /* FREECIV_DELTA_PROTOCOL */
90323#ifndef FREECIV_DELTA_PROTOCOL
90324#ifdef FREECIV_JSON_CONNECTION
90325 field_addr.name = "serial";
90326#endif /* FREECIV_JSON_CONNECTION */
90327 e = 0;
90328 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
90329 if (e) {
90330 log_packet_detailed("'serial' field error detected");
90331 }
90332
90333#endif
90335}
90336
90338{
90339 if (!pc->used) {
90340 log_error("WARNING: trying to send data to the closed connection %s",
90342 return -1;
90343 }
90344 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet != NULL, -1,
90345 "Handler for PACKET_SYNC_SERIAL not installed");
90346 return pc->phs.handlers->send[PACKET_SYNC_SERIAL].packet(pc, packet);
90347}
90348
90350{
90351 struct packet_sync_serial packet, *real_packet = &packet;
90352
90354
90356}
90357
90358#ifdef FREECIV_DELTA_PROTOCOL
90359#define hash_packet_sync_serial_reply_100 hash_const
90360
90361#define cmp_packet_sync_serial_reply_100 cmp_const
90362
90364#endif /* FREECIV_DELTA_PROTOCOL */
90365
90367{
90368#ifdef FREECIV_DELTA_PROTOCOL
90370 struct packet_sync_serial_reply *old;
90371 struct genhash **hash = pc->phs.received + PACKET_SYNC_SERIAL_REPLY;
90372#endif /* FREECIV_DELTA_PROTOCOL */
90374#ifdef FREECIV_JSON_CONNECTION
90375 struct plocation field_addr;
90376 {
90380 }
90381#endif /* FREECIV_JSON_CONNECTION */
90382
90383#ifdef FREECIV_DELTA_PROTOCOL
90384#ifdef FREECIV_JSON_CONNECTION
90385 field_addr.name = "fields";
90386#endif /* FREECIV_JSON_CONNECTION */
90387 DIO_BV_GET(&din, &field_addr, fields);
90388
90389#else /* FREECIV_DELTA_PROTOCOL */
90390#ifdef FREECIV_JSON_CONNECTION
90391 field_addr.name = "serial";
90392#endif /* FREECIV_JSON_CONNECTION */
90393 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
90395 }
90396#endif
90397 log_packet_detailed("packet_sync_serial_reply_100: got info about ()");
90398
90399#ifdef FREECIV_DELTA_PROTOCOL
90400 if (NULL == *hash) {
90402 NULL, NULL, NULL, free);
90403 }
90404
90405 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90406 *real_packet = *old;
90407 } else {
90408 log_packet_detailed(" no old info");
90409 memset(real_packet, 0, sizeof(*real_packet));
90410 }
90411
90412 if (BV_ISSET(fields, 0)) {
90413 log_packet_detailed(" got field 'serial'");
90414#ifdef FREECIV_JSON_CONNECTION
90415 field_addr.name = "serial";
90416#endif /* FREECIV_JSON_CONNECTION */
90417 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->serial)) {
90419 }
90420 }
90421
90422 if (NULL == old) {
90423 old = fc_malloc(sizeof(*old));
90424 *old = *real_packet;
90425 genhash_insert(*hash, old, old);
90426 } else {
90427 *old = *real_packet;
90428 }
90429
90430#endif /* FREECIV_DELTA_PROTOCOL */
90432}
90433
90435{
90436 const struct packet_sync_serial_reply *real_packet = packet;
90437 int e;
90438#ifdef FREECIV_DELTA_PROTOCOL
90440 struct packet_sync_serial_reply *old;
90441 bool differ;
90442 struct genhash **hash = pc->phs.sent + PACKET_SYNC_SERIAL_REPLY;
90443#endif /* FREECIV_DELTA_PROTOCOL */
90445#ifdef FREECIV_JSON_CONNECTION
90446 struct plocation field_addr;
90447 {
90451 }
90452#endif /* FREECIV_JSON_CONNECTION */
90453
90454 log_packet_detailed("packet_sync_serial_reply_100: sending info about ()");
90455
90456#ifdef FREECIV_DELTA_PROTOCOL
90457 if (NULL == *hash) {
90459 NULL, NULL, NULL, free);
90460 }
90461 BV_CLR_ALL(fields);
90462
90463 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90464 old = fc_malloc(sizeof(*old));
90465 *old = *real_packet;
90466 genhash_insert(*hash, old, old);
90467 memset(old, 0, sizeof(*old));
90468 }
90469 differ = (old->serial != real_packet->serial);
90470 if (differ) {
90471 BV_SET(fields, 0);
90472 }
90473
90474
90475#ifdef FREECIV_JSON_CONNECTION
90476 field_addr.name = "fields";
90477#endif /* FREECIV_JSON_CONNECTION */
90478 e = 0;
90479 e |= DIO_BV_PUT(&dout, &field_addr, fields);
90480 if (e) {
90481 log_packet_detailed("fields bitvector error detected");
90482 }
90483
90484 if (BV_ISSET(fields, 0)) {
90485 log_packet_detailed(" field 'serial' has changed");
90486#ifdef FREECIV_JSON_CONNECTION
90487 field_addr.name = "serial";
90488#endif /* FREECIV_JSON_CONNECTION */
90489 e = 0;
90490 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
90491 if (e) {
90492 log_packet_detailed("'serial' field error detected");
90493 }
90494 }
90495
90496 *old = *real_packet;
90497#endif /* FREECIV_DELTA_PROTOCOL */
90498#ifndef FREECIV_DELTA_PROTOCOL
90499#ifdef FREECIV_JSON_CONNECTION
90500 field_addr.name = "serial";
90501#endif /* FREECIV_JSON_CONNECTION */
90502 e = 0;
90503 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->serial);
90504 if (e) {
90505 log_packet_detailed("'serial' field error detected");
90506 }
90507
90508#endif
90510}
90511
90513{
90514 if (!pc->used) {
90515 log_error("WARNING: trying to send data to the closed connection %s",
90517 return -1;
90518 }
90519 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet != NULL, -1,
90520 "Handler for PACKET_SYNC_SERIAL_REPLY not installed");
90521 return pc->phs.handlers->send[PACKET_SYNC_SERIAL_REPLY].packet(pc, packet);
90522}
90523
90525{
90526 struct packet_sync_serial_reply packet, *real_packet = &packet;
90527
90529
90531}
90532
90533#ifdef FREECIV_DELTA_PROTOCOL
90535{
90536 const struct packet_web_city_info_addition *key = (const struct packet_web_city_info_addition *) vkey;
90537 genhash_val_t result = 0;
90538
90539 result += key->id;
90540
90541 result &= 0xFFFFFFFF;
90542 return result;
90543}
90544
90545static bool cmp_packet_web_city_info_addition_100(const void *vkey1, const void *vkey2)
90546{
90547 const struct packet_web_city_info_addition *old = (const struct packet_web_city_info_addition *) vkey1;
90549 bool differ;
90550
90551 differ = (old->id != real_packet->id);
90552
90553 return !differ;
90554}
90556#endif /* FREECIV_DELTA_PROTOCOL */
90557
90559{
90560#ifdef FREECIV_DELTA_PROTOCOL
90563 struct genhash **hash = pc->phs.received + PACKET_WEB_CITY_INFO_ADDITION;
90564#endif /* FREECIV_DELTA_PROTOCOL */
90566#ifdef FREECIV_JSON_CONNECTION
90567 struct plocation field_addr;
90568 {
90572 }
90573#endif /* FREECIV_JSON_CONNECTION */
90574
90575#ifdef FREECIV_DELTA_PROTOCOL
90576#ifdef FREECIV_JSON_CONNECTION
90577 field_addr.name = "fields";
90578#endif /* FREECIV_JSON_CONNECTION */
90579 DIO_BV_GET(&din, &field_addr, fields);
90580#ifdef FREECIV_JSON_CONNECTION
90581 field_addr.name = "id";
90582#endif /* FREECIV_JSON_CONNECTION */
90583 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
90585 }
90586
90587#else /* FREECIV_DELTA_PROTOCOL */
90588#ifdef FREECIV_JSON_CONNECTION
90589 field_addr.name = "id";
90590#endif /* FREECIV_JSON_CONNECTION */
90591 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
90593 }
90594#ifdef FREECIV_JSON_CONNECTION
90595 field_addr.name = "cma_enabled";
90596#endif /* FREECIV_JSON_CONNECTION */
90597 if (!DIO_GET(bool8, &din, &field_addr, &real_packet->cma_enabled)) {
90598 RECEIVE_PACKET_FIELD_ERROR(cma_enabled);
90599 }
90600#ifdef FREECIV_JSON_CONNECTION
90601 field_addr.name = "cm_parameter";
90602#endif /* FREECIV_JSON_CONNECTION */
90603 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
90605 }
90606#ifdef FREECIV_JSON_CONNECTION
90607 field_addr.name = "granary_size";
90608#endif /* FREECIV_JSON_CONNECTION */
90609 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
90610 RECEIVE_PACKET_FIELD_ERROR(granary_size);
90611 }
90612#ifdef FREECIV_JSON_CONNECTION
90613 field_addr.name = "granary_turns";
90614#endif /* FREECIV_JSON_CONNECTION */
90615 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
90616 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
90617 }
90618#ifdef FREECIV_JSON_CONNECTION
90619 field_addr.name = "can_build_unit";
90620#endif /* FREECIV_JSON_CONNECTION */
90621 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
90622 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
90623 }
90624#ifdef FREECIV_JSON_CONNECTION
90625 field_addr.name = "can_build_improvement";
90626#endif /* FREECIV_JSON_CONNECTION */
90627 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
90628 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
90629 }
90630#ifdef FREECIV_JSON_CONNECTION
90631 field_addr.name = "output_food";
90632#endif /* FREECIV_JSON_CONNECTION */
90633 {
90634 int i;
90635
90636#ifdef FREECIV_JSON_CONNECTION
90637 /* Enter array. */
90638 field_addr.sub_location = plocation_elem_new(0);
90639#endif /* FREECIV_JSON_CONNECTION */
90640
90641 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90642#ifdef FREECIV_JSON_CONNECTION
90643 field_addr.sub_location->number = i;
90644#endif /* FREECIV_JSON_CONNECTION */
90645
90646 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
90647 RECEIVE_PACKET_FIELD_ERROR(output_food);
90648 }
90649 }
90650
90651#ifdef FREECIV_JSON_CONNECTION
90652 /* Exit array. */
90653 FC_FREE(field_addr.sub_location);
90654#endif /* FREECIV_JSON_CONNECTION */
90655 }
90656#ifdef FREECIV_JSON_CONNECTION
90657 field_addr.name = "output_shield";
90658#endif /* FREECIV_JSON_CONNECTION */
90659 {
90660 int i;
90661
90662#ifdef FREECIV_JSON_CONNECTION
90663 /* Enter array. */
90664 field_addr.sub_location = plocation_elem_new(0);
90665#endif /* FREECIV_JSON_CONNECTION */
90666
90667 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90668#ifdef FREECIV_JSON_CONNECTION
90669 field_addr.sub_location->number = i;
90670#endif /* FREECIV_JSON_CONNECTION */
90671
90672 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
90673 RECEIVE_PACKET_FIELD_ERROR(output_shield);
90674 }
90675 }
90676
90677#ifdef FREECIV_JSON_CONNECTION
90678 /* Exit array. */
90679 FC_FREE(field_addr.sub_location);
90680#endif /* FREECIV_JSON_CONNECTION */
90681 }
90682#ifdef FREECIV_JSON_CONNECTION
90683 field_addr.name = "output_trade";
90684#endif /* FREECIV_JSON_CONNECTION */
90685 {
90686 int i;
90687
90688#ifdef FREECIV_JSON_CONNECTION
90689 /* Enter array. */
90690 field_addr.sub_location = plocation_elem_new(0);
90691#endif /* FREECIV_JSON_CONNECTION */
90692
90693 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90694#ifdef FREECIV_JSON_CONNECTION
90695 field_addr.sub_location->number = i;
90696#endif /* FREECIV_JSON_CONNECTION */
90697
90698 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
90699 RECEIVE_PACKET_FIELD_ERROR(output_trade);
90700 }
90701 }
90702
90703#ifdef FREECIV_JSON_CONNECTION
90704 /* Exit array. */
90705 FC_FREE(field_addr.sub_location);
90706#endif /* FREECIV_JSON_CONNECTION */
90707 }
90708#endif
90709 log_packet_detailed("packet_web_city_info_addition_100: got info about (%d)",
90710 real_packet->id);
90711
90712#ifdef FREECIV_DELTA_PROTOCOL
90713 if (NULL == *hash) {
90715 NULL, NULL, NULL, free);
90716 }
90717
90718 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
90719 *real_packet = *old;
90720 } else {
90721 int id;
90722
90723 id = real_packet->id;
90724
90725 log_packet_detailed(" no old info");
90726 memset(real_packet, 0, sizeof(*real_packet));
90727
90728 real_packet->id = id;
90729 }
90730
90731 real_packet->cma_enabled = BV_ISSET(fields, 0);
90732 if (BV_ISSET(fields, 1)) {
90733 log_packet_detailed(" got field 'cm_parameter'");
90734#ifdef FREECIV_JSON_CONNECTION
90735 field_addr.name = "cm_parameter";
90736#endif /* FREECIV_JSON_CONNECTION */
90737 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
90739 }
90740 }
90741 if (BV_ISSET(fields, 2)) {
90742 log_packet_detailed(" got field 'granary_size'");
90743#ifdef FREECIV_JSON_CONNECTION
90744 field_addr.name = "granary_size";
90745#endif /* FREECIV_JSON_CONNECTION */
90746 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->granary_size)) {
90747 RECEIVE_PACKET_FIELD_ERROR(granary_size);
90748 }
90749 }
90750 if (BV_ISSET(fields, 3)) {
90751 log_packet_detailed(" got field 'granary_turns'");
90752#ifdef FREECIV_JSON_CONNECTION
90753 field_addr.name = "granary_turns";
90754#endif /* FREECIV_JSON_CONNECTION */
90755 if (!DIO_GET(sint16, &din, &field_addr, &real_packet->granary_turns)) {
90756 RECEIVE_PACKET_FIELD_ERROR(granary_turns);
90757 }
90758 }
90759 if (BV_ISSET(fields, 4)) {
90760 log_packet_detailed(" got field 'can_build_unit'");
90761#ifdef FREECIV_JSON_CONNECTION
90762 field_addr.name = "can_build_unit";
90763#endif /* FREECIV_JSON_CONNECTION */
90764 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_unit)) {
90765 RECEIVE_PACKET_FIELD_ERROR(can_build_unit);
90766 }
90767 }
90768 if (BV_ISSET(fields, 5)) {
90769 log_packet_detailed(" got field 'can_build_improvement'");
90770#ifdef FREECIV_JSON_CONNECTION
90771 field_addr.name = "can_build_improvement";
90772#endif /* FREECIV_JSON_CONNECTION */
90773 if (!DIO_BV_GET(&din, &field_addr, real_packet->can_build_improvement)) {
90774 RECEIVE_PACKET_FIELD_ERROR(can_build_improvement);
90775 }
90776 }
90777 if (BV_ISSET(fields, 6)) {
90778 log_packet_detailed(" got field 'output_food'");
90779#ifdef FREECIV_JSON_CONNECTION
90780 field_addr.name = "output_food";
90781#endif /* FREECIV_JSON_CONNECTION */
90782 {
90783 int i;
90784
90785#ifdef FREECIV_JSON_CONNECTION
90786 /* Enter array. */
90787 field_addr.sub_location = plocation_elem_new(0);
90788#endif /* FREECIV_JSON_CONNECTION */
90789
90790 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90791#ifdef FREECIV_JSON_CONNECTION
90792 field_addr.sub_location->number = i;
90793#endif /* FREECIV_JSON_CONNECTION */
90794
90795 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_food[i])) {
90796 RECEIVE_PACKET_FIELD_ERROR(output_food);
90797 }
90798 }
90799
90800#ifdef FREECIV_JSON_CONNECTION
90801 /* Exit array. */
90802 FC_FREE(field_addr.sub_location);
90803#endif /* FREECIV_JSON_CONNECTION */
90804 }
90805 }
90806 if (BV_ISSET(fields, 7)) {
90807 log_packet_detailed(" got field 'output_shield'");
90808#ifdef FREECIV_JSON_CONNECTION
90809 field_addr.name = "output_shield";
90810#endif /* FREECIV_JSON_CONNECTION */
90811 {
90812 int i;
90813
90814#ifdef FREECIV_JSON_CONNECTION
90815 /* Enter array. */
90816 field_addr.sub_location = plocation_elem_new(0);
90817#endif /* FREECIV_JSON_CONNECTION */
90818
90819 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90820#ifdef FREECIV_JSON_CONNECTION
90821 field_addr.sub_location->number = i;
90822#endif /* FREECIV_JSON_CONNECTION */
90823
90824 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_shield[i])) {
90825 RECEIVE_PACKET_FIELD_ERROR(output_shield);
90826 }
90827 }
90828
90829#ifdef FREECIV_JSON_CONNECTION
90830 /* Exit array. */
90831 FC_FREE(field_addr.sub_location);
90832#endif /* FREECIV_JSON_CONNECTION */
90833 }
90834 }
90835 if (BV_ISSET(fields, 8)) {
90836 log_packet_detailed(" got field 'output_trade'");
90837#ifdef FREECIV_JSON_CONNECTION
90838 field_addr.name = "output_trade";
90839#endif /* FREECIV_JSON_CONNECTION */
90840 {
90841 int i;
90842
90843#ifdef FREECIV_JSON_CONNECTION
90844 /* Enter array. */
90845 field_addr.sub_location = plocation_elem_new(0);
90846#endif /* FREECIV_JSON_CONNECTION */
90847
90848 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90849#ifdef FREECIV_JSON_CONNECTION
90850 field_addr.sub_location->number = i;
90851#endif /* FREECIV_JSON_CONNECTION */
90852
90853 if (!DIO_GET(uint8, &din, &field_addr, &real_packet->output_trade[i])) {
90854 RECEIVE_PACKET_FIELD_ERROR(output_trade);
90855 }
90856 }
90857
90858#ifdef FREECIV_JSON_CONNECTION
90859 /* Exit array. */
90860 FC_FREE(field_addr.sub_location);
90861#endif /* FREECIV_JSON_CONNECTION */
90862 }
90863 }
90864
90865 if (NULL == old) {
90866 old = fc_malloc(sizeof(*old));
90867 *old = *real_packet;
90868 genhash_insert(*hash, old, old);
90869 } else {
90870 *old = *real_packet;
90871 }
90872
90873 hash = pc->phs.received + PACKET_CITY_SHORT_INFO;
90874 if (NULL != *hash) {
90876 }
90877
90878#endif /* FREECIV_DELTA_PROTOCOL */
90880}
90881
90882static int send_packet_web_city_info_addition_100(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
90883{
90884 const struct packet_web_city_info_addition *real_packet = packet;
90885 int e;
90886#ifdef FREECIV_DELTA_PROTOCOL
90889 bool differ;
90890 struct genhash **hash = pc->phs.sent + PACKET_WEB_CITY_INFO_ADDITION;
90891 int different = force_to_send;
90892#endif /* FREECIV_DELTA_PROTOCOL */
90894#ifdef FREECIV_JSON_CONNECTION
90895 struct plocation field_addr;
90896 {
90900 }
90901#endif /* FREECIV_JSON_CONNECTION */
90902
90903 log_packet_detailed("packet_web_city_info_addition_100: sending info about (%d)",
90904 real_packet->id);
90905
90906#ifdef FREECIV_DELTA_PROTOCOL
90907 if (NULL == *hash) {
90909 NULL, NULL, NULL, free);
90910 }
90911 BV_CLR_ALL(fields);
90912
90913 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
90914 old = fc_malloc(sizeof(*old));
90915 *old = *real_packet;
90916 genhash_insert(*hash, old, old);
90917 memset(old, 0, sizeof(*old));
90918 different = 1; /* Force to send. */
90919 }
90920 differ = (old->cma_enabled != real_packet->cma_enabled);
90921 if (differ) {
90922 different++;
90923 }
90924 if (packet->cma_enabled) {
90925 BV_SET(fields, 0);
90926 }
90927
90928 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
90929 if (differ) {
90930 different++;
90931 BV_SET(fields, 1);
90932 }
90933
90934 differ = (old->granary_size != real_packet->granary_size);
90935 if (differ) {
90936 different++;
90937 BV_SET(fields, 2);
90938 }
90939
90940 differ = (old->granary_turns != real_packet->granary_turns);
90941 if (differ) {
90942 different++;
90943 BV_SET(fields, 3);
90944 }
90945
90946 differ = !BV_ARE_EQUAL(old->can_build_unit, real_packet->can_build_unit);
90947 if (differ) {
90948 different++;
90949 BV_SET(fields, 4);
90950 }
90951
90952 differ = !BV_ARE_EQUAL(old->can_build_improvement, real_packet->can_build_improvement);
90953 if (differ) {
90954 different++;
90955 BV_SET(fields, 5);
90956 }
90957
90958 differ = FALSE;
90959 {
90960 int i;
90961
90962 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90963 differ = (old->output_food[i] != real_packet->output_food[i]);
90964 if (differ) {
90965 break;
90966 }
90967 }
90968 }
90969 if (differ) {
90970 different++;
90971 BV_SET(fields, 6);
90972 }
90973
90974 differ = FALSE;
90975 {
90976 int i;
90977
90978 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90979 differ = (old->output_shield[i] != real_packet->output_shield[i]);
90980 if (differ) {
90981 break;
90982 }
90983 }
90984 }
90985 if (differ) {
90986 different++;
90987 BV_SET(fields, 7);
90988 }
90989
90990 differ = FALSE;
90991 {
90992 int i;
90993
90994 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
90995 differ = (old->output_trade[i] != real_packet->output_trade[i]);
90996 if (differ) {
90997 break;
90998 }
90999 }
91000 }
91001 if (differ) {
91002 different++;
91003 BV_SET(fields, 8);
91004 }
91005
91006 if (different == 0) {
91007 log_packet_detailed(" no change -> discard");
91009 }
91010
91011#ifdef FREECIV_JSON_CONNECTION
91012 field_addr.name = "fields";
91013#endif /* FREECIV_JSON_CONNECTION */
91014 e = 0;
91015 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91016 if (e) {
91017 log_packet_detailed("fields bitvector error detected");
91018 }
91019#ifdef FREECIV_JSON_CONNECTION
91020 field_addr.name = "id";
91021#endif /* FREECIV_JSON_CONNECTION */
91022 e = 0;
91023 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
91024 if (e) {
91025 log_packet_detailed("'id' field error detected");
91026 }
91027
91028 /* field 0 is folded into the header */
91029 if (BV_ISSET(fields, 1)) {
91030 log_packet_detailed(" field 'cm_parameter' has changed");
91031#ifdef FREECIV_JSON_CONNECTION
91032 field_addr.name = "cm_parameter";
91033#endif /* FREECIV_JSON_CONNECTION */
91034 e = 0;
91035 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
91036 if (e) {
91037 log_packet_detailed("'cm_parameter' field error detected");
91038 }
91039 }
91040 if (BV_ISSET(fields, 2)) {
91041 log_packet_detailed(" field 'granary_size' has changed");
91042#ifdef FREECIV_JSON_CONNECTION
91043 field_addr.name = "granary_size";
91044#endif /* FREECIV_JSON_CONNECTION */
91045 e = 0;
91046 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
91047 if (e) {
91048 log_packet_detailed("'granary_size' field error detected");
91049 }
91050 }
91051 if (BV_ISSET(fields, 3)) {
91052 log_packet_detailed(" field 'granary_turns' has changed");
91053#ifdef FREECIV_JSON_CONNECTION
91054 field_addr.name = "granary_turns";
91055#endif /* FREECIV_JSON_CONNECTION */
91056 e = 0;
91057 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
91058 if (e) {
91059 log_packet_detailed("'granary_turns' field error detected");
91060 }
91061 }
91062 if (BV_ISSET(fields, 4)) {
91063 log_packet_detailed(" field 'can_build_unit' has changed");
91064#ifdef FREECIV_JSON_CONNECTION
91065 field_addr.name = "can_build_unit";
91066#endif /* FREECIV_JSON_CONNECTION */
91067 e = 0;
91068 e |= DIO_BV_PUT(&dout, &field_addr, packet->can_build_unit);
91069 if (e) {
91070 log_packet_detailed("'can_build_unit' field error detected");
91071 }
91072 }
91073 if (BV_ISSET(fields, 5)) {
91074 log_packet_detailed(" field 'can_build_improvement' has changed");
91075#ifdef FREECIV_JSON_CONNECTION
91076 field_addr.name = "can_build_improvement";
91077#endif /* FREECIV_JSON_CONNECTION */
91078 e = 0;
91080 if (e) {
91081 log_packet_detailed("'can_build_improvement' field error detected");
91082 }
91083 }
91084 if (BV_ISSET(fields, 6)) {
91085 log_packet_detailed(" field 'output_food' has changed");
91086#ifdef FREECIV_JSON_CONNECTION
91087 field_addr.name = "output_food";
91088#endif /* FREECIV_JSON_CONNECTION */
91089 e = 0;
91090 {
91091 int i;
91092
91093#ifdef FREECIV_JSON_CONNECTION
91094 /* Create the array. */
91096
91097 /* Enter the array. */
91098 field_addr.sub_location = plocation_elem_new(0);
91099#endif /* FREECIV_JSON_CONNECTION */
91100
91101 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
91102#ifdef FREECIV_JSON_CONNECTION
91103 /* Next array element. */
91104 field_addr.sub_location->number = i;
91105#endif /* FREECIV_JSON_CONNECTION */
91106
91107 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
91108 }
91109
91110#ifdef FREECIV_JSON_CONNECTION
91111 /* Exit array. */
91112 FC_FREE(field_addr.sub_location);
91113#endif /* FREECIV_JSON_CONNECTION */
91114 }
91115 if (e) {
91116 log_packet_detailed("'output_food' field error detected");
91117 }
91118 }
91119 if (BV_ISSET(fields, 7)) {
91120 log_packet_detailed(" field 'output_shield' has changed");
91121#ifdef FREECIV_JSON_CONNECTION
91122 field_addr.name = "output_shield";
91123#endif /* FREECIV_JSON_CONNECTION */
91124 e = 0;
91125 {
91126 int i;
91127
91128#ifdef FREECIV_JSON_CONNECTION
91129 /* Create the array. */
91131
91132 /* Enter the array. */
91133 field_addr.sub_location = plocation_elem_new(0);
91134#endif /* FREECIV_JSON_CONNECTION */
91135
91136 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
91137#ifdef FREECIV_JSON_CONNECTION
91138 /* Next array element. */
91139 field_addr.sub_location->number = i;
91140#endif /* FREECIV_JSON_CONNECTION */
91141
91142 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
91143 }
91144
91145#ifdef FREECIV_JSON_CONNECTION
91146 /* Exit array. */
91147 FC_FREE(field_addr.sub_location);
91148#endif /* FREECIV_JSON_CONNECTION */
91149 }
91150 if (e) {
91151 log_packet_detailed("'output_shield' field error detected");
91152 }
91153 }
91154 if (BV_ISSET(fields, 8)) {
91155 log_packet_detailed(" field 'output_trade' has changed");
91156#ifdef FREECIV_JSON_CONNECTION
91157 field_addr.name = "output_trade";
91158#endif /* FREECIV_JSON_CONNECTION */
91159 e = 0;
91160 {
91161 int i;
91162
91163#ifdef FREECIV_JSON_CONNECTION
91164 /* Create the array. */
91166
91167 /* Enter the array. */
91168 field_addr.sub_location = plocation_elem_new(0);
91169#endif /* FREECIV_JSON_CONNECTION */
91170
91171 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
91172#ifdef FREECIV_JSON_CONNECTION
91173 /* Next array element. */
91174 field_addr.sub_location->number = i;
91175#endif /* FREECIV_JSON_CONNECTION */
91176
91177 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
91178 }
91179
91180#ifdef FREECIV_JSON_CONNECTION
91181 /* Exit array. */
91182 FC_FREE(field_addr.sub_location);
91183#endif /* FREECIV_JSON_CONNECTION */
91184 }
91185 if (e) {
91186 log_packet_detailed("'output_trade' field error detected");
91187 }
91188 }
91189
91190 *old = *real_packet;
91191
91192 hash = pc->phs.sent + PACKET_CITY_SHORT_INFO;
91193 if (NULL != *hash) {
91195 }
91196#endif /* FREECIV_DELTA_PROTOCOL */
91197#ifndef FREECIV_DELTA_PROTOCOL
91198#ifdef FREECIV_JSON_CONNECTION
91199 field_addr.name = "id";
91200#endif /* FREECIV_JSON_CONNECTION */
91201 e = 0;
91202 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
91203 if (e) {
91204 log_packet_detailed("'id' field error detected");
91205 }
91206#ifdef FREECIV_JSON_CONNECTION
91207 field_addr.name = "cma_enabled";
91208#endif /* FREECIV_JSON_CONNECTION */
91209 e = 0;
91210 e |= DIO_PUT(bool8, &dout, &field_addr, real_packet->cma_enabled);
91211 if (e) {
91212 log_packet_detailed("'cma_enabled' field error detected");
91213 }
91214#ifdef FREECIV_JSON_CONNECTION
91215 field_addr.name = "cm_parameter";
91216#endif /* FREECIV_JSON_CONNECTION */
91217 e = 0;
91218 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
91219 if (e) {
91220 log_packet_detailed("'cm_parameter' field error detected");
91221 }
91222#ifdef FREECIV_JSON_CONNECTION
91223 field_addr.name = "granary_size";
91224#endif /* FREECIV_JSON_CONNECTION */
91225 e = 0;
91226 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->granary_size);
91227 if (e) {
91228 log_packet_detailed("'granary_size' field error detected");
91229 }
91230#ifdef FREECIV_JSON_CONNECTION
91231 field_addr.name = "granary_turns";
91232#endif /* FREECIV_JSON_CONNECTION */
91233 e = 0;
91234 e |= DIO_PUT(sint16, &dout, &field_addr, real_packet->granary_turns);
91235 if (e) {
91236 log_packet_detailed("'granary_turns' field error detected");
91237 }
91238#ifdef FREECIV_JSON_CONNECTION
91239 field_addr.name = "can_build_unit";
91240#endif /* FREECIV_JSON_CONNECTION */
91241 e = 0;
91242 e |= DIO_BV_PUT(&dout, &field_addr, packet->can_build_unit);
91243 if (e) {
91244 log_packet_detailed("'can_build_unit' field error detected");
91245 }
91246#ifdef FREECIV_JSON_CONNECTION
91247 field_addr.name = "can_build_improvement";
91248#endif /* FREECIV_JSON_CONNECTION */
91249 e = 0;
91251 if (e) {
91252 log_packet_detailed("'can_build_improvement' field error detected");
91253 }
91254#ifdef FREECIV_JSON_CONNECTION
91255 field_addr.name = "output_food";
91256#endif /* FREECIV_JSON_CONNECTION */
91257 e = 0;
91258 {
91259 int i;
91260
91261#ifdef FREECIV_JSON_CONNECTION
91262 /* Create the array. */
91264
91265 /* Enter the array. */
91266 field_addr.sub_location = plocation_elem_new(0);
91267#endif /* FREECIV_JSON_CONNECTION */
91268
91269 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
91270#ifdef FREECIV_JSON_CONNECTION
91271 /* Next array element. */
91272 field_addr.sub_location->number = i;
91273#endif /* FREECIV_JSON_CONNECTION */
91274
91275 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_food[i]);
91276 }
91277
91278#ifdef FREECIV_JSON_CONNECTION
91279 /* Exit array. */
91280 FC_FREE(field_addr.sub_location);
91281#endif /* FREECIV_JSON_CONNECTION */
91282 }
91283 if (e) {
91284 log_packet_detailed("'output_food' field error detected");
91285 }
91286#ifdef FREECIV_JSON_CONNECTION
91287 field_addr.name = "output_shield";
91288#endif /* FREECIV_JSON_CONNECTION */
91289 e = 0;
91290 {
91291 int i;
91292
91293#ifdef FREECIV_JSON_CONNECTION
91294 /* Create the array. */
91296
91297 /* Enter the array. */
91298 field_addr.sub_location = plocation_elem_new(0);
91299#endif /* FREECIV_JSON_CONNECTION */
91300
91301 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
91302#ifdef FREECIV_JSON_CONNECTION
91303 /* Next array element. */
91304 field_addr.sub_location->number = i;
91305#endif /* FREECIV_JSON_CONNECTION */
91306
91307 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_shield[i]);
91308 }
91309
91310#ifdef FREECIV_JSON_CONNECTION
91311 /* Exit array. */
91312 FC_FREE(field_addr.sub_location);
91313#endif /* FREECIV_JSON_CONNECTION */
91314 }
91315 if (e) {
91316 log_packet_detailed("'output_shield' field error detected");
91317 }
91318#ifdef FREECIV_JSON_CONNECTION
91319 field_addr.name = "output_trade";
91320#endif /* FREECIV_JSON_CONNECTION */
91321 e = 0;
91322 {
91323 int i;
91324
91325#ifdef FREECIV_JSON_CONNECTION
91326 /* Create the array. */
91328
91329 /* Enter the array. */
91330 field_addr.sub_location = plocation_elem_new(0);
91331#endif /* FREECIV_JSON_CONNECTION */
91332
91333 for (i = 0; i < MAX_CITY_TILES + 1; i++) {
91334#ifdef FREECIV_JSON_CONNECTION
91335 /* Next array element. */
91336 field_addr.sub_location->number = i;
91337#endif /* FREECIV_JSON_CONNECTION */
91338
91339 e |= DIO_PUT(uint8, &dout, &field_addr, real_packet->output_trade[i]);
91340 }
91341
91342#ifdef FREECIV_JSON_CONNECTION
91343 /* Exit array. */
91344 FC_FREE(field_addr.sub_location);
91345#endif /* FREECIV_JSON_CONNECTION */
91346 }
91347 if (e) {
91348 log_packet_detailed("'output_trade' field error detected");
91349 }
91350
91351#endif
91353}
91354
91355int send_packet_web_city_info_addition(struct connection *pc, const struct packet_web_city_info_addition *packet, bool force_to_send)
91356{
91357 if (!pc->used) {
91358 log_error("WARNING: trying to send data to the closed connection %s",
91360 return -1;
91361 }
91362 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send != NULL, -1,
91363 "Handler for PACKET_WEB_CITY_INFO_ADDITION not installed");
91364 return pc->phs.handlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send(pc, packet, force_to_send);
91365}
91366
91367void lsend_packet_web_city_info_addition(struct conn_list *dest, const struct packet_web_city_info_addition *packet, bool force_to_send)
91368{
91369 conn_list_iterate(dest, pconn) {
91370 send_packet_web_city_info_addition(pconn, packet, force_to_send);
91372}
91373
91374#ifdef FREECIV_DELTA_PROTOCOL
91376{
91377 const struct packet_web_cma_set *key = (const struct packet_web_cma_set *) vkey;
91378 genhash_val_t result = 0;
91379
91380 result += key->id;
91381
91382 result &= 0xFFFFFFFF;
91383 return result;
91384}
91385
91386static bool cmp_packet_web_cma_set_100(const void *vkey1, const void *vkey2)
91387{
91388 const struct packet_web_cma_set *old = (const struct packet_web_cma_set *) vkey1;
91389 const struct packet_web_cma_set *real_packet = (const struct packet_web_cma_set *) vkey2;
91390 bool differ;
91391
91392 differ = (old->id != real_packet->id);
91393
91394 return !differ;
91395}
91397#endif /* FREECIV_DELTA_PROTOCOL */
91398
91400{
91401#ifdef FREECIV_DELTA_PROTOCOL
91403 struct packet_web_cma_set *old;
91404 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_SET;
91405#endif /* FREECIV_DELTA_PROTOCOL */
91407#ifdef FREECIV_JSON_CONNECTION
91408 struct plocation field_addr;
91409 {
91413 }
91414#endif /* FREECIV_JSON_CONNECTION */
91415
91416#ifdef FREECIV_DELTA_PROTOCOL
91417#ifdef FREECIV_JSON_CONNECTION
91418 field_addr.name = "fields";
91419#endif /* FREECIV_JSON_CONNECTION */
91420 DIO_BV_GET(&din, &field_addr, fields);
91421#ifdef FREECIV_JSON_CONNECTION
91422 field_addr.name = "id";
91423#endif /* FREECIV_JSON_CONNECTION */
91424 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
91426 }
91427
91428#else /* FREECIV_DELTA_PROTOCOL */
91429#ifdef FREECIV_JSON_CONNECTION
91430 field_addr.name = "id";
91431#endif /* FREECIV_JSON_CONNECTION */
91432 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
91434 }
91435#ifdef FREECIV_JSON_CONNECTION
91436 field_addr.name = "cm_parameter";
91437#endif /* FREECIV_JSON_CONNECTION */
91438 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
91440 }
91441#endif
91442 log_packet_detailed("packet_web_cma_set_100: got info about (%d)",
91443 real_packet->id);
91444
91445#ifdef FREECIV_DELTA_PROTOCOL
91446 if (NULL == *hash) {
91448 NULL, NULL, NULL, free);
91449 }
91450
91451 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91452 *real_packet = *old;
91453 } else {
91454 int id;
91455
91456 id = real_packet->id;
91457
91458 log_packet_detailed(" no old info");
91459 memset(real_packet, 0, sizeof(*real_packet));
91460
91461 real_packet->id = id;
91462 }
91463
91464 if (BV_ISSET(fields, 0)) {
91465 log_packet_detailed(" got field 'cm_parameter'");
91466#ifdef FREECIV_JSON_CONNECTION
91467 field_addr.name = "cm_parameter";
91468#endif /* FREECIV_JSON_CONNECTION */
91469 if (!DIO_GET(cm_parameter, &din, &field_addr, &real_packet->cm_parameter)) {
91471 }
91472 }
91473
91474 if (NULL == old) {
91475 old = fc_malloc(sizeof(*old));
91476 *old = *real_packet;
91477 genhash_insert(*hash, old, old);
91478 } else {
91479 *old = *real_packet;
91480 }
91481
91482#endif /* FREECIV_DELTA_PROTOCOL */
91484}
91485
91486static int send_packet_web_cma_set_100(struct connection *pc, const struct packet_web_cma_set *packet)
91487{
91488 const struct packet_web_cma_set *real_packet = packet;
91489 int e;
91490#ifdef FREECIV_DELTA_PROTOCOL
91492 struct packet_web_cma_set *old;
91493 bool differ;
91494 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_SET;
91495#endif /* FREECIV_DELTA_PROTOCOL */
91497#ifdef FREECIV_JSON_CONNECTION
91498 struct plocation field_addr;
91499 {
91503 }
91504#endif /* FREECIV_JSON_CONNECTION */
91505
91506 log_packet_detailed("packet_web_cma_set_100: sending info about (%d)",
91507 real_packet->id);
91508
91509#ifdef FREECIV_DELTA_PROTOCOL
91510 if (NULL == *hash) {
91512 NULL, NULL, NULL, free);
91513 }
91514 BV_CLR_ALL(fields);
91515
91516 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91517 old = fc_malloc(sizeof(*old));
91518 *old = *real_packet;
91519 genhash_insert(*hash, old, old);
91520 memset(old, 0, sizeof(*old));
91521 }
91522 differ = !cm_are_parameter_equal(&old->cm_parameter, &real_packet->cm_parameter);
91523 if (differ) {
91524 BV_SET(fields, 0);
91525 }
91526
91527
91528#ifdef FREECIV_JSON_CONNECTION
91529 field_addr.name = "fields";
91530#endif /* FREECIV_JSON_CONNECTION */
91531 e = 0;
91532 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91533 if (e) {
91534 log_packet_detailed("fields bitvector error detected");
91535 }
91536#ifdef FREECIV_JSON_CONNECTION
91537 field_addr.name = "id";
91538#endif /* FREECIV_JSON_CONNECTION */
91539 e = 0;
91540 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
91541 if (e) {
91542 log_packet_detailed("'id' field error detected");
91543 }
91544
91545 if (BV_ISSET(fields, 0)) {
91546 log_packet_detailed(" field 'cm_parameter' has changed");
91547#ifdef FREECIV_JSON_CONNECTION
91548 field_addr.name = "cm_parameter";
91549#endif /* FREECIV_JSON_CONNECTION */
91550 e = 0;
91551 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
91552 if (e) {
91553 log_packet_detailed("'cm_parameter' field error detected");
91554 }
91555 }
91556
91557 *old = *real_packet;
91558#endif /* FREECIV_DELTA_PROTOCOL */
91559#ifndef FREECIV_DELTA_PROTOCOL
91560#ifdef FREECIV_JSON_CONNECTION
91561 field_addr.name = "id";
91562#endif /* FREECIV_JSON_CONNECTION */
91563 e = 0;
91564 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
91565 if (e) {
91566 log_packet_detailed("'id' field error detected");
91567 }
91568#ifdef FREECIV_JSON_CONNECTION
91569 field_addr.name = "cm_parameter";
91570#endif /* FREECIV_JSON_CONNECTION */
91571 e = 0;
91572 e |= DIO_PUT(cm_parameter, &dout, &field_addr, &real_packet->cm_parameter);
91573 if (e) {
91574 log_packet_detailed("'cm_parameter' field error detected");
91575 }
91576
91577#endif
91579}
91580
91582{
91583 if (!pc->used) {
91584 log_error("WARNING: trying to send data to the closed connection %s",
91586 return -1;
91587 }
91588 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet != NULL, -1,
91589 "Handler for PACKET_WEB_CMA_SET not installed");
91590 return pc->phs.handlers->send[PACKET_WEB_CMA_SET].packet(pc, packet);
91591}
91592
91593#ifdef FREECIV_DELTA_PROTOCOL
91594#define hash_packet_web_cma_clear_100 hash_const
91595
91596#define cmp_packet_web_cma_clear_100 cmp_const
91597
91599#endif /* FREECIV_DELTA_PROTOCOL */
91600
91602{
91603#ifdef FREECIV_DELTA_PROTOCOL
91605 struct packet_web_cma_clear *old;
91606 struct genhash **hash = pc->phs.received + PACKET_WEB_CMA_CLEAR;
91607#endif /* FREECIV_DELTA_PROTOCOL */
91609#ifdef FREECIV_JSON_CONNECTION
91610 struct plocation field_addr;
91611 {
91615 }
91616#endif /* FREECIV_JSON_CONNECTION */
91617
91618#ifdef FREECIV_DELTA_PROTOCOL
91619#ifdef FREECIV_JSON_CONNECTION
91620 field_addr.name = "fields";
91621#endif /* FREECIV_JSON_CONNECTION */
91622 DIO_BV_GET(&din, &field_addr, fields);
91623
91624#else /* FREECIV_DELTA_PROTOCOL */
91625#ifdef FREECIV_JSON_CONNECTION
91626 field_addr.name = "id";
91627#endif /* FREECIV_JSON_CONNECTION */
91628 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
91630 }
91631#endif
91632 log_packet_detailed("packet_web_cma_clear_100: got info about ()");
91633
91634#ifdef FREECIV_DELTA_PROTOCOL
91635 if (NULL == *hash) {
91637 NULL, NULL, NULL, free);
91638 }
91639
91640 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91641 *real_packet = *old;
91642 } else {
91643 log_packet_detailed(" no old info");
91644 memset(real_packet, 0, sizeof(*real_packet));
91645 }
91646
91647 if (BV_ISSET(fields, 0)) {
91648 log_packet_detailed(" got field 'id'");
91649#ifdef FREECIV_JSON_CONNECTION
91650 field_addr.name = "id";
91651#endif /* FREECIV_JSON_CONNECTION */
91652 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->id)) {
91654 }
91655 }
91656
91657 if (NULL == old) {
91658 old = fc_malloc(sizeof(*old));
91659 *old = *real_packet;
91660 genhash_insert(*hash, old, old);
91661 } else {
91662 *old = *real_packet;
91663 }
91664
91665#endif /* FREECIV_DELTA_PROTOCOL */
91667}
91668
91669static int send_packet_web_cma_clear_100(struct connection *pc, const struct packet_web_cma_clear *packet)
91670{
91671 const struct packet_web_cma_clear *real_packet = packet;
91672 int e;
91673#ifdef FREECIV_DELTA_PROTOCOL
91675 struct packet_web_cma_clear *old;
91676 bool differ;
91677 struct genhash **hash = pc->phs.sent + PACKET_WEB_CMA_CLEAR;
91678#endif /* FREECIV_DELTA_PROTOCOL */
91680#ifdef FREECIV_JSON_CONNECTION
91681 struct plocation field_addr;
91682 {
91686 }
91687#endif /* FREECIV_JSON_CONNECTION */
91688
91689 log_packet_detailed("packet_web_cma_clear_100: sending info about ()");
91690
91691#ifdef FREECIV_DELTA_PROTOCOL
91692 if (NULL == *hash) {
91694 NULL, NULL, NULL, free);
91695 }
91696 BV_CLR_ALL(fields);
91697
91698 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91699 old = fc_malloc(sizeof(*old));
91700 *old = *real_packet;
91701 genhash_insert(*hash, old, old);
91702 memset(old, 0, sizeof(*old));
91703 }
91704 differ = (old->id != real_packet->id);
91705 if (differ) {
91706 BV_SET(fields, 0);
91707 }
91708
91709
91710#ifdef FREECIV_JSON_CONNECTION
91711 field_addr.name = "fields";
91712#endif /* FREECIV_JSON_CONNECTION */
91713 e = 0;
91714 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91715 if (e) {
91716 log_packet_detailed("fields bitvector error detected");
91717 }
91718
91719 if (BV_ISSET(fields, 0)) {
91720 log_packet_detailed(" field 'id' has changed");
91721#ifdef FREECIV_JSON_CONNECTION
91722 field_addr.name = "id";
91723#endif /* FREECIV_JSON_CONNECTION */
91724 e = 0;
91725 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
91726 if (e) {
91727 log_packet_detailed("'id' field error detected");
91728 }
91729 }
91730
91731 *old = *real_packet;
91732#endif /* FREECIV_DELTA_PROTOCOL */
91733#ifndef FREECIV_DELTA_PROTOCOL
91734#ifdef FREECIV_JSON_CONNECTION
91735 field_addr.name = "id";
91736#endif /* FREECIV_JSON_CONNECTION */
91737 e = 0;
91738 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->id);
91739 if (e) {
91740 log_packet_detailed("'id' field error detected");
91741 }
91742
91743#endif
91745}
91746
91748{
91749 if (!pc->used) {
91750 log_error("WARNING: trying to send data to the closed connection %s",
91752 return -1;
91753 }
91754 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet != NULL, -1,
91755 "Handler for PACKET_WEB_CMA_CLEAR not installed");
91756 return pc->phs.handlers->send[PACKET_WEB_CMA_CLEAR].packet(pc, packet);
91757}
91758
91759#ifdef FREECIV_DELTA_PROTOCOL
91761{
91762 const struct packet_web_player_info_addition *key = (const struct packet_web_player_info_addition *) vkey;
91763 genhash_val_t result = 0;
91764
91765 result += key->playerno;
91766
91767 result &= 0xFFFFFFFF;
91768 return result;
91769}
91770
91771static bool cmp_packet_web_player_info_addition_100(const void *vkey1, const void *vkey2)
91772{
91773 const struct packet_web_player_info_addition *old = (const struct packet_web_player_info_addition *) vkey1;
91775 bool differ;
91776
91777 differ = (old->playerno != real_packet->playerno);
91778
91779 return !differ;
91780}
91782#endif /* FREECIV_DELTA_PROTOCOL */
91783
91785{
91786#ifdef FREECIV_DELTA_PROTOCOL
91789 struct genhash **hash = pc->phs.received + PACKET_WEB_PLAYER_INFO_ADDITION;
91790#endif /* FREECIV_DELTA_PROTOCOL */
91792#ifdef FREECIV_JSON_CONNECTION
91793 struct plocation field_addr;
91794 {
91798 }
91799#endif /* FREECIV_JSON_CONNECTION */
91800
91801#ifdef FREECIV_DELTA_PROTOCOL
91802#ifdef FREECIV_JSON_CONNECTION
91803 field_addr.name = "fields";
91804#endif /* FREECIV_JSON_CONNECTION */
91805 DIO_BV_GET(&din, &field_addr, fields);
91806#ifdef FREECIV_JSON_CONNECTION
91807 field_addr.name = "playerno";
91808#endif /* FREECIV_JSON_CONNECTION */
91809 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
91811 }
91812
91813#else /* FREECIV_DELTA_PROTOCOL */
91814#ifdef FREECIV_JSON_CONNECTION
91815 field_addr.name = "playerno";
91816#endif /* FREECIV_JSON_CONNECTION */
91817 if (!DIO_GET(uint16, &din, &field_addr, &real_packet->playerno)) {
91819 }
91820#ifdef FREECIV_JSON_CONNECTION
91821 field_addr.name = "expected_income";
91822#endif /* FREECIV_JSON_CONNECTION */
91823 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
91824 RECEIVE_PACKET_FIELD_ERROR(expected_income);
91825 }
91826#endif
91827 log_packet_detailed("packet_web_player_info_addition_100: got info about (%d)",
91828 real_packet->playerno);
91829
91830#ifdef FREECIV_DELTA_PROTOCOL
91831 if (NULL == *hash) {
91833 NULL, NULL, NULL, free);
91834 }
91835
91836 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
91837 *real_packet = *old;
91838 } else {
91839 int playerno;
91840
91841 playerno = real_packet->playerno;
91842
91843 log_packet_detailed(" no old info");
91844 memset(real_packet, 0, sizeof(*real_packet));
91845
91846 real_packet->playerno = playerno;
91847 }
91848
91849 if (BV_ISSET(fields, 0)) {
91850 log_packet_detailed(" got field 'expected_income'");
91851#ifdef FREECIV_JSON_CONNECTION
91852 field_addr.name = "expected_income";
91853#endif /* FREECIV_JSON_CONNECTION */
91854 if (!DIO_GET(uint32, &din, &field_addr, &real_packet->expected_income)) {
91855 RECEIVE_PACKET_FIELD_ERROR(expected_income);
91856 }
91857 }
91858
91859 if (NULL == old) {
91860 old = fc_malloc(sizeof(*old));
91861 *old = *real_packet;
91862 genhash_insert(*hash, old, old);
91863 } else {
91864 *old = *real_packet;
91865 }
91866
91867#endif /* FREECIV_DELTA_PROTOCOL */
91869}
91870
91872{
91873 const struct packet_web_player_info_addition *real_packet = packet;
91874 int e;
91875#ifdef FREECIV_DELTA_PROTOCOL
91878 bool differ;
91879 struct genhash **hash = pc->phs.sent + PACKET_WEB_PLAYER_INFO_ADDITION;
91880 int different = 0;
91881#endif /* FREECIV_DELTA_PROTOCOL */
91883#ifdef FREECIV_JSON_CONNECTION
91884 struct plocation field_addr;
91885 {
91889 }
91890#endif /* FREECIV_JSON_CONNECTION */
91891
91892 log_packet_detailed("packet_web_player_info_addition_100: sending info about (%d)",
91893 real_packet->playerno);
91894
91895#ifdef FREECIV_DELTA_PROTOCOL
91896 if (NULL == *hash) {
91898 NULL, NULL, NULL, free);
91899 }
91900 BV_CLR_ALL(fields);
91901
91902 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
91903 old = fc_malloc(sizeof(*old));
91904 *old = *real_packet;
91905 genhash_insert(*hash, old, old);
91906 memset(old, 0, sizeof(*old));
91907 different = 1; /* Force to send. */
91908 }
91909 differ = (old->expected_income != real_packet->expected_income);
91910 if (differ) {
91911 different++;
91912 BV_SET(fields, 0);
91913 }
91914
91915 if (different == 0) {
91916 log_packet_detailed(" no change -> discard");
91918 }
91919
91920#ifdef FREECIV_JSON_CONNECTION
91921 field_addr.name = "fields";
91922#endif /* FREECIV_JSON_CONNECTION */
91923 e = 0;
91924 e |= DIO_BV_PUT(&dout, &field_addr, fields);
91925 if (e) {
91926 log_packet_detailed("fields bitvector error detected");
91927 }
91928#ifdef FREECIV_JSON_CONNECTION
91929 field_addr.name = "playerno";
91930#endif /* FREECIV_JSON_CONNECTION */
91931 e = 0;
91932 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
91933 if (e) {
91934 log_packet_detailed("'playerno' field error detected");
91935 }
91936
91937 if (BV_ISSET(fields, 0)) {
91938 log_packet_detailed(" field 'expected_income' has changed");
91939#ifdef FREECIV_JSON_CONNECTION
91940 field_addr.name = "expected_income";
91941#endif /* FREECIV_JSON_CONNECTION */
91942 e = 0;
91943 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
91944 if (e) {
91945 log_packet_detailed("'expected_income' field error detected");
91946 }
91947 }
91948
91949 *old = *real_packet;
91950#endif /* FREECIV_DELTA_PROTOCOL */
91951#ifndef FREECIV_DELTA_PROTOCOL
91952#ifdef FREECIV_JSON_CONNECTION
91953 field_addr.name = "playerno";
91954#endif /* FREECIV_JSON_CONNECTION */
91955 e = 0;
91956 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->playerno);
91957 if (e) {
91958 log_packet_detailed("'playerno' field error detected");
91959 }
91960#ifdef FREECIV_JSON_CONNECTION
91961 field_addr.name = "expected_income";
91962#endif /* FREECIV_JSON_CONNECTION */
91963 e = 0;
91964 e |= DIO_PUT(uint32, &dout, &field_addr, real_packet->expected_income);
91965 if (e) {
91966 log_packet_detailed("'expected_income' field error detected");
91967 }
91968
91969#endif
91971}
91972
91974{
91975 if (!pc->used) {
91976 log_error("WARNING: trying to send data to the closed connection %s",
91978 return -1;
91979 }
91980 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet != NULL, -1,
91981 "Handler for PACKET_WEB_PLAYER_INFO_ADDITION not installed");
91982 return pc->phs.handlers->send[PACKET_WEB_PLAYER_INFO_ADDITION].packet(pc, packet);
91983}
91984
91985#ifdef FREECIV_DELTA_PROTOCOL
91987{
91988 const struct packet_web_ruleset_unit_addition *key = (const struct packet_web_ruleset_unit_addition *) vkey;
91989 genhash_val_t result = 0;
91990
91991 result += key->id;
91992
91993 result &= 0xFFFFFFFF;
91994 return result;
91995}
91996
91997static bool cmp_packet_web_ruleset_unit_addition_100(const void *vkey1, const void *vkey2)
91998{
91999 const struct packet_web_ruleset_unit_addition *old = (const struct packet_web_ruleset_unit_addition *) vkey1;
92001 bool differ;
92002
92003 differ = (old->id != real_packet->id);
92004
92005 return !differ;
92006}
92008#endif /* FREECIV_DELTA_PROTOCOL */
92009
92011{
92012#ifdef FREECIV_DELTA_PROTOCOL
92015 struct genhash **hash = pc->phs.received + PACKET_WEB_RULESET_UNIT_ADDITION;
92016#endif /* FREECIV_DELTA_PROTOCOL */
92018#ifdef FREECIV_JSON_CONNECTION
92019 struct plocation field_addr;
92020 {
92024 }
92025#endif /* FREECIV_JSON_CONNECTION */
92026
92027#ifdef FREECIV_DELTA_PROTOCOL
92028#ifdef FREECIV_JSON_CONNECTION
92029 field_addr.name = "fields";
92030#endif /* FREECIV_JSON_CONNECTION */
92031 DIO_BV_GET(&din, &field_addr, fields);
92032#ifdef FREECIV_JSON_CONNECTION
92033 field_addr.name = "id";
92034#endif /* FREECIV_JSON_CONNECTION */
92035 {
92036 int readin;
92037
92038 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
92040 }
92041 real_packet->id = readin;
92042 }
92043
92044#else /* FREECIV_DELTA_PROTOCOL */
92045#ifdef FREECIV_JSON_CONNECTION
92046 field_addr.name = "id";
92047#endif /* FREECIV_JSON_CONNECTION */
92048 {
92049 int readin;
92050
92051 if (!DIO_GET(uint16, &din, &field_addr, &readin)) {
92053 }
92054 real_packet->id = readin;
92055 }
92056#ifdef FREECIV_JSON_CONNECTION
92057 field_addr.name = "utype_actions";
92058#endif /* FREECIV_JSON_CONNECTION */
92059 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
92060 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
92061 }
92062#endif
92063 log_packet_detailed("packet_web_ruleset_unit_addition_100: got info about (%d)",
92064 real_packet->id);
92065
92066#ifdef FREECIV_DELTA_PROTOCOL
92067 if (NULL == *hash) {
92069 NULL, NULL, NULL, free);
92070 }
92071
92072 if (genhash_lookup(*hash, real_packet, (void **) &old)) {
92073 *real_packet = *old;
92074 } else {
92076
92077 id = real_packet->id;
92078
92079 log_packet_detailed(" no old info");
92080 memset(real_packet, 0, sizeof(*real_packet));
92081
92082 real_packet->id = id;
92083 }
92084
92085 if (BV_ISSET(fields, 0)) {
92086 log_packet_detailed(" got field 'utype_actions'");
92087#ifdef FREECIV_JSON_CONNECTION
92088 field_addr.name = "utype_actions";
92089#endif /* FREECIV_JSON_CONNECTION */
92090 if (!DIO_BV_GET(&din, &field_addr, real_packet->utype_actions)) {
92091 RECEIVE_PACKET_FIELD_ERROR(utype_actions);
92092 }
92093 }
92094
92095 if (NULL == old) {
92096 old = fc_malloc(sizeof(*old));
92097 *old = *real_packet;
92098 genhash_insert(*hash, old, old);
92099 } else {
92100 *old = *real_packet;
92101 }
92102
92103#endif /* FREECIV_DELTA_PROTOCOL */
92105}
92106
92108{
92109 const struct packet_web_ruleset_unit_addition *real_packet = packet;
92110 int e;
92111#ifdef FREECIV_DELTA_PROTOCOL
92114 bool differ;
92115 struct genhash **hash = pc->phs.sent + PACKET_WEB_RULESET_UNIT_ADDITION;
92116#endif /* FREECIV_DELTA_PROTOCOL */
92118#ifdef FREECIV_JSON_CONNECTION
92119 struct plocation field_addr;
92120 {
92124 }
92125#endif /* FREECIV_JSON_CONNECTION */
92126
92127 log_packet_detailed("packet_web_ruleset_unit_addition_100: sending info about (%d)",
92128 real_packet->id);
92129
92130#ifdef FREECIV_DELTA_PROTOCOL
92131 if (NULL == *hash) {
92133 NULL, NULL, NULL, free);
92134 }
92135 BV_CLR_ALL(fields);
92136
92137 if (!genhash_lookup(*hash, real_packet, (void **) &old)) {
92138 old = fc_malloc(sizeof(*old));
92139 *old = *real_packet;
92140 genhash_insert(*hash, old, old);
92141 memset(old, 0, sizeof(*old));
92142 }
92143 differ = !BV_ARE_EQUAL(old->utype_actions, real_packet->utype_actions);
92144 if (differ) {
92145 BV_SET(fields, 0);
92146 }
92147
92148
92149#ifdef FREECIV_JSON_CONNECTION
92150 field_addr.name = "fields";
92151#endif /* FREECIV_JSON_CONNECTION */
92152 e = 0;
92153 e |= DIO_BV_PUT(&dout, &field_addr, fields);
92154 if (e) {
92155 log_packet_detailed("fields bitvector error detected");
92156 }
92157#ifdef FREECIV_JSON_CONNECTION
92158 field_addr.name = "id";
92159#endif /* FREECIV_JSON_CONNECTION */
92160 e = 0;
92161 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
92162 if (e) {
92163 log_packet_detailed("'id' field error detected");
92164 }
92165
92166 if (BV_ISSET(fields, 0)) {
92167 log_packet_detailed(" field 'utype_actions' has changed");
92168#ifdef FREECIV_JSON_CONNECTION
92169 field_addr.name = "utype_actions";
92170#endif /* FREECIV_JSON_CONNECTION */
92171 e = 0;
92172 e |= DIO_BV_PUT(&dout, &field_addr, packet->utype_actions);
92173 if (e) {
92174 log_packet_detailed("'utype_actions' field error detected");
92175 }
92176 }
92177
92178 *old = *real_packet;
92179#endif /* FREECIV_DELTA_PROTOCOL */
92180#ifndef FREECIV_DELTA_PROTOCOL
92181#ifdef FREECIV_JSON_CONNECTION
92182 field_addr.name = "id";
92183#endif /* FREECIV_JSON_CONNECTION */
92184 e = 0;
92185 e |= DIO_PUT(uint16, &dout, &field_addr, real_packet->id);
92186 if (e) {
92187 log_packet_detailed("'id' field error detected");
92188 }
92189#ifdef FREECIV_JSON_CONNECTION
92190 field_addr.name = "utype_actions";
92191#endif /* FREECIV_JSON_CONNECTION */
92192 e = 0;
92193 e |= DIO_BV_PUT(&dout, &field_addr, packet->utype_actions);
92194 if (e) {
92195 log_packet_detailed("'utype_actions' field error detected");
92196 }
92197
92198#endif
92200}
92201
92203{
92204 if (!pc->used) {
92205 log_error("WARNING: trying to send data to the closed connection %s",
92207 return -1;
92208 }
92209 fc_assert_ret_val_msg(pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet != NULL, -1,
92210 "Handler for PACKET_WEB_RULESET_UNIT_ADDITION not installed");
92211 return pc->phs.handlers->send[PACKET_WEB_RULESET_UNIT_ADDITION].packet(pc, packet);
92212}
92213
92220
92222{
92224 "Packets have support for unknown 'hap2clnt' capability!");
92226 "Packets have support for unknown 'tu32' capability!");
92227 phandlers->send[PACKET_CITY_RALLY_POINT].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_rally_point_100;
92229 phandlers->send[PACKET_WORKER_TASK].packet = (int(*)(struct connection *, const void *)) send_packet_worker_task_100;
92233 phandlers->send[PACKET_EDIT_STARTPOS].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_100;
92235 phandlers->send[PACKET_EDIT_STARTPOS_FULL].packet = (int(*)(struct connection *, const void *)) send_packet_edit_startpos_full_100;
92237 if (is_server()) {
92240 phandlers->send[PACKET_INVESTIGATE_STARTED].packet = (int(*)(struct connection *, const void *)) send_packet_investigate_started_100;
92242 phandlers->send[PACKET_SERVER_JOIN_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_reply_100;
92243 phandlers->send[PACKET_AUTHENTICATION_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_authentication_req_100;
92245 phandlers->send[PACKET_ENDGAME_REPORT].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_report_100;
92246 phandlers->send[PACKET_ENDGAME_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_endgame_player_100;
92247 phandlers->send[PACKET_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_tile_info_100;
92248 phandlers->send[PACKET_GAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_game_info_100;
92249 phandlers->send[PACKET_CALENDAR_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_calendar_info_100;
92250 phandlers->send[PACKET_TIMEOUT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_timeout_info_100;
92251 phandlers->send[PACKET_MAP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_map_info_100;
92252 phandlers->send[PACKET_NUKE_TILE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_nuke_tile_info_100;
92253 phandlers->send[PACKET_TEAM_NAME_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_team_name_info_100;
92254 phandlers->send[PACKET_ACHIEVEMENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_achievement_info_100;
92255 phandlers->send[PACKET_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_100;
92256 phandlers->send[PACKET_EARLY_CHAT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_early_chat_msg_100;
92257 phandlers->send[PACKET_CONNECT_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_connect_msg_100;
92258 phandlers->send[PACKET_SERVER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_server_info_100;
92259 phandlers->send[PACKET_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_city_remove_100;
92260 phandlers->send[PACKET_CITY_NATIONALITIES].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_nationalities_100;
92262 phandlers->send[PACKET_CITY_SHORT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_city_short_info_100;
92263 phandlers->send[PACKET_TRADE_ROUTE_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_trade_route_info_100;
92265 phandlers->send[PACKET_CITY_SABOTAGE_LIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_sabotage_list_100;
92266 phandlers->send[PACKET_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_player_remove_100;
92267 phandlers->send[PACKET_PLAYER_DIPLSTATE].packet = (int(*)(struct connection *, const void *)) send_packet_player_diplstate_100;
92268 phandlers->send[PACKET_RESEARCH_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_research_info_100;
92269 phandlers->send[PACKET_UNKNOWN_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_unknown_research_100;
92270 phandlers->send[PACKET_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_remove_100;
92271 phandlers->send[PACKET_UNIT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_info_100;
92272 phandlers->send[PACKET_UNIT_SHORT_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_unit_short_info_100;
92273 phandlers->send[PACKET_UNIT_COMBAT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_unit_combat_info_100;
92274 phandlers->send[PACKET_UNIT_ACTION_ANSWER].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_answer_100;
92275 phandlers->send[PACKET_UNIT_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_actions_100;
92281 phandlers->send[PACKET_PAGE_MSG].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_100;
92282 phandlers->send[PACKET_PAGE_MSG_PART].packet = (int(*)(struct connection *, const void *)) send_packet_page_msg_part_100;
92283 phandlers->send[PACKET_CONN_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_info_100;
92284 phandlers->send[PACKET_CONN_PING_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_conn_ping_info_100;
92285 phandlers->send[PACKET_CONN_PING].no_packet = (int(*)(struct connection *)) send_packet_conn_ping_100;
92286 phandlers->send[PACKET_END_PHASE].no_packet = (int(*)(struct connection *)) send_packet_end_phase_100;
92287 phandlers->send[PACKET_START_PHASE].packet = (int(*)(struct connection *, const void *)) send_packet_start_phase_100;
92288 phandlers->send[PACKET_NEW_YEAR].packet = (int(*)(struct connection *, const void *)) send_packet_new_year_100;
92289 phandlers->send[PACKET_BEGIN_TURN].no_packet = (int(*)(struct connection *)) send_packet_begin_turn_100;
92290 phandlers->send[PACKET_END_TURN].no_packet = (int(*)(struct connection *)) send_packet_end_turn_100;
92292 phandlers->send[PACKET_THAW_CLIENT].no_packet = (int(*)(struct connection *)) send_packet_thaw_client_100;
92293 phandlers->send[PACKET_SPACESHIP_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_info_100;
92294 phandlers->send[PACKET_RULESET_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_100;
92295 phandlers->send[PACKET_RULESET_UNIT_BONUS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_bonus_100;
92296 phandlers->send[PACKET_RULESET_UNIT_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_flag_100;
92298 phandlers->send[PACKET_RULESET_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_game_100;
92299 phandlers->send[PACKET_RULESET_SPECIALIST].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_specialist_100;
92301 phandlers->send[PACKET_RULESET_TECH].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_100;
92302 phandlers->send[PACKET_RULESET_TECH_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_class_100;
92303 phandlers->send[PACKET_RULESET_TECH_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_tech_flag_100;
92304 phandlers->send[PACKET_RULESET_GOVERNMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_government_100;
92307 phandlers->send[PACKET_RULESET_NATION_SETS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_sets_100;
92309 phandlers->send[PACKET_RULESET_NATION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_nation_100;
92310 phandlers->send[PACKET_NATION_AVAILABILITY].packet = (int(*)(struct connection *, const void *)) send_packet_nation_availability_100;
92311 phandlers->send[PACKET_RULESET_STYLE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_style_100;
92312 phandlers->send[PACKET_RULESET_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_city_100;
92313 phandlers->send[PACKET_RULESET_BUILDING].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_building_100;
92314 phandlers->send[PACKET_RULESET_IMPR_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_impr_flag_100;
92315 phandlers->send[PACKET_RULESET_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_terrain_100;
92317 phandlers->send[PACKET_RULESET_UNIT_CLASS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_unit_class_100;
92318 phandlers->send[PACKET_RULESET_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_100;
92319 phandlers->send[PACKET_RULESET_EXTRA_FLAG].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_extra_flag_100;
92320 phandlers->send[PACKET_RULESET_BASE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_base_100;
92321 phandlers->send[PACKET_RULESET_ROAD].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_road_100;
92322 phandlers->send[PACKET_RULESET_GOODS].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_goods_100;
92323 phandlers->send[PACKET_RULESET_DISASTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_disaster_100;
92324 phandlers->send[PACKET_RULESET_ACHIEVEMENT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_achievement_100;
92325 phandlers->send[PACKET_RULESET_TRADE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_trade_100;
92326 phandlers->send[PACKET_RULESET_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_100;
92328 phandlers->send[PACKET_RULESET_ACTION_AUTO].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_action_auto_100;
92329 phandlers->send[PACKET_RULESET_COUNTER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_counter_100;
92330 phandlers->send[PACKET_RULESET_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_music_100;
92331 phandlers->send[PACKET_RULESET_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_multiplier_100;
92332 phandlers->send[PACKET_RULESET_CLAUSE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_clause_100;
92333 phandlers->send[PACKET_RULESET_CONTROL].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_control_100;
92334 phandlers->send[PACKET_RULESET_SUMMARY].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_summary_100;
92337 phandlers->send[PACKET_RULESET_CHOICES].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_choices_100;
92338 phandlers->send[PACKET_GAME_LOAD].packet = (int(*)(struct connection *, const void *)) send_packet_game_load_100;
92341 phandlers->send[PACKET_SERVER_SETTING_BOOL].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_bool_100;
92342 phandlers->send[PACKET_SERVER_SETTING_INT].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_int_100;
92343 phandlers->send[PACKET_SERVER_SETTING_STR].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_str_100;
92344 phandlers->send[PACKET_SERVER_SETTING_ENUM].packet = (int(*)(struct connection *, const void *)) send_packet_server_setting_enum_100;
92346 phandlers->send[PACKET_SET_TOPOLOGY].packet = (int(*)(struct connection *, const void *)) send_packet_set_topology_100;
92347 phandlers->send[PACKET_RULESET_EFFECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_effect_100;
92348 phandlers->send[PACKET_RULESET_RESOURCE].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_resource_100;
92349 phandlers->send[PACKET_SCENARIO_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_scenario_info_100;
92351 phandlers->send[PACKET_VOTE_NEW].packet = (int(*)(struct connection *, const void *)) send_packet_vote_new_100;
92352 phandlers->send[PACKET_VOTE_UPDATE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_update_100;
92353 phandlers->send[PACKET_VOTE_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_remove_100;
92354 phandlers->send[PACKET_VOTE_RESOLVE].packet = (int(*)(struct connection *, const void *)) send_packet_vote_resolve_100;
92355 phandlers->send[PACKET_EDIT_FOGOFWAR_STATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_fogofwar_state_100;
92356 phandlers->send[PACKET_EDIT_OBJECT_CREATED].packet = (int(*)(struct connection *, const void *)) send_packet_edit_object_created_100;
92357 phandlers->send[PACKET_PLAY_MUSIC].packet = (int(*)(struct connection *, const void *)) send_packet_play_music_100;
92358 phandlers->send[PACKET_POPUP_IMAGE].packet = (int(*)(struct connection *, const void *)) send_packet_popup_image_100;
92359 phandlers->send[PACKET_SYNC_SERIAL_REPLY].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_reply_100;
92360 phandlers->send[PACKET_WEB_CITY_INFO_ADDITION].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_web_city_info_addition_100;
92368 phandlers->receive[PACKET_CITY_SELL] = (void *(*)(struct connection *)) receive_packet_city_sell_100;
92369 phandlers->receive[PACKET_CITY_BUY] = (void *(*)(struct connection *)) receive_packet_city_buy_100;
92401 phandlers->receive[PACKET_REPORT_REQ] = (void *(*)(struct connection *)) receive_packet_report_req_100;
92402 phandlers->receive[PACKET_CONN_PONG] = (void *(*)(struct connection *)) receive_packet_conn_pong_100;
92411 phandlers->receive[PACKET_EDIT_MODE] = (void *(*)(struct connection *)) receive_packet_edit_mode_100;
92417 phandlers->receive[PACKET_EDIT_TILE] = (void *(*)(struct connection *)) receive_packet_edit_tile_100;
92421 phandlers->receive[PACKET_EDIT_UNIT] = (void *(*)(struct connection *)) receive_packet_edit_unit_100;
92424 phandlers->receive[PACKET_EDIT_CITY] = (void *(*)(struct connection *)) receive_packet_edit_city_100;
92429 phandlers->receive[PACKET_EDIT_GAME] = (void *(*)(struct connection *)) receive_packet_edit_game_100;
92434 } else {
92435 phandlers->send[PACKET_SERVER_JOIN_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_server_join_req_100;
92437 phandlers->send[PACKET_NATION_SELECT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_nation_select_req_100;
92438 phandlers->send[PACKET_PLAYER_READY].packet = (int(*)(struct connection *, const void *)) send_packet_player_ready_100;
92439 phandlers->send[PACKET_CHAT_MSG_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_chat_msg_req_100;
92440 phandlers->send[PACKET_CITY_SELL].packet = (int(*)(struct connection *, const void *)) send_packet_city_sell_100;
92441 phandlers->send[PACKET_CITY_BUY].packet = (int(*)(struct connection *, const void *)) send_packet_city_buy_100;
92442 phandlers->send[PACKET_CITY_CHANGE].packet = (int(*)(struct connection *, const void *)) send_packet_city_change_100;
92443 phandlers->send[PACKET_CITY_WORKLIST].packet = (int(*)(struct connection *, const void *)) send_packet_city_worklist_100;
92445 phandlers->send[PACKET_CITY_MAKE_WORKER].packet = (int(*)(struct connection *, const void *)) send_packet_city_make_worker_100;
92447 phandlers->send[PACKET_CITY_RENAME].packet = (int(*)(struct connection *, const void *)) send_packet_city_rename_100;
92448 phandlers->send[PACKET_CITY_OPTIONS_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_city_options_req_100;
92449 phandlers->send[PACKET_CITY_REFRESH].packet = (int(*)(struct connection *, const void *)) send_packet_city_refresh_100;
92451 phandlers->send[PACKET_PLAYER_PHASE_DONE].packet = (int(*)(struct connection *, const void *)) send_packet_player_phase_done_100;
92452 phandlers->send[PACKET_PLAYER_RATES].packet = (int(*)(struct connection *, const void *)) send_packet_player_rates_100;
92454 phandlers->send[PACKET_PLAYER_PLACE_INFRA].packet = (int(*)(struct connection *, const void *)) send_packet_player_place_infra_100;
92456 phandlers->send[PACKET_PLAYER_MULTIPLIER].packet = (int(*)(struct connection *, const void *)) send_packet_player_multiplier_100;
92457 phandlers->send[PACKET_PLAYER_RESEARCH].packet = (int(*)(struct connection *, const void *)) send_packet_player_research_100;
92458 phandlers->send[PACKET_PLAYER_TECH_GOAL].packet = (int(*)(struct connection *, const void *)) send_packet_player_tech_goal_100;
92459 phandlers->send[PACKET_UNIT_SSCS_SET].packet = (int(*)(struct connection *, const void *)) send_packet_unit_sscs_set_100;
92460 phandlers->send[PACKET_UNIT_ORDERS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_orders_100;
92462 phandlers->send[PACKET_UNIT_ACTION_QUERY].packet = (int(*)(struct connection *, const void *)) send_packet_unit_action_query_100;
92463 phandlers->send[PACKET_UNIT_TYPE_UPGRADE].packet = (int(*)(struct connection *, const void *)) send_packet_unit_type_upgrade_100;
92464 phandlers->send[PACKET_UNIT_DO_ACTION].packet = (int(*)(struct connection *, const void *)) send_packet_unit_do_action_100;
92465 phandlers->send[PACKET_UNIT_GET_ACTIONS].packet = (int(*)(struct connection *, const void *)) send_packet_unit_get_actions_100;
92473 phandlers->send[PACKET_REPORT_REQ].packet = (int(*)(struct connection *, const void *)) send_packet_report_req_100;
92474 phandlers->send[PACKET_CONN_PONG].no_packet = (int(*)(struct connection *)) send_packet_conn_pong_100;
92476 phandlers->send[PACKET_CLIENT_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_client_info_100;
92478 phandlers->send[PACKET_SPACESHIP_PLACE].packet = (int(*)(struct connection *, const void *)) send_packet_spaceship_place_100;
92480 phandlers->send[PACKET_RULESET_SELECT].packet = (int(*)(struct connection *, const void *)) send_packet_ruleset_select_100;
92481 phandlers->send[PACKET_SAVE_SCENARIO].packet = (int(*)(struct connection *, const void *)) send_packet_save_scenario_100;
92482 phandlers->send[PACKET_VOTE_SUBMIT].packet = (int(*)(struct connection *, const void *)) send_packet_vote_submit_100;
92483 phandlers->send[PACKET_EDIT_MODE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_mode_100;
92487 phandlers->send[PACKET_EDIT_TILE_TERRAIN].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_terrain_100;
92488 phandlers->send[PACKET_EDIT_TILE_EXTRA].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_extra_100;
92489 phandlers->send[PACKET_EDIT_TILE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_tile_100;
92490 phandlers->send[PACKET_EDIT_UNIT_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_create_100;
92491 phandlers->send[PACKET_EDIT_UNIT_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_remove_100;
92493 phandlers->send[PACKET_EDIT_UNIT].packet = (int(*)(struct connection *, const void *)) send_packet_edit_unit_100;
92494 phandlers->send[PACKET_EDIT_CITY_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_create_100;
92495 phandlers->send[PACKET_EDIT_CITY_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_remove_100;
92496 phandlers->send[PACKET_EDIT_CITY].packet = (int(*)(struct connection *, const void *)) send_packet_edit_city_100;
92497 phandlers->send[PACKET_EDIT_PLAYER_CREATE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_create_100;
92498 phandlers->send[PACKET_EDIT_PLAYER_REMOVE].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_remove_100;
92499 phandlers->send[PACKET_EDIT_PLAYER].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_100;
92500 phandlers->send[PACKET_EDIT_PLAYER_VISION].packet = (int(*)(struct connection *, const void *)) send_packet_edit_player_vision_100;
92501 phandlers->send[PACKET_EDIT_GAME].packet = (int(*)(struct connection *, const void *)) send_packet_edit_game_100;
92502 phandlers->send[PACKET_EDIT_SCENARIO_DESC].packet = (int(*)(struct connection *, const void *)) send_packet_edit_scenario_desc_100;
92503 phandlers->send[PACKET_SYNC_SERIAL].packet = (int(*)(struct connection *, const void *)) send_packet_sync_serial_100;
92504 phandlers->send[PACKET_WEB_CMA_SET].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_set_100;
92505 phandlers->send[PACKET_WEB_CMA_CLEAR].packet = (int(*)(struct connection *, const void *)) send_packet_web_cma_clear_100;
92515 phandlers->receive[PACKET_TILE_INFO] = (void *(*)(struct connection *)) receive_packet_tile_info_100;
92516 phandlers->receive[PACKET_GAME_INFO] = (void *(*)(struct connection *)) receive_packet_game_info_100;
92519 phandlers->receive[PACKET_MAP_INFO] = (void *(*)(struct connection *)) receive_packet_map_info_100;
92523 phandlers->receive[PACKET_CHAT_MSG] = (void *(*)(struct connection *)) receive_packet_chat_msg_100;
92539 phandlers->receive[PACKET_UNIT_INFO] = (void *(*)(struct connection *)) receive_packet_unit_info_100;
92549 phandlers->receive[PACKET_PAGE_MSG] = (void *(*)(struct connection *)) receive_packet_page_msg_100;
92551 phandlers->receive[PACKET_CONN_INFO] = (void *(*)(struct connection *)) receive_packet_conn_info_100;
92553 phandlers->receive[PACKET_CONN_PING] = (void *(*)(struct connection *)) receive_packet_conn_ping_100;
92554 phandlers->receive[PACKET_END_PHASE] = (void *(*)(struct connection *)) receive_packet_end_phase_100;
92556 phandlers->receive[PACKET_NEW_YEAR] = (void *(*)(struct connection *)) receive_packet_new_year_100;
92557 phandlers->receive[PACKET_BEGIN_TURN] = (void *(*)(struct connection *)) receive_packet_begin_turn_100;
92558 phandlers->receive[PACKET_END_TURN] = (void *(*)(struct connection *)) receive_packet_end_turn_100;
92606 phandlers->receive[PACKET_GAME_LOAD] = (void *(*)(struct connection *)) receive_packet_game_load_100;
92619 phandlers->receive[PACKET_VOTE_NEW] = (void *(*)(struct connection *)) receive_packet_vote_new_100;
92625 phandlers->receive[PACKET_PLAY_MUSIC] = (void *(*)(struct connection *)) receive_packet_play_music_100;
92631 }
92632}
92633
92635 const char *capability)
92636{
92637 if (is_server()) {
92638 if (!has_capability("hap2clnt", capability)) {
92639 log_packet_detailed("PACKET_CITY_INFO: using variant=100 cap=%s", capability);
92640 phandlers->send[PACKET_CITY_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_info_100;
92641 } else if (has_capability("hap2clnt", capability)) {
92642 log_packet_detailed("PACKET_CITY_INFO: using variant=101 cap=%s", capability);
92643 phandlers->send[PACKET_CITY_INFO].force_to_send = (int(*)(struct connection *, const void *, bool)) send_packet_city_info_101;
92644 } else {
92645 log_error("Unknown PACKET_CITY_INFO variant for cap %s", capability);
92646 }
92647 if (!has_capability("tu32", capability)) {
92648 log_packet_detailed("PACKET_PLAYER_INFO: using variant=100 cap=%s", capability);
92649 phandlers->send[PACKET_PLAYER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_player_info_100;
92650 } else if (has_capability("tu32", capability)) {
92651 log_packet_detailed("PACKET_PLAYER_INFO: using variant=101 cap=%s", capability);
92652 phandlers->send[PACKET_PLAYER_INFO].packet = (int(*)(struct connection *, const void *)) send_packet_player_info_101;
92653 } else {
92654 log_error("Unknown PACKET_PLAYER_INFO variant for cap %s", capability);
92655 }
92656 } else {
92657 if (!has_capability("hap2clnt", capability)) {
92658 log_packet_detailed("PACKET_CITY_INFO: using variant=100 cap=%s", capability);
92659 phandlers->receive[PACKET_CITY_INFO] = (void *(*)(struct connection *)) receive_packet_city_info_100;
92660 } else if (has_capability("hap2clnt", capability)) {
92661 log_packet_detailed("PACKET_CITY_INFO: using variant=101 cap=%s", capability);
92662 phandlers->receive[PACKET_CITY_INFO] = (void *(*)(struct connection *)) receive_packet_city_info_101;
92663 } else {
92664 log_error("Unknown PACKET_CITY_INFO variant for cap %s", capability);
92665 }
92666 if (!has_capability("tu32", capability)) {
92667 log_packet_detailed("PACKET_PLAYER_INFO: using variant=100 cap=%s", capability);
92669 } else if (has_capability("tu32", capability)) {
92670 log_packet_detailed("PACKET_PLAYER_INFO: using variant=101 cap=%s", capability);
92672 } else {
92673 log_error("Unknown PACKET_PLAYER_INFO variant for cap %s", capability);
92674 }
92675 }
92676}
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)
static int send_packet_city_info_101(struct connection *pc, const struct packet_city_info *packet, bool force_to_send)
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)
static struct packet_city_info * receive_packet_city_info_101(struct connection *pc)
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